Зачем уметь искать минимум по одной переменной

Минимум по одной переменной — фундаментальная подзадача, которую многомерные методы решают на каждом шаге.

Линейный поиск (line search) — поиск наилучшей длины шага $\alpha$ вдоль выбранного направления $p$: $\min_{\alpha>0} f(x_k+\alpha p)$.

Где прячется одномерная задача

Кажется, что поиск минимума по одной переменной — игрушка. На деле это рабочая лошадка всей непрерывной оптимизации. Когда многомерный метод выбрал направление спуска $p$ (например, $p=-\nabla f$), остаётся вопрос: на сколько шагнуть? Слишком мало — медленно; слишком много — перелетим минимум. Ответ — решить одномерную задачу $\varphi(\alpha)=f(x_k+\alpha p)\to\min$ по скаляру $\alpha>0$. Это и есть line search, встроенный почти в каждый солвер.

Унимодальность

Чтобы одномерный поиск был надёжным, функцию полезно считать унимодальной на отрезке: она строго убывает до некоторой точки $x^*$, а затем строго возрастает. У такой функции ровно один минимум, и его можно находить, последовательно сужая интервал неопределённости — без производных, только по значениям.

Наивный перебор

Самый простой способ — сетка. Разобьём отрезок на $N$ точек и выберем минимальную. Точность $\sim$ длина отрезка $/N$.

import math

def phi(x):
    return (x - 2) ** 2 + math.sin(3 * x)

a, b, N = 0.0, 4.0, 40
best_x, best_v = a, phi(a)
for i in range(N + 1):
    x = a + (b - a) * i / N
    v = phi(x)
    if v < best_v:
        best_v, best_x = v, x

print("Перебор: x* ≈", round(best_x, 3), " f* ≈", round(best_v, 4))

Вывод:

Перебор: x* ≈ 1.6  f* ≈ -0.8362

Сетка из $41$ точки даёт грубую оценку. Чтобы улучшить точность вдвое, нужно вдвое больше вычислений — это расточительно. Метод золотого сечения сужает интервал гораздо умнее.

Интервал неопределённости

Идея методов сужения: держим отрезок $[a,b]$, про который знаем, что минимум внутри. Берём две внутренние пробные точки, сравниваем значения и отбрасываем ту часть, где минимума точно нет. Отрезок сжимается, мы повторяем. Через несколько итераций интервал становится крошечным, а его середина — ответом.

Как работает под капотом

В реальных солверах редко ищут $\alpha$ точно — это дорого. Чаще берут неточный line search: подбирают $\alpha$, лишь бы функция «достаточно» уменьшилась (условия Армихо и Вольфе). Но понимание точного одномерного поиска (золотое сечение, парабола) важно: оно объясняет, почему слишком большой или слишком малый шаг вредят, и лежит в основе быстрых эвристик подбора шага.

Частые ошибки

  • Применять сужение к неунимодальной функции. Если минимумов несколько, метод найдёт какой-то один, возможно не лучший.
  • Слишком мелкая сетка. Перебор с огромным $N$ точен, но крайне медленен — для этого и придуманы умные методы.
  • Искать $\alpha$ слишком точно. В многомерных методах это пустая трата — хватает приближённого шага.

Итоги

  • Одномерная оптимизация — подбор длины шага $\alpha$ вдоль направления; встроена в многомерные методы.
  • Унимодальность гарантирует один минимум и позволяет сужать интервал.
  • Перебор прост, но дорог; умные методы (золотое сечение) сужают интервал быстро.
Проверьте себя
1. Что такое line search в многомерной оптимизации?
AПоиск направления спуска
BПоиск наилучшей длины шага $\alpha$ вдоль фиксированного направления
CПоиск градиента
DПоиск седловой точки
2. Что значит унимодальность функции на отрезке?
AФункция линейна
BФункция убывает до одной точки, затем возрастает (один минимум)
CФункция выпукла
DУ функции нет минимума
3. Почему точный поиск $\alpha$ в многомерных методах часто не нужен?
AОн невозможен
BДостаточно неточного шага (условия Армихо/Вольфе), это дешевле
CШаг всегда равен 1
DГрадиент сам задаёт шаг