Слой Кохонена и его реализация в MATLAB

Самоорганизующаяся нейронная сеть, названная слоем Кохонена, была предложена в 1982 году Туево Кохоненым и является простейшей моделью в классе сетей Кохонена. Структура очень проста и представляет собой один слой адаптивных линейных сумматоров, работающих по принципу WTA – Winner Takes All, или «Победитель забирает все». Другими словами, нейрон, имеющий наибольший сигнал на входном векторе, идентифицирует класс, к которому нейронная сеть относит этот входной вектор.


Основная задача, решаемая с ее помощью, — это задача кластеризации. Если требуется разбить множество m-мерных векторов на k кластеров, то нужно построить сеть с m входными нейронами и k выходными нейронами и обучить ее на предложенном множестве.

Архитектура слоя Кохонена

Что мне нравится в этой сети, так это то, что ее можно «пощупать». После обучения нейроны слоя Кохонена имеют веса, максимально приближенные к векторам кластеров, которые они определяют. Можно сказать, веса выходного кластера составляют вектор-центр, ядро кластера (ассоциация с методом кластеризации «динамических ядер»). Это делает работу сети «прозрачной», понятной для пользователя.

Обучение сети можно провести различными способами:

  • WTA (аналог алгоритма Ллойда)
  • WTM (Winner Takes Most)
    • Алгоритм Кохонена
    • Алгоритм нейронного газа
  • Другие алгоритмы, про которые я пока что не знаю

Алгоритм WTA заключается в следующем: нейрон, выигравший при обучении на некотором входном векторе, изменяет свои веса в направлении этого вектора согласно правилу:

При этом часто выигрывающие нейроны могут «уставать», давая возможность нейронам с малой активностью изменять свои веса.
Алгоритм WTM отличается от WTA тем, что на шаге обучения веса изменяют несколько нейронов, а не только нейрон-победитель. Чем дальше нейрон находится от победителя, тем меньше изменяются его веса:

Если в этой формуле

то получится описанный выше алгоритм WTA
В классическом алгоритме Кохонена нейроны связываются между собой отношением соседства, определяемом при инициализации случайными значениями. При обучении веса изменяются не только у нейрона-победителя, но и у его соседей. Функция соседства может быть различной, например, прямоугольной или гауссовской.

Алгоритм нейронного газа отличается от алгоритма Кохонена определением соседства. Нейроны считаются близкими друг к другу, если их ответы на входной вектор схожи. На каждой итерации нейроны сортируются в зависимости от расстояния от входного вектора, первым в списке стоит нейрон-победитель. Функция соседства имеет вид:

Алгоритм нейронного газа ассоциируется с работой нечеткой системы, в которой каждому нейрону приписывается значение функции принадлежности как соседства. Для ускорения обучения параметр варьируют, уменьшая по мере обучения.

В MATLAB для создания слоя Кохонена используется функция newc(PR,S,KLR,CLR), где
PR – границы значений координат входных векторов,
S – количество выходных векторов,
KLR – параметр обучения Кохонена, по умолчанию 0,01
CLR – параметр «усталости», по умолчанию 0,001
Например, my_net = newc ([0 1; 0 1; 0 1], 3);

Обучение сети происходит в соответствии с установленными параметрами с помощью функции train(net, X), где X – это задачник. Алгоритм обучения задается так:
my__net.trainFcn = trainr; — для случайного порядка подачи примеров задачника, trains – для последовательного порядка.
my_net.inputWeights{i,j}.learnFcn = learnk; — это алгоритм Кохонена, используется по умолчанию.

Добавить комментарий