/ Учебник по машинному обучению / Учебник по ML
Войти
  • 1. Введение

    • 1.1. Об этой книге
    • 1.2. Машинное обучение
  • 2. Классическое обучение с учителем

    • 2.1. Линейные модели
    • 2.2. Метрические методы
    • 2.3. Решающие деревья
    • 2.4. Ансамбли в машинном обучении
    • 2.5. Градиентный бустинг
  • 3. Оценка качества моделей

    • 3.1. Метрики классификации и регрессии
    • 3.2. Кросс-валидация
    • 3.3. Подбор гиперпараметров
  • 4. Вероятностные модели

    • 4.1. Вероятностный подход в ML
    • 4.2. Экспоненциальный класс распределений и принцип максимальной энтропии
    • 4.3. Обобщённые линейные модели
    • 4.4. Как оценивать вероятности
    • 4.5. Генеративный подход к классификации
    • 4.6. Байесовский подход к оцениванию
    • 4.7. Модели с латентными переменными
  • 5. Глубинное обучение - введение

    • 5.1. Нейронные сети
    • 5.2. Первое знакомство с полносвязными нейросетями
    • 5.3. Метод обратного распространения ошибки
    • 5.4. Тонкости обучения
  • 6. Глубинное обучение - архитектуры

    • 6.1. Свёрточные нейросети
    • 6.2. Нейросети для работы с последовательностями
    • 6.3. Трансформеры
    • 6.4. Графовые нейронные сети
    • 6.5. Нейросети для облаков точек
  • 7. Практические главы

    • 7.1. Кластеризация
  • 8. Взаимодействие со средой

    • 8.1. Обучение с подкреплением
    • 8.2. Краудсорсинг
  • 9. Теория ML

    • 9.1. Bias-variance decomposition
  • 10. Оптимизация в ML

    • 10.1. Оптимизация в ML
    • 10.2. Проксимальные методы
    • 10.3. Методы второго порядка
    • 10.4. Сходимость SGD
  • 11. Теормин

    • 11.1.
      Матричное дифференцирование
  • Матричное дифференцирование
  • Основные обозначения
  • Простые примеры и свойства матричного дифференцирования
  • Простые примеры вычисления производной
  • Примеры вычисления производных сложных функций
  • Вторая производная
  • Примеры вычисления и использования второй производной

11.1. Матричное дифференцирование

Автор(ы):

  • Федотов Станислав

Любая задача машинного обучения — это задача оптимизации, а задачи оптимизации удобнее всего решать градиентными методами (если это возможно, конечно). Поэтому важно уметь находить производные всего, что попадается под руку. Казалось бы, в чём проблема: ведь дифференцирование — простая и понятная штука (чего не скажешь, например, об интегрировании). Зачем же как-то специально учиться дифференцировать матрицы?

Да в принципе-то никаких проблем: в этом параграфе вы не узнаете никаких секретных приёмов или впечатляющих теорем. Но, согласитесь, если исходная функция от вектора $x$ имела вид $f(x) = \vert\vert Ax - b\vert\vert^2$ (где $A$ — константная матрица, а $b$ — постоянный вектор), то хотелось бы уметь и производную выражать красиво и цельно через буквы $A$, $x$ и $b$, не привлекая отдельные координаты $A_{ij}$, $x_k$ и $b_s$. Это не только эстетически приятно, но и благотворно сказывается на производительности наших вычислений: ведь матричные операции обычно очень эффективно оптимизированы в библиотеках, чего не скажешь о самописных циклах по $i, j, k, s$. И всё, что будет происходить дальше, преследует очень простую цель: научиться вычислять производные в удобном, векторно-матричном виде. А чтобы сделать это и не сойти с ума, мы должны ввести ясную систему обозначений, составляющую ядро техники матричного дифференцирования.

 

Основные обозначения

Вспомним определение производной для функции $f:\mathbb{R}^m\rightarrow\mathbb{R}^n$. Функция $f(x)$ дифференцируема в точке $x_0$, если

$$f(x_0 + h) = f(x_0) + \color{#348FEA}{\left[D_{x_0} f \right]} (h) + \bar{\bar{o}} \left(\left| \left| h\right|\right|\right),$$

где $\color{#348FEA}{\big[D_{x_0} f\big]}$ — дифференциал функции $f$: линейное отображение из мира $x$-ов в мир значений $f$. Грубо говоря, он превращает «малое приращение $h=\Delta x$» в «малое приращение $\Delta f$» («малые» в том смысле, что на о-малое можно плюнуть):

$$f(x_0 + h) - f(x_0)\approx\color{#348FEA}{\left[D_{x_0} f \right]} (h)$$

Отметим, что дифференциал зависит от точки $x_0$, в которой он берётся: $\color{#348FEA}{\left[D_{\color{red}{x_0}} f \right]} (h)$. Под $\vert\vert h\vert\vert$ подразумевается норма вектора $h$, например корень из суммы квадратов координат (обычная евклидова длина).

Давайте рассмотрим несколько примеров и заодно разберёмся, какой вид может принимать выражение $\color{#348FEA}{\big[D_{x_0} f\big]} (h)$ в зависимости от формы $x$. Начнём со случаев, когда $f$ — скалярная функция.

Примеры конкретных форм $\big[D_{x_0} f\big] (h)$, когда $f$ — скалярная функция
  1. $f(x)$ — скалярная функция, $x$ — скаляр. Тогда

    $$f(x_0 + h) - f (x_0) \approx f'(x_0) (h)$$

    $$\color{#348FEA}{\left[D_{x_0} f\right] (h)} = f'(x_0) h = h \cdot f'(x_0)$$

    Здесь $h$ и $f'(x_0)$ — просто числа. В данном случае $\color{#348FEA}{\left[D_{x_0} f\right]}$ — это обычная линейная функция.

  2. $f(x)$ — скалярная функция, $x$ — вектор. Тогда

    $$f(x_0 + h) - f(x_0) \approx \sum\limits_i \left.\frac{\partial f}{\partial x_i} \right|_{x=x_0} h_i,$$

    то есть

    $$ \color{#348FEA}{\left[D_{x_0} f\right]}(h) = \left(\color{#FFC100}{\nabla_{x_0} f}\right)^T h = \langle\color{#FFC100}{\nabla_{x_0} f}, h \rangle, $$

    где $\langle\bullet, \bullet\rangle$ — операция скалярного произведения, а $\color{#FFC100}{\nabla_{x_0} f} = \left(\frac{\partial f}{\partial x_1}, \ldots, \frac{\partial f}{\partial x_n}\right)$ — градиент функции $f$.

  3. $f(x)$ — скалярная функция, $X$ — матрица. Дифференциал скалярной функции по матричному аргументу определяется следующим образом:

    $$ f(X_0 + H) - f(X_0) \approx \sum\limits_{i,j}\ \left.\frac{\partial f}{\partial X_{ij}} \right|_{X=X_0} H_{ij} $$

    Можно заметить, что это стандартное определение дифференциала функции многих переменных для случая, когда переменные — элементы матрицы $X$. Заметим также один интересный факт:

    $$ \sum_{ij} A_{ij} B_{ij} = \text{tr}, A^T B, $$

    где $A$ и $B$ — произвольные матрицы одинакового размера. Объединяя оба приведённых выше факта, получаем:

    $$ \color{#348FEA}{\left[D_{X_0} f \right]} (H) = \sum \limits_{ij} \left. \frac{\partial f}{\partial X_{ij}} \right|_{X = X_0} \left( X - X_0 \right)_{ij} = \text{tr}\, \left( \left[\left. \frac{\partial f}{\partial X_{ij}}\right|_{X=X_0}\right]^T H\right). $$

    Можно заметить, что здесь, по аналогии с примерами, где $x$ — скаляр и где $x$ — вектор (и $f(x)$ — скалярная функция), получилось на самом деле скалярное произведение градиента функции $f$ по переменным $X_{ij}$ и приращения. Этот градиент мы записали для удобства в виде матрицы с теми же размерами, что матрица $X$.


В примерах выше нам дважды пришлось столкнуться с давним знакомцем из матанализа: градиентом скалярной функции (у нескалярных функций градиента не бывает). Напомним, что градиент $\color{#FFC100}{\nabla_{x_0} f}$ функции в точке $x_0$ состоит из частных производных этой функции по всем координатам аргумента. При этом его обычно упаковывают в ту же форму, что и сам аргумент: если $x$ — вектор-строка, то и градиент записывается вектор-строкой, а если $x$ — матрица, то и градиент тоже будет матрицей того же размера. Это важно, потому что для осуществления градиентного спуска мы должны уметь прибавлять градиент к точке, в которой он посчитан.

Как мы уже имели возможность убедиться, для градиента скалярной функции $f$ выполнено равенство

$$ \left[D_{x_0} f \right] (x-x_0) = \langle\color{#FFC100}{\nabla_{x_0} f}, x-x_0\rangle, $$

где скалярное произведение — это сумма попарных произведений соответствующих координат (да-да, самое обыкновенное).

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

Примеры $\big[D_{x_0} f\big] (h)$, где $f$ — это вектор или матрица
  1. $f(x) = \begin{pmatrix} f(x_1)\ \vdots\ f(x_m) \end{pmatrix}$, $x$ — вектор. Тогда

    $$ f(x_0 + h) - f(x_0) = \begin{pmatrix} f(x_{01} + h_1) - f(x_{01})\ \vdots \ f(x_{0m} + h_m) - f(x_{0m}) \end{pmatrix} \approx \begin{pmatrix} f'(x_{01}) h_1\ \vdots \ f'(x_{0m}) h_m \end{pmatrix} = \begin{pmatrix} f'(x_{01}) \ \vdots \ f'(x_{0m}) \end{pmatrix} \odot h. $$

    В последнем выражении происходит покомпонентное умножение:

    $$\color{#348FEA}{\big[D_{x_0} f\big]} (h) = f'(x_0) \odot h = h \odot f'(x_0)$$

  2. $f(X) = XW$, где $X$ и $W$ — матрицы. Тогда

    $$f(X_0 + H) - f(X_0) = (X_0 + H) W - X_0 W = H W,$$

    то есть

    $$\color{#348FEA}{\big[D_{X_0} f\big]} (H) = H W$$

  3. $f(W) = XW$, где $X$ и $W$ — матрицы. Тогда

    $$f(W_0 + H) - f(W_0) = X(W_0 + H) - XW_0 = X H,$$

    то есть

    $$\color{#348FEA}{\big[D_{W_0} f\big]} (H) = X H$$

  4. $f(x) = (f_1(x),\ldots,f_K(x))$ — вектор-строка, $x = (x_1,\ldots,x_D)$ — вектор-строка. Тогда

    $$ \color{#348FEA}{\big[D_{x_0} f\big]}(h) = \left(\sum_j \left. \frac{\partial f_1}{\partial y_j} \right|_{y=x_0}h_j, \ldots, \sum_j \left. \frac{\partial f_K}{\partial y_j} \right|_{y=x_0}h_j \right) = $$

    $$ = h \cdot \begin{pmatrix} \left. \frac{\partial f_1}{\partial y_1} \right|_{y=x_0} & \ldots & \left. \frac{\partial f_k}{\partial y_1} \right|_{y=x_0} \\ \vdots & & \vdots \\ \left. \frac{\partial f_1}{\partial y_D} \right|_{y=x_0} & \ldots & \left. \frac{\partial f_k}{\partial y_D} \right|_{y=x_0}\\ \end{pmatrix} = h \cdot \left. \frac{\partial f}{\partial y}\right|_{y = x_0} $$

    Матрица, выписанная в предпоследней выкладке, — это знакомая вам из курса матанализа матрица Якоби.


Простые примеры и свойства матричного дифференцирования

  1. Производная константы. Пусть $f(x) = a$. Тогда

    $$f(x_0 + h) - f(x_0) = 0,$$

    то есть $\color{#348FEA}{\big[D_{x_0} f\big]}$ — это нулевое отображение. А если $f$ — скалярная функция, то и $\color{#FFC100}{\nabla_{x_0} f} = 0.$

  2. Производная линейного отображения. Пусть $f(x)$ — линейное отображение. Тогда

    $$f(x_0 + h) - f(x_0) = f(x_0) + f(h) - f(x_0) = f(h)$$

    Поскольку справа линейное отображение, то по определению оно и является дифференциалом $\color{#348FEA}{\big[D_{x_0} f\big]}$. Мы уже видели примеры таких ситуаций выше, когда рассматривали отображения умножения на матрицу слева или справа. Если $f$ — (скалярная) линейная функция, то она представляется в виде $\langle a, v\rangle$ для некоторого вектора $a$ — он и будет градиентом $f$.

  3. Линейность производной. Пусть $f(x) = \lambda u(x) + \mu v(x)$, где $\lambda, \mu$ — скаляры, а $u, v$ — некоторые отображения, тогда

    $$\color{#348FEA}{\big[D_{x_0} f\big]} = \lambda \color{#348FEA}{\big[D_{x_0} u\big]} + \mu \color{#348FEA}{\big[D_{x_0} v\big]}$$

    Попробуйте доказать сами, прежде чем смотреть доказательство.

    $$f(x_0 + h) - f(x_0) = (\lambda u(x_0 + h) + \mu v(x_0 + h)) - (\lambda u(x_0) + \mu v(x_0)) =$$

    $$ = \lambda(u(x_0 + h) - u(x_0)) + \mu(v(x_0 + h) - v(x_0)) \approx $$

    $$\approx \lambda \color{#348FEA}{\big[D_{x_0} u\big]}(h) + \mu \color{#348FEA}{\big[D_{x_0} v\big]}(h)$$

  4. Производная произведения. Пусть $f(x) = u(x) v(x)$, где $u, v$ — некоторые отображения, тогда

    $$\color{#348FEA}{\big[D_{x_0} f\big]} = \color{#348FEA}{\big[D_{x_0} u\big]} \cdot v(x_0) + u(x_0) \cdot \color{#348FEA}{\big[D_{x_0} v\big]}$$

    Попробуйте доказать сами, прежде чем смотреть доказательство.

    Обозначим для краткости $x = x_0 + h$. Тогда

    $$u(x)v(x) - u(x_0)v(x_0) = u(x)v(x) - u(x_0)v(x) + u(x_0)v(x) - u(x_0)v(x_0) =$$

    $$ (u(x) - u(x_0))v(x) + u(x_0)(v(x) - v(x_0))\approx $$

    $$\approx \color{#348FEA}{\big[D_{x_0} u\big]}(h) \cdot v(x) + u(x_0)\cdot \color{#348FEA}{\big[D_{x_0} v\big]}(h)$$

    И всё бы хорошо, да в первом слагаемом $v(x)$ вместо $v(x_0)$. Придётся разложить ещё разок:

    $$\color{#348FEA}{\big[D_{x_0} u\big]}(h) \cdot v(x) \approx $$

    $$\color{#348FEA}{\big[D_{x_0} u\big]}(h) \cdot \left(v(x_0) + \color{#348FEA}{\big[D_{x_0} v\big]}(h) + o(\vert\vert h\vert\vert)\right) =$$

    $$\color{#348FEA}{\big[D_{x_0} u\big]}(h) \cdot v(x_0) + \bar{\bar{o}}\left(\vert\vert h\vert\vert\right)$$

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

    $$\color{#348FEA}{\big[D_{x_0} \langle u, v\rangle\big]} = \langle\color{#348FEA}{\big[D_{x_0} u\big]}, v\rangle + \langle u, \color{#348FEA}{\big[D_{x_0} v\big]}\rangle$$

    В этом нетрудно убедиться, повторив доказательство или заметив, что в доказательстве мы пользовались лишь дистрибутивностью (= билинейностью) умножения.

  5. Производная сложной функции. Пусть $f(x) = u(v(x))$. Тогда

    $$f(x_0 + h) - f(x_0) = u(v(x_0 + h)) - u(v(x_0)) \approx $$

    $$\approx\left[D_{v(x_0)} u \right] (v(x_0 + h) - v(x_0)) \approx \left[D_{v(x_0)} u \right] \left( \left[D_{x_0} v\right] (h)\right)$$

    Здесь $D_{v(x_0)} u$ — дифференциал $u$ в точке $v(x_0)$, а $\left[D_{v(x_0)} u \right]\left(\ldots\right)$ — это применение отображения $\left[D_{v(x_0)} u \right]$ к тому, что в скобках. Итого получаем:

    $$\left[D_{x_0} \color{#5002A7}{u} \circ \color{#4CB9C0}{v} \right](h) = \color{#5002A7}{\left[D_{v(x_0)} u \right]} \left( \color{#4CB9C0}{\left[D_{x_0} v\right]} (h)\right)$$

  6. Важный частный случай: дифференцирование перестановочно с линейным отображением. Пусть $f(x) = L(v(x))$, где $L$ — линейное отображение. Тогда $\left[D_{v(x_0)} L \right]$ совпадает с самим $L$ и формула упрощается:

    $$\left[D_{x_0} \color{#5002A7}{L} \circ \color{#4CB9C0}{v} \right](h) = \color{#5002A7}{L} \left( \color{#4CB9C0}{\left[D_{x_0} v\right]} (h)\right)$$

Простые примеры вычисления производной

  • Вычислим дифференциал и градиент функции $f(x) = \langle a, x\rangle$, где $x$ — вектор-столбец, $a$ — постоянный вектор.

    Попробуйте вычислить сами, прежде чем смотреть решение.

    Вычислить производную можно непосредственно:

    $$f(x_0 + h) - f(x_0) = \langle a, x_0 + h\rangle - \langle a, x_0\rangle = \langle a, h\rangle$$

    Но можно и воспользоваться формулой дифференциала произведения:

    $$\color{#348FEA}{\big[D_{x_0} \langle a, x\rangle\big]} (h) = $$

    $$ =\langle\color{#348FEA}{\big[D_{x_0} a\big]}(h), x\rangle + \langle a, \color{#348FEA}{\big[D_{x_0} x\big]}(h)\rangle$$

    $$= \langle 0, x\rangle + \langle a, h\rangle = \langle a, h\rangle$$

    Сразу видно, что градиент функции равен $a$.

  • Вычислим производную и градиент $f(x) = \langle Ax, x\rangle$, где $x$ — вектор-столбец, $A$ — постоянная матрица.

    Попробуйте вычислить сами, прежде чем смотреть решение.

    Снова воспользуемся формулой дифференциала произведения:

    $$\color{#348FEA}{\big[D_{x_0} \langle Ax, x\rangle\big]}(h) = $$

    $$ = \langle\color{#348FEA}{\big[D_{x_0} Ax\big]}(h), x_0\rangle + \langle Ax_0, \color{#348FEA}{\big[D_{x_0} x\big]}(h)\rangle$$

    $$= \langle Ah, x_0\rangle + \langle Ax_0, h\rangle$$

    Чтобы найти градиент, нам надо это выражение представить в виде $\langle ?, h\rangle$. Для этого поменяем местами множители первого произведения и перенесём $A$ в другую сторону ($A$ перенесётся с транспонированием):

    $$\langle A^Tx_0, h\rangle + \langle Ax_0, h\rangle = $$

    $$= \langle (A^T + A)x_0, h\rangle$$

    Получается, что градиент в точке $x_0$ равен $(A^T + A)x_0$.

  • Вычислим производную обратной матрицы: $f(X) = X^{-1}$, где $X$ — квадратная матрица.

    Попробуйте вычислить сами, прежде чем смотреть решение.

    Рассмотрим равенство $I = X\cdot X^{-1} = I$ и продифференцируем его:

    $$0 = \color{#348FEA}{\big[D_{X_0} \left( X\cdot X^{-1}\right)\big]}(H) = $$

    $$ = \color{#348FEA}{\big[D_{X_0} X\big]}(H)\cdot X_0^{-1} + X_0\cdot \color{#348FEA}{\big[D_{X_0} X^{-1}\big]}(H)$$

    Отсюда уже легко выражается

    $$\color{#348FEA}{\big[D_{X_0} X^{-1}\big]}(H) = -X_0^{-1}\cdot\color{#348FEA}{\big[D_{X_0} X\big]}(H)\cdot X_0^{-1}$$

    Осталось подставить $\color{#348FEA}{\big[D_{X_0} X\big]}(H) = H$, но запомните и предыдущую формулу, она нам пригодится.

  • Вычислим градиент определителя: $f(X) = \text{det}(X)$, где $X$ — квадратная матрица.

    Попробуйте вычислить сами, прежде чем смотреть решение.

    В предыдущих примерах мы изо всех сил старались не писать матричных элементов, но сейчас, увы, придётся. Градиент функции состоит из её частных производных: $\color{#FFC100}{\nabla_{x_0} f} = \left(\frac{\partial f}{\partial{x_{ij}}}\right)_{i,j}$. Попробуем вычислить $\frac{\partial f}{\partial{x_{ij}}}$. Для этого разложим определитель по $i$-й строке:

    $$\text{det}(X) = \sum_{k}x_{ik}\cdot(-1)^{i + k}M_{ik},$$

    где $M_{ik}$ — это определитель подматрицы, полученной из исходной выбрасыванием $i$-й строки и $k$-го столбца. Теперь мы видим, что определитель линеен по переменной $x_{ij}$, причём коэффициент при ней равен $\cdot(-1)^{i + k}M_{ik}$. Таким образом,

    $$\frac{\partial f}{\partial{x_{ij}}} = (-1)^{i + k}M_{ik}$$

    Чтобы записать матрицу, составленную из таких определителей, покороче, вспомним, что

    $$X^{-1} = \frac1{\text{det}(X)}\left((-1)^{i+j}M_{\color{red}{ji}}\right)_{i,j}$$

    Обратите внимание на переставленные индексы $i$ и $j$ (отмечены красным). Но всё равно похоже! Получается, что

    $$\color{#FFC100}{\nabla_{x_0} f} = \text{det}(X)\cdot X^{-T},$$

    где $X^{-T}$ — это более короткая запись для $(X^{-1})^T$.

  • Вычислим градиент функции $f(x) = \vert\vert Ax - b\vert\vert^2$. С этой функцией мы ещё встретимся, когда будем обсуждать задачу линейной регрессии.

    Попробуйте вычислить сами, прежде чем смотреть решение.

    Распишем квадрат модуля в виде скалярного произведения:

    $$\vert\vert Ax - b\vert\vert^2 = \langle Ax - b, Ax - b\rangle$$

    Применим формулу дифференциала произведения и воспользуемся симметричностью скалярного произведения:

    $$\color{#348FEA}{\big[D_{x_0} \langle Ax - b, Ax - b\rangle\big]}(h) = $$

    $$ \langle \color{#348FEA}{\big[D_{x_0} (Ax - b)\big]}(h), Ax_0 - b\rangle + \langle Ax_0 - b, \color{#348FEA}{\big[D_{x_0} (Ax - b)\big]}(h)\rangle$$

    $$ = 2\langle Ax_0 - b, \color{#348FEA}{\big[D_{x_0} (Ax - b)\big]}(h)\rangle =$$

    $$ = 2\langle Ax_0 - b, Ah\rangle = \langle 2A^T(Ax_0 - b), h\rangle$$

    Получаем, что

    $$\color{#FFC100}{\nabla_{x_0} f} = 2A^T(Ax_0 - b)$$

Примеры вычисления производных сложных функций

  • Вычислим градиент функции $f(X) = \text{log}(\text{det}(X))$.

    Попробуйте вычислить сами, прежде чем смотреть решение.

    Вспомним формулу производной сложной функции:

    $$\left[D_{X_0} u \circ v \right](H) = \left[D_{v(X_0)} u \right] \left( \left[D_{X_0} v\right] (H)\right)$$

    и посмотрим, как её тут можно применить. В роли функции $u$ у нас логарифм:

    $$u(y) = \text{log}(u),\quad \left[D_{y_0} u\right](s) = \frac1y_0\cdot s,$$

    а в роли $v$ — определитель:

    $$v(X) = \text{det}(X),\quad \left[D_{y_0} v\right](H) = \langle \text{det}(X_0)\cdot X_0^{-T}, H\rangle,$$

    где под скалярным произведением двух матриц понимается, как обычно,

    $$\langle A, B\rangle = \sum_{i,j}a_{ij}b_{ij} = \text{tr}(A^TB)$$

    Подставим это всё в формулу произведения сложной функции:

    $$\left[D_{X_0} u \circ v \right](H) = \frac1{\text{det}(X)}\cdot\langle \text{det}(X)\cdot X^{-T}, H\rangle =$$

    $$= \langle \frac1{\text{det}(X)}\cdot\text{det}(X)\cdot X^{-T}, H\rangle = \langle X_0^{-T}, H\rangle$$

    Отсюда сразу видим, что

    $$\color{#FFC100}{\nabla_{X_0} f} = X_0^{-T}$$

  • Вычислим градиент функции $f(X) = \text{tr}(AX^TX)$.

    Попробуйте вычислить сами, прежде чем смотреть решение.

    Воспользуемся тем, что след — это линейное отображение (и значит, перестановочно с дифференцированием), а также правилом дифференцирования сложной функции:

    $$\left[D_{X_0} f \right](H) = \text{tr}\left(\left[D_{X_0} AX^TX \right](H)\right) =$$

    $$=\text{tr}\left(A\cdot\left[D_{X_0} X^T \right](H)\cdot X_0 + AX_0^T\left[D_{X_0} X \right](H)\right) =$$

    $$=\text{tr}\left(AH^TX_0 + AX_0^TH\right)$$

    Чтобы найти градиент, мы должны представить это выражение в виде $\langle ?, H\rangle$, что в случае матриц переписывается, как мы уже хорошо знаем, в виде $\text{tr}(?^T\cdot H) = \text{tr}(?\cdot H^T)$. Воспользуемся тем, что под знаком следа можно транспонировать и переставлять множители по циклу:

    $$\ldots=\text{tr}\left(AH^TX_0\right) + \text{tr}\left(AX_0^TH\right) =$$

    $$=\text{tr}\left(X_0AH^T\right) + \text{tr}\left(H^TX_0A^T\right) =$$

    $$=\text{tr}\left(X_0AH^T\right) + \text{tr}\left(X_0A^TH^T\right) =$$

    $$=\text{tr}\left((X_0A + X_0A^T)H^T\right)$$

    Стало быть,

    $$\color{#FFC100}{\nabla_{X_0} f} = X_0A + X_0A^T$$

  • Вычислим градиент функции $f(X) = \text{det}\left(AX^{-1}B\right)$.

    Подумайте, почему мы не можем расписать определитель в виде произведения определителей

    Расписать у нас может не получиться из-за того, что $A$ и $B$ могут быть не квадратными, и тогда у них нет определителей и представить исходный определитель в виде произведения невозможно.

    Воспользуемся правилом дифференцирования сложной функции для $u(Y) = \text{det}(Y)$, $v(X) = AX^{-1}B$. А для этого сначала вспомним, какие дифференциалы у них самих. С функцией $u$ всё просто:

    $$\left[D_{Y_0} u\right](S) = \langle \text{det}(Y_0)Y_0^{-T}, S\rangle =$$

    $$= \text{tr}\left(\text{det}(Y_0)Y_0^{-1}S\right)$$

    Функция $v$ сама является сложной, но, к счастью, множители $A$ и $B$ выносятся из-под знака дифференциала, а дифференцировать обратную матрицу мы уже умеем:

    $$\left[D_{X_0} v\right](H) = - AX_0^{-1}HX_0^{-1} B$$

    С учётом этого получаем:

    $$\left[D_{X_0} f \right](H) = \left[D_{v(X_0)} u \right] \left( \left[D_{X_0} v\right] (H)\right) =$$

    $$=\text{tr}\left(\text{det}(AX_0^{-1}B)(AX_0^{-1}B)^{-1}\left(- AX_0^{-1}HX_0^{-1} B\right)\right)$$

    $$=\text{tr}\left(-\text{det}(AX_0^{-1}B)(AX_0^{-1}B)^{-1}AX_0^{-1}HX_0^{-1} B\right)$$
    

    Чтобы найти градиент, мы должны, как обычно, представить это выражение в виде $\text{tr}(?^T\cdot H)$.

    $$\ldots=\text{tr}\left(-\text{det}(AX_0^{-1}B)X_0^{-1} B(AX_0^{-1}B)^{-1}AX_0^{-1}H\right)$$

    Стало быть,

    $${\nabla_{X_0} f} = \left(-\text{det}(AX_0^{-1}B)X_0^{-1} B(AX_0^{-1}B)^{-1}AX_0^{-1}\right)^T =$$

    $$=-\text{det}(AX_0^{-1}B)X_0^{-T} A^T(AX_0^{-1}B)^{-T}B^TX_0^{-T}$$

Вторая производная

Рассмотрим теперь не первые два, а первые три члена ряда Тейлора:

$$f(x_0 + h) = f(x_0) + \color{#348FEA}{\left[D_{x_0} f \right]} (h) + \frac12\color{#4CB9C0}{\left[D_{x_0}^2 f \right]} (h, h) + \bar{\bar{o}} \left(\left|\left| h\right|\right|^2\right),$$

где $\color{#4CB9C0}{\left[D_{x_0}^2 f \right]} (h, h)$ — второй дифференциал, квадратичная форма, в которую мы объединили все члены второй степени.

Вопрос на подумать. Докажите, что второй дифференциал является дифференциалом первого, то есть

$$\left[D_{x_0} \color{#348FEA}{\left[D_{x_0} f \right]} (h_1) \right] (h_2) = \left[D_{x_0}^2 f \right] (h_1, h_2)$$

Зависит ли выражение справа от порядка $h_1$ и $h_2$?

Этот факт позволяет вычислять второй дифференциал не с помощью приращений, а повторным дифференцированием производной.

Вторая производная может оказаться полезной при реализации методов второго порядка или же для проверки того, является ли критическая точка (то есть точка, в которой градиент обращается в ноль) точкой минимума или точкой максимума. Напомним, что квадратичная форма $q(h)$ называется положительно определённой (соответственно, отрицательно определённой), если $q(h) \geqslant 0$ (соответственно, $q(h) \leqslant 0$) для всех $h$, причём $q(h) = 0$ только при $h = 0$.

Теорема. Пусть функция $f:\mathbb{R}^m\rightarrow\mathbb{R}$ имеет непрерывные частные производные второго порядка $\frac{\partial^2 f}{\partial x_i\partial x_j}$ в окрестности точки $x_0$, причём $\color{#FFC100}{\nabla_{x_0} f} = 0$. Тогда точка $x_0$ является точкой минимума функции, если квадратичная форма $\color{#348FEA}{D_{x_0}^2 f} $ положительно определена, и точкой максимума, если она отрицательно определена.

Если мы смогли записать матрицу квадратичной формы второго дифференциала, то мы можем проверить её на положительную или отрицательную определённость с помощью критерия Сильвестра.

Примеры вычисления и использования второй производной

  • Рассмотрим задачу минимизации $f(x) = \vert\vert Ax - b\vert\vert^2$ по переменной $x$, где $A$ — матрица с линейно независимыми столбцами. Выше мы уже нашли градиент этой функции; он был равен $\color{#FFC100}{\nabla_{x_0} f} = 2A^T(Ax - b)$. Мы можем заподозрить, что минимум достигается в точке, где градиент обращается в ноль: $x_* = (A^TA)^{-1}A^Tb$. Отметим, что обратная матрица существует, так как $\text{rk}(A^TA) = \text{rk}{A}$, а столбцы $A$ по условию линейно независимы и, следовательно, $\text{rk}(A^TA)$ равен размеру этой матрицы. Но действительно ли эта точка является точкой минимума? Давайте оставим в стороне другие соображения (например, геометрические, о которых мы упомянем в параграфе про линейные модели) и проверим аналитически. Для этого мы должны вычислить второй дифференциал функции $f(x) = \vert\vert Ax - b\vert\vert^2$.

    Попробуйте вычислить сами, прежде чем смотреть решение.

    Вспомним, что

    $$\color{#348FEA}{\big[D_{x_0} \vert\vert Ax - b\vert\vert^2\big]}(h_1) = \langle 2A^T(Ax_0 - b), h_1\rangle$$

    Продифференцируем снова. Скалярное произведение — это линейная функция, поэтому можно занести дифференцирование внутрь:

    $$\color{#348FEA}{\big[D_{x_0} \langle 2A^T(Ax - b), h_1\rangle\big]}(h_2) = \langle \color{#348FEA}{\big[D_{x_0} (2A^TAx - 2A^Tb)\big]}(h_2), h_1\rangle =$$

    $$=\langle 2A^TAh_2, h_1\rangle = 2h_2^T A^TA h_1$$

    Мы нашли квадратичную форму второго дифференциала; она, оказывается, не зависит от точки (впрочем, логично: исходная функция была второй степени по $x$, так что вторая производная должна быть константой). Чтобы показать, что $x_*$ действительно является точкой минимума, достаточно проверить, что эта квадратичная форма положительно определена.

    Попробуйте сделать это сами, прежде чем смотреть решение.

    Хорошо знакомый с линейной алгеброй читатель сразу скажет, что матрица $A^TA$ положительно определена для матрицы $A$ с линейно независимыми столбцами. Но всё же давайте докажем это явно. Имеем $h^TA^TAh = (Ah)^TAh = \vert\vert Ah\vert\vert^2 \geqslant 0$. Это выражение равно нулю тогда и только тогда, когда $Ah = 0$. Последнее является однородной системой уравнений на $h$, ранг которой равен числу переменных, так что она имеет лишь нулевое решение $h = 0$.

  • Докажем, что функция $f(X) = \log{\text{det}(X)}$ является выпуклой вверх на множестве симметричных, положительно определённых матриц. Для этого мы должны проверить, что в любой точке квадратичная форма её дифференциала отрицательно определена. Для начала вычислим эту квадратичную форму.

    Попробуйте сделать это сами, прежде чем смотреть решение.

    Выше мы уже нашли дифференциал этой функции:

    $$\color{#348FEA}{\big[D_{X_0} \log{\text{det}(X)}\big]}(H_1) = \langle X_0^{-T}, H_1\rangle$$

    Продифференцируем снова:

    $$\color{#348FEA}{\big[D_{X_0} \langle X^{-T}, H_1\rangle\big]}(H_2) = \langle \color{#348FEA}{\big[D_{x_0} X^{-T}\big]}(H_2), h_1\rangle =$$

    $$=\langle -X_0^{-1}H_2X_0^{-1}, H_1\rangle$$

    Чтобы доказать требуемое в условии, мы должны проверить следующее: что для любой симметричной матрицы $X_0$ и для любого симметричного (чтобы не выйти из пространства симметричных матриц) приращения $H\ne 0$ имеем

    $$\color{#348FEA}{\big[D^2_{X_0} \log{\text{det}(X)}\big]}(H, H) < 0$$

    Покажем это явно. Так как $X_0$ — симметричная, положительно определённая матрица, у неё есть симметричный и положительно определённый квадратный корень: $X_0 = X_0^{1/2}\cdot X_0^{1/2} = X_0^{1/2}\cdot \left(X_0^{1/2}\right)^T.$ Тогда

    $$\langle -X_0^{-1}HX_0^{-1}, H\rangle = -\text{tr}\left(X_0^{1/2} \left(X_0^{1/2}\right)^THX_0^{1/2} \left(X_0^{1/2}\right)^TH^T\right) =$$

    $$-\text{tr}\left(\left(X_0^{1/2}\right)^THX_0^{1/2} \left(X_0^{1/2}\right)^TH^TX_0^{1/2}\right) = $$

    $$=-\text{tr}\left( \left(X_0^{1/2}\right)^THX_0^{1/2} \left[\left(X_0^{1/2}\right)^THX_0^{1/2}\right]^T\right) =$$

    $$=-\vert\vert\left(X_0^{1/2}\right)^THX_0^{1/2}\vert\vert^2,$$

    что, конечно, меньше нуля для любой ненулевой $H$.

Сообщить об ошибке

Перейти к параграфам

Методы второго порядка

Автор(ы):

  • Тяпкин Даниил

От метода Ньютона до LBFGS

Сходимость SGD

Автор(ы):

  • Горбунов Эдуард

Почему он всё-таки сходится

  • Об учебнике
  • Команда
  • Подписаться
  • Поддержка
© Школа анализа данных, 2007 — 2023