Как работает градиентный спуск для поиска параметров модели
Что проверяют
Понимаете ли вы, что делает оптимизатор на каждом шаге и от чего зависит, сойдётся ли обучение. Следом спрашивают, как выбрать темп обучения, чем стохастический спуск отличается от полного и зачем нужны momentum и Adam.
Как отвечать
Задача: найти параметры, минимизирующие функцию потерь на обучающей выборке. Градиент показывает направление быстрейшего роста потерь, поэтому шаг делается против него: theta = theta - lr * grad(L), где lr это темп обучения.
- полный (batch): градиент по всей выборке, шаг точный, но дорогой;
- стохастический: градиент по одному объекту, дёшево, но шумно;
- мини-батч: компромисс на десятках или сотнях объектов, хорошо ложится на GPU. То, что во фреймворках называется
SGD, на деле почти всегда мини-батч.
Выбор шага решает многое: при слишком большом потери скачут или растут, при слишком маленьком обучение ползёт. Шаг подбирают по логарифмической сетке и меняют по расписанию (warmup, косинусное затухание). Поверх базового шага работают:
- momentum: накапливает скорость по устойчивым направлениям и гасит колебания в узких оврагах;
- RMSprop и Adam: свой шаг для каждого параметра по истории квадратов градиентов. AdamW добавляет корректное затухание весов и чаще всего стоит по умолчанию в нейросетях.
Оговорите выпуклость: у линейной и логистической регрессии минимум один, и при разумном шаге спуск к нему сходится. Линейную регрессию можно решить и аналитически, но на больших данных итеративный метод дешевле обращения матрицы. Сходимость сильно ускоряет стандартизация признаков: при разных масштабах поверхность потерь вытянута, и шаг приходится подгонять под самую крутую ось.
Где спотыкаются
Называют главной проблемой локальные минимумы. В глубоких сетях больше мешают седловые точки и плато, а найденные минимумы обычно дают сопоставимое качество.
Говорят, что Adam «решает проблему локальных минимумов». Он адаптирует шаг, а не гарантирует глобальный оптимум, и иногда обобщает хуже SGD с momentum.
Не могут объяснить, почему потери превратились в NaN. Чаще всего это взрыв градиентов от слишком большого шага, лечится меньшим lr и обрезкой градиента.