Частные производные 📐
Каждый раз, когда нейросеть проходит очередной шаг обучения, где-то внутри фреймворка происходит одна и та же операция — миллионы раз подряд. Для каждого веса модели вычисляется число, которое показывает, как изменится функция потерь, если этот конкретный вес чуть-чуть сдвинуть, а все остальные веса — миллионы, а то и миллиарды других чисел — оставить абсолютно неизменными. Это число и есть частная производная функции потерь по данному весу, а алгоритм, который вычисляет все такие производные разом, идя по сети от выхода к входу, называется обратным распространением ошибки. Частная производная — не экзотическая конструкция откуда-то из глубин математического анализа, а буквально то самое элементарное действие, которое выполняется на каждом шаге обучения каждой современной нейросети, только выполняется оно не для одной переменной, а параллельно для миллионов.
Давай разберёмся, что стоит за этой идеей на более простом уровне, прежде чем возвращаться к нейросетям. В прошлом уроке ты познакомился с функциями нескольких переменных — объектами вида $z=f(x,y)$, чьи графики уже не кривые на плоскости, а поверхности в пространстве. У функции одной переменной был единственный, недвусмысленный вопрос: насколько быстро она растёт или убывает? У функции нескольких переменных этот вопрос сразу распадается на целую россыпь отдельных вопросов: как быстро $f$ меняется, если шевелить только $x$? А если только $y$? А если оба сразу, но в разных пропорциях? Сегодняшний урок отвечает на первые два вопроса — самые простые и при этом самые фундаментальные, потому что все более сложные конструкции, которые ждут тебя в следующих уроках (градиент во всей полноте, производная по направлению, полный дифференциал), собираются именно из частных производных, как из кирпичиков.
Представь, что ты стоишь на склоне холма и можешь двигаться только вдоль двух строго заданных направлений — либо строго на восток, либо строго на север, — а диагональное движение тебе временно запрещено. Частная производная по $x$ — это в точности крутизна склона, которую ты почувствуешь под ногами, сделав шаг на восток; частная производная по $y$ — крутизна при шаге на север. Ты пока ничего не знаешь про диагональные направления, но эти два числа — уже огромный объём информации о поведении поверхности в твоей точке. Собери их вместе в один вектор — и получишь градиент, который через пару уроков станет главным инструментом оптимизации.
Сегодня, кроме самого определения и техники вычисления, мы разберём геометрический смысл частной производной как наклона сечения поверхности плоскостью, посмотрим, что происходит, если частную производную взять ещё раз (частные производные высших порядков), встретимся с одним из самых изящных фактов курса — теоремой Шварца о том, что для достаточно хороших функций порядок, в котором ты дифференцируешь по разным переменным, не имеет значения, — и закончим кратким знакомством с градиентом и гессианом, матрицей вторых частных производных, которая лежит в основе методов оптимизации второго порядка.
История: откуда это взялось?
Интерес к функциям нескольких переменных резко вырос в середине XVIII века под давлением задач физики — прежде всего задачи о колеблющейся струне. Жан Лерон Д'Аламбер в 1747 году получил волновое уравнение, связывающее скорость изменения отклонения струны по времени со скоростью изменения по координате вдоль струны, а Леонард Эйлер вслед за ним интенсивно работал с такими уравнениями, где искомая величина зависела сразу от двух переменных — координаты точки и момента времени. Чтобы решать подобные задачи, нужно было дифференцировать выражение по одной переменной, временно считая вторую фиксированным числом, — и Эйлер проделывал это постоянно, хотя специального названия или отдельного значка для такой операции тогда ещё не существовало: и обычную, и частную производную обозначали одной и той же буквой $d$, полагаясь на контекст, чтобы читатель понял, по какой именно переменной идёт дифференцирование.
Ещё раньше, в 1740 году, французский математик Алекси Клод Клеро, изучая условия, при которых выражение вида $P\,dx+Q\,dy$ является полным дифференциалом некоторой функции (тема, к которой ты вернёшься в следующем уроке), заметил на практике удивительный факт: если продифференцировать функцию сначала по $x$, а потом результат ещё раз по $y$, получается то же самое выражение, что и при обратном порядке — сначала по $y$, потом по $x$. Строгого доказательства, при каких условиях это вообще верно, у Клеро не было, — но сама закономерность, замеченная задолго до появления аккуратной теории, стала первым намёком на тот факт, который два столетия спустя окончательно оформится в виде теоремы, разбираемой в этом уроке.
Специальный символ $\partial$ для обозначения частной производной, отличающий её от обычной производной $d$, ввёл французский математик Адриен Мари Лежандр в 1786 году, а по-настоящему в широкий обиход его ввёл и закрепил Карл Густав Якоб Якоби в 1841 году в своих работах по определителям и функциональным преобразованиям — именно после Якоби запись $\dfrac{\partial f}{\partial x}$ стала общепринятым стандартом, который используется без изменений и сегодня. А строгое доказательство того, при каких именно условиях порядок дифференцирования по разным переменным действительно не важен (условие, которое Клеро использовал интуитивно), дал немецкий математик Герман Шварц в 1870-х годах — с тех пор соответствующий результат называется теоремой Шварца, хотя в некоторых учебниках, отдавая должное более раннему наблюдению, её называют и теоремой Клеро. Разрыв почти в сто тридцать лет между первым эмпирическим наблюдением и его строгим обоснованием — хороший пример того, как в математике интуиция часто опережает доказательство на целые поколения.
Частная производная: определение и вычисление
Интуиция: заморозить все переменные, кроме одной
Давай разберёмся с самой сутью на максимально простом уровне. У функции нескольких переменных, скажем $f(x,y)$, есть сразу несколько «ручек управления» — переменные $x$ и $y$. Частная производная отвечает на вопрос: что будет, если крутить только одну ручку, а все остальные жёстко зафиксировать в текущем положении? Представь синтезатор с десятками регуляторов — громкость, тембр, реверберация, атака звука. Если ты хочешь понять, как именно влияет на итоговый звук конкретно регулятор тембра, самый естественный способ — оставить все остальные регуляторы на месте и покрутить только этот один. Именно так и устроена частная производная: все переменные, кроме той, по которой мы дифференцируем, превращаются на время вычисления в обычные числовые константы, и к функции применяются те же самые правила дифференцирования, которые ты знаешь из курса функций одной переменной, — производная суммы, произведения, частного, сложной функции.
Определение
Определение (частная производная). Пусть функция $z=f(x,y)$ определена в некоторой окрестности точки $(x_0,y_0)$. Частной производной функции $f$ по переменной $x$ в точке $(x_0,y_0)$ называется предел
$$\frac{\partial f}{\partial x}(x_0,y_0) = \lim_{\Delta x\to0}\frac{f(x_0+\Delta x,\,y_0)-f(x_0,y_0)}{\Delta x}$$если этот предел существует. Переменная $y$ при этом остаётся неизменной и равной $y_0$ — меняется только $x$. Аналогично определяется частная производная по $y$:
$$\frac{\partial f}{\partial y}(x_0,y_0) = \lim_{\Delta y\to0}\frac{f(x_0,\,y_0+\Delta y)-f(x_0,y_0)}{\Delta y}$$Для функции $n$ переменных $f(x_1,\dots,x_n)$ частная производная по $x_i$ определяется дословно так же: все остальные переменные фиксируются, и берётся обычная производная по одной оставшейся.
Обозначения. Наряду с $\dfrac{\partial f}{\partial x}$ широко используются более компактные записи: $f_x$, $f'_x$, $\partial_x f$ — все они означают одно и то же. На практике частную производную почти никогда не вычисляют напрямую через предел из определения: вместо этого объявляют все переменные, кроме нужной, константами и применяют обычные правила дифференцирования одной переменной — производную суммы, произведения, частного и сложной функции.
Обрати внимание: определение частной производной по $x$ дословно совпадает с определением обычной производной функции одной переменной — просто эта функция одной переменной получается из $f(x,y)$ «замораживанием» $y$ в конкретном значении $y_0$. Именно поэтому вычислительное правило такое простое: раз $y$ ведёт себя как число, к нему применяются все привычные правила работы с константами — производная константы равна нулю, константу можно выносить за знак производной произведения, и так далее.
Разбор примеров
Пример 1 (лёгкий). Найти частные производные функции $f(x,y)=3x^2y+y^3$.
Дифференцируем по $x$, считая $y$ константой: множитель $y$ остаётся как коэффициент, а $x^2$ дифференцируется обычным образом, $3y^3$ (то есть слагаемое, вовсе не содержащее $x$) исчезает как константа:
$$\frac{\partial f}{\partial x} = 3y\cdot 2x + 0 = 6xy$$Дифференцируем по $y$, считая $x$ константой: первое слагаемое $3x^2y$ линейно по $y$ с коэффициентом $3x^2$, второе — обычный кубический член:
$$\frac{\partial f}{\partial y} = 3x^2 + 3y^2$$Ответ: $f_x=6xy$, $f_y=3x^2+3y^2$. В точке $(1,2)$: $f_x(1,2)=12$, $f_y(1,2)=3+12=15$.
Пример 2 (средний, произведение и композиция функций). Найти частные производные функции $f(x,y)=\sin(x^2y)+xe^y$.
Первое слагаемое — сложная функция, внешняя $\sin$, внутренняя $x^2y$. По $x$: производная внутренней части $x^2y$ по $x$ равна $2xy$ (коэффициент $y$ фиксирован), поэтому по цепному правилу:
$$\frac{\partial}{\partial x}\sin(x^2y) = \cos(x^2y)\cdot 2xy$$Второе слагаемое $xe^y$ по $x$ дифференцируется как произведение переменной $x$ на константу $e^y$, то есть просто даёт $e^y$. Итого:
$$f_x = 2xy\cos(x^2y) + e^y$$По $y$: внутренняя часть $x^2y$ дифференцируется по $y$ и даёт $x^2$ (коэффициент $x^2$ фиксирован), а второе слагаемое $xe^y$ дифференцируется по $y$ как $x$ (константа) на экспоненту:
$$f_y = x^2\cos(x^2y) + xe^y$$Ответ: $f_x=2xy\cos(x^2y)+e^y$, $f_y=x^2\cos(x^2y)+xe^y$.
Пример 3 (сложный, обратное распространение ошибки на одном нейроне). Нейрон с двумя входами $x_1,x_2$ вычисляет предактивацию $z=w_1x_1+w_2x_2+b$, применяет к ней сигмоиду $\hat y=\sigma(z)=\dfrac{1}{1+e^{-z}}$ и сравнивается с целевым значением $y$ через квадратичную ошибку $L=(y-\hat y)^2$. Найти $\dfrac{\partial L}{\partial w_1}$ и вычислить её при конкретных числах: $x_1=1$, $x_2=2$, $w_1=0{,}5$, $w_2=-0{,}3$, $b=0{,}1$, $y=1$.
Здесь при дифференцировании по $w_1$ константами становятся сразу все остальные величины — $w_2$, $b$, $x_1$, $x_2$, $y$. Применяем цепное правило, проходя по цепочке зависимостей $L\to\hat y\to z\to w_1$:
$$\frac{\partial L}{\partial w_1} = \frac{dL}{d\hat y}\cdot\frac{d\hat y}{dz}\cdot\frac{\partial z}{\partial w_1}$$Первый множитель: $\dfrac{dL}{d\hat y}=-2(y-\hat y)$. Второй множитель — производная сигмоиды, известное тождество $\sigma'(z)=\sigma(z)\bigl(1-\sigma(z)\bigr)=\hat y(1-\hat y)$. Третий множитель: $\dfrac{\partial z}{\partial w_1}=x_1$, поскольку $w_2x_2+b$ при дифференцировании по $w_1$ — просто константа. Итого:
$$\frac{\partial L}{\partial w_1} = -2(y-\hat y)\,\hat y(1-\hat y)\,x_1$$Подставляем числа. Сначала $z=0{,}5\cdot1+(-0{,}3)\cdot2+0{,}1=0{,}5-0{,}6+0{,}1=0$, значит $\hat y=\sigma(0)=0{,}5$. Тогда:
$$\frac{\partial L}{\partial w_1} = -2(1-0{,}5)\cdot0{,}5\cdot(1-0{,}5)\cdot1 = -2\cdot0{,}5\cdot0{,}5\cdot0{,}5\cdot1 = -0{,}25$$Ответ: $\dfrac{\partial L}{\partial w_1}=-0{,}25$. Ровно эта формула — цепочка частных производных, где всё, кроме одного веса, объявлено константой, — и есть один шаг обратного распространения ошибки. Точно так же считается $\dfrac{\partial L}{\partial w_2}=-2(y-\hat y)\hat y(1-\hat y)x_2=-0{,}5$ и $\dfrac{\partial L}{\partial b}=-2(y-\hat y)\hat y(1-\hat y)=-0{,}25$ (здесь $\partial z/\partial b=1$). У реальной сети таких весов не два, а миллионы, но принцип — заморозить все переменные, кроме одной, и продифференцировать по ней, — не меняется вообще.
Почему это важно
Частная производная — это не абстрактное упражнение, а ровно то вычисление, которое производит фреймворк глубокого обучения на каждом шаге градиентного спуска, для каждого веса сети отдельно. Когда ты видишь, как обучается нейросеть, за кулисами происходит одно и то же простое действие, повторённое миллионы раз: для каждого веса вычисляется его частная производная по функции потерь при всех остальных весах, зафиксированных как константы, — и полученное число говорит, в какую сторону и насколько сильно нужно подвинуть именно этот вес, чтобы ошибка модели уменьшилась. Освоив технику из этого раздела, ты фактически освоил математическое ядро обратного распространения ошибки вручную, на игрушечном примере с одним нейроном.
Геометрический смысл частной производной
Интуиция: сечение горы вертикальной плоскостью
Давай разберёмся, как выглядит частная производная не в формулах, а на картинке. Возьми поверхность $z=f(x,y)$ — трёхмерную «гору» из прошлого урока. Зафиксируй $y=y_0$ и представь, что ты режешь эту гору вертикальной плоскостью, параллельной оси $x$, проходящей через линию $y=y_0$. В сечении получится обычная плоская кривая — график функции одной переменной $g(x)=f(x,y_0)$, которая живёт уже не в трёхмерном, а в двумерном мире этой самой плоскости сечения. А частная производная $f_x(x_0,y_0)$ — это в точности угловой коэффициент (наклон) касательной к этой кривой в точке $x=x_0$, то есть обычная производная $g'(x_0)$ функции одной переменной, которую ты изучал ещё в первых уроках курса. Аналогично, частная производная по $y$ — это наклон сечения той же поверхности плоскостью $x=x_0$, то есть плоскостью, параллельной оси $y$.
Определение
Геометрический смысл частной производной. Пусть $z=f(x,y)$ и точка $(x_0,y_0,z_0)$, где $z_0=f(x_0,y_0)$, лежит на графике этой функции. Сечение графика плоскостью $y=y_0$ — плоская кривая, и $f_x(x_0,y_0)$ равна тангенсу угла наклона касательной к этой кривой в точке $(x_0,z_0)$ по отношению к оси $x$. Симметрично, сечение плоскостью $x=x_0$ даёт кривую, и $f_y(x_0,y_0)$ равна тангенсу угла наклона касательной к ней по отношению к оси $y$.
Знак частной производной хранит ту же самую информацию, что и для функции одной переменной: положительное значение $f_x(x_0,y_0)$ означает, что при движении в направлении возрастания $x$ (и неизменном $y$) поверхность идёт вверх, отрицательное — что поверхность идёт вниз, а нулевое значение означает, что в этом конкретном направлении в данной точке поверхность на мгновение горизонтальна.
Разбор примеров
Пример 1 (лёгкий). Для параболоида $f(x,y)=x^2+y^2$ найти наклон сечения плоскостью $y=4$ в точке $x=3$ и убедиться, что он совпадает с $f_x(3,4)$.
Сечение плоскостью $y=4$ — это кривая $z=g(x)=x^2+16$ в переменных $(x,z)$, обычная парабола, сдвинутая на $16$ вверх. Её производная $g'(x)=2x$, при $x=3$ даёт $g'(3)=6$.
Теперь вычислим напрямую по формуле: $f_x=2x$, значит $f_x(3,4)=2\cdot3=6$.
Ответ: оба способа дают одно и то же число $6$ — что и должно быть, поскольку это буквально одна и та же величина, вычисленная двумя разными путями.
Пример 2 (средний). Для купола $f(x,y)=9-x^2-y^2$ (при $x=y=0$ высота равна $9$) найти наклон сечения плоскостью $x=1$ в точке $y=2$ и объяснить знак результата.
Сечение плоскостью $x=1$: подставляем $x=1$ в формулу и получаем кривую $z=g(y)=9-1-y^2=8-y^2$ в переменных $(y,z)$. Её производная $g'(y)=-2y$, при $y=2$ даёт $g'(2)=-4$.
Через частную производную: $f_y=-2y$, значит $f_y(1,2)=-2\cdot2=-4$.
Ответ: $-4$. Отрицательный знак означает, что если стоять на куполе в точке $(1,2)$ и двигаться в направлении возрастания $y$ (условно «на север»), не меняя $x$, высота будет убывать — что вполне ожидаемо: купол на удалении от центра всегда идёт вниз.
Пример 3 (сложный, ландшафт функции потерь). Функция потерь двух весов задана как $L(w_1,w_2)=(w_1-3)^2+5(w_2+1)^2$ — простая «чаша» с минимумом в точке $(3,-1)$. Найти наклон сечения ландшафта в точке $(0,0)$ вдоль оси $w_1$ (то есть при зафиксированном $w_2=0$) и вдоль оси $w_2$ (при зафиксированном $w_1=0$), и объяснить, что означают эти два числа с точки зрения обучения модели.
Сечение при $w_2=0$: $L(w_1,0)=(w_1-3)^2+5$ — обычная парабола по переменной $w_1$. Наклон в точке $w_1=0$: $\dfrac{\partial L}{\partial w_1}=2(w_1-3)$, при $w_1=0$ даёт $2(0-3)=-6$.
Сечение при $w_1=0$: $L(0,w_2)=9+5(w_2+1)^2$. Наклон: $\dfrac{\partial L}{\partial w_2}=10(w_2+1)$, при $w_2=0$ даёт $10(0+1)=10$.
Ответ: $\dfrac{\partial L}{\partial w_1}(0,0)=-6$, $\dfrac{\partial L}{\partial w_2}(0,0)=10$. Геометрически это наклоны двух сечений чаши ошибки вдоль осей $w_1$ и $w_2$ в текущей точке. Отрицательный наклон вдоль $w_1$ означает, что, увеличивая $w_1$, мы спускаемся к минимуму (значит, шаг градиентного спуска увеличит $w_1$), а положительный наклон вдоль $w_2$ означает, что нужно, наоборот, уменьшать $w_2$, чтобы спускаться вниз. Именно это (взятое с противоположным знаком и умноженное на скорость обучения) и есть шаг градиентного спуска по каждой координате в отдельности.
Почему это важно
Геометрическая картина превращает частную производную из формального символа в конкретный, наглядный факт о поведении поверхности: это наклон одномерного сечения, а сечение — это та же самая обычная функция одной переменной, которую ты изучал с самого начала курса. Именно эта картинка — «заморозили все переменные, кроме одной, получили обычную кривую, посчитали её наклон» — лежит в основе интерпретации градиента как направления самого быстрого подъёма, к которому ты придёшь через несколько уроков, и в основе понятия касательной плоскости к поверхности, разбираемого в следующем уроке о полном дифференциале.
Частные производные высших порядков и теорема Шварца
Интуиция: производная от производной
Раз частная производная функции нескольких переменных — сама тоже функция нескольких переменных, её тоже можно продифференцировать ещё раз, и не обязательно по той же самой переменной. У функции $f(x,y)$ есть ровно две первые частные производные ($f_x$ и $f_y$), но уже четыре вторые: продифференцировать $f_x$ можно по $x$ или по $y$, и точно так же продифференцировать $f_y$ можно по $x$ или по $y$. Договоримся об обозначении раз и навсегда, чтобы не было путаницы: запись $f_{xy}$ будет означать «сначала продифференцировать по $x$, а полученный результат ещё раз продифференцировать по $y$», то есть $f_{xy}=(f_x)_y$. Аналогично $f_{yx}=(f_y)_x$ означает обратный порядок — сначала по $y$, потом по $x$. Производные $f_{xy}$ и $f_{yx}$, где дифференцирование идёт по двум разным переменным в разном порядке, называются смешанными частными производными.
Определение
Определение (частные производные высших порядков). Частные производные второго порядка функции $f(x,y)$ — это частные производные от частных производных первого порядка:
$$f_{xx}=\frac{\partial}{\partial x}\left(\frac{\partial f}{\partial x}\right), \quad f_{yy}=\frac{\partial}{\partial y}\left(\frac{\partial f}{\partial y}\right), \quad f_{xy}=\frac{\partial}{\partial y}\left(\frac{\partial f}{\partial x}\right), \quad f_{yx}=\frac{\partial}{\partial x}\left(\frac{\partial f}{\partial y}\right)$$Производные третьего и более высоких порядков определяются точно так же — последовательным дифференцированием, по любой из переменных на каждом шаге.
Теорема (Шварца). Если смешанные частные производные $f_{xy}$ и $f_{yx}$ непрерывны в некоторой окрестности точки $(x_0,y_0)$, то в этой точке они равны:
$$f_{xy}(x_0,y_0) = f_{yx}(x_0,y_0)$$То есть для достаточно «хороших» функций (с непрерывными вторыми производными) результат смешанного дифференцирования не зависит от порядка, в котором ты дифференцируешь по $x$ и по $y$. Условие непрерывности здесь не формальность: без него равенство может нарушаться, что показывает пример ниже.
Стоит держать в голове маленькое предостережение про обозначения: наряду с $f_{xy}$ в литературе используется запись через дроби $\dfrac{\partial^2 f}{\partial y\,\partial x}$, где порядок переменных в знаменателе читается справа налево (сначала $x$, ближе к $f$, потом $y$) — то есть это то же самое, что и $f_{xy}$ в принятом здесь соглашении. Путаница возникает нечасто именно потому, что почти все функции, которые встречаются на практике, удовлетворяют условиям теоремы Шварца, и тогда сам вопрос о порядке становится не важен: оба обозначения дают одно и то же число.
Разбор примеров
Пример 1 (лёгкий). Для $f(x,y)=x^3y^2$ найти все частные производные второго порядка и убедиться, что $f_{xy}=f_{yx}$.
Первые производные: $f_x=3x^2y^2$, $f_y=2x^3y$.
Вторые производные: $f_{xx}=6xy^2$, $f_{yy}=2x^3$.
Смешанные: $f_{xy}=\dfrac{\partial}{\partial y}(3x^2y^2)=6x^2y$, и $f_{yx}=\dfrac{\partial}{\partial x}(2x^3y)=6x^2y$.
Ответ: $f_{xy}=f_{yx}=6x^2y$ — равенство выполняется, как и должно быть для многочлена, у которого все производные любого порядка непрерывны везде.
Пример 2 (средний). Для $f(x,y)=e^x\cos y$ найти $f_{xy}$ и $f_{yx}$.
$f_x=e^x\cos y$, тогда $f_{xy}=\dfrac{\partial}{\partial y}(e^x\cos y)=-e^x\sin y$.
$f_y=-e^x\sin y$, тогда $f_{yx}=\dfrac{\partial}{\partial x}(-e^x\sin y)=-e^x\sin y$.
Ответ: $f_{xy}=f_{yx}=-e^x\sin y$ — снова совпадение, потому что экспонента и косинус бесконечно дифференцируемы, а значит все их частные производные любого порядка непрерывны на всей плоскости, и условие теоремы Шварца выполнено автоматически.
Пример 3 (сложный, классический контрпример). Для функции
$$f(x,y)=\begin{cases}\dfrac{xy(x^2-y^2)}{x^2+y^2}, & (x,y)\ne(0,0)\\[4pt]0,&(x,y)=(0,0)\end{cases}$$найти $f_{xy}(0,0)$ и $f_{yx}(0,0)$ и объяснить, почему они не совпадают.
Сначала найдём $f_x(0,y)$ для $y\ne0$, чтобы потом продифференцировать по $y$. При $x=0$ функция имеет вид $f=y\cdot\dfrac{x^3-xy^2}{x^2+y^2}$. Дифференцируя это выражение по $x$ (по правилу производной частного) и подставляя $x=0$, получаем:
$$f_x(0,y) = \frac{y\left[(3x^2-y^2)(x^2+y^2)-(x^3-xy^2)\cdot2x\right]}{(x^2+y^2)^2}\bigg|_{x=0} = \frac{y\cdot(-y^2)\cdot y^2}{y^4} = -y$$Значит $f_x(0,y)=-y$ при всех $y$ (при $y=0$ это тоже верно, что проверяется напрямую по определению производной: $f(h,0)=0$ для любого $h$, значит $f_x(0,0)=0$). Теперь дифференцируем полученную функцию $f_x(0,y)=-y$ ещё раз по $y$:
$$f_{xy}(0,0) = \frac{d}{dy}(-y)\bigg|_{y=0} = -1$$Аналогично, из симметрии формулы функции относительно перестановки $x\leftrightarrow y$ (с точностью до смены знака) находим $f_y(x,0)=x$ при всех $x$, и тогда:
$$f_{yx}(0,0) = \frac{d}{dx}(x)\bigg|_{x=0} = 1$$Ответ: $f_{xy}(0,0)=-1$, а $f_{yx}(0,0)=1$ — смешанные производные существуют, но не совпадают. Дело в том, что вторые частные производные этой функции в точке $(0,0)$ разрывны (значения $f_{xy}(x,y)$ и $f_{yx}(x,y)$ при приближении к началу координат по разным путям стремятся к разным числам), а значит условие теоремы Шварца — непрерывность вторых смешанных производных — здесь нарушено. Этот пример не «ломает» теорему, а показывает ровно то, что она и утверждает: без непрерывности гарантии равенства просто нет.
Почему это важно
Теорема Шварца — не техническая деталь, а мощное упрощение: для подавляющего большинства функций, с которыми ты встретишься на практике (многочлены, экспоненты, тригонометрические функции и их всевозможные комбинации), можно не задумываться, в каком порядке дифференцировать по разным переменным, — результат гарантированно один и тот же. Именно на этом факте основано важнейшее свойство гессиана — матрицы вторых частных производных, о которой пойдёт речь в следующем разделе: эта матрица всегда симметрична, и это прямое следствие теоремы Шварца, а не случайное совпадение.
Градиент: вектор частных производных
Интуиция: собрать все «ручки» в один вектор
Мы уже выяснили: у функции $f(x_1,\dots,x_n)$ есть $n$ частных производных, каждая из которых показывает наклон сечения вдоль одной координатной оси. Естественный следующий шаг — не рассматривать эти числа по отдельности, а собрать их все вместе в один вектор. Так возникает градиент — конструкция, которую ты подробно изучишь через пару уроков, а здесь мы только познакомимся с определением, чтобы дальнейшие темы курса не начинались с нуля.
Определение
Определение (градиент). Градиентом функции $f(x_1,\dots,x_n)$ в точке $M$ называется вектор, составленный из всех частных производных первого порядка в этой точке:
$$\nabla f(M) = \left(\frac{\partial f}{\partial x_1}(M),\ \frac{\partial f}{\partial x_2}(M),\ \dots,\ \frac{\partial f}{\partial x_n}(M)\right)$$Символ $\nabla$ (набла) читается как «градиент» или «набла эф».
Гессиан. Если у функции существуют все частные производные второго порядка, их удобно собрать в квадратную матрицу — гессиан (матрицу Гессе):
$$H_f = \begin{pmatrix} f_{x_1x_1} & f_{x_1x_2} & \cdots \\ f_{x_2x_1} & f_{x_2x_2} & \cdots \\ \vdots & \vdots & \ddots \end{pmatrix}$$По теореме Шварца, если все вторые частные производные непрерывны, смешанные производные, стоящие симметрично относительно главной диагонали, совпадают ($f_{x_1x_2}=f_{x_2x_1}$ и так далее), поэтому гессиан такой функции всегда симметричен.
Разбор примеров
Пример 1 (лёгкий). Найти градиент функции $f(x,y,z)=x^2+2y^2+3z^2$ в точке $(1,-1,2)$.
$$\nabla f = (2x,\ 4y,\ 6z), \qquad \nabla f(1,-1,2) = (2,\ -4,\ 12)$$Ответ: $\nabla f(1,-1,2)=(2,-4,12)$.
Пример 2 (средний). Функция потерь $L(w_1,w_2)=(w_1-2)^2+(w_2+3)^2$. Найти градиент в точке $(0,0)$ и объяснить, в каком направлении сделает шаг градиентный спуск.
$$\nabla L = \bigl(2(w_1-2),\ 2(w_2+3)\bigr), \qquad \nabla L(0,0) = (-4,\ 6)$$Ответ: $\nabla L(0,0)=(-4,6)$. Градиентный спуск движется в направлении, противоположном градиенту, то есть делает шаг вдоль вектора $(4,-6)$ (умноженного на скорость обучения) — соответственно увеличивая $w_1$ и уменьшая $w_2$, что и приближает веса к минимуму этой чаши в точке $(2,-3)$.
Пример 3 (сложный, гессиан и симметрия по теореме Шварца). Для функции потерь $L(w_1,w_2)=2w_1^2-3w_1w_2+4w_2^2$ найти градиент и гессиан, и явно проверить, что гессиан симметричен.
Градиент: $\dfrac{\partial L}{\partial w_1}=4w_1-3w_2$, $\dfrac{\partial L}{\partial w_2}=-3w_1+8w_2$, значит $\nabla L=(4w_1-3w_2,\ -3w_1+8w_2)$.
Вторые производные: $L_{w_1w_1}=4$, $L_{w_2w_2}=8$. Смешанные: $L_{w_1w_2}=\dfrac{\partial}{\partial w_2}(4w_1-3w_2)=-3$, и $L_{w_2w_1}=\dfrac{\partial}{\partial w_1}(-3w_1+8w_2)=-3$.
Ответ: гессиан $H_L=\begin{pmatrix}4&-3\\-3&8\end{pmatrix}$ — он симметричен ($L_{w_1w_2}=L_{w_2w_1}=-3$), и это не случайность: функция $L$ бесконечно дифференцируема, все её вторые частные производные непрерывны, а значит по теореме Шварца равенство смешанных производных гарантировано заранее, ещё до всякого вычисления.
Почему это важно
Градиент и гессиан — это ровно тот аппарат, на котором построена вся современная оптимизация нейросетей. Градиент указывает направление самого быстрого роста функции потерь, и обычный градиентный спуск шагает в противоположную сторону; гессиан же несёт информацию о кривизне ландшафта потерь и используется в методах оптимизации второго порядка (например, в методе Ньютона), которые учитывают не только наклон, но и то, как быстро этот наклон меняется. Полное знакомство с градиентом и производной по направлению ждёт тебя чуть позже в курсе, а следующий урок посвящён смежному понятию — полному дифференциалу, который объединяет частные производные в единую линейную оценку изменения функции сразу по всем переменным.
Практика: 30 заданий
Базовые задания (1–10)
Задание 1: Найти частные производные функции $f(x,y)=x^4y^3+2xy$.
Задание 2: Найти частные производные функции $f(x,y)=x\sin y+y\cos x$.
Задание 3: Найти частные производные функции $f(x,y)=e^x\ln y$ (при $y>0$).
Задание 4: Найти все частные производные первого порядка функции трёх переменных $f(x,y,z)=x^2yz^3$.
Задание 5: Найти частные производные функции $f(x,y)=\dfrac{x}{y}+\dfrac{y}{x}$.
Задание 6 (геометрический смысл): Для параболоида $f(x,y)=x^2+y^2$ найти наклон сечения плоскостью $y=4$ в точке $x=3$.
Задание 7: Найти частные производные функции $f(x,y)=\sqrt{x^2+y^2}$ в точке $(3,4)$ (область определения — вся плоскость, кроме начала координат).
Задание 8: Для функции $f(x,y)=x^3-3xy^2$ найти $f_{xx}$ и $f_{yy}$ и проверить, что их сумма равна нулю.
Задание 9: Найти частные производные функции $f(x,y)=\ln(x^2+y^2)$ в точке $(1,2)$.
Задание 10 (машинное обучение): Предактивация нейрона $z=w_1x_1+w_2x_2+b$ при фиксированных входах $x_1=2$, $x_2=-1$. Найти $\dfrac{\partial z}{\partial w_1}$, $\dfrac{\partial z}{\partial w_2}$ и $\dfrac{\partial z}{\partial b}$.
Средние задания (11–20)
Задание 11: Для $f(x,y)=\sin(xy)$ найти $f_x$, $f_y$, а затем смешанные производные $f_{xy}$ и $f_{yx}$ и убедиться, что они совпадают.
Задание 12: Найти градиент функции $f(x,y)=e^{x^2+y^2}$ в точках $(0,0)$ и $(1,1)$.
Задание 13 (геометрический смысл): Для купола $f(x,y)=9-x^2-y^2$ найти наклон сечения плоскостью $x=1$ в точке $y=2$ и объяснить его знак.
Задание 14: Для $f(x,y,z)=x^2yz+y^3z^2$ найти $f_{xz}$ и $f_{zx}$ и убедиться в их равенстве.
Задание 15 (машинное обучение): Простейшая линейная регрессия с одним признаком на двух точках данных $(x_1,y_1)=(1,2)$ и $(x_2,y_2)=(2,3)$, модель $\hat y_i=wx_i+b$, ошибка $L(w,b)=\dfrac12\bigl[(y_1-\hat y_1)^2+(y_2-\hat y_2)^2\bigr]$. Найти $\dfrac{\partial L}{\partial w}$ и $\dfrac{\partial L}{\partial b}$ при $w=1$, $b=0$.
Задание 16: Найти частные производные функции $f(x,y)=x^y$ при $x>0$.
Задание 17: Для $f(x,y)=x^4+x^2y^2+y^4$ найти $f_{xx}$, $f_{yy}$, $f_{xy}$ и $f_{yx}$.
Задание 18 (геометрический смысл): Температура металлической пластины задана как $T(x,y)=100-x^2-2y^2$. Найти скорость изменения температуры в направлении оси $x$ в точке $(3,2)$ и объяснить знак.
Задание 19: Для $f(x,y,z)=xe^{yz}$ найти смешанные производные $f_{yz}$ и $f_{zy}$ и убедиться в их равенстве.
Задание 20 (прикладная задача, экономика): Производственная функция Кобба-Дугласа $Q(K,L)=K^{0{,}3}L^{0{,}7}$ (капитал $K$, труд $L$). Найти предельную производительность капитала $\dfrac{\partial Q}{\partial K}$ и предельную производительность труда $\dfrac{\partial Q}{\partial L}$ при $K=100$, $L=100$.
Продвинутые задания (21–30)
Задание 21 (теоретическое): Для функции $f(x,y)=\dfrac{xy(x^2-y^2)}{x^2+y^2}$ при $(x,y)\ne(0,0)$, $f(0,0)=0$, найти $f_{xy}(0,0)$ и $f_{yx}(0,0)$ и объяснить, почему теорема Шварца здесь не нарушена, хотя равенство и не выполняется.
Задание 22 (машинное обучение, гессиан): Функция потерь $L(w_1,w_2)=w_1^2+w_1w_2+w_2^2+3w_1-2w_2+5$. Найти градиент в точке $(0,0)$, гессиан и определить, положительно ли он определён (то есть выпукла ли эта чаша потерь).
Задание 23 (машинное обучение, два слоя): Скалярная сеть из двух линейных слоёв: вход $x$, скрытый узел $h=w_1x$, выход $\hat y=w_2h=w_1w_2x$, ошибка $L=(y-\hat y)^2$. Найти $\dfrac{\partial L}{\partial w_1}$ и $\dfrac{\partial L}{\partial w_2}$ через цепное правило.
Задание 24 (геометрический смысл, седловая точка): Для функции $f(x,y)=x^2-y^2$ найти $f_x(0,0)$ и $f_y(0,0)$ и объяснить, почему равенство нулю обеих частных производных не означает наличие минимума или максимума в этой точке.
Задание 25: Найти $z_x$ и $z_y$ для $z=(x+y)^2e^{x-y}$ и вычислить обе производные в точке $(1,1)$.
Задание 26: Для $f(x,y,z)=x^2y^3z+\sin(xz)$ найти $f_{xz}$ и $f_{zx}$ и убедиться в их равенстве.
Задание 27 (машинное обучение, гессиан трёх весов): Функция потерь $L(w_1,w_2,w_3)=w_1^2+2w_2^2+3w_3^2$. Найти градиент и полный гессиан $3\times3$.
Задание 28 (физика): Уравнение состояния идеального газа даёт давление как функцию объёма и температуры при фиксированном количестве вещества: $P(V,T)=\dfrac{nRT}{V}$ ($n$, $R$ — константы). Найти $\dfrac{\partial P}{\partial V}$ и $\dfrac{\partial P}{\partial T}$.
Задание 29 (теоретическое): Для общей квадратичной формы $f(x,y)=Ax^2+Bxy+Cy^2$ показать, что $f_{xy}=f_{yx}=B$ для любых постоянных $A$, $B$, $C$.
Задание 30 (машинное обучение, невыпуклый ландшафт): Функция потерь $L(w_1,w_2)=\dfrac14w_1^4-w_1^2+w_2^2$. Найти градиент, все критические точки (где градиент равен нулю), гессиан в каждой из них и определить характер каждой точки.
Частые ошибки
Разберём типичные ошибки, которые встречаются почти у каждого, кто только начинает работать с частными производными.
-
Забывать, что остальные переменные — это константы, а не просто «другие буквы». Самая распространённая ошибка — дифференцировать по $x$ так, будто $y$ тоже как-то меняется вместе с ним. Если в функции есть слагаемое вида $3y^3$, при дифференцировании по $x$ оно исчезает целиком, как любая обычная числовая константа — а вовсе не превращается в $9y^2$.
-
Применять цепное правило только к внешней функции, забывая про внутреннюю. В выражении вроде $\sin(x^2y)$ легко продифференцировать только $\sin$ и получить $\cos(x^2y)$, забыв домножить на производную внутреннего выражения $x^2y$ по нужной переменной.
-
Путать порядок дифференцирования в обозначении $f_{xy}$. Обозначение $f_{xy}=(f_x)_y$ означает: сначала по $x$, потом по $y$. Перепутав порядок при вычислении вручную, легко получить $f_{yx}$ вместо $f_{xy}$ — для «хороших» функций с непрерывными вторыми производными это не страшно, поскольку по теореме Шварца оба результата совпадают, но в общем случае путаница в порядке — источник вычислительных ошибок.
-
Считать, что равенство смешанных производных верно всегда, без всяких условий. Теорема Шварца требует непрерывности вторых частных производных в окрестности точки — без этого условия равенство может нарушаться, как показывает классический контрпример из этого урока.
-
Думать, что если обе частные производные равны нулю, то это точка минимума или максимума. Как показывает пример с седловой точкой, обнуление градиента — необходимое, но не достаточное условие экстремума: нужно дополнительно анализировать гессиан, чтобы отличить минимум, максимум и седловую точку друг от друга.
-
Забывать проверять область определения при вычислении частной производной. Например, у функции $f(x,y)=\sqrt{x^2+y^2}$ частная производная не определена в начале координат, даже если формула для неё выглядит вполне «нормальной» вдали от этой точки.
Главное запомнить
-
Частная производная функции нескольких переменных по одной из них вычисляется точно так же, как обычная производная функции одной переменной, — при условии, что все остальные переменные на время вычисления объявлены константами.
-
Обозначения $\dfrac{\partial f}{\partial x}$, $f_x$, $f'_x$ и $\partial_x f$ означают одну и ту же величину — частную производную по $x$.
-
Геометрически частная производная по $x$ в точке — это наклон сечения графика функции плоскостью, где $y$ зафиксировано, то есть обычная производная одномерной кривой этого сечения.
-
Частные производные высших порядков получаются последовательным дифференцированием; смешанные производные $f_{xy}$ и $f_{yx}$ дифференцируются по разным переменным в разном порядке.
-
Теорема Шварца гарантирует равенство $f_{xy}=f_{yx}$ при условии непрерывности обеих смешанных производных — без этого условия равенство может нарушаться, что демонстрирует классический контрпример.
-
Градиент $\nabla f$ — это вектор, составленный из всех частных производных первого порядка; гессиан $H_f$ — симметричная (по теореме Шварца) матрица всех вторых частных производных.
-
В машинном обучении частная производная функции потерь по каждому весу — это буквально то число, которое вычисляет обратное распространение ошибки на каждом шаге обучения нейросети.
-
Гессиан используется в методах оптимизации второго порядка и позволяет отличить локальный минимум от седловой точки там, где одного обнуления градиента недостаточно.
-
Равенство нулю всех частных производных первого порядка — необходимое условие экстремума, но не достаточное: нужен дополнительный анализ гессиана.
Связь с другими темами курса
Этот урок напрямую опирается на предыдущий урок про функции нескольких переменных: там ты научился представлять $z=f(x,y)$ как поверхность в пространстве, а здесь эта поверхность получила первый полноценный аналитический инструмент — частную производную, которая позволяет измерять её локальное поведение вдоль отдельных координатных направлений. Сама идея «зафиксировать все переменные, кроме одной» — прямое расширение техники дифференцирования функции одной переменной из самых первых уроков курса матанализа, и все правила (производная суммы, произведения, частного, сложной функции), выученные там, применяются здесь без единого изменения.
В следующем уроке про полный дифференциал частные производные объединятся в единую линейную оценку изменения функции сразу по всем переменным одновременно — то есть в конструкцию, которая покажет, что происходит с функцией не только при движении вдоль осей координат, но и при произвольном одновременном изменении всех переменных сразу. А ещё через урок, при изучении производной по направлению, градиент, представленный здесь лишь вскользь, раскроется в полную силу: окажется, что он не просто вектор частных производных, а указатель направления самого быстрого роста функции — факт, из которого напрямую следует, почему градиентный спуск в машинном обучении шагает именно против направления градиента.
Интересные факты
-
Символ $\partial$, которым сегодня обозначают частную производную, — это на самом деле рукописный вариант латинской буквы $d$, специально видоизменённый, чтобы визуально отличаться от обычного $d$ и напоминать глазу читателя: «здесь дифференцирование частичное, не по всем переменным сразу».
-
Классический контрпример к перестановочности смешанных производных, разобранный в этом уроке, показывает, что интуиция может подвести даже опытного математика: без проверки условия непрерывности легко ошибочно решить, будто порядок дифференцирования вообще никогда не важен.
-
Гессиан назван в честь немецкого математика Отто Гессе, хотя сам он использовал похожую матрицу для совсем других задач — изучения кривых третьего порядка в проективной геометрии, а вовсе не для анализа функций многих переменных в современном смысле.
-
В глубоком обучении полный гессиан функции потерь современной нейросети с миллиардами параметров — это матрица размером миллиард на миллиард, вычислить и хранить которую целиком физически невозможно; поэтому методы оптимизации второго порядка на практике используют лишь приближения гессиана (например, его действие на отдельный вектор), а не саму матрицу целиком.
Лайфхаки и полезные трюки
-
Прежде чем дифференцировать сложное выражение по одной переменной, мысленно (или даже на бумаге) замени все остальные переменные на буквы вроде $a$, $b$, $c$ — это часто помогает не сбиться и случайно не продифференцировать что-то «лишнее».
-
Если нужно проверить вычисление смешанной производной, посчитай её оба раза — сначала в порядке $f_{xy}$, потом в порядке $f_{yx}$: для подавляющего большинства функций, встречающихся на практике, результаты обязаны совпасть по теореме Шварца, и расхождение почти всегда означает арифметическую ошибку где-то по пути, а не экзотический контрпример.
-
Разбирая геометрический смысл частной производной, представляй себе именно вертикальное сечение поверхности плоскостью — эта картинка почти всегда быстрее подсказывает правильный знак производной, чем попытка представить всю поверхность целиком.
-
Когда функция потерь содержит слагаемые с произведением разных весов (например, $w_1w_2$), знай заранее: соответствующая ячейка гессиана вне главной диагонали не будет нулевой, а значит оптимизацию по этим двум весам нельзя вести полностью независимо друг от друга.
-
Проверяя, является ли критическая точка (там, где градиент равен нулю) минимумом, максимумом или седловой точкой, для функции двух переменных достаточно посмотреть на знаки диагональных элементов гессиана и знак его определителя — не нужно исследовать поведение функции вдоль всех возможных направлений вручную.
Частная производная выглядит как скромная техническая деталь — «просто дифференцируем по одной переменной, остальные считаем константами», — но на деле это тот самый строительный блок, из которого собрана вся современная оптимизация обучаемых моделей: от одного нейрона с двумя весами до сетей с миллиардами параметров. Освоив её здесь, на понятных примерах с параболоидами и куполами, ты готов двигаться дальше — к полному дифференциалу, который в следующем уроке соберёт частные производные в единый инструмент оценки изменения функции сразу по всем направлениям.
Понял тему? Закрепи в боте! 🚀
Попрактикуйся на задачах и получи персональные рекомендации от AI
💪 Начать тренировку