На самом деле не обязательно. Есть вот какой симпатичный способ.
Пусть
-- это градиент. На
-том шаге минимизации подлежит одномерная функция
. В окрестности экстремума она примерно квадратична. Секущая в точке
, направленная в вершину параболы, задаётся функцией
, т.е. имеет вдвое меньший угловой коэффициент, чем соответствующая касательная.
Теперь: поскольку метод градиентного спуска всё равно достаточно груб, нет необходимости минимизировать
хоть сколько-то точно. Достаточно на каждом шаге оказываться где-нибудь рядом с минимумом. Другими словами: достаточно делать лишь пару подшагов одномерной итерационной процедуры. Это, допустим, увеличит необходимое количество шагов "верхнего уровня" в несколько раз, но в несколько же раз уменьшится и трудоёмкость каждого шага.
Отсюда алгоритм. Задаём начальное
и некий параметр "сжатия/растяжения"
(например,
). На каждом
-том шаге сперва увеличиваем предыдущее значение
в
раз до тех пор, пока не окажется
. А затем уменьшаем
в
раз до тех пор, пока не будет
. Последнее значение
и принимаем за оценку положения минимума
на данном шаге.