Представьте себе собеседника, который на вопрос «сколько будет дважды два» начинает рассуждать про историю математики, аксиомы Пеано и квантовую механику, а потом выдает правильный ответ. Звучит знакомо? Это новая норма для LLM с длинными chain-of-thought: модели зачем-то пережевывают очевидные вещи, тратя токены тоннами. Знакомьтесь — проблему назвали overthinking, и она жрет ваш бюджет на инференсе. На ACL 2026 представили технику TIME (Token Implicit and Mature Estimation) — способ заставить LLM думать строго по делу. Давайте разберемся, как обучить Qwen3 коротким всплескам мышления вместо бесконечных монологов.
Почему Qwen3 вообще так много думает?
Qwen3 — мощная модель с режимом Thinking, который по умолчанию генерирует рассуждения в виде масок на токенах. Но когда вы включаете Thinking Mode, алгоритм не знает, когда остановиться. Решает задачу — и продолжает проверять себя, переформулировать, гуглить внутри своего контекста. Результат — 1500 токенов вместо 200 на задачу «в каком году родился Пушкин?».
Кстати, подобное зацикливание — одна из главных головных болей при работе с Qwen3.5. В статье о фиксе зацикливания мы разбирали, как тонкая настройка решает проблему. TIME — это элегантный способ атаковать корень, а не симптомы.
Overthinking бьет дважды: вы платите за каждый лишний токен и получаете более инертный ответ. Модель не может выдать резкий, уверенный ответ, потому что она всё еще «думает». TIME предлагает альтернативу — научить модель оценивать зрелость своих рассуждений на каждом шаге и отсекать лишние размышления, как только ответ становится очевиден.
Анатомия TIME: как работает «зрелость токена»
Название TIME расшифровывается как Token Implicit and Mature Estimation. Звучит сложно, но суть проста: модель обучается предсказывать, является ли текущий токен финальным ответом или промежуточным рассуждением. Вместо того чтобы доверять статичному правилу «после N токенов сворачивай», TIME учит динамическому решению: «Вот этот токен — достаточно зрелый, можно останавливаться».
На практике это выглядит так: во время генерации в каждый момент времени не только предсказывается следующий токен, но и вычисляется score зрелости (maturity score). Если score превышает порог — генерация current_state отрезается, и ответ считается окончательным. Все, что после — только пустая трата токенов.
Как обучить Qwen3 с TIME: гипотетический план
Пока что TIME — это академическая работа, кода в открытом доступе нет. Но на основе описания из ACL 2026 можно восстановить процесс дообучения. Подход очень похож на то, что мы делали при дистилляции знаний. Только теперь цель — не передать знания от учителя, а научить модель отсекать лишние рассуждения.
1 Собираем датасет «коротких» рассуждений
Берете Qwen3 в режиме Thinking, генерируете ответы на задачу. Потом берете ту же задачу и размечаете, какие токены реально критичны для ответа, а какие — «мусорная» рефлексия. Как? Можно попросить более сильную модель (GPT-4o, Gemini 3 Flash) вырезать лишние цепочки. Да, это дорого, но это единоразово.
# Пример: генерируем рассуждения для задачи
python generate_reasoning.py --model Qwen3-7B --task gsm8k --output raw.jsonl
# Потом вручную или через teacher-модель чистим
python filter_mature_tokens.py --input raw.jsonl --teacher gpt-4o --output cleaned.jsonl
Главное — сохранить вариативность. Если убрать все рассуждения, модель не сможет решать сложные задачи. Нужны примеры, где короткое рассуждение приводит к правильному ответу, а длинное — к такому же, но с лишними 500 токенами.
2 Добавляем голову зрелости (maturity head)
В стандартном Qwen3 поверх последнего слоя висит LM Head для предсказания следующего токена. Мы добавляем параллельную голову, которая предсказывает бинарный флаг: is_mature (1, если токен уже достаточно зрелый).
# Псевдокод: добавляем maturity head к модели
class Qwen3WithMaturity(nn.Module):
def __init__(self, base_model):
self.base = base_model
hidden_size = base_model.config.hidden_size
self.maturity_head = nn.Linear(hidden_size, 1) # бинарный классификатор
def forward(self, input_ids, attention_mask):
hidden = self.base(input_ids, attention_mask).last_hidden_state
logits = self.base.lm_head(hidden)
maturity_logits = self.maturity_head(hidden)
return logits, maturity_logits
⚠️ Не пытайтесь использовать эту голову без дообучения. Она будет предсказывать шум. Нужно тренировать её вместе с адаптацией модели на датасете «коротких» рассуждений.
3 Дообучаем с комбинированной функцией потерь
Классический cross-entropy на токены + бинарная loss для maturity head. Важный нюанс: для «зрелых» токенов из датасета мы устанавливаем target = 1, для всех остальных — 0. Но на этапе инференса порог выбираем отдельно (обычно 0.6-0.8).
# Комбинированная функция потерь
loss_lm = cross_entropy(logits, target_tokens)
loss_maturity = bce_with_logits(maturity_logits, maturity_labels) # binary cross-entropy
loss = loss_lm + 0.1 * loss_maturity
Зачем коэффициент 0.1? Чтобы не доминировать — модель не должна фокусироваться только на зрелости в ущерб качеству генерации. В оригинале TIME авторы использовали динамический вес, но для первой итерации хватит константы.
4 Настройка параметров генерации
После дообучения обычные параметры температуры и top-p работают иначе. Рекомендую снизить temperature до 0.1 для логических задач — тогда модель будет более детерминированной и быстрее достигнет порога зрелости. Об этом подробно сказано в статье про оптимальные параметры генерации для Qwen3.5.
Также стоит поиграть с порогом зрелости: для простых команд (сумма, дата) можно ставить 0.9, для сложных (математические задачи) — 0.5, чтобы дать модели пространство для рефлексии.
Практический пример: как НЕ надо делать
Допустим, вы решили обучить Qwen3-7B на датасете, где из каждого рассуждения вырезали всё, кроме финального ответа. Типа задача «2+2» — датасет содержит только «4». Без цепочки вообще. Результат: модель не может решить задачу, требующую логики, потому что не умеет рассуждать даже минимально. Overthinking исчез, но исчезла и способность решать.
Правильный датасет: задача «В вазе 3 яблока, 2 груши. Сколько фруктов?» — рассуждение: «3+2=5» (короткая цепочка), ответ: «5». Длинная цепочка «Яблоки лежат рядом, груши тоже... всего 5» должна быть помечена как незрелая. Модель должна понять, что короткое рассуждение — зрелое, длинное — избыточно.
Нюансы и подводные камни
- Затачиваться под тип задач. TIME, обученный на математических задачах, может отлично работать на GSM8K, но проваливаться на коде или аналитике. Нужен разнообразный датасет.
- Перетренировка головы зрелости. Если датасет состоит только из «зрелых» токенов (все финальные ответы), голова будет предсказывать 1 для каждого токена. Нужно балансировать: 50% зрелых, 50% промежуточных.
- Совместимость с KV-cache. Генерация с EV (early exit) нарушает обычный кэш. В статье по квантованию на длинных CoT мы упоминали подобные проблемы. Придется адаптировать инференс: не кормить кэш токенами после стопа.
А что с Qwen3.5 и более новыми версиями?
В конце мая 2026 года вышла статья про работу с исправленным Qwen3.5-35B и его проприетарной версией с глубоким мышлением. TIME может быть использован и для Qwen3.5, так как архитектура та же. Более того, в эксперименте с AI-компаньоном мы видели, как тонкая настройка на диалогах решает проблему зацикливания — фактически тот же принцип, только с TIME появляется метрика для остановки генерации, а не эвристика.
Если вы работаете с Qwen3.5-27B как с базой для ассистента, рекомендую сначала применить TIME-дообучение, а потом уже настраивать поведение через RLHF. Порядок важен: сначала научить модель быть эффективной, потом — вежливой.
FAQ: короткие ответы на острые вопросы
Можно ли применить TIME без ACL-бумаги, только по описанию?
Да, логика понятна. Соберите датасет, добавьте голову, дообучите. Я описал шаги выше. Единственная неизвестность — точная архитектура головы. Авторы использовали двухслойный MLP с residual connection. Можно начать с линейного слоя — это сработает как baseline.
Требуется ли большое железо?
Для Qwen3-7B достаточно одной RTX 4090 (24 GB) с LoRA. Для Qwen3-72B понадобится 4-8 A100. Но можно начать с маленьких моделей, а потом применить дистилляцию — как в гайде по дистилляции визуального мышления.
Не ухудшит ли TIME качество на сложных задачах?
Если порог зрелости слишком агрессивный — да. Но правильный датасет и баланс потерь (0.1 для головы) минимизируют этот эффект. В тестах ACL авторы показали улучшение точности на 2% за счет того, что модель перестает путаться в собственных «раздумьях».
Теперь вы знаете, как приручить overthinking и заставить Qwen3 думать короткими, но точными всплесками. Хватит платить за лишние токены — пусть модель работает эффективно. А если у вас получится реализовать TIME и вы захотите поделиться результатами — пишите в комментариях. Хотя код пока не опубликован, но гайд на основе описания — уже рабочий черновик для экспериментов.