Перейти к содержимому
Китайская линза

Читаем статью DeepSeek-R1 вместе

Управляемое чтение arXiv:2501.12948 — R1-Zero и «момент озарения», четырёхэтапный конвейер R1, дистилляция и честный раздел о неудачных попытках.

УРОКchina/07-deepseek-r1-reading.mdx2 чМатериал 7 из 10
После урока вы сможете
  • Пересказать по тексту статьи, как устроены R1-Zero и R1 и чем они различаются
  • Объяснить, почему авторы выбрали правиловые награды, а не нейросетевую модель вознаграждения
  • Реализовать награды за формат, точность и языковую согласованность в духе R1
  • Критически оценить выводы о «моменте озарения», дистилляции и неудачных попытках (PRM, MCTS)

В январе 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"]
Три результата статьи: R1-Zero, R1 и дистиллированные модели

Структура текста: §1 — введение и сводка результатов; §2 — метод (2.2 — R1-Zero, 2.3 — R1, 2.4 — дистилляция); §3 — эксперименты; §4 — обсуждение: дистилляция против RL и неудачные попытки; §5 — ограничения. Первый проход — §1, рисунки и §5. Второй — §2 целиком. Третий — §4, самый интересный для инженера.

  1. RL без SFT работает. Поверх DeepSeek-V3-Base запускают RL — и модель сама учится длинным рассуждениям, самопроверке и поиску альтернатив. По словам авторов, это первое открытое исследование, подтвердившее такой путь.
  2. Конвейер R1: два этапа RL и два этапа SFT. Он исправляет недостатки R1-Zero и даёт модель общего назначения.
  3. Дистилляциядистилляция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. Почему не жадным декодированием?

Авторы объясняют: на моделях с длинными ответами жадное декодирование чаще зацикливается и даёт большой разброс между чекпоинтами. Поэтому генерируют kk ответов с температурой и усредняют долю правильных — это и есть оценка pass@1. Рядом приводят cons@64 — точность при голосовании большинством по 64 ответам. Это разные метрики: не сравнивайте cons@64 одной модели с pass@1 другой.

RL-алгоритм — GRPO из DeepSeekMath. На каждый вопрос qq генерируется группа из GG ответов, преимуществопреимущество (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) не нужна:

Ai=ri−mean(r1,…,rG)std(r1,…,rG)A_i = \frac{r_i - \mathrm{mean}(r_1, \dots, r_G)}{\mathrm{std}(r_1, \dots, r_G)}

Пример: на вопрос сгенерировали четыре ответа, верны первый и последний, награды [1,0,0,1][1, 0, 0, 1]. Среднее — 0.5, стандартное отклонение — 0.5, поэтому верные ответы получают преимущество +1+1, неверные — −1-1. Если бы верными оказались все четыре, преимущества были бы нулевыми: группе не с чем сравнивать, и сигнала для обучения нет.

Дальше — цель в духе PPOпроксимальная оптимизация политики (PPO)EN proximal policy optimization (PPO)Schulman и др., 2017. Ограничивает шаг обновления «клиппингом» отношения вероятностей. с клиппингом отношения вероятностей ρi=πθ(oi∣q)/πθold(oi∣q)\rho_i = \pi_\theta(o_i \mid q) / \pi_{\theta_{\text{old}}}(o_i \mid q) и 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 лосс ответа делится на его длину, поэтому штраф за неверный ответ «размазывается» по токенам: длинный неверный ответ наказывается на токен слабее короткого. Это подталкивает модель к длинным ответам даже там, где длина не помогает.

Цель 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 примеров даёт модель с широкими навыками, где рассуждения — одна из способностей. К тому же этот набор данных — продукт, который затем переиспользуют для дистилляции.

Те же ~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 дистилляция.

Этот раздел стоит прочитать дважды. Лаборатории редко публикуют то, что не сработало, а здесь описаны два подхода, на которые в 2024 году многие ставили, предполагая, что o1 устроена именно так.

процессная модель вознагражденияпроцессная модель вознаграждения (PRM)EN process reward model (PRM)Оценивает каждый шаг рассуждения, а не только итоговый ответ. В DeepSeek-R1 описана как «неудачная попытка».. Идея: награждать каждый шаг рассуждения, а не только ответ. Авторы называют три проблемы:

  1. в общем рассуждении трудно определить, что такое «шаг»;
  2. трудно понять, верен ли промежуточный шаг: автоматическая разметка моделью работает плохо, ручная не масштабируется;
  3. нейросетевая 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 бесполезна вообще.

  • Общие навыки: вызов функций, многоходовые диалоги, сложные ролевые сценарии и вывод в JSON у R1 слабее, чем у V3.
  • Смешение языков: модель оптимизирована под китайский и английский. На вопросы на других языках она может рассуждать по-английски. Для русскоязычного пользователя это ожидаемое поведение, а не баг вашего промпта.
  • Чувствительность к промпту: few-shot примеры стабильно ухудшают результат. Авторы рекомендуют zero-shot: описать задачу и формат ответа.
  • Программная инженерия: проверка таких задач долгая, поэтому большого RL на них не было, и прирост над V3 невелик.

Реализуйте награды в духе R1: строгую проверку формата, сверку ответа, языковую согласованность и групповые преимущества GRPO. Обратите внимание, как мало нужно кода, чтобы получить сигнал для RL.

Правиловые награды DeepSeek-R16 тестов
"""Правиловые награды в духе 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 так важно, чтобы ответ проверялся однозначно.

Проверь себя6 вопросов
1 Какие награды использовались при обучении R1-Zero?
2 В группе GRPO из четырёх ответов награды равны [1,0,0,0][1, 0, 0, 0]. Чему равно преимущество первого ответа? (std — популяционное, округлите до двух знаков)
3 Какие недостатки R1-Zero исправляет конвейер R1?Можно выбрать несколько ответов
4 Что показал эксперимент §4.1 на Qwen-32B-Base?
5 Почему авторы отказались от PRM? Выберите все причины, названные в статье.Можно выбрать несколько ответов
6 Как повлияла награда за языковую согласованность на точность R1 в абляции?
  • Статья описывает три результата: R1-Zero (чистый RL на базе), R1 (четыре этапа) и дистилляцию в модели 1.5B–70B.
  • Ключевое решение — правиловые награды за точность и формат: грубые, но устойчивые к взлому.
  • «Момент озарения» реален как наблюдение, но позднейшие работы показывают, что RL скорее усиливает поведение, уже заложенное в базе.
  • Маленьким моделям выгоднее учиться у большой (72.6% против 47.0% на AIME), а двигать границу по-прежнему должны большие модели и большой RL.
  • Раздел о неудачных попытках (PRM, MCTS) — образец научной честности, который экономит сообществу месяцы работы.

Дальше: Kimi, Qwen, GLM и MiniMax — какие идеи другие китайские лаборатории добавили к рецепту DeepSeek.