Adam, AdaMax, AdaGrad, AdaDelta

TensorFlow.js предоставляет мощные средства для обучения нейронных сетей непосредственно в браузере или в Node.js. Одним из ключевых компонентов эффективного обучения являются оптимизаторы, отвечающие за корректировку весов модели на основе градиентов функции потерь. Рассмотрим наиболее используемые оптимизаторы: Adam, AdaMax, AdaGrad и AdaDelta.


Adam (Adaptive Moment Estimation)

Adam сочетает преимущества двух других методов: AdaGrad (адаптивная скорость обучения для каждого параметра) и RMSProp (скользящее среднее квадратов градиентов). Его ключевая идея — поддерживать экспоненциально взвешенные средние первых моментов градиентов (скорость изменения) и вторых моментов (квадрат градиентов).

Формулы обновления весов:

  1. Вычисление скользящих средних градиентов: [ m_t = 1 m{t-1} + (1 - _1) g_t]

  2. Вычисление скользящих средних квадратов градиентов: [ v_t = 2 v{t-1} + (1 - _2) g_t^2]

  3. Коррекция смещения: [ _t = , _t = ]

  4. Обновление весов: [ t = {t-1} - ]

Параметры:

  • learningRate (η) — базовая скорость обучения.
  • beta1 — коэффициент экспоненциального сглаживания первого момента (обычно 0.9).
  • beta2 — коэффициент сглаживания второго момента (обычно 0.999).
  • epsilon — малое число для предотвращения деления на ноль (обычно 1e-8).

В TensorFlow.js создается через:

const optimizer = tf.train.adam(0.001, 0.9, 0.999, 1e-8);

Adam подходит для большинства задач глубокого обучения, особенно при работе с большим количеством параметров и шумными градиентами.


AdaMax

AdaMax — модификация Adam, которая использует бесконечную норму для второго момента градиентов вместо квадратичной нормы. Это делает оптимизатор более стабильным при больших градиентах.

Формулы обновления:

  1. Скользящее среднее первого момента аналогично Adam: [ m_t = 1 m{t-1} + (1 - _1) g_t]

  2. Использование бесконечной нормы для второго момента: [ u_t = (2 u{t-1}, |g_t|)]

  3. Обновление весов: [ t = {t-1} - ]

Параметры: аналогичны Adam (learningRate, beta1, beta2, epsilon).

TensorFlow.js пример:

const optimizer = tf.train.adamax(0.002, 0.9, 0.999, 1e-8);

AdaMax лучше работает при экстремально больших градиентах, обеспечивая стабильность обучения.


AdaGrad (Adaptive Gradient)

AdaGrad адаптирует скорость обучения для каждого параметра, уменьшая шаги для часто обновляемых весов и увеличивая для редких. Основная идея — делить скорость обучения на квадратный корень суммы квадратов прошлых градиентов.

Формула:

[ _{t+1} = _t - g_t]

где (G_t) — суммарная квадратура градиентов для каждого параметра до момента t:

[ G_t = _{i=1}^{t} g_i^2]

Особенности:

  • Эффективен для разреженных данных.
  • Может замедлять обучение на поздних этапах из-за нарастающей суммы градиентов.

TensorFlow.js использование:

const optimizer = tf.train.adagrad(0.01, 1e-8);

AdaDelta

AdaDelta устраняет проблему убывающей скорости обучения AdaGrad, используя скользящее среднее квадратов градиентов вместо накопления всех предыдущих градиентов. Это позволяет сохранять адаптивность скорости обучения без явного задания начальной learning rate.

Формулы:

  1. Скользящее среднее квадратов градиентов: [ E[g^2]t = E[g^2]{t-1} + (1-) g_t^2]

  2. Вычисление шага обновления с учетом скользящего среднего предыдущих шагов: [ _t = - g_t]

  3. Обновление весов: [ _{t+1} = _t + _t]

Параметры:

  • rho — коэффициент сглаживания (обычно 0.95).
  • epsilon — для стабильности вычислений.

TensorFlow.js пример:

const optimizer = tf.train.adadelta(1.0, 0.95, 1e-8);

AdaDelta подходит для обучения сетей без точной настройки начальной скорости обучения и хорошо справляется с задачами, где градиенты имеют разные масштабы.


Сравнение и рекомендации по использованию

  • Adam — универсальный выбор, высокая скорость сходимости, подходит для большинства задач.
  • AdaMax — стабильнее при больших градиентах, может заменить Adam при нестабильных обучающих процессах.
  • AdaGrad — эффективен для разреженных данных, но может замедляться на поздних этапах обучения.
  • AdaDelta — автоматически регулирует шаги, удобен при отсутствии точной настройки learning rate.

Оптимизаторы в TensorFlow.js интегрированы с tf.Model.fit и позволяют изменять параметры без необходимости переписывать код модели, что делает работу с нейронными сетями гибкой и эффективной.