[R&D · GENERATIVE ARCHITECTURE CASE STUDY]

Где параллельная генерация действительно помогает

Взял предобученную авторегрессионную Qwen3-0.6B и переделал ее в блочно-диффузионную: авторегрессия между блоками по 32 токена, параллельное итеративное раскрытие внутри блока. Без изменений архитектуры, ~1 GPU-день дообучения. Дальше — главный вопрос проекта: когда диффузионная модель может выдать несколько токенов за один вызов, а когда нет.

[01] Что вообще значит "токенов за форвард"

Авторегрессия выдаёт ровно один токен за проход по модели. Блочная диффузия раскрывает внутри блока сразу несколько замаскированных позиций — если они не мешают друг другу.

Авторегрессия
форвардов: 0
Блочная диффузия
форвардов: 0
блок 32 токена · тот же результат, вдвое меньше проходов

[02] Главный результат: скорость и качество лежат на одном фронтире

Пять стратегий декодирования, 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 — единственная точка под фронтиром: медленнее и хуже одновременно. Честная неудача, оставлена в репозитории как отрицательный результат.

[03] Потолок ставит домен, а не метод

Все пять сэмплеров ранжируются одинаково: код быстрее структур, структуры быстрее прозы. А на прозе два из них уходят ниже 1.0 — то есть делают больше проходов, чем выдают токенов, и работают медленнее обычной авторегрессии.

код структуры (JSON/SQL/MD) проза
1.0 — уровень авторегрессии

[04] Почему так выходит

Одна идея, ради которой стоило всё это делать.

Зафиксировать k замаскированных позиций за один шаг — значит обойтись с их предсказаниями как с квазинезависимыми маргиналами. Маскированные токены всё же взаимодействуют через двунаправленное внимание, но внимание между двумя масками заметно слабее, чем внимание к уже конкретному токену. Без промежуточного форварда, который зафиксирует значение токена, одновременная фиксация безопасна только там, где суммарная корреляция между позициями мала.

кодузкое многообразие

Раскрытие ключевого токена — ключевого слова, скобки — сразу сужает продолжение до узкого подмножества текстов с высоким пересечением по токенам. Мягкого взаимодействия масок хватает, чтобы параллельно заполнить бойлерплейт и синтаксис.

прозаширокое многообразие

Раскрытие токена сужает контекст, но множество валидных продолжений остаётся большим и разнородным. Маски набирают фрагменты из разных траекторий и склеивают два стиля в сломанную грамматику.

0.6уверенность не заостряется

Уверенность на токен держится около 0.6 и никогда не схлопывается: размазанный маргинал означает множество продолжений, которые модель считает валидными.

[05] Как устроена адаптация

Архитектура не менялась — только маска внимания, лосс и данные.

01Двухпотоковое обучение

Модель за один форвард видит [x_t ; x_0] — зашумлённую копию и чистую. Кастомная маска: зашумлённый поток смотрит двунаправленно внутри своего блока и строго назад на предыдущие, чистый — причинно.

02Сдвинутый лосс

Логит на позиции i-1 предсказывает токен i — ровно как в AR. Именно это делает адаптацию дешёвой: голова модели продолжает делать то, чему училась на претрейне.

03Позиционные маск-токены

Вместо одного [MASK] позиция p маскируется MASK_(p mod 32) — слот "знает" своё место в блоке через identity токена. Переиспользованы неиспользуемые строки эмбеддингов, без resize.

04Жадная самодистилляция

Обучение не на естественном мультимодальном тексте, а на одном жадном ответе учителя на промпт помогает быстрее снижать энтропию возможных продолжений текста.

[06] Что не сработало

Три отрицательных результата, каждый измерил что-то полезное.

-Self-speculative decoding

Диффузионная модель драфтит блок, её же AR-поток верифицирует слева направо. В лучшем случае — качество AR на скорости диффузии. На практике драфт почти не совпадает с AR-путём, верификатор принимает ~1 токен за раунд. Ускорения нет, KL-дивергенция между учителем и учеником слишком высокая.

-Ремаскирование без правила остановки

Верные, но неуверенные токены осциллируют: снова маскируются и демаскируются, сжигая форварды. Помогло затухающее расписание ремаска и лимит на токен.

-Проба на exposure bias

Пытался отделить "модель уплывает от своего контекста" от "модель не умеет параллелить глубокий контент", подавая идеальный префикс учителя. Неубедительно: даже с чистым префиксом совпадение с учителем 10–40%, потому что модель не запомнила обучающую выборку — что возвращает к "мало обучения".

[07] Замеры и условия

Полная таблица бенчмарка: 30 задач, 150 прогонов.

Сэмплер т/ф качество код структуры проза ср. время

Условия и ограничения

База
Qwen3-0.6B, авторегрессионный претрейн
Адаптация
блочная диффузия, блок 32 токена, ~1 GPU-день на прогон
Железо
NVIDIA RTX 5090
Бенчмарк
30 задач: 13 код, 12 структуры, 5 проза · greedy · max_new_tokens=128
Качество
LLM-as-a-judge, оценка 0–10

Проект исследовательский: цель была не сильная модель на 0.6B, а работающая AR→диффузия адаптация с нуля на одной GPU и честный замер компромисса скорость↔качество. Модель недообучена — на бюджете в один GPU-день она собирает корректное тело функции, но ошибается в примерах и в логике; это ограничение размера и объёма обучения, а не механизма диффузии.