Hopfield: сеть Хопфилда

Сеть Хопфилда — это класс рекуррентных нейронных сетей, предназначенных для ассоциативного запоминания и восстановления паттернов. Основная идея заключается в том, что сеть может хранить несколько образов и при подаче частичного или зашумлённого входа сходится к наиболее близкому сохранённому состоянию. Сети Хопфилда часто рассматриваются как модель памяти с конечным числом устойчивых состояний (аттракторов).


Структура сети

Компоненты сети Хопфилда:

  • Нейроны: Каждый нейрон сети имеет бинарное состояние, обычно кодируемое как +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

В библиотеке 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
});

Ключевые моменты:

  • Вход и выход совпадают, так как сеть должна восстанавливать собственные паттерны.
  • Обучение сети проводится без использования классического backpropagation.

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

Сеть Хопфилда использует правило Хебба для запоминания паттернов:

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).

Восстановление паттернов

После обучения сеть может корректировать зашумленные входы. Алгоритм работы:

  1. Подать частичный или зашумлённый паттерн на вход.
  2. Итеративно обновлять состояние каждого нейрона по правилу:
s_i = sign(Σ w_ij * s_j)
  1. Остановить обновление, когда состояние перестанет изменяться или достигнет максимального числа итераций.

Пример асинхронного обновления:

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 обеспечивает фундамент для изучения ассоциативной памяти, демонстрируя базовые принципы рекуррентных сетей, обучения по правилу Хебба и динамического восстановления паттернов в бинарной системе.