exponenta event banner

Кластер с самоорганизующейся картой нейронной сети

Самоорганизующиеся карты элементов (SOFM) учатся классифицировать входные векторы в соответствии с тем, как они сгруппированы во входном пространстве. Они отличаются от конкурентных слоев тем, что соседние нейроны на самоорганизующейся карте учатся распознавать соседние участки входного пространства. Таким образом, самоорганизующиеся карты изучают как распределение (как и конкурентные уровни), так и топологию входных векторов, на которых они обучаются.

Нейроны в слое SOFM первоначально располагаются в физических положениях в соответствии с топологической функцией. Функция gridtop, hextop, или randtop может расположить нейроны в сетке, шестиугольной или случайной топологии. Расстояния между нейронами вычисляются по их позициям с помощью функции расстояния. Существует четыре функции расстояния, dist, boxdist, linkdist, и mandist. Расстояние канала является наиболее распространенным. Эти функции топологии и расстояния описаны в Topologies (gridtop, hextop, randtop) и Distance Functions (dist, linkdist, mandist, boxdist).

Здесь самоорганизующаяся сеть карты признаков идентифицирует выигрышный нейрон i *, используя ту же процедуру, что и используемый конкурентным уровнем. Однако вместо обновления только выигрышного нейрона обновляются все нейроны в пределах определенной окрестности Ni * (d) выигрышного нейрона, используя правило Кохонена. В частности, все такие нейроны i Ni * (d) регулируются следующим образом:

wi (q) = wi (q 1) + α (p (q) − wi (q − 1))

или

wi (q) = (1 α) wi (q 1) + αp (q)

Здесь окрестность Ni * (d) содержит индексы для всех нейронов, которые лежат в радиусе d выигрышного нейрона i *.

Ni (d) ={j,dij≤d}

Таким образом, когда представлен вектор p, веса выигрышного нейрона и его близких соседей движутся к p. Следовательно, после многих представлений соседние нейроны изучили векторы, похожие друг на друга.

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

Чтобы проиллюстрировать концепцию окрестностей, рассмотрим рисунок ниже. Левая диаграмма показывает двумерную окрестность радиуса d = 1 вокруг нейрона 13. Правая диаграмма показывает окрестность радиуса d = 2.

Эти окрестности могут быть записаны как N13 (1) = {8, 12, 13, 14, 18} и
N13 (2) = {3, 7, 8, 9, 11, 12, 13, 14, 15, 17, 18, 19, 23}.

Нейроны в SOFM не должны располагаться в двумерной структуре. Можно использовать одномерное расположение или три или более размеров. Для одномерного SOFM нейрон имеет только два соседа в радиусе 1 (или единственный сосед, если нейрон находится в конце линии). Можно также определить расстояние различными способами, например, используя прямоугольные и шестиугольные расположения нейронов и окрестностей. Производительность сети не чувствительна к точной форме окрестностей.

Топологии (gridtop, hextop, randtop)

Вы можете указать различные топологии для исходных местоположений нейронов с функциями gridtop, hextop, и randtop.

gridtop топология начинается с нейронов в прямоугольной сетке, аналогичной показанной на предыдущем рисунке. Например, предположим, что вам нужен массив 2 на 3 из шести нейронов. Вы можете получить это с помощью

pos = gridtop([2, 3])
pos =
     0     1     0     1     0     1
     0     0     1     1     2     2

Здесь нейрон 1 имеет положение (0,0), нейрон 2 имеет положение (1,0), и нейрон 3 имеет положение (0,1) и т.д.

Обратите внимание, что вы попросили gridtop при изменении размеров на противоположный, получилась бы несколько иная компоновка:

pos = gridtop([3, 2])
pos =
     0     1     2     0     1     2
     0     0     0     1     1     1

Вы можете создать набор нейронов 8 на 10 в gridtop топология со следующим кодом:

pos = gridtop([8 10]);
plotsom(pos)

Figure contains an axes. The axes with title Neuron Positions contains 2 objects of type line.

Как показано, нейроны в gridtop топология действительно лежит на сетке.

hextop функция создает подобный набор нейронов, но они находятся в шестиугольной структуре. Шаблон 2 на 3 hextop нейроны генерируются следующим образом:

pos = hextop([2, 3])
pos =
         0    1.0000    0.5000    1.5000         0    1.0000
         0         0    0.8660    0.8660    1.7321    1.7321 

Обратите внимание, что hextop - шаблон по умолчанию для сетей SOM, сгенерированных с помощью selforgmap.

Вы можете создать и построить график набора нейронов 8 на 10 в hextop топология со следующим кодом:

pos = hextop([8 10]);
plotsom(pos)

Figure contains an axes. The axes with title Neuron Positions contains 2 objects of type line.

Обратите внимание на положение нейронов в шестиугольном расположении.

Наконец, randtop функция создает нейроны в N-мерной случайной картине. Следующий код генерирует случайную картину нейронов.

pos = randtop([2, 3])
pos =
         0    0.7620    0.6268    1.4218    0.0663    0.7862
    0.0925         0    0.4984    0.6007    1.1222    1.4228

Вы можете создать и построить график набора нейронов 8 на 10 в randtop топология со следующим кодом:

pos = randtop([8 10]);
plotsom(pos)

Figure contains an axes. The axes with title Neuron Positions contains 2 objects of type line.

Примеры см. в справке по этим функциям топологии.

Функции расстояния (dist, linkdist, mandist, boxdist)

В этой панели инструментов есть четыре способа рассчитать расстояния от конкретного нейрона до его соседей. Каждый метод расчета реализуется с помощью специальной функции.

dist функция вычисляет евклидовы расстояния от домашнего нейрона до других нейронов. Предположим, у вас есть три нейрона:

pos2 = [0 1 2; 0 1 2]
pos2 =
     0     1     2
     0     1     2

Вы находите расстояние от каждого нейрона до другого с

D2 = dist(pos2)
D2 =
         0    1.4142    2.8284
    1.4142         0    1.4142
    2.8284    1.4142         0

Таким образом, расстояние от нейрона 1 до самого себя равно 0, расстояние от нейрона 1 до нейрона 2 - 1,4142 и т. д.

График ниже показывает домашний нейрон в двумерном (gridtop) слой нейронов. Домашний нейрон имеет окрестности увеличивающегося диаметра, окружающие его. Окрестность диаметром 1 включает в себя домашний нейрон и его непосредственных соседей. Окрестность диаметра 2 включает в себя диаметр 1 нейронов и их непосредственных соседей.

Что касается dist функция, все окрестности для карты слоя S-нейронов представлены матрицей расстояний S-by-S. Конкретные расстояния, показанные выше (1 в непосредственной близости, 2 в окрестности 2 и т.д.), генерируются функцией boxdist. Предположим, что у вас есть шесть нейронов в gridtop конфигурация.

pos = gridtop([2, 3])
pos =
     0     1     0     1     0     1
     0     0     1     1     2     2

Тогда расстояния между ящиками равны

d = boxdist(pos)
d =
     0     1     1     1     2     2
     1     0     1     1     2     2
     1     1     0     1     1     1
     1     1     1     0     1     1
     2     2     1     1     0     1
     2     2     1     1     1     0

Расстояние от нейрона 1 до 2, 3 и 4 составляет всего 1, поскольку они находятся в непосредственной близости. Расстояние от нейрона 1 до обоих 5 и 6 равно 2. Расстояние от 3 и 4 до всех остальных нейронов составляет всего 1.

Расстояние звена от одного нейрона - это только количество звеньев или шагов, которые должны быть предприняты, чтобы добраться до рассматриваемого нейрона. Таким образом, если вычислить расстояния от одного и того же набора нейронов с linkdist, вы получаете

dlink =
     0     1     1     2     2     3
     1     0     2     1     3     2
     1     2     0     1     1     2
     2     1     1     0     2     1
     2     3     1     2     0     1
     3     2     2     1     1     0

Расстояние Манхэттена между двумя векторами x и y вычисляется как

D = sum(abs(x-y))

Таким образом, если у вас есть

W1 = [1 2; 3 4; 5 6]
W1 =
     1     2
     3     4
     5     6

и

P1 = [1;1]
P1 =
     1
     1

затем вы получаете для расстояний

Z1 = mandist(W1,P1)
Z1 =
     1
     5
     9

Расстояния, рассчитанные с помощью mandist действительно следовать математическому выражению, приведенному выше.

Архитектура

Архитектура этого SOFM показана ниже.

Эта архитектура похожа на архитектуру конкурентной сети, за исключением того, что здесь не используется смещение. Функция конкурентной передачи создает 1 для выходного элемента a1i, соответствующего i *, выигрышному нейрону. Все остальные выходные элементы в a1 равны 0.

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

Создание самоорганизующейся карты нейронной сети (selforgmap)

С помощью этой функции можно создать новую сеть SOM. selforgmap. Эта функция определяет переменные, используемые в двух фазах обучения:

  • Скорость обучения на этапе заказа

  • Шаги этапа заказа

  • Скорость обучения по фазам настройки

  • Расстояние по соседству между фазами настройки

Эти значения используются для обучения и адаптации.

Рассмотрим следующий пример.

Предположим, что вы хотите создать сеть, имеющую входные векторы с двумя элементами, и что вы хотите иметь шесть нейронов в гексагональной сети 2 на 3. Код для получения этой сети:

net = selforgmap([2 3]);

Предположим, что векторы для обучения:

P = [.1 .3 1.2 1.1 1.8 1.7 .1 .3 1.2 1.1 1.8 1.7;...
0.2 0.1 0.3 0.1 0.3 0.2 1.8 1.8 1.9 1.9 1.7 1.8];

Можно настроить сеть для ввода данных и печати всех этих данных с помощью:

net = configure(net,P);
plotsompos(net,P)

Figure SOM Weight Positions (plotsompos) contains an axes. The axes with title SOM Weight Positions contains 3 objects of type line.

Зеленые пятна - это тренировочные векторы. Инициализация для selforgmap распределяет начальные веса по входному пространству. Обратите внимание, что первоначально они находятся на некотором расстоянии от обучающих векторов.

При моделировании сети вычисляются отрицательные расстояния между вектором веса каждого нейрона и входным вектором (negdist) для получения взвешенных входных данных. Взвешенные входы также являются чистыми входами (netsum). Чистые вводимые ресурсы конкурируют (compet) так, что только нейрон с наиболее положительным входным сигналом будет выводить 1.

Обучение (learnsomb)

Обучение по умолчанию на самоорганизующейся карте функций происходит в пакетном режиме (trainbu). Функция изучения веса для самоорганизующейся карты learnsomb.

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

Этап заказа

Эта фаза продолжается для заданного количества шагов. Расстояние окрестности начинается с заданного начального расстояния и уменьшается до расстояния окрестности настройки (1,0). Поскольку расстояние окрестности уменьшается в течение этой фазы, нейроны сети обычно упорядочиваются в пространстве ввода с той же топологией, в которой они упорядочены физически.

Фаза настройки

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

Теперь рассмотрим некоторые конкретные значения, обычно используемые в этих сетях.

Обучение происходит в соответствии с learnsomb параметр learning, показанный здесь со значением по умолчанию.

Параметр обучения

Значение по умолчанию

Цель

LP.init_neighborhood

3

Начальный размер окрестности

LP.steps

100

Этапы упорядочения

Размер района NS изменяется посредством двух фаз: фазы упорядочения и фазы настройки.

Фаза упорядочения длится столько шагов, сколько LP.steps. Во время этой фазы алгоритм настраивается ND от первоначального размера окрестности LP.init_neighborhood до 1. Именно во время этой фазы веса нейронов упорядочиваются в пространстве ввода, согласуясь с соответствующими положениями нейронов.

Во время фазы настройки ND меньше 1. Во время этой фазы ожидается, что веса будут распределяться относительно равномерно по входному пространству при сохранении их топологического порядка, обнаруженного во время фазы упорядочения.

Таким образом, весовые векторы нейрона первоначально делают большие шаги в направлении области входного пространства, где происходят входные векторы. Затем, когда размер окрестности уменьшается до 1, карта имеет тенденцию упорядочиваться топологически по представленным входным векторам. Как только размер окрестности равен 1, сеть должна быть достаточно хорошо упорядочена. Обучение продолжается, чтобы дать нейронам время равномерно распределиться по входным векторам.

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

Таким образом, карты элементов, обучаясь категоризации их входных данных, также изучают как топологию, так и распределение их входных данных.

Вы можете обучить сеть 1000 эпохам с помощью

net.trainParam.epochs = 1000;
net = train(net,P);
plotsompos(net,P)

Figure SOM Weight Positions (plotsompos) contains an axes. The axes with title SOM Weight Positions contains 3 objects of type line.

Вы можете видеть, что нейроны начали двигаться к различным тренировочным группам. Требуется дополнительная подготовка, чтобы приблизить нейроны к различным группам.

Как отмечалось ранее, самоорганизующиеся карты отличаются от обычного конкурентного обучения тем, какие нейроны обновляют свой вес. Вместо обновления только победителя карты элементов обновляют веса победителя и его соседей. В результате соседние нейроны имеют тенденцию иметь одинаковые весовые векторы и реагировать на аналогичные входные векторы.

Примеры

Ниже кратко описаны два примера. Можно также попробовать аналогичные примеры одномерная самоорганизующаяся карта и двумерная самоорганизующаяся карта.

Одномерная самоорганизующаяся карта

Рассмотрим 100 двухэлементных единичных входных векторов, равномерно распределенных между 0 ° и 90 °.

angles = 0:0.5*pi/99:0.5*pi;

Вот график данных.

P = [sin(angles); cos(angles)];

Самоорганизующаяся карта определяется как одномерный слой из 10 нейронов. Эта карта должна быть обучена этим входным векторам, показанным выше. Первоначально эти нейроны находятся в центре фигуры.

Конечно, потому что все весовые векторы начинаются в середине входного векторного пространства, все, что вы видите сейчас - это одна окружность.

Когда начинается обучение, весовые векторы движутся вместе к входным векторам. Они также становятся упорядоченными по мере уменьшения размера окрестностей. Наконец, слой регулирует свои веса так, что каждый нейрон сильно реагирует на область входного пространства, занятую входными векторами. Размещение соседних нейронных весовых векторов также отражает топологию входных векторов.

Обратите внимание, что самоорганизующиеся карты обучаются с входными векторами в случайном порядке, поэтому, начиная с тех же начальных векторов, не гарантирует идентичных результатов обучения.

Двумерная самоорганизующаяся карта

В этом примере показано, как можно обучить двухмерную самоорганизующуюся карту.

Сначала создаются случайные входные данные со следующим кодом:

P = rands(2,1000);

Вот график этих 1000 входных векторов.

Двумерная карта 5 на 6 из 30 нейронов используется для классификации этих входных векторов. Двумерная карта представляет собой пять нейронов с помощью шести нейронов с расстояниями, рассчитанными в соответствии с функцией окрестности Манхэттена mandist.

Затем карта обучается 5000 циклам представления с отображением каждые 20 циклов.

Вот как выглядит самоорганизующаяся карта после 40 циклов.

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

Вот карта после 120 циклов.

После 120 циклов карта начала организовываться в соответствии с топологией входного пространства, что ограничивает входные векторы.

Следующий график после 500 циклов показывает карту более равномерно распределенной по входному пространству.

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

Таким образом, двумерная самоорганизующаяся карта усвоила топологию пространства ее входов.

Важно отметить, что, хотя самоорганизующаяся карта не занимает много времени, чтобы организовать себя так, чтобы соседние нейроны распознавали подобные входы, может потребоваться много времени, чтобы карта окончательно расположилась в соответствии с распределением входных векторов.

Обучение с использованием пакетного алгоритма

Алгоритм пакетного обучения обычно намного быстрее алгоритма инкрементного обучения, и он является алгоритмом по умолчанию для обучения SOFM. С помощью этого алгоритма можно поэкспериментировать над простым набором данных с помощью следующих команд:

x = simplecluster_dataset
net = selforgmap([6 6]);
net = train(net,x);

Эта последовательность команд создает и обучает двумерную карту из 36 нейронов 6 на 6. Во время обучения появляется следующий рисунок.

Из этого окна можно получить доступ к нескольким полезным визуализациям. Если щелкнуть Положение веса SOM (SOM Weight Positions), появится следующий рисунок, на котором показаны расположения точек данных и векторов веса. Как показано на рисунке, после только 200 итераций пакетного алгоритма карта хорошо распределяется по входному пространству.

Если пространство ввода имеет большую размерность, невозможно одновременно визуализировать все веса. В этом случае щелкните Соседние расстояния SOM (SOM Neighbor Distances). На следующем рисунке показаны расстояния между соседними нейронами.

На этом рисунке используется следующее цветовое кодирование:

  • Голубые шестиугольники представляют нейроны.

  • Красные линии соединяют соседние нейроны.

  • Цвета в областях, содержащих красные линии, указывают расстояния между нейронами.

  • Более темные цвета представляют большие расстояния.

  • Более светлые цвета представляют меньшие расстояния.

Группа световых сегментов появляется в верхней левой области, ограниченной некоторыми более тёмными сегментами. Эта группировка указывает на то, что сеть объединила данные в две группы. Эти две группы можно увидеть на предыдущем рисунке весового положения. Нижняя правая область этого рисунка содержит небольшую группу плотно кластеризованных точек данных. Соответствующие веса являются более близкими друг к другу в этой области, которая обозначается более светлыми цветами на соседнем рисунке расстояния. Когда веса в этой небольшой области соединяются с большей областью, расстояния больше, как показано более темной полосой на рисунке соседнего расстояния. Сегменты в правой нижней области фигуры расстояния соседа темнее сегментов в левой верхней части. Это цветовое различие указывает на то, что точки данных в этой области находятся дальше друг от друга. Это расстояние подтверждается на рисунке весовых позиций.

Другая полезная цифра может сказать вам, сколько точек данных связано с каждым нейроном. Нажмите кнопку SOM Sample Hits, чтобы увидеть следующий рисунок. Лучше всего, если данные довольно равномерно распределены по нейронам. В этом примере данные сконцентрированы немного больше в верхних левых нейронах, но в целом распределение довольно равномерное.

Можно также визуализировать сами веса с помощью фигуры весовой плоскости. Щелкните SOM Weight Planes (Весовые плоскости SOM) в окне обучения, чтобы получить следующий рисунок. Существует весовая плоскость для каждого элемента входного вектора (два, в данном случае). Они представляют собой визуализации весов, которые соединяют каждый вход с каждым из нейронов. (Более светлый и темный цвета представляют больший и меньший вес соответственно.) Если шаблоны соединений двух входов очень похожи, можно предположить, что входы были сильно коррелированы. В этом случае вход 1 имеет соединения, которые сильно отличаются от соединений входа 2.

Можно также создать все предыдущие фигуры из командной строки. Выполните следующие команды печати: plotsomhits, plotsomnc, plotsomnd, plotsomplanes, plotsompos, и plotsomtop.