TensorFlowJuniorTechnical

Какие оптимизаторы есть в TensorFlow (SGD, Adam, RMSprop) и когда выбирать каждый из них?

SGD с momentum дает наилучшую точность при правильном schedule (CV-задачи); Adam работает "из коробки" для NLP и прототипов; RMSprop оптимален для RNN и RL.

Оптимизаторы в TensorFlow: SGD, Adam, RMSprop

TensorFlow предоставляет богатый набор оптимизаторов через модуль tf.keras.optimizers. Выбор оптимизатора напрямую влияет на скорость сходимости и качество итоговой модели.

SGD (Stochastic Gradient Descent)

Классический градиентный спуск. Обновляет веса по формуле: w = w - lr * grad. Версия с импульсом (momentum) ускоряет движение вдоль направлений с устойчивым градиентом.

  • Подходит для задач с большими датасетами и хорошо подобранным learning rate schedule.
  • С правильным расписанием (cosine annealing, warmup) дает наилучшую итоговую точность в задачах компьютерного зрения (ImageNet-benchmark).
  • Требует тщательной настройки lr и momentum; чувствителен к масштабу признаков.
import tensorflow as tf

sgd = tf.keras.optimizers.SGD(
    learning_rate=0.01,
    momentum=0.9,
    nesterov=True
)

RMSprop

Адаптирует learning rate для каждого параметра, деля градиент на скользящее среднее квадратов градиентов. Хорошо работает с рекуррентными сетями и нестационарными целевыми функциями.

  • Оптимален для RNN/LSTM, где градиенты сильно варьируются во времени.
  • Стандартный выбор при обучении с подкреплением (RL-агенты, Atari).
  • Параметр rho (decay) управляет памятью скользящего среднего.
rmsprop = tf.keras.optimizers.RMSprop(
    learning_rate=0.001,
    rho=0.9,
    epsilon=1e-07
)

Adam (Adaptive Moment Estimation)

Объединяет идеи Momentum и RMSprop: хранит экспоненциально скользящие средние градиентов (m) и их квадратов (v), применяя bias correction в первые шаги.

  • Хорошо работает «из коробки» без тонкой настройки lr.
  • Стандартный выбор для NLP, трансформеров, GAN, большинства задач с нуля.
  • Варианты: AdamW (декуплированная L2-регуляризация), Nadam (с Nesterov).
adam = tf.keras.optimizers.Adam(
    learning_rate=3e-4,
    beta_1=0.9,
    beta_2=0.999,
    epsilon=1e-07,
    weight_decay=0.01  # AdamW-стиль, TF 2.11+
)

model = tf.keras.Sequential([
    tf.keras.layers.Dense(128, activation='relu'),
    tf.keras.layers.Dense(10, activation='softmax')
])

model.compile(
    optimizer=adam,
    loss='sparse_categorical_crossentropy',
    metrics=['accuracy']
)

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

  • Прототип / новая архитектура — начинайте с Adam(lr=3e-4); он прощает ошибки в архитектуре.
  • Fine-tuning предобученных моделей — Adam или AdamW с малым lr (1e-5 — 5e-5).
  • Production CV-модели — SGD+momentum+cosine schedule, если важна максимальная точность.
  • RNN / временные ряды — RMSprop с rho=0.9.
  • Трансформеры (BERT, GPT) — AdamW + linear warmup + decay.

Подводные камни

  • Adam может не сходиться к глобальному минимуму на некоторых задачах — явление известно как "Adam non-convergence"; SGD находит более плоские минимумы.
  • Значение epsilon в Adam критично: слишком маленькое вызывает нестабильность на float16; используйте epsilon=1e-3 при mixed precision.
  • RMSprop без epsilon может делить на ноль при очень маленьких градиентах.
  • SGD без momentum и lr schedule почти всегда проигрывает адаптивным оптимизаторам по скорости.
  • Не используйте один lr для всех слоёв при fine-tuning: нижние слои нуждаются в lr в 10–100 раз меньшем.
  • AdamW и Adam в Keras 3 ведут себя по-разному: weight_decay в AdamW применяется к весам, а не к градиентам.
  • При gradient clipping важно обрезать до применения оптимизатора, а не после — иначе обновление некорректно.
  • Смена оптимизатора в середине обучения (например, с Adam на SGD для дообучения) обнуляет накопленные моменты — модель может временно деградировать.

Common mistakes

  • Объяснять optimizers только синтаксисом без shape, dtype, состояния или режима выполнения.
  • Игнорировать leakage, воспроизводимость, пустые входы и скрытые копии данных.
  • Не проверять production-симптомы: latency, память, ретраи, дрейф качества и несовпадение версий.

What the interviewer is testing

  • Может ли связать optimizers с реальным контрактом входов и выходов.
  • Упоминает ли тесты, метрики, reproducibility и диагностику ошибок.
  • Видит ли различие между demo-кодом в ноутбуке и production-пайплайном.

Sources

Related topics