Momentum является одним из ключевых методов оптимизации в обучении нейронных сетей и активно используется в библиотеках вроде Synaptic для повышения скорости и стабильности сходимости. Основная идея метода заключается в введении понятия «инерции» в процесс обновления весов сети, что позволяет сгладить колебания градиента и ускорить движение к глобальному минимуму функции потерь.
Стандартный алгоритм градиентного спуска обновляет веса сети по правилу:
[ w_{t+1} = w_t - ,]
где (w_t) — текущие веса, () — скорость обучения (learning rate), () — градиент функции потерь (L) по весам.
Momentum модифицирует это правило, добавляя накопленную скорость изменения весов:
[ v_{t+1} = v_t - , w_{t+1} = w_t + v_{t+1},]
где:
Ключевой эффект: при малых колебаниях градиента Momentum ускоряет обучение в направлениях с согласованным градиентом, одновременно снижая влияние случайных флуктуаций.
В Synaptic Momentum можно включить через модуль Trainer
при настройке параметров обучения. Например, при использовании
стохастического градиентного спуска:
const Trainer = require('synaptic').Trainer;
const trainer = new Trainer(network);
trainer.train(trainingSet, {
rate: 0.05,
iterations: 20000,
error: 0.005,
momentum: 0.9,
shuffle: true
});
Здесь параметр momentum задаёт (), который контролирует
накопление предыдущих шагов. Значение 0.9 считается стандартным для
большинства задач.
Momentum особенно эффективен при следующих сценариях:
Выбор значения () сильно влияет на поведение сети:
Рекомендуется начинать с 0.9 и при необходимости корректировать под конкретную задачу.
Momentum является мощным инструментом для ускорения сходимости нейронных сетей. В Synaptic его настройка проста и гибка, позволяя тонко контролировать поведение обучения. Понимание механизма накопления «скорости» и влияние коэффициента импульса на траекторию градиентного спуска помогает эффективно применять Momentum как на простых, так и на сложных сетевых архитектурах.