![]() |
![]() |
![]() |
|||||
![]() |
Карта самоорганизации (Self-orginizing map) на TensorFlow |
||||||
МЕНЮ Искусственный интеллект Поиск Регистрация на сайте Помощь проекту ТЕМЫ Новости ИИ Искусственный интеллект Разработка ИИГолосовой помощник Городские сумасшедшие ИИ в медицине ИИ проекты Искусственные нейросети Слежка за людьми Угроза ИИ ИИ теория Внедрение ИИКомпьютерные науки Машинное обуч. (Ошибки) Машинное обучение Машинный перевод Реализация ИИ Реализация нейросетей Создание беспилотных авто Трезво про ИИ Философия ИИ Big data Работа разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика
Генетические алгоритмы Капсульные нейросети Основы нейронных сетей Распознавание лиц Распознавание образов Распознавание речи Техническое зрение Чат-боты Авторизация |
2017-08-03 19:07 ![]() Недавно начал свое знакомство с библиотекой глубокого обучения (Deep Learning) от Google под названием TensorFlow. И захотелось в качестве эксперимента написать карту самоорганизации Кохонена. Поэтому решил заняться ее созданием используя стандартный функционал данной библиотеки. В статье описано что из себя представляет карта самоорганизации Кохонена и алгоритм ее обучения. А также приведен пример ее реализации и что из этого всего вышло. ![]() О картах самоорганизации Для начала разберемся что из себя представляет карта самоорганизации (Self-orginizing Map), или просто SOM. SOM – это искусственная нейронная сеть основанная на обучении без учителя. В картах самоорганизации нейроны помещени в узлах решетки, обычно одно- или двумерной. Все нейроны этой решетки связаны со всеми узлами входного слоя.![]() SOM преобразует непрерывное исходное пространство Алгоритм обучения SOM Обучение сети состоит из трех основных процессов: конкуренция, кооперация и адаптация. Ниже описаны все шаги алгоритма обучения SOM.Шаг 1: Инициализация. Для всех векторов синаптических весов, Шаг 2: Подвыборка. Выбираем вектор Шаг 3: Поиск победившего нейрона или процесс конкуренции. Находим наиболее подходящий (победивший нейрон) Евклидово расстояние. Евклидово расстояние ( Шаг 4: Процесс кооперации. Нейрон-победитель находится в центре топологической окрестности «сотрудничающих» нейронов. Ключевой вопрос: как определить так называемую топологическую окрестность (topological neighbourhood) победившего нейрона? Для удобства обозначим ее символом: Типичным примером, удовлетворяющим условию выше, ![]() График функции топологической окрестности для различных Для SOM характерно уменьшение топологической окрестности в процессе обучения. Достичь этого можно изменяя ![]() График изменением Функция ![]() Из данного рисунка видно, что в начале обучения топологическая окрестность охватывает практически всю решетку. ![]() В конце обучения Шаг 5: Процесс адаптации. Процесс адаптации включает в себя изменение синаптических весов сети. Изменение вектора весов нейрона В итоге имеем формулу обновленного вектора весов в момент времени ![]() График изменением После обновления весов возвращаемся к шагу 2 и так далее. Эвристики алгоритма обучения SOM Обучения сети состоит из двух этапов: Этап самоорганизации — может занять до 1000 итерций а может и больше.Этап сходимости — требуется для точной подстройки карты признаков. Как правило, количесвто итераций, достаточное для этапа сходимости может превышать количество нейоронов в сети в 500 раз. Эвристика 1. Начальное значение параметра скорости обучения лучше выбрать близким к значению: Эвристика 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 ![]() Комментарии: |
||||||