Дифференциальное и матричное исчисление

Градиент и линии уровня

Почему градиент — направление наискорейшего роста, и почему он перпендикулярен линиям уровня

Шаг 26 из 117 · ~30 мин

Частные производные и градиент

Частная производная f/xi\partial f/\partial x_i — обычная производная по одной переменной, все остальные считаются постоянными. Собрав их в вектор, получаем градиент:

f(x)=(fx1,,fxn)\nabla f(\mathbf{x}) = \left(\frac{\partial f}{\partial x_1}, \ldots, \frac{\partial f}{\partial x_n}\right)

Определение через линейную аппроксимацию из первого урока переносится дословно, и именно эта запись — рабочая:

f(x+h)=f(x)+f(x),h+o(h)f(\mathbf{x} + \mathbf{h}) = f(\mathbf{x}) + \htmlData{k=inner}{\langle \htmlData{k=grad}{\nabla f(\mathbf{x})}, \htmlData{k=step}{\mathbf{h}}\rangle} + o(\|\mathbf{h}\|)

Обратите внимание, что делить на h\mathbf{h} не приходится: вместо этого появляется . Именно поэтому мы потратили урок на то, чтобы считать его первичной структурой, — без него градиент нельзя даже определить.

Наискорейший рост — это следствие, а не определение

Производная по направлению единичного вектора u\mathbf{u}:

Duf=f,uD_{\mathbf{u}}f = \langle \nabla f, \mathbf{u}\rangle

Теперь спросим, при каком u\mathbf{u} это максимально. По Коши–Буняковскому

f,ufu=f\langle \nabla f, \mathbf{u}\rangle \le \|\nabla f\|\,\|\mathbf{u}\| = \|\nabla f\|

и равенство достигается ровно когда u\mathbf{u} направлен вдоль f\nabla f.

Вот и всё доказательство. «Градиент — направление наискорейшего роста» — не определение и не мнемоника, а одна строчка из неравенства, которое мы уже доказали в блоке 1. Заодно получаем: скорость роста в лучшем направлении равна f\|\nabla f\|.

Включите дисковый переключатель направления и покрутите его — производная по направлению максимальна там, где стрелка:

f(x, y)
1.56
градиент
2, 1.5
крутизна ‖∇f‖
2.5

Линии уровня — окружности, градиент смотрит строго от центра. В самом центре он равен нулю: это минимум.

Перпендикулярность линиям уровня

Линия уровня — множество {x:f(x)=c}\{\mathbf{x} : f(\mathbf{x}) = c\}. Утверждение: градиент ортогонален линии уровня в каждой точке.

Доказательство в одну строку. Пусть u\mathbf{u} — направление вдоль линии уровня. Двигаясь по ней, значение ff не меняется по определению, значит Duf=0D_{\mathbf{u}}f = 0, то есть f,u=0\langle \nabla f, \mathbf{u}\rangle = 0. Это и есть ортогональность.

Отсюда понятно и почему рост максимален перпендикулярно: вдоль линии уровня изменение нулевое, а значит всё изменение живёт в перпендикулярном направлении. Подвигайте точку в виджете и убедитесь, что стрелка всегда пересекает кривую под прямым углом.

Что стоит запомнить про формы

Градиент — это вектор, а не число, и его тип обязан сходиться с типом x\mathbf{x}. Если f:RnRf : \R^n \to \R, то fRn\nabla f \in \R^n. Проверка размерностей здесь работает так же, как shape-исчисление в блоке 1: если в выкладке градиент внезапно оказался матрицей — где-то потерян индекс.

Полезное соглашение, которое встретится в статьях: f\nabla f считают столбцом, а производную f/x\partial f/\partial \mathbf{x} иногда пишут строкой. Тогда они транспонированы друг другу. Это то самое расхождение layout-соглашений, которому посвящён отдельный урок через два шага.

Критические точки в многомерии

Условие первого порядка обобщается: в точке локального экстремума f=0\nabla f = \mathbf{0}. Но обратное неверно ещё сильнее, чем в одномерном случае, потому что появляется новый тип критических точек — седло, где по одним направлениям минимум, по другим максимум.

Переключитесь на x2y2x^2 - y^2 и поставьте точку в начало координат. Градиент нулевой, экстремума нет. В высоких размерностях седла составляют подавляющее большинство критических точек — и это одна из причин, по которой обучение глубоких сетей работает лучше, чем можно было бы бояться: застрять в плохом локальном минимуме труднее, чем замедлиться около седла.

Источники

Проверки

0 из 2
  1. Градиент и линии уровня

    Отметьте все верные утверждения про f:RnRf : \R^n \to \R.

  2. Градиент квадратичной функции

    Реализуйте gradient(coeffs, point) для функции двух переменных

    f(x,y)=ax2+by2+cxy+dx+ey+gf(x, y) = a x^2 + b y^2 + c\,xy + d x + e y + g

    coeffs — это список [a, b, c, d, e, g], point — список [x, y]. Верните [∂f/∂x, ∂f/∂y].

    Продифференцируйте на бумаге один раз:

    fx=2ax+cy+d,fy=2by+cx+e\frac{\partial f}{\partial x} = 2ax + cy + d, \qquad \frac{\partial f}{\partial y} = 2by + cx + e

    Заметьте, что смешанный член cxycxy попадает в обе частные производные — по xx он даёт cycy, по yy даёт cxcx. Именно из-за него линии уровня оказываются повёрнутыми эллипсами, а не осесимметричными.

    Свободный член g в градиент не входит вовсе.

    функция gradient

    Загрузка редактора…

    Ctrl/⌘ + Enter