Градиентный спуск: как метод учится на числах
Антиградиент как компас в овраге: выбор шага обучения, спуск на f(x,y)=x²+4y² с числами по шагам, овраги, зигзаги и идея стохастической версии.
Функция задана, минимизировать надо: невязка модели, энергия конструкции, ошибка предсказания на миллионе параметров. Формулы для точки минимума нет — есть только возможность вычислять и её градиент. Градиентный спуск отвечает на такую постановку честно и минимально: шагаем против градиента, смотрим, куда выведет, повторяем. Метод стоит в фундаменте обучения почти всех моделей машинного обучения, но устроен до смешного просто и полностью просчитывается руками. Протестируем его на квадратичной функции , где видно всё: и выбор шага, и скорость сходимости, и место, где метод ломается.
Идея антиградиента: куда идти вниз#
Градиент — вектор из частных производных, он указывает направление наискорейшего роста функции. Значит, минус-градиент — наискорейшее убывание: производная по направлению среди всех направлений единичной длины минимальна. Отсюда итерация метода — небольшой шаг в сторону минус-градиента:
Слово «локально» здесь ключевое: минус-градиент гарантирует убывание только на малом шаге. На большом шаге функция может уже пойти в гору — поэтому у шага есть верхняя граница, и мы её сейчас найдём точно. Для одной переменной метод превращается в простейшую рекуррентность, и его удобно прощупать численно: производная любой функции одной переменной считается через решатель производной, если лень дифференцировать руками.
Выбор шага: цена ошибки в обе стороны#
Тестовая функция одной переменной : градиент равен , и спуск даёт умножение координаты на константу. Вся судьба метода — в этой константе:
Слишком большой шаг — итерации разлетаются: при множитель , точка скачет через минимум, размах растёт. Слишком маленький — спуск жив, но ползёт: при множитель , и чтобы уменьшить ошибку в тысячу раз, нужно примерно шага. Для квадратичной функции с кривизнами (собственными числами матрицы Гессе — как их считать численно, см. численный поиск собственных значений) за один шаг ошибка умножается на худший из множителей:
Спуск на f(x, y) = x² + 4y²: числа по шагам#
Градиент: . Старт , шаг — вдвое меньше границы , запас есть. Минимум в нуле, стартовое значение .
При ближе к границе картина меняется качественно: возьмите — и множитель по станет , координата начнёт проскакивать ноль, а траектория превратится в зигзаг поперёк «долины». Значение функции всё ещё убывает, но путь становится длинным и дёрганым — узнаваемая картинка, которую рисуют в каждом курсе по обучению моделей.
Как выбирать шаг без гадания? Дробление: шагнули, если выросла — вернитесь и уменьшите вдвое. Для квадратичных функций работает и прикидка по кривизне: всегда внутри границы , а для нашего примера даёт — множители по и ровно по : минимум по крутой координате достигается за один шаг. По остаётся множитель , и до точности нужно шагов — против 31 при , причём без всякого риска взрыва. Одна цифра экономит и время, и нервы.
Овраги, зигзаги и стохастическое спасение#
Отношение кривизн — «овражность» функции. У нашего примера — терпимо: с оптимальным шагом множитель ошибки . Но при он даёт : спуск тысячами шагов молотит поперёк оврага, продвигаясь вдоль него со скоростью улитки. Лекарства разные: предобусловливание и нормировка признаков выравнивают кривизны, метод Ньютона использует вторые производные и снимает проблему одной шкалой, спуск с моментом накапливает движение вдоль оврага. Для ограничений вида «не выходить из области» оптимизацию ведут через функцию Лагранжа либо проекционные варианты спуска.
Стохастическая версия (SGD) решает другую проблему — объём данных. Полный градиент на миллионе примеров дорог, вместо него берут случайную мини-выборку: её градиент шумный, но в среднем правильный, а стоит в сто раз меньше. Парадокс в том, что шум полезен: он выбивает траекторию из зигзагов и помогает проскакивать неглубокие ямы невыпуклого ландшафта. Шаг обучения при этом обычно убывает по расписанию: большие шаги вначале — быстро добраться до окрестности минимума, мелкие в конце — точная доводка.
- Считать градиент в старой точке, а шаг делать по новым координатам — классическая ошибка реализации: сначала пересчитали градиент, потом шагнули.
- Выбирать α без проверки: при α > 2/λmax спуск расходится, а не «медленно сходится» — ищите ошибку знака или масштаба.
- Мерить сходимость значением f, а не нормой градиента ‖∇f‖: на овражной функции значение стагнирует далеко от минимума.
- Ждать глобального минимума от невыпуклой функции: спуск честно сходится к стационарной точке, которая бывает седлом или локальной ямой.
- Забывать про масштаб переменных: овраг возникает из-за разнокалиберных координат, нормировка дешевле хитрых методов.
- Держать один и тот же шаг до конца обучения: убывающее α (например, α₀/(1 + k/50)) обычно выигрывает и по скорости, и по точности.
Точка , функция , шаг . Куда шагнёт спуск?
Для при каких спуск сходится?
Частые вопросы
Почему именно минус градиент?
Производная функции по направлению единичной длины равна . По неравенству Коши–Буняковского она минимальна при . То есть минус-градиент — не эвристика, а точное решение задачи «в каком направлении функция убывает быстрее всего».
Как на практике выбирать шаг?
Три рабочих стратегии: константа с проверкой (подобрал на малом числе итераций и зафиксировал), расписание с убыванием (шумный SGD без него не доводит до минимума), дробление шага — если после шага функция не уменьшилась, α делится пополам. Для квадратичных задач есть точная граница , и рабочий выбор обычно .
Чем спуск отличается от метода Ньютона?
Ньютон умножает шаг на обратную матрицу Гессе — использует кривизну и сходится квадратично, но требует вычислять и обращать Гессе: при миллионе параметров это неприлично дорого. Спуск использует только градиент — один вектор, — поэтому и живёт в больших задачах. Для решения нелинейных уравнений, где производные считать дёшево, ньютоновские методы из урока про нелинейные уравнения обычно выигрывают.
Зачем спуску случайность?
Две причины. Первая — экономия: градиент по мини-выборке в сотню примеров в сто раз дешевле полного при том же качестве «в среднем». Вторая — шум: он выбивает траекторию из узких зигзагов и мелких ям, где полный спуск застревает. Плата — необходимость убывающего шага: с постоянным шум не даёт сойтись точно, значение функции колеблется вокруг минимума.
Итог: антиградиент задаёт направление, шаг задаёт судьбу. Квадратичный пример показал всё за пять итераций — от падения функции в шесть раз до разгона координат с разными множителями. Там, где минимизация сводится к линейной системе — например, нормальные уравнения МНК, это численные методы для СЛАУ, — спуск конкурирует с прямыми методами; в больших невыпуклых задачах у него конкурентов почти нет. Дальше по теме: стохастические варианты, момент и адаптивные шаги — но их логика целиком вырастает из того, что мы посчитали руками.
Готовитесь к контрольной?
Чеклист тем по «Численные методы»: что вы уже умеете, что повторить и в каком порядке.
Открыть чеклист предмета →
Проверьте себя в бою
Босс-экзамен по «Численные методы»: квизы всех уроков плюс бесконечный поток сгенерированных задач. Каждая попытка — новый расклад.
Начать босс-экзамен →