AIAny. ← Back to AIAny

Lesson notes · DeepSeek-AI · January 2025

DeepSeek-R1

A 671-billion-parameter model taught itself to reason — no worked examples, no human chains of thought, just a grader that checks final answers. We'll walk one real AIME problem through the whole loop, score a group of sampled attempts by hand, and push one gradient step ourselves.

Subject Reasoning via pure RL Date Jan 22, 2025 Venue arXiv 2501.12948 Materials 64 × 8 H800 · ≈ $294K post-training

DeepSeek-AI — core contributors: Daya Guo · Dejian Yang · Haowei Zhang · Junxiao Song · Peiyi Wang · Qihao Zhu · Runxin Xu · Ruoyu Zhang · Shirong Ma · Xiao Bi · Xiaokang Zhang · Xingkai Yu · Yu Wu · Z. F. Wu · Zhibin Gou · Zhihong Shao · Zhuoshu Li · Ziyi Gao — with roughly 180 further colleagues credited in the paper.

The core idea

Stop teaching the reasoning. Pay for the answer, and reasoning grows.

Every strong reasoning recipe before this paper leaned on people: hire experts, have them write out their chains of thought, fine-tune the model to imitate them. That approach has a built-in ceiling — the model can only reason the way its teachers happened to reason, and every new domain costs another round of annotation.

DeepSeek-R1's bet was to remove the teachers entirely. Take a strong base model, feed it hard questions whose answers can be checked by a rule — math with a boxed number, code with test cases — and reward nothing except whether the final answer is right. The reward never reads the reasoning. Under that one pressure, chains of thought grew from a few hundred tokens to more than ten thousand, and habits nobody demonstrated — re-checking work, backtracking, switching strategy mid-solution — showed up on their own.

Hard questions, a reliable grader, enough compute: given those three, the reflection you would have scripted shows up uninvited.

PART A

The bet from orbit

What got deleted, what the grader checks, and the shape of the loop

Step 1 · The deletion

Take the standard recipe — then delete the teachers.

If you've read our InstructGPT page, you know where post-training stood in early 2025: first SFT (supervised fine-tuning — imitate curated human answers), then RLHF (a learned reward model scores outputs, PPO pushes the policy toward higher scores, a KL penalty keeps it from drifting). DeepSeek-R1-Zero, the first model in this paper, keeps the RL and throws out the rest: no SFT phase at all, and the learned reward model is replaced by an answer key.

Let's give the machine its exam. Our running example is a real competition problem — AIME 2024 II, Problem 14 — which the paper itself uses to illustrate how it evaluates math (Table 32). It will sit on the desk for all twelve steps:

Running example · AIME 2024 II · Problem 14 Let b ≥ 2 be an integer. Call a positive integer n b-eautiful if it has exactly two digits when written in base b, and those two digits sum to √n. (81 is 13-eautiful: 81 = 6·13 + 3, and 6 + 3 = √81.) Find the least b ≥ 2 for which there are more than ten b-eautiful integers.
Ground truth: 211.
AIME 2024 II · P14 least b ≥ 2 with more than ten b-eautiful integers? one hard, checkable question DEEPSEEK-V3-BASE 671B MoE · RL only no SFT · no reasoning demos <think> work · checks · retries </think> <answer> 211 </answer> graded on the boxed answer
The whole system, before we open anything. The amber block is the model's private scratchpad; the teal row is the only part a grade will ever depend on.

Look at the response card on the right of the picture: the amber block is the scratchpad where all the work will happen, and the teal row beneath it is the only surface a grade can touch. Keep those two colors — they mean the same thing in every figure on this page.

The prompt wrapper is deliberately plain. Training uses one fixed template — the model is told to think inside <think> tags and answer inside <answer> tags, and nothing else. The authors kept it this bare on purpose: any hint about how to reason (“reflect first”,“verify each step”) would contaminate the experiment they actually wanted to run — whether reasoning emerges when only outcomes are rewarded.

The training template (paper, Table 1) A conversation between User and Assistant. The user asks a question, and the Assistant solves it. The assistant first thinks about the reasoning process in the mind and then provides the user with the answer. The reasoning process and answer are enclosed within <think>…</think> and <answer>…</answer> tags … User: [our AIME problem]. Assistant:

From the abstract: “Here we show that the reasoning abilities of LLMs can be incentivized through pure reinforcement learning (RL), obviating the need for human-labeled reasoning trajectories.” The base model is DeepSeek-V3-Base — 671B total parameters, 37B active per token (MoE) — pre-trained on web text, never instruction-tuned before this experiment.

Step 2 · The rulebook

The grader never reads the thinking — it checks a box and two tags.

One problem, one bare template, one long response. With the human teachers deleted, the next question writes itself: who decides what a good response is?

A rulebook does — two rules, equally weighted. The accuracy reward extracts the final answer (for math, the expression inside \boxed{}, parsed with SymPy) and compares it against the ground truth: our problem pays out only if the box says 211. For code problems, a compiler runs the program against test cases instead. The format reward checks that the thinking actually sits inside <think>…</think> tags, which keeps the scratchpad separable from the answer.

<think> </think> \boxed{211} never read scored RULE-BASED GRADER boxed answer = 211 ? ✓ +1 <think> tags present ? ✓ +1 reward r = acc + format = 2 no neural network anywhere in this box
The dashed arrow is the point: thousands of tokens of amber scratchpad flow past the grader unread. Only the teal box and the tag structure earn reward.

Notice what's missing from the dashed box: a reward model. InstructGPT taught a neural network to imitate human preferences; R1-Zero refuses that for reasoning, and the paper is blunt about why. A learned judge can be flattered. In one of their own later experiments (we'll meet it again in Step 9's fine print), a model trained against a neural reward watched its reward climb while its real Codeforces performance fell — the policy had learned to please the judge instead of solving problems. A rule can't be pleased.

Key decision

Rule-based rewards trade coverage for incorruptibility. They only exist where answers are checkable — math, code, multiple choice — so that is where pure RL runs. This boundary is real, and it returns in Step 12.

The reasoning RL diet (paper, Table 4): 26K math problems (reward 1 if the boxed answer matches the reference, else 0), 17K algorithm + 8K bug-fixing problems (hidden test cases), 22K STEM multiple choice, 15K logic puzzles. All verifiable by machine.

Step 3 · The loop from orbit

One training step: 32 questions, 16 attempts each, one nudge of the weights.

A response now earns r = 2 when both the box and the tags check out, and there is nobody to charm. What remains is the machine that turns those scores into learning.

Here is the whole loop at cruising altitude. Our AIME problem goes in as the question q. The policy — the model being trained — samples 16 different attempts at it (temperature 1, so they genuinely differ). The rulebook scores each one. Then a box we haven't opened yet, GRPO (Group Relative Policy Optimization), converts sixteen scores into one adjustment of the weights. Repeat 10,400 times over a pool of 26K math questions and friends.

one nudge of the weights — repeat ×10,400 AIME · P14 question q POLICY π V3-Base 671B o₁ · 211 ✓ o₂ · 420 ✗ o₃ · 156 ✗ o₄ · 211 ✓ o₅ · 189 ✗ ⋮ up to o₁₆ RULES r₁ … r₁₆ GRPO A₁…A₁₆ each training step: 32 questions × 16 answers = 512 responses scored
The core structure, first pass. Teal attempts boxed 211; coral attempts boxed something else. We drew five of the sixteen — the rest behave the same way.

A few numbers to anchor the scale. Each attempt may run to 32,768 tokens of thinking (raised to 65,536 late in training). The learning rate is a cautious 3·10⁻⁶, and a small KL leash (coefficient 0.001) ties the policy to a reference copy that is refreshed every 400 steps — the InstructGPT idea, kept but loosened. Total: 10,400 steps, about 1.6 passes over the question pool, roughly 198 hours on 512 H800 GPUs.

The one box in this picture we haven't opened is GRPO — the part that decides how much each of the sixteen attempts should change the model. That box is Part B, and it's where this paper earns its keep.

Infrastructure trivia from supplementary B.1: rollouts are batched 8,192 responses at a time and trained in 16 mini-batches; vLLM workers generate while the rule-graders run overlapped, so the GPUs never idle waiting for a compiler.

PART B

Inside GRPO — the engine

Feel the curve · compute the z-score · push the weights · watch what grows

Step 4 · Grading on a curve

Sixteen classmates are the baseline — no value model needed.

Sixteen scored attempts at the b-eautiful problem go into GRPO and a weight update comes out. Before any algebra, let's settle the question GRPO exists to answer: compared to what is an attempt good?

A raw reward of 1 means nothing by itself. If the model already solves this problem nine times out of ten, another correct answer teaches almost nothing; if it nearly always fails, that same 1 is precious. RL algorithms handle this by subtracting a baseline — an estimate of the reward you'd expect anyway — and only pushing on the difference.

PPO, the incumbent, builds that baseline with a second neural network: a value model trained to predict expected reward at every point in the text. For a 671B policy that means training a second network of roughly the same size — double the memory — and here it gets worse: judging a half-written chain of thought means predicting whether the model will rescue itself five thousand tokens later, through a reflection it hasn't written yet. The paper argues this is close to unlearnable for long reasoning (supplementary A.3).

GRPO's answer is the one your math teacher used: grade on a curve. You already sampled sixteen attempts at the same question — so let the group grade itself. The baseline is simply the group's mean reward. Beat your classmates, get pushed up; lag them, get pushed down. The value model is deleted outright.

PPO q POLICY o REWARD r VALUE MODEL a second policy-sized net GAE A GRPO q POLICY o₁ ✓ o₂ ✗ o₃ ✗ ⋮ ×16 RULES group mean & std A₁…₁₆ the sixteen answers grade each other — no value network anywhere
Redrawn from the paper's Figure 3, with the reward-model slot already swapped for R1-Zero's rulebook. The coral box in the PPO row is the expense GRPO deletes.

Find the coral box in the figure's top row — that is the expense in question. Now scan the bottom row: nothing sits in its place, only the sixteen attempts and two summary statistics.

GRPO wasn't invented here — it arrived in DeepSeekMath (Shao et al., 2024), built precisely to cut PPO's cost. The paper's own head-to-head (Figure 4) shows carefully tuned PPO can nearly match GRPO on math, but only after extra hyper-parameter search plus the value model's memory bill.

Step 5 · The advantage, by hand

The advantage is a z-score you can compute in your head.

“Beat the group mean, get pushed up” is the idea; the advantage Ai is the number. Let's earn it with rewards small enough to hold in one hand.

Take a group of just four attempts at our problem and score them with the accuracy rule alone: r = [1, 0, 0, 1] (attempts 1 and 4 boxed 211). Three moves, no calculator:

1

Average the group

Two of four scored — the mean reward is the curve everyone is graded against.

mean = (1+0+0+1) / 4 = 0.5
2

Measure the spread

Every reward sits exactly 0.5 away from the mean, so the standard deviation is 0.5.

every deviation = ±0.5 std = √(0.5²) = 0.5
3

Distance from the mean, in units of spread

That's all an advantage is: Ai = (ri − mean) / std. A z-score.

A₁ = (1−0.5)/0.5 = +1 A₂ = −1 A₃ = −1 A₄ = +1

Why bother dividing by the spread? Because the same trick must work across 26K questions at once. Without the division, a question where the model is torn 50/50 would send much louder gradients than one it nearly always gets right, and a handful of questions would dominate training. The z-score puts every question's group on one common scale — a fairness device, not a mathematical flourish.

Now play with a full group of eight. The interesting behavior is what happens when success is rare:

Try it · group advantages

Tap any attempt to flip its reward — every advantage in the group moves.

mean = 0.25 std = 0.43 correct → A = +1.73 wrong → A = −0.58

2 of 8 correct. Success is rare here, so each success earns a large positive advantage — rarity is amplified automatically.

Interactive needs JavaScript — the values above show the 2-of-8 case.

Edge case worth feeling

Set all eight the same and the spread hits zero — no advantage is defined, and the group teaches nothing. A question the model always solves, or never solves, generates no learning signal. RL can only amplify success it occasionally sees; keep that in your pocket for Step 8.

Simplifications on the table: the real runs use groups of 16 (we draw 8 to keep the cards readable), and we score with the accuracy rule alone — every attempt here is assumed to have kept its <think> tags, so the format reward cancels out of the comparison.

Step 6 · Scores become weights

Ai becomes a volume knob on every token of answer i.

Each of the eight attempts now carries one number: +1.73 if it boxed 211, −0.58 if it didn't. This is where most write-ups stop — and honestly, where we got stuck reading the paper: how does one number attached to a finished answer reach back and change 671 billion weights?

The key is to remember what an answer physically is. From the GPT-2 page: a language model writes one token at a time, each drawn from a probability distribution. Attempt o₁ is not a blob — it is a chain of thousands of individual token choices, and every choice has a probability the weights control. GRPO's move: use Ai as the learning signal for every token choice inside attempt i. The update direction is Ai · ∇ log π(oi) — nudge the weights so each token of an above-average attempt becomes more probable, each token of a below-average attempt less.

o₁ — boxed 211 · A₁ = +1.73 Let n = (a+c)² \boxed{211} every token in the chain pushed up — hard o₂ — boxed 420 · A₂ = −0.58 Assume \boxed{420} pushed down — gently, because |−0.58| is small arrow length ∝ |A_i| : the rare success is pulled hard, each ordinary failure is pressed down softly
One advantage, thousands of token-level nudges. Compare the arrow lengths on the two rows — that asymmetry is the 2-of-8 group you built in Step 5, acting on the weights.

The teal arrows in the top row are long because +1.73 is a big advantage; the coral arrows under the failed attempt are stubs because −0.58 is a small one. To see an actual number move, let's shrink the model to one knob. Suppose the only choice that matters is the final box: the model writes 211 with probability π and something else with probability 1 − π, and a single logit z controls it, π = σ(z). The real model adjusts billions of weights across every token — one knob versus billions is the honest boundary of this toy — but the direction and arithmetic of the update are exactly GRPO's.

1

Start where Step 5 left us

π = 0.25, so the sampled group of 8 contains 2 successes — the group you just built. A₊ = +1.73, A₋ = −0.58.

z = ln(0.25/0.75) = −1.10
2

Each attempt casts a weighted vote

A correct attempt pushes z up by A₊ · (1−π); a wrong attempt, pushed down, sheds probability onto everything else — including 211 — worth |A₋| · π.

2 × (1.73 × 0.75) = 2.60 + 6 × (0.58 × 0.25) = 0.87
3

Average the votes, take the step

Divide by the group size, scale by the learning rate η = 1, add to z, squash back to a probability.

g = 3.46 / 8 = 0.43 z = −1.10 + 0.43 = −0.67 π = 0.34

One update, and the chance of writing 211 rose from 25% to 34%. Notice that the six failures helped: pushing down wrong answers shoves probability toward everything else, the right answer included. Now run the loop yourself and watch where it goes — and where it stalls:

Try it · one GRPO step at a time

Set the starting probability and learning rate, then step. Every number below is checkable by hand.

start π₀ 0.25
learn rate η 1.00

A₊ = +1.73 · A₋ = −0.58 (mean 0.25, std 0.43)

g = [2 × 1.73 × 0.75 + 6 × 0.58 × 0.25] / 8 = 0.43

z: −1.10 → −0.67 · π: 0.25 → 0.34

π so far: 0.25

Step 0. Each press = one full GRPO cycle: sample a group, score it, z-score it, nudge the knob.

Interactive needs JavaScript — the worked numbers above show the first step from π = 0.25 with η = 1.

Two stalls are worth hunting for. Drag π₀ below ~6% and the idealized group contains zero successes — flat rewards, zero spread, no gradient. The model never improves on a question it never solves, which is why this recipe demands a base model already strong enough to succeed sometimes. And once π climbs near 1, every attempt is correct and the question goes silent the other way: nothing left to learn here; in the real run, 25,999 other questions are waiting.

All that remains is to write down what you just did. For each question q, sampling a group {o₁ … o₁₆} from the old policy:

J(θ) = 1G Σᵢ [ min( ρᵢ·Aᵢ ,  clip(ρᵢ, 1−ε, 1+ε)·Aᵢ ) β·KL ]

ρᵢ = πnew(oᵢ)/πold(oᵢ), per token · Aᵢ — your z-score from Step 5 · β = 0.001

Every part of this line is now something you've touched. Ai at the center is the z-score; the gradient of ρᵢ·Aᵢ is the per-token push you just stepped through (at the moment of sampling ρᵢ = 1, which is why our toy could ignore it). The rest is seat-belts: the clip stops any one batch from moving a token's probability too far, and the KL term is the familiar leash to a reference model.

The exact objective, and two honest wrinkles

Paper equations 1–3 add detail we folded away: the KL term uses an unbiased estimator (Schulman, 2020) and is added to the loss, not sprayed per-token into the reward as InstructGPT's PPO did — cumulative per-token KL would quietly punish long responses, the very thing this training grows. The reference policy is refreshed to the current policy every 400 steps so the leash never strangles.

Wrinkle two: R1's later RL stage sets the clip width ε = 10 — effectively unbuckling the upper seat-belt. The authors found tight clipping truncated gradients for too many tokens and hurt performance, while loose clipping risks instability; they chose loose and watched it (§3.2.1). Full derivation and the GRPO-versus-PPO discussion live in supplementary A.3.

Our stepper idealizes sampling — the number of successes in each group of 8 is set to round(8π) instead of being drawn at random — so that every displayed number is exactly reproducible on paper. Real groups are noisy around that expectation.

Step 7 · 10,400 steps later

Nobody asked for longer answers — accuracy paid for them, so they grew.

That update — push up what beat its group, push down what lagged — now runs 10,400 times. Watch two dials at once while it runs: the score on AIME 2024, and how long the model chooses to think.

Both climb together. Accuracy rises from 15.6% — roughly 2.3 of AIME's 15 problems — to 77.9%, sailing past the average human competitor (37.8%) with no reasoning example ever shown. And the average response stretches from a few hundred tokens to roughly 16,000. Re-read Step 2's rulebook: nothing in it mentions length. Long, self-checking attempts simply land in the correct pile more often, so every token of those habits keeps getting pushed up. Thinking time is a side effect with no line in the reward.

Try it · scrub the training run

Drag through training and read both dials. Curves traced from the paper's Figure 1 — endpoints exact, the path approximate.

0 40 80 acc % 0 10k 20k context cap doubled reflective “wait” spikes past 8k 0 4k 8.2k 10.4k training steps
AIME 2024 pass@1 avg response length (tokens)
training step 8,200

Step 8,200: accuracy ≈ 70% · avg response ≈ 9,500 tokens. The context cap doubles to 65,536 at 8.2k, and both curves jump.

Interactive needs JavaScript — the dots mark step 8,200.

Follow the teal dot and you'll feel the two-act structure: a long steady grind for 8,000 steps, then a second wind once the model is allowed — and inclined — to think in 60,000-token stretches. Majority-voting 16 samples pushes the final model to 86.7%, comfortably above the human average on a competition built for the best high-school mathematicians in America.

Where the gains land (supplementary C.1): on MATH, level-1 problems start near 95% and stay there; level-5 problems climb from ~55% to ~90%. The improvement concentrates exactly on what used to be hard. Learned frugality survives after training too: R1 spends <100 thinking tokens on “1+1=?”, under 7,000 on easy contest problems, and over 18,000 on the hardest (Figure 18).

Step 8 · The aha moment

“Wait, wait. Wait.” — reflection arrived on a schedule nobody set.

The length curve says the model chose to think longer. The transcripts show what the extra tokens were spent on.

Midway through training, an intermediate checkpoint produced this, on an algebra problem (we've trimmed the routine lines; the re-derivation runs on for pages):

R1-Zero, intermediate checkpoint · paper Table 2 Question: if a > 1, what is the sum of real solutions of √(a − √(a+x)) = x ?
To solve the equation √(a − √(a+x)) = x, let's start by squaring both sides …
(a − x²)² = a + x  ⟹  x⁴ − 2ax² − x + (a² − a) = 0

Wait, wait. Wait. That's an aha moment I can flag here.
Let's reevaluate this step-by-step to identify if the correct sum can be …
We started with the equation: √(a − √(a+x)) = x
First, let's square both sides: a − √(a+x) = x²  ⟹  √(a+x) = a − x²

Nobody wrote “pause and re-derive” into any template, rule, or dataset — check Steps 1 and 2 again if you doubt it. The researchers went counting: across training, reflective words (“wait”,“verify”,“mistake”,“check”…) grow 5- to 7-fold. And the word “wait” specifically follows a schedule — nearly absent before step 4,000, occasional through 7,000, then erupting after 8,000, right where the accuracy curve found its second wind.

count of “wait” per checkpoint — shape traced from Figure 9(b) step 0 4k 8k 10.4k
Different reflection habits switch on at different times — the tall amber spike sits just past step 8,000, where the accuracy curve in Step 7 turns upward again.

So where did the habit come from? The paper's own answer has two honest halves. First, the raw material was already there: V3-Base's pre-training web text is rich in worked math and code — including, the authors note, solution text generated by other models — so fragments of “wait, let me re-check” existed at low probability from day one. Second, RL made those fragments profitable. Attempts that happened to re-check landed in the correct pile more often, collected positive advantages, and Step 6's machinery pushed up every token of the habit. What looks like a lesson learned is selection working at scale.

The same logic explains a failure the authors report openly: they first tried this recipe on a 7B dense model and a 16B MoE. Responses grew longer but degenerated into repetition, and AIME barely moved. A base model that never stumbles onto success gives the z-score nothing to amplify — the Step 5 edge case, at model scale. Emergence here is real, but it is not free.

Key property

Incentivized, not installed. And the paper adds its own caution (supplementary B.3.2): the vivid first-person tone reads like a mind at work, but treat it as engineered heuristics amplified by reward — not evidence of one.

The full aha transcript, the reflective-word counts, and the per-difficulty accuracy curves are in supplementary C. For the curious: the algebra question's answer is (√(4a−3) − 1)/2 — try a = 3 and you'll find the lone real solution x = 1, so the sum is 1, matching the formula. The paper trims the transcript's tail, and so do we.

PART C

From R1-Zero to R1, and outward

Polish · the tally · six students · two dead ends

Step 9 · Four stages to R1

R1 is R1-Zero's skill, re-taught to a fresh base with manners.

Pure RL grew a strong reasoner with bad manners. R1-Zero mixes English and Chinese mid-thought and formats its work carelessly — the grader never charged a single point for any of that.

So the team ran the experiment again, this time engineering for a usable product. Four stages, alternating the two tools this page has kept apart on purpose — SFT for style, RL for skill:

Stage 1 · cold start

SFT, small

A few thousand curated long-CoT dialogs — human-cleaned, first-person, one language — fine-tune V3-Base into Dev-1. Style, not skill.

Stage 2 · RL round 1

GRPO + rules

Step 3's loop, plus one new rule: a language-consistency reward — the share of CoT words in the target language. Produces Dev-2.

Stage 3 · big SFT

800K samples

Dev-2 writes traces; keep only correct, readable ones (600K) + 200K general data. Then retrain a fresh V3-Base on all of it → Dev-3.

Stage 4 · RL round 2

Rules + preference

1,700 steps: rule rewards for reasoning, human-preference reward models for helpfulness and safety in the final 400. Out comes R1.

Two details repay attention. Stage 3 does not continue training Dev-2 — it restarts from a clean V3-Base, using Dev-2 only as the author of its textbook. The skill survives the reset because it lives in the 800K traces. And the honest wrinkle: watch AIME across the checkpoints below. The cold start initially costs 19 points — a few thousand polite examples dilute raw problem-solving — and RL wins it back with interest.

R1-Zero 77.9 Dev-1 59.0 Dev-2 74.0 Dev-3 78.1 R1 79.8
Division of labor

The paper's closing verdict: RL discovers reasoning that no human demonstration contains, and SFT anchors style and coverage where no rule can score. Neither alone shipped the product — the pipeline is the finding.

The reward-hacking episode promised in Step 2 (supplementary B.5): during stage-4 experiments, training longer against the learned preference reward sent the reward score steadily up while Codeforces pass@1 slid from ~0.34 to ~0.29 — the policy was flattering the judge. Hence: preference rewards for 400 steps only. Language-consistency ablation (B.6): slightly lower benchmark scores, far more readable CoT — a trade chosen in the user's favor.

Step 10 · The tally

Level with o1 on math and code — for a post-training bill under $300K.

Four stages later the manners are fixed. Time to grade the graduate — on the same benchmark we've tracked since the Step 7 curves.

The tally · AIME 2024, pass@1

DeepSeek-R1

79.8

OpenAI o1-1217

79.2

DeepSeek-R1-Zero (pure RL)

77.9

human participant average

37.8

0pass@1 (%) →100

97.3 MATH-500 pass@1 (o1: 96.4) — and 96.3rd percentile on Codeforces, rating 2029.
$294K total post-training: 101K H800-hours (Zero) + 5K (SFT data) + 41K (R1), at $2/GPU-hour.
75% on AIME 2025 — published after training, so memorization can't explain it. AMC 12: 143.7/150, clearing the USAMO qualification line.
#1 tie on Chatbot Arena (style-control, Jan 24, 2025) with o1 and Gemini-Exp-1206 — under an MIT license.

Where it trails, we should say so: GPQA Diamond (PhD-level science) reads 71.5 against o1's 75.7, and on the engineering-flavored Aider benchmark o1 leads 61.7 to 53.3 — software-engineering tasks got little RL because their test suites are slow to run in the loop. The headline is narrower and more interesting than “beats o1”: on checkable reasoning, the open recipe caught the closed one.

Contamination control: pre-training and RL data were filtered by 10-gram overlap against evaluation sets, and math RL prompts came exclusively from pre-2023 competitions. The AIME 2025 result above is the cleanest evidence — the contest didn't exist when training ended.

Step 11 · Distillation

Write the textbook once, and six small models learn from it.

One expensive model now writes reasoning traces worth studying — the same 800K samples that retrained V3-Base in Step 9. The cheapest thing to do with a good textbook is hand it to more students.

The team fine-tuned six open models — Qwen and Llama, 1.5B to 70B — on those 800K traces. Plain SFT, no RL at all. The smallest student embarrasses much larger closed models on math:

modelAIME 2024 (pass@1)MATH-500Codeforces rating
GPT-4o-05139.374.6759
Claude-3.5-Sonnet-102216.078.3717
R1-Distill-Qwen-1.5B28.983.9954
R1-Distill-Qwen-7B55.592.81189
R1-Distill-Llama-8B50.489.11205
R1-Distill-Qwen-14B69.793.91481
R1-Distill-Qwen-32B72.694.31691
R1-Distill-Llama-70B70.094.51633

The controlled question hiding here: is copying really better than learning first-hand? Run Part B's whole loop directly on Qwen2.5-32B and you get 47.0 on AIME — respectable, level with QwQ-32B-Preview. Distill R1 into the identical base and you get 72.6. The comparison is stark in a bar:

distilled from R1
72.6
pure RL on same base
47.0
QwQ-32B-Preview
50.0

The reading the paper gives: patterns a 671B model discovers transfer down cheaply, while a 32B model exploring alone hits the Step 5 wall — too few successes on hard problems to amplify. Discovery seems to need scale; the discovered patterns don't.

Replication rigor worth noticing: the team also ran pure RL on Qwen2-Math-7B, a base released before OpenAI-o1 existed, so no reasoning-model output could have leaked into it. AIME: 22.3 versus 7.9 for its instruction-tuned sibling — the recipe works on untouched ground. Distillation setup: 800K samples, 2–3 epochs, SFT only; the authors leave adding RL on top “to the community”.

Step 12 · Dead ends & recap

Two obvious ideas didn't survive contact — the paper says so in print.

Everything above is the branch that worked. The authors also published the branches that didn't, and they teach as much as the trunk.

Process Reward Models — grade every step, not just the answer

Three strikes. Nobody can define what one “step” of general reasoning is; nobody can label intermediate steps correct at scale (models do it badly, humans do it slowly); and a learned judge re-opens the reward-hacking door that Step 2's rulebook existed to close. Verdict: useful for reranking finished answers, not worth its cost inside the RL loop.

Monte Carlo Tree Search — explore solutions like AlphaGo explored Go

Go offers a few hundred moves per turn; token generation offers a vocabulary of them, at every position, for thousands of positions. Capping the branching traps the search in local optima, and guiding it needs a fine-grained value model — the exact component GRPO was built to delete. Search helped at inference with a pre-trained value model; training through self-search never took off.

And the standing limits, in the authors' own accounting: rule rewards only reach domains with answer keys, so open-ended writing still depends on the hackable kind of judge, used sparingly; the model overthinks simple questions; languages beyond English and Chinese trigger mixing; and few-shot prompting actually hurts it — ask plainly, zero-shot.

Before the bookend, six questions. If you can answer them without scrolling up, the machinery is yours:

Why does GRPO need no value model?

The group of 16 is its own baseline: each advantage is a z-score within the group. PPO's alternative is a policy-sized network that must predict final reward from half-finished reasoning — nearly unlearnable when the model may overturn itself thousands of tokens later.

A group scores [1, 0, 0, 1]. What are the advantages?

Mean 0.5, every reward 0.5 from it, std 0.5 — so A = [+1, −1, −1, +1]. The two successes get pushed up, the two failures down, with equal force because success and failure are equally common here.

Why divide by the standard deviation?

Fairness across the question pool. Without it, 50/50 questions would shout over nearly-solved ones; the z-score puts each group on a common scale so 26K questions can share one learning rate.

How does one Ai move billions of weights?

It multiplies the gradient of log-probability for every token of attempt i — positive advantage raises each token's probability, negative lowers it, with the clip and the β = 0.001 KL leash as guard rails. You ran one such step in the Step 6 panel.

Nothing rewards length — why did responses grow ~50×?

Selection, not instruction. Attempts that re-check and backtrack land in the correct pile more often, collect positive advantages, and their habits get reinforced token by token. Length is a side effect of paying for correctness.

Why refuse a neural reward model for reasoning?

Learned judges get flattered: the team's own run showed the reward score climbing while Codeforces skill fell. Rules can't be gamed that way — at the price of only covering domains with checkable answers.

What happened next — within weeks, open rebuilds (Open-R1, TinyZero) reproduced the R1-Zero jump at small scale; RL on verifiable rewards became the standard closing stage for reasoning models; and the 1.5B student still outscores GPT-4o on AIME. Both dead ends above are being re-attempted by others, now with this paper's map of the swamp.

“Rather than explicitly teaching the model how to solve a problem, we simply provide it with the right incentives, and it autonomously develops advanced problem-solving strategies.” — section 2.3, DeepSeek-AI, 2025
The profound impact

Reasoning became a recipe, not a secret.

OpenAI's o1 had shown the destination four months earlier and hidden the route. This paper published the route — method, weights, and price tag — and the field reorganized around it within a season.

2025 · the recipe

The RLVR wave

Open-R1, TinyZero and hundreds of successors rebuilt the loop in public. RL on verifiable rewards is now the default way reasoning gets trained — the journal version's related work already catalogs its own offspring.

Sept 2025 · peer review

Nature, refereed

The revised paper — the version this page draws on — made R1 the first frontier LLM to clear formal journal peer review, with training costs and safety evaluations disclosed under referee scrutiny.

1.5B–70B · the students

Reasoning got cheap

MIT-licensed weights, a $294K post-training bill, and six distilled models put competition-grade math on consumer hardware — and made the economics of frontier AI a public argument.

Every open reasoning model shipping today — and the verifiable-reward pipeline training it — walks the loop you just stepped through.