Диффузия и потоки

Непрерывные нормализующие потоки

Точное правдоподобие через след якобиана — и почему от него отказались

Шаг 99 из 117 · ~26 мин

Замена переменных, доведённая до предела

Из блока 3, урок 110: если y=T(x)y = T(x) — обратимое преобразование, то плотности связаны якобианом

logpY(y)=logpX(x)logdetT(x)\log p_Y(y) = \log p_X(x) - \log\big|\det \nabla T(x)\big|

Нормализующий поток строит TT как композицию слоёв и следит, чтобы определитель считался дёшево (треугольные матрицы, перестановки, аффинные связки). Ограничение архитектуры — цена за вычислимость.

Непрерывный поток снимает это ограничение. Пусть преобразование задано не композицией слоёв, а решением ОДУ:

dxdt=vθ(x,t),dlogp(xt)dt= ⁣ ⁣vθ(xt,t)\frac{dx}{dt} = \htmlData{k=field}{v_\theta(x, t)}, \qquad \frac{d \log p(x_t)}{dt} = -\htmlData{k=div}{\nabla\!\cdot\! v_\theta(x_t, t)}

Второе уравнение — формула мгновенной замены переменных. Смысл замены огромен: определитель превратился в след. Определитель d×dd\times d матрицы стоит O(d3)O(d^3), след — O(d)O(d), если его удаётся посчитать; и никаких ограничений на архитектуру vθv_\theta больше нет.

Что это даёт и чего стоит

Плюс, которого нет ни у диффузии, ни у flow matching: точное правдоподобие. Проинтегрировав второе уравнение вдоль траектории, получаем

logp(x1)=logp0(x0)01 ⁣ ⁣vθ(xt,t)dt\log p(x_1) = \log p_0(x_0) - \int_0^1 \nabla\!\cdot\! v_\theta(x_t, t)\,dt

Не нижнюю границу, как ELBO, а само значение — с точностью решателя. Для задач, где правдоподобие и есть ответ (детекция аномалий, сжатие, сравнение моделей), это существенно.

Минус — там же, где плюс. — это след якобиана, и точное его вычисление требует dd обратных проходов, ровно как в уроке 040. Спасает оценка Хатчинсона:

 ⁣ ⁣v=Ez[z(v)z],zN(0,I)\nabla\!\cdot\! v = \mathbb{E}_{z}\big[z^\top (\nabla v)\, z\big], \qquad z \sim \mathcal{N}(0, I)

Одно произведение якобиана на вектор — один обратный проход. Оценка несмещённая, но шумная, и дисперсия растёт с размерностью.

Как обучали CNF и почему это было дорого

Обучение по правдоподобию требует градиента по θ\theta через решатель ОДУ. Два способа:

подходпамятьточность градиента
дифференцировать через шаги решателяO(шагов)O(\text{шагов})точная
adjoint-метод (решать сопряжённое ОДУ назад)O(1)O(1)приближённая

Adjoint был главным вкладом Neural ODE: память перестала зависеть от числа шагов. Но остались две проблемы, и они оказались решающими:

  1. число шагов не под контролем. Адаптивный решатель сам решает, сколько вычислений ему нужно, и по мере обучения динамика усложняется — шагов становится больше, обучение замедляется само по себе;
  2. симуляция в цикле обучения. Каждый шаг оптимизации требует полного прогона ОДУ вперёд и назад. Сравните с диффузией, где обучающий пример стоит один прогон сети.

Чем это оказалось для flow matching

Вот связь, ради которой урок стоит в этом месте. Flow matching обучает то же самое поле скоростей, что и CNF, но без симуляции:

CNF по правдоподобиюflow matching
что обучаетсяvθv_\thetavθv_\theta
цельlogp\log p через интеграл дивергенцииMSE по скорости
нужен ли решатель при обученииданет
нужна ли дивергенцияданет
стоимость примерадесятки прогоноводин
точное правдоподобие после обучениядада

Последняя строка — самое приятное. Обученная модель flow matching это и есть CNF: у неё есть поле скоростей, значит формула правдоподобия применима. Отказ от симуляции произошёл только на обучении.

Такая пара — «объект тот же, цель другая» — уже встречалась: в уроке 060 диффузия обучала score, не считая ни следа, ни нормировочной константы. Приём один и тот же: найти цель, оптимум которой совпадает с нужным, но которая считается локально.

шагов решателя 4
длина пути
2.702
прямое расстояние
2.702
кривизна
×1
ошибка ломаной
0.0e+0
Прямой путь: решателю достаточно любого числа шагов, потому что ломаная совпадает с траекторией. Для CNF это означало бы дешёвую симуляцию — и именно поэтому спрямление путей интересно не только сэмплированию.

Ошибка ломаной равна нулю: при прямых траекториях число шагов решателя перестаёт быть параметром вовсе.

Итог

  • CNF заменяет определитель якобиана его следом, снимая ограничения на архитектуру.
  • Он даёт точное правдоподобие, а не нижнюю границу.
  • Цена — оценка дивергенции и полная симуляция ОДУ на каждом шаге обучения; число шагов при этом не контролируется.
  • Flow matching обучает то же поле локальной целью, а правдоподобие остаётся доступным после обучения. Симуляция ушла из обучения, а не из модели.

Источники

Проверки

0 из 2
  1. Что даёт непрерывный поток

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

  2. Правдоподобие двумя путями

    Возьмём простейшее поле скоростей — диагональное линейное:

    dxdt=a11x,dydt=a22y\frac{dx}{dt} = a_{11}x, \qquad \frac{dy}{dt} = a_{22}y

    Его решение известно в замкнутой форме, x(T)=ea11Tx(0)x(T) = e^{a_{11}T}x(0), и то же для yy. Начальная плотность — стандартная двумерная нормальная.

    Реализуйте cnf_likelihood(a11, a22, t_end, x0, y0) — верните [x_end, y_end, log_p_via_divergence, log_p_via_determinant]:

    • x_end, y_end — конечная точка;
    • log_p_via_divergence = logp0(x0,y0)0T ⁣ ⁣vdt\log p_0(x_0,y_0) - \displaystyle\int_0^{T}\nabla\!\cdot\! v\,dt, где дивергенция поля равна a11+a22a_{11} + a_{22} и от времени не зависит, поэтому интеграл берётся устно;
    • log_p_via_determinant = logp0(x0,y0)logdetT\log p_0(x_0,y_0) - \log\big|\det \nabla T\big|, где якобиан преобразования диагонален с элементами ea11Te^{a_{11}T} и ea22Te^{a_{22}T}.

    Здесь logp0(x,y)=x2+y22log(2π)\log p_0(x,y) = -\frac{x^2+y^2}{2} - \log(2\pi).

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

    функция cnf_likelihood

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

    Ctrl/⌘ + Enter