Карта самоорганизации (Self-orginizing map) на TensorFlow |
||
МЕНЮ Искусственный интеллект Поиск Регистрация на сайте Помощь проекту ТЕМЫ Новости ИИ Искусственный интеллект Разработка ИИГолосовой помощник Городские сумасшедшие ИИ в медицине ИИ проекты Искусственные нейросети Слежка за людьми Угроза ИИ ИИ теория Внедрение ИИКомпьютерные науки Машинное обуч. (Ошибки) Машинное обучение Машинный перевод Реализация ИИ Реализация нейросетей Создание беспилотных авто Трезво про ИИ Философия ИИ Big data Работа разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика
Генетические алгоритмы Капсульные нейросети Основы нейронных сетей Распознавание лиц Распознавание образов Распознавание речи Техническое зрение Чат-боты Авторизация |
2017-08-03 19:07 Недавно начал свое знакомство с библиотекой глубокого обучения (Deep Learning) от Google под названием TensorFlow. И захотелось в качестве эксперимента написать карту самоорганизации Кохонена. Поэтому решил заняться ее созданием используя стандартный функционал данной библиотеки. В статье описано что из себя представляет карта самоорганизации Кохонена и алгоритм ее обучения. А также приведен пример ее реализации и что из этого всего вышло. О картах самоорганизации Для начала разберемся что из себя представляет карта самоорганизации (Self-orginizing Map), или просто SOM. SOM – это искусственная нейронная сеть основанная на обучении без учителя. В картах самоорганизации нейроны помещени в узлах решетки, обычно одно- или двумерной. Все нейроны этой решетки связаны со всеми узлами входного слоя.SOM преобразует непрерывное исходное пространство в дискретное выходное пространство . Алгоритм обучения SOM Обучение сети состоит из трех основных процессов: конкуренция, кооперация и адаптация. Ниже описаны все шаги алгоритма обучения SOM.Шаг 1: Инициализация. Для всех векторов синаптических весов,где — общее количество нейронов, — размерность входного пространства, выбирается случайное значение от -1 до 1. Шаг 2: Подвыборка. Выбираем вектор из входного пространства. Шаг 3: Поиск победившего нейрона или процесс конкуренции. Находим наиболее подходящий (победивший нейрон) на шаге , используя критерий минимума Евклидова расстояния (что эквивалентно максимуму скалярных произведений ): Евклидово расстояние. Евклидово расстояние () определятся как: Шаг 4: Процесс кооперации. Нейрон-победитель находится в центре топологической окрестности «сотрудничающих» нейронов. Ключевой вопрос: как определить так называемую топологическую окрестность (topological neighbourhood) победившего нейрона? Для удобства обозначим ее символом: , с центром в победившем нейроне . Топологическая окрестность должна быть симметричной относительно точки максимума, определяемой при , — это латеральное расстояние (lateral distance) между победившим и соседними нейронами . Типичным примером, удовлетворяющим условию выше, является функция Гаусса: где — эффективная ширина (effective width). Латеральное расстояние определяется как: в одномерном, и: в двумерном случае. Где определяет позицию возбуждаемого нейрона, а — позицию победившего нейрона (в случае двумерной решетки , где и координаты нейрона в решетке). График функции топологической окрестности для различных . Для SOM характерно уменьшение топологической окрестности в процессе обучения. Достичь этого можно изменяя по формуле: где — некоторая константа, — шаг обучения, — начальное значение . График изменением в процессе обучения. Функция по окончании этапа обучения должна охватывать только ближайших соседей. На рисунках ниже приведены графики функции топологической окрестности для двумерной решетки. Из данного рисунка видно, что в начале обучения топологическая окрестность охватывает практически всю решетку. В конце обучения сужается до ближайших соседей. Шаг 5: Процесс адаптации. Процесс адаптации включает в себя изменение синаптических весов сети. Изменение вектора весов нейрона в решетке можно выразить следующим образом: — параметр скорости обучения. В итоге имеем формулу обновленного вектора весов в момент времени : В алгоритме обучения SOM также рекомендуется изменять параметр скорости обучения в зависимости от шага. где — еще одна константа алгоритма SOM. График изменением в процессе обучения. После обновления весов возвращаемся к шагу 2 и так далее. Эвристики алгоритма обучения SOM Обучения сети состоит из двух этапов: Этап самоорганизации — может занять до 1000 итерций а может и больше.Этап сходимости — требуется для точной подстройки карты признаков. Как правило, количесвто итераций, достаточное для этапа сходимости может превышать количество нейоронов в сети в 500 раз. Эвристика 1. Начальное значение параметра скорости обучения лучше выбрать близким к значению: , . При этом оно не должно опускаться ниже значения 0.01. Эвристика 2. Исходное значение следует установить примерно равной радиусу решетки, а константу опрелить как: На этапе сходимости следует остановить изменение . Реализация SOM с помощью Python и TensorFlow Теперь перейдем от теории к практической реализации самоорганизующейся карты (SOM) с помощью Python и TensorFlow. Для начала создадим класс SOMNetwork и создадим операции TensorFlow для инициализации всех констант:
Далее создадим функцию для создания операции процесса конкуренции:
Нам осталось создать основную операцию обучения для процессов кооперации и адаптации:
В итоге мы реализовали SOM и получили операцию training_op с помощью которой можно обучать нашу нейронную сеть, передавая на каждой итерации входной вектор и номер шага как параметр. Ниже приведен граф операций TensorFlow построенный с помощью Tesnorboard. Граф операций TensorFlow. Тестирование работы программы Для тестирования работы программы, будем подавать на вход трехмерный вектор . Данный вектор можно представить как цвет из трех компонент.Создадим экземпляр нашей SOM сети и массив из рандомных векторов (цветов):
Теперь можно реализовать основной цикл обучения:
После обучения сеть преобразует непрерывное входное пространство цветов в дискретную градиентную карту, при подаче одной гаммы цветов всегда будут активироваться нейроны из одной области карты соответствующей данному цвету (активируется один нейрон наиболее подходящий подаваемому вектору). Для демонстрации можно представить вектор синаптических весов нейронов как цветовое градиентное изображение. На рисунке представлена карта весов для сети 20х20 нейронов, после 200тыс. итераций обучения: Карта весов в начале обучения (слева) и в конце обучения (справа). Карта весов для сети 100x100 нейронов, после 350тыс. итераций обучения. Заключение В итоге создана самоорганизующаяся карта и показан пример ее обучения на входном векторе состоящим из трех компонент. Для обучения сети можно использовать вектор любой размерности. Так же можно преобразовать алгоритм для работы в пакетном режиме. При этом порядок представления сети входных данных не влияет на окончательную форму карты признаков и нет необходимости в изменении параметра скорости обучения со временем. P.S.: Полный код программы можно найти тут.Источник: habrahabr.ru Комментарии: |
|