Жизненный цикл нейросетей Кохонена состоит из трех стадий: обучения, кластерного анализа и практического использования. Для поступившего входного сигнала ищется соответствие, то есть узел сети, вектор веса которого меньше всего отличается от данных наблюдения. Если таких узлов несколько, один из них выбирается случайным образом. Эти узлы называются «победителями», и их веса меняются по заранее составленной аналитиком формуле. Так и происходит самообучение системы.
На практике это работает так. Допустим, у нас есть данные о студентах и оценках, которые они получили на зачетах, и мы хотим составить табличку с четырьмя «кластерами». В первый кластер войдут удовлетворительно успевающие студенты-девушки, не имеющие одного или нескольких зачетов и не получающие стипендию, а во второй —хорошо успевающие студенты-девушки, имеющие все зачеты и в большинстве своем получающие стипендию. В третьем и четвертом кластере будут данные, соответственно, для парней со стипендией и без.
Наша задача — создать нейросеть и обучить ее так, что при вводе данных студента она будет сама относить его к той или иной категории.
Как это работает? Вначале заполняется таблица исходной выборки данных по каждому студенту, с указанием его или ее пола, сдала ли она все зачеты, какие оценки зачетов имеются по каждому предмету (допустим, их пять) и получает ли он или она стипендию. Допустим, у нас есть данные по группе из 20 студентов. Всего получается 8 переменных, из которых одна —наличие стипендии — не важна для обучения сети, но будет учтена при кластерном анализе. Таким образом, структурно сеть будет состоять из единственного слоя нейронов, имеющего 7 входов и 4 выхода.
Сначала исходная таблица нормализуется, то есть приводится в соответствие с пределами значений показателей. При этом входам нейронов присваивается то или иное случайное значение. Размер нормализованной таблицы будет 20 на 7 — в каждой ячейке лежит показатель для данного студента или студентки по всем 7 переменным. Затем составляется таблица значений весовых коэффициентов для каждого узла сети. Веса выражают то, что мы, собственно, хотим добиться — то есть чтобы в первый кластер (первую строку таблицы весов) попали девушки, не сдавшие все зачеты, с оценками «удовлетворительно» по сданным предметам, во второй — уже девушки, сдавшие все зачеты и имеющие «хорошо» или «отлично» и так далее.
Затем настраивается алгоритм самообучения. Для этого выбирается коэффициент скорости обучения, число «эпох» обучения и сколько корректировок весов нейронов будет произведено в каждой эпохе. Допустим, мы выбрали 6 эпох обучения с различным коэффициентом скорости, на каждой из которых будет 20 корректировок весов одного из нейронов — ведь у нас в таблице 20 студентов и студенток.
Далее мы по очереди выпускаем на арену всех парней и девушек. Нейроны Кохонена можно воспринимать как набор электрических лампочек, так что для любого входного вектора загорается одна из них. Берем наугад пример номер 10 из нормализованной таблицы (студент Нетреба, зачеты не сдал), и по формулам находим расстояния от Нетребы до текущих центров каждого из четырех кластеров. Получается, он ближе всего к кластеру 3 (неуспевающие студенты-юноши, не имеющие одного или нескольких зачетов и не получающие стипендию). Таким образом, третий нейрон — победитель и его веса должны быть скорректированы, также по заданной заранее формуле. Веса остальных нейронов при этом не меняются.
Таким образом мы прогоняем через нашу сеть все 20 примеров по списку, от Варданян до Шевченко. И переписываем все веса. После этого начинается следующая эпоха обучения, меняем в формулах коэффициент скорости и снова прогоняем всех по кругу. И наконец ура! — полный цикл обучения сети Кохонена пройден, и мы получаем итоговые значения весов. В первом кластере у нас один человек, во втором — 8, в третьем — 7, в четвертом — 4. О чем это говорит? Это говорит о том, что девушки у нас очень усидчивые и сдают предметы хорошо. Только у одной проблемы, может ей помочь? А с парнями ситуация плоха: разгильдяи. Как это исправить? Это, пожалуй, проблема для искусственного интеллекта следующего уровня, но вот довольно простенькая нейросеть, придуманная финном Кохоненом в 1980-е годы, дает вполне приличный результат, особенно при наличии хорошей вычислительной техники, поскольку все это в столбик никак не обсчитать.