На небесах сейчас только и разговоров о новой модели ОпенАИ - Астра, рекурентных блоках - универсальный трансформер и вот это вот всё
Я делаю примерно то же самое, но для другого - компактная диффузионаая модель
Прямо сейчас стремительно идет яростная дистиляция из флюкс Клейн на скромной RTX-5090
Худеем вместе!
https://huggingface.co/recoilme/sdxsv3
Самое интересное тут что если просто "залупить" модель- выходит полная чухня. В процессе обучения каждый блок "привыкает" работать с определенным уровнем шума на входе - и если подать выход с 16 блока на вход 0-го - он будет просто в ахере. Более того, не все блоки одинаково устойчивы к лупу. Крайние блоки - крайне нервно реагируют даже на собственный выход - "что это за слоп ты мне подал на вход?"
В репе код обучения адаптера для ТЕ и собственно код дистиляции, а сама идея за кадром - она примерно такая:
SDXSv3: как выжать глубину из повтора слоёв
В современных диффузионных моделях гонка за качеством почти всегда упирается в вес чекпоинта. SDXSv3 решает эту проблему элегантно: вместо раздувания параметров она делает ставку на рекуррентность, прогоняя сигнал через одни и те же слои дважды.
Архитектура в базе
SDXSv3 построена по схеме single-stream DiT. Здесь нет отдельного кросс-эттеншна: текстовые эмбеддинги из Qwen конкатенируются с визуальными латентами VAE в единую последовательность, после чего весь массив обрабатывается общими блоками внимания.
* Трансформер: скрытая размерность 2560, 20 голов (по 128 на голову). Честное полное внимание — никаких компромиссов вроде GQA, число KV-голов тоже равно 20.
* Текстовый энкодер: Qwen3.5-2B (скрытый размер 2048). Модель забирает срез из трех слоев — 2-го, 12-го и 22-го.
* Визуальная часть: патч 2, 32-канальный VAE с энкодером f8 и декодером f16.
Трюк с петлей: 28 слоев из 16 блоков
Вся конструкция состоит всего из 16 физических блоков: два входных, двенадцать центральных и два выходных. Фокус в том, что средняя дюжина выполняется дважды с одними и теми же весами.
В итоге модель делает 28 сквозных проходов, физически храня в памяти лишь 16 уникальных блоков:
* Вес: 1,65 млрд параметров (~3,3 ГБ в формате bf16).
* Вычислительная плотность: на инференсе работает как полноценный 28-слойный трансформер (~92 GFLOPs на токен).
Как заставить слой работать дважды
Если просто прогнать скрытое состояние через тот же блок второй раз, петля выродится: блок не поймет контекста и применит ту же трансформацию вслепую. Чтобы слои различали итерации, инженеры (я и дипсик) добавили два якоря:
1. `loop_emb` — обучаемый вектор номера оборота, подмешиваемый к общим условиям.
2. Индивидуальная нормализация перед каждым витком.
Из-за этого архитектурного решения готовую предобученную середину сюда не перенести. Слой, привыкший работать на 5-м шаге, сломается, если внезапно станет 17-м. Модель обязана с нуля учиться адаптировать свое поведение под номер витка.
Зачем это нужно
Идейно это близко к концепции *Universal Transformer*, но цель здесь сугубо прикладная: не моделировать бесконечные рассуждения, а задешево нарастить эффективную глубину вычислений в жестком лимите памяти.
Двенадцать блоков, пройденных дважды, по выразительности уступают 24 уникальным. Однако входные и выходные слои отвечают за слишком деликатную адаптацию признаков, поэтому их оставили уникальными, а вот устойчивая середина отлично переносит повторный цикл без потери сигнала.

3
1
1September 3, 2026 198 4 4