Взял предобученную авторегрессионную Qwen3-0.6B и переделал ее в блочно-диффузионную: авторегрессия между блоками по 32 токена, параллельное итеративное раскрытие внутри блока. Без изменений архитектуры, ~1 GPU-день дообучения. Дальше — главный вопрос проекта: когда диффузионная модель может выдать несколько токенов за один вызов, а когда нет.
Авторегрессия выдаёт ровно один токен за проход по модели. Блочная диффузия раскрывает внутри блока сразу несколько замаскированных позиций — если они не мешают друг другу.
Пять стратегий декодирования, 30 задач (13 код / 12 структуры / 5 проза), greedy, max_new_tokens=128. Качество — LLM-as-a-judge. Ни один из методов не выбивается за фронтир: каждый лишь выбирает на нём точку.
Обратная связь между качеством и скоростью. Самый быстрый сэмплер (Dual Anchor, 1.98 т/ф) — самый низкокачественный (5.0/10). Самый качественный (Adaptive, 9.0/10) — почти самый медленный.
Single Anchor + Fixed — единственная точка под фронтиром: медленнее и хуже одновременно. Честная неудача, оставлена в репозитории как отрицательный результат.
Все пять сэмплеров ранжируются одинаково: код быстрее структур, структуры быстрее прозы. А на прозе два из них уходят ниже 1.0 — то есть делают больше проходов, чем выдают токенов, и работают медленнее обычной авторегрессии.
Одна идея, ради которой стоило всё это делать.
Зафиксировать k замаскированных позиций за один шаг — значит обойтись с их предсказаниями как с квазинезависимыми маргиналами. Маскированные токены всё же взаимодействуют через двунаправленное внимание, но внимание между двумя масками заметно слабее, чем внимание к уже конкретному токену. Без промежуточного форварда, который зафиксирует значение токена, одновременная фиксация безопасна только там, где суммарная корреляция между позициями мала.
Раскрытие ключевого токена — ключевого слова, скобки — сразу сужает продолжение до узкого подмножества текстов с высоким пересечением по токенам. Мягкого взаимодействия масок хватает, чтобы параллельно заполнить бойлерплейт и синтаксис.
Раскрытие токена сужает контекст, но множество валидных продолжений остаётся большим и разнородным. Маски набирают фрагменты из разных траекторий и склеивают два стиля в сломанную грамматику.
Уверенность на токен держится около 0.6 и никогда не схлопывается: размазанный маргинал означает множество продолжений, которые модель считает валидными.
Архитектура не менялась — только маска внимания, лосс и данные.
Модель за один форвард видит [x_t ; x_0] — зашумлённую копию и чистую. Кастомная маска: зашумлённый поток смотрит двунаправленно внутри своего блока и строго назад на предыдущие, чистый — причинно.
Логит на позиции i-1 предсказывает токен i — ровно как в AR. Именно это делает адаптацию дешёвой: голова модели продолжает делать то, чему училась на претрейне.
Вместо одного [MASK] позиция p маскируется MASK_(p mod 32) — слот "знает" своё место в блоке через identity токена. Переиспользованы неиспользуемые строки эмбеддингов, без resize.
Обучение не на естественном мультимодальном тексте, а на одном жадном ответе учителя на промпт помогает быстрее снижать энтропию возможных продолжений текста.
Три отрицательных результата, каждый измерил что-то полезное.
Диффузионная модель драфтит блок, её же AR-поток верифицирует слева направо. В лучшем случае — качество AR на скорости диффузии. На практике драфт почти не совпадает с AR-путём, верификатор принимает ~1 токен за раунд. Ускорения нет, KL-дивергенция между учителем и учеником слишком высокая.
Верные, но неуверенные токены осциллируют: снова маскируются и демаскируются, сжигая форварды. Помогло затухающее расписание ремаска и лимит на токен.
Пытался отделить "модель уплывает от своего контекста" от "модель не умеет параллелить глубокий контент", подавая идеальный префикс учителя. Неубедительно: даже с чистым префиксом совпадение с учителем 10–40%, потому что модель не запомнила обучающую выборку — что возвращает к "мало обучения".
Полная таблица бенчмарка: 30 задач, 150 прогонов.
| Сэмплер | т/ф | качество | код | структуры | проза | ср. время |
|---|
Проект исследовательский: цель была не сильная модель на 0.6B, а работающая AR→диффузия адаптация с нуля на одной GPU и честный замер компромисса скорость↔качество. Модель недообучена — на бюджете в один GPU-день она собирает корректное тело функции, но ошибается в примерах и в логике; это ограничение размера и объёма обучения, а не механизма диффузии.