Самоорганизующиеся карты Кохонена. Часть 1.

Всем доброго дня!

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

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

Нейронные сети

Итак, давайте для начал обсудим, какие же задачи должны выполнять нейронные сети Кохонена. Основным их назначением является кластеризация образцов, то есть разделение образцов на группы (кластеры) по тем или иным признакам. Например, перед нами может стоять задача классификации спортсменов по виду спорта, которым они занимаются. Тут подходящими признаками могут быть рост, вес, время, за которое спортсмен пробегает стометровку и т. д. =) Если пропустить «параметры» всех спортсменов через сеть Кохонена, то на выходе мы получим определенное количество групп, при этом должны выполняться следующие условия:

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

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

Нейронная сеть Кохонена в отличие от рассмотренных нами ранее сетей обучается без учителя и носит название самоорганизующейся карты Кохонена (SOFM — Self-Organizing Feature Map). Давайте познакомимся с ее структурой поближе.

Карты Кохонена имеют набор входных элементов, количество которых совпадает с размерностью подаваемых на вход векторов, и набор выходных элементов, каждый их которых соответствует одному кластеру (группе). Если мы анализируем спортсменов по 4 признакам — скорость бега, рост, вес, выносливость, то, соответственно, мы должны иметь 4 входа, по одному для каждого признака. В этом случае в качестве входного вектора выступает один из спортсменов, а его координатами являются значения его признаков. Не знаю, удачную ли я выбрал аналогию, но надеюсь, что на таких примерах станет понятнее суть работы самоорганизующихся карт Кохонена )

Сеть Кохонена

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

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

Но прежде, чем переходить к обсуждению тонкостей обучения сетей Кохонена, давайте разберемся, как вообще сеть должна работать…

При подаче какого-либо вектора на вход сеть должна определить, к какому из кластеров этот вектор ближе всего. В качестве критерия близости может быть выбран критерий минимальности квадрата евклидова расстояния. Рассмотрим входной вектор как точку в n-мерном пространстве (n — количество координат вектора, это число равно числу входных нейронов, как мы обсуждали ранее). Тогда нам нужно вычислить расстояние между этой точкой и центрами разных кластеров и определить, расстояние до какого из кластеров окажется минимальным. Тогда этот кластер (и соответствующий ему выходной нейрон) объявляется победителем.

А какая же точка является центром кластера и какие у нее координаты в этом пространстве? Тут все очень изящно =) Координатами центра кластера являются величины весов всех связей, которые приходят к данному выходному нейрону от входных элементов. Поскольку каждый выходной нейрон (кластер) соединен с каждым входным нейроном, то мы получаем, n связей, то есть n координат для точки, соответствующей центру кластера. Формула для вычисления квадрата евклидова расстояния выглядит следующим образом:

    \[ d_{pk} = \sum_{i=0}^{n}{(x_{pi} - x_{ki})^2} \]

Здесь d_{pk} — квадрат расстояния между точкой P и кластером K. Координаты точки P — {x_{p1}, x_{p2}...x_{pn}}, а координаты центра кластера K — {x_{k1}, x_{k2}...x_{kn}}.

Таким образом, подав вектор на вход сети мы получим один кластер-победитель, соответственно, этот вектор будет принадлежать именно к этому кластеру (группе). Именно так карты Кохонена решают задачу классификации.

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

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

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

Для корректировки весов используется следующая формула:

    \[ w_{ij}(t+1) = w_{ij}(t) + \eta(t)(x_i - w_{ij}(t)) \]

В этой формуле w_{ij}(t+1) — вес на шаге t+1, а w_{ij}(t) — вес на шаге t (то есть на предыдущем). \eta — норма обучения, а x_i — координата входного вектора. Обратите внимание, что норма обучения также зависит от номера шага и меняется в процессе обучения. Кроме того, меняется и радиус, определяющий какое количество элементов сети будут подвергнуты корректировке весов. Давайте разберем поподробнее, что определяет это радиус.

Выходные (кластерные) элементы сети Кохонена обычно представляют расположенными тем или иным образом  в двумерном пространстве. Разместим, к примеру, выходные элементы в виде квадратной сетки и зададим начальный радиус обучения равным 2. Подаем на вход сети вектор и элементом-победителем оказывается нейрон, обозначенный на схеме красным цветом. По алгоритму обучения мы должны обновить значения весов для этого нейрона, а также для тех, которые попадают в круг заданного радиуса (в данном случае 2) — эти элементы выделены зеленым.

Радиус обучения

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

Обучение

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

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

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

На этом моменте предлагаю сегодня остановиться, поскольку статья получилась довольно большой ) Мы обязательно продолжим изучать карты Кохонена в следующей статье!

Понравилась статья? Поделись с друзьями!

Самоорганизующиеся карты Кохонена. Часть 1.: 1 комментарий

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *