Оптимизатор RMSprop: формула и параметры

Оптимизатор RMSprop (Root Mean Square Propagation) предложил Джеффри Хинтон в 2012 году прямо в слайдах курса по нейросетям на Coursera - формальной статьи у метода так и не вышло, но он быстро стал рабочей лошадкой для рекуррентных сетей и нестационарных задач. Идея простая: вместо одного общего шага для всех параметров RMSprop держит для каждого параметра скользящее среднее квадратов его градиента и делит шаг на корень из этого среднего. Параметры с большими градиентами получают меньший шаг, с малыми - больший. Ниже разберём формулу, смысл коэффициента затухания и то, чем RMSprop отличается от своего предшественника AdaGrad и наследника Adam. Чтобы сразу увидеть, как меняется траектория спуска, покрутите слайдеры в калькуляторе:
Формула RMSprop: две строки
RMSprop на каждом шаге делает два вычисления. Пусть - градиент функции потерь по параметру в момент . Сначала обновляется скользящее среднее квадратов градиента:
Затем сам параметр сдвигается на нормированный шаг:
Здесь - экспоненциально убывающее среднее квадратов градиента (накопитель «типичного масштаба»), - скорость обучения, - коэффициент затухания (обычно ), а защищает от деления на нуль. Ключевой множитель - это эффективный шаг: там, где градиент стабильно большой, знаменатель тоже большой, и шаг автоматически уменьшается. По направлениям, где градиент мал, знаменатель мал, и шаг растёт.

Зачем нужно скользящее среднее
Главная задача RMSprop - сделать шаг масштабно-инвариантным. Если в одном направлении градиент стабильно равен , а в другом , то обычный SGD с общим шагом либо расходится по крутому направлению, либо ползёт по пологому. RMSprop нормирует: эффективный шаг по крутому направлению уменьшается в раз, а по пологому почти не меняется. В результате траектория идёт прямее ко дну «оврага», а не зигзагом поперёк него.
Слово «среднее» здесь важно. RMSprop не берёт текущий квадрат градиента напрямую (это было бы слишком шумно от шага к шагу), а сглаживает его экспоненциальным средним с памятью на несколько десятков шагов. При «период полузабывания» составляет примерно шагов: что было раньше, быстро теряет вес. Это и делает метод устойчивым к шуму мини-батчей.
Коэффициент rho: что он регулирует
управляет «памятью» масштаба - насколько быстро забывает старые квадраты градиентов. Дефолт работает для большинства задач.
При среднее меняется очень медленно: эффективный шаг становится почти постоянным, метод приближается к обычному SGD с фиксированным масштабом. Это полезно, когда масштаб градиента стабилен и резкие пересчёты только вредят. При среднее практически равно текущему квадрату : метод мгновенно реагирует на каждое изменение масштаба, но становится шумным и может дёргаться. Промежуток – - разумный рабочий диапазон; на сильно нестационарных потерях (например, в рекуррентных сетях) иногда берут .
Скорость обучения задаёт общий масштаб шагов. Хинтон рекомендовал , но из-за нормировки RMSprop менее чувствителен к выбору , чем SGD: знаменатель сам подстраивает эффективный шаг. Если обучение расходится - уменьшайте на порядок; если сходится слишком медленно - пробуйте или .
RMSprop против AdaGrad
RMSprop вырос как прямая починка AdaGrad. AdaGrad накапливает сумму квадратов градиентов с самого начала обучения:
Эта сумма монотонно растёт - значит, знаменатель только увеличивается, и эффективный шаг неизбежно стремится к нулю. На коротких задачах это даже полезно, но на длинных обучениях AdaGrad «замораживается»: шаг становится настолько мал, что сеть перестаёт учиться задолго до сходимости. Этот эффект хорошо виден на графике эффективного шага в калькуляторе выше - красная пунктирная кривая (AdaGrad) уходит вниз, синяя (RMSprop) выходит на плато.
RMSprop заменил растущую сумму экспоненциально убывающим средним:
Старые градиенты теперь забываются, и накопитель остаётся конечным. Поэтому эффективный шаг не уходит к нулю, и метод применим на сколь угодно длинных обучениях. По сути это единственное, но решающее различие: AdaGrad помнит всё, RMSprop - только недавнее. Похожую идею «адаптивного шага по параметру» развивает и оптимизатор Adam, только он добавляет к ней ещё инерцию направления.

RMSprop против Adam
Adam (Adaptive Moment Estimation) можно прочитать как «RMSprop плюс импульс плюс коррекция смещения». RMSprop держит только второй момент - скользящее среднее квадратов . Adam добавляет к нему первый момент (скользящее среднее самого градиента, аналог импульса в momentum-SGD) и bias correction - деление на , чтобы скомпенсировать заниженные значения средних на первых шагах, когда история ещё пуста.
Здесь - это в точности из RMSprop, а играет роль . То есть если в Adam отключить первый момент () и убрать bias correction, останется ровно RMSprop. На практике первый момент даёт более гладкую сходимость, поэтому Adam чаще выбирают по умолчанию. Но RMSprop проще, имеет на один гиперпараметр меньше и до сих пор популярен в рекуррентных сетях и обучении с подкреплением, где «лишняя» инерция Adam иногда мешает.
Стоит помнить, что RMSprop не содержит коррекции смещения. На первых шагах занижено (стартует с нуля), поэтому знаменатель меньше истинного, а эффективный шаг - больше. Обычно это безвредно: пара завышенных шагов в начале сглаживается, но на чувствительных задачах помогает короткий warmup скорости обучения.
Когда применять RMSprop
RMSprop особенно хорош там, где масштаб градиента сильно меняется во времени - в рекуррентных сетях (LSTM, GRU) и в задачах обучения с подкреплением, где распределение данных нестационарно по самой природе обучения. В этих сценариях экспоненциальное среднее «следит» за текущим масштабом и не даёт шагу ни взорваться, ни замёрзнуть.
Для обычных свёрточных сетей и трансформеров чаще берут AdamW, но RMSprop остаётся хорошим запасным вариантом: меньше гиперпараметров - меньше риск ошибиться с настройкой. Если Adam по какой-то причине нестабилен на вашей задаче, перейти на RMSprop - дешёвый диагностический шаг: вы убираете первый момент и смотрите, не в нём ли была проблема.
Частые ошибки
- Путают с learning rate. задаёт общий масштаб шага, - скорость забывания старых квадратов градиента. Это разные ручки: уменьшив вместо , вы получите не меньший шаг, а более дёрганый.
- Берут слишком маленький . При среднее почти равно текущему квадрату градиента, нормировка становится шумной, и траектория дёргается. Начинайте с .
- Ожидают, что RMSprop сам подберёт . Нормировка снижает чувствительность к , но не отменяет её: при метод всё равно разойдётся.
- Забывают при самостоятельной реализации. Без него на первых шагах, когда , происходит деление почти на нуль и шаг взрывается.
- Используют RMSprop там, где давно лучше работает AdamW. Для трансформеров и больших языковых моделей правильный weight decay из AdamW обычно важнее, чем экономия на одном гиперпараметре.
FAQ
Чем RMSprop отличается от AdaGrad? AdaGrad копит сумму всех квадратов градиентов с начала обучения, поэтому знаменатель растёт и эффективный шаг затухает к нулю. RMSprop заменяет сумму экспоненциально убывающим средним с коэффициентом : старое забывается, накопитель остаётся конечным, и шаг не замораживается даже на длинных обучениях.
Какое значение rho выбрать? Дефолт подходит для большинства задач. Для сильно нестационарных потерь (рекуррентные сети, RL) иногда берут –, чтобы среднее менялось плавнее. Значения ниже делают нормировку шумной и обычно не рекомендуются.
RMSprop или Adam - что лучше? Adam - это RMSprop с добавленным первым моментом (импульсом) и bias correction, поэтому он чаще сходится глаже и берётся по умолчанию. RMSprop проще, имеет меньше гиперпараметров и хорошо себя ведёт в рекуррентных сетях и обучении с подкреплением; если Adam нестабилен, RMSprop - разумная альтернатива.
Коротко
RMSprop держит для каждого параметра скользящее среднее квадратов градиента и делит шаг на корень из него, получая адаптивный масштабно-инвариантный эффективный шаг. Коэффициент задаёт память накопителя, - общий масштаб. От AdaGrad метод отличается заменой растущей суммы на затухающее среднее (шаг не замораживается), от Adam - отсутствием первого момента и bias correction (на один-два механизма проще). RMSprop особенно уместен в рекуррентных сетях и обучении с подкреплением, где масштаб градиента нестационарен.
Читайте также

Оптимизатор Adam: формула и параметры
Как работает Adam: формула обновления весов, bias correction, роль beta1 и beta2, сравнение с SGD и RMSProp. Разбор с интерактивным калькулятором траектории.

Алгоритм AdaBoost: как слабые классификаторы дают сильный
Алгоритм AdaBoost простыми словами: адаптивный бустинг, перевзвешивание объектов, формула веса классификатора, итоговый ансамбль и разбор шага на примере с формулами.

Алгоритм CatBoost: бустинг с обработкой категорий
Алгоритм CatBoost простыми словами: упорядоченный бустинг против сдвига прогноза, кодирование категориальных признаков через ordered target statistics, симметричные деревья и разбор типовых задач.