Параметр momentum

Параметр momentum является ключевым элементом настройки обучения нейронных сетей в библиотеке Brain.js. Он относится к алгоритму обратного распространения ошибки (backpropagation) и влияет на скорость и стабильность процесса оптимизации весов сети.


Основная идея momentum

В стандартном градиентном спуске корректировка весов сети осуществляется строго пропорционально градиенту функции ошибки. Это может приводить к:

  • колебаниям при обучении,
  • медленной сходимости при сложных функциях ошибки,
  • застреванию в локальных минимумах.

Параметр momentum вводит понятие “инерции”: корректировка весов учитывает не только текущий градиент, но и предыдущее изменение весов. Формула обновления весов с учетом momentum выглядит так:

[ w(t) = E(w(t)) + w(t-1)]

где:

  • ( w(t) ) — изменение веса на текущем шаге,
  • ( ) — скорость обучения (learningRate),
  • ( E(w(t)) ) — градиент функции ошибки по весу,
  • ( ) — коэффициент momentum (momentum),
  • ( w(t-1) ) — изменение веса на предыдущем шаге.

Ключевой момент: momentum помогает “прогнать” сеть через мелкие локальные минимумы и сгладить колебания.


Значение параметра

  • 0 — momentum выключен. Обучение полностью подчиняется текущему градиенту.
  • 0.1–0.5 — слабый эффект инерции. Подходит для сетей с нестабильным градиентом.
  • 0.6–0.9 — сильная инерция. Ускоряет сходимость, но может вызвать «перелет» через оптимум при слишком большом значении.

В Brain.js momentum задается в объекте конфигурации при создании сети:

const brain = require('brain.js');

const net = new brain.NeuralNetwork({
  hiddenLayers: [4, 4],
  learningRate: 0.3,
  momentum: 0.8
});

Влияние на обучение

  1. Стабилизация процесса Momentum уменьшает вероятность резких колебаний весов, особенно при сложных или сильно нелинейных данных.

  2. Ускорение сходимости При правильной настройке сети достигают минимальной ошибки быстрее, чем без momentum.

  3. Риск «перелета» через минимум Слишком высокое значение может вызвать нестабильность, особенно при большой скорости обучения. Оптимальное сочетание learningRate и momentum критично для эффективного обучения.


Практические рекомендации

  • Для небольших сетей с простыми задачами momentum можно оставить равным 0.0–0.2.
  • Для средних и глубоких сетей — 0.5–0.8, в сочетании с умеренной скоростью обучения (0.1–0.3).
  • При наблюдении колебаний ошибки или медленной сходимости следует экспериментировать с уменьшением или увеличением momentum, сохраняя баланс с learningRate.

Пример использования в Brain.js

const trainingData = [
  { input: [0, 0], output: [0] },
  { input: [0, 1], output: [1] },
  { input: [1, 0], output: [1] },
  { input: [1, 1], output: [0] }
];

const net = new brain.NeuralNetwork({
  hiddenLayers: [3],
  learningRate: 0.2,
  momentum: 0.7
});

net.train(trainingData, {
  iterations: 20000,
  errorThresh: 0.005,
  log: true,
  logPeriod: 1000
});

const output = net.run([1, 0]);
console.log(output);

В этом примере momentum позволяет сети быстрее освоить XOR-функцию, сглаживая колебания весов и предотвращая застревание в локальном минимуме.


Взаимодействие с другими параметрами

  • learningRate — основной ускоритель обучения. Сочетание высокой learningRate и высокого momentum может привести к нестабильности.
  • iterations и errorThresh — определяют, как долго и с какой точностью сеть будет обучаться. Momentum помогает быстрее достигать заданного errorThresh.
  • hiddenLayers — глубина сети влияет на чувствительность к momentum. Чем глубже сеть, тем выше полезность небольшого значения momentum для предотвращения колебаний.

Итоговая формула для Brain.js

Внутри Brain.js обновление веса с учетом momentum можно понимать так:

Δw = learningRate * gradient + momentum * previousΔw
weight += Δw

Это простое выражение объединяет инерцию и текущий градиент, обеспечивая более устойчивое и предсказуемое обучение нейронной сети.

Momentum является инструментом тонкой настройки, позволяющим значительно улучшить эффективность и стабильность обучения в задачах различной сложности.