Какие оптимизаторы кроме Adam существуют и в чем их разница
Что проверяют
Понимаете ли вы, какую проблему решает каждый шаг от SGD к Adam, а не помните ли список названий. Следом спрашивают, чем AdamW отличается от Adam с weight_decay и что вы возьмёте под конкретную задачу.
Как отвечать
Стройте ответ цепочкой, где каждый метод чинит недостаток предыдущего:
- SGD: шаг против градиента на мини-батче с одним lr на все параметры, чувствителен к выбору lr;
- Momentum и Nesterov: копят скользящее среднее градиентов и гасят колебания. SGD с моментумом 0.9 и расписанием lr до сих пор силён на свёрточных сетях и часто обобщает лучше адаптивных методов;
- Adagrad: делит шаг на корень из суммы квадратов прошлых градиентов. Хорош для разреженных признаков, но сумма только растёт, и шаг затухает почти до нуля;
- RMSprop и Adadelta: заменяют сумму скользящим средним, и шаг перестаёт затухать;
- Adam: моментум плюс RMSprop с поправкой смещения на первых шагах. Дефолты в PyTorch:
lr=1e-3,betas=(0.9, 0.999),eps=1e-8. Хранит два состояния на каждый параметр; - AdamW: регуляризация весов отделена от градиента. В
Adamсweight_decayштраф проходит через адаптивный делитель и работает слабее задуманного, поэтому для трансформеров стандартAdamW; - Nadam и RAdam: Adam с моментумом Нестерова и Adam с поправкой, которая снижает зависимость от warmup;
- Lion, Adafactor, Muon: ответ на цену памяти в больших моделях. Lion хранит одно состояние и шагает знаком обновления, Adafactor хранит факторизованные вторые моменты, Muon ортогонализует обновление матриц весов.
Закончите выбором: для трансформеров AdamW с warmup и косинусным расписанием, для CNN SGD с моментумом или AdamW, для разреженных линейных моделей Adagrad.
Где спотыкаются
Говорят, что SGD «застревает в локальных минимумах», а Adam нет. В глубоких сетях мешают скорее седловые точки и плато, а шум SGD как раз помогает.
Приписывают Adadelta борьбу с затуханием градиентов. Он чинит затухание learning rate у Adagrad, к vanishing gradients это отношения не имеет.
Думают, что смена оптимизатора избавляет от подбора lr. У Adam это всё равно главный гиперпараметр, и неудачное значение ломает обучение так же, как у SGD.