37 / 37 · Продвинутая генерация
Неавторегрессионная генерация и текстовая диффузия
Порождать все позиции сразу двунаправленной моделью, оставлять уверенные предсказания, маскировать остальные и повторять: взгляд на этот цикл как на маскированную дискретную диффузию, её целевая функция обучения, процедура генерации с блоками, шагами, повторным маскированием по уверенности и classifier-free guidance, а также сравнение с декодированием слева направо по тому, что даёт каждое.
GPT и авторегрессионное языковое моделирование · BERT и маскированное языковое моделирование · Оценка LLM
На этой странице 10
Каждый генератор в этом курсе порождал текст слева направо: один токен за вызов модели, каждый — при условии всех предыдущих, вызовов на токенов, и никакой возможности исправить уже написанный токен. Заметка о BERT обучала модель, делающую другое — заполнять замаскированные позиции с обеих сторон, — и не могла ею порождать, потому что не было процедуры, ведущей от пустоты к полной последовательности. Эта заметка такую процедуру даёт. Она превращает предсказатель замаскированных токенов в генератор, применяя его многократно, и в результате получается дискретный аналог диффузионных моделей из курса о генеративных моделях.
Обозначения. Последовательность токенов ; токен маски ; уровень шума ; частично замаскированная последовательность ; модель , предсказывающая чистый токен на позиции по всей замаскированной последовательности. Промпт занимает первые позиции и никогда не маскируется.
Базовый вариант: авторегрессионное декодирование#
, сэмплируемое по одному множителю за раз. Его свойства, из заметки о GPT: обучение параллельно благодаря каузальной маске; генерация последовательна; каждый шаг читает кэш предыдущих; представление позиции никогда не видит . Порождение токенов стоит вызовов модели, а ошибка на шаге 10 обусловливает все последующие шаги.
Первая попытка распараллелить предсказывала все токены перевода независимо за один проход (Gu et al., 2018). Это быстро, но выходы несвязны: каждая позиция сэмплирует свой правдоподобный токен, не зная, что выбрали соседи (a man на позиции 2 и are на позиции 3), — это проблема мультимодальности (multimodality problem). Исправлением стала итерация: предсказать всё, оставить часть и заново предсказать остальное при условии оставленного (Ghazvininejad et al., 2019). Маскированная диффузия — та же идея с вероятностной целевой функцией обучения.
Прямой и обратный процессы#
Прямой. При уровне шума каждый токен независимо заменяется на с вероятностью :
При последовательность чистая; при она состоит из одних масок. В отличие от гауссова прямого процесса для изображений, замаскированный токен не несёт остаточной информации и прямым процессом никогда не раскрывается; пространство состояний — словарь плюс один поглощающий символ.
Обратный. Модель получает и выдаёт для каждой замаскированной позиции распределение по словарю. При обучении сэмплируется равномерно, маскируется соответственно и минимизируется кросс-энтропия на замаскированных позициях с весом :
Это функция потерь маскированного языкового моделирования BERT со случайной долей маскирования вместо фиксированных 15% и весом . Именно вес делает целевую функцию оценкой правдоподобия: Ou et al. (2025) и Nie et al. (2025) показывают, что — верхняя оценка отрицательного логарифма правдоподобия , аналог вариационной оценки из заметки об обучении DDPM, так что уменьшение функции потерь поднимает оценку правдоподобия данных. Вес действует на каждый замаскированный токен и больше всего при малых : токен, замаскированный при , весит в десять раз больше, чем замаскированный при . Он компенсирует число замаскированных токенов. При уровне замаскировано около позиций, так что без веса сильно замаскированные входы давали бы большую часть слагаемых функции потерь; с весом ожидаемое взвешенное число равно при любом . Для : один замаскированный токен при с весом 10 или девять при с весом — в обоих случаях 10. Вес выравнивает число, а не трудность: насколько трудно предсказать замаскированный токен, по-прежнему зависит от того, какая часть его контекста видна. Архитектура — трансформер с полным (некаузальным) вниманием, устройство энкодера из заметки о семействах моделей; LLaDA обучает такую модель на 8 млрд параметров с нуля на этой целевой функции. В разобранном ниже примере используется LLaDA-MoE — вариант со смесью экспертов (mixture of experts) на 7 млрд параметров, из которых на каждый токен активны около 1 млрд.
Маскирование и предсказание
Генерация#
Сэмплер, сведённый к шагам, для промпта длины и длины генерации :
- Построить длины .
- Разбить позиций на блоки длины (здесь 32) и обрабатывать блоки слева направо; внутри текущего блока позиции порождаются параллельно, а более поздние блоки остаются замаскированными. Это полуавторегрессионный компромисс: полностью параллельная генерация по позициям возможна, но на длинных выходах ухудшает качество.
- Каждый блок получает шагов (128 шагов при и дают 32 шага на блок). На каждом шаге:
- один раз прогнать модель по всей последовательности и взять в каждой замаскированной позиции предсказанный токен (с шумом Гумбеля, добавленным к логитам, при сэмплировании с температурой выше 0);
- вычислить для каждой замаскированной позиции уверенность (confidence) — вероятность выбранного токена (повторное маскирование по низкой уверенности) или случайное число (случайное повторное маскирование);
- открыть самых уверенных позиций текущего блока, а остальные оставить замаскированными; берётся из расписания, фиксируемого в начале блока: его замаскированные позиции делятся поровну между его шагами (остаток уходит первым шагам), чтобы блок опустел точно по расписанию;
- Остановиться, когда заполнены все позиции. Позиции после токена конца текста — заполнение до фиксированной длины.
Итеративное раскрытие: двенадцать позиций за четыре параллельных шага
Раскрытие по уверенности — эвристика с ясным обоснованием: модель сначала фиксирует то, в чём уверена больше всего, и каждое решение становится условием следующего прохода, так что трудные позиции решаются последними и с наибольшим контекстом. В статьях анализируется вариант со случайным повторным маскированием; вариант с уверенностью эмпирически работает лучше.
Classifier-free guidance переносится из диффузии изображений. Модель запускается дважды — с промптом и с замаскированным промптом (безусловное предсказание) — и результат экстраполируется: на логитах, где — масштаб guidance ( — обычная модель). Это усиливает следование промпту ценой двойных вычислений на шаг.
Разобранный пример#
Промпт: Lily can run 12 kilometers per hour for 4 hours. After that, she runs 6 kilometers per hour. How many kilometers can she run in 8 hours? в чат-шаблоне. , , , температура 0, повторное маскирование по низкой уверенности, без guidance. Выход:
Lily runs 12 kilometers per hour for 4 hours, so she runs a total of 12 * 4 = 48 kilometers in the first 4 hours. After that, she runs 6 kilometers per hour for 4 hours, so she runs a total of 6 * 4 = 24 kilometers in the next 4 hours. Therefore, in 8 hours, Lily can run a total of 48 + 24 = 72 kilometers. The answer is: 72
а затем токен конца реплики и заполнение. Ответ верный, и его породила модель, которая никогда не видела свой левый контекст как «прошлое». Стоит посмотреть на арифметику расписания: при шагах на 128 позиций каждый проход открывает ровно один токен (32 позиции блока за 32 шага), так что этому примеру понадобилось 128 полных прямых проходов — столько же, сколько декодирование слева направо, причём каждый проход идёт по всей последовательности, а не по одному токену с кэшем. Параллельное ускорение возникает только при : 32 шага открывали бы по 4 токена за проход и вчетверо сократили бы число вызовов модели ценой некоторой потери качества, которую статьи измеряют на бенчмарках, а этот один пример измерить не может.
Авторегрессионная и диффузионная генерация#
| Авторегрессионная | Маскированная диффузия | |
|---|---|---|
| Порядок | слева направо, фиксированный | любой; выбирается по уверенности, блоки по желанию |
| Вызовов модели на токенов | , задаётся; ради скорости | |
| Контекст предсказания | только слева | обе стороны уже построенной последовательности |
| Исправление токена | невозможно | замаскированные позиции заново предсказываются на каждом шаге; зафиксированные — нет (в базовом сэмплере) |
| Стоимость вызова | одна новая позиция с KV-кэшем | вся последовательность, без кэша |
| Длина выхода | открытая, до токена конца | фиксированный бюджет с заполнением |
| Вставка и редактирование | нужно специальное обучение | естественны: замаскировать фрагмент, который нужно переписать |
| Правдоподобие | точное, по цепному правилу | оценка |
| Параметры декодирования | температура, top-, лучевой поиск | шаги, размер блока, правило повторного маскирования, guidance |
| Зрелость | стандарт в продакшене | исследования и первые внедрения |
Что даёт диффузия: управляемый компромисс между числом вызовов и качеством, двунаправленное обусловливание и редактирование маскированием. Чего стоит: прохода по всей последовательности на каждом шаге без кэша, фиксированной длины, которую нужно угадать, и выхода, полученного оптимизацией оценки, а не вероятности по цепному правилу. Выгоден ли этот обмен, зависит от длин, оборудования и требований к качеству; статьи сообщают о конкурентных результатах на бенчмарках при сопоставимом масштабе, и область быстро движется.
Что изменилось#
| BERT (MLM) | Маскированная диффузионная LM | |
|---|---|---|
| Доля маскирования | фиксированные 15% | |
| Вес в функции потерь | нет | |
| Смысл целевой функции | обучение представлений | оценка правдоподобия |
| Может порождать | нет | да, итеративным раскрытием |
| Архитектура | энкодер | энкодер (то же устройство), масштабированный |
Ограничения#
- Нет кэша. Каждый шаг заново кодирует всю последовательность; стоимость шага , и длинные промпты делают шаги дорогими.
- Фиксированная длина. — гиперпараметр; слишком короткая обрезает, слишком длинная заполняется и тратит шаги впустую.
- Зафиксированные токены окончательны в базовом сэмплере, так что ранняя уверенная ошибка сохраняется; сэмплеры, повторно маскирующие зафиксированные токены, существуют и требуют больше шагов.
- Качество в зависимости от числа шагов — кривая, измеряемая на бенчмарках, а не гарантия; один верный пример о ней ничего не говорит.
- Инструменты. Ограниченное декодирование, спекулятивные приёмы, движки для развёртывания и вся экосистема вокруг авторегрессионных моделей в основном пока не переносятся.
Что нужно запомнить#
- Маскированная диффузия: прямой процесс маскирует каждый токен с вероятностью ; модель предсказывает замаскированные токены по всей последовательности; функция потерь — маскированная кросс-энтропия с весом , ограничивающая отрицательный логарифм правдоподобия.
- Генерация: старт со всех масок, повторные полные проходы, открытие самых уверенных позиций за проход, по желанию в блоках слева направо и с classifier-free guidance.
- Ускорение требует, чтобы шагов было порождаемых токенов; при равенстве метод делает столько же вызовов, сколько декодирование слева направо, и каждый дороже.
- По сравнению с авторегрессией: двунаправленный контекст, редактирование маскированием, выбираемое число шагов; против — нет KV-кэша, фиксированная длина, оценка вместо точного правдоподобия.
Ноутбук#
Ноутбук об агентах и диффузии, ячейка 19. Номера ячеек считают все ячейки, включая текстовые, начиная с 1. Приведённые числа взяты из прогона, сохранённого в курсе; у ячеек, изменённых с тех пор под текущие версии библиотек, сохранённого выхода нет. Ячейка определяет add_gumbel_noise (сэмплирование с температурой на логитах), get_num_transfer_tokens (число открываемых на каждом шаге токенов, опустошающее блок по расписанию) и generate — сэмплер из раздела «Генерация» (блоки, шаги, необязательная ветка guidance, которая склеивает условный и безусловный входы, правила повторного маскирования low_confidence и random и перенос top- на блок); загружает inclusionAI/LLaDA-MoE-7B-A1B-Instruct, маскированную диффузионную модель со смесью экспертов, обученную на инструкциях, с её токенизатором и чат-шаблоном; и запускает промпт про Лили с steps=128, gen_length=128, block_length=32, temperature=0., cfg_scale=0.. Напечатанный выход — тот, что приведён выше, и заканчивается токеном конца реплики модели и заполнением токенами конца текста.
Дальше#
Это последняя заметка курса. Путь шёл от байтов к токенам, от счётчиков к векторам, от рекуррентности к вниманию, от предобучения к адаптации и от отдельных моделей к системам вокруг них; последняя заметка отказалась от единственного допущения, общего для всех генераторов до неё.
Литература#
- S. Nie, F. Zhu, Z. You, X. Zhang, J. Ou, J. Hu, J. Zhou, Y. Lin, J.-R. Wen, C. Li. Large Language Diffusion Models. arXiv, 2025. LLaDA: целевая функция, сэмплер с повторным маскированием по низкой уверенности и сравнение с авторегрессионными моделями на бенчмарках.
- J. Ou, S. Nie, K. Xue, F. Zhu, J. Sun, Z. Li, C. Li. Your Absorbing Discrete Diffusion Secretly Models the Conditional Distributions of Clean Data. ICLR, 2025. Оценка правдоподобия для маскированной диффузии.
- J. Austin, D. D. Johnson, J. Ho, D. Tarlow, R. van den Berg. Structured Denoising Diffusion Models in Discrete State-Spaces. NeurIPS, 2021. D3PM, включая поглощающий (маскирующий) процесс.
- A. Lou, C. Meng, S. Ermon. Discrete Diffusion Modeling by Estimating the Ratios of the Data Distribution. ICML, 2024.
- J. Gu, J. Bradbury, C. Xiong, V. O. K. Li, R. Socher. Non-Autoregressive Neural Machine Translation. ICLR, 2018.
- M. Ghazvininejad, O. Levy, Y. Liu, L. Zettlemoyer. Mask-Predict: Parallel Decoding of Conditional Masked Language Models. EMNLP, 2019.
- J. Ho, T. Salimans. Classifier-Free Diffusion Guidance. NeurIPS Workshop, 2021.