Диффузия и потоки
Flow matching
Прямые пути вместо кривых — и почему это меняет число шагов, а не качество
Сменить вопрос
Диффузия строит путь от данных к шуму физическим процессом и затем его обращает. Flow matching задаёт вопрос иначе: какой путь мы хотели бы? — и обучает поле скоростей, которое по нему ведёт.
Простейший разумный ответ: прямая.
Здесь — шум, — данные. Обратите внимание на скорость: она не зависит от . Вдоль всего пути она одна и та же, и это ровно то, что означает «прямая» — постоянная скорость и нулевая кривизна.
Цель обучения
Опять обычный MSE, и снова та же логика, что в уроке 060: сеть учится предсказывать величину, известную только на обучении (пара известна, потому что мы её сами составили), и в оптимуме выдаёт маргинальное поле скоростей — среднее по всем парам, проходящим через данную точку.
Стоит проговорить, что здесь усредняется. Через точку проходит много пар, и их скорости различны; сеть выдаёт их среднее. Значит маргинальное поле не прямое — прямыми были условные пути, а усреднение их искривляет. Это важная оговорка, и урок 110 покажет, что с ней делают.
Насколько прямее
Сравните два семейства путей. Смотрите на «кривизну» — отношение длины пути к прямому расстоянию — и на ошибку при малом числе шагов.
- длина пути
- 2.83
- прямое расстояние
- 2.83
- кривизна
- ×1
- ошибка ломаной
- 4.4e-16
Кривизна равна единице: путь — отрезок, и ломаная из любого числа звеньев совпадает с ним точно.
Разница читается прямо: у прямого пути ошибка дискретизации тождественно нулевая, потому что любая точка ломаной лежит на самом пути. У кривого — растёт при уменьшении числа шагов.
Отдельно стоит заметить, что кривизна диффузионного пути зависит от пары концов. Для показанных трёх пар она около , а для пары, где шум и данные почти противоположны (), путь оказывается почти прямым — кривизна . Причина геометрическая: при таких концах обе координаты пути пропорциональны одному и тому же вектору, и кривая вырождается в отрезок. То есть «диффузионные пути кривые» — утверждение о типичной паре, а не о каждой.
Здесь нужна честная оговорка, и она существенна. Нулевая ошибка относится к условному пути — тому, который мы задали, зная обе точки. Сэмплер идёт по маргинальному полю, а оно, как сказано выше, кривое. Так что «flow matching генерирует за один шаг» — неверно; верно то, что его пути существенно прямее, и это переводится в меньшее число шагов при том же качестве.
Что общего с диффузией
Больше, чем кажется. Оба метода:
- задают путь от шума к данным явной формулой;
- обучают сеть предсказывать нечто, вычислимое по паре , обычным MSE;
- полагаются на то, что оптимум MSE — условное среднее;
- на генерации решают ОДУ (или СДУ) численно.
Более того, диффузию можно записать как flow matching с другим путём: вместо взять . Это и есть та кривая, которую рисует виджет во втором режиме.
| диффузия | flow matching | |
|---|---|---|
| путь | задан физическим процессом | выбран нами |
| коэффициенты | , | , |
| сумма квадратов коэффициентов | не единица | |
| что предсказывает сеть | (или , или score) | скорость |
| кривизна условного пути | больше единицы | ровно единица |
| шагов на генерацию | десятки–сотни | единицы–десятки |
Третья строка стоит внимания: у flow matching масштаб вдоль пути не сохраняется — при дисперсия равна вместо единицы. Это не ошибка, а другое соглашение; сеть просто видит входы разного масштаба, и нормировка внутри неё это разбирает.
Rectified flow
Оговорка про кривое маргинальное поле имеет красивое решение. Обучим модель, сгенерируем ею пары и обучим новую модель на этих парах. Теперь пары не случайны: каждая точка шума сопоставлена с тем результатом, к которому её приводит первая модель. Пересечений путей меньше, усреднение искажает слабее, и маргинальное поле выпрямляется.
Процедуру можно повторять. После одного-двух проходов генерация за несколько шагов действительно становится возможной — и это уже не свойство постановки, а результат отдельной работы по спрямлению.
Итог
- Flow matching выбирает путь, а не выводит его: линейная интерполяция даёт постоянную скорость.
- Цель — MSE по скорости, устроенный так же, как MSE по шуму в диффузии.
- Условные пути прямые точно; маргинальное поле — нет, потому что усреднение искривляет.
- Диффузия — тот же метод с другим путём, и это видно по сравнению кривизны в виджете.
- Rectified flow спрямляет маргинальное поле переобучением на собственных парах.
Источники
- Lipman и др. — Flow Matching for Generative Modeling — Исходная формулировка и условная цель
- Liu и др. — Rectified Flow — Спрямление путей и почему это уменьшает число шагов
- Esser и др. — Scaling Rectified Flow Transformers for High-Resolution Image Synthesis — Flow matching в промышленной модели
Проверки
0 из 2Прямые пути и их пределы
Отметьте все верные утверждения о flow matching.
Геометрия двух путей
Реализуйте
path_geometry(x0, y0, x1, y1, t). Точка — шум, — данные. Верните[flow_x, flow_y, diffusion_x, diffusion_y, curvature]:flow_x,flow_y— линейный путь в моментt;diffusion_x,diffusion_y— путь диффузии , где берётся из косинусного расписания, прочитанного назад по времени: , , ;curvature— длина диффузионного пути, делённая на прямое расстояние между концами. Длину считайте ломаной по двум тысячам равных отрезков по от до — так посчитан эталон.
Проверить себя можно так: линейный путь при обязан дать середину отрезка, а
curvature— быть не меньше единицы при любых концах.Загрузка редактора…
Ctrl/⌘ + Enter