Сеть Хопфилда — это класс рекуррентных нейронных сетей, предназначенных для ассоциативного запоминания и восстановления паттернов. Основная идея заключается в том, что сеть может хранить несколько образов и при подаче частичного или зашумлённого входа сходится к наиболее близкому сохранённому состоянию. Сети Хопфилда часто рассматриваются как модель памяти с конечным числом устойчивых состояний (аттракторов).
Компоненты сети Хопфилда:
+1 или
-1.w_ii = 0). Весовая
матрица симметрична: w_ij = w_ji.Состояние сети описывается вектором
s = [s1, s2, ..., sn], где n — количество
нейронов. Сеть эволюционирует по правилу обновления:
s_i(t+1) = sign(Σ w_ij * s_j(t))
Здесь суммирование ведётся по всем j ≠ i, а функция
sign возвращает +1 при положительном значении
и -1 при отрицательном.
В библиотеке Synaptic создаются стандартные нейронные сети, но для
Хопфилда предусмотрен специализированный класс Layer с
рекуррентными связями. Пример создания сети Хопфилда:
const synaptic = require('synaptic');
const { Layer, Network } = synaptic;
// Количество нейронов соответствует размеру паттерна
const inputLayer = new Layer(4);
// Рекуррентная связь слоя сама на себя
inputLayer.project(inputLayer);
// Создание сети на основе слоя
const hopfield = new Network({
input: inputLayer,
hidden: [],
output: inputLayer
});
Ключевые моменты:
Сеть Хопфилда использует правило Хебба для запоминания паттернов:
w_ij = (1/N) Σ_p s_i^p * s_j^p , i ≠ j
Где:
N — число нейронов,p — индекс паттерна,s_i^p — состояние i-го нейрона в паттерне p.В Synaptic обучение реализуется вручную через прямое изменение весов слоя:
function trainHopfield(hopfield, patterns) {
const N = patterns[0].length;
const layer = hopfield.layers.input;
// Инициализация весов нулями
layer.list.forEach(neuron => neuron.connections.inputs = {});
patterns.forEach(pattern => {
for (let i = 0; i < N; i++) {
for (let j = 0; j < N; j++) {
if (i !== j) {
const weight = (pattern[i] * pattern[j]) / N;
const neuron_i = layer.list[i];
const neuron_j = layer.list[j];
neuron_i.connect(neuron_j, weight);
}
}
}
});
}
Особенности:
(i,j).+1/-1).После обучения сеть может корректировать зашумленные входы. Алгоритм работы:
s_i = sign(Σ w_ij * s_j)
Пример асинхронного обновления:
function recall(hopfield, input, iterations = 10) {
let state = [...input];
const N = state.length;
const layer = hopfield.layers.input;
for (let t = 0; t < iterations; t++) {
for (let i = 0; i < N; i++) {
let sum = 0;
for (let j = 0; j < N; j++) {
if (i !== j) {
const weight = layer.list[i].connections.projected[layer.list[j].ID].weight;
sum += weight * state[j];
}
}
state[i] = sum >= 0 ? 1 : -1;
}
}
return state;
}
Особенности:
0.15 * N для устойчивого хранения.E = -0.5 Σ w_ij s_i s_j, что обеспечивает
стабильность.Энергетический подход позволяет анализировать устойчивость состояний и предсказывать аттракторы.
Сеть Хопфилда в Synaptic обеспечивает фундамент для изучения ассоциативной памяти, демонстрируя базовые принципы рекуррентных сетей, обучения по правилу Хебба и динамического восстановления паттернов в бинарной системе.