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

Стохастические дифференциальные уравнения

Винеровский процесс, почему dW ~ √dt, лемма Ито и обращение времени

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

Уравнение с шумом

Прошлый урок работал с dx=fdtdx = f\,dt. Добавим шум:

dx=f(x,t)dt+g(t)dWdx = \htmlData{k=drift}{f(x, t)}\,dt + \htmlData{k=diff}{g(t)}\,\htmlData{k=wiener}{dW}

определяется тремя свойствами: W(0)=0W(0) = 0, приращения независимы, и

W(t+h)W(t)N(0,h)W(t+h) - W(t) \sim \mathcal{N}(0, h)

Обратите внимание на дисперсию: она равна hh, а не h2h^2. Значит стандартное отклонение приращения равно h\sqrt{h}, и это одна деталь, из которой следует вся необычность стохастического исчисления.

Почему dt\sqrt{dt} меняет всё

Сравните два масштаба при малом шаге:

шаг hhдетерминированное приращение h\sim hслучайное h\sim \sqrt{h}
10210^{-2}0.010.010.10.1
10410^{-4}0.00010.00010.010.01
10610^{-6}0.0000010.0000010.0010.001

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

Полная вариация бесконечна. Сумма ΔW\sum|\Delta W| растёт как N\sqrt{N}:

NNΔW\sum\vert\Delta W\vert2N/π\sqrt{2N/\pi}
10103.003.002.522.52
1001007.607.607.987.98
1000100025.0525.0525.2325.23
1000010\,00079.6079.6079.7979.79

То есть траектория винеровского процесса нигде не дифференцируема, и её длина бесконечна. Запись dWdW — обозначение, а не производная: производной у WW не существует.

Квадратичная вариация конечна и равна tt. А вот (ΔW)2\sum(\Delta W)^2 сходится:

NNсреднее (ΔW)2\sum(\Delta W)^2разброс между прогонами
10100.9090.9090.4020.402
1001001.0101.0100.1530.153
100010001.0011.0010.0430.043
1000010\,0000.9940.9940.0150.015

Не просто сходится по среднему — разброс стремится к нулю, то есть предел детерминирован. Это записывают как (dW)2=dt(dW)^2 = dt, и звучит это странно ровно до тех пор, пока не посмотреть на последний столбец.

Лемма Ито

Из (dW)2=dt(dW)^2 = dt следует, что цепное правило меняется. Если y=φ(x)y = \varphi(x), то в разложении Тейлора член со второй производной нельзя выбросить: он содержит (dx)2(dx)^2, а в нём есть g2(dW)2=g2dtg^2(dW)^2 = g^2 dt — величина первого порядка по dtdt.

dy=(φ(x)f+12φ(x)g2)дрейфdt+φ(x)gdWdy = \underbrace{\left(\varphi'(x) f + \tfrac12 \varphi''(x) g^2\right)}_{\text{дрейф}} dt + \varphi'(x)\, g\, dW

Второе слагаемое в дрейфе — поправка Ито, и её отсутствие в обычном анализе объясняется тем, что там (dx)2(dt)2(dx)^2 \sim (dt)^2 и действительно пренебрежимо.

Проверим на простейшем примере. Пусть x=Wx = W и y=W2y = W^2. Обычное цепное правило дало бы dy=2WdWdy = 2W\,dW, лемма Ито даёт dy=dt+2WdWdy = dt + 2W\,dW. Разница — то самое dtdt. Проверено на двадцати тысячах траекторий с двумя тысячами шагов:

формуласреднее y(1)y(1)должно быть
Ито: dt+2WdW\int dt + \int 2W\,dW0.9890.98911
наивная: 2WdW\int 2W\,dW0.011-0.01100

Наивная версия систематически занижает результат ровно на T=1T = 1, потому что E[W(1)2]=1\mathbb{E}[W(1)^2] = 1, а стохастический интеграл имеет нулевое среднее. Поправка Ито — не техническая деталь: без неё ответ неверен на конечную величину.

Фоккер–Планк: как движется плотность

СДУ описывает одну траекторию. Часто нужнее эволюция распределения pt(x)p_t(x), и она детерминирована:

ptt= ⁣ ⁣(fpt)+12g2Δpt\frac{\partial p_t}{\partial t} = -\nabla\!\cdot\!\big(f\, p_t\big) + \tfrac12 g^2 \Delta p_t

Формулировку достаточно понимать, а не выводить. Читается она как баланс: первое слагаемое — перенос плотности дрейфом, второе — расплывание из-за шума (это в точности уравнение теплопроводности). Значение для нас в том, что разные СДУ могут давать одну и ту же эволюцию плотности — и следующий факт этим пользуется.

Обращение времени

Вот теорема, на которой стоит вся диффузия. Если прямой процесс — это

dx=fdt+gdWdx = f\,dt + g\,dW

то процесс, идущий назад по времени и имеющий те же маргинальные плотности, есть

dx=[fg2xlogpt(x)]dt+gdWˉdx = \Big[f - g^2\, \htmlData{k=score}{\nabla_x \log p_t(x)}\Big]dt + g\, d\bar{W}

Всё, что отличает обратный процесс от прямого, — это одно слагаемое, и в нём одна незнакомая величина: logpt\nabla\log p_t. Дрейф ff и диффузия gg известны, потому что прямой процесс мы задали руками.

И вот в чём весь метод: генерация сводится к оценке score. Не к моделированию плотности, не к обучению дискриминатора, не к оценке нормировочной константы — к одной векторной функции, которая приближается сетью. Урок 040 разбирает эту функцию, урок 060 — как её обучить.

Probability-flow ОДУ

Второе следствие из того, что плотность определяется не траекториями. У того же семейства маргинальных плотностей есть детерминированное описание:

dxdt=f12g2xlogpt(x)\frac{dx}{dt} = f - \tfrac12 g^2 \nabla_x\log p_t(x)

Шума нет вовсе, а маргинальные плотности те же. Обратите внимание на коэффициент: 12\frac12 вместо 11 — это не опечатка, а ровно та компенсация, которая заменяет случайность.

Практическая ценность огромна, потому что теперь применим весь аппарат урока 020:

обратное СДУprobability-flow ОДУ
шум при сэмплированииестьнет
один вход → один выходнетда
решатели высокого порядкапочти бесполезныработают
типичное число шаговсотнидесятки
можно ли обратить сэмплированиенетда (инверсия)
разнообразие выбороквышениже

Третья строка — прямое следствие урока 020. Поставьте в виджете шум и посмотрите на два последних readout’а: разброс между траекториями против разницы между методами на той же реализации шума.

время x

шагов 16
шум σ 0
x в конце
0.11807
ошибка
1.73e-2
измеренный порядок
1.01
разброс траекторий
разница методов
0.0173
Поднимайте σ от нуля и следите за двумя последними столбцами. Разброс траекторий растёт линейно по σ, а разница между методами на той же реализации шума почти не меняется — при σ = 0.2 первая величина примерно в двадцать раз больше второй.

Процесс Орнштейна–Уленбека — простейшая СДУ с притяжением к нулю. При σ = 0 это обычное затухание, и столбец «измеренный порядок» работает как в уроке 020.

Шум выключен: это обычное ОДУ, и порядок метода измеряется как в уроке 020.

Измерено на dx=2xdt+σdWdx = -2x\,dt + \sigma\,dW при T=1T = 1 и шестидесяти четырёх шагах:

σ\sigmaразброс концов траекторий\vertЭйлер - Хойн\vert на той же реализации
00000.00430.0043
0.050.050.0260.0260.00430.0043
0.20.20.1050.1050.00430.0043
0.50.50.2630.2630.00440.0044

Правый столбец практически не меняется, левый растёт линейно. Отсюда правило, которое объясняет дизайн современных сэмплеров: если в сэмплировании есть шум, повышать порядок решателя почти бесполезно; если шума нет, это первое, что стоит сделать. Ровно поэтому DDIM (детерминированный) и получает выигрыш от методов второго порядка, а DDPM (стохастический) — нет.

Итог

  • dWdtdW \sim \sqrt{dt}: случайная часть доминирует на малых масштабах, поэтому WW нигде не дифференцируем, а (dW)2=dt(dW)^2 = dt в пределе детерминировано.
  • Лемма Ито добавляет к цепному правилу 12φg2dt\frac12\varphi'' g^2\,dt, и без этой поправки ответ неверен на конечную величину.
  • Фоккер–Планк описывает эволюцию плотности, и одну эволюцию могут давать разные процессы.
  • Обратное СДУ отличается от прямого одним слагаемым, содержащим score. Отсюда весь метод.
  • Probability-flow ОДУ даёт те же маргинальные плотности без шума — и открывает дорогу решателям высокого порядка.

Источники

Проверки

0 из 2
  1. Шум, Ито и обращение времени

    Отметьте все верные утверждения о СДУ и обращении времени.

  2. Поправка Ито

    Реализуйте ito_drift(phi, x, f, g). Пусть xx подчиняется dx=fdt+gdWdx = f\,dt + g\,dW, а y=φ(x)y = \varphi(x). Строка phi задаёт функцию: "square"x2x^2, "cube"x3x^3, "exp"exe^x, "log"lnx\ln x, "linear"3x3x. Верните [naive_drift, ito_drift, correction, diffusion]:

    • naive_drift = φ(x)f\varphi'(x)\,f — то, что дало бы обычное цепное правило;
    • ito_drift = φ(x)f+12φ(x)g2\varphi'(x)\,f + \frac12 \varphi''(x)\, g^2 — верный дрейф;
    • correction — разность первых двух, то есть 12φ(x)g2\frac12\varphi''(x)g^2;
    • diffusion = φ(x)g\varphi'(x)\, g — коэффициент при dWdW, он от поправки не зависит.

    Обратите внимание, что поправка бывает отрицательной: её знак задаёт вторая производная, а не наличие шума.

    функция ito_drift

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

    Ctrl/⌘ + Enter