Adam (Adaptive Moment Estimation) — один из наиболее популярных стохастических оптимизаторов, используемых в глубоком обучении. Его основное преимущество заключается в способности адаптивно изменять скорость обучения для каждого параметра модели, объединяя преимущества методов Momentum и RMSProp. Adam особенно эффективен для работы с большими объемами данных и сложными архитектурами нейронных сетей.
Adam использует две скользящие средние:
mt — экспоненциально взвешенное среднее градиентов (аналог Momentum):
[ m_t = 1 m{t-1} + (1 - _1) g_t]
vt — экспоненциально взвешенное среднее квадратов градиентов (аналог RMSProp):
[ v_t = 2 v{t-1} + (1 - _2) g_t^2]
Где gt — градиент функции потерь на текущем шаге, β₁ и β₂ — гиперпараметры, отвечающие за затухание прошлых значений.
Для коррекции смещения на начальных шагах применяются формулы bias-correction:
[ _t = , _t = ]
Обновление параметров модели производится по формуле:
[ _{t+1} = _t - ]
Где α — скорость обучения, ε — малое число для предотвращения деления на ноль.
learningRate (α) Определяет шаг изменения весов модели. В Keras.js по умолчанию используется значение 0.001. Слишком большое значение может вызвать расходимость обучения, слишком маленькое — замедлить сходимость.
beta1 (β₁) Коэффициент затухания для первой моменты (скользящей средней градиента). Обычно 0.9. Увеличение β₁ делает сглаживание сильнее, что замедляет реагирование на новые градиенты, уменьшение — делает обновления более шумными.
beta2 (β₂) Коэффициент затухания для второй моменты (квадрат градиентов). Стандартное значение — 0.999. Высокие значения обеспечивают более стабильную оценку дисперсии градиентов, низкие ускоряют адаптацию к изменяющимся условиям.
epsilon (ε) Малое число для численной стабильности, стандартно 1e-8. Изменение ε редко влияет на обучение, но может быть полезно при работе с очень малыми градиентами.
decay Уменьшение скорости обучения с течением времени. В Keras.js задается через параметр decay, позволяя реализовать плавное уменьшение α на каждом шаге оптимизации.
Подключение и инициализация оптимизатора осуществляется следующим образом:
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, учитывая скользящие моменты градиентов и численно стабилизируя процесс обучения.
Adam в Keras.js обеспечивает баланс между адаптивностью и стабильностью, позволяя эффективно обучать как небольшие модели, так и глубокие нейронные сети с миллионами параметров. Правильная настройка гиперпараметров напрямую влияет на скорость сходимости, стабильность обучения и качество итоговой модели.