状態: ドラゴン (2026-10-31), 実測。 すべての学習と評価は、筆者が8GBのノートPC用GPU1枚で直接行いました。条件と判定基準は結果を見る前に書き留め、学習前に2回変更したこと(課題と採点)はその理由と共に第4節で明記しました。論文の数値はarXivの原文から表・図の番号と共に転記しました。 作成ルール: 実測データが基本であり、測定できなかったものは「未測定」、確認できなかったものは「未確認」と表示します。
目次
1. 質問: RLは新しい能力を作るのか
2025年初頭のDeepSeek-R1以降、「正解を機械的に確認できる問題」(数学、コード)において、強化学習で推論モデルを作る方法が標準となりました。これをRLVR(検証可能な報酬を使用するRL)と呼びます。モデルが答えを複数出し、正解した答えは確率を上げ、不正解の答えは下げます。
しかし、このプロセスがモデルに なかった能力を作るのか, あるいは すでにたまに出すことができた正解をより頻繁に出すようにするのかは別の話です。この違いを測定するツールがpass@kです。
- pass@1: 1回引いて正解する確率。普段使っている精度です。
- pass@k: k回引いて 1つでも 正解する確率。正解チェッカーがあればbest-of-k(複数引いて正しいものを選ぶ)で得られる上限です。
RLが「選び出し」だけを行うのであれば、pass@1は上がりますが、pass@k(大きなk)はほとんどそのままのはずです。ベースモデルもたくさん引けば結局はその答えを出すからです。新しい能力を作るのであれば、pass@kも上がらなければなりません。
2. 論文たちが語っていること
GRPO: 価値ネットワークなしで、同じ問題の答え同士を比較する
DeepSeekMath(arXiv 2402.03300)が提案したGRPOは、PPOから価値ネットワーク(critic)を除いた手法です。1つの問題に対して答えをG個抽出し、各答えの報酬から グループ平均を引いて標準偏差で割った値を、その答えのすべてのトークンのアドバンテージとして使用します。同じ問題の他の答えが基準線の役割を果たすのです。原論文の設定は、学習率1e-6、KL係数0.04、問題あたり64個でした。同論文の図7にはすでに「RLはMaj@Kは上げるがPass@Kは上げない」という観察があります。
Dr. GRPO(arXiv 2503.20783)は、GRPOの数式における2つの割り算が偏りを作ると指摘しました。答えの長さで割ると、不正解の答えは長いほどペナルティが軽くなって不正解が長くなり、グループの標準偏差で割ると、簡単すぎるあるいは難しすぎる問題に対する重みが大きくなります。両方を取り除いて定数で割ろうというのがDr. GRPOです。この実験はDr. GRPOに従います。
pass@k曲線の交差(2504.13837)
Yueらの「Does Reinforcement Learning Really Incentivize Reasoning Capacity in LLMs Beyond the Base Model?」では、複数のモデル・課題においてkを数百から千まで増やしてpass@kを描出しました。kが小さければRLモデルが勝ちますが、kが大きくなるとベースが追い抜いて先行します。RLモデルが解く問題は、ほとんどベースが解く問題の部分集合でした。測定の設定は、温度0.6、top-p 0.95、問題ごとにn個(n = 曲線の最も大きなk)を抽出して不偏推定量 1 − C(n−c, k)/C(n, k) で計算するものであり、本稿でもそのまま使用します。ただし、同論文の表4を見ると、Qwen2.5-7BのMATH500 pass@256はベース96.2、GRPO 150ステップ97.2、300ステップ96.0、450ステップ95.4でした。短く学習した時点では上限がむしろ少し上がり、長く学習するほど下がりました。今回の実験のように短い学習では上限が上がることもあるということです。
RLが変更するトークンは1–4%(2605.06241)
2026年の「Rethinking RL for LLM Reasoning: It's Sparse Policy Selection, Not Capability Learning」は、同じ疑問をトークン単位で見ました。RL前後のモデルの貪欲デコーディングを比較すると、RLが異なるトークンを選択する箇所は全体の1–4%であり、その箇所でRLモデルが選択したトークンは、ほぼいつでもベースモデルの上位5個の候補の中にありました(表2、平均順位約2)。変更された箇所は、ベースモデルが迷っている(エントロピーの高い)決定地点に集中していました。この観察から、著者らはRLなしで 問題50個とオフラインのロールアウトのみで決定地点の選択を修正するReasonMaxxerを作成し、全体的なRLと同等の性能を出したと報告しています(表3)。原文を読む際に注意すべき点が2つあります。ReasonMaxxerはGRPOではなくアドバンテージで重み付けしたオフライン学習であり、本文3.1節の「移動した位置は1つもない」という文が表2の0.01–0.12%と一致しません。同論文の表3において、Qwen3-0.6BにGRPOを適用した結果は、MATH500で0.338から0.372へとわずかに上がっただけでした。
例題1つでも(2504.20571)
1-shot RLVRは、Qwen2.5-Math-1.5Bに 問題1つを複製してRLVRを行ったところ、MATH500が36.0から73.6に上昇し、その問題が含まれる1.2kの問題で学習した結果と同じになったと報告しています。選択基準は学習中の正答率の分散が大きい問題であり、ベースが一度も解けない問題やラベルが間違っている問題は効果がありませんでした。著者らは形式報酬のみを与えた基準線と比較して「形式を修正した分」を差し引いたのですが、小規模モデルの実験でこの分が大きいという点が本稿の核心的な教訓につながります。
小さなモデルでは異なる場合がある(2607.16097)
チェスを用いて5Mから1Bのモデルの事前学習からRLまでを概観した「Understanding Reasoning from Pretraining to Post-Training」は、RLが一様にシャープにするのではなく、正解の増幅・稀な正解の発見・不正解の増幅が混ざった再分配であると捉えました。そして20Mモデルでは、RLの序盤にpass@16も急速に上昇しました(図2)。小さなモデルで再現する際、交差が必ず現れると期待してはならないという警告です。
3. 実験設計
8GBのノートPC用GPU1枚で実行できるサイズに縮小しました。
- モデル: Qwen2.5-0.5B-Instruct(Apache-2.0)。bf16の重みは固定し、LoRA(ランク32、α=64、注意機構・MLPのすべての線形層)のみを学習します。完全な微調整はAdamWの状態を含めると約8GBになるため収まりません。LoRAとGRPOはライブラリを使わず直接記述しました(合わせて300行余り)。ブログで損失を1行ずつ見せたいという理由もあります。
- 課題: 三桁×二桁−三桁の算数(例:
413 * 41 - 882)。問題はコードで作成しました(学習4,000、テスト128、重複なし)。プロンプトは「<think>の中に解き方、<answer>の中に答え」を要求します。 - 報酬:
<answer>の中の最後の整数が正解であれば1、そうでなければ0。形式のスコアは別途与えません。 - GRPO(Dr. GRPO式): ステップごとに問題16個×答え8個(温度1.0、最大384トークン)。アドバンテージ = 報酬 − グループ平均(標準偏差で割らない)。損失 = −Σ アドバンテージ × トークンの対数確率 ÷ (16 × 8 × 384)。KL項なし。1回引いて1回更新するため、PPOの比率やクリッピングは機能しません。AdamW(β 0.9·0.99)、150ステップ。
損失の核心は数行です。
rs = np.array([score(t, p) for t, _ in outs]) # 그룹 8개의 보상(0 또는 1)
adv = rs - rs.mean() # Dr. GRPO: 표준편차로 나누지 않는다
...
logp, mask = completion_logprobs(model, tok, prompts, completions) # 응답 토큰의 log π
loss = -(A * logp * mask).sum() / (16 * 8 * 384) # 응답 길이로 나누지 않는다(상수)
loss.backward()
3つの条件と基準線
| 条件 | 学習問題 | ステップあたり | 150ステップの間 |
|---|---|---|---|
| 多くの問題 | 4,000個を混ぜて1回ずつ | それぞれ異なる16問題 | 2,400問題を1回ずつ |
| 16問題 | ベースの通過率が0と1の間である問題のうちp(1−p)が大きい16個 | 同じ16問題 | 各問題150回 |
| 1問題 | そのうち最初の1つを16回複製(1-shot RLVR方式) | 同じ1問題 | 2,400回 |
| RLなし | ベースモデルをそのまま32回引いてpass@k |
16問題・1問題は、学習問題の最初の128個をベースに16回ずつ解かせて(温度1.0)通過率が混ざった問題を抽出しました。128個のうち31個が0と1の間でした。2605.06241の「edge of competence」、1-shot RLVRの「答えをたまに出す問題」と同じ考え方です。
学習率: LoRAでGRPOを行う場合の学習率は論文に根拠がないため、「多くの問題」条件の30ステップで{1e-5, 5e-5, 2e-4}を短く検証し、最後の10ステップの平均報酬が最も高い値を3つの条件で共通して使用しました。結果は1e-5: 0.38、 5e-5: 0.60、2e-4: 0.00でした。2e-4では方策が崩壊し、すべての答えが384トークンの最後まで同じ言葉を繰り返しました。
評価: テスト128問題ごとに32個(温度0.6、top-p 0.95)、不偏推定量によるpass@1–32。ベースと各条件の75・150ステップ。判定は問題単位のブートストラップ(2,000回)により(RL − ベース)の差の95%区間を出しました。事前に定めた基準は「pass@1が上がる = 区間の下限 > 0」、「上限がそのまま = pass@32の差の区間が0を含んでいる、または差がpass@1の差の1/3未満」です。
4. 学習前に変更した2つのこと
結果を見る前に決めた条件を、学習の前に2回変更しました。どちらもRLを1歩も回す前であり、変更した時刻と理由を事前登録ドキュメントに残しました。
1. 課題:カウントダウン → 算数。 最初の計画はカウントダウン(3つの数字を四則演算で組み合わせて目標値を作るもの)でした。ベースの通過率を測ってみたところ、0.5Bモデルは32問×16個でほとんど1問も正解できませんでした(pass@16 0〜3%)。8つのグループがすべて0であればアドバンテージが0となり、GRPOは学ぶシグナルを得られません(2609.25463がまとめたp^G + (1−p)^G)。そのため算数に変更しました。
2. 採点を2つに分け、さらに難しい算数へ。 2桁×2桁−3桁の算数では、ベースのpass@1は0.10でしたが、解答の形式を無視して「応答の最後の整数」で採点すると0.62であり、pass@32は1.0でした。モデルはすでに計算のやり方を知っており、できていないのは <answer> のタグ形式でした(形式遵守率25%)。この課題では「RLが能力の上限を引き上げるか」を問うことはできません(すでに1.0)。そこで2つの変更を行いました。
- 評価に 緩い採点(タグ内の答えが合っている、または応答の最後の整数が正解)を加え、「形式」と「計算」を分けて確認します。学習の報酬はこれまで通り厳しい採点です。判定は両方で行い、「RLが選び出しているか」の判断は緩い採点を重視します。形式は能力ではなく出力規約だからです。この手順も結果を見る前に記載しました。
- 課題を 3桁×2桁−3桁に難しくしました。ベースの緩いpass@1は0.18、pass@32は0.81であり、計算能力においても伸び代があります。
| 課題候補(問題32×32個) | 厳しい pass@1 | 厳しい pass@32 | 緩い pass@1 | 緩い pass@32 | 形式遵守率 |
|---|---|---|---|---|---|
| 2桁×2桁−3桁 | 0.097 | 0.875 | 0.623 | 1.000 | 24.5% |
| 3桁×2桁−3桁 | 0.010 | 0.281 | 0.179 | 0.812 | 16.3% |
| 2桁が4つ:a×b − c×d | 0.021 | 0.438 | 0.436 | 0.969 | 11.6% |
| 3桁×3桁−4桁 | 0.004 | 0.094 | 0.098 | 0.594 | 11.6% |
その他、モデルファイルの generation_config.json に繰り返しペナルティ1.1が含まれておりサンプリングに影響を与えていたため、学習前に見つけて1.0に固定しました。RLの勾配の式はサンプルが方針そのものであるという前提に基づいているため、隠れたサンプリング設定は結果を静かに歪めます。メモリ制限によりポッドが2回強制終了したこともありましたが、条件とは無関係です。
5. 結果
学習曲線
| 条件 | 最初の10ステップの平均報酬 | 最後の10ステップ | 応答の長さ(最初 → 最後) | 1ステップあたりの時間 |
|---|---|---|---|---|
| 多くの問題 | 0.17 | 0.68 | 131 → 173 トークン | 8.4秒 |
| 16問 | 0.63 | 1.00 | 118 → 384(最大) | 10.7秒 |
| 1問 | 0.80 | 1.00 | 76 → 62 | 3.5秒 |
16問および1問では、50ステップ以内に学習問題をすべて正解しました。その後は8つのグループすべてで1となったためアドバンテージが0になり、学ぶべきシグナルはなくなりました。
pass@k:2種類の採点方法による
| モデル | 採点 | pass@1 | pass@4 | pass@32 | 形式遵守率 |
|---|---|---|---|---|---|
| ベース | 厳しい | 0.019 | 0.066 | 0.258 | 16.2% |
| ベース | 緩い | 0.248 | 0.466 | 0.836 | |
| 多くの問題 75ステップ | 両方同じ | 0.660 | 0.741 | 0.805 | 100% |
| 多くの問題 150ステップ | 両方同じ | 0.610 | 0.642 | 0.680 | 100% |
| 16問 150ステップ | 両方同じ | 0.141 | 0.166 | 0.195 | 100% |
| 1問 150ステップ | 両方同じ | 0.182 | 0.231 | 0.297 | 99.9% |
RL後のモデルはすべて形式をほぼ100%守るようになり、厳しい採点と緩い採点が同じ結果になりました。差があるのはベースのみです。
事前に決めた判定(問題単位のブートストラップ、95%区間)
| モデル | 採点 | Δpass@1 | Δpass@32 | 判定 |
|---|---|---|---|---|
| 多くの問題 75 | 緩い | +0.412 [+0.341, +0.484] | −0.031 [−0.109, +0.047] | pass@1 増加、 上限維持 |
| 多くの問題 150 | 緩い | +0.361 [+0.269, +0.447] | −0.156 [−0.250, −0.055] | pass@1 増加、 上限低下 |
| 16問 150 | 緩い | −0.107 [−0.154, −0.060] | −0.641 [−0.727, −0.547] | pass@1 低下 |
| 1問 150 | 緩い | −0.067 [−0.116, −0.019] | −0.539 [−0.625, −0.453] | pass@1 低下 |
| 多くの問題 75 | 厳しい | +0.641 [+0.567, +0.709] | +0.547 [+0.445, +0.641] | 両方増加 |
| 16問 150 | 厳しい | +0.122 [+0.072, +0.175] | −0.062 [−0.133, +0.016] | pass@1 増加 |
| 1問 150 | 厳しい | +0.163 [+0.110, +0.223] | +0.039 [−0.031, +0.109] | pass@1 増加 |
緩い採点において「32個のうち1つでも正解した問題」の数(カバレッジ)は、ベースの107個から、多くの問題の75ステップでは103個(RLでのみ解けた問題12、ベースでのみ解けた問題16)、150ステップでは87個(12 / 32)に減少しました。16問では25個、1問では38個でした。
同じ問題をどのように解くか
テストの1問目 413 * 41 - 882(正解 16051)に対する応答です(150ステップ、温度 0.6、32個中1番目、改行は / で表示)。
- ベース(32個中形式が一致した正解0個、緩い採点で7個):「1) 413 × 41 を計算 / 413 × 41 = 17073 / 2) 882 を引く…」と段階に分けてはいますが、掛け算自体を一度に行って間違えることもあり、答えをタグに含めません。
- 多くの問題(32個中27個正解):「413 * 41 = 413 * (40 + 1) = 413 * 40 + 413 * 1 = 16520 + 413 = 16933 / 16933 − 882 = 16051 / …」掛け算を分解するアプローチを選択しています。この解き方はベースでも時々見られた方式です。
- 16問(0個):「413 * 41 = 16613 / 16613 − 882 =
<answer> 15731 </answer></think></think>…」掛け算を1行で行い、答えの後に閉じタグを最大長まで繰り返します。 - 1問(0個):「413 * 41 = 16633 / 16633 − 882 =
<answer> 15751 </answer>」短くすっきりとしていますが、掛け算を一度に行ってしまうため間違えます。
6. 考察
1. 多くの問題で行ったGRPOは「選び出した」. 計算能力に基づくpass@1は0.25から0.66へと大きく向上しましたが、32回サンプリングした際に1つでも正解する確率(pass@32)は0.84から0.81へと統計的に同等でした。kを大きくするとベースが追いつき、75ステップモデルはk=16と32の間で、150ステップモデルはk=8と16の間でベースに追い越されました(図)。Yueらの交差が0.5Bモデル・算数課題でも確認されました。学習を150ステップまで増やすとpass@32は0.68へと有意に低下し、カバレッジも107→87問に減少しました。同じ論文の表4にある「長く学習するほどpass@256が低下する」という傾向と一致しています。どのようなものを選んだのかは応答にも表れています。掛け算を(40 + 1)に分解するやり方は、ベースの分布にすでに存在していた解き方です。2605.06241が述べた「ベースの上位候補の中から決定ポイントの選択を変更する」という主張と一致しています(トークン単位の分析は未計測)。
2. 厳しい採点だけを見ていたら結論は異なっていた。 厳しい採点では、3つの条件すべてでpass@1が向上し、多くの問題の条件ではpass@32まで0.26→0.81へと大きく向上しました。「RLが上限を引き上げた」と読み取れる数値です。しかし、その大部分は <answer> タグを使用するようになったことによるものでした。ベースの形式遵守率は16%であり、RL後は100%でした。1-shot RLVRが「形式報酬の基準線」を個別に設け、Dr. GRPOがテンプレートの課題を指摘した理由はここにあります。小さなモデルほど、形式が占める割合が大きくなります。
3. 少数の問題で行ったGRPOはこの設定では失敗した。 16問・1問では形式は学習したものの(厳しいpass@1 +0.12・+0.16)、計算能力はむしろ低下し(緩いpass@1 −0.11・−0.07)、多様性が損なわれてpass@32が0.20・0.30まで低下しました。学習問題を50ステップ以内にすべて正解した後は報酬がすべて1となりシグナルがなくなり、その間に「掛け算を1行でする」短い解き方や「答えの後にタグを繰り返す」癖に陥りました。2605.06241の「数十問で十分である」という主張や1-shot RLVRの結果を否定するものではありません。条件が異なります。
- 1-shot RLVRはKL(0.001)とエントロピーボーナスを使用しており、エントロピー項が飽和後の汎化を促進すると報告されています。この実験にはどちらもありません。
- ReasonMaxxer(2605.06241)はGRPOではなくオフラインロールアウト上の加重学習であり、決定ポイント以外のトークンはベースの分布に固定します(KLアンカー)。「少数の問題」の成功には、この固定する仕組みが伴っていました。
- 学習率(5e-5)は多くの問題の条件に合わせて選ばれました。同じ問題を150回見る条件においては大きすぎる可能性があります。
- モデルが0.5Bの汎用指示モデルであり、課題が算数です。論文では1.5B以上の数学特化モデルが多く使われています。
結局、この小さな実験が示したのは、「少数の問題でRLを行うには、方針がベースから離れないように固定する仕組みが必要であるように見える」ということです。これは次回の実験の仮説であり、まだ未計測です。
7. 限界
- シードが1つです(条件ごとに1回)。ブートストラップ区間は問題サンプルのばらつきのみを捉えており、学習のばらつきは捉えていません。
- モデルが1つ(0.5B指示モデル)、課題が1つ(合成算数)、LoRA(ランク32)、150ステップ。論文の規模(1.5B〜671B、数千ステップ)とは異なります。
- 緩い採点は「応答の最後の整数」であるため、ベースの計算能力を少し低く見積もっている可能性があります(答えの後に別の数字を書くと不正解とみなされるため)。
- KL・エントロピー・形式報酬の基準線を設けた比較学習は実施できませんでした(未計測)。学習率も条件ごとに調整していません。
- pass@kはk=32までです。交差がk=8〜16で確認されたため結論には十分でしたが、より大きなkにおける挙動は未計測です。
元データと参考文献
- コード:
grpo.py(LoRA・GRPO・評価・問題選定)、countdown.py(問題生成と採点)、pipeline.py(事前登録された順序)、analyze_b.py(判定)。 - 元データ:評価ごとの
eval_*.json(問題別の正解数・形式遵守数・応答サンプル)、学習のtrain_log.csv、学習率の選択のlr_choice.json、事前登録のPLAN.md(変更1〜4)。 - モデル:Qwen2.5-0.5B-Instruct(Apache-2.0、リビジョン 7ae5576)。問題はコードで生成するためダウンロードしたデータはありません。
- Shao他、「DeepSeekMath」、arXiv 2402.03300。DeepSeek-AI、「DeepSeek-R1」、arXiv 2501.12948。
- Liu他、「Understanding R1-Zero-Like Training: A Critical Perspective」(Dr. GRPO)、arXiv 2503.20783。
- Yue他、「Does Reinforcement Learning Really Incentivize Reasoning Capacity in LLMs Beyond the Base Model?」、arXiv 2504.13837。
- Wang他、「Reinforcement Learning for Reasoning in LLMs with One Training Example」、arXiv 2504.20571。
- Akgül他、「Rethinking RL for LLM Reasoning: It's Sparse Policy Selection, Not Capability Learning」、arXiv 2605.06241。
- Shen他、「Understanding Reasoning from Pretraining to Post-Training」、arXiv 2607.16097。
- Gholipour 他, "Rollout Efficiency in RL for Reasoning LLMs", arXiv 2609.25463.