Участник:Anton goy/Самоорганизующиеся карты Кохонена: различия между версиями

Материал из Алговики
Перейти к навигации Перейти к поиску
Строка 27: Строка 27:
 
Пусть <math>\mathcal{L} = \left\{  \mathbf{x}_i \right\}_{i=1}^{N}</math> - некоторое подмножество точек пространства <math>\mathbb{R}^D</math>, <math>\mathbf{x}_i = \left(  x_{i}^{(1)}, \dots, x_{i}^{(D)} \right) \in \mathbb{R}^D</math>. В машинном обучении множество <math>\mathcal{L}</math> называют обучающей выборкой.  
 
Пусть <math>\mathcal{L} = \left\{  \mathbf{x}_i \right\}_{i=1}^{N}</math> - некоторое подмножество точек пространства <math>\mathbb{R}^D</math>, <math>\mathbf{x}_i = \left(  x_{i}^{(1)}, \dots, x_{i}^{(D)} \right) \in \mathbb{R}^D</math>. В машинном обучении множество <math>\mathcal{L}</math> называют обучающей выборкой.  
  
Для каждого Пусть <math>\mathbf{w}_{x,y} = \left( w_{x,y}^{(1)}, \dots, w_{x,y}^{(D)} \right) \in \mathbb{R}^D</math> - вектор весов соответствующий нейрону в позиции <math>(x, y)</math>.
+
Пусть задано <math>L = X \times Y</math> общее количество нейронов в слое Кохонена. И каждому нейрону <math>n_j</math> поствлен в соответствие вектор весов <math>\mathbf{w}_{j} = \left( w_{j}^{(1)}, \dots, w_{j}^{(D)} \right) \in \mathbb{R}^D</math> и вектор <math>\mathbf{r}_j \in \mathbb{R}^2</math>, определющий его положение на двумерной плоскости.
  
'''Алгоритм обучения:'''
+
'''Алгоритм обучения (online version):'''
  
1. Найти начальное приближение весов <math>\mathbf{w}_{x,y}</math>, для <math>\forall x=1, \dots, X</math> и <math>\forall y=1, \dots, Y</math>.
+
1. Задать начальные приближение весов <math>\mathbf{w}_{j}</math>, <math>\forall j=1, \dots, L</math>.
  
 
2. Выбрать случайно номер объекта <math>i \sim Unif[1, N]</math>.
 
2. Выбрать случайно номер объекта <math>i \sim Unif[1, N]</math>.
  
3. Для всех пар <math>(x, y)</math> найти расстояние между <math>\mathbf{x}_i</math> и вектором весов <math>\mathbf{w}_{x, y}</math>
+
3. Найти расстояние между объектом <math>\mathbf{x}_i</math> и всеми векторами весов <math>\mathbf{w}_{j}</math>
  
:<math>\rho(\mathbf{x}_i, \mathbf{w}_{x, y}) = \left\| \mathbf{x}_i - \mathbf{w}_{x, y} \right\|^2, \quad \forall x=1, \dots, X, \forall y=1, \dots, Y</math>
+
:<math>\rho(\mathbf{x}_i, \mathbf{w}_{j}) = \left\| \mathbf{x}_i - \mathbf{w}_{j} \right\|^2, \quad \forall j=1, \dots, L</math>
  
4. Найти нейрон-победитель <math>(x^*, y^*) = \arg \min_{\forall(x, y)} \rho(\mathbf{x}_i, \mathbf{w}_{x, y})</math>, наиболее близкий к текущему объекту <math>\mathbf{x}_i</math>.
+
4. Найти нейрон-победитель <math>n_b</math>, <math> b = \arg \min_{\forall j \in \{1, \dots, L\}} \rho(\mathbf{x}_i, \mathbf{w}_{j})</math>, наиболее близкий к текущему объекту <math>\mathbf{x}_i</math>.
  
5. Для всех неронов <math>(x, y)</math> пересчитать их веса по следующей формуле:
+
5. Для всех неронов <math>n_j</math> пересчитать их веса по следующей формуле:
:<math>\mathbf{w}_{x, y} \leftarrow \mathbf{w}_{x, y} + \alpha(t)h_{x^*, y^*}(t)(\mathbf{x}_i - \mathbf{w}_{x, y})</math>,
+
:<math>\mathbf{w}_{j} \leftarrow \mathbf{w}_{j} + \alpha(t)h_{b, j}(t)(\mathbf{x}_i - \mathbf{w}_{j})</math>,
где <math>\alpha(t)</math> - темп обучения (learning rate), монотонно убывающая функция от номера итерации <math>t</math>; <math>h_{x^*, y^*}(t) = </math>
+
где <math>\alpha(t)</math> - темп обучения (learning rate), монотонно убывающая функция от номера итерации <math>t</math>;  
 +
 
 +
<math>h_{b, j}(t)</math> - функция определяющая "меру соседства" нейронов <math>n_b</math> и <math>n_j</math>.
 +
 
 +
6. Проверить условие останова. При необходмости перейти на шаг 2.
 +
 
 +
Данное выше описание является довольно общим и не раскрывает некоторых деталей:
 +
* ''' Начальное приближение для <math>\mathbf{w}_j</math> '''
 +
** Инициализация случайными значениями. Самый простой способ - <math>w_j^{(d)} \sim Unif[0, 1]</math>.
 +
** Инициализация объектами обучающей выборки. Данный способ может позволить уменьшить количество итераций, так как вектора весов уже находятся в области пространства, где расположены объекты выборки.

Версия 16:38, 9 октября 2016


Автор: Гой Антон, 617 группа.

1 Свойства и структура алгоритмов

1.1 Общее описание алгоритма

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

Самоорганизующаяся карта Кохонена (англ. Self-Organizing Map или сокращено SOM) - это разновидность нейронных сетей, относящаяся к алгоритмам обучения без учителя. Основная цель - найти скрытые закономерности в данных по средством снижения размерности исходного пространства. Важным свойством карт Кохонена является то, что они строят отображение в пространство низкой размерности (обычно двумерное) таким образом, что топология исходного пространства сохраняется. Результат данного отображения - правильная решетка из обученных нейронов - называется "картой" исходного пространства. Алгоритм был разработан известным финским учёным, заслуженным академиком Финской Академии Наук Теуво Кохоненом в 1984(2) году. Карты Кохенана находят успешное применение в задачах кластеризации и визуализации, а также для снижения размерности и детектирования аномалий в данных.

Карты Кохонена и по своей архитектуре, и по методу обучения отличаются от обычных нейронных сетей прямого распространения. C точки зрения метода обучения, карты Кохонена не используют градиентные методы для минимизации ошибки (как это делается в сетях прямого распространения), поскольку являются алгоритмом обучения без учителя и никак не могут учитывать информацию и метках классов. Поэтому нейронная сеть обучается через соревнование между нейронами: на каждом шаге алгоритма для случайного объекта из обучающей выборки выбирается нейрон-победитель (best matching unit, BMU), который в определенном смысле наиболее похож на данный объект.

Рисунок 2б. Топология слоя Кохонена с прямоугольными ячейками
Рисунок 2а. Топология слоя Кохонена с шестиугольными ячейками

А архитектура карты Кохонена (Рис. 1) представляет два слоя: первый слой состоит из входных нейронов (их количество равно размерности исходного пространства), второй слой (его называют слоем Кохонена) представляет собой строго упорядоченную решетку, в узлах которой расположены нейроны-сумматоры, соедененные со всеми входами сети. Для визуализации топологии слоя Кохонена (Рис. 2) используют либо шестиугольные (Рис. 2а), либо прямоугольные (Рис. 2б) ячейки, в которых распологаются нейроны. Шестиугольные ячейки часто являются более предпочтительными, так как расстояние от центра выбранной ячейки до ее соседей одинаково.

Каждый нейрон [math]n_j[/math] слоя Кохонена описывается вектором весов [math]\mathbf{w}_j[/math], размерность которого совпадает с размерностью исходного пространства, и координатами нейрона на двумерной плоскости - [math]\mathbf{r}_j[/math].

Процесс обучения состоит в настройке векторов весов [math]\mathbf{w}_j[/math].

1.2 Математическое описание алгоритма

Пусть [math]\mathcal{L} = \left\{ \mathbf{x}_i \right\}_{i=1}^{N}[/math] - некоторое подмножество точек пространства [math]\mathbb{R}^D[/math], [math]\mathbf{x}_i = \left( x_{i}^{(1)}, \dots, x_{i}^{(D)} \right) \in \mathbb{R}^D[/math]. В машинном обучении множество [math]\mathcal{L}[/math] называют обучающей выборкой.

Пусть задано [math]L = X \times Y[/math] общее количество нейронов в слое Кохонена. И каждому нейрону [math]n_j[/math] поствлен в соответствие вектор весов [math]\mathbf{w}_{j} = \left( w_{j}^{(1)}, \dots, w_{j}^{(D)} \right) \in \mathbb{R}^D[/math] и вектор [math]\mathbf{r}_j \in \mathbb{R}^2[/math], определющий его положение на двумерной плоскости.

Алгоритм обучения (online version):

1. Задать начальные приближение весов [math]\mathbf{w}_{j}[/math], [math]\forall j=1, \dots, L[/math].

2. Выбрать случайно номер объекта [math]i \sim Unif[1, N][/math].

3. Найти расстояние между объектом [math]\mathbf{x}_i[/math] и всеми векторами весов [math]\mathbf{w}_{j}[/math]

[math]\rho(\mathbf{x}_i, \mathbf{w}_{j}) = \left\| \mathbf{x}_i - \mathbf{w}_{j} \right\|^2, \quad \forall j=1, \dots, L[/math]

4. Найти нейрон-победитель [math]n_b[/math], [math] b = \arg \min_{\forall j \in \{1, \dots, L\}} \rho(\mathbf{x}_i, \mathbf{w}_{j})[/math], наиболее близкий к текущему объекту [math]\mathbf{x}_i[/math].

5. Для всех неронов [math]n_j[/math] пересчитать их веса по следующей формуле:

[math]\mathbf{w}_{j} \leftarrow \mathbf{w}_{j} + \alpha(t)h_{b, j}(t)(\mathbf{x}_i - \mathbf{w}_{j})[/math],

где [math]\alpha(t)[/math] - темп обучения (learning rate), монотонно убывающая функция от номера итерации [math]t[/math];

[math]h_{b, j}(t)[/math] - функция определяющая "меру соседства" нейронов [math]n_b[/math] и [math]n_j[/math].

6. Проверить условие останова. При необходмости перейти на шаг 2.

Данное выше описание является довольно общим и не раскрывает некоторых деталей:

  • Начальное приближение для [math]\mathbf{w}_j[/math]
    • Инициализация случайными значениями. Самый простой способ - [math]w_j^{(d)} \sim Unif[0, 1][/math].
    • Инициализация объектами обучающей выборки. Данный способ может позволить уменьшить количество итераций, так как вектора весов уже находятся в области пространства, где расположены объекты выборки.