Градиент и направление наибыстрейшего роста
Градиент — стрелка, указывающая, куда функция растёт круче всего.
Градиент $\nabla f$ — вектор из всех частных производных функции. Он указывает направление наибыстрейшего возрастания.
Если частные производные говорят о крутизне вдоль осей по отдельности, то градиент объединяет их в одну стрелку — вектор, показывающий, в какую сторону функция растёт быстрее всего. Это центральное понятие многомерной оптимизации: чтобы подняться на холм кратчайшим путём, идите по градиенту; чтобы спуститься — против него.
Определение
Градиент собирает частные производные в вектор:
$$\nabla f = \left(\frac{\partial f}{\partial x},\ \frac{\partial f}{\partial y}\right)$$
Символ $\nabla$ («набла») — перевёрнутый треугольник. Длина вектора градиента — это крутизна склона в самом крутом направлении, а сам вектор показывает, куда именно идти на подъём.
Ключевое свойство
Градиент всегда направлен в сторону наибыстрейшего роста функции, а противоположный вектор $-\nabla f$ — в сторону наибыстрейшего убывания. Это не случайность, а математический факт: среди всех направлений именно градиент даёт максимальную скорость изменения. Кроме того, градиент перпендикулярен линиям уровня (где функция постоянна) — как ручей всегда течёт поперёк горизонталей карты.
Численная проверка свойства
Возьмём $f(x,y)=x^2+y^2$ (чаша с минимумом в начале). Её градиент — $(2x, 2y)$. Проверим, что движение по градиенту увеличивает функцию сильнее, чем движение в произвольную сторону.
import math
def f(x, y): return x**2 + y**2
x, y = 1.0, 1.0
gx, gy = 2*x, 2*y # градиент в точке
glen = math.sqrt(gx*gx + gy*gy)
step = 0.001
# шаг по градиенту против шага в случайную сторону
f0 = f(x, y)
f_grad = f(x + step*gx/glen, y + step*gy/glen)
f_side = f(x - step*gy/glen, y + step*gx/glen) # поперёк градиента
print(f"прирост по градиенту = {f_grad - f0:.6f}")
print(f"прирост поперёк (уров.) = {f_side - f0:.6f}")Вывод:
прирост по градиенту = 0.002829 прирост поперёк (уров.) = 0.000001
Шаг по градиенту увеличил функцию заметно, а шаг поперёк (вдоль линии уровня) — почти не изменил её. Это и есть смысл градиента: он указывает направление максимального роста, а перпендикулярное ему направление функцию почти не меняет.
Как работает под капотом
Изменение функции при малом шаге в направлении вектора равно скалярному произведению градиента на этот вектор. Скалярное произведение максимально, когда направления совпадают, — отсюда и свойство: вдоль градиента рост максимален, поперёк (когда векторы перпендикулярны) — нулевой. Поэтому шаг вдоль линии уровня почти не меняет функцию: там градиент и направление шага ортогональны.
Частые ошибки
Первая — путать градиент (вектор, направление) с производной (число). В многомерье «производная» становится вектором. Вторая — забыть нормировать градиент, когда важно именно направление: длина вектора несёт информацию о крутизне, но для «куда идти» иногда нужен единичный вектор. Третья — думать, что градиент указывает на сам минимум или максимум: он указывает лишь локальное направление наискорейшего роста в данной точке, и это направление меняется от точки к точке.
Итог
- Градиент $\nabla f$ — вектор частных производных.
- Он указывает направление наибыстрейшего роста функции.
- $-\nabla f$ указывает направление наибыстрейшего спуска.
- Градиент перпендикулярен линиям уровня.