Multivariate calculus#

Перейдём теперь к более общей ситуации. Пусть заданы два конечномерных пространства \(U\) и \(V\) (например, векторов или матриц). Функция \(f \colon X \to V\), \(X \subset U\), дифференцируема в точке \(x\in X\), если найдётся такой линейный оператор \(L\colon U \to V\), что справедливо равенство

\[ f(x+h) - f(x) = L[h] + o(\Vert h\Vert) \text{ при } \Vert h\Vert \to 0. \]

Линейное отображение \(L\) из мира \(x\)-ов в мир значений \(f\) называется дифференциалом (производной, производным отображением) функции \(f\) в точке \(x\) и обозначается \(df(x)\) или \(Df(x)[h]\). Фактически дифференциал зависит от двух аргументов: \(df \colon X\times U \to V\), причём по второму аргументу он линеен. Среди всех линейных операторов из \(U\) в \(V\) дифференциал наилучшим образом приближает приращение функции:

\[ f(x+h) - f(x) \approx Df(x)[h]. \]

Note

Нотация \(Df(x)[h]\) для дифференциала выглядит несколько громоздко, зато в неё явно включены обе переменные, от которых зависит дифференциал. При вычислении дифференциала функции \(f\) в произвольной точке \(x\) часто используют более короткую запись \(df(x)\) или даже \(df\); переменная приращения в таких случаях традиционно обозначается через \(dx\). Обозначение \(dx\) следует воспринимать как единый неделимый символ, по смыслу полностью тождественный приращению \(h\).

Differentials of scalar functions#

In the previous section we considered the simplest case when \(f \colon \mathbb R \to \mathbb R\) — скалярная функция скалярного аргумента. Тогда её дифференциал записывается как \(df(x) = f'(x) dx\) или \(Df(x)[h] = f'(x)h\). Линейный оператор из \(\mathbb R\) в \(\mathbb R\) задаётся одним действительным числом, и в данном случае оно равно \(f'(x)\). Now see what happens when the function \(f\) has multidimensional domain.

Functions of vectors#

Пусть \(f\colon \mathbb R^n \to \mathbb R\) — скалярная функция векторного аргумента \(\boldsymbol x = (x_1, \ldots, x_n)^\top\) (под вектором по умолчанию понимается вектор-столбец). Тогда

(45)#\[ Df(\boldsymbol x)[\boldsymbol h] = \sum\limits_{i=1}^n \frac{\partial f(\boldsymbol x)} {\partial x_i} h_i = \langle \nabla f(\boldsymbol x), \boldsymbol h\rangle = \nabla f (\boldsymbol x)^\top \boldsymbol h,\]

где

\[ \nabla f = \Big(\frac{\partial f}{\partial x_1}, \ldots,\frac{\partial f} {\partial x_n}\Big)^\top \]

градиент функции \(f\), а \(\langle \bullet, \bullet \rangle\) — стандартное скалярное произведение в \(\mathbb R^n\). Также дифференциал записывают как \(df(\boldsymbol x) = \nabla f(\boldsymbol x)^\top d\boldsymbol x\). Обратите внимание, что приращение \(d\boldsymbol x\) и градиент \(\nabla f\) представляют собой вектор-столбец того же размера, что и переменная \(\boldsymbol x\). Компоненты градиента — это частные производные функции \(f\), которые сами являются функциями от переменной \(\boldsymbol x\), поэтому градиент также зависит от \(\boldsymbol x\).

Вопрос на подумать. Как записать в векторной форме дифференциал функции \(f\colon \mathbb R^n \to \mathbb R\), принимающей на вход вектор-строку, а не вектор-столбец?

Попробуйте прийти к ответу самостоятельно, прежде чем смотреть решение.
В координатах разницы в записи дифференциала нет, по-прежнему
\[ df = \sum\limits_{i=1}^n \frac{\partial f}{\partial x_i} dx_i. \]

Поскольку \(\boldsymbol x\) теперь вектор-строка, такую же форму имеют и градиент, и приращение. Подружить их в скалярном произведении, в котором всегда вектор-строка умножается на вектор-столбец, можно так:

\[ df(\boldsymbol x) = \nabla f(\boldsymbol x) d\boldsymbol x^\top, \]

а в другой нотации — так:

\[ Df(\boldsymbol x)[\boldsymbol h] = \nabla f(\boldsymbol x) \boldsymbol h ^\top. \]

Exercise

Let \(\boldsymbol a \in \mathbb R^n\) be a fixed vector and

\[ f(\boldsymbol x) = \langle \boldsymbol a, \boldsymbol x\rangle = \boldsymbol a^\top \boldsymbol x. \]

Find \(\nabla f(\boldsymbol x)\).

Functions of matrices#

Пусть \(f\colon \mathbb R^{m\times n} \to \mathbb R\) — скалярная функция матричного аргумента \(\boldsymbol X\). Такую функцию можно представлять себе как функцию от вектора из \(\mathbb R^{mn}\) в \(\mathbb R\) и дифференцировать аналогично (45):

(46)#\[ Df(\boldsymbol X)[\boldsymbol H] = \sum\limits_{i=1}^m \sum\limits_{j=1}^n \frac{\partial f (\boldsymbol X)}{\partial X_{ij}} H_{ij} = \mathrm{tr}(\nabla f(\boldsymbol X)^\top \boldsymbol H).\]

Здесь мы упаковали градиент функции \(f\) в матрице того же размера, что и матрица \(\boldsymbol X\), а также воспользовались равенством

\[ \sum\limits_{i=1}^m \sum\limits_{j=1}^n A_{ij} B_{ij} = \mathrm{tr} (\boldsymbol A^\top \boldsymbol B), \quad A, B \in \mathbb R^{m\times n}. \]

Упражнение. Докажите, что формула \(\langle \boldsymbol A, \boldsymbol B \rangle = \mathrm{tr} (\boldsymbol A^\top \boldsymbol B)\) задаёт скалярное произведение в пространстве матриц \(\mathbb R^{m\times n}\).

Gradients shape#

В (45) и (46) пришлось столкнуться с давним знакомым из матанализа: градиентом \(\nabla f\) скалярной функции \(f\), который состоит из частных производных этой функции по всем координатам её аргумента \(x\). При этом его обычно упаковывают в ту же форму, что и сам аргумент: если \(x\) — вектор-строка, то и градиент записывается вектор-строкой, а если \(x\) — матрица, то и градиент тоже будет матрицей того же размера. Это важно, например, для алгоритма градиентного спуска, при осуществлении которого мы должны уметь прибавлять градиент к точке, в которой он посчитан.

Note

Иногда приходится дифференцировать функции, зависящие от различных наборов аргументов, и тогда во избежание неоднозачности в индексе у буквы \(\nabla\) указывают аргумент, по которому осуществляется дифференцирование. Например, запись \(\nabla_{\boldsymbol w} f(\boldsymbol X, \boldsymbol y, \boldsymbol w)\) недвусмысленно даёт понять, что мы дифференцируем фукнцию \(f\) по вектору \(\boldsymbol w\), а \(\boldsymbol X\) и \(\boldsymbol y\) рассматриваем при этом как фиксированные параметры.

Differentials of vector functions#

Посмотрим теперь, как выглядит дифференцирование для функций, которые на выходе выдают не скаляр, а вектор или матрицу.

Applying a function elementwise#

Пусть

(47)#\[\begin{split}f \colon \mathbb R^m \to \mathbb R^m,\quad f(\boldsymbol x) = \begin{pmatrix} \varphi(x_1)\\ \vdots\\ \varphi(x_m) \end{pmatrix},\end{split}\]

где \(\varphi \colon \mathbb R \to \mathbb R\) — некоторая гладкая функция. Тогда

\[\begin{split} f(\boldsymbol x + \boldsymbol h) - f(\boldsymbol x) = \begin{pmatrix} \varphi(x_1 + h_1) - \varphi(x_1)\\ \vdots \\ \varphi(x_m + h_m) - \varphi(x_m) \end{pmatrix} \approx \begin{pmatrix} \varphi'(x_{1}) h_1\\ \vdots \\ \varphi'(x_{m}) h_m \end{pmatrix} = \begin{pmatrix} \varphi'(x_{1}) \\ \vdots \\ \varphi'(x_{m}) \end{pmatrix} \odot \boldsymbol h. \end{split}\]

В последнем выражении происходит покомпонентное умножение. Если обозначить через \(\varphi'(\boldsymbol x)\) покомпонетное применение функции \(\varphi'\) к координатам вектора \(\boldsymbol x = (x_1, \ldots, x_m)^\top\), то дифференциал функции \(f\) можно записать как

\[ Df(\boldsymbol x)[\boldsymbol h] = \varphi'(\boldsymbol x) \odot \boldsymbol h =\boldsymbol h \odot \varphi'(\boldsymbol x). \]

Linear matrix function#

Let \(f(\boldsymbol X) = \boldsymbol{XW}\), где \(\boldsymbol X\) и \(\boldsymbol W\) — матрицы подходящего размера. Тогда

\[ f(\boldsymbol X + \boldsymbol H) - f(\boldsymbol X) = (\boldsymbol X + \boldsymbol H) \boldsymbol W - \boldsymbol X \boldsymbol W = \boldsymbol H \boldsymbol W. \]

Получилась линейная по \(\boldsymbol H\) функция, поэтому она и является дифференциалом функции \(f\) в точке \(\boldsymbol X\): \(Df(\boldsymbol X) [\boldsymbol H] = \boldsymbol{HW}\). Допустима также запись \(df(\boldsymbol X) = d\boldsymbol X\cdot \boldsymbol W\).

Exercise

Найдите дифференциал функции \(f(\boldsymbol W) = \boldsymbol{XW}\), где \(\boldsymbol X\) и \(\boldsymbol W\) — матрицы подходящего размера.

Vector-to-vector functions#

Пусть \(f\colon \mathbb R^m \to \mathbb R^n\), тогда дифференциал должен быть линейным оператором из \(\mathbb R^m\) в \(\mathbb R^n\), то есть матрицей размера \(n\times m\). И, действительно, с помощью матрицы Якоби

(48)#\[\begin{split}\boldsymbol J_f = \frac{\partial f}{\partial \boldsymbol x} = \begin{pmatrix} \frac{\partial f_1}{\partial x_1} & \ldots & \frac{\partial f_1}{\partial x_m} \\ \vdots & & \vdots \\ \frac{\partial f_n}{\partial x_1} & \ldots & \frac{\partial f_n}{\partial x_m}\\ \end{pmatrix}\end{split}\]

дифференциал записывается как \(Df(\boldsymbol x)[\boldsymbol h] = \boldsymbol J_f(\boldsymbol x)\boldsymbol h\), или \(df(\boldsymbol x) = \boldsymbol J_f(\boldsymbol x) d\boldsymbol x\).

Exercise

According to (48), the differential of the function (47) should be a \(m\times m\) matrix. How does it look like?

Вопрос на подумать. Как записать в векторно-матричной форме дифференциал функции \(f\colon \mathbb R^m \to \mathbb R^n\), отображающей вектор-строку \(\boldsymbol x = (x_1, \ldots, x_m)\) в вектор-строку \((f_1(\boldsymbol x), \ldots, f_n(\boldsymbol x))\)?

Попробуйте прийти к ответу самостоятельно, прежде чем смотреть решение.
Значение дифференциала $$Df(\boldsymbol x)[\boldsymbol h]$$ теперь должно быть вектором-строкой, а не вектором-столбцом. Этого легко добиться транспонированием: применяя её к формуле из предыдущего примера, получаем $$Df(\boldsymbol x)[\boldsymbol h] = \boldsymbol h^T \boldsymbol J_f(\boldsymbol x)^T$$. Следует учесть, однако, что теперь приращение $$\boldsymbol h$$ — это строка, поэтому его транспонировать не нужно. В итоге получаем $$Df(\boldsymbol x)[\boldsymbol h] = \boldsymbol h \boldsymbol J_f(\boldsymbol x)^T$$ (альтернативная запись: $$df = d\boldsymbol x \cdot \boldsymbol J_f(\boldsymbol x)^T$$).

Rules of differentiation#

  1. Производная константы. Если \(f(x) = \mathrm{const}\), то \(f(x+h) - f(x) = 0\), и по определению \(Df(x)[h] = 0\). По этой же причине градиент постоянной функции векторного аргумента также равен нулю.

  2. Дифференциал линейного отображения. Пусть \(f(x)\) — линейное отображение. Тогда

\[ f(x + h) - f(x) = f(x) + f(h) - f(x) = f(h). \]

Поскольку справа линейное отображение, то по определению оно и является дифференциалом \(Df(x)[h]\). Мы уже видели примеры таких ситуаций выше, когда рассматривали отображения умножения на матрицу слева или справа.

  1. Линейность дифференциала. Пусть функции \(f \colon X \to V\) и \(g \colon X \to V\) дифференцируемы в точке \(x\in X\) и \(\alpha, \beta \in \mathbb R\). Тогда функция \(\alpha f + \beta g\) дифференцируема в точке \(x\), и

    \[ D(\alpha f + \beta g)(x)[h] = \alpha Df(x)[h] + \beta Dg(x)[h]. \]
  2. Дифференциал произведения. Пусть функции \(u \colon X \to \mathbb R\), \(v \colon X \to V\) дифференцируемы в точке \(x\). Тогда функция \(u\cdot v\) дифференцируема в точке \(x\), и

    \[ D(uv)(x)[h] = Du(x)[h]\cdot v(x) + u(x)\cdot Dv(x)[h]. \]

    Это же правило сработает и для скалярного произведения:

    \[ D \langle u(x), v(x)\rangle [h] = \langle Du(x)[h], v(x)\rangle + \langle u(x), Dv(x)[h]\rangle. \]
  3. Производная сложной функции. Пусть функция \(u \colon X \to Y\) дифференцируема в точке \(x\), а функция \(v \colon Y \to Z\) дифференцируема в точке \(u(x)\). Тогда их композиция \(v\circ u\) дифференцируема в точке \(x\), и

    \[ D(u\circ v)(x)[h] = Dv(u(x))\Big[Du(x)[h]\Big]. \]

    В частности, если \(Y \subset \mathbb R\) и \(Z = \mathbb R\), то \(d(v\circ u)(x) = v'(u(x))du(x)\).

  4. Важный частный случай: дифференцирование перестановочно с линейным отображением. Пусть \(f(x) = L(v(x))\), где \(L\) — линейное отображение. Тогда \(DL(v(x))\) совпадает с самим \(L\) и формула упрощается:

    \[ D(L\circ v)(x)[h] = L(Dv(x)[h]). \]

Exercise

Let \(\boldsymbol A \in \mathbb R^{n\times n}\) and

\[ f(\boldsymbol x) = \langle \boldsymbol{Ax}, \boldsymbol x\rangle = \boldsymbol x^\top \boldsymbol{Ax}. \]

Find \(\nabla f(\boldsymbol x)\).

Second differential#

Дифференциал \(Df(x)[h]\) функции

\[ f \colon X \to V, \quad X\subset U, \]

где \(U\) и \(V\) — некоторые конечномерные пространства, зависит от двух аргументов: \(x\in X\) и \(h\in U\). Зафиксировав приращение \(h_1\in U\), получим функцию от переменной \(x\):

\[ g(x) = Df(x)[h_1]. \]

А значит, её тоже можно попробовать продифференцировать! Если это возможно, то её дифференциал \(Dg(x)[h_2]\) называется вторым дифференциалом функции \(f\), и обозначается

\[ D^2f(x)[h_1, h_2] \text{ или } d^2f(x). \]

На сей раз это не линейный оператор, а билинейная форма: при фиксированном \(x_0\in X\) функция \(D^2f(x_0)[h_1, h_2]\) линейна по каждому из аргументов приращения.

Для функций \(f\colon \mathbb R^n \to \mathbb R\) второй дифференциал, как и любую билинейную форму, можно представить в виде матрицы:

\[ D^2f(\boldsymbol x)[\boldsymbol h_1, \boldsymbol h_2] = \langle \boldsymbol H_x \boldsymbol h_1, \boldsymbol h_2\rangle = \boldsymbol h_2^\top \boldsymbol H_x \boldsymbol h_1, \quad \boldsymbol H_x \in \mathbb R^{n\times n}. \]

Матрица \(\boldsymbol H_x\) назвается гессианом функции \(f\) в точке \(\boldsymbol x\) и обозначается \(\nabla^2 f( \boldsymbol x)\). Гессиан состоит из вторых частных производных:

\[ \nabla^2 f(\boldsymbol x) = \left \| \frac{\partial^2 f}{\partial x_i \partial x_j}(\boldsymbol x)\right\|_{i, j=1}^n. \]

Если все вторые частные производные функции \(f\) непрерывны, то её гессиан представляет собой симметричную матрицу (в этом состоит утверждение теоремы Шварца). Также для таких функций справедливо разложение по формуле Тейлора до второго порядка:

\[ f(\boldsymbol x+ \boldsymbol h) = f(\boldsymbol x) + Df(\boldsymbol x)[\boldsymbol h] + \frac 12 D^2f(\boldsymbol x)[\boldsymbol h, \boldsymbol h] + o(\|\boldsymbol h\|^2), \]

или, в другой записи,

\[ f(\boldsymbol x+\boldsymbol h) = f(\boldsymbol x) + \nabla f(\boldsymbol x)^\top h + \frac 12 \boldsymbol h^\top\nabla ^2f(\boldsymbol x)\boldsymbol h + o(\|\boldsymbol h\|^2). \]

Из формулы Тейлора вытекает следующее полезное утверждение для поиска точек локального экстремума.

Теорема. Пусть функция \(f:\mathbb{R}^m\to\mathbb{R}\) имеет непрерывные частные производные второго порядка \(\frac{\partial^2 f}{\partial x_i\partial x_j}\) в окрестности точки \(\boldsymbol x_0\), причём \(\nabla f(\boldsymbol x_0) = 0\). Тогда точка \(\boldsymbol x_0\) является точкой локального минимума функции \(f\), если гессиан \(\nabla^2f(\boldsymbol x_0)\) положительно определён, и точкой локального максимума, если он отрицательно определён.

Проверить матрицу на положительную или отрицательную определённость можно с помощью критерия Сильвестра.

Exercise

Let \(\boldsymbol A \in \mathbb R^{m\times n}\), \(\boldsymbol b \in \mathbb R^m\) and

\[ f(\boldsymbol x) = \Vert \boldsymbol{Ax} - \boldsymbol b\Vert_2^2. \]

Find \(\nabla f(\boldsymbol x)\) and \(\nabla^2 f(\boldsymbol x)\). At which point \(\widehat{\boldsymbol x}\) the global minimum of \(f\) is attained?

See also

The similar form has the loss function of linear regression.