--- status: seed type: concept tags: - machine-learning - neural-networks - associative-memory created: 2025-12-17 updated: 2026-05-15 title: Сеть Хопфилда --- # Сеть Хопфилда **Сеть Хопфилда** - однослойная рекуррентная [[Нейронные сети|нейронная сеть]], используемая как ассоциативная память. Она получает входной, возможно искажённый, образ и постепенно приводит состояние сети к одному из сохранённых эталонов. В отличие от [[Сеть Хэмминга|сети Хэмминга]], сеть Хопфилда выдаёт не номер ближайшего образа, а сам восстановленный образ. ## Идея Сеть хранит набор эталонных образов как устойчивые состояния. При подаче входного сигнала значения выходов нейронов инициализируются этим сигналом, после чего сеть итеративно пересчитывает состояния. Если вход близок к одному из эталонов, динамика сети должна сойтись к нему. По смыслу входной образ работает как ключ: сеть "вспоминает" наиболее близкий сохранённый образ. В общем случае входной сигнал описывается биполярным вектором: $$ X=(x_1,\dots,x_n),\quad x_i \in \{-1,1\} $$ Эталонный образ $k$ можно обозначить как: $$ X^k=(x_1^k,\dots,x_n^k),\quad k=1,\dots,m $$ Если сеть успешно распознаёт образ, её выход совпадает с одним из эталонов: $$ Y=X^k $$ Если выходной вектор не совпал ни с одним эталоном, сеть пришла к ложному или неинтерпретируемому состоянию. ## Архитектура Основные свойства сети Хопфилда: - каждый нейрон связан с другими нейронами; - выходы нейронов возвращаются на входы сети; - связь нейрона с самим собой обычно исключается; - веса задаются заранее по эталонным образам; - состояние сети изменяется до стабилизации. ![[Pasted image 20260515090401.png]] Инициализация сети задаёт начальные выходы нейронов. При функционировании сеть изменяет состояние до тех пор, пока не придёт к устойчивому образу. Если входной сигнал близок к одному из сохранённых эталонов, сеть восстанавливает этот эталон. Для сети Хопфилда часто используется бинарная функция активации, описанная в [[Нейронные сети]]. ## Инициализация весов Веса задаются по эталонным образам один раз перед началом работы сети: $$ w_{ij}=\sum\limits_{k=1}^{m}x_i^k x_j^k,\quad i\neq j $$ Обычно связь нейрона с самим собой исключают: $$ w_{ii}=0 $$ После такой инициализации сеть не дообучается на входных примерах, а использует уже записанные в матрицу связей эталоны. ## Алгоритм функционирования 1. На вход подаётся неизвестный сигнал. Фактически ввод выполняется установкой начальных значений аксонов: $$ y_i(0)=x_i,\quad i=0,\dots,n-1 $$ Ноль в скобках обозначает нулевую итерацию работы сети. 2. Рассчитывается новое состояние нейронов: $$ s_j(p+1)=\sum\limits_{i=1}^{n-1}w_{ij}y_i(p),\quad j=0,\dots,n-1 $$ После этого вычисляются новые значения аксонов: $$ y_j(p+1)=f[s_j(p+1)] $$ где $f$ - функция активации в виде скачка. ![[Pasted image 20260514115340.png|300]] 3. Проверяется, изменились ли выходные значения за последнюю итерацию. Если изменились, сеть возвращается к пересчёту состояний. Если выходы стабилизировались, работа завершается. Итоговый выходной вектор считается образом, который лучше всего соответствует входным данным. ## Ограничения Сеть Хопфилда может не распознать образ корректно и выдать несуществующий эталон. Это связано с ограниченной ёмкостью ассоциативной памяти. Для сети Хопфилда число запоминаемых образов обычно не должно превышать: $$ m \approx 0.15n $$ где $n$ - число нейронов. Если два эталона слишком похожи, возможны перекрёстные ассоциации: предъявление первого образа может привести к восстановлению второго, и наоборот. Сеть Хопфилда хорошо подходит для восстановления или завершения образа, но не предназначена для явного сопоставления образа с номером класса. Для такой задачи удобнее [[Сеть Хэмминга]]. ## Связанные заметки - [[Сеть Хэмминга]] - [[Нейронные сети]]