Стохастический градиентный спуск (SGD, Stochastic Gradient Descent) является ключевым методом оптимизации нейронных сетей в библиотеке ConvNetJS. В отличие от классического градиентного спуска, который вычисляет градиенты по всей обучающей выборке, SGD обновляет параметры сети после обработки каждого отдельного примера или небольшой мини-партии (mini-batch). Такой подход позволяет ускорить обучение и избежать застревания в локальных минимумах функции потерь.
1. Параметры оптимизатора
ConvNetJS предоставляет возможность тонко настраивать поведение SGD
через объект Trainer. Основные параметры включают:
Пример инициализации тренера:
var trainer = new convnetjs.SGDTrainer(net, {
learning_rate: 0.01,
momentum: 0.9,
batch_size: 20,
l2_decay: 0.001
});
SGD в ConvNetJS работает по следующему принципу:
Прямое распространение (Forward Pass) Каждое входное изображение или вектор признаков проходит через все слои сети, вычисляется предсказание и функция потерь.
Обратное распространение (Backward Pass) Вычисляются градиенты функции потерь по весам и смещениям каждого слоя. ConvNetJS использует эффективные методы хранения градиентов, чтобы минимизировать нагрузку на память.
Обновление весов Каждый параметр w
обновляется по формуле:
[ v = v - ( + l2_decay w)] [ w = w + v]
Здесь v – это накопленный импульс для данного веса.
Такой подход позволяет ускорить движение по длинным узким каньонам
функции потерь и уменьшить вероятность застревания в локальных
экстремумах.
Mini-batch SGD сочетает преимущества стохастического и пакетного градиентного спуска. В ConvNetJS обновление весов можно выполнять после нескольких примеров, собранных в мини-партию. Это улучшает стабильность градиентов и снижает шум, свойственный чисто стохастическому подходу.
Пример обработки мини-партий:
var batchSize = 10;
for(var i = 0; i < data.length; i += batchSize) {
var batch = data.slice(i, i + batchSize);
for(var j = 0; j < batch.length; j++) {
trainer.train(batch[j].x, batch[j].y);
}
}
ConvNetJS позволяет динамически менять learning_rate в
процессе обучения. Часто применяются следующие подходы:
learning_rate умножается на коэффициент меньше 1 после
каждой эпохи.Изменение скорости обучения помогает избежать переобучения на последних эпохах и улучшает сходимость.
ConvNetJS предоставляет метрики для контроля эффективности SGD:
Графическое отображение потерь на каждой итерации позволяет визуально отслеживать стабилизацию сети.
Стохастический градиентный спуск в ConvNetJS представляет собой
гибкий инструмент, позволяющий эффективно оптимизировать нейронные сети
любой архитектуры, от простых многослойных перцептронов до глубоких
сверточных сетей. Точное управление параметрами
learning_rate, momentum и
l2_decay обеспечивает стабильное и быстрое обучение при
минимальных вычислительных затратах.