DiffusionNFT: Online Diffusion Reinforcement with Forward Process [1/2]
Сегодня разберём свежую статью из мира RL для диффузионок — Diffusion NFT от NVIDIA, представленную на ICLR 2026.
В сообществе доминируют два подхода к RL-дообучению диффузионных моделей: офлайн-обучение на предпочтениях (DPO-style) и онлайн-GRPO — де-факто стандарт в text-to-image-моделях продакшен-уровня.
У обоих есть проблемы. У DPO — неустойчивый objective, офлайновость и необходимость собирать большие датасеты с человеческой разметкой. У GRPO — неудобность: нужно хранить траектории всех генераций в группе и жёстко привязываться к определённому виду семплера.
Авторы из NVIDIA предложили метод, который решает проблемы GRPO, при этом сходится быстрее и позволяет «вшить» CFG прямо в результирующую модель.
Идея — делать RL не на обратном процессе (как в GRPO), а на прямом. Так родился DiffusionNFT (Diffusion Negative-aware FineTuning). Вместо policy gradient метод напрямую оптимизирует форвард-процесс через flow matching objective. Смысл в том, чтобы задать контрастное «направление улучшения» между двумя неявными политиками, обученными на позитивных и негативных семплах (по реворду), и двигаться в сторону позитивной политики, не трогая сам процесс семплирования.
Плюсы такой формулировки:
🔴работает с любыми солверами, а не только с SDE первого порядка;
🔴не нужно хранить целые траектории семплирования — только чистые картинки;
🔴минимальные изменения в существующем коде обучения.
Технически это устроено так: есть претрейн policy π_old и датасет промптов. На каждой итерации семплим K картинок по промпту и оцениваем каждую скалярным reward r ∈ [0,1] — это «вероятность оптимальности» картинки. Каждая картинка с вероятностью r попадает в «позитивный» датасет D+, иначе — в «негативный» D−. При бесконечном числе семплов D+ соответствует implicit policy π+ (условная на успех), D− — implicit policy π− (условная на неуспех). Авторы показывают, что всегда верно π+ ≻ π_old ≻ π−.
Наивный вариант — Rejection FineTuning (RFT): тренировать модель только на D+. Работает, но не использует негативные данные, и чистое обучение на позитивах приводит к коллапсу.
Ключевая идея — ввести «направление улучшения» ∆ между π_old и целевой policy, по аналогии с гайденсом (как в CFG):
v* = v_old + (1/β)·∆
где, β — сила гайденса.
Теорема авторов показывает, что ∆ можно эквивалентно выразить через любую пару {v_old, v+, v−}:
∆ = (1−α)·(v_old − v−) = α·(v+ − v_old)
где α ∈ [0,1] — скаляр, зависящий от реворд-статистики. То есть направление к «хорошей» политике можно получить и через контраст с «плохой» политикой — они пропорциональны друг другу.
Главный трюк. Вместо обучения двух отдельных моделей v+_θ и v−_θ, авторы параметризуют их через одну и ту же сеть vθ:
v+_θ = (1−β)·v_old + β·vθ — implicit positive policy
v−_θ = (1+β)·v_old − β·vθ — implicit negative policy
И обучают на единый лосс:
L(θ) = E[ r·‖v+_θ(x_t,c,t) − v‖² + (1−r)·‖v−_θ(x_t,c,t) − v‖² ]
На позитивных семплах (вес r) модель обучается через ветку implicit positive policy; на негативных (вес 1−r) — через implicit negative policy, но обе ветки завязаны на одну и ту же сеть vθ. При достаточном количестве данных и капасити оптимум этого лосса даёт нужное направление улучшения:
vθ* = v_old + (2/β)·∆
По сути это обычный supervised диффузионный лосс с двумя ветками для позитивных и негативных примеров — но при этом даёт полноценный RL-эффект.
Во второй части разберём, почему это круто и какие результаты получились.
Разбор подготовил ❣ Валерий Старцев
CV Time
Сегодня разберём свежую статью из мира RL для диффузионок — Diffusion NFT от NVIDIA, представленную на ICLR 2026.
В сообществе доминируют два подхода к RL-дообучению диффузионных моделей: офлайн-обучение на предпочтениях (DPO-style) и онлайн-GRPO — де-факто стандарт в text-to-image-моделях продакшен-уровня.
У обоих есть проблемы. У DPO — неустойчивый objective, офлайновость и необходимость собирать большие датасеты с человеческой разметкой. У GRPO — неудобность: нужно хранить траектории всех генераций в группе и жёстко привязываться к определённому виду семплера.
Авторы из NVIDIA предложили метод, который решает проблемы GRPO, при этом сходится быстрее и позволяет «вшить» CFG прямо в результирующую модель.
Идея — делать RL не на обратном процессе (как в GRPO), а на прямом. Так родился DiffusionNFT (Diffusion Negative-aware FineTuning). Вместо policy gradient метод напрямую оптимизирует форвард-процесс через flow matching objective. Смысл в том, чтобы задать контрастное «направление улучшения» между двумя неявными политиками, обученными на позитивных и негативных семплах (по реворду), и двигаться в сторону позитивной политики, не трогая сам процесс семплирования.
Плюсы такой формулировки:
🔴работает с любыми солверами, а не только с SDE первого порядка;
🔴не нужно хранить целые траектории семплирования — только чистые картинки;
🔴минимальные изменения в существующем коде обучения.
Технически это устроено так: есть претрейн policy π_old и датасет промптов. На каждой итерации семплим K картинок по промпту и оцениваем каждую скалярным reward r ∈ [0,1] — это «вероятность оптимальности» картинки. Каждая картинка с вероятностью r попадает в «позитивный» датасет D+, иначе — в «негативный» D−. При бесконечном числе семплов D+ соответствует implicit policy π+ (условная на успех), D− — implicit policy π− (условная на неуспех). Авторы показывают, что всегда верно π+ ≻ π_old ≻ π−.
Наивный вариант — Rejection FineTuning (RFT): тренировать модель только на D+. Работает, но не использует негативные данные, и чистое обучение на позитивах приводит к коллапсу.
Ключевая идея — ввести «направление улучшения» ∆ между π_old и целевой policy, по аналогии с гайденсом (как в CFG):
v* = v_old + (1/β)·∆
где, β — сила гайденса.
Теорема авторов показывает, что ∆ можно эквивалентно выразить через любую пару {v_old, v+, v−}:
∆ = (1−α)·(v_old − v−) = α·(v+ − v_old)
где α ∈ [0,1] — скаляр, зависящий от реворд-статистики. То есть направление к «хорошей» политике можно получить и через контраст с «плохой» политикой — они пропорциональны друг другу.
Главный трюк. Вместо обучения двух отдельных моделей v+_θ и v−_θ, авторы параметризуют их через одну и ту же сеть vθ:
v+_θ = (1−β)·v_old + β·vθ — implicit positive policy
v−_θ = (1+β)·v_old − β·vθ — implicit negative policy
И обучают на единый лосс:
L(θ) = E[ r·‖v+_θ(x_t,c,t) − v‖² + (1−r)·‖v−_θ(x_t,c,t) − v‖² ]
На позитивных семплах (вес r) модель обучается через ветку implicit positive policy; на негативных (вес 1−r) — через implicit negative policy, но обе ветки завязаны на одну и ту же сеть vθ. При достаточном количестве данных и капасити оптимум этого лосса даёт нужное направление улучшения:
vθ* = v_old + (2/β)·∆
По сути это обычный supervised диффузионный лосс с двумя ветками для позитивных и негативных примеров — но при этом даёт полноценный RL-эффект.
Во второй части разберём, почему это круто и какие результаты получились.
Разбор подготовил ❣ Валерий Старцев
CV Time