Шаги сэмплера по равному углу поворота снизили ошибку flow-модели на 30–43%
Идея простая: многошаговый сэмплер и так помнит прошлую скорость, а косинус между старой и новой скоростью показывает, насколько круто поворачивает траектория. Автор попробовал сделать из этого адаптивный шаг на модели Anima. Контроллер проиграл стандартному расписанию из-за слепого первого шага. Зато заранее построенная сетка шагов по равному углу поворота дала заметный выигрыш.
AI-обработка оригинала Habr AI; редакция Hamidun News
Каждый шаг flow-модели при генерации картинки стоит полного прохода через большую сеть. Поэтому все хотят меньше шагов при том же качестве, и главный вопрос в том, где именно эти шаги ставить. Автор исследования на Habr проверил красивую идею: брать подсказку из того, что сэмплер и так считает бесплатно. Идея выжила только наполовину, и вторая половина оказалась практичнее первой.
Бесплатный сигнал и что он видит
Многошаговый сэмплер вроде Адамса-Башфорта хранит предыдущую скорость. Косинус между старой и новой скоростью не требует лишних вызовов сети. Если он близок к 1, траектория почти прямая, и шаг можно увеличить. Если направление резко меняется, шаг лучше раздробить.
У сигнала есть слепая зона: косинус видит поворот скорости, но не видит изменение её длины. На Anima это почти не мешает в середине траектории, где длина даёт 0,3–0,4% энергии ускорения. На концах вклад длины растёт до 8–9%, местами до 23%.
Оценка ошибки шага Эйлера E = (h/2)·|v|·θ, где θ — угол между соседними скоростями, работает хорошо. Её медианное отношение к реальной ошибке составляет 80–84%, а корреляция между юнитами (комбинациями промпта и сида) достигает 91–92%. Нужна лишь калибровочная константа.
Есть и шумовой пол. В bf16 с classifier-free guidance угол между соседними вычислениями скорости шумит примерно на 1,7°. Это округление, а не шероховатость потока. Контроллер, который целится в угол ниже этого пола, схлопывается к минимальному шагу.
Контроллер проиграл, сетка выиграла
Адаптивный контроллер h_next = h · (целевой_угол / измеренный_угол) при равном числе вызовов оказался хуже стандартного расписания. Ошибка зависела не от целевого угла, а от начального шага: 0,80 при шаге 0,06, 0,51 при 0,02 и 0,26 при 0,01. Причина в том, что на первом шаге истории нет, и контроллер слеп там, где кривизна максимальна.
Тогда автор построил статическую сетку заранее. Он усреднил темп поворота скорости по остальным 11 юнитам и расставил шаги так, чтобы на каждом шаге угол поворота был одинаковым. Затем он прогнал обычный Эйлер.
Результат: ошибка до сошедшегося решения ниже на 30–43% при 8, 12, 16 и 24 вызовах относительно стандартного расписания ComfyUI. Если добавить профиль распространения ошибки (ранняя ошибка весит в конце примерно в четыре раза больше), выигрыш доходит до 41–50%. 8 вызовов тогда дают меньшую ошибку, чем стандартное расписание при 24. На промпте с лицом сетка добирается до композиции эталона уже за 8 шагов, а стандартное расписание рисует другую.
Адаптация под конкретную картинку ничего не добавила. Сетка от одной картинки, применённая к другой, дала ту же ошибку. Значит, выигрыш приносит форма сетки, а не подстройка под траекторию.
Где это ломается
Метрика меняет картину. По LPIPS сетка выигрывает на 30–35% и побеждает в 9–11 юнитах из 12. На плоской заливке, лицах и геометрических сетках LPIPS ниже на 39–48%. Но на текстурном промпте (мех) LPIPS примерно на 16% хуже, хотя расстояние по латенту улучшилось. Сетка ставит шаги рано, где решается композиция, и мало в конце, где проступает мелкая текстура, поэтому картинка выходит более гладкой.
Ограничения автор перечисляет честно:
- одна модель (Anima), одно разрешение, один масштаб guidance;
- 12 юнитов, эффекты меньше 5–8% не видны;
- гипотезы не были зафиксированы до измерений, находка про первый шаг получена post hoc;
- проверены только Эйлер и Адамс-Башфорт 2, причём на таких сетках второй хуже Эйлера;
- идея не новая: похожий подход предложен в CAT-Flow, с которым автор не сравнивался.
Что с этим делать
Если вы гоняете flow-модель в ComfyUI и считаете вызовы сети, не стоит верить, что стандартное расписание оптимально для малого числа шагов. Для Anima в репозитории лежат готовые списки сигм на 8, 12, 16 и 24 вызова. Их можно подать в ноду ручных сигм со стандартным сэмплером euler (576×768, CFG 5).
Для другой модели нужно снять эталонные траектории и посчитать профиль темпа поворота. На одну картинку уходит около двух минут. Сколько картинок хватит, автор не проверял. Для текстурных сцен сетку лучше сравнивать глазами, а не только по латентной метрике. Код, 30 тестов и препринт доступны в репозитории YakovSava/zero-cost-proxy-research.
- 6 нояб. 2026 г.INT8 почти не портит картинки, а сэмплер AB-2 побеждает Euler в 12 из 12 тестов
- 9 окт. 2026 г.MESSENGER снижает ошибку прогноза движения в 3D на 71,6% на nuScenes
- 19 июл. 2026 г.Соло-разработчик Sunarius: нейросети не сделали RPG за него, но снизили порог входа
- 13 июн. 2026 г.Немецкие учёные натренировали ИИ отслеживать ледники с точностью в метры
Вопросы и ответы по материалу
Что известно по теме: бесплатный сигнал и что он видит?
Многошаговый сэмплер вроде Адамса-Башфорта хранит предыдущую скорость. Косинус между старой и новой скоростью не требует лишних вызовов сети. Если он близок к 1, траектория почти прямая, и шаг можно увеличить. Если направление резко меняется, шаг лучше раздробить. У сигнала есть слепая зона: косинус видит поворот скорости, но не видит изменение её длины. На Anima это почти не мешает в середине траектории, где длина даёт 0,3–0,4% энергии ускорения. На концах вклад длины растёт до 8–9%, местами до 23%.
Что известно по теме: контроллер проиграл, сетка выиграла?
Адаптивный контроллер h_next = h · (целевой_угол / измеренный_угол) при равном числе вызовов оказался хуже стандартного расписания. Ошибка зависела не от целевого угла, а от начального шага: 0,80 при шаге 0,06, 0,51 при 0,02 и 0,26 при 0,01. Причина в том, что на первом шаге истории нет, и контроллер слеп там, где кривизна максимальна. Тогда автор построил статическую сетку заранее. Он усреднил темп поворота скорости по остальным 11 юнитам и расставил шаги так, чтобы на каждом шаге угол поворота был одинаковым.
Что известно по теме: где это ломается?
Метрика меняет картину. По LPIPS сетка выигрывает на 30–35% и побеждает в 9–11 юнитах из 12. На плоской заливке, лицах и геометрических сетках LPIPS ниже на 39–48%. Но на текстурном промпте (мех) LPIPS примерно на 16% хуже, хотя расстояние по латенту улучшилось. Сетка ставит шаги рано, где решается композиция, и мало в конце, где проступает мелкая текстура, поэтому картинка выходит более гладкой.
Протестируйте новые LLM и мультимодальные модели в одном окне
Платформа Nomad AI (nomadnet.ai) даёт прямой доступ к Claude Opus 5.5, GPT-6, Gemini 3.1, DeepSeek и автономным агентам без VPN, зарубежных карт и зоопарка подписок.
Главное из мира ИИ — раз в неделю
7 ключевых событий недели, отобранных вручную. Без шума, репостов и пресс-релизов.
Готово! Проверьте почту — мы отправили подтверждение.