Метод наискорейшего спуска: формула шага и зигзаг

Метод наискорейшего спуска - это вариант градиентного спуска, в котором на каждом шаге мы движемся против градиента, но длину шага выбираем не наугад и не фиксированной, а оптимально: ровно до точки минимума функции вдоль выбранного направления. Именно поэтому метод и называется наискорейшим - каждый отдельный шаг выжимает из выбранного направления максимум. В задачах он встречается как первый серьёзный метод безусловной оптимизации: на нём удобно разобрать градиент, точный линейный поиск и понятие скорости сходимости. Ниже выведем формулу оптимального шага, покажем, откуда берётся характерный зигзаг траектории, и объясним, почему вытянутые линии уровня резко замедляют спуск. Чтобы сразу почувствовать связь кривизны, шага и зигзага, покрутите калькулятор ниже: он строит траекторию на линиях уровня и показывает, как падает значение функции по итерациям.
Идея метода и направление спуска
Пусть нужно минимизировать гладкую функцию нескольких переменных. В каждой точке градиент указывает направление наибыстрейшего роста функции, поэтому антиградиент задаёт направление наибыстрейшего убывания. Общая схема итерации такова:
где - длина шага на -й итерации. В обычном градиентном спуске берут постоянной или подбирают по эвристике. В методе наискорейшего спуска шаг определяется строго: мы фиксируем направление и ищем такое , при котором функция вдоль этого направления минимальна. Это и есть точный линейный поиск.
Геометрически шаг останавливается там, где направление движения становится касательным к линии уровня: дальше по прямой функция уже растёт. В этой точке новый градиент перпендикулярен старому направлению, поэтому следующий шаг резко поворачивает. Из этого свойства напрямую вытекает зигзагообразная форма траектории, к которой мы вернёмся ниже.
Формула оптимального шага
Чтобы найти , рассмотрим функцию одной переменной и приравняем её производную к нулю. Для квадратичной функции это даёт замкнутую формулу. Возьмём модельную задачу, на которой строят почти все учебные примеры:
Здесь матрица вторых производных (гессиан) постоянна и равна . Подставив шаг в и взяв производную, получаем оптимальную длину шага:
Числитель - квадрат нормы градиента, знаменатель учитывает кривизну функции в направлении градиента. Чем сильнее кривизна вдоль , тем короче шаг, и наоборот. Эта формула точна для любой квадратичной функции; для произвольной гладкой функции тот же шаг находят численно (например, дроблением шага или методом золотого сечения по ).

На карте линий уровня хорошо видно ключевое свойство: каждый шаг останавливается в точке касания эллипса, а соседние звенья ломаной перпендикулярны. Калькулятор выше строит ровно эту картину для из стартовой точки .
Почему траектория идёт зигзагом
Зигзаг - не дефект реализации, а математическое следствие точного линейного поиска. В точке минимума вдоль направления производная , а она равна скалярному произведению нового градиента на старое направление. Значит, : каждый следующий градиент ортогонален предыдущему. Для функции двух переменных это означает, что все шаги чередуют два взаимно перпендикулярных направления, и ломаная зигзагит между двумя «стенками» оврага.
Чем сильнее вытянуты линии уровня, тем уже этот овраг и тем мельче становятся полезные шаги: метод тратит итерации на метание поперёк оврага вместо движения вдоль него к минимуму. Передвиньте в калькуляторе ползунок кривизны - при около единицы линии уровня почти круглые и спуск идёт почти по прямой, а при больших зигзаг становится частым и заметным.
Число обусловленности и скорость сходимости
Степень вытянутости линий уровня измеряет число обусловленности гессиана - отношение наибольшего собственного значения к наименьшему:
Для нашей модельной функции с и получаем . Скорость сходимости метода наискорейшего спуска линейная (геометрическая), и её множитель выражается именно через :
При множитель , а его квадрат около : за итерацию значение функции в среднем падает менее чем вдвое. При (идеально круглые линии уровня) множитель равен нулю - спуск попадает в минимум за один шаг. А при множитель стремится к единице, и метод почти останавливается. Это главный практический вывод: наискорейший спуск страдает от плохо обусловленных задач, и именно поэтому на смену ему приходят метод сопряжённых градиентов и метод Ньютона.
Пример решения типовой задачи
Разберём стандартную постановку: минимизировать методом наискорейшего спуска из точки . Градиент здесь , гессиан .
В стартовой точке градиент , его квадрат нормы . Знаменатель шага . Отсюда оптимальный шаг:
Делаем шаг и получаем новую точку:
Значение функции упало с до . Проверка ортогональности: новый градиент , а старое направление было . Их скалярное произведение - шаги действительно перпендикулярны, как и требует теория. Дальше итерации повторяются, и за каждый шаг функция убывает примерно в полтора раза, что согласуется с множителем при . Калькулятор выше собирает ровно эту цепочку, оставляя вам контроль над формулами и числами.
Частые ошибки
- Фиксированный шаг вместо линейного поиска. Метод наискорейшего спуска по определению выбирает точной минимизацией вдоль направления. Если взять постоянный , это уже обычный градиентный спуск, и при неверном выборе он либо расходится, либо ползёт.
- Движение по градиенту, а не против. Спускаемся в направлении . Знак минус в формуле обязателен, иначе вы будете подниматься в максимум.
- Путаница в формуле шага. В числителе стоит , в знаменателе с гессианом. Если перепутать местами или забыть , шаг получится неверной длины.
- Ожидание быстрой сходимости при большом . При вытянутых линиях уровня метод честно зигзагит и сходится медленно. Это не ошибка кода, а свойство метода - для таких задач берут сопряжённые градиенты.
- Неверный критерий остановки. Останавливаться надо по малости нормы градиента , а не по числу шагов наугад: иначе либо недосчитаете, либо потратите лишние итерации.
FAQ
Чем метод наискорейшего спуска отличается от обычного градиентного спуска? Направление у них одно и то же - антиградиент. Разница в длине шага: в наискорейшем спуске выбирается точной одномерной минимизацией вдоль направления, тогда как в обычном градиентном спуске шаг фиксированный или подбирается грубой эвристикой.
Почему соседние шаги перпендикулярны? Потому что шаг останавливается в минимуме функции вдоль направления, а там производная по шагу равна нулю. Эта производная равна скалярному произведению нового градиента на старое направление, значит, новый градиент ортогонален предыдущему шагу.
Почему метод медленно сходится на овражных функциях? Овражная функция имеет большое число обусловленности : линии уровня сильно вытянуты. Множитель сходимости при больших близок к единице, поэтому за итерацию функция убывает совсем немного, а траектория зигзагит поперёк оврага.
Коротко
Метод наискорейшего спуска движется против градиента, выбирая на каждом шаге оптимальную длину точным линейным поиском. Из условия минимума вдоль направления следует ортогональность соседних шагов, отсюда характерный зигзаг. Скорость сходимости линейна с множителем по числу обусловленности : круглые линии уровня дают спуск за один шаг, вытянутые овраги резко его замедляют.
Читайте также

Метод сопряжённых градиентов: формулы и пример
Метод сопряжённых градиентов простыми словами: формулы шага и коэффициента бета, A-сопряжённость направлений, почему он сходится за n шагов и где студенты ошибаются.

Алгоритм обратного распространения ошибки: как учится сеть
Backpropagation простыми словами: как обратное распространение ошибки считает градиенты по цепному правилу, обновляет веса нейросети и при чём тут исчезающий градиент. С формулами и разбором.

Оптимизатор RMSprop: формула и параметры
Как работает RMSprop: формула скользящего среднего квадратов градиента, роль rho и learning rate, отличия от AdaGrad и Adam. Разбор с интерактивным калькулятором траектории.