Главная / Нейронные сети / Сеть Хопфилда

Сеть Хопфилда

Нейронная сеть Хопфилда — полносвязная нейронная сеть с симметричной матрицей связей. В процессе работы динамика таких сетей сходится (конвергирует) к одному из положений равновесия. Эти положения равновесия являются локальными минимумами функционала, называемого энергией сети (в простейшем случае — локальными минимумами отрицательно определённой квадратичной формы на n-мерном кубе). Такая сеть может быть использована как автоассоциативная память, как фильтр, а также для решения некоторых задач оптимизации. В отличие от многих нейронных сетей, работающих до получения ответа через определённое количество тактов, сети Хопфилда работают до достижения равновесия, когда следующее состояние сети в точности равно предыдущему: начальное состояние является входным образом, а при равновесии получают выходной образ. (с) Википедия

Предположим, мы имеем определённое количество начальных образов – изображений, либо чего-нибудь ещё. Нам предлагают видоизменённый образ, и  задача наша состоит в распознании одного из эталонных шаблонов. Как это сделает человек – вопрос довольно сложный. А вот как с подобной задачей справится нейронная сеть – такое вполне можно представить. Особенно если это нейронная сеть Хопфилда.

Данной  статье была убрана вся математика и большая часть терминологии, это может показаться неправильным, однако, я думаю, это поможет лучше осознать основную идею. Так же будет предложен пример на  Python, чтобы визуально продемонстрировать работу системы.

Говоря своими словами,  представляет она из себя систему «нейронов», завязанных между собой аналогично сети нейронов в головном мозге. «Нейрон» в конкретном случае является некоторым обладающим состоянием процессом, поэтому сеть работает параллельно. Искусственная нейронная сеть проходит «обучение» решению некой задачи, что, по своей сути, приводит к вычислениям матричных весовых коэффициентов, без какой либо «магии».

Следующим пунктом мы взглянем на программную реализацию процесса формирования нейронной сети Хопфилда, назначение которой служит распознавание образов. Она была предложена Джоном Хопфилдом в 1984 году. На данный момент разработаны множественные её модификации, но сейчас мы будем рассматривать именно оригинальную модель.

Каким образом нейроны между собой связаны, зависит от того какой тип сети мы строим. Каждый сетевой нейрон передаёт и получает сигналы от другим.  Сеть Хопфилда – это однослойная  сеть, так как она использует только один слой нейронов. Так же она является рекурсивной сетью, и обладает обратными связями. Функции сети являются циклическми, то есть постоянно повторяются. Ниже показан пример сети Хопфилда в котором задействовано 4 нейрона. Все они имеют выходы сигнала, которые связываются с выходами всех нейронов, кроме себя:

Сеть хопфилда
К сожалению такую сеть ничему практически обучить нельзя. Для этого нам потребуется намного больше нейронов. Сеть, в которой содержится N нейронов запоминает не более ~0.15*N различных образов. Поэтому рабочая сеть должна использовать достаточно большое количество нейронов. Одно из самых больших недостатков подобной сети – это низкая ёмкость. К тому же образы не должны сильно походить друг на друга, так как иногда это может вызвать цикличность при распознавании.

Как работает сеть

Образы, которые сеть распознаёт или запоминает представляется вектором который имеет размерность X и n, где n – это число нейронов задействованных в сети. Выходной же образ будет вектором Y с идентичной размерностью. Каждый вектор будет принимать значения: -1 или +1. Можно конечно использовать и 0 с 1, но первый вариант немного удобнее для расчётов.

Естественно, в программной реализации работать непосредственно с нейронами мы не будем, а будем эмулировать их работу при помощи матрицы коэффициентов и векторов.

Обучение сети

Как было ранее сказано, сеть будет строится на вычислении коэффициентов весов. Для этого мы создадим матрицу W с рразмером азмером n x n. При обучении сети некому образу X коэффициенты устанавливаются так:

Если нам понадобится научить сеть другому образу, мы поменяем вектор X и снова повторим эту процедуру. Как видите, в матрице записывается сумма  всех значений для всех образов, сеть которым была обучена. Значение элемента установленное в 0 при i==j является отражением  устройства сети, при котором выход определённого нейрона не возвращается на его же вход.

Распознавание образа

После того как сеть обучена по установленным образам мы подадим ей на вход некий вектор, и попросим её определить, что это. Скорее всего нас ожидает несколько исходов.

В самом лучшем варианты сеть правильно распознает образ и отдаст на выход вектор основного образа, похожего на искажённый.

Иной  развитие событий возникает если  сеть решает что указанный вами образ похож сразу на несколько эталонных, тогда сеть может зациклится и не выдать результата. В нашей реализации мы добавим условие что при прохождении определённого количества итераций, если решение не найдено, то сеть сообщает об этом.

Сеть работает до той поры пока результат не будет похож на эталонный образец, либо не превысит порог циклов прохождения. Случайно выбирается определённый нейрон r для обновления. Далее рассчитывается новое состояние s, из нашей матрицы коэффициентов следующим образом:

И обновляем его состояние:

Мы не проводим определённой разницы между входными и выходными векторами и называет их одной переменной, так как выходной вектор рекурсивно возвращается на вход сети.

Пример

Попробуем распознать образы букв, при помощи нашей реализации сети. Представим их в виде «битовых полей» с размером 7х7. У нас будет три эталонных образа и один образ для проверки, после прохождения эмуляции мы получим следующий результат:

Видно что, изменённый образ буквы K был с успехом распознан. Если мы повторим распознавание несколько раз, то заметим что каждый раз количество итераций для определения разное. Это связано с тем, что нейрон для обновления при каждом цикле мы выбираем случайным образом.

А теперь немного помучаем сеть и подадим на распознание букву похожую одновременно на  П и на Т:

Однако если запустить программу ещё пару раз мы можем наблюдать и вариант, где сеть всё же смогла распознать П (но не Т, так как входящий всё таки больше похож на П):

Заключение

Эта статья была простейшей реализации нейронной сети Хопфилда, формирующей ассоциативную память. Как ранее было показано, основная работа сводится к определению весовых коэффициентов сети. Тут опущена практически  вся математика, так что если хотите разобраться в этом вопросе по подробнее то стоит обратится к соответствующей литературе или дождаться более сложного цикла статей на нашем сайте.

 

comments powered by HyperComments

Посмотрите также

Как работает нейронный машинный перевод?

Описание процессов машинного перевода основанного на базе правил (Rule-Based), машинного перевода на базе фраз (Phrase-Based) и нейронного перевода В этой публикации нашего цикла step-by-step статей мы объясним, как работает нейронный машинный перевод и сравним его с другими методами: технологией перевода на базе правил и технологией фреймового перевода (PBMT, наиболее популярным подмножеством которого является статистический машинный [...]