Экстремумы функций нескольких переменных 🏔️
Для функции одной переменной поиск экстремума — почти рутинная операция: приравниваем производную к нулю, находим кандидатов, смотрим на знак второй производной — и готово, минимум или максимум найден. У тебя за плечами десятки таких задач ещё со школы. Сегодня мы поднимаемся на следующий уровень: как искать «дно ямы» или «вершину холма» функции, которая зависит не от одной, а от двух, трёх или миллиона переменных сразу. И здесь тебя ждёт сюрприз: в этом более богатом мире появляется совершенно новый тип критической точки, которого попросту не существовало в одномерном случае, — седловая точка, точка, которая одновременно и «похожа на минимум», и «похожа на максимум», но на самом деле не является ни тем, ни другим.
Разберёмся сразу, зачем тебе это по-настоящему нужно, если ты идёшь в машинное обучение. Функция потерь нейросети — это функция от весов модели, а весов у современных сетей могут быть миллионы, а то и миллиарды. Когда ты запускаешь обучение, оптимизатор ищет точку, где градиент функции потерь равен нулю, — то есть ищет ровно те критические точки, о которых пойдёт речь в этом уроке. И вот ключевой, не самый очевидный факт, вокруг которого построена значительная часть современной теории оптимизации глубоких сетей: при большом числе переменных подавляющее большинство критических точек — это не локальные минимумы (как хотелось бы) и не локальные максимумы, а именно седловые точки. Это не курьёз и не редкое исключение — это статистическая неизбежность, вытекающая из простой комбинаторики знаков, и мы разберём её строго в последнем разделе урока.
Представь себе горный хребет с несколькими пиками и несколькими долинами между ними. Если ты стоишь ровно на перевале — там, где тропа переваливает через хребет из одной долины в другую, — земля под ногами локально горизонтальна: ни вперёд-назад, ни вправо-влево нет уклона в первом приближении. Но эта точка — совсем не то же самое, что дно долины или вершина пика. Вдоль хребта (влево-вправо) эта точка — самая низкая точка, локальный минимум сечения. А вдоль тропы (вперёд-назад, через перевал) — она, наоборот, самая высокая точка на этом пути, локальный максимум сечения. Именно так выглядит седловая точка: минимум в одном направлении, максимум в другом, и в целом — ни то, ни другое.
Сегодня мы пройдём полный путь: сформулируем необходимое условие экстремума (обобщение простого «производная равна нулю» на много переменных), разберём достаточное условие через гессиан — специальную матрицу вторых частных производных — и его определитель, разберём геометрию седловой точки во всех деталях, и завершим тем, ради чего, собственно, весь этот аппарат и нужен современному специалисту по машинному обучению: почему седловые точки — одна из главных проблем оптимизации в глубоком обучении, и как гессиан функции потерь используется в методах оптимизации второго порядка, чтобы отличить настоящий минимум от седла.
История: откуда это взялось?
Задолго до того, как появилось само понятие производной в современном виде, французский математик и юрист Пьер Ферма в 1630-х годах предложил метод нахождения максимумов и минимумов — он подметил, что вблизи точки экстремума функция «почти не меняется» при малом сдвиге аргумента, и превратил это наблюдение в конкретную вычислительную процедуру. Строгое обоснование через понятие производной пришло позже, в работах Ньютона и Лейбница, но сама идея — искать точки, где скорость изменения функции обращается в ноль, — принадлежит именно Ферма. Обобщение этой идеи на функции нескольких переменных заняло куда больше времени и потребовало усилий математиков XVIII века, прежде всего Леонарда Эйлера и Жозефа Луи Лагранжа, которые занимались задачами вариационного исчисления и оптимизации функций многих переменных в контексте механики и астрономии.
Ключевой инструмент сегодняшнего урока — определитель, который позволяет отличить минимум от максимума и от седла, — носит имя немецкого математика Людвига Отто Гессе. В 1844 году в работе, посвящённой преобразованию однородных функций третьей и четвёртой степени (по сути, чисто алгебраический вопрос о кривых и поверхностях), Гессе ввёл матрицу вторых частных производных и стал изучать её определитель как инструмент анализа особенностей кривых. Любопытно, что сам Гессе не думал о задачах оптимизации в современном смысле — его интересовала геометрия алгебраических кривых. Термин «гессиан» (Hessian) в честь Гессе ввёл позже другой выдающийся математик, Джеймс Джозеф Сильвестр, и лишь постепенно, к концу XIX века, гессиан и его определитель заняли своё нынешнее место в стандартном курсе анализа функций многих переменных как инструмент классификации критических точек.
Термин «седловая точка» пришёл из чистой геометрии: поверхность в такой точке действительно напоминает по форме седло для верховой езды — выгибается вверх под всадником вдоль хребта лошадиной спины и одновременно выгибается вниз по бокам, там, где седло охватывает бока животного. Долгое время седловая точка воспринималась как относительно редкий, «экзотический» случай в учебных задачах на две-три переменные. Но с развитием численной оптимизации и особенно с приходом глубокого обучения оказалось, что это не экзотика, а статистическое правило: в 2014 году вышла ставшая знаковой статья Dauphin, Pascanu, Gulcehre, Cho, Ganguli и Bengio под названием «Identifying and attacking the saddle point problem in high-dimensional non-convex optimization», в которой было явно показано, что трудности обучения глубоких нейросетей связаны в первую очередь именно с седловыми точками и плоскими плато вокруг них, а вовсе не с «застреванием» в плохих локальных минимумах, как считалось раньше. Идея, придуманная в середине XIX века для чисто алгебраических задач о кривых, спустя полтора столетия оказалась одним из ключевых объяснений того, почему обучение огромных нейросетей вообще возможно и в чём его подводные камни.
Необходимое условие экстремума: критические точки
Интуиция: горизонтальная касательная плоскость
Давай разберёмся, что вообще значит «локальный экстремум» для функции нескольких переменных. Точка $(x_0,y_0)$ называется точкой локального минимума функции $f(x,y)$, если в некоторой её окрестности значение функции нигде не меньше, чем $f(x_0,y_0)$ — то есть это самая низкая точка в своей маленькой окрестности (не обязательно на всей области определения). Локальный максимум определяется зеркально.
Представь график функции как холмистую поверхность. В точке локального минимума (дне ямы) или локального максимума (вершине холма) касательная плоскость к поверхности горизонтальна — она не наклонена ни в одну сторону. А если касательная плоскость горизонтальна, значит скорость изменения функции вдоль абсолютно любого направления в этой точке равна нулю. В прошлом уроке мы строго доказали (через неравенство Коши-Буняковского), что скорость изменения функции вдоль направления $v$ равна $D_v f=\nabla f\cdot v$, и что эта величина обращается в ноль для всех направлений сразу тогда и только тогда, когда сам градиент — нулевой вектор. Отсюда прямой вывод: в точке экстремума градиент обязан быть равен нулю.
Определение
Теорема (необходимое условие экстремума). Пусть функция $f(x_1,\dots,x_n)$ дифференцируема в точке $x_0$ и имеет в этой точке локальный экстремум (минимум или максимум). Тогда все частные производные первого порядка в этой точке равны нулю:
$$\frac{\partial f}{\partial x_1}(x_0)=\frac{\partial f}{\partial x_2}(x_0)=\dots=\frac{\partial f}{\partial x_n}(x_0)=0,$$то есть градиент функции в этой точке обращается в нулевой вектор: $\nabla f(x_0)=0$.
Точки, в которых выполняется это условие, называются критическими (или стационарными) точками функции.
Обрати особое внимание на слово «необходимое». Это условие — фильтр, который отсеивает заведомо неподходящих кандидатов, но не гарантирует, что каждая найденная критическая точка действительно окажется экстремумом. Среди критических точек, помимо истинных минимумов и максимумов, будут прятаться и седловые точки — именно поэтому необходимое условие всегда нужно дополнять вторым, достаточным тестом, который мы разберём в следующем разделе.
Разбор примеров
Пример 1 (лёгкий). Найти критические точки функции $f(x,y)=x^2+y^2+2x-4y+8$.
Находим частные производные и приравниваем их к нулю:
$$\frac{\partial f}{\partial x}=2x+2=0 \ \Rightarrow\ x=-1, \qquad \frac{\partial f}{\partial y}=2y-4=0 \ \Rightarrow\ y=2$$Ответ: единственная критическая точка $(-1,2)$. Значение функции в ней: $f(-1,2)=1+4-2-8+8=3$.
Пример 2 (средний). Найти все критические точки функции $f(x,y)=x^3+y^3-3xy$.
Составляем систему из равенства нулю обеих частных производных:
$$\frac{\partial f}{\partial x}=3x^2-3y=0 \ \Rightarrow\ y=x^2, \qquad \frac{\partial f}{\partial y}=3y^2-3x=0 \ \Rightarrow\ x=y^2$$Подставляем первое выражение во второе: $x=(x^2)^2=x^4$, откуда $x^4-x=0$, то есть $x(x^3-1)=0$. Отсюда $x=0$ или $x=1$.
При $x=0$: $y=x^2=0$. Точка $(0,0)$.
При $x=1$: $y=x^2=1$. Точка $(1,1)$.
Ответ: две критические точки, $(0,0)$ и $(1,1)$. Заметь: одной только необходимой информации мало, чтобы понять, какая из них минимум, какая максимум, а какая вообще ни то, ни другое, — к этому мы вернёмся в следующем разделе на этом же самом примере.
Пример 3 (сложный, машинное обучение). Функция потерь простой модели с «кольцевым» минимумом задана как $L(w_1,w_2)=(w_1^2+w_2^2-1)^2$. Найти все критические точки.
Дифференцируем по цепному правилу, обозначив $r^2=w_1^2+w_2^2$:
$$\frac{\partial L}{\partial w_1}=2(w_1^2+w_2^2-1)\cdot2w_1=4w_1(w_1^2+w_2^2-1), \qquad \frac{\partial L}{\partial w_2}=4w_2(w_1^2+w_2^2-1)$$Обе производные обращаются в ноль в двух принципиально разных случаях. Первый: $w_1=0$ и $w_2=0$ одновременно (при этом каждый множитель $w_1$ и $w_2$ сам по себе обнуляет соответствующее выражение) — это даёт изолированную точку $(0,0)$, в которой $L(0,0)=(0-1)^2=1$. Второй: $w_1^2+w_2^2-1=0$, то есть вся окружность единичного радиуса — на ней $L=0$ в каждой точке.
Ответ: критические точки этой функции — это изолированная точка $(0,0)$ и целая окружность $w_1^2+w_2^2=1$. Этот пример важен методически: множество решений уравнения $\nabla f=0$ вовсе не обязано быть конечным набором изолированных точек — оно может быть целой кривой (или, в пространствах большей размерности, целой поверхностью) критических точек. Такие «долины» критических точек с одинаковым значением функции — обычное явление в переобученных или переопараметризованных моделях машинного обучения, где разным наборам весов соответствует одна и та же нулевая ошибка.
Почему это важно
Необходимое условие $\nabla f=0$ — это единственный практически осуществимый способ сузить бесконечное множество всех точек области определения до конечного (или хотя бы обозримого) списка кандидатов на экстремум: вместо перебора всех точек плоскости или пространства решаем систему уравнений. Но, как мы увидели уже во втором примере, сам список кандидатов ничего не говорит о том, какого рода точка перед нами — минимум, максимум или что-то третье. Чтобы классифицировать найденных кандидатов, нужен второй, достаточный инструмент — и это ровно тот гессиан, к которому мы сейчас переходим.
Достаточное условие: гессиан и определитель Гессе
Интуиция: вторая производная, но во всех направлениях сразу
Вспомни, как для функции одной переменной работал тест второй производной: если $f'(x_0)=0$ и $f''(x_0)>0$, парабола локального приближения выгнута вверх — минимум; если $f''(x_0)<0$ — выгнута вниз, максимум. Для функции двух переменных всё интереснее: кривизна графика может быть разной в разных направлениях. Вдоль одного направления функция может изгибаться вверх, а вдоль другого — вниз, и одной-единственной «второй производной» тут не обойтись: нужно собрать информацию о кривизне сразу по всем осям и по их взаимодействию друг с другом в единую конструкцию.
Такой конструкцией и служит гессиан — матрица, собранная из всех вторых частных производных функции. Для функции двух переменных $f(x,y)$ это матрица размера $2\times2$:
$$H=\begin{pmatrix}f_{xx} & f_{xy}\\ f_{yx} & f_{yy}\end{pmatrix}$$По теореме о смешанных производных (теорема Шварца, или теорема Клеро, — она у тебя уже встречалась раньше в курсе) для достаточно гладких функций $f_{xy}=f_{yx}$, поэтому гессиан всегда симметричен. Вся информация, которая нужна, чтобы отличить минимум от максимума и от седла, компактно упаковывается в определитель Гессе:
$$D=\det H = f_{xx}\,f_{yy}-\left(f_{xy}\right)^2$$Определение
Теорема (достаточное условие экстремума через гессиан). Пусть $(x_0,y_0)$ — критическая точка функции $f(x,y)$, дважды непрерывно дифференцируемой в некоторой окрестности этой точки, и пусть
$$D=f_{xx}(x_0,y_0)\,f_{yy}(x_0,y_0)-\bigl[f_{xy}(x_0,y_0)\bigr]^2$$Тогда:
— если $D>0$ и $f_{xx}(x_0,y_0)>0$, то $(x_0,y_0)$ — точка локального минимума;
— если $D>0$ и $f_{xx}(x_0,y_0)<0$, то $(x_0,y_0)$ — точка локального максимума;
— если $D<0$, то $(x_0,y_0)$ — седловая точка (не экстремум);
— если $D=0$, тест не даёт ответа: нужен дополнительный анализ (например, прямое исследование знака приращения функции).
Интуиция, почему это работает, связана с собственными значениями симметричной матрицы $H$: для матрицы $2\times2$ определитель равен произведению собственных значений, $D=\lambda_1\lambda_2$, а след матрицы (то есть $f_{xx}+f_{yy}$) равен их сумме. Если оба собственных значения положительны — функция выгибается вверх вдоль обоих главных направлений кривизны, значит перед нами минимум, и при этом $D=\lambda_1\lambda_2>0$. Если оба отрицательны — максимум, и снова $D>0$ (произведение двух отрицательных чисел положительно), но теперь $f_{xx}<0$. А если знаки собственных значений разные — вдоль одного направления выгиб вверх, вдоль другого вниз, — их произведение отрицательно, $D<0$, и это в точности седловая точка. Обрати внимание: критерий по знаку $f_{xx}$ работает только при $D>0$, потому что именно в этом случае оба собственных значения гарантированно одного знака, и $f_{xx}$ (диагональный элемент) отражает этот общий знак.
Разбор примеров
Пример 1 (лёгкий). Классифицировать критическую точку $(-1,2)$ функции $f(x,y)=x^2+y^2+2x-4y+8$ из предыдущего раздела.
Вторые частные производные: $f_{xx}=2$, $f_{yy}=2$, $f_{xy}=0$.
$$D=2\cdot2-0^2=4>0, \qquad f_{xx}=2>0$$Ответ: $D>0$ и $f_{xx}>0$ — точка $(-1,2)$ является точкой локального минимума, значение функции в ней $f(-1,2)=3$.
Пример 2 (средний). Классифицировать обе критические точки $(0,0)$ и $(1,1)$ функции $f(x,y)=x^3+y^3-3xy$, найденные в предыдущем разделе.
Вторые частные производные: $f_{xx}=6x$, $f_{yy}=6y$, $f_{xy}=-3$.
В точке $(0,0)$: $f_{xx}=0$, $f_{yy}=0$, $f_{xy}=-3$.
$$D=0\cdot0-(-3)^2=-9<0$$$D<0$ — точка $(0,0)$ является седловой точкой.
В точке $(1,1)$: $f_{xx}=6$, $f_{yy}=6$, $f_{xy}=-3$.
$$D=6\cdot6-(-3)^2=36-9=27>0, \qquad f_{xx}=6>0$$Ответ: $(0,0)$ — седловая точка (значение $f(0,0)=0$), а $(1,1)$ — точка локального минимума со значением $f(1,1)=1+1-3=-1$. Обрати внимание, насколько небогатой была бы картина, если бы мы остановились на одном лишь необходимом условии: оно нашло обе точки, но только гессиан объяснил, что они устроены совершенно по-разному.
Пример 3 (сложный, граничный случай $D=0$). Рассмотреть две похожие функции, $f(x,y)=x^4+y^4$ и $g(x,y)=x^4-y^4$, в критической точке $(0,0)$ для каждой из них, и показать, что тест по гессиану здесь бессилен, хотя сами функции ведут себя принципиально по-разному.
Для $f(x,y)=x^4+y^4$: $f_x=4x^3$, $f_y=4y^3$, обе обнуляются при $x=0,y=0$ — критическая точка $(0,0)$. Вторые производные: $f_{xx}=12x^2$, $f_{yy}=12y^2$, $f_{xy}=0$; в точке $(0,0)$ все они равны нулю, значит $D=0\cdot0-0^2=0$ — тест не работает. Но напрямую видно: $f(x,y)=x^4+y^4\ge0=f(0,0)$ для абсолютно любых $x,y$, значит $(0,0)$ — это точка глобального минимума.
Для $g(x,y)=x^4-y^4$: $g_x=4x^3$, $g_y=-4y^3$, обе обнуляются при $x=0,y=0$. Вторые производные: $g_{xx}=12x^2$, $g_{yy}=-12y^2$, $g_{xy}=0$; в точке $(0,0)$ снова всё обнуляется, $D=0$. Но вдоль оси $x$ (при $y=0$): $g(x,0)=x^4\ge0$ — функция растёт от нуля. А вдоль оси $y$ (при $x=0$): $g(0,y)=-y^4\le0$ — функция убывает от нуля. Значит в любой сколь угодно малой окрестности точки $(0,0)$ есть значения и больше нуля, и меньше нуля — это точка, которая не является ни минимумом, ни максимумом, то есть по сути седловая (хотя и не «классического» вида).
Ответ: обе функции дают одинаковый нулевой определитель Гессе $D=0$ в точке $(0,0)$, но $f=x^4+y^4$ там имеет минимум, а $g=x^4-y^4$ — седловую точку. Это прямое доказательство того, что при $D=0$ формальный тест не может дать ответа в принципе — нужен содержательный анализ самой функции, а не только её вторых производных в одной точке.
Почему это важно
Гессиан и его определитель дают чисто вычислительную, механическую процедуру классификации критической точки — без необходимости рисовать график или интуитивно догадываться, «похоже ли это на яму или на холм». Это критически важно уже для функций двух-трёх переменных, где график ещё можно представить, но становится абсолютно незаменимым при работе с функциями от сотен, тысяч или миллионов переменных, где никакого графика в принципе нет и быть не может — а гессиан (пусть и огромного размера) остаётся вполне конкретным математическим объектом, который можно анализировать. Именно обобщение этого теста на много измерений — через знаки всех собственных значений полной матрицы вторых производных — лежит в основе анализа геометрии функций потерь в глубоком обучении, к чему мы вернёмся чуть позже.
Седловые точки геометрически
Интуиция: форма ковбойского седла
Давай разберёмся детальнее, как именно выглядит седловая точка «изнутри». Возьми самый простой и самый показательный пример — функцию $f(x,y)=x^2-y^2$. Если зафиксировать $y=0$ и смотреть только вдоль оси $x$, получится сечение $f(x,0)=x^2$ — обычная парабола, выгнутая вверх, с минимумом в точке $x=0$. А если зафиксировать $x=0$ и смотреть вдоль оси $y$, получится сечение $f(0,y)=-y^2$ — парабола, выгнутая вниз, с максимумом в точке $y=0$. В самой точке $(0,0)$ эти два противоречащих друг другу поведения сходятся вместе: минимум по одной оси, максимум по другой. Поверхность в окрестности такой точки действительно похожа по форме на седло всадника — выгибается вверх вдоль спины лошади (одно направление) и одновременно выгибается вниз по бокам, охватывая тело животного (перпендикулярное направление).
Определение
Определение (геометрический смысл седловой точки). Критическая точка $(x_0,y_0)$ функции $f(x,y)$ называется седловой, если существуют такие два направления, что вдоль одного из них функция имеет в этой точке локальный минимум своего сечения, а вдоль другого — локальный максимум своего сечения. При этом сама точка $(x_0,y_0)$ не является ни локальным минимумом, ни локальным максимумом всей функции $f$ — потому что в любой сколь угодно малой её окрестности найдутся точки, где значение функции больше $f(x_0,y_0)$, и точки, где оно меньше.
Разбор примеров
Пример 1 (лёгкий). Классифицировать критическую точку $(0,0)$ функции $f(x,y)=x^2-y^2$ и явно описать оба сечения.
Частные производные: $f_x=2x$, $f_y=-2y$, обе обнуляются при $x=0,y=0$ — единственная критическая точка $(0,0)$. Вторые производные: $f_{xx}=2$, $f_{yy}=-2$, $f_{xy}=0$.
$$D=2\cdot(-2)-0^2=-4<0$$Ответ: $(0,0)$ — седловая точка. Сечение вдоль $y=0$ даёт $f(x,0)=x^2$ (минимум по этому направлению), сечение вдоль $x=0$ даёт $f(0,y)=-y^2$ (максимум по этому направлению) — классический пример гиперболического параболоида, канонической формы седла.
Пример 2 (средний). Классифицировать критическую точку функции $f(x,y)=xy$ и объяснить, почему это тоже седло, хотя формула на первый взгляд не похожа на предыдущий пример.
Частные производные: $f_x=y$, $f_y=x$, обе обнуляются одновременно только при $x=0,y=0$ — критическая точка $(0,0)$. Вторые производные: $f_{xx}=0$, $f_{yy}=0$, $f_{xy}=1$.
$$D=0\cdot0-1^2=-1<0$$Ответ: $(0,0)$ — седловая точка. Если сделать замену координат $u=x+y$, $v=x-y$ (поворот осей на $45°$), функция превращается в $f=xy=\dfrac{u^2-v^2}{4}$ — в точности функция из предыдущего примера, только повёрнутая. Иначе говоря, $f(x,y)=xy$ — это то же самое седло $x^2-y^2$, просто развёрнутое на $45°$: вдоль диагонали $y=x$ функция $f(x,x)=x^2$ растёт (минимум), а вдоль диагонали $y=-x$ функция $f(x,-x)=-x^2$ убывает (максимум).
Пример 3 (сложный, физическая интерпретация — горный перевал). Функция высоты местности задана как $f(x,y)=3-(x-1)^2+(y-2)^2$. Найти критическую точку, классифицировать её и объяснить геометрический смысл в терминах «горного перевала».
Частные производные: $f_x=-2(x-1)=0\ \Rightarrow\ x=1$; $f_y=2(y-2)=0\ \Rightarrow\ y=2$. Критическая точка $(1,2)$.
Вторые производные: $f_{xx}=-2$, $f_{yy}=2$, $f_{xy}=0$.
$$D=(-2)\cdot2-0^2=-4<0$$Ответ: $(1,2)$ — седловая точка, значение высоты в ней $f(1,2)=3-0+0=3$. Вдоль оси $x$ функция $f(x,2)=3-(x-1)^2$ убывает от максимума при удалении от $x=1$ — это как раз направление «вдоль хребта», где точка $(1,2)$ является самой высокой точкой пути (локальный максимум сечения). А вдоль оси $y$ функция $f(1,y)=3+(y-2)^2$ растёт при удалении от $y=2$ — это направление «через перевал», где точка $(1,2)$, наоборот, самая низкая точка пути (локальный минимум сечения). Именно так устроен реальный горный перевал: чтобы попасть из одной долины в другую, ты идёшь через самую низкую точку хребта — но эта же точка является самой высокой точкой во всём хребте вдоль его гребня.
Почему это важно
Седловая точка — это не патология и не редкое исключение, а совершенно естественный, типичный объект геометрии функций нескольких переменных: как только в игру вступает больше одной независимой переменной, у кривизны появляется возможность «расщепиться» по направлениям, и ровно это расщепление даёт седло. Понимание того, что в седловой точке градиент равен нулю (необходимое условие выполнено!), но при этом точка не является экстремумом, — это ключ к пониманию, зачем вообще нужен второй, достаточный тест через гессиан. И, что важнее всего для тебя как будущего специалиста по машинному обучению, ровно эта же геометрия — только в пространстве с миллионами измерений вместо двух — и есть главный герой следующего раздела.
Седловые точки в высокоразмерных пространствах: главная проблема оптимизации в глубоком обучении
Интуиция: подбрасываем много монет одновременно
Давай разберёмся, что меняется, когда вместо двух переменных у функции их становится очень много — как у весов реальной нейросети, где счёт может идти на миллионы и миллиарды. Обобщение теста на много измерений звучит так: критическая точка функции $n$ переменных является локальным минимумом тогда и только тогда, когда все $n$ собственных значений полного гессиана размера $n\times n$ положительны; локальным максимумом — когда все отрицательны; а если среди собственных значений есть и положительные, и отрицательные — перед нами седловая точка (обобщение того же самого $D<0$, только теперь распределённое по множеству направлений вместо двух).
Вот здесь и начинается по-настоящему интересная часть. Представь, что знак каждого собственного значения гессиана в случайно выбранной критической точке сложной невыпуклой функции ведёт себя как подбрасывание монеты: с некоторой вероятностью плюс, с некоторой — минус (это, конечно, упрощение, но оно прекрасно передаёт суть явления и подтверждается более строгими рассуждениями из теории случайных матриц). Чтобы точка оказалась истинным локальным минимумом, нужно, чтобы все $n$ «монет» одновременно выпали «орлом». А вероятность такого события экспоненциально падает с ростом числа монет — при десяти монетах это ещё вероятно происходит время от времени, но уже при тысяче или миллионе переменных шанс того, что все они одновременно окажутся положительными, становится исчезающе, практически нулевым. Значит, при типичных для глубокого обучения размерностях подавляющее большинство критических точек функции потерь — это седловые точки, а не локальные минимумы или максимумы.
Теорема (эмпирический факт из теории ландшафтов функций потерь)
Факт (доминирование седловых точек в высокой размерности). Пусть критическая точка невыпуклой функции $L$ от $n$ переменных выбрана случайным образом, а знаки собственных значений гессиана в этой точке распределены независимо и случайно (упрощённая, но качественно верная модель, подтверждаемая более строгой теорией случайных матриц, например гауссовыми ортогональными ансамблями случайных матриц и полукруглым законом Вигнера для распределения собственных значений). Тогда вероятность того, что найденная критическая точка окажется истинным локальным минимумом (все $n$ собственных значений положительны), приблизительно равна $\left(\dfrac12\right)^{n-1}$ и убывает экспоненциально с ростом $n$. Уже при $n$ порядка нескольких десятков эта вероятность становится ничтожно малой, а при $n$ порядка миллионов (типичный размер современной нейросети) — практически равна нулю.
Практические последствия этого факта двойственны. С одной стороны, хорошая новость: раз истинных плохих локальных минимумов (с высоким значением функции потерь) статистически почти нет среди критических точек, страх «застрять в плохом локальном минимуме» при обучении больших моделей во многом преувеличен — большинство критических точек, куда может «упереться» оптимизатор, это сёдла, а не тупики. С другой стороны, плохая новость: рядом с седловыми точками часто возникают протяжённые плоские участки («плато»), где градиент вдоль некоторых направлений близок к нулю, и метод первого порядка (обычный градиентный спуск) там резко замедляется, потому что шаг $w_{new}=w-\eta\nabla L(w)$ становится крошечным именно там, где кривизна почти нулевая. А методы второго порядка, наивно использующие гессиан (классический метод Ньютона), устроены ещё коварнее: они ищут любую точку с нулевым градиентом, вообще не различая тип критической точки, — и потому могут не убегать от седла, а, наоборот, стремительно к нему притягиваться.
Разбор примеров
Пример 1 (лёгкий, оценка вероятности). Оценить вероятность того, что случайно выбранная критическая точка функции потерь с $n=20$ независимыми параметрами окажется истинным локальным минимумом, если знак каждого собственного значения гессиана независим и равновероятен (плюс или минус с вероятностью $\dfrac12$ каждый).
Вероятность того, что все $20$ знаков одновременно положительны:
$$P = \left(\frac12\right)^{20} = \frac{1}{1\,048\,576} \approx 0{,}00000095$$Ответ: примерно один шанс из миллиона — уже при скромных $20$ параметрах вероятность того, что случайная критическая точка окажется истинным минимумом, исчезающе мала.
Пример 2 (средний, плато вблизи седла). Функция потерь $L(w_1,w_2)=w_1^2-0{,}01\,w_2^2$ имеет седловую точку в $(0,0)$ (проверь самостоятельно: $f_{xx}=2$, $f_{yy}=-0{,}02$, $D=2\cdot(-0{,}02)=-0{,}04<0$ — седло). Вычислить градиент в точке $(0{,}1,\,5)$ и объяснить, почему движение вдоль координаты $w_2$ здесь особенно медленное, несмотря на удалённость от седла.
Градиент: $\nabla L=(2w_1,\,-0{,}02\,w_2)$. В точке $(0{,}1,\,5)$:
$$\nabla L(0{,}1,\,5) = (2\cdot0{,}1,\ -0{,}02\cdot5) = (0{,}2,\ -0{,}1)$$Ответ: несмотря на то, что $w_2=5$ — довольно большое значение, компонента градиента вдоль $w_2$ равна всего $-0{,}1$, потому что кривизна вдоль этого направления ($-0{,}02$) почти нулевая. Это в точности эффект плато: рядом с седловой точкой существует направление почти нулевой кривизны, вдоль которого градиент остаётся крошечным на протяжении длинного участка пути, и обычный градиентный спуск там продвигается очень медленно, шаг за шагом почти топчась на месте, прежде чем наконец либо свалится с этого плато, либо (в реальном обучении, где есть шум от мини-батчей) будет случайно вытолкнут в сторону.
Пример 3 (сложный, метод Ньютона против saddle-free Newton). Для функции потерь $L(w_1,w_2)=w_1^2-w_2^2$ (седло в $(0,0)$, как в разделе про геометрию седла) сравнить один шаг обычного метода Ньютона и один шаг модифицированного метода saddle-free Newton, стартуя из точки $(1,1)$.
Гессиан этой функции постоянен: $H=\begin{pmatrix}2&0\\0&-2\end{pmatrix}$, обратная матрица $H^{-1}=\begin{pmatrix}0{,}5&0\\0&-0{,}5\end{pmatrix}$. Градиент в точке $(1,1)$: $\nabla L(1,1)=(2\cdot1,\,-2\cdot1)=(2,-2)$.
Обычный метод Ньютона делает шаг $w_{new}=w-H^{-1}\nabla L(w)$:
$$H^{-1}\nabla L(1,1) = (0{,}5\cdot2,\ -0{,}5\cdot(-2)) = (1,\,1)$$$$w_{new} = (1,1)-(1,1) = (0,0)$$
Метод Ньютона прыгает прямо в седловую точку за один шаг — потому что он ищет любую точку с нулевым градиентом, а $(0,0)$ ею и является, и метод не различает, экстремум это или седло.
Метод saddle-free Newton модифицирует шаг, заменяя в обратной матрице каждое собственное значение гессиана на его модуль: вместо $H^{-1}$ используется $|H|^{-1}$, где $|H|=\begin{pmatrix}2&0\\0&2\end{pmatrix}$ (потому что $|-2|=2$), а значит $|H|^{-1}=\begin{pmatrix}0{,}5&0\\0&0{,}5\end{pmatrix}$.
$$|H|^{-1}\nabla L(1,1) = (0{,}5\cdot2,\ 0{,}5\cdot(-2)) = (1,\,-1)$$$$w_{new} = (1,1) - (1,-1) = (0,\,2)$$
Ответ: обычный метод Ньютона приводит точку $(1,1)$ (где $L=1-1=0$) прямо в седловую точку $(0,0)$ (где $L=0-0=0$) — то есть застревает ровно там, откуда нужно было убегать. А saddle-free Newton приводит точку в $(0,2)$, где $L(0,2)=0-4=-4$ — заметно меньшее значение, чем в стартовой точке: вдоль направления отрицательной кривизны (координата $w_2$) метод, использующий модуль собственного значения вместо самого значения, толкает точку прочь от седла, а не к нему, потому что для отрицательного собственного значения знак шага в этом направлении меняется на противоположный по сравнению с обычным Ньютоном.
Почему это важно
Этот раздел — прямой мост между абстрактной геометрией седловых точек и повседневной практикой обучения нейросетей. Понимание того, что при большой размерности почти все критические точки — сёдла, объясняет, почему современные модели вообще успешно обучаются: страшных «тупиковых» локальных минимумов с плохим качеством оказывается статистически ничтожно мало. Но одновременно это объясняет и реальные трудности: медленные плато при обучении, из-за которых функция потерь порой подолгу «топчется на месте», прежде чем снова начать быстро убывать, и опасность наивного применения методов второго порядка, которые способны, вместо ускорения обучения, притянуть модель прямо в седловую точку. Именно поэтому в арсенале современной оптимизации есть модификации второго порядка (вроде saddle-free Newton) и вообще осторожное отношение к прямому использованию гессиана — теперь ты понимаешь, откуда растут корни у этой осторожности.
Практика: 30 заданий
Базовые задания (1–10)
Задание 1: Найти критическую точку функции $f(x,y)=x^2+y^2-2x+4y+1$.
Задание 2: Найти критическую точку функции $f(x,y)=x^2-6x+y^2$.
Задание 3: Вычислить гессиан и определитель Гессе функции $f(x,y)=x^2+y^2$ в произвольной точке.
Задание 4: Классифицировать критическую точку $(1,-2)$ функции $f(x,y)=x^2+y^2-2x+4y+1$ из задания 1.
Задание 5: Классифицировать критическую точку $(3,0)$ функции $f(x,y)=x^2-6x+y^2$ из задания 2.
Задание 6: Найти критическую точку функции $f(x,y)=-x^2-y^2+4x+2y$ и классифицировать её.
Задание 7: Классифицировать критическую точку $(0,0)$ функции $f(x,y)=x^2-y^2$ через определитель Гессе.
Задание 8: Классифицировать критическую точку $(0,0)$ функции $f(x,y)=xy$ через определитель Гессе.
Задание 9 (машинное обучение): Функция потерь $L(w_1,w_2)=w_1^2+3w_2^2$. Найти критическую точку и классифицировать её через гессиан.
Задание 10 (машинное обучение): Функция потерь $L(w_1,w_2)=2w_1^2+2w_2^2-8w_1-4w_2$. Найти критическую точку и классифицировать её.
Средние задания (11–20)
Задание 11: Найти все критические точки функции $f(x,y)=x^3-3x+y^2$.
Задание 12: Классифицировать обе критические точки функции $f(x,y)=x^3-3x+y^2$ из задания 11.
Задание 13: Найти все критические точки функции $f(x,y)=x^3+y^3-9xy$.
Задание 14: Классифицировать обе критические точки функции $f(x,y)=x^3+y^3-9xy$ из задания 13.
Задание 15: Показать, что критическая точка $(0,0)$ функции $f(x,y)=x^4+y^4$ даёт $D=0$ (тест по гессиану не работает), но напрямую доказать, что это точка минимума.
Задание 16: Показать, что критическая точка $(0,0)$ функции $g(x,y)=x^4-y^4$ тоже даёт $D=0$, но, в отличие от задания 15, это седловая точка.
Задание 17 (машинное обучение): Функция потерь $L(w_1,w_2)=w_1^2-4w_2^2$. Найти критическую точку, вычислить собственные значения гессиана (для диагональной матрицы они совпадают с диагональными элементами) и определить тип точки.
Задание 18 (машинное обучение): Функция потерь $L(w_1,w_2)=3w_1^2+3w_2^2-4w_1w_2$. Найти критическую точку и классифицировать её.
Задание 19 (машинное обучение, плоская долина минимумов): Функция потерь $L(w_1,w_2)=(w_1+w_2)^2$ описывает переопараметризованную модель. Показать, что все точки прямой $w_1+w_2=0$ являются критическими и что гессиан в них вырожден ($D=0$), объяснив связь с «плоскими долинами» в нейросетях.
Задание 20: Найти критическую точку функции $f(x,y)=xy-x^2-y^2+3x+3y$ и классифицировать её.
Продвинутые задания (21–30)
Задание 21: Найти все критические точки функции $f(x,y)=x^4+y^4-4xy$ и классифицировать каждую из них.
Задание 22 (машинное обучение): Оценить вероятность того, что случайная критическая точка функции потерь с $n=20$ независимыми параметрами окажется истинным локальным минимумом, если знак каждого собственного значения гессиана независим и равновероятен.
Задание 23 (машинное обучение): Оценить вероятность того, что случайная критическая точка функции потерь с $n=1000$ параметрами окажется либо локальным минимумом, либо локальным максимумом (все $1000$ знаков собственных значений совпадают, неважно, все плюс или все минус).
Задание 24 (машинное обучение): Для функции потерь $L(w_1,w_2)=w_1^2-w_2^2$, стартуя из точки $(1,1)$, сделать один шаг обычного метода Ньютона ($w_{new}=w-H^{-1}\nabla L(w)$) и определить, куда он приводит.
Задание 25: Для той же функции $L(w_1,w_2)=w_1^2-w_2^2$ из задания 24, стартуя из $(1,1)$ с $\eta=0{,}1$, сделать один шаг обычного градиентного спуска и сравнить поведение с методом Ньютона.
Задание 26 (машинное обучение, saddle-free Newton): Для той же функции и точки $(1,1)$ сделать шаг метода saddle-free Newton (гессиан с заменёнными на модули собственными значениями) и сравнить результат с обычным методом Ньютона.
Задание 27: Классифицировать критическую точку $(\pi/2,\pi/2)$ функции $f(x,y)=\sin x+\sin y$.
Задание 28: Классифицировать критическую точку $(\pi/2,\pi/2)$ функции $f(x,y)=\sin x-\sin y$.
Задание 29 (машинное обучение, переопараметризация): Функция потерь упрощённой линейной модели с произведением двух весов задана как $L(u,v)=(uv-1)^2$. Найти критическую точку $(0,0)$, классифицировать её через гессиан и указать, где расположены глобальные минимумы.
Задание 30 (комбинированное, «двойная яма»): Функция потерь $L(w_1,w_2)=w_1^4-2w_1^2+w_2^2$ моделирует ландшафт с двумя симметричными минимумами. Найти все критические точки и классифицировать каждую.
Частые ошибки
Разберём типичные ошибки, которые встречаются почти у каждого, кто только осваивает классификацию критических точек функций нескольких переменных.
-
Путают необходимое условие с достаточным. Обращение градиента в ноль ($\nabla f=0$) — это лишь пропуск в список кандидатов, а не доказательство экстремума. Забыв проверить критическую точку через гессиан, легко по ошибке объявить экстремумом седловую точку.
-
Забывают, что определитель Гессе классифицирует только уже найденные критические точки. Формулу $D=f_{xx}f_{yy}-f_{xy}^2$ нельзя применять к произвольной точке плоскости — сначала обязательно нужно решить систему $\nabla f=0$ и убедиться, что рассматриваемая точка действительно критическая.
-
Путают роль знака $f_{xx}$. Знак $f_{xx}$ определяет тип экстремума (минимум или максимум) только когда уже установлено $D>0$. Если $D<0$ (седло) или $D=0$ (неопределённость), знак одной лишь $f_{xx}$ ничего не говорит о типе точки сам по себе.
-
Считают, что $D=0$ автоматически означает седловую точку. Это не так: при $D=0$ тест попросту не даёт ответа вообще — как показали примеры с $x^4+y^4$ (минимум) и $x^4-y^4$ (седло), обе функции дают одинаковый нулевой определитель Гессе, но ведут себя принципиально по-разному.
-
Забывают проверить теорему о смешанных производных. Формула гессиана предполагает, что $f_{xy}=f_{yx}$ (что верно для достаточно гладких функций по теореме Шварца). Если вычислить $f_{xy}$ и $f_{yx}$ отдельно и получить разные выражения, значит где-то в вычислениях допущена ошибка.
-
Считают седловые точки редким экзотическим случаем. В пространствах с большим числом переменных (как у весов нейросети) всё ровно наоборот: подавляющее большинство критических точек — именно седловые, а истинные локальные минимумы и максимумы статистически крайне редки.
-
Наивно применяют метод Ньютона в задачах глубокого обучения, ожидая, что он найдёт минимум. Как показано в разобранном примере, классический метод Ньютона ищет любую точку с нулевым градиентом и способен целенаправленно привести модель прямо в седловую точку — именно поэтому в реальной оптимизации применяются модификации вроде saddle-free Newton, а не голый метод Ньютона.
Главное запомнить
-
Необходимое условие экстремума функции нескольких переменных: в точке экстремума все частные производные первого порядка равны нулю, то есть градиент обращается в нулевой вектор $\nabla f=0$; такие точки называются критическими (стационарными).
-
Необходимое условие не гарантирует экстремум: среди критических точек могут скрываться седловые точки, не являющиеся ни минимумом, ни максимумом.
-
Достаточное условие для функции двух переменных использует гессиан — матрицу вторых частных производных $H=\begin{pmatrix}f_{xx}&f_{xy}\\f_{xy}&f_{yy}\end{pmatrix}$ — и его определитель $D=f_{xx}f_{yy}-f_{xy}^2$.
-
Правило классификации: $D>0$ и $f_{xx}>0$ — минимум; $D>0$ и $f_{xx}<0$ — максимум; $D<0$ — седловая точка; $D=0$ — тест не даёт ответа, нужен дополнительный анализ.
-
Геометрически седловая точка выглядит как форма седла всадника: выгиб вверх в одном направлении, вниз в перпендикулярном — критическая точка, но не экстремум всей функции.
-
В высокоразмерных пространствах (много переменных, как у весов нейросети) доля истинных локальных минимумов среди критических точек экспоненциально мала — подавляющее большинство критических точек являются седловыми.
-
Методы первого порядка (градиентный спуск) могут резко замедляться вблизи седловых точек из-за плоских направлений с почти нулевым градиентом, а наивный метод Ньютона может, наоборот, целенаправленно притягиваться к седловым точкам.
-
Модификации второго порядка вроде saddle-free Newton используют модули собственных значений гессиана вместо самих значений, чтобы явно отталкиваться от направлений отрицательной кривизны, а не притягиваться к ним.
-
Определитель Гессе назван в честь немецкого математика Людвига Отто Гессе, введшего эту конструкцию в 1844 году в чисто алгебраическом контексте, задолго до её применения к задачам оптимизации.
-
Прежде чем классифицировать критическую точку по гессиану, всегда сначала убедись, что это действительно критическая точка — тест по гессиану применим только к решениям уравнения $\nabla f=0$, а не к произвольным точкам области определения.
Связь с другими темами курса
Этот урок опирается напрямую на прошлый урок про градиент: необходимое условие экстремума — это, по сути, частный случай факта, доказанного там через неравенство Коши-Буняковского: производная по направлению обращается в ноль вдоль всех направлений сразу тогда и только тогда, когда сам градиент равен нулевому вектору. Без уверенного понимания того, что такое градиент и почему он указывает направление наискорейшего роста, разобраться в сегодняшнем материале было бы намного труднее.
Вперёд этот урок ведёт напрямую к методу множителей Лагранжа для условного экстремума — следующей теме курса. Там задача усложняется: требуется найти экстремум функции не на всей области определения, а только среди точек, удовлетворяющих дополнительному ограничению (например, найти минимум функции потерь при условии, что сумма весов модели равна единице). Идея снова опирается на градиент: в точке условного экстремума градиент целевой функции должен быть параллелен (коллинеарен) градиенту функции-ограничения — а понимание необходимого условия безусловного экстремума, разобранное сегодня, является прямым фундаментом для этого более общего случая. Кроме того, сегодняшний материал — гессиан, седловые точки, методы второго порядка — прямая теоретическая база всего практического курса численной оптимизации в машинном обучении: без понимания геометрии критических точек невозможно по-настоящему разобраться, почему обучение больших нейросетей вообще работает и в чём заключаются его типичные трудности.
Интересные факты
-
Определитель Гессе назван в честь Людвига Отто Гессе, но сам термин «гессиан» (Hessian) придумал не он, а другой выдающийся математик, Джеймс Джозеф Сильвестр, — уже после того как Гессе в 1844 году описал соответствующую матрицу в работе о преобразовании кривых и поверхностей высших порядков, вообще не имея в виду задачи оптимизации.
-
Слово «седловая точка» (saddle point) — прямая метафора из верховой езды: график функции в такой точке действительно похож по форме на седло, охватывающее спину лошади, — выгибается вверх вдоль хребта и вниз по бокам, в точности как поведение функции вдоль двух перпендикулярных направлений.
-
Знаковая статья 2014 года «Identifying and attacking the saddle point problem in high-dimensional non-convex optimization» (авторы — Dauphin, Pascanu, Gulcehre, Cho, Ganguli и Bengio) впервые чётко и количественно показала: главная трудность обучения глубоких нейросетей — это седловые точки и плато вокруг них, а вовсе не застревание в плохих локальных минимумах, как долгое время считалось до появления этой работы.
-
Строгое обоснование того, что доля истинных экстремумов среди критических точек экспоненциально убывает с ростом размерности, опирается на теорию случайных матриц — в частности, на распределение собственных значений случайных симметричных матриц (так называемые гауссовы ортогональные ансамбли случайных матриц) и на полукруглый закон Вигнера, описывающий, как эти собственные значения распределены при большой размерности.
Лайфхаки и полезные трюки
-
Прежде чем применять тест через гессиан, всегда сначала реши систему $\nabla f=0$ и найди все критические точки — тест по гессиану применим только к уже найденным критическим точкам, а не к произвольной точке плоскости.
-
Быстрый способ запомнить формулу определителя Гессе: это «произведение диагональных элементов минус квадрат недиагонального элемента» — в точности как обычный определитель матрицы $2\times2$, только элементы этой матрицы — вторые частные производные.
-
Если получилось $D=0$, не спеши с выводом — подставь в саму функцию (а не в её производные) несколько пробных точек рядом с критической, вдоль разных направлений, и сравни значения напрямую: часто это быстрее и надёжнее формального анализа.
-
Быстрая проверка «на глаз»: если функция составлена как сумма квадратов с одинаковыми знаками (вроде $x^2+y^2$ или $-(x^2+y^2)$), жди минимум или максимум; если знаки разные (вроде $x^2-y^2$), почти наверняка получишь седло.
-
Для функций многих (не только двух) переменных обобщение теста работает так же по духу: нужно проверить знаки всех собственных значений гессиана размера $n\times n$ — все положительны означает минимум, все отрицательны означает максимум, есть разных знаков означает седло; но вычислять собственные значения матрицы большого размера вручную нереально, поэтому на практике это делают численно.
-
Если нужно быстро прикинуть вероятность того, что случайная критическая точка высокоразмерной функции окажется истинным экстремумом, используй грубую оценку $\left(\dfrac12\right)^{n-1}$, где $n$ — число переменных: уже при $n$ порядка двадцати-тридцати эта вероятность становится исчезающе малой.
Сегодняшний урок закрывает важный пробел между школьной интуицией «производная равна нулю — значит экстремум» и настоящей, полной картиной мира функций многих переменных, где рядом с минимумами и максимумами живёт третий, принципиально новый тип критической точки — седло. Это не абстрактная математическая изощрённость ради самой изощрённости: именно седловые точки объясняют, почему обучение гигантских нейросетей вообще возможно (плохих локальных минимумов в высокой размерности почти нет) и одновременно почему оно порой идёт мучительно медленно (плато вокруг седел) или требует осторожного обращения с методами второго порядка. Освоив необходимое условие через градиент и достаточное условие через гессиан по-настоящему — не заучив формулу $D=f_{xx}f_{yy}-f_{xy}^2$, а прочувствовав, откуда берётся каждый её случай, — ты будешь понимать графики функций потерь и поведение оптимизаторов не как чёрный ящик, а как закономерное следствие геометрии кривизны в пространстве множества измерений.
Понял тему? Закрепи в боте! 🚀
Попрактикуйся на задачах и получи персональные рекомендации от AI
💪 Начать тренировку