Оптимизатор SGD и параметр learning rate

Основы стохастического градиентного спуска

Стохастический градиентный спуск (Stochastic Gradient Descent, SGD) является одним из базовых методов оптимизации нейронных сетей. В Keras.js SGD реализуется в виде отдельного класса оптимизатора, который позволяет обновлять веса модели на основе градиентов функции потерь. Основная идея заключается в итеративном обновлении весов по формуле:

[ w_{t+1} = w_t - L(w_t)]

где:

  • (w_t) — текущие значения весов модели,
  • () — learning rate, скорость обучения,
  • (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
});

Ключевые параметры:

  • learningRate — коэффициент шага обновления весов. Основной параметр, определяющий скорость обучения. Слишком большой learning rate может привести к расходимости, слишком маленький — к медленной сходимости.
  • momentum — коэффициент импульса. Позволяет ускорить обучение и сгладить колебания градиента, накапливая предыдущие обновления.
  • decay — коэффициент затухания learning rate при каждой итерации. Полезен для постепенного уменьшения скорости обучения по мере приближения к минимуму функции потерь.
  • nesterov — булевый флаг для включения метода Nesterov Accelerated Gradient, который корректирует шаг с учётом предсказанного положения весов.

Роль параметра learning rate

learning rate — ключевой фактор эффективности обучения. Он определяет величину шага вдоль отрицательного градиента функции потерь:

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

В Keras.js learning rate может изменяться динамически при помощи метода setLearningRate:

sgd.setLearningRate(0.001);

Это позволяет внедрять стратегии адаптивного обучения без пересоздания оптимизатора.

Momentum и Nesterov

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 и дополнительные настройки.

Практические рекомендации по выбору learning rate

  • Начальное значение: обычно 0.01 или 0.001, в зависимости от масштаба данных и архитектуры сети.
  • Тестирование диапазонов: обучение с несколькими значениями learning rate позволяет определить оптимальный шаг.
  • Снижение по мере обучения: сочетание decay или адаптивных методов (например, ReduceLROnPlateau) помогает улучшить финальную точность.
  • Связь с размером батча: большой batch может требовать уменьшения learning rate для стабильного обучения, маленький — допускает более высокие значения.

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

SGD является базой для более сложных оптимизаторов, таких как Adam, RMSprop, Adagrad. Эти методы автоматически модифицируют шаги обучения, используя моменты первого и второго порядка градиента. Понимание поведения SGD и роли learning rate является ключом к эффективному использованию этих продвинутых методов.