Вероятность

Совместные распределения и замена переменных

Вероятность сохраняется, плотность нет — и весь механизм normalizing flows держится на этой разнице

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

Три распределения из одного

Для пары величин есть совместное p(x,y)p(x, y), из него получаются маргинальные и условные:

p(x)=p(x,y)dy,p(xy)=p(x,y)p(y)p(x) = \int p(x, y)\,dy, \qquad p(x \mid y) = \frac{p(x, y)}{p(y)}

Маргинализация — «проинтегрировать ненужное», обусловливание — «зафиксировать известное и перенормировать». Оба уже встречались: первое в блоке 2 как повод для кратного интеграла, второе в уроке про условную вероятность.

Из этих двух формул следует правило произведения p(x,y)=p(xy)p(y)p(x,y) = p(x \mid y)p(y), а из него — Байес. Ничего нового; полезно только привыкнуть, что все три объекта живут в одной картинке.

Сумма независимых величин — свёртка

Если XX и YY независимы, то плотность Z=X+YZ = X + Y есть

pZ(z)=pX(x)pY(zx)dxp_Z(z) = \int p_X(x)\,p_Y(z - x)\,dx

Это свёртка. Формула читается прямо: чтобы сумма оказалась равна zz, нужно чтобы XX попал в xx, а YY — в оставшееся zxz - x; перебираем все способы и складываем.

Отсюда несколько известных фактов сразу: сумма гауссиан гауссовская, сумма пуассоновских пуассоновская, сумма равномерных — уже нет (получается треугольное распределение). А заодно и связь с ЦПТ: свёртка сглаживает, и многократное применение любой приличной плотности к себе даёт гауссиану.

Замена переменных

Пусть Y=g(X)Y = g(X) с обратимым gg. Тогда

pY(y)=pX(g1(y))dg1dyp_Y(y) = \htmlData{k=src}{p_X\bigl(g^{-1}(y)\bigr)}\,\htmlData{k=jac}{\left|\frac{d g^{-1}}{d y}\right|}

Ключевое различие, которое стоит проговорить: вероятность сохраняется, плотность нет. Событие «XX попал в интервал» и событие «YY попал в его образ» — одно и то же событие, значит вероятности равны. Но если преобразование растянуло интервал вдвое, та же вероятность распределилась по вдвое большей длине, и плотность упала вдвое. — это в точности отношение длин.

Столбики ниже — куски вероятности. Смотрите, что происходит с их шириной и высотой:

X равномерна на [0, 1]

Y = g(X)

суммарная вероятность
1
пик плотности
0.5

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

Линейное растяжение вдвое: все столбики вдвое шире и вдвое ниже. Плотность стала 0.5 — ровно 1/|dg/dx|.

Обратите внимание, что суммарная вероятность остаётся единицей при любом преобразовании, а пик плотности гуляет как угодно. Это и есть весь ответ на вопрос «почему плотность больше единицы».

Многомерный случай

pY(y)=pX(g1(y))detJg1(y)p_Y(\mathbf{y}) = p_X\bigl(g^{-1}(\mathbf{y})\bigr)\,\bigl|\det J_{g^{-1}}(\mathbf{y})\bigr|

Производная заменилась на определитель якобиана — коэффициент изменения объёма из блока 1. Больше ничего не изменилось.

Это и есть normalizing flows целиком. Берём простое распределение, применяем цепочку обратимых преобразований, честно накапливаем logdetJ\log|\det J| на каждом шаге:

logpX(x)=logpZ(z)+ilogdetJi\log p_X(\mathbf{x}) = \log p_Z(\mathbf{z}) + \sum_i \log\bigl|\det J_i\bigr|

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

Отсюда и архитектурные ограничения потоков. Общий определитель стоит O(n3)O(n^3), что неприемлемо, поэтому преобразования выбирают с треугольным якобианом — тогда определитель это произведение диагонали, O(n)O(n). Так устроены coupling layers и autoregressive flows: они не «трюк», а следствие требования дешёвого определителя.

Репараметризация

Частный случай, который стоит отдельного упоминания:

x=μ+σε,εN(0,1)  xN(μ,σ2)x = \mu + \sigma\varepsilon, \qquad \varepsilon \sim \mathcal{N}(0, 1) \ \Longrightarrow \ x \sim \mathcal{N}(\mu, \sigma^2)

Зачем это нужно: случайность вынесена в ε\varepsilon, который не зависит от параметров. Значит по μ\mu и σ\sigma можно дифференцировать обычным образом, пропуская градиент сквозь сэмплирование. Без этого приёма VAE не обучался бы градиентным спуском вовсе.

Многомерная версия — x=μ+Lε\mathbf{x} = \boldsymbol{\mu} + L\boldsymbol{\varepsilon} с LL=ΣLL^\top = \Sigma, где LL — разложение Холецкого.

Графические модели: что означает стрелка

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

p(x1,,xn)=ip(xiродители(xi))p(x_1, \ldots, x_n) = \prod_i p(x_i \mid \text{родители}(x_i))

Стрелка ABA \to B означает, что BB обусловлен на AA. Отсутствие стрелки — это утверждение об условной независимости, и содержательная информация именно в нём.

Два узора из урока про независимость: общая причина ACBA \leftarrow C \to B делает AA и BB зависимыми, пока CC не наблюдён, а общее следствие ACBA \to C \leftarrow B — наоборот, независимыми, пока CC не наблюдён. Поэтому направление стрелок несёт смысл, а не только их наличие.

Источники

Проверки

0 из 2
  1. Что сохраняется при замене переменных

    Пусть Y=g(X)Y = g(X) с обратимым гладким gg. Отметьте все верные утверждения.

  2. Плотность после преобразования

    Реализуйте transformed_density(name, y) — плотность pY(y)p_Y(y), если XX равномерна на [0,1][0, 1] и Y=g(X)Y = g(X).

    По формуле замены переменных

    pY(y)=pX(g1(y))dg1dyp_Y(y) = p_X\bigl(g^{-1}(y)\bigr)\left|\frac{dg^{-1}}{dy}\right|

    а поскольку pX1p_X \equiv 1 на [0,1][0,1], остаётся только модуль производной обратной функции. Поддержать нужно три преобразования:

    name g(x)g(x) g1(y)g^{-1}(y) область yy
    "double" 2x2x y/2y/2 [0,2][0, 2]
    "square" x2x^2 y\sqrt{y} [0,1][0, 1]
    "exp" exe^x lny\ln y [1,e][1, e]

    Вне области значений верните 0. Для неизвестного имени верните null (в Python None).

    Проверьте себя интегрированием: каждая плотность обязана давать единицу.

    функция transformed_density

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

    Ctrl/⌘ + Enter