Нейронная сеть хопфилда
Нейронные сети Хопфилда и Хэмминга
Сети, рассмотренные на предыдущих лекциях, не имели обратных связей , т. е. связей, идущих от выходов сетей к их входам. Отсутствие обратной связи гарантирует безусловную устойчивость сетей. (Они не могут войти в режим, когда выход беспрерывно блуждает от состояния к состоянию и не пригоден для использования.) Но это весьма желательное качество достигается не бесплатно: сети без обратных связей обладают более ограниченными возможностями по сравнению с сетями с обратными связями . Так как сети с обратными связями имеют пути, передающие сигналы от выходов к входам, то отклик таких сетей является динамическим, т. е. после приложения нового входа вычисляется выход и, передаваясь по сети обратной связи , модифицирует вход. Затем выход повторно вычисляется, и процесс повторяется снова и снова. Для устойчивой сети последовательные итерации приводят к все меньшим изменениям выхода, пока в конце концов выход не становится постоянным. Для многих сетей процесс никогда не заканчивается, такие сети называют неустойчивыми. Неустойчивые сети обладают интересными свойствами и изучались в качестве примера хаотических систем. Однако такой большой предмет, как хаос, находится за пределами этого курса. Вместо этого мы сконцентрируем свое внимание на устойчивых сетях, т. е. на тех, которые в завершении процесса дают постоянный выход . Проблема устойчивости ставила в тупик первых исследователей. Никто не мог предсказать, какие из сетей будут устойчивыми, а какие будут находиться в постоянном изменении. Более того, проблема представлялась столь трудной, что многие исследователи были настроены пессимистически относительно возможности ее решения. К счастью, была получена теорема, описавшая подмножество сетей с обратными связями , выходы которых в конце концов достигают устойчивого состояния. Это замечательное достижение открыло дорогу дальнейшим исследованиям, и сегодня многие ученые занимаются исследованием сложного поведения и возможностей этих систем. Дж. Хопфилд сделал важный вклад как в теорию, так и в применение систем с обратными связями . Поэтому некоторые из конфигураций известны как сети Хопфилда .
Конфигурации сетей с обратными связями
Рассмотренный нами ранее персептрон относится к классу сетей с направленным потоком распространения информации и не содержит обратных связей . На этапе функционирования каждый нейрон выполняет свою функцию — передачу возбуждения другим нейронам — ровно один раз. Динамика состояний нейронов является неитерационной.
Несколько более сложной является динамика в сети Кохонена. Конкурентное соревнование нейронов достигается путем итераций, в процессе которых информация многократно передается между нейронами.
В общем случае может быть рассмотрена нейронная сеть , содержащая произвольные обратные связи , по которым переданное возбуждение возвращается к данному нейрону, и он повторно выполняет свою функцию. Наблюдения за биологическими локальными нейросетями указывают на наличие множественных обратных связей . Нейродинамика в таких системах становится итерационной. Это свойство существенно расширяет множество типов нейросетевых архитектур, но одновременно приводит к появлению новых проблем.
Неитерационная динамика состояний нейронов является, очевидно, всегда устойчивой. Обратные связи могут приводить к возникновению неустойчивостей, подобных тем, которые возникают в усилительных радиотехнических системах при положительной обратной связи . В нейронных сетях неустойчивость проявляется в блуждающей смене состояний нейронов, не приводящей к возникновению стационарных состояний. В общем случае, ответ на вопрос об устойчивости динамики произвольной системы с обратными связями крайне сложен и до настоящего времени является открытым.
Остановимся на важном частном случае нейросетевой архитектуры, для которой свойства устойчивости подробно исследованы. На рис. 8.1 показана сеть с обратными связями , состоящая из двух слоев. Способ представления несколько отличается от использованного в работе Хопфилда и других сходных, но эквивалентен им с функциональной точки зрения, а также хорошо связан с сетями, рассмотренными на предыдущих лекциях. Нулевой слой, как и на предыдущих рисунках, не выполняет вычислительной функции, а лишь распределяет выходы сети обратно на входы. Каждый нейрон первого слоя вычисляет взвешенную сумму своих входов, давая сигнал NET , который затем с помощью нелинейной функции F преобразуется в сигнал OUT. Эти операции сходны с нейронами других сетей.
Нейронная сеть Хопфилда на пальцах
Статья посвящена введению в нейронные сети и примеру их реализации. В первой части дано небольшое теоретическое введение в нейронные сети на примере нейронной сети Хопфилда. Показано, как осуществляется обучение сети и как описывается ее динамика. Во второй части показано, как можно реализовать алгоритмы, описанные в первой части при помощи языка С++. Разработанная программа наглядно показывает способность нейронной сети очищать от шума ключевой образ. В конце статьи есть ссылка на исходный код проекта.
Введение
Для начала, необходимо определить, что такое нейрон. В биологии нейрон — специализированная клетка, из которой состоит нервная система. Биологический нейрон имеет строение, показанное на рис.1.
Рис.1 Схема нейрона
Нейронную сеть можно ввести как совокупность нейронов и их взаимосвязей. Следовательно, для того, чтобы определить искусственную (не биологическую) нейронную сеть необходимо:
- Задать архитектуру сети;
- Определить динамику отдельных элементов сети — нейронов;
- Определить правила, по которым нейроны будут взаимодействовать между собой;
- Описать алгоритм обучения, т.е. формирования связей для решения поставленной задачи.
В качестве архитектуры нейронной сети будет использоваться сеть Хопфилда. Данная модель, видимо, является наиболее распространенной математической моделью в нейронауке. Это обусловлено ее простотой и наглядность. Сеть Хопфилда показывает, каким образом может быть организована память в сети из элементов, которые не являются очень надежными. Экспериментальные данные показывают, что при увеличении количества вышедших из строя нейронов до 50%, вероятность правильного ответа крайне близка к 100%. Даже поверхностное сопоставление нейронной сети (например, мозга) и Фон-Неймановской ЭВМ показывает, насколько сильно различаются эти объекты: к примеру, частота изменения состояний нейронов («тактовая частота») не превышает 200Гц, тогда как частота изменения состояния элементов современного процессора может достигать нескольких ГГц (Гц).
Формальное описание сети Хопфилда
Сеть состоит из N искусственных нейронов, аксон каждого нейрона связан с дендритами остальных нейронов, образуя обратную связь. Архитектура сети изображена на рис. 2.
Рис.2 Архитектура нейронной сети Хопфилда
Каждый нейрон может находиться в одном из 2-х состояний:
где — состояние нейрона в момент
. «Возбуждению» нейрона соответствует
, а «торможению»
. Дискретность состояний нейрона отражает нелинейный, пороговый характер его функционирования и известный в нейрофизиологи как принцип «все или ничего».
Динамика состояния во времени -ого нейрона в сети из
нейронов описывается дискретной динамической системой:
где — матрица весовых коэффициентов, описывающих взаимодействие дендритов
-ого нейрона с аксонами
-ого нейрона.
Стоит отметить, что и случай
не рассматриваются.
Обучение и устойчивость к шуму
Обучение сети Хопфилда выходным образам сводится к вычислению значений элементов матрицы
. Формально можно описать процесс обучения следующим образом: пусть необходимо обучить нейронную сеть распознавать
образов, обозначенных
. Входной образ
представляет собой:
где
— шум, наложенный на исходный образ
.
Фактически, обучение нейронной сети — определение нормы в пространстве образов . Тогда, очистка входного образа от шума можно описать как минимизацию этого выражения.
Важной характеристикой нейронной сети является отношение числа ключевых образов , которые могут быть запомнены, к числу нейронов сети
:
. Для сети Хопфилда значение
не больше 0.14.
Вычисление квадратной матрицы размера для ключевых образов производится по правилу Хебба:
где означает
-ый элемент образа
.
Стоит отметить, что в силу коммутативности операции умножения, соблюдается равенство
Входной образ, который предъявляется для распознавания соответствует начальным данным для системы, служащий начальным условием для динамической системы (2):
Уравнений (1), (2), (3), (4) достаточно для определения искусственной нейронной сети Хопфилда и можно перейти к ее реализации.
Реализация нейронной сети Хопфилда
Реализация нейронной сети Хопфилда, определенной выше будет производиться на языке C++. Для упрощения экспериментов, добавим основные определения типов, напрямую связанных с видом нейрона и его передаточной функции в класс simple_neuron, а производные определим далее.
Самыми основными типами, напрямую связанными с нейроном являются:
- тип весовых коэффициентов (выбран float);
- тип, описывающий состояния нейрона (введен перечислимый тип с 2 допустимыми значениями).
На основе этих типов можно ввести остальные базовые типы:
- тип, описывающий состояние сети в момент
(выбран стандартный контейнер vector);
- тип, описывающий матрицу весовых коэффициентов связей нейронов (выбран контейнер vector контейнеров vector).
Обучение сети, или, вычисление элементов матрицы в соответствии с (3) производится функцией learn_neuro_net, принимающей на вход список обучающих образов и возвращающей объект типа link_coeffs_t. Значения
вычисляются только для нижнетреугольных элементов. Значения верхнетреугольных элементов вычисляются в соответствии с (4). Общий вид метода learn_neuro_net показан в листинге 2.
Обновление состояний нейронов реализовано с помощью функтора neuro_net_system. Аргументом метода _do функтора является начальное состояние , являющееся распознаваемых образом (в соответствии с (5)) — ссылка на объект типа neurons_line.
Метод функтора модифицирует передаваемый объект типа neurons_line до состояния нейронной сети в момент времени . Значение жестко не фиксировано и определяется выражением:
т.е., когда состояние каждого нейрона не изменилось за 1 «такт».
Для вычисления (2) применены 2 алгоритма STL:
- std::inner_product для вычисления суммы произведений весовых коэффициентов и состояний нейронов (т.е. вычисление (2) для определенного
);
- std::transform для вычисления новых значений для каждого нейрона (т.е. вычисление пункта выше для каждого возможного
)
Исходный код функтора neurons_net_system и метода calculate класса simple_neuron показан в листинге 3.
Для вывода в консоль входных и выходных образов создан тип neurons_line_print_descriptor, который хранит ссылку на образ и формат форматирования (ширину и высоту прямоугольника, в который будет вписан образ). Для этого типа переопределен оператор Листинг 4. Вывод в поток состояния нейронной сети
Пример работы нейронной сети
Для проверки работоспособности реализации, нейронная сеть была обучена 2 ключевым образам:
Рис.3 Ключевые образы
На вход подавались искаженные образы. Нейронная сеть корректно распознала исходные образы. Искаженные образы и распознанные образы показаны на рис.4, 5
Рис.4 Распознавание образа 1
Рис.5 Распознавание образа 2
Запуск программы производится из командной строки строчкой вида: AppName WIDTH HEIGHT SOURCE_FILE [LEARNE_FILE_N], где:
В репозитории проект CMake, из которого можно сгенерировать проект Visual Studio (VS2015 компилирует проект успешно) или обычные Unix Makefile’ы.
- Г.Г. Малинецкий. Математические основы синергетики. Москва, URSS, 2009.
- Статья «Нейронная_сеть_Хопфилда» на Википедии.
Применение нейронной сети Хопфилда для формирования ассоциативной памяти
Золотин Игорь Андреевич
Национальный исследовательский
университет «МИЭТ», г. Москва
E-mail: goldin7777@gmail.com
Аннотация. Данная статья посвящена вопросу распознавания образов при помощи нейросетевых технологий. В частности, анализ применения нейронной сети Хопфилда для формирования ассоциативной памяти.
Ключевые слова: нейронная сеть, ассоциативная память.
Нейронные сети представляют большой интерес для ученых на сегодняшний день. Системы технического зрения несомненно отстают в области распознавания образов от зрительного аппарата человека вкупе с его нейронной системой. Несмотря на явные преимущества искусственных нейронных сетей, они обладают существенным рядом проблем. Например, не всегда понятно, как подойти к вопросу обучения такой сети.
Нейронная сеть Хопфилда состоит из единственного слоя нейронов, число которых определяет число входов и выходов сети. При этом сеть является полносвязной — выход каждого нейрона соединен с входами остальных нейронов по принципу «со всех на все». По сути, сеть Хопфилда показывает, каким образом может быть организована память в сети из элементов, которые не являются надежными.
Рис. 1.1 Пример сети Хопфилда.
Каждый нейрон может находиться в одном их двух состояний: , где +1 соответствует «возбуждению» нейрона, а -1 «торможению».
Нелинейный, пороговый характер функционирования нейрона отражает дискретность его состояний. В нейрофизиологии такой принцип известен, как «Все или ничего». Динамика состояния во времени i-го нейрона в сети из N нейронов описывается дискретной динамической системой:
где Hi,j – матрица весовых коэффициентов, описывающих взаимодействие дендритов i-го нейрона с аксонами j-го нейрона.
Алгоритм обучения сети Хопфилда существенно отличается от алгоритма обратного распространения ошибки. Вместо последовательного приближения к нужному состоянию с промежуточной коррекцией весов, все коэффициенты рассчитываются по одной формуле и за один шаг, после этого сеть будет готова к работе. Вычисление коэффициентов подчиняется правилу: для всех запомненных образов xi матрица весов Hi,j должна удовлетворять уравнению: xi = Hi,jxi.
Обучение сети Хопфилда выходным образам ς in μ сводится к вычислению значений элементов матрицы Hi,j. Формально можно описать процесс обучения следующим образом: пусть необходимо обучить нейронную сеть распознавать M образов, обозначенных <ςin μ,μ = 1. M> Входной образ представляет собой:
где ς’ шум, наложенный на исходный образ ς in μ Фактически обучение нейронной сети – определение нормы в пространстве образов
. Тогда очистку входного образа от шума можно описать как минимизацию этого выражения.
Важной характеристикой нейронной сети является отношение числа ключевых образов M, которые могут быть запомнены к числу нейронов сети N:α = M/N. Для сети Хопфилда значение α не больше 0.15.
Вычисление квадратной матрицы размера для ключевых образов производится по правилу Хебба:
Сеть Хопфилда не использует обучение без учителя – необходима априорная информация о том, к каким классам относятся входные примеры. Сеть скорее является оптимизирующей и выполняет задачу восстановления образов по их искаженным оригиналам.
Для сетей Хопфилда характерны ограничения:
Относительно небольшое число запоминаемых образов (порядка 0.15n где n – число входов).
Достижение устойчивого состояния не гарантирует правильный отклик сети из-за того, что сеть может сойтись к ложным аттракторам.
Результаты и комментарии к ним.
Пример реализации нейронной сети Хопфилда, формирующей ассоциативную память представлен ниже.
Распознаем образы букв: «К», «П», «Т». Представим их в виде «битовых полей» размером 7х7. Имеем три эталонных образа:
Сеть будет строиться на вычислении коэффициентов весов. После того, как сеть обучена по установленным образцам мы подадим ей на вход некий вектор и запросим определить, что это.
На вход подается измененная форма:
Спустя 94 итерации эталонная форма определена:
Очевидно, что измененный образ буквы «К» был с успехом распознан. Если повторить распознавание несколько раз, то можно заметить, что каждый раз количество итераций для определения образа разное. Это связано с тем, что нейрон для обновления при каждом цикле выбирается случайным образом.
Теперь на вход приходит образ, похожий одновременно на буквы «П» и «Т».
Однако запустив ее заново, можно увидеть, что за 116 итераций в новом опыте буква все-таки распозналась. Это оказалась «П», так как исходный образ был похож на нее больше, чем на «Т»:
На основании проведенных исследований необходимо отметить, с одной стороны отсутствие проблем с обучением сети Хопфилда при наличии априорной информации о классах объектов, а с другой – достижение устойчивого состояния не гарантирует правильный отклик сети из-за того, что сеть может сойтись к ложным аттракторам (состояние нейронной сети Хопфилда в таком случае является устойчивым, но не дает правильного восстановления образа, при этом сеть может выдать ложный образ, который обычно представляет собой комбинацию фрагментов нескольких образов).
Тархов Д.А. Нейронные сети. Модели и алгоритмы/ Д.А. Тархов – М.: Радиотехника, 2005. – 256 стр.
Richard M.D., Lippman R.P., Neural network classifiers estimate Bayesian discriminant function, Neural Computation Concepts and Theory, 1991, vol 3, pp 461-482.
Хайкин С. Нейронные сети: полный курс, 2-е изд., испр.: Пер. с англ./ Саймон Хайкин. – М.: ООО «И.Д. Вильямс», 2006. – 1104 стр.
Specht, D. The General Regression Neural Network — Rediscovered. Neural Networks, 1993, V.6, pp.1033-1034.
Комарцова Л.Г., Максимов А.В., Нейрокомпьютеры/ Л.Г. Комарцова — М.: Изд-во МГТУ им. Баумана, 2004. – 400 стр.
Нейронная сеть хопфилда
Нейронная сеть Хопфилда представляет собой однослойную нейронную сеть, которая реализует ассоциативную память образов. С помощью сети Хопфилда можно восстанавливать зашумленные образы.
В отличии от классических нейронных сетей обучение сети Хопфилда осуществляется достаточно просто. При этом процедура воспоминания образов представляет собой итеративную процедуру.
Посмотрим, как выглядят сети Хопфилда на нашей видео-лекции:
Опишем алгоритм работы сети Хопфилда. На первом этапе нужно обучить сеть, предъявляя ей различные эталонные образы. Пусть каждый образ представляет собой N-мерный вектор
x=[x1,x2. xN],
где xi равняется -1 или 1.
Результатом обучения сети Хопфилда будет матрица, которая отражает веса взаимодействия нейронов. В сети Хопфилда все нейроны взаимодействуют со всеми. В начале обучения все веса принимают нулевые значения. Далее для всех i и j, которые меняются от 1 до N, мы осуществляем следующую процедуру:
Для всех образов выполняем корректировку весов:
wij=wij + xixj,
далее положим
wii=0
и нормируем
wij:=wij/N.
Все, наша сеть обучена!
Процедура распознавания образов осуществляется следующим алгоритмом. Пусть мы ищем образ
Y=[y1,y2. yN],
- Цикл по j от 1 до N:
- Положим d = 0
- Вложенный цикл по i от 1 до N:
- d = d + wijyi
- Конец вложенного цикла
- Если d > 0, то положить zj = 1, иначе zj = -1.
- Конец внешнего цикла
- Мы получили вектор:
Z=[z1,z2. zN],
Если вектор Z содержится во множестве исходных образов, то считаем, что алгоритм нашел образ Z, который соответствует исходному образу Y. - Положим Y = Z
- Переход к шагу 1.
Если наш алгоритм не может найти образ, то значит, что сеть Хопфилда не смогла «вспомнить» такой образ.
Посмотрим на видео как работает сеть Хопфилда:
Исходный текст этой программы доступен по адресу AI-HopfieldNET.
Программа написана на C#, поскольку для нее существенную роль играет графика. Приведем код, который собственно реализует работу сети Хопфилда.
Copy Source | Copy HTML
- // Обучение сети Хопфилда
- void Learning()
- <
- for ( int i = 0 ; i for ( int j = 0 ; j if (i == j)
- <
- continue ;
- >
- for ( int m = 0 ; m // корректировка весов
- w[i, j] += Boxes[m][i] * Boxes[m][j];
- >
- w[i, j] /= N;
- >
- >
- >
- // восстановление образа
- public TBox Find( TBox BS, int T = 1000 )
- <
- TBox B = new TBox (BS);
- TBox B2 = new TBox (B);
- for ( int t = 0 ; t for ( int j = 0 ; j double d = 0 ;
- for ( int i = 0 ; i if (d > 0 )
- <
- B2[j] = 1 ;
- >
- else
- <
- B2[j] = — 1 ;
- >
- >
- B = new TBox (B2);
- if (Boxes.Find(B))
- <
- return B;
- >
- >
- return null ;
- >
Видим, что собственно работа с сетью Хопфилда довольно проста.