Дифференциальное и матричное исчисление

Правило цепочки и якобиан

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

Шаг 27 из 117 · ~30 мин

Якобиан

Для отображения f:RnRm\mathbf{f} : \R^n \to \R^m линейная аппроксимация — это матрица, а не вектор. Она называется якобианом:

Jij=fixj,JRm×nJ_{ij} = \frac{\partial f_i}{\partial x_j}, \qquad J \in \R^{m \times n}

Строк столько, сколько выходов, столбцов — сколько входов. Проверка формы та же, что для матриц в блоке 1: якобиан — это матрица линейного отображения, которое приближает f\mathbf{f} около точки.

Частные случаи, которые полезно узнавать:

  • f:RnRf : \R^n \to \R — якобиан это строка, транспонированный градиент;
  • f:RRm\mathbf{f} : \R \to \R^m — якобиан это столбец;
  • линейное отображение f(x)=Ax\mathbf{f}(\mathbf{x}) = A\mathbf{x} — якобиан равен AA в любой точке. Линейная аппроксимация линейной функции есть она сама.

Правило цепочки в матричном виде

Jfg(x)=Jf(g(x))Jg(x)J_{f \circ g}(\mathbf{x}) = \htmlData{k=outer}{J_f\bigl(g(\mathbf{x})\bigr)}\,\htmlData{k=inner}{J_g(\mathbf{x})}

Это буквально то же самое, что в одномерном случае, — только вместо умножения чисел умножение матриц. якобиан обязательно вычисляется в точке g(x)g(\mathbf{x}), а не в x\mathbf{x}: это самая частая ошибка в выкладках.

Порядок множителей проверяется размерностями. Если g:RnRkg : \R^n \to \R^k и f:RkRmf : \R^k \to \R^m, то JgJ_g имеет форму k×nk \times n, JfJ_f — форму m×km \times k, и только произведение JfJgJ_f J_g вообще определено. Как и в блоке 1, порядок записи обратен порядку применения.

Сумма по путям

Если переменная влияет на результат несколькими способами, вклады складываются:

Lx=пути от x к L звенья путилокальная производная\frac{\partial L}{\partial x} = \sum_{\text{пути от } x \text{ к } L} \ \prod_{\text{звенья пути}} \text{локальная производная}

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

Простейший пример: L=xxL = x \cdot x. Есть два пути от xx к произведению — через первый аргумент и через второй. По каждому локальная производная равна xx, сумма даёт 2x2x. Тот же ответ, что и по правилу для x2x^2, но полученный механически, без знания формулы.

Обратный проход по шагам

Ниже — граф вычисления L=tanh(wx+b)2L = \tanh(wx + b)^2. Нажимайте «шаг назад»: сначала выход получает затравку L/L=1\partial L/\partial L = 1, потом каждый узел передаёт свою производную входам, умножая на локальную.

Обратный проход начинается с затравки ∂L/∂L = 1 на выходном узле. Нажмите «шаг назад».

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

Почему это дёшево

Ключевое наблюдение, из которого выросло всё глубокое обучение. Чтобы получить производные по всем входам, достаточно одного обратного прохода — его стоимость примерно равна стоимости прямого.

Сравните с численным дифференцированием: там на каждый параметр нужно как минимум два вычисления функции. Для сети с 10910^9 параметрами это 21092 \cdot 10^9 прямых проходов против одного обратного.

Причина такой асимметрии — в том, с какой стороны перемножать цепочку якобианов. Разберём это в уроке про VJP: то, что backprop идёт справа налево, а не слева направо, и есть источник всей экономии.

Диамант: где ошибаются вручную

Рассмотрим L=ex+x2L = e^x + x^2. Граф ветвится: xx идёт и в экспоненту, и в квадрат, а потом ветви сходятся в сумме.

У x два пути к L. Пройдите обратный проход по шагам и следите за градиентом x: он получит вклад дважды.

Пройдите обратный проход и посмотрите на градиент xx после каждого шага: он накапливается, а не перезаписывается. В коде это +=, и забытый плюс — классическая ошибка при написании автограда вручную.

Теорема о неявной функции — только формулировка

Иногда связь задана уравнением F(x,y)=0F(x, y) = 0, а не формулой y=f(x)y = f(x). Теорема утверждает: если F/y0\partial F/\partial y \ne 0, то локально yy выражается через xx как дифференцируемая функция, и

dydx=F/xF/y\frac{dy}{dx} = -\frac{\partial F/\partial x}{\partial F/\partial y}

Доказательство пропускаем. Знать формулировку стоит, потому что она объясняет, как дифференцируют через решение уравнения, не решая его: так устроены implicit layers, deep equilibrium models и дифференцирование через оптимизационную задачу.

Источники

Проверки

0 из 2
  1. Формы якобианов

    Пусть g:R4R3g : \R^4 \to \R^3 и f:R3R2f : \R^3 \to \R^2. Отметьте все верные утверждения про композицию fgf \circ g.

  2. Сумма по путям

    Реализуйте total_derivative(paths) — полную производную по правилу «умножаем вдоль пути, складываем по путям».

    paths — список путей. Каждый путь это список локальных производных на его звеньях. Нужно перемножить числа внутри каждого пути и сложить результаты:

    Lx=pipdi\frac{\partial L}{\partial x} = \sum_{p} \prod_{i \in p} d_i

    Крайние случаи:

    • нет путей — производная 0 (переменная не влияет на результат);
    • пустой путь считается произведением по пустому множеству, то есть 1 — тот же случай, что пустое произведение из блока 0.
    функция total_derivative

    Загрузка редактора…

    Ctrl/⌘ + Enter