Momentum — это техника ускорения градиентного спуска, которая
позволяет нейронной сети быстрее сходиться к минимуму функции потерь,
смягчая колебания и предотвращая застревание в локальных минимумах. В
ConvNetJS Momentum реализуется через параметр momentum при
настройке SGD (Stochastic Gradient Descent).
В стандартном градиентном спуске веса обновляются по правилу:
[ w w - ]
где ( ) — скорость обучения, а ( ) — градиент функции потерь по весу ( w ).
Momentum вводит накопление предыдущих изменений весов, создавая эффект инерции:
[ v v - ] [ w w + v]
где ( v ) — скорость изменения веса, ( ) — коэффициент момента (обычно 0.9), а ( ) — learning rate.
Ключевые эффекты Momentum:
ConvNetJS предоставляет класс Trainer, который управляет
обучением нейронной сети. Momentum задается через параметр
momentum при создании экземпляра Trainer:
var trainer = new convnetjs.SGDTrainer(net, {
method: 'sgd',
learning_rate: 0.01,
momentum: 0.9,
batch_size: 10,
l2_decay: 0.0001
});
Пояснение параметров:
learning_rate — скорость обучения, определяет величину
шага вдоль градиента.momentum — коэффициент момента, обычно выбирается в
диапазоне 0.8–0.99.batch_size — размер мини-батча для вычисления
градиента.l2_decay — коэффициент регуляризации для предотвращения
переобучения.momentumMomentum особенно полезен при работе с мини-батчами. Поскольку градиенты мини-батча шумные, накопление изменения через momentum сглаживает обучение и ускоряет сходимость.
Пример использования:
for (var i = 0; i < 1000; i++) {
var x = new convnetjs.Vol(1, 1, 3);
x.w = [Math.random(), Math.random(), Math.random()];
var y = trainer.train(x, target_label);
}
При каждом вызове trainer.train обновления весов
учитывают предыдущие изменения, что уменьшает “скачки” градиента и
повышает устойчивость к шуму в данных.
ConvNetJS также поддерживает вариант Nesterov Accelerated Gradient (NAG), который отличается предварительным расчетом градиента на предполагаемом новом положении веса:
var trainer = new convnetjs.SGDTrainer(net, {
method: 'nag',
learning_rate: 0.01,
momentum: 0.9
});
Разница: классический Momentum вычисляет градиент в текущей позиции, а NAG — чуть впереди, предсказывая направление движения. Это позволяет быстрее корректировать траекторию и избегать переходов через оптимум.
momentum около 0.9 — хороший стандарт для
большинства задач.momentum для
стабильности.learning_rate_decay для
постепенного снижения скорости обучения по мере тренировки.momentum меньше вероятности
“залипания” в локальных минимумах, особенно на сложных, высокоразмерных
функциях потерь.Для демонстрации эффекта Momentum можно отслеживать путь веса в двумерной функции потерь. Без momentum веса “дрожат” вдоль градиента, двигаясь медленно. С momentum траектория становится более гладкой и прямолинейной, быстрее достигая минимума.
Использование momentum в ConvNetJS — простой способ значительно ускорить обучение нейронной сети, повысить устойчивость к шуму и улучшить общую эффективность градиентного спуска.