Читаем статью DeepSeek-R1 вместе
Управляемое чтение arXiv:2501.12948 — R1-Zero и «момент озарения», четырёхэтапный конвейер R1, дистилляция и честный раздел о неудачных попытках.
Зачем это нужно
Заголовок раздела «Зачем это нужно»В январе 2025 года DeepSeek выложила модель, которая на математике и коде рассуждала на уровне OpenAI o1, — с открытыми весами под MIT и статьёй, где рецепт описан почти полностью. Главный результат звучал почти дерзко: способность к длинным рассуждениямрассуждениеEN reasoning⚠️ В китайском одно слово («туйли») означает и «рассуждение» (reasoning), и «инференс» (inference). Смысл определяется по контексту. «Модель туйли» — reasoning-модель, «ускорение туйли» — ускорение инференса. можно вырастить чистым RL поверх базовой модели, без примеров рассуждений от людей. В сентябре 2025 года расширенная версия статьи вышла в журнале Nature.
Статья компактная и написана ясно. Это лучшее введение в RL для рассуждений. Механику вы разбираете в модуле 6.4: GRPO — в уроке 6.4.1, R1-Zero и «момент озарения» — в уроке 6.4.2. Здесь задача другая: прочитать первоисточник, отделить утверждения от доказательств и увидеть, о чём статья не говорит.
Формат тот же, что в уроке про V3: PDF рядом, по каждому разделу — что читать, главные числа и вопросы со спрятанными ответами.
Карта статьи
Заголовок раздела «Карта статьи»Сначала посмотрите на схему: в статье описаны три результата, а не один.
flowchart TD B["DeepSeek-V3-Base"] -->|"GRPO + правиловые награды"| Z["R1-Zero"] B --> C1["1. SFT на cold-start данных: тысячи длинных CoT"] C1 --> C2["2. RL на рассуждения + награда за язык"] C2 --> C3["3. Отбор с отклонением: ~600K рассуждений + ~200K прочих"] C3 --> C4["SFT базовой V3 на ~800K примеров"] C4 --> C5["4. RL для всех сценариев"] C5 --> R["DeepSeek-R1"] C3 -->|"тот же набор, только SFT"| D["R1-Distill: Qwen2.5 и Llama 1.5B–70B"]
Структура текста: §1 — введение и сводка результатов; §2 — метод (2.2 — R1-Zero, 2.3 — R1, 2.4 — дистилляция); §3 — эксперименты; §4 — обсуждение: дистилляция против RL и неудачные попытки; §5 — ограничения. Первый проход — §1, рисунки и §5. Второй — §2 целиком. Третий — §4, самый интересный для инженера.
§1 Введение: три заявленных вклада
Заголовок раздела «§1 Введение: три заявленных вклада»- RL без SFT работает. Поверх DeepSeek-V3-Base запускают RL — и модель сама учится длинным рассуждениям, самопроверке и поиску альтернатив. По словам авторов, это первое открытое исследование, подтвердившее такой путь.
- Конвейер R1: два этапа RL и два этапа SFT. Он исправляет недостатки R1-Zero и даёт модель общего назначения.
- ДистилляциядистилляцияEN (knowledge) distillation: паттерны рассуждений большой модели переносятся в маленькие через обычный SFT. Открыты модели от 1.5B до 70B.
Итог для R1 (сводка в §1): AIME 2024 — 79.8% pass@1, MATH-500 — 97.3%, рейтинг Codeforces (платформа соревнований по программированию) — 2029 (лучше 96.3% участников), GPQA Diamond — 71.5%. Авторы сравнивают с OpenAI-o1-1217 и называют результаты сопоставимыми.
Вопрос 1. Метрика pass@1 в статье считается по нескольким сэмплам с температурой 0.6. Почему не жадным декодированием?
Авторы объясняют: на моделях с длинными ответами жадное декодирование чаще зацикливается и даёт большой разброс между чекпоинтами. Поэтому генерируют ответов с температурой и усредняют долю правильных — это и есть оценка pass@1. Рядом приводят cons@64 — точность при голосовании большинством по 64 ответам. Это разные метрики: не сравнивайте cons@64 одной модели с pass@1 другой.
§2.2 R1-Zero: RL на голой базовой модели
Заголовок раздела «§2.2 R1-Zero: RL на голой базовой модели»Алгоритм
Заголовок раздела «Алгоритм»RL-алгоритм — GRPO из DeepSeekMath. На каждый вопрос генерируется группа из ответов, преимуществопреимущество (advantage)EN advantageA = r − b или A(s, a) = Q(s, a) − V(s): насколько действие лучше среднего в этой ситуации. каждого считается относительно группы, а отдельная value-модель (критиккритик, value-модельEN critic / value modelСеть, предсказывающая ожидаемую награду из текущего состояния; в PPO служит baseline для каждого токена. из PPO, урок 6.3.2) не нужна:
Пример: на вопрос сгенерировали четыре ответа, верны первый и последний, награды . Среднее — 0.5, стандартное отклонение — 0.5, поэтому верные ответы получают преимущество , неверные — . Если бы верными оказались все четыре, преимущества были бы нулевыми: группе не с чем сравнивать, и сигнала для обучения нет.
Дальше — цель в духе PPOпроксимальная оптимизация политики (PPO)EN proximal policy optimization (PPO)Schulman и др., 2017. Ограничивает шаг обновления «клиппингом» отношения вероятностей. с клиппингом отношения вероятностей и KL-штрафом к референсной модели. Вывод и код — в уроке 6.4.1. В статье формула занимает пару строк, но перечитайте её: всё остальное построено на ней.
Награды — главное решение раздела
Заголовок раздела «Награды — главное решение раздела»Наград две, и обе правиловыеправиловая наградаEN rule-based rewardНаграду считает программа (сверка ответа, запуск тестов, проверка формата), а не нейросеть. Её трудно «взломать».:
- за точность — в математике финальный ответ должен стоять в заданном формате (например, в рамке
\boxed{}), чтобы его можно было сверить программно; в задачах LeetCode код компилируется и прогоняется на тестах; - за формат — рассуждение должно быть внутри тегов
<think>и</think>.
Нейросетевую модель вознаграждения — ни по итогу, ни по шагампроцессная модель вознаграждения (PRM)EN process reward model (PRM)Оценивает каждый шаг рассуждения, а не только итоговый ответ. В DeepSeek-R1 описана как «неудачная попытка». — авторы сознательно не используют. Объяснение в статье: в большом RL такая модель подвержена взлом наградывзлом награды (reward hacking)EN reward hackingПолитика находит способ получить высокую награду, не делая того, что задумали люди., а её переобучение требует ресурсов и усложняет конвейер. Проверяемая наградапроверяемое вознаграждениеEN verifiable reward (RLVR) грубая, но её гораздо труднее обмануть.
Шаблон промпта (таблица в §2.2) намеренно минимален. В нём сказано только, что ассистент сначала рассуждает,
потом отвечает, и что рассуждение и ответ заключаются в теги <think> и <answer>.
Никаких «проверяй себя» или «решай по шагам». Авторы хотели увидеть, к чему модель придёт сама, без навязанных стратегий.
Вопрос 2. Почему шаблон не просит модель рефлексировать, хотя рефлексия — именно то, что хотели получить?
Если вписать «перепроверяй себя» в промпт, нельзя понять, откуда взялось поведение — из RL или из инструкции. Минимальный шаблон превращает обучение в эксперимент: всё, что появится в рассуждениях, появилось потому, что повышало награду. Это методологическое решение, а не экономия.
Что получилось
Заголовок раздела «Что получилось»На AIME 2024 pass@1 вырос с 15.6% до 71.0% за время обучения — это уровень OpenAI-o1-0912. При голосовании большинством по 64 ответам (cons@64) получается 86.7% — больше, чем у o1-0912 по той же метрике (83.3%). Длина ответов растёт сама собой, от сотен до тысяч токенов (рисунок с длиной ответа в §2.2). Модель «решает» тратить больше вычислений на трудные задачи, и никто её этому не учил.
Отсюда знаменитый «момент озарения»«момент озарения»EN aha momentЭффект из статьи DeepSeek-R1: модель при RL-обучении сама начинает перепроверять свои рассуждения.: в промежуточной версии модель посреди решения пишет «Wait, wait. Wait. That’s an aha moment I can flag here» и начинает пересматривать свой подход заново. Авторы называют это моментом озарения не только для модели, но и для себя.
Недостатки R1-Zero названы прямо: плохая читаемость и смешение языковсмешение языковEN language mixingМодель переключается между языками внутри одного рассуждения. Типичная проблема R1-Zero.. Рассуждение может перескакивать с английского на китайский посреди предложения.
Вопрос 3. Награда не поощряет длину. Почему же ответы становятся длиннее?
Длина — побочный продукт точности. На трудных задачах ответы с перепроверкой и перебором вариантов чаще оказываются правильными, поэтому получают положительное преимущество в группе, и их паттерны усиливаются. Плюс эффект, о котором предупреждает врезка выше. В исходном GRPO лосс ответа делится на его длину, поэтому штраф за неверный ответ «размазывается» по токенам: длинный неверный ответ наказывается на токен слабее короткого. Это подталкивает модель к длинным ответам даже там, где длина не помогает.
§2.3 R1: четыре этапа
Заголовок раздела «§2.3 R1: четыре этапа»Цель R1 — сохранить силу R1-Zero и получить модель, которую приятно читать и которая умеет не только решать задачи.
Этап 1. Холодный старт. Перед RL базовую V3 дообучают на тысячах длинных цепочек рассуждений — данных холодного стартаданные холодного стартаEN cold-start dataНебольшой набор качественных длинных рассуждений для SFT перед RL — так в DeepSeek-R1 исправили нечитаемость R1-Zero.. Их собирали несколькими способами: few-shot промптинг с длинными CoT, просьба к моделям отвечать подробно с перепроверкой, отбор читаемых ответов R1-Zero с доработкой людьми. Формат вывода: рассуждение, затем краткое резюме для пользователя. Заодно авторы отмечают, что такой старт даёт лучший итоговый результат, чем у R1-Zero.
Этап 2. RL на рассуждения. Тот же RL, что у R1-Zero, плюс награда за языковую согласованностьнаграда за языковую согласованностьEN language consistency rewardДоля слов целевого языка в рассуждении. В R1 её прибавляют к награде за точность. — доля слов целевого языка в цепочке рассуждений. Абляция показывает, что эта награда немного снижает точность. Её оставили, потому что так рассуждения лучше соответствуют предпочтениям людей. Итоговая награда — сумма точности и языковой согласованности.
Этап 3. Отбор с отклонением и SFT. Когда RL сошёлся, его чекпоинт используют как генератор данных. отбор с отклонениемотбор с отклонением (rejection sampling)EN rejection samplingСгенерировать много ответов и оставить только прошедшие проверку. В пост-трейнинге — способ собрать SFT-данные из RL-модели. оставляет только правильные ответы. Часть задач без строгой проверки оценивает V3 как генеративный судья по эталону. Ответы со смешением языков, длинными абзацами и блоками кода отфильтрованы. Получается около 600K примеров с рассуждениями. Ещё около 200K — письмо, фактические вопросы, перевод, «самосознание» модели; частично это данные из SFT самой V3. На этих ~800K примерах базовую V3 обучают две эпохи.
Этап 4. RL для всех сценариев. Для рассуждений — правиловые награды, для остального — модели вознаграждения за полезность и безопасность. Полезность оценивают только по итоговому резюме, безопасность — по всему ответу, включая рассуждение.
Вопрос 4. Почему полезность оценивают только по резюме, а безопасность — по всему ответу?
Если модель вознаграждения за полезность будет смотреть на рассуждение, она начнёт его «причёсывать». Например, штрафовать за сомнения и перепроверки, которые и дают точность. Поэтому рассуждение оставляют свободным, а оценивают то, что пользователь получает как ответ. Вредный контент опасен где угодно, в том числе внутри рассуждения, поэтому безопасность проверяют целиком.
Вопрос 5. На этапе 3 SFT начинается снова с V3-Base, а не продолжается с RL-чекпоинта. Как вы это объясните?
Статья фиксирует факт, но подробно не объясняет его, так что дальше — наша интерпретация. RL-чекпоинт этапа 2 специализирован на рассуждениях. Обучение с чистой базы на сбалансированной смеси из 800K примеров даёт модель с широкими навыками, где рассуждения — одна из способностей. К тому же этот набор данных — продукт, который затем переиспользуют для дистилляции.
§2.4 и §4.1 Дистилляция против RL
Заголовок раздела «§2.4 и §4.1 Дистилляция против RL»Те же ~800K примеров использовали для обычного SFT шести открытых моделей: Qwen2.5-Math-1.5B, Qwen2.5-Math-7B, Qwen2.5-14B, Qwen2.5-32B, Llama-3.1-8B и Llama-3.3-70B-Instruct. Без RL — авторы оставили его сообществу. Уже R1-Distill-Qwen-7B набирает на AIME 2024 55.5% и обходит QwQ-32B-Preview. R1-Distill-Qwen-32B — 72.6%.
Самый поучительный эксперимент — в §4.1. Взяли Qwen-32B-Base и провели на ней большой RL (более 10K шагов) в стиле R1-Zero. Получилась модель на уровне QwQ-32B-Preview: 47.0% на AIME 2024. Дистилляция из R1 на той же базе дала 72.6%.
Выводы авторов: (1) дистиллировать сильную модель в маленькую выгоднее, чем выращивать рассуждения в маленькой модели собственным RL, — это требует огромных вычислений и может не догнать дистилляцию; (2) но чтобы сдвинуть границу возможностей, всё равно нужны сильные базовые модели и большой RL. Дистилляция копирует, а не изобретает.
Тема продолжается в уроке 6.4.4: там strong-to-weak у Qwen3 и on-policy дистилляция.
§4.2 Неудачные попытки
Заголовок раздела «§4.2 Неудачные попытки»Этот раздел стоит прочитать дважды. Лаборатории редко публикуют то, что не сработало, а здесь описаны два подхода, на которые в 2024 году многие ставили, предполагая, что o1 устроена именно так.
процессная модель вознагражденияпроцессная модель вознаграждения (PRM)EN process reward model (PRM)Оценивает каждый шаг рассуждения, а не только итоговый ответ. В DeepSeek-R1 описана как «неудачная попытка».. Идея: награждать каждый шаг рассуждения, а не только ответ. Авторы называют три проблемы:
- в общем рассуждении трудно определить, что такое «шаг»;
- трудно понять, верен ли промежуточный шаг: автоматическая разметка моделью работает плохо, ручная не масштабируется;
- нейросетевая PRM неизбежно ведёт к reward hacking, а её переобучение усложняет конвейер.
Вывод: PRM полезна для переранжирования готовых ответов или направленного поиска, но в большом RL её польза не окупает вычислений.
поиск по дереву Монте-Карлопоиск по дереву Монте-Карло (MCTS)EN Monte Carlo tree search (MCTS)Алгоритм поиска, прославившийся благодаря AlphaGo. Для генерации текста пространство ходов слишком велико — ещё одна «неудачная попытка» R1.. Идея из AlphaGo: разбить ответ на шаги и искать по дереву, направляя поиск value-моделью. Проблемы: пространство «ходов» при генерации токенов несравнимо больше, чем в шахматах или го. Если ограничить ветвление, поиск застревает в локальных оптимумах. А качество генерации напрямую зависит от value-модели, которую трудно обучить на таком уровне детализации. MCTS может улучшить инференс с готовой value-моделью, но итеративно улучшать саму модель через поиск не получилось.
Вопрос 6. Какие из проблем PRM принципиальные, а какие — инженерные?
Принципиальные — первые две: «шаг» плохо определён, а правильность промежуточного шага часто нельзя проверить без решения всей задачи. Третья скорее инженерная: reward hacking и переобучение — цена любой нейросетевой награды. Её можно смягчать, но не устранить. Обратите внимание на осторожную формулировку авторов: «в наших экспериментах» и «в большом RL». Это не доказательство, что PRM бесполезна вообще.
§5 Ограничения — прочитайте, это про вас
Заголовок раздела «§5 Ограничения — прочитайте, это про вас»- Общие навыки: вызов функций, многоходовые диалоги, сложные ролевые сценарии и вывод в JSON у R1 слабее, чем у V3.
- Смешение языков: модель оптимизирована под китайский и английский. На вопросы на других языках она может рассуждать по-английски. Для русскоязычного пользователя это ожидаемое поведение, а не баг вашего промпта.
- Чувствительность к промпту: few-shot примеры стабильно ухудшают результат. Авторы рекомендуют zero-shot: описать задачу и формат ответа.
- Программная инженерия: проверка таких задач долгая, поэтому большого RL на них не было, и прирост над V3 невелик.
Практика: награды R1 своими руками
Заголовок раздела «Практика: награды R1 своими руками»Реализуйте награды в духе R1: строгую проверку формата, сверку ответа, языковую согласованность и групповые преимущества GRPO. Обратите внимание, как мало нужно кода, чтобы получить сигнал для RL.
"""Правиловые награды в духе DeepSeek-R1 (arXiv:2501.12948, §2.2.2 и §2.3.2).
Модель отвечает в шаблоне: <think> рассуждение </think> <answer> ответ </answer>
"""
import re
def format_reward(completion):
"""1.0, если ответ ровно такого вида: <think>…</think> <answer>…</answer>
* ровно один блок <think> и ровно один блок <answer>, именно в этом порядке;
* до, между и после блоков — только пробельные символы;
иначе 0.0.
"""
# TODO: ваш код (подсказка: re.fullmatch с флагом re.DOTALL и подсчёт тегов)
...
def accuracy_reward(completion, gold):
"""1.0, если ответ внутри <answer>…</answer> совпадает с эталоном gold (строка), иначе 0.0.
Нормализация ответа модели: обрезать пробелы по краям; если весь ответ имеет вид \\boxed{X} —
взять X. Если и ответ, и эталон — числа, сравнивать как числа (|a − b| < 1e-6),
иначе — как строки без учёта регистра. Нет блока <answer> → 0.0.
"""
# TODO: ваш код
...
def language_consistency(text, lang):
"""Доля слов целевого языка среди всех слов текста (0.0, если слов нет).
Слово — это непрерывная последовательность латинских букв ИЛИ кириллических букв.
Цифры и знаки не считаются. lang: 'en' — латиница, 'ru' — кириллица.
"""
# TODO: ваш код
...
def group_advantages(rewards):
"""Преимущества GRPO внутри группы ответов на один вопрос: (r − mean) / std.
std — обычное (популяционное) стандартное отклонение. Если все награды одинаковы
(std = 0), сигнала нет: вернуть список нулей.
"""
# TODO: ваш код
...
good = "<think>2+2 это 4, проверю: 4-2=2. Верно.</think> <answer>4</answer>"
print(format_reward(good), accuracy_reward(good, "4"))
print(language_consistency("Сначала compute сумму, then проверим", "ru"))
print(group_advantages([1, 0, 0, 1]))
Теперь подумайте как модель, которая хочет получить награду. Ответ <think></think><answer>42</answer> получает максимум,
если 42 — верный ответ. Ни награда из задания, ни награды R1 не проверяют содержание рассуждения!
Длинные рассуждения появляются не потому, что за них платят, а потому, что без них на трудных задачах не угадать ответ. И наоборот: <answer>x = 42</answer> получает ноль,
хотя по сути верен. Строгая правиловая награда приучает модель к формату — и это одна из причин, почему в задачах для RL
так важно, чтобы ответ проверялся однозначно.
Проверь себя
Заголовок раздела «Проверь себя»- Статья описывает три результата: R1-Zero (чистый RL на базе), R1 (четыре этапа) и дистилляцию в модели 1.5B–70B.
- Ключевое решение — правиловые награды за точность и формат: грубые, но устойчивые к взлому.
- «Момент озарения» реален как наблюдение, но позднейшие работы показывают, что RL скорее усиливает поведение, уже заложенное в базе.
- Маленьким моделям выгоднее учиться у большой (72.6% против 47.0% на AIME), а двигать границу по-прежнему должны большие модели и большой RL.
- Раздел о неудачных попытках (PRM, MCTS) — образец научной честности, который экономит сообществу месяцы работы.
Дальше: Kimi, Qwen, GLM и MiniMax — какие идеи другие китайские лаборатории добавили к рецепту DeepSeek.