Chain of Thought, RLVR и Test-Time Compute: измерения
24 задачи: 0 % верных за 1,9 token и 100 % за 145. Затем self-consistency покупает точность, уже бывшую у greedy decoding.
На этой странице
Двадцать четыре текстовые задачи в два шага. Небольшую модель — полмиллиарда параметров, ту же, что в главе 11, — просят решить каждую задачу дважды.
Сначала просят сразу дать ответ:
"...How many bolts are left? Reply with only the final number, nothing else."
0 / 24 correct 1.9 tokens per answerЗатем просят дать ответ, разрешив сначала поработать над решением:
"...How many bolts are left? Think step by step, then give the final
number on its own line."
24 / 24 correct 145.2 tokens per answerОт нуля до ста процентов. Та же модель, те же веса, те же задачи, тот же greedy decoding. Единственное отличие — второй версии разрешили вывести на 143 token больше, прежде чем зафиксировать число.
Эта глава — о том разрыве: что он на самом деле представляет собой, как далеко распространяется, сколько стоит и что произошло, когда область перестала просить об этом в prompt и начала обучать этому напрямую.
Модель не думает. Она дольше вычисляет.
Ссылка на раздел: Модель не думает. Она дольше вычисляет.Есть соблазн сказать, что вторая версия «подумала». Не поддавайтесь: механизм и проще, и полезнее для понимания.
transformer выполняет фиксированный объём вычислений на каждый сгенерированный token. Один forward pass: одни и те же слои, одни и те же матрицы, одно и то же число операций — независимо от того, вопрос это сколько будет 2+2 или докажи эту теорему. Внутри модели нет регулятора «постарайся сильнее на этом примере».
Поэтому, когда модель просят ответить немедленно, все доступные ей вычисления — это один forward pass. Каждая промежуточная величина должна уместиться в активациях этого единственного прохода, и всё, что она не может вычислить там, она не может вычислить вообще.
Вывод token меняет это — причём двумя разными способами, которые стоит разделять:
- Больше вычислений. Каждый сгенерированный token — это ещё один полный forward pass. Сто сорок пять token рабочего решения — это в сто сорок пять раз больше арифметики, чем ответ сразу.
- Внешняя память. Token записываются в context, поэтому следующий проход может их прочитать.
5 × 13 = 65становится фактом во входе, а не значением, которое модель должна удерживать в активации и переносить дальше. Модель использует собственный вывод как черновик.
Именно второй пункт часто упускают, и он объясняет, почему рабочее решение должно быть записано, чтобы помочь. У модели, которую просят «подумать про себя, а затем ответить», нет места, куда положить мысль.
Ничего мистического здесь не требуется, и из этого следует чёткое предсказание: chain of thought должна помогать сильнее всего в задачах с последовательной структурой — где второй шаг требует результата первого, — и слабее всего в задачах, которые сводятся к одному извлечению факта. Именно это и показывает литература, и поэтому «думай пошагово» ничего не даёт для вопроса какова столица Франции.
Chain of thought как техника prompting
Ссылка на раздел: Chain of thought как техника promptingТехника появилась в 2022 году в двух частях. Wei et al. показали, что включение в prompt решённых примеров — демонстраций, где ответу предшествует рассуждение, — даёт большой прирост на арифметических и commonsense-бенчмарках.1 Затем Kojima et al. показали нечто более странное: примеры не нужны. Добавление «Let's think step by step» к zero-shot prompt даёт значительную часть того же выигрыша.2
Именно второй результат показывает, что происходит. Если магическая фраза разблокирует поведение, значит, это поведение уже было в модели: pretraining полон разобранных решений, а фраза указывает на эту область распределения. Chain of thought ничему не научила модель. Она выбрала то, что у модели уже было.
Такая рамка также предсказывает будущую устарелость техники — к этому мы вернёмся в конце главы.
Self-consistency и результат, который меня удивил
Ссылка на раздел: Self-consistency и результат, который меня удивилОчевидный следующий ход: если одна цепочка рассуждения может ошибаться, сгенерировать несколько и взять ответ большинства. Это self-consistency.3 Расход строго больше — полных генераций вместо одной, — а интуиция в том, что неправильные ответы рассеиваются, тогда как правильные сходятся.
Измерение на 16 тех же задачах, sampling при температуре 0,8, majority vote по цепочкам:
| точность | накопленные token | token на задачу | |
|---|---|---|---|
| 1 | 81 % | 2 952 | 185 |
| 2 | 81 % | 5 618 | 351 |
| 3 | 100 % | 8 417 | 526 |
| 4 | 100 % | 11 103 | 694 |
| 5 | 100 % | 13 933 | 871 |
Шестнадцать задач — маленький знаменатель, и правило главы 4 применимо к этой таблице так же, как к любой другой. 13 из 16 — это 81 % с 95 % интервалом Уилсона [57, 93]; 16 из 16 — это 100 % с [81, 100]. Они перекрываются. Смотрите на форму кривой — это и есть результат; не считывайте точную ступень, на которой она выравнивается, потому что шестнадцать задач не могут её локализовать.
В этой таблице есть две вещи, и вторая — не та, которую я ожидал.
Кривая выравнивается на . К третьему sample точность достигает потолка, а оставшиеся два sample ничего не покупают, но стоят по 172 token каждый — 345 вместе. Так выглядит каждая кривая self-consistency, о которой сообщается в литературе, и это происходит намного раньше, чем предполагает рамка «чем больше sample, тем лучше».
А greedy decoding уже давал 100 %. Посмотрите ещё раз на начало главы: одна цепочка, без sampling, 145 token, 24/24. Sampling при температуре 0,8 снизил точность до 81 %, а self-consistency потребовались три генерации, чтобы вернуться туда, где уже был один greedy pass, — за 3,6 раза больше token, или в шесть раз больше, если прогнать sweep до пяти, не зная, где кривая выравнивается.
Это не аргумент против self-consistency. Это точное описание того, что она делает: temperature покупает разнообразие, внося ошибки, а голосование удаляет ошибки, которые она только что внесла. В задачах, где greedy decoding терпит неудачу — где единственная наиболее вероятная цепочка ведёт не туда, а менее вероятная оказывается правильной, — этот обмен окупается, и именно поэтому техника существует. В задачах, где greedy уже справляется, это способ потратить в шесть раз больше бюджета, чтобы выйти в ноль.
Второй случай никто не публикует, поэтому его стоит измерить на вашей собственной задаче, прежде чем принимать технику. Это простые двухшаговые задачи для небольшой модели; именно в таком режиме ответ получается таким.
От просьбы к обучению
Ссылка на раздел: От просьбы к обучениюДо сих пор всё происходило во время prompt на модели, которую специально этому не обучали. Сдвиг, породивший текущее поколение reasoning-моделей, состоял в переносе этого в обучение — и ключ, который сделал это возможным, уже, чем кажется.
Post-training из главы 11 требовал человеческих предпочтений, потому что на вопрос «был ли это хороший ответ?» нет программного ответа. Но для некоторых вопросов он есть. Математический ответ либо равен правильному значению, либо нет. Код либо проходит тесты, либо нет. Доказательство либо проверяется, либо нет.
Для таких областей reward model можно заменить верификатором, и всё downstream сразу становится лучше: никаких аннотаторов, никакой подгонки Bradley–Terry, никакого reward hacking того типа, который измерялся в главе 11, — потому что unit test нельзя задобрить лестью. Это reinforcement learning from verifiable rewards, и именно для этой постановки был создан GRPO: сгенерировать группу попыток решения одной и той же задачи, проверить каждую и использовать средний балл группы как baseline. Без critic, без аннотатора, без reward model. Только программа, которая говорит: верно или неверно.
Outcome reward. Оценивается только финальный ответ. Дёшево — сравнение строк — и у этого есть очевидная дыра: решение, которое приходит к правильному числу через неправильное рассуждение, получает ровно такую же награду, как корректное, поэтому policy свободна выучить правдоподобно выглядящую бессмыслицу, которая случайно попадает в цель.
Process reward. Оценивается каждый шаг. Lightman et al.5 собрали датасет из 800 000 размеченных людьми шагов рассуждения, чтобы обучить модель делать это, и показали, что на сложной математике это существенно превосходит outcome supervision. Цена — в названии: кто-то разметил 800 000 шагов.
Результат, который переосмыслил всю область, пришёл от DeepSeek в начале 2025 года.6 Они взяли базовую модель и применили reinforcement learning with verifiable rewards напрямую, без предварительного этапа supervised fine-tuning — того самого этапа, который глава 11 представляет как фундамент всего. Длинные цепочки рассуждения всё равно возникли. Возникло и поведение, которому никто не обучал: модель начала перепроверять собственные шаги и, в самом цитируемом фрагменте статьи, спонтанно пересматривать подход посреди решения.
Честное прочтение состоит не в том, что reasoning — магия. А в том, что когда награждается только правильность, и быть правым в сложной задаче означает проработать её, optimiser находит именно проработку — включая те её части, которые делают и люди, потому что они требуются самой задачей, а не потому что кто-то этому научил.
Reasoning token — строка в счёте
Ссылка на раздел: Reasoning token — строка в счётеПрактическое следствие всего этого: reasoning-модель производит token, которые вы просили, и token, которых вы не просили, — и вы платите за оба типа.
Провайдеры обрабатывают это по-разному, и различие важно:
- Большинство API считают reasoning token внутри числа output token. Ваш счёт и ваш лимит
max_tokensвключают и то мышление, которого вы никогда не видите. - Google Gemini сообщает thinking token как отдельное поле, вне стандартного числа output token.
Это настоящая несовместимость между двумя способами считать одно и то же, и любой код, который вычисляет стоимость или применяет бюджет между провайдерами, должен это нормализовать. В главе 16 это становится деньгами, а в главе 23 — бюджетом, который можно обеспечить.
Другое следствие — задержка, которая удивляет людей в первый раз. Время reasoning-модели до первого видимого token включает всё её мышление, поэтому запрос, который восемь секунд ничего не стримит, а затем отвечает за одну, — это не зависшее соединение: модель работает. Любой интерфейс, который восемь секунд показывает spinner без объяснения, имеет проблему дизайна, а не сети.
Когда «think step by step» перестаёт помогать
Ссылка на раздел: Когда «think step by step» перестаёт помогатьВ завершение — предупреждение, потому что это самый распространённый способ неправильно применить материал этой главы.
Всё в первой половине — техника, заставляющая модель, которая не была обучена рассуждать, всё равно выдавать рассуждение. Модели, обученные с RLVR, уже делают это: они выводят своё рабочее решение, собственной длины, до ответа. Просить такую модель думать пошагово в лучшем случае избыточно, а в худшем вредно: это может породить короткую, prompt-образную цепочку вместо более длинной, которую модель сгенерировала бы сама, и некоторые провайдеры документируют именно это.
То же относится к сложным reasoning scaffold, построенным в коде приложения. prompt, который проводит модель по дереву решений, по которому она уже движется внутри, тратит ваши token на ограничение поведения, обученного заранее. Здесь впервые появляется тема, которая проходит через весь остаток курса: техники, необходимые в 2022 году, к 2025-му стали суеверием, и единственный способ понять, что есть что для вашей модели сегодня, — измерить оба варианта.
Глава 15 — о том, как превратить это измерение в дисциплину, а не мнение.
Что дальше
Ссылка на раздел: Что дальшеУ reasoning есть неудобное свойство: это единственная способность, чья стоимость растёт вместе со сложностью вопроса. Модель, которая думает 900 token, делает 900 forward pass, держит растущий cache в памяти для всех них и занимает GPU на всё это время.
Из-за этого экономика обслуживания reasoning-модели резко хуже, чем обслуживания chat-модели, а набор деталей реализации превращается в разницу между жизнеспособным и нежизнеспособным продуктом: как хранится и переиспользуется cache прошлых keys and values, сколько запросов могут делить один forward pass и какая точность весам на самом деле нужна.
Глава 13 — последняя, где модель является объектом в вашей памяти, а не сервисом за портом, и она о том, как сделать этот объект достаточно дешёвым для обслуживания. Она также закрывает обещание из этой главы: speculative decoding, который производит несколько token примерно по цене одного за счёт того, что маленькая модель угадывает, а большая проверяет, — трюк, который имеет смысл только после того, как вы увидели, какая часть forward pass тратится на ожидание памяти, а не на арифметику.
Источники и метод
Ссылка на раздел: Источники и методВсе измерения в этой главе получены из Qwen/Qwen2.5-0.5B-Instruct на 24 сгенерированных двухшаговых текстовых задачах, с greedy decoding, кроме случаев, где явно указан sampling, и с нулём усечённых генераций на использованных лимитах token. Они воспроизводимы, и это небольшая модель на простых задачах: воспринимайте результат self-consistency как демонстрацию механизма, а не как benchmark. Глава 18 конспектов лекций CS229 и глава 12 Hugging Face LLM Course рассматривают этот материал на более крупных моделях и с полноценными benchmark.
Сноски
Ссылка на раздел: Сноски-
Wei, J. et al. Chain-of-Thought Prompting выявляет reasoning в больших языковых моделях. arXiv:2201.11903 (2022). ↩
-
Kojima, T., Gu, S. S., Reid, M., Matsuo, Y. and Iwasawa, Y. Большие языковые модели — zero-shot reasoning-системы. arXiv:2205.11916 (2022). Результат «let's think step by step». ↩
-
Wang, X. et al. Self-Consistency улучшает Chain of Thought Reasoning в языковых моделях. arXiv:2203.11171 (2022). ↩
-
Yao, S. et al. Tree of Thoughts: осознанное решение задач с большими языковыми моделями. arXiv:2305.10601 (2023). ↩
-
Lightman, H. et al. Давайте проверять шаг за шагом. arXiv:2305.20050 (2023). Вводит PRM800K — датасет process supervision на 800 000 шагов. ↩
-
DeepSeek-AI. DeepSeek-R1: стимулирование reasoning capability в LLM с помощью Reinforcement Learning. arXiv:2501.12948 (2025). Результат R1-Zero — reinforcement learning, применённое напрямую к базовой модели, без этапа supervised fine-tuning, — находится в разделе 2.2. ↩
-
Snell, C., Lee, J., Xu, K. and Kumar, A. Оптимальное масштабирование LLM Test-Time Compute может быть эффективнее масштабирования параметров модели. arXiv:2408.03314 (2024). ↩