Как найти градиент матрицы

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

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

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

Вспомним определение производной для функции $f:mathbb{R}^mrightarrowmathbb{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| hright|right|right),$$

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

$$f(x_0 + h) – f(x_0)approxcolor{#348FEA}{left[D_{x_0} f right]} (h)$$

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

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

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

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

    $$f(x_0 + h) – f (x_0) approx f'(x_0) (h)$$

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

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

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

    $$f(x_0 + h) – f(x_0) approx sumlimits_i left.frac{partial f}{partial x_i} right|_{x=x_0} h_i,$$

    то есть

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

    где $langlebullet, bulletrangle$ — операция скалярного произведения, а $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 sumlimits_{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 Hright).
    $$

    Можно заметить, что здесь, по аналогии с примерами, где $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) = langlecolor{#FFC100}{nabla_{x_0} f}, x-x_0rangle,
$$

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

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

Примеры конкретных форм $big[D_{x_0} fbig] (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} fbig]} (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} fbig]} (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} fbig]} (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} fbig]}(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} fbig]}$ — это нулевое отображение. А если $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} fbig]}$. Мы уже видели примеры таких ситуаций выше, когда рассматривали отображения умножения на матрицу слева или справа. Если $f$ — (скалярная) линейная функция, то она представляется в виде $langle a, vrangle$ для некоторого вектора $a$ — он и будет градиентом $f$.

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

    $$color{#348FEA}{big[D_{x_0} fbig]} = lambda color{#348FEA}{big[D_{x_0} ubig]} + mu color{#348FEA}{big[D_{x_0} vbig]}$$

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

    $$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} ubig]}(h) + mu color{#348FEA}{big[D_{x_0} vbig]}(h)$$

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

    $$color{#348FEA}{big[D_{x_0} fbig]} = color{#348FEA}{big[D_{x_0} ubig]} cdot v(x_0) + u(x_0) cdot color{#348FEA}{big[D_{x_0} vbig]}$$

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

    Обозначим для краткости $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} ubig]}(h) cdot v(x) + u(x_0)cdot color{#348FEA}{big[D_{x_0} vbig]}(h)$$

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

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

    $$color{#348FEA}{big[D_{x_0} ubig]}(h) cdot left(v(x_0) + color{#348FEA}{big[D_{x_0} vbig]}(h) + o(vertvert hvertvert)right) =$$

    $$color{#348FEA}{big[D_{x_0} ubig]}(h) cdot v(x_0) + bar{bar{o}}left(vertvert hvertvertright)$$

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

    $$color{#348FEA}{big[D_{x_0} langle u, vranglebig]} = langlecolor{#348FEA}{big[D_{x_0} ubig]}, vrangle + langle u, color{#348FEA}{big[D_{x_0} vbig]}rangle$$

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

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

    $$f(x_0 + h) – f(x_0) = u(v(x_0 + h)) – u(v(x_0)) approx $$

    $$approxleft[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} vright] (h)right)$$

    Здесь $D_{v(x_0)} u$ — дифференциал $u$ в точке $v(x_0)$, а $left[D_{v(x_0)} u right]left(ldotsright)$ — это применение отображения $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} vright]} (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} vright]} (h)right)$$

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

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

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

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

    $$f(x_0 + h) – f(x_0) = langle a, x_0 + hrangle – langle a, x_0rangle = langle a, hrangle$$

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

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

    $$ =langlecolor{#348FEA}{big[D_{x_0} abig]}(h), xrangle + langle a, color{#348FEA}{big[D_{x_0} xbig]}(h)rangle$$

    $$= langle 0, xrangle + langle a, hrangle = langle a, hrangle$$

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

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

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

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

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

    $$ = langlecolor{#348FEA}{big[D_{x_0} Axbig]}(h), x_0rangle + langle Ax_0, color{#348FEA}{big[D_{x_0} xbig]}(h)rangle$$

    $$= langle Ah, x_0rangle + langle Ax_0, hrangle$$

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

    $$langle A^Tx_0, hrangle + langle Ax_0, hrangle = $$

    $$= langle (A^T + A)x_0, hrangle$$

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

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

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

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

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

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

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

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

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

  4. Вычислим градиент определителя: $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$.

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

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

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

    $$vertvert Ax – bvertvert^2 = langle Ax – b, Ax – brangle$$

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

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

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

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

    $$ = 2langle Ax_0 – b, Ahrangle = langle 2A^T(Ax_0 – b), hrangle$$

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

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

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

  1. Вычислим градиент функции $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} vright] (H)right)$$

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

    $$u(y) = text{log}(u),quad left[D_{y_0} uright](s) = frac1y_0cdot s,$$

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

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

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

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

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

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

    $$= langle frac1{text{det}(X)}cdottext{det}(X)cdot X^{-T}, Hrangle =
    langle X_0^{-T}, Hrangle$$

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

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

  2. Вычислим градиент функции $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(Acdotleft[D_{X_0} X^T right](H)cdot X_0 + AX_0^Tleft[D_{X_0} X right](H)right) =$$

    $$=text{tr}left(AH^TX_0 + AX_0^THright)$$

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

    $$ldots=text{tr}left(AH^TX_0right) + text{tr}left(AX_0^THright) =$$

    $$=text{tr}left(X_0AH^Tright) + text{tr}left(H^TX_0A^Tright) =$$

    $$=text{tr}left(X_0AH^Tright) + text{tr}left(X_0A^TH^Tright) =$$

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

    Стало быть,

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

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

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

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

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

    $$left[D_{Y_0} uright](S) = langle text{det}(Y_0)Y_0^{-T}, Srangle =$$

    $$= text{tr}left(text{det}(Y_0)Y_0^{-1}Sright)$$

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

    $$left[D_{X_0} vright](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} vright] (H)right) =$$

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

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

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

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

    Стало быть,

    $${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) + frac12color{#4CB9C0}{left[D_{x_0}^2 f right]} (h, h) + bar{bar{o}} left(left|left| hright|right|^2right),$$

где $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}^mrightarrowmathbb{R}$ имеет непрерывные частные производные второго порядка $frac{partial^2 f}{partial x_ipartial x_j}$ в окрестности точки $x_0$, причём $color{#FFC100}{nabla_{x_0} f} = 0$. Тогда точка $x_0$ является точкой минимума функции, если квадратичная форма $color{#348FEA}{D_{x_0}^2 f} $ положительно определена, и точкой максимума, если она отрицательно определена.

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

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

  1. Рассмотрим задачу минимизации $f(x) = vertvert Ax – bvertvert^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) = vertvert Ax – bvertvert^2$.

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

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

    $$color{#348FEA}{big[D_{x_0} vertvert Ax – bvertvert^2big]}(h_1) = langle 2A^T(Ax_0 – b), h_1rangle$$

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

    $$color{#348FEA}{big[D_{x_0} langle 2A^T(Ax – b), h_1ranglebig]}(h_2) =
    langle color{#348FEA}{big[D_{x_0} (2A^TAx – 2A^Tb)big]}(h_2), h_1rangle =$$

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

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

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

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

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

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

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

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

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

    $$color{#348FEA}{big[D_{X_0} langle X^{-T}, H_1ranglebig]}(H_2) =
    langle color{#348FEA}{big[D_{x_0} X^{-T}big]}(H_2), h_1rangle =$$

    $$=langle -X_0^{-1}H_2X_0^{-1}, H_1rangle$$

    Чтобы доказать требуемое в условии, мы должны проверить следующее: что для любой симметричной матрицы $X_0$ и для любого симметричного (чтобы не выйти из пространства симметричных матриц) приращения $Hne 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}, Hrangle = -text{tr}left(X_0^{1/2} left(X_0^{1/2}right)^THX_0^{1/2} left(X_0^{1/2}right)^TH^Tright) =$$

    $$-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]^Tright) =$$

    $$=-vertvertleft(X_0^{1/2}right)^THX_0^{1/2}vertvert^2,$$

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

Нахождение градиента вектор-функции


  Перевод


  Ссылка на автора

Название изображения: Источник

В Часть 1 Нам поставили задачу: вычислить градиент этой функции потерь:

Изображение 1: функция потери

Чтобы найти градиент, мы должны найти производную функцию. В Часть 2 мы научились вычислять частную производную функции по каждой переменной. Однако большинство переменных в этой функции потерь являются векторами. Возможность найти частную производную векторных переменных особенно важна, поскольку нейронная сеть работает с большими объемами данных. Векторные и матричные операции – это простой способ представления операций с таким большим количеством данных. Как именно вы можете найти градиент вектор-функции?


Градиент скалярной функции

Скажи, что у нас есть функция,f (x, y) = 3x²y, Наши частные производные:

Изображение 2: Частичные производные

Если мы организуем эти части в горизонтальный вектор, мы получимградиентизР (х, у), или∇ f (x, y):

Изображение 3: Градиент f (x, y)

6yxэто изменение вР (х, у)в отношении изменения вИкс, в то время как3x²это изменение вР (х, у)в отношении изменения вY,

Что происходит, когда у нас есть две функции? Давайте добавим еще одну функцию,g (x, y) = 2x + y⁸, Частные производные:

Изображение 4: Частицы для g (x, y)

Таким образом, градиент g (x, y):

Изображение 5: градиент g (x, y)

Представляющие функции

Когда у нас есть несколько функций с несколькими параметрами, часто полезно представлять их более простым способом. Мы можем объединить несколько параметров функций в один векторный аргумент,Иксэто выглядит следующим образом:

Изображение 6: ВекторИкс

Следовательно,Р (х, у, г)станетF (x₁, x₂, x₃)который становитсяе (Икс).

Мы также можем объединить несколько функций в вектор, например так:

Изображение 7: ВекторY

В настоящее время,у = F (X)гдеF (X)является вектором из [f₁ (Икс), f₂ (Икс), f₃ (Икс) … п (Икс)]

Для нашего предыдущего примера с двумя функциями,f (x, y) ⇒ f (Икс)а такжеg (x, y) ⇒ g (Икс).Здесь векторИкс= [x₁, x₂], гдеx₁ = х, а такжеx₂ = у, Чтобы упростить его еще больше, мы можем объединить наши функции: [f (Икс),г(Икс)] = [f₁ (Икс), f₂ (Иксзнак равноf (x) = y.

Изображение 8: Уравнения в векторной функцииY

Зачастую количество функций и количество переменных будет одинаковым, поэтому для каждой переменной существует решение.


Градиент вектор-функции

Теперь, когда у нас есть две функции, как мы можем найти градиент обеих функций? Если мы организуем оба их градиента в одну матрицу, мы переместимся из векторного исчисления в матричное исчисление. Эта матрица и организация градиентов нескольких функций с несколькими переменными, известна какМатрица Якобиана,

Изображение 9: Якобиан

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

Изображение 10: Расположение знаменателя якобиана

Градиент функции идентичности

Давайте возьмем функцию идентичности,у = ф (х) = х, гдеFi (Икс) = xiи найдите его градиент:

Изображение 11: функция идентификации

Так же, как мы создали наш предыдущий якобиан, мы можем найти градиенты каждой скалярной функции и сложить их вертикально, чтобы создать якобиан тождественной функции:

Изображение 12: Якобиан тождественной функции

Поскольку это функция идентичности, f₁ (Икс) = x₁, f₂ (Икс) = х₂ и тд. Следовательно,

Изображение 13: Якобиан тождественной функции

Частичная производная функции по переменной, которой нет в функции, равна нулю. Например, частная производная 2x² по y равна 0. Другими словами,

Изображение 14: частная производная функции по переменной, которой нет в функции, равна нулю

Поэтому все, что не на диагонали якобиана, становится равным нулю. Между тем, частная производная любой переменной по отношению к себе равна 1. Например, частная производнаяИксв отношенииИксравен 1. Следовательно, якобиан становится:

Изображение 15: Якобиан тождественной функции

Градиент комбинаций вектор-векторных функций

Элементарные бинарные операторыявляются операциями (такими как сложениевес+Иксиливес>Икскоторый возвращает вектор единиц и нулей), который применяет оператор последовательно, начиная с первого элемента обоих векторов, чтобы получить первый элемент вывода, затем второго элемента обоих векторов, чтобы получить второй элемент вывода… и так далее.

Эта статья представляет поэлементные бинарные операции с такими обозначениями:

Изображение 16: Поэлементная двоичная операция с f (x) и g (x)

Здесь ◯ означает любой поэлементный оператор (например, +), а не композицию функций.

Итак, как вы находите градиент поэлементной операции двух векторов?

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

Изображение 17: Якобиан по отношению квеса такжеИкс

Большинство арифметических операций нам понадобятся простые, поэтомуе (ш)часто просто векторвес, Другими словами,Fi (Wi) = Wi, Например, операцияW + хподходит к этой категории, так как она может быть представлена ​​каке (ж) + д (х)гдеfi (wi) + gi (xi) = wi + xi.

При этом условии каждый элемент в двух якобианах упрощается до:

Изображение 18: Элементы в якобиане

На диагонали i = j, поэтому существует значение для частной производной. Вне диагонали, однако, i ≠ j, поэтому частные производные становятся равными нулю:

Изображение 19: Диагональный якобиан

Мы можем представить это более кратко как:

Изображение 20: Якобиан по отношению квеса такжеИкс

Попробуем найти градиент функцииW + х, Мы знаем, что все вне диагонали равно 0. Значения частичных по диагонали относительновеса такжеИксявляются:

Изображение 21: Частичное в отношениивеса такжеИкс

Итак, оба якобиана имеют диагональ 1. Это выглядит знакомо … это матрица тождеств!

Давайте попробуем это с умножением:ш * х, Значения частностей по диагонали относительновеса такжеИксявляются:

Изображение 22: Частичное в отношениивеса такжеИкс

Следовательно, градиент по отношению квесизш * хявляетсяDiag (Икс)в то время как градиент по отношению кИксизш * хявляетсяDiag (вес).

Применяя те же шаги для вычитания и деления, мы можем суммировать все это:

Изображение 23: Градиенты общих элементарных бинарных операций

Градиент векторных сумм

Одной из наиболее распространенных операций в глубоком обучении является операция суммирования. Как мы можем найти градиент функцииу = сумма (Икс)?

у = сумма (Икс)также может быть представлен как:

Изображение 24: у = сумма (Икс)

Следовательно, градиент может быть представлен как:

Изображение 25: Градиент у = сумма (Икс)

А так как частная производная функции по переменной, которой нет в функции, равна нулю, ее можно дополнительно упростить следующим образом:

Изображение 26: Градиент у = сумма (Икс)

Обратите внимание, что результатом является горизонтальный вектор.

Как насчет градиентау = сумма (Иксг)? Единственное отличие состоит в том, что мы умножаем каждый частный с константой, z:

Изображение 27: Градиент у = сумма (Икся) в отношенииИкс

Хотя это является производной по отношению кИкс, производная по скаляруZэто просто число:

Изображение 28: Градиент у = сумма (Иксz) относительно z

Градиент комбинаций векторных функций правила цепочки

В Часть 2 мы узнали о правилах цепей с несколькими переменными. Однако это работает только для скаляров. Давайте посмотрим, как мы можем интегрировать это в векторные вычисления!

Давайте возьмем векторную функцию,Yзнак равное(Икс)и найти градиент. Давайте определим функцию как:

Изображение 29:Yзнак равное(Икс)

И то и другоеf₁ (х)а такжеf₂ (х)являются составными функциями. Введем промежуточные переменные дляf₁ (х)а такжеf₂ (х)и переписать нашу функцию:

Изображение 30:Yзнак равное(г(Икс))

Теперь мы можем использовать наше правило цепочки переменных, чтобы вычислить производную вектораY, Просто вычислите производнуюf₁ (х)а такжеf₂ (х)и поместите их один над другим:

Изображение 31: ГрадиентYзнак равное(г(Икс))

Вуаля! У нас есть наш градиент. Однако мы пришли к нашему решению со скалярными правилами, просто сгруппировав числа в вектор. Есть ли способ представить правило цепи с несколькими переменными для векторов?

Прямо сейчас наш градиент вычисляется с помощью:

Изображение 32: ГрадиентYзнак равное(г(Икс))

Обратите внимание, что первый член градиентов обоихf₁ (х)а такжеf₂ (х)включает частичноеg₁надИкси второй член градиентов обоихf₁ (х)а такжеf₂ (х)включает частичноеg₂надИкс Это как умножение матриц! Поэтому мы можем представить это как:

Изображение 33: Векторное представление градиентаYзнак равное(г(Икс))

Давайте проверим наше новое представление правила цепочки векторов:

Изображение 34: Правило векторной цепи

Мы получаем тот же ответ, что и скалярный подход! Если вместо одного параметраИксу нас есть векторный параметрИкснам просто нужно немного изменить наше правило, чтобы получить полное правило цепочки векторов:

Изображение 35: Правило векторной цепи

Другими словами:

Изображение 36: Правило векторной цепи

В нашем примере выше,еэто чисто функцияг; то есть,фиявляется функциейсолдатно нетGJ(каждая функцияесоответствует ровно 1 функцииг),В этом случае все вне диагонали становится равным нулю, и:

Изображение 37: Особый случай векторного правила цепочки

Теперь у нас есть все части, которые мы находим в градиенте нейронной сети, с которой мы начали нашу серию:

Изображение 38: Функция стоимости

Проверять, выписываться Часть 4 чтобы узнать, как вычислить его производную!


Если вы еще этого не сделали, прочитайте части 1 и 2:

  • Часть 1: Введение
  • Часть 2: Частичные производные

Читать Часть 4 для грандиозного финала!

Скачать оригинал статьи Вот,

Если вам понравилась эта статья, не забудьте оставить несколько хлопков! Оставьте комментарий ниже, если у вас есть какие-либо вопросы или предложения 🙂

Maybe it helps when you consider derivatives as linear operators. This means if you have
$$
Fcolon mathbb R^n to mathbb R^n
$$
you consider
$$
DFcolon mathbb R^n to L(mathbb R^n,mathbb R^n),
$$
where $L(A,B)$ is the set of all linear maps from $A$ to $B$. Usually, $L(mathbb R^n,mathbb R^n)$ is identified with the set of matrices $mathbb R^{ntimes n}$.

Now consider $D^2F = D(DF)$ as
$$
D^2F = D(DF)colon mathbb R^n to Lbigl(mathbb R^n,L(mathbb R^n,mathbb R^n)bigr)
$$
where $Lbigl(mathbb R^n,L(mathbb R^n,mathbb R^n)bigr)$ is the set of linear maps from $mathbb R^n$ into the set of linear mappings from $mathbb R^n$ into $mathbb R^n$. You could identify this as $mathbb R^{ntimes ntimes n}$.
This means $D^2F$ can be considered some kind of tensor.

The easiest way to tackle your question would be to calculate the components $(D^2F)_{ijk}$ of $D^2F$. Since you already have $DF$ in its matrix form you can differentiate it wrt. to $x_k$. You have $|x|^2 = x^Tx$

begin{align*}
frac{partial}{partial x_k} x^Tx &= 2x_k \
frac{partial}{partial x_k} frac{I}{x^Tx} &= frac{-2Ix_k}{(x^Tx)^2}
= frac{-2Ix_k}{|x|^4}\
frac{partial}{partial x_k} (x^Tx)^2 &= 4x_k (x^Tx) = 4x_k |x|^2 \
frac{partial}{partial x_k} xx^T &= e_kx^T + x e_k^T \
frac{partial}{partial x_k} frac{2xx^T}{(x^Tx)^2}
&= 2frac{(e_kx^T + x e_k^T)(x^Tx)^2 – xx^T 4x_k|x|^2}{(x^Tx)^4} \
end{align*}
If you put it together you get
$$
frac{partial}{partial x_k} DF(x)
= frac{-2Ix_k}{|x|^4} – 2frac{(e_kx^T + x e_k^T)|x|^2 – 4x_kxx^T }{|x|^6}
$$

You now have the matrix $(D^2F)_{bullet,bullet,k} = frac{partial}{partial x_k} DF(x)$. You could write $D^2F = left(frac{partial}{partial x_k} DF(x)right)_{k=1}^n$.

Hope this gives some insight.
(Please point out any calculation errors, if present)

Методы Оптимизации. Даниил Меркулов. Векторное дифференцирование.

Базовые понятия

Градиент

Пусть есть функция $f(x): mathbb{R}^n to mathbb{R}$, тогда вектор, составленный из частных производных следующим образом:
$$
nabla f(x) = dfrac{df}{dx} = begin{pmatrix}
frac{partial f}{partial x_1}
frac{partial f}{partial x_2}
vdots
frac{partial f}{partial x_n}
end{pmatrix}
$$

называется градиентом функции $f(x)$. Этот вектор указывает направление наискорейшего возрастания в точке. Стало быть, вектор $- nabla f(x)$ совпадает с направлением наискорейшего спуска для заданной функции в точке. Кроме того, вектор градиента в конкретной точке всегда перпендикулярен линии уровня функции, содержащей эту точку.

wikipedia's image

Соответственно,
$$
nabla f(x)^T = dfrac{df}{dx^T} = left(frac{partial f}{partial x_1}, frac{partial f}{partial x_2}, ldots, frac{partial f}{partial x_n} right)
$$

Гессиан

Пусть есть функция $f(x): mathbb{R}^n to mathbb{R}$, тогда матрица, составленная из смешанных производных второго порядка следующим образом:
$$
f”(x) = dfrac{d(nabla f)}{dx^T} = dfrac{dleft(nabla f^Tright)}{dx} = begin{pmatrix}
frac{partial^2 f}{partial x_1 partial x_1} & frac{partial^2 f}{partial x_1 partial x_2} & dots & frac{partial^2 f}{partial x_1 partial x_n}
frac{partial^2 f}{partial x_2 partial x_1} & frac{partial^2 f}{partial x_2 partial x_2} & dots & frac{partial^2 f}{partial x_2 partial x_n}
vdots & vdots & ddots & vdots
frac{partial^2 f}{partial x_n partial x_1} & frac{partial^2 f}{partial x_n partial x_2} & dots & frac{partial^2 f}{partial x_n partial x_n}
end{pmatrix}
$$
называется матрицей Гессе фугкции $f(x)$ и содержит в себе информацию о кривизне функции многих переменных в точке. Определитель этой матрицы называют гессианом функции $f(x)$ в точке. Эта матрица симметрична в том случае, когда порядок смешанного дифференциирования не важен, т.е. в случае, когда смешанные производные непрерывны.

Широко прянято называть гессианом не определитель матрицы Гессе, а саму матрицу, мы будем делать так же:) Положительная (отрицательная) определенность гессиана в точке является достаточным условием локального минимума (максимума) функции в точке.

Обобщением понятия гессиана на случай векторнозначной функции $left(f(x): mathbb{R}^n to mathbb{R}^m right)​$ является трехмерный тензор, состоящий из гессианов по каждой компоненте вектор – функции:
$$
left( Hleft(f_1(x)right), Hleft(f_2(x)right), ldots, Hleft(f_m(x)right)right)
$$

Якобиан

Для функции $f(x): mathbb{R}^n to mathbb{R}^m$ вводится понятие матрицы Якоби:
$$
f'(x) = dfrac{df}{dx^T} = begin{pmatrix}
frac{partial f_1}{partial x_1} & frac{partial f_1}{partial x_2} & dots & frac{partial f_1}{partial x_n}
frac{partial f_2}{partial x_1} & frac{partial f_2}{partial x_2} & dots & frac{partial f_2}{partial x_n}
vdots & vdots & ddots & vdots
frac{partial f_m}{partial x_1} & frac{partial f_m}{partial x_2} & dots & frac{partial f_m}{partial x_n}
end{pmatrix}
$$
Если матрица квадратная, то её определитель называют якобианом функции $f(x)$. Часто саму матрицу так же называют якобианом. Если для некоторой функции в точке определитель матрицы Якоби отличен от нуля, то тогда и только тогда в окрестности этой точки существует обратная функция.

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

Сводная таблица

$$
f(x) : X to Y; ;;;;;;;; frac{partial f(x)}{partial x} in G
$$

X Y G Обозначение
$mathbb{R}$ $mathbb{R}$ $mathbb{R}$ $f'(x)$ (производная)
$mathbb{R}^n$ $mathbb{R}$ $mathbb{R^n}$ $dfrac{partial f}{partial x_i}$ (градиент)
$mathbb{R}^n$ $mathbb{R}^m$ $mathbb{R}^{n times m}$ $dfrac{partial f_i}{partial x_j}$ (якобиан)
$mathbb{R}^{m times n}$ $mathbb{R}$ $mathbb{R}^{m times n}$ $dfrac{partial f}{partial x_{ij}}$

Общая схема

github.com/amkatrutsa

Дифференцирование сложной функции

  • Пусть $x in mathbb{R}^n; ;;; g: mathbb{R}^n to mathbb{R}^p;;;; f : mathbb{R}^p to mathbb{R}^1$

$$
underset{n times 1}{dfrac{partial f left(g(x)right)}{partial x_j}} = sumlimits_{i=1}^pdfrac{partial f}{partial g_i} cdot dfrac{partial g_i}{partial x_j} = underset{n times p}{dfrac{partial g^T}{partial x_j}} cdot underset{p times 1}{dfrac{partial f}{partial g}}
$$

  • Для векторнозначной функции: пусть $x in mathbb{R}^n; ;;; g: mathbb{R}^n to mathbb{R}^p;;;; f : mathbb{R}^p to mathbb{R}^m$

$$
underset{m times n}{dfrac{partial f left(g(x)right)}{partial x^T}} = underset{m times p}{dfrac{partial f}{partial g^T}} cdot underset{p times n}{dfrac{partial g}{partial x^T}}
$$

  • Стало быть для $p = 1$: $x in mathbb{R}^n; ;;; g: mathbb{R}^n to mathbb{R}^1;;;; f : mathbb{R}^1 to mathbb{R}^m$

$$
underset{m times n}{dfrac{partial f left(g(x)right)}{partial x^T}} = underset{m times 1}{dfrac{partial f}{partial g}} cdot underset{1 times n}{dfrac{partial g}{partial x^T}}
$$

  • Еще один важный случай: $f: mathbb{R}^n to mathbb{R}^m; ;;; alpha: mathbb{R}^n to mathbb{R}^1$
    $$
    underset{m times n}{dfrac{dleft(alpha(x)f(x)right)}{dx^T}} = alpha(x) underset{m times n}{dfrac{df}{dx^T}} + underset{m times 1}{f(x)} underset{1 times n}{dfrac{dalpha(x)}{dx^T}}
    $$

Примеры

Пример 1

Найти $nabla f(x)$, если $f(x) = c^Tx$

Решение:

  • $f(x) = sumlimits_{i=1}^n c_i x_i$
  • $dfrac{partial f(x)}{partial x_i} = c_i rightarrow nabla f(x) = c$

Пример 2

Найти $nabla f(x)$, если $f(x) = dfrac{1}{2}x^TAx + b^Tx + c$

Решение:

  • $f(x) = sumlimits_{i=1}^nleft[ dfrac{1}{2}x_i left(sumlimits_{j=1}^n a_{ij}x_j right) + b_ix_i + c_iright] = dfrac{1}{2} sumlimits_{i,j=1}^nleft[ x_i a_{ij}x_j right] + sumlimits_{i=1}^n b_ix_i + c_i$
  • $dfrac{partial f(x)}{partial x_i} = dfrac{1}{2}sumlimits_{i,j=1}^n left(a_{ij} + a_{ji}right)x_i + b_i rightarrow nabla f(x) = dfrac{1}{2} left( A + A^T right)x + b$

Пример 3

Найти градиент билинейной формы $f(x) = u^T(x)Rv(x)$, $R in mathbb{R}^{m times p}; ;;;u(x): mathbb{R}^n to mathbb{R}^m; ;;;v(x): mathbb{R}^n to mathbb{R}^p$

Решение:

$$
dfrac{dleft( u^TRvright)}{dx} = dfrac{du^T}{dx}left( dfrac{partial left( u^TRvright)}{partial u}right) + dfrac{dv^T}{dx}left( dfrac{partial left( u^TRvright)}{partial v}right) = dfrac{du^T}{dx}Rv + dfrac{dv^T}{dx}R^Tu
$$

Пример 4

Найти $nabla f(x)$, если $f(x) = dfrac{1}{2} |Ax – b|^2$

Решение:

Задачу можно решить двумя различными способами: как композицию функций $f(x) = dfrac{1}{2}|x|^2; ;;;; g(x) = Ax – b$, а так же классическим способом, рассмотрев скалярное представление функции.

Ответ: $nabla f(x) = A^T(Ax – b)$

Пример 5

Найти $nabla f(x), f”(x)$, если $f(x) = -e^{-x^Tx}$

Решение:

  • Заметим, что задачу можно решить используя формулу для вычисления градиента сложной функции, однако мы, по старинке, распишем скалярный вид:
    $$
    f(x) = – e ^{-sumlimits_i x_i^2}
    $$

  • Аккуратно посчитаем одну из компонент градиента:
    $$
    dfrac{partial f(x)}{partial x_k} = – e ^{-sumlimits_i x_i^2} cdot left( dfrac{partial (-sumlimits_i x_i^2)}{partial x_k} right) = e ^{-sumlimits_i x_i^2} cdot 2x_k
    $$
    Значит, вектор градиента запишется, как: $nabla f(x) = 2 e^{-x^Tx} cdot x$

  • Абсолютно по такой же логике посчитаем элемент гессиана. Обратите внимание на индексы! Типичная ошибка (недопонимание) здесь возникает, когда записывается везде $i,j$, бездумно повторяя индексы
    $$
    g_k = dfrac{partial f(x)}{partial x_k} rightarrow H_{k,p} = dfrac{partial g_k}{partial x_p}
    $$
    $$
    H_{k,p} = – left( e ^{-sumlimits_i x_i^2} cdot 2x_pright) 2x_k + 2 e ^{-sumlimits_i x_i^2} dfrac{partial x_k}{partial x_p} = 2 e ^{-sumlimits_i x_i^2} cdot left( dfrac{partial x_k}{partial x_p} – 2x_px_kright)
    $$

  • Итого: $f”(x) = H_{f(x)} = 2e^{-x^Tx} left( E – 2 xx^Tright)$

Пример 6

Найти $f'(X)$, если $f(X) = logdet X$; $X in S^n_{++}$ – положительно определенная симметричная квадратная матрица

Решение:

  • Применим хитрый трюк и вспомним об еще одном предназначении градиента и производной – линейная аппроксимация функции в окрестности точки.
    Заметим, что:

$$
logdetleft[ X+ Delta Xright] = log det left[ X^{1/2} left(I + X^{-1/2} Delta X X^{-1/2}right)X^{1/2}right] = \
log det left[ X^{1/2} right]det left[ I + X^{-1/2} Delta X X^{-1/2}right] det left[ X^{1/2}right] =
$$
$$
= log det left[ X right]det left[ I + X^{-1/2} Delta X X^{-1/2}right]= log det left[ X right] + logdet left[ I + X^{-1/2} Delta X X^{-1/2}right]
$$

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

$$
logdetleft[ X+ Delta Xright] = logdet X + sumlimits_{i=1}^n log(1 + lambda_i)
$$
Здесь $lambda_i$ – собственные числа матрицы $X^{-1/2} Delta X X^{-1/2}$. Далее используем факт “малости” матрицы $Delta X$ (в смысле малости нормы этой матрицы), а стало быть, для приближения первого порядка справедливо: $log (1 + lambda_i) approx lambda_i$ т.к. $lambda_i$ так же должны быть малыми.

$$
logdetleft[ X+ Delta Xright] approx logdet X + sumlimits_{i=1}^n lambda_i
$$
$$
logdetleft[ X+ Delta Xright] approx logdet X + mathbf{tr}left[X^{-1/2} Delta X X^{-1/2}right] = logdet X + mathbf{tr}left[X^{-1/2} X^{-1/2} Delta X right] = logdet X + mathbf{tr}left[X^{-1}Delta X right]
$$

Заметим, что в пространстве матриц роль скалярного произведения играет именно след их произведения: $mathbf{tr}(A^TB) = mathbf{tr}(AB^T) = mathbf{tr}(B^TA) = mathbf{tr}(BA^T)$. Стало быть, имеем:
$$
f(X + Delta X) approx f(X) + langle X^{-1}, Delta X rangle
$$
$$
f(X + Delta X) approx f(X) + langle f'(X), Delta X rangle
$$

Значит, $f'(X) = X^{-1}$

Пример 7

Рассмотрим упрощенную задачу обучения с помощью линейной модели (однослойной нейронной сети). Для этого необходимо подобрать параметры полносвязного слоя $W in mathbb{R}^{c times n},b in mathbb{R}^c$ так, чтобы минимизировать функцию потерь (невязку). Для этого часто используют градиентные методы. Т.е. схема оптимизационных алгоритмов идейно следующая:
$$
b_{k+1} = b_k – beta dfrac{partial L(x,y,W_k,b_k)}{partial b^T}
$$
$$
W_{k+1} = W_k – omega dfrac{partial L(x,y,W_k,b_k)}{partial W}
$$
Здесь частные производные считаются именно по параметрам $W, b$, а не по аргументу $x$, а $beta, omega$ – заданные константы.

Посчитайте $dfrac{partial L(x,y,W,b)}{partial b^T}$ и $dfrac{partial L(x,y,W,b)}{partial W}$

Решение:

  • $L(x,y,W,b) = dfrac{1}{2}sumlimits_{i = 1}^c left( sumlimits_{j=1}^n (w_{ij}x_j) + b_i – y_i right)^2$

  • $dfrac{partial L(x,y,W,b)}{partial b_p} = dfrac{1}{2}2 sumlimits_{i = 1}^c left( sumlimits_{j=1}^n (w_{ij}x_j) + b_i – y_i right) cdot dfrac{partial b_i}{partial b_p} = sumlimits_{j=1}^n (w_{pj}x_j) + b_p – y_p$

  • Значит, $dfrac{partial L(x,y,W,b)}{partial b^T} = Wx + b – y$

  • Не забываем про главный секрет векторного дифференцирования: наличие, как минимум, латинского алфавита для индексов:

    $dfrac{partial L(x,y,W,b)}{partial w_{rs}} = dfrac{1}{2}2 sumlimits_{i = 1}^c left( sumlimits_{j=1}^n (w_{ij}x_j) + b_i – y_i right) cdot dfrac{partial sumlimits_{j=1}^n (w_{ij}x_j)}{partial w_{rs}}$

    $dfrac{partial L(x,y,W,b)}{partial w_{rs}} = left(sumlimits_{j=1}^n (w_{rj}x_j) + b_r – y_rright) cdot x_s$

    $dfrac{partial L(x,y,W,b)}{partial w_{rs}} = sumlimits_{j=1}^n (w_{rj}x_jx_s) + b_r x_s – y_r x_s$

  • Значит, $dfrac{partial L(x,y,W,b)}{partial W} = Wxx^T + (b-y)x^T$

Домашнее задание 5

  1. Найти $nabla f(x)$, если $f(x) = |Ax| – |x^TA|$

  2. Найти $nabla f(x), f”(x)$, если $f(x) = dfrac{-1}{1 + x^Tx}$

  3. Найти $f'(X)$, если $f(X) = det X$
    Примечание: здесь под $f'(X)$ подразумевается оценка фунции $f(X)$ первого порядка в смысле разложения в ряд Тейлора:
    $$
    f(X + Delta X) approx f(X) + mathbf{tr}(f'(X)^T Delta X)
    $$

  4. Найти $f”(X)$, если $f(X) = log det X$
    Примечание: здесь под $f”(X)$ подразумевается оценка фунции $f(X)$ второго порядка в смысле разложения в ряд Тейлора:
    $$
    f(X + Delta X) approx f(X) + mathbf{tr}(f'(X)^T Delta X) + frac{1}{2}mathbf{tr}(Delta X^T f”(X) Delta X)
    $$

  5. Найти градиент и гессиан функции $f : mathbb{R}^n to mathbb{R}$, $f(x) = log sumlimits_{i=1}^m exp (a_i^Tx + b_i), ;;;; a_1, ldots, a_m in mathbb{R}^n; ;;; b_1, ldots, b_m in mathbb{R}$

Дифференцирование матриц и векторов

2.3. МАТРИЧНОЕ ДИФФЕРЕНЦИРОВАНИЕ

Аппарат векторно-матричного исчисления не приспособлен для манипуляций, целью которых является нахождение интегралов и производных от функций матричного аргумента. Недостаток аксиоматики в этом направлении известен, памятная табличка формул матричного дифференцирования нет-нет, да встречается в работах – в приложении или в первой главе. При внимательном отношении табличкам свойственно разрастаться в таблицы. Чтобы от них избавиться, надо предложить систему формального дифференцирования, позволяющую находить результат, желательно, по простым правилам.

Попытаемся привести некоторые лежащие на поверхности соображения на этот счет. Начнем с формального определения.

Понятие производной скалярной функции по матрице уже устоялось. Это матрица, элементами которой являются частные производные функции по каждому элементу. Таков, например, градиент. Производная матрицы по скалярному аргументу образуется матрицей производных каждого ее элемента по одному и тому же аргументу. Расширяя эти толкования, придем к определению, согласно которому производная матрицы по матричному аргументу представляет собой блочную матрицу, в которой каждый блок включает производную дифференцируемой матричной функции по скалярному аргументу – элементу матричного аргумента.

Для того, чтобы лаконично записывать результаты формальных матричных действий, придется ввести пару относительно новых обозначений. Первое касается векторизации A ↑ матрицы, когда ее элементы строчка за строчкой последовательно слагаются в столбец. Второе обозначение для блочно-диагональной структуризации существует , но есть желание иногда писать его короче, просто . Количество повторений блоков A на диагонали, как и многое другое в матричной алгебре, остается за бортом, что не всегда правильно. Можно предложить другой эквивалент обозначения этой операции, например, такой: n>.

Указанные операции обладают рядом почти очевидных свойств, например, (x T ) ↑ =x и .

Отметим попутно у матричного дифференцирования коммутирующее знак транспонирования качество, оказывается что

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

Производная произведения двух матриц по матричному же аргументу размера nxm трансформируется к виду

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

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

Метод наименьших квадратов связан с поиском сложной производной от матрицы, имеем

Так, в одну строчку, выводятся формулы, под которые бронируется место в приложениях. Идее нужно выдержать испытание временем, пусть пока эстетическая сторона дела доставит удовольствие.

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

Вспоминая правило буравчика, незаменимое в исследовании электромагнитных явлений, отметим, что оно описывает поворот на 90 градусов. Механики для этой цели придумали векторное произведение y = ω⊗x, пасынка матричного исчисления: ортогональные матрицы закрывают потребности в обеспечении поворотов. Среди них есть конструкции кососимметрические, отвечающие за прямой угол. Поворот с дополнительным растяжением не меняет вида матрицы, так что для векторного произведения нетрудно подыскать матричный аналог y = Wx, где

Смешанное произведение векторов z(ω⊗x) выливается в привычную запись билинейной формы z T Wx.

Попробуем найти матричную интерпретацию дифференциальных операторов. Понять их содержание неспециалисту нелегко, между тем, они используются в уравнениях Максвелла, играющих фундаментальную роль в науке. Эти уравнения дали жизнь теории относительности и навели Шредингера на объяснение дискретной природы процессов микромира. Матричная аналогия способна внести некоторое более ясное видение сложных вещей. Физическое пространство, в котором распространяется электромагнитная волна, трехмерно. Изменения полей в нем оцениваются частными производными напряженности вдоль трех пространственных направлений.

Оператором Гамильтона ∇ называют собрание операций взятия частных производных по трем направлениям физического мира. Применительно к скалярной функции трех координат этот оператор порождает градиент. Что касается векторной функции θ(x), наделенной в каждой точке x пространства величиной и направлением, то количество частных производных расширяется до девяти, собираемых в матрицу dθ T /dx. Дивергенция представляет собой след этой матрицы, т.е. сумму трех обусловленных индексами координатных осей производных div θ(x) = trace dθ T /dx.

Дивергенция носит все признаки скалярного произведения векторов ∇ и θ(x). Ротор, напротив, формально определяется как векторное произведение, т.е. rot θ(x) = ∇⊗θ(x). Такого сорта дефиниции дают скудную пищу воображению. Недаром с уравнениями Максвелла пришлось поработать нескольким математикам, только чтобы их разъяснить [6].

Фарадей находил силовые лини магнитного поля, насыпая металлические опилки на лист бумаги и поднося его к полюсу магнита.

Попробуем воспользоваться его методом. Лучи силовых линий в чем-то подобны градиенту квадратичной функции f(x)=0.5x T Ax.

Фазовые портреты линейных динамических систем, описывающих движения вдоль градиента , являются удобным руководством для постижения топологических особенностей векторных полей. Дивергенция вектора градиента представляет собой сумму вторых частных производных (это действие приписывают оператору Лапласа Δ) квадратичной функции, в данном случае она равна сумме диагональных элементов матрицы A. Не менее просто определить у такого поля ротор. Он составлен из разностей внедиагональных элементов A. Полям с нулевым ротором отвечают диагональные матрицы простыми собственными значениями.

Полям с нулевой дивергенцией отвечаю матрицы с чисто мнимыми собственными значениями. Среди матриц c нулевой диагональю отметим кососимметрические. Квадратичную форму с их помощью не построишь, градиент не способен на такие фокусы, как замыкание. Но динамическая система ẋ=Ax существует. В отсутствии монополей силовые линии электрического и магнитного полей замкнуты, не имеют ни начала, ни конца. Такие траектории прочерчивают частицы несжимаемой жидкости, подкрученной в ванне без слива. Задание нулевых дивергенций электрического и магнитного полей сродни заданию начальных условий, определяющих пространственные характеристики силовых линий.

Электромагнитное поле распространяется благодаря самоиндукции. Для ее описания и потребовался ротор или вихрь – завиток (curl), как поэтично назвал его склонный к стихотворным опусам Джеймс Клерк Максвелл, имевший, к тому же, привычку подписываться формулой dp/dt=JCM. В безвихревом гравитационном поле книга падает на пол прямо, не совершая утиные движения сорванного осенью с ветки листка. Уравнение электростатического поля констатирует, что ротор его напряженности равен нулю. Такое поле развернуто и скручивается в пространстве, если происходят изменения во времени поля магнитного. И наоборот, магнитное поле скручивается под влиянием изменения во времени поля электрического.

Максвелл крест накрест приравнял (с точностью до коэффициентов) временные и вихревые пространственные производные напряженностей электрического и магнитного полей. Теорию ждало открытие. Коэффициенты уравнений можно установить из опыта с диэлектриками. Отсюда вычисляется скорость распространения электромагнитного излучения. Она оказалась равной скорости света, измеренной астрономами.

Векторное дифференцирование

В дальнейшем в различных главах будет использовано векторное дифференцирование, которое позволяет использовать более компактную и наглядную запись. Поэтому в этом параграфе кратко рассмотрим определения и свойства векторного дифференцирования (символ *= f обозначает равенство по определению).

1) Производная вектора х = (х Х2 . хп) Т по скаляру t:

2) Производная скалярной функции 5 = s (х) по вектору х = = (х Х2 . хп) Т :

3) Производная векторной функции f (х) (f = (Д . /п) т ) по вектору х = (si Х2 . хп) Т :

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

1°. Производная скалярного произведения по скаляру t:

Если у = х, то имеем

2°. Производная произведения матрицы и вектора по скаляру t:

А х п)-матрица, зависящая от t.

3°. Производная скалярного произведения по вектору х =

Если у = z, то имеем

4°. Производная квадратичной формы по вектору х = = (Xj Х2 • • • &п) •

Q — симметрическг^я (тг х п)-матрица, не зависящей от х.

5°. Производная сложной векторной функции по скаляру t:

Дифференцирование матриц

Пусть A(t) – матрица (m x n), элементы которой aij есть дифференцируемые функции скалярной переменной t. Производная от матрицы A(t) по переменной t есть матрица, элементами которой являются :

.

Производная от суммыдвух матриц равна сумме производных от этих матриц:

.

Производная от произведенияматриц:

.

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

.

Интегрирование матриц

Интеграл от матрицы определяется как матрица, образованная из интегралов от элементов исходной матрицы. Следовательно,

Для обозначения интеграла от матрицы обычно используется символ Q=∫ ( )dt. Если оператор Q снабжен индексами (сверху t, а снизу t0), то они указывают нижний и верхний пределы интегрирования:

Пример 4. Найти

Определители

Определители существуют только для квадратных матриц.

В общем случае используется разложение Лапласа определителя n порядка по элементам строки (столбца) на сумму n определителей (n–1) порядка.

Например, для n = 3:

Свойства определителей

1. Определитель равен единице, если матрица А– единичная.

2. Определитель равен нулю, либо если все элементы матрицы равны нулю, либо все элементы строки (или столбца) равны нулю, или равны между собой или пропорциональны элементы произвольных двух строк (или двух столбцов).

3. Величина определителя остается неизменной по модулю при перестановке местами его строк (или столбцов).

4. Знак определителя изменяется на противоположный при замени местами его двух строк (или столбцов).

5. Значение определителя умножается на постоянную k, если все элементы какой-либо его строки (столбца) умножаются на k.

6. Значение определителя не изменяется, если к какой-либо его строке (или столбцу) прибавить умноженные на k соответствующие элементы другой строки (или столбца).

[spoiler title=”источники:”]

http://studme.org/270187/tehnika/vektornoe_differentsirovanie

http://helpiks.org/6-78299.html

[/spoiler]

Добавить комментарий