Авторегрессия в стандартной постановке предсказывается следующий токен на основе предыдущих, а маскированная диффузия - вероятность
[MASK] токена стать токеном из словаря при условии окружающих токенов. Авторегрессия предсказывает по токену за раз, диффузия может сразу несколько, но для лучшего качества требуется обыкновенно несколько прогонов через модель. Planned diffusion работает следующим образом:
1️⃣ Сначала авторегрессионно генерируется некий контекст и черновик для дальнейшей генерации. Предполагается, что есть несколько ветвей рассуждения, которые можно генерировать независимо, и для каждой из авторегрессия предсказывает сколько токенов надо расшумить.
2️⃣ Затем диффузия, имея контекст и заданное количество [MASK] токенов, генерирует какую-то ветвь.
3️⃣Затем происходит синхронизация и генерируется заключение.
Контекст размечается специальными
<topic> (</topic>) тегами. Асинхронные параллельные блоки <async> (</async>) тегами. Точка синхронизации - <sync> тегом.Рассматривают два случая - когда токены в параллельных ветвях не смотрят 🙈 друг на друга (
PD), и когда смотрят 👀 (PD-DA).Обучение происходит следующим образом - в последовательности в нужном формате (с разметкой) зашумляют до некоторого уровня ветви рассуждения, и модель учится одновременно на авторегрессионный и диффузионный лосс (то есть предсказывать правильно план и рассуждения).
На инференсе при авторегрессионой генерации можно использовать сгенерированный ранее KV-кэш, но для текущего шага диффузии из-за full attention все токены в ветви рассуждения генерируются по новой.
При декодировании диффузией используют энтропийный порядок - декодируются первыми те токены, где модель более уверенна.