Оптимизатор Adam и его гиперпараметры

Adam (Adaptive Moment Estimation) — один из наиболее популярных стохастических оптимизаторов, используемых в глубоком обучении. Его основное преимущество заключается в способности адаптивно изменять скорость обучения для каждого параметра модели, объединяя преимущества методов Momentum и RMSProp. Adam особенно эффективен для работы с большими объемами данных и сложными архитектурами нейронных сетей.


Принцип работы Adam

Adam использует две скользящие средние:

  1. mt — экспоненциально взвешенное среднее градиентов (аналог Momentum):

    [ m_t = 1 m{t-1} + (1 - _1) g_t]

  2. vt — экспоненциально взвешенное среднее квадратов градиентов (аналог RMSProp):

    [ v_t = 2 v{t-1} + (1 - _2) g_t^2]

Где gt — градиент функции потерь на текущем шаге, β₁ и β₂ — гиперпараметры, отвечающие за затухание прошлых значений.

Для коррекции смещения на начальных шагах применяются формулы bias-correction:

[ _t = , _t = ]

Обновление параметров модели производится по формуле:

[ _{t+1} = _t - ]

Где α — скорость обучения, ε — малое число для предотвращения деления на ноль.


Основные гиперпараметры Adam

  1. learningRate (α) Определяет шаг изменения весов модели. В Keras.js по умолчанию используется значение 0.001. Слишком большое значение может вызвать расходимость обучения, слишком маленькое — замедлить сходимость.

  2. beta1 (β₁) Коэффициент затухания для первой моменты (скользящей средней градиента). Обычно 0.9. Увеличение β₁ делает сглаживание сильнее, что замедляет реагирование на новые градиенты, уменьшение — делает обновления более шумными.

  3. beta2 (β₂) Коэффициент затухания для второй моменты (квадрат градиентов). Стандартное значение — 0.999. Высокие значения обеспечивают более стабильную оценку дисперсии градиентов, низкие ускоряют адаптацию к изменяющимся условиям.

  4. epsilon (ε) Малое число для численной стабильности, стандартно 1e-8. Изменение ε редко влияет на обучение, но может быть полезно при работе с очень малыми градиентами.

  5. decay Уменьшение скорости обучения с течением времени. В Keras.js задается через параметр decay, позволяя реализовать плавное уменьшение α на каждом шаге оптимизации.


Использование Adam в Keras.js

Подключение и инициализация оптимизатора осуществляется следующим образом:

const Adam = require('keras-js').Optimizers.Adam;

const optimizer = new Adam({
  learningRate: 0.001,
  beta1: 0.9,
  beta2: 0.999,
  epsilon: 1e-8,
  decay: 0.0
});

Применение оптимизатора к модели:

const model = new Keras.Model({
  layers: [/* слои модели */],
  optimizer: optimizer,
  loss: 'categoricalCrossentropy'
});

Adam автоматически обновляет веса на каждом шаге forward-backward pass, учитывая скользящие моменты градиентов и численно стабилизируя процесс обучения.


Особенности настройки гиперпараметров

  • Скорость обучения лучше настраивать с постепенным уменьшением через decay или scheduler.
  • β₁ и β₂ редко требуют изменения, но для нестабильных или сильно шумных данных может потребоваться снижение β₁ до 0.85–0.88.
  • ε стоит увеличивать при работе с очень малыми градиентами, чтобы избежать деления на ноль и нестабильных обновлений.
  • weight decay (L2-регуляризация) может быть комбинирован с Adam для предотвращения переобучения.

Практические рекомендации

  • Для глубоких сверточных сетей стандартные значения α=0.001, β₁=0.9, β₂=0.999, ε=1e-8 обычно обеспечивают стабильное обучение.
  • В задачах с редкими, но сильными градиентами полезно увеличивать ε и уменьшать β₂, чтобы оптимизатор быстрее адаптировался к резким изменениям.
  • Для моделей, требующих долгой стабильной сходимости, эффективна комбинация Adam + learning rate scheduler, которая постепенно снижает α на поздних этапах обучения.

Adam в Keras.js обеспечивает баланс между адаптивностью и стабильностью, позволяя эффективно обучать как небольшие модели, так и глубокие нейронные сети с миллионами параметров. Правильная настройка гиперпараметров напрямую влияет на скорость сходимости, стабильность обучения и качество итоговой модели.