Одной из первых искусственных нейронных сетей, которую я изучил во время учебы в университете, была нейронная сеть Кохонена, в основном известная как SOM (Самоорганизующаяся карта). Эта нейронная сеть была создана ученым Теуво Кохоненом в середине 80-х годов. Это довольно простая и легкая в освоении нейронная сеть с математической точки зрения, поэтому она благодарна тем инженерам со слабым математическим образованием.

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

Сеть SOM проецирует N-мерный набор данных в пространстве уменьшенной размерности. Проекция является топологически сохраняющей, то есть близость между объектами во входном пространстве (N-мерном) приблизительно сохраняется в выходном пространстве (2-мерная карта). Этот процесс значительно уменьшает размерность входных данных.

Первым шагом алгоритма SOM является инициализация карты случайными значениями весового вектора. После инициализации начинается цикл обучения. Вектор выборки выбирается случайным образом из набора данных, и выполняется поиск по карте векторов весов, чтобы найти, какой вес лучше всего представляет эту выборку. Каждый весовой вектор имеет соседние веса, близкие к нему. Выбранный весовой вектор вознаграждается тем, что он может стать более похожим на случайно выбранный вектор выборки. Обновляемый вектор известен как Best Matching Unit (BMU). Соседи этого векторного веса также получают вознаграждение за то, что могут стать более похожими на выбранный выборочный вектор. С этого шага количество соседей и то, насколько каждый вес может учиться, со временем уменьшается. Оттуда весь этот процесс повторяется тысячи раз, пока все образцы векторов не будут взяты из набора данных, и вы считаете, что процесс обучения заканчивается в соответствии с вашими критериями.

Этапы тренировочного процесса перечислены ниже.

  1. Каждый весовой вектор карты инициализируется.
  2. Выборочный вектор выбирается случайным образом из набора данных.
  3. Каждый вектор карты проверяется, чтобы вычислить, какой векторный вес больше всего похож на входной вектор. Выигрышный вектор широко известен как Best Matching Unit (BMU).
  4. Затем вычисляется окрестность BMU. Количество соседей со временем уменьшается.
  5. Выигрышный вектор вознаграждается тем, что становится более похожим на вектор выборки. Соседи также становятся более похожими на вектор выборки. Чем ближе узел к BMU, тем больше изменяются его веса, и чем дальше сосед от BMU, тем меньше он учится.
  6. Повторите шаг 2 для N итераций.

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

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

Во второй части этого поста (скоро) есть ответы на эти вопросы и соответствующие реализации на языке C.