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

Интегралы — необходимый минимум

Площадь, замена переменной и якобиан — ровно то, без чего не определить ожидание и не понять normalizing flows

Шаг 32 из 117 · ~28 мин

Зачем интегралы в этом плане

Ровно за тремя вещами, и все три — из блока 3 и дальше:

  1. Ожидание непрерывной случайной величины определяется интегралом.
  2. Нормировка плотности: p(x)dx=1\int p(x)\,dx = 1.
  3. Замена переменных с якобианом — это normalizing flows целиком, и половина диффузионных моделей.

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

Интеграл как предел суммы

abf(x)dx=limni=1nf(xi)Δx\int_a^b f(x)\,dx = \lim_{n \to \infty} \sum_{i=1}^{n} f(x_i)\,\Delta x

Разбиваем отрезок, умножаем значение на ширину, складываем, измельчаем разбиение. Именно эта форма — «сумма произведений значения на меру» — переносится на всё остальное: ожидание, свёртку, ELBO.

Полезно держать в голове аналогию с \sum из блока 0: интеграл это сумма, у которой индекс стал непрерывным. Знак \int — исторически вытянутая буква S от summa.

Основная теорема анализа связывает интеграл с производной:

ddxaxf(t)dt=f(x)\frac{d}{dx}\int_a^x f(t)\,dt = f(x)

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

Замена переменной

Одномерный случай:

f(g(u))g(u)du=f(x)dx,x=g(u)\int f(g(u))\,g'(u)\,du = \int f(x)\,dx, \qquad x = g(u)

Множитель g(u)g'(u) обязателен: он говорит, во сколько раз замена растягивает элемент длины. Забыть его — самая частая ошибка, и она меняет ответ, а не только запись.

Многомерный случай: якобиан

Xf(x)dx=Uf(g(u))detJg(u)du\int_{\mathcal{X}} f(\mathbf{x})\,d\mathbf{x} = \int_{\mathcal{U}} \htmlData{k=f}{f(g(\mathbf{u}))}\,\htmlData{k=jac}{\bigl|\det J_g(\mathbf{u})\bigr|}\,d\mathbf{u}

Вместо gg' появляется . Смысл прямо из блока 1: определитель — коэффициент изменения объёма, а якобиан — локальная линейная аппроксимация замены. Значит detJ|\det J| и есть локальный коэффициент растяжения объёма.

Модуль нужен потому, что объём не бывает отрицательным, а определитель — бывает, если замена меняет ориентацию.

Почему это и есть normalizing flows

Пусть z\mathbf{z} имеет известную плотность pzp_z, а x=g(z)\mathbf{x} = g(\mathbf{z}) — результат обратимого преобразования. Плотность x\mathbf{x} получается из формулы замены переменных:

px(x)=pz(g1(x))detJg1(x)p_x(\mathbf{x}) = p_z\bigl(g^{-1}(\mathbf{x})\bigr)\,\bigl|\det J_{g^{-1}}(\mathbf{x})\bigr|

Читается так: вероятность сохраняется, а плотность — нет. Если преобразование растянуло область, та же вероятность распределилась по большему объёму, значит плотность упала — ровно на detJ|\det J|.

Отсюда вся конструкция потоков: берём простое распределение, применяем цепочку обратимых преобразований, честно отслеживаем logdetJ\log|\det J| на каждом шаге. И отсюда же архитектурные ограничения — преобразования выбирают такими, чтобы определитель считался дёшево: треугольный якобиан (как в autoregressive flows) даёт произведение диагонали вместо общего O(n3)O(n^3).

Логарифм здесь не для красоты: определители перемножаются, а логарифмы складываются, и в log\log-форме цепочка из сотни слоёв не переполняется.

Кратный интеграл и маргинализация

 ⁣ ⁣f(x,y)dxdy\int\!\!\int f(x, y)\,dx\,dy

Считается последовательно, по одной переменной за раз. Порядок можно менять, если функция достаточно приличная (теорема Фубини) — тот же вопрос, что смена порядка суммирования в блоке 0, и та же оговорка «для абсолютно сходящихся».

Практически это нужно для маргинализации: чтобы получить p(x)p(x) из совместной p(x,y)p(x,y), интегрируют по yy:

p(x)=p(x,y)dyp(x) = \int p(x, y)\,dy

Именно этот интеграл почти всегда неберущийся, и именно поэтому существуют вариационные методы. Всё блок 4 и VAE вырастают из того, что этот интеграл нельзя посчитать честно.

Что пропускаем сознательно

Интегрирование по частям, тригонометрические подстановки, несобственные интегралы как теория, признаки сходимости, ОДУ вручную, векторный анализ с ротором и теоремой Стокса. Ни одно из этого не понадобится для чтения современных работ.

Единственное исключение — численные солверы ОДУ, но они появятся в ветке про диффузию, и не как техника интегрирования, а как способ двигаться по траектории.

Источники

Проверки

0 из 2
  1. Замена переменных и плотность

    Пусть x=g(z)\mathbf{x} = g(\mathbf{z}) — обратимое преобразование. Отметьте все верные утверждения.

  2. Численное интегрирование и точный ответ

    Реализуйте trapezoid(coeffs, a, b, n) — интеграл многочлена от a до b методом трапеций с n отрезками.

    coeffs задаёт многочлен по возрастанию степеней, как в первом уроке блока. Формула:

    abfΔx(f(a)+f(b)2+i=1n1f(a+iΔx)),Δx=ban\int_a^b f \approx \Delta x\left(\frac{f(a) + f(b)}{2} + \sum_{i=1}^{n-1} f(a + i\,\Delta x)\right), \qquad \Delta x = \frac{b - a}{n}

    Метод трапеций точен для линейных функций — трапеция и есть линейная функция на отрезке. Для параболы он даёт ошибку, и она убывает как Δx2\Delta x^2: удвоив n, ошибка падает вчетверо.

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

    функция trapezoid

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

    Ctrl/⌘ + Enter