Стохастический градиентный спуск (Stochastic Gradient Descent, SGD) является одним из базовых методов оптимизации нейронных сетей. В Keras.js SGD реализуется в виде отдельного класса оптимизатора, который позволяет обновлять веса модели на основе градиентов функции потерь. Основная идея заключается в итеративном обновлении весов по формуле:
[ w_{t+1} = w_t - L(w_t)]
где:
SGD отличается от классического градиентного спуска тем, что обновления выполняются после каждой небольшой партии данных (batch), а не после анализа всей обучающей выборки. Это обеспечивает большую скорость сходимости и помогает выходить из локальных минимумов функции потерь.
В Keras.js оптимизатор SGD создаётся с помощью конструктора, принимающего набор параметров:
const sgd = new KerasJS.optimizers.SGD({
learningRate: 0.01,
momentum: 0.0,
decay: 0.0,
nesterov: false
});
Ключевые параметры:
learning rate — ключевой фактор эффективности обучения. Он определяет величину шага вдоль отрицательного градиента функции потерь:
В Keras.js learning rate может изменяться динамически при помощи
метода setLearningRate:
sgd.setLearningRate(0.001);
Это позволяет внедрять стратегии адаптивного обучения без пересоздания оптимизатора.
Momentum добавляет к текущему шагу долю предыдущего обновления, что позволяет ускорить движение по «долинам» функции потерь и уменьшить колебания в «узких каньонах». Формула обновления весов с импульсом:
[ v_{t+1} = v_t - L(w_t)]
[ w_{t+1} = w_t + v_{t+1}]
где (v_t) — накопленный импульс, () — коэффициент momentum.
Метод Nesterov Accelerated Gradient (NAG) улучшает стандартный momentum, вычисляя градиент не в текущем положении, а в точке с предсказанным обновлением весов. Это повышает точность шага и ускоряет сходимость.
После создания оптимизатора он передаётся при компиляции модели:
model.compile({
optimizer: sgd,
loss: 'categoricalCrossentropy',
metrics: ['accuracy']
});
На этапе обучения Keras.js использует оптимизатор для обновления весов на каждой мини-партии данных, соблюдая выбранный learning rate, momentum и дополнительные настройки.
SGD является базой для более сложных оптимизаторов, таких как Adam, RMSprop, Adagrad. Эти методы автоматически модифицируют шаги обучения, используя моменты первого и второго порядка градиента. Понимание поведения SGD и роли learning rate является ключом к эффективному использованию этих продвинутых методов.