Диффузия и потоки
Стохастические дифференциальные уравнения
Винеровский процесс, почему dW ~ √dt, лемма Ито и обращение времени
Уравнение с шумом
Прошлый урок работал с . Добавим шум:
Обратите внимание на дисперсию: она равна , а не . Значит стандартное отклонение приращения равно , и это одна деталь, из которой следует вся необычность стохастического исчисления.
Почему меняет всё
Сравните два масштаба при малом шаге:
| шаг | детерминированное приращение | случайное |
|---|---|---|
При измельчении шага случайная часть убывает медленнее, и на малых масштабах она доминирует. Отсюда два следствия, которые стоит проверить численно.
Полная вариация бесконечна. Сумма растёт как :
То есть траектория винеровского процесса нигде не дифференцируема, и её длина бесконечна. Запись — обозначение, а не производная: производной у не существует.
Квадратичная вариация конечна и равна . А вот сходится:
| среднее | разброс между прогонами | |
|---|---|---|
Не просто сходится по среднему — разброс стремится к нулю, то есть предел детерминирован. Это записывают как , и звучит это странно ровно до тех пор, пока не посмотреть на последний столбец.
Лемма Ито
Из следует, что цепное правило меняется. Если , то в разложении Тейлора член со второй производной нельзя выбросить: он содержит , а в нём есть — величина первого порядка по .
Второе слагаемое в дрейфе — поправка Ито, и её отсутствие в обычном анализе объясняется тем, что там и действительно пренебрежимо.
Проверим на простейшем примере. Пусть и . Обычное цепное правило дало бы , лемма Ито даёт . Разница — то самое . Проверено на двадцати тысячах траекторий с двумя тысячами шагов:
| формула | среднее | должно быть |
|---|---|---|
| Ито: | ||
| наивная: |
Наивная версия систематически занижает результат ровно на , потому что , а стохастический интеграл имеет нулевое среднее. Поправка Ито — не техническая деталь: без неё ответ неверен на конечную величину.
Фоккер–Планк: как движется плотность
СДУ описывает одну траекторию. Часто нужнее эволюция распределения , и она детерминирована:
Формулировку достаточно понимать, а не выводить. Читается она как баланс: первое слагаемое — перенос плотности дрейфом, второе — расплывание из-за шума (это в точности уравнение теплопроводности). Значение для нас в том, что разные СДУ могут давать одну и ту же эволюцию плотности — и следующий факт этим пользуется.
Обращение времени
Вот теорема, на которой стоит вся диффузия. Если прямой процесс — это
то процесс, идущий назад по времени и имеющий те же маргинальные плотности, есть
Всё, что отличает обратный процесс от прямого, — это одно слагаемое, и в нём одна незнакомая
величина:
И вот в чём весь метод: генерация сводится к оценке score. Не к моделированию плотности, не к обучению дискриминатора, не к оценке нормировочной константы — к одной векторной функции, которая приближается сетью. Урок 040 разбирает эту функцию, урок 060 — как её обучить.
Probability-flow ОДУ
Второе следствие из того, что плотность определяется не траекториями. У того же семейства маргинальных плотностей есть детерминированное описание:
Шума нет вовсе, а маргинальные плотности те же. Обратите внимание на коэффициент: вместо — это не опечатка, а ровно та компенсация, которая заменяет случайность.
Практическая ценность огромна, потому что теперь применим весь аппарат урока 020:
| обратное СДУ | probability-flow ОДУ | |
|---|---|---|
| шум при сэмплировании | есть | нет |
| один вход → один выход | нет | да |
| решатели высокого порядка | почти бесполезны | работают |
| типичное число шагов | сотни | десятки |
| можно ли обратить сэмплирование | нет | да (инверсия) |
| разнообразие выборок | выше | ниже |
Третья строка — прямое следствие урока 020. Поставьте в виджете шум и посмотрите на два последних readout’а: разброс между траекториями против разницы между методами на той же реализации шума.
время x
- x в конце
- 0.11807
- ошибка
- 1.73e-2
- измеренный порядок
- 1.01
- разброс траекторий
- —
- разница методов
- 0.0173
Процесс Орнштейна–Уленбека — простейшая СДУ с притяжением к нулю. При σ = 0 это обычное затухание, и столбец «измеренный порядок» работает как в уроке 020.
Шум выключен: это обычное ОДУ, и порядок метода измеряется как в уроке 020.
Измерено на при и шестидесяти четырёх шагах:
| разброс концов траекторий | Эйлер Хойн на той же реализации | |
|---|---|---|
Правый столбец практически не меняется, левый растёт линейно. Отсюда правило, которое объясняет дизайн современных сэмплеров: если в сэмплировании есть шум, повышать порядок решателя почти бесполезно; если шума нет, это первое, что стоит сделать. Ровно поэтому DDIM (детерминированный) и получает выигрыш от методов второго порядка, а DDPM (стохастический) — нет.
Итог
- : случайная часть доминирует на малых масштабах, поэтому нигде не дифференцируем, а в пределе детерминировано.
- Лемма Ито добавляет к цепному правилу , и без этой поправки ответ неверен на конечную величину.
- Фоккер–Планк описывает эволюцию плотности, и одну эволюцию могут давать разные процессы.
- Обратное СДУ отличается от прямого одним слагаемым, содержащим score. Отсюда весь метод.
- Probability-flow ОДУ даёт те же маргинальные плотности без шума — и открывает дорогу решателям высокого порядка.
Источники
- Song и др. — Score-Based Generative Modeling through SDEs — Диффузия как СДУ, обратное уравнение и probability-flow ОДУ
- Anderson — Reverse-time diffusion equation models — Теорема об обращении времени, откуда берётся score в обратном уравнении
- Øksendal — Stochastic Differential Equations — Аккуратное изложение: интеграл Ито, лемма Ито, Фоккер–Планк
Проверки
0 из 2Шум, Ито и обращение времени
Отметьте все верные утверждения о СДУ и обращении времени.
Поправка Ито
Реализуйте
ito_drift(phi, x, f, g). Пусть подчиняется , а . Строкаphiзадаёт функцию:"square"— ,"cube"— ,"exp"— ,"log"— ,"linear"— . Верните[naive_drift, ito_drift, correction, diffusion]:naive_drift= — то, что дало бы обычное цепное правило;ito_drift= — верный дрейф;correction— разность первых двух, то есть ;diffusion= — коэффициент при , он от поправки не зависит.
Обратите внимание, что поправка бывает отрицательной: её знак задаёт вторая производная, а не наличие шума.
Загрузка редактора…
Ctrl/⌘ + Enter