TT Lab
ブログ

한국어 English 日本語 中文

はじめる
ブログ

ブログ

RLは選び出しているのか: 0.5Bモデルで検証したGRPOとpass@k

状態: ドラゴン (2026-10-31), 実測。 すべての学習と評価は、筆者が8GBのノートPC用GPU1枚で直接行いました。条件と判定基準は結果を見る前に書き留め、学習前に2回変更したこと(課題と採点)はその理由と共に第4節で明記しました。論文の数値はarXivの原文から表・図の番号と共に転記しました。 作成ルール: 実測データが基本であり、測定できなかったものは「未測定」、確認できなかったものは「未確認」と表示します。

目次

1. 質問: RLは新しい能力を作るのか

2025年初頭のDeepSeek-R1以降、「正解を機械的に確認できる問題」(数学、コード)において、強化学習で推論モデルを作る方法が標準となりました。これをRLVR(検証可能な報酬を使用するRL)と呼びます。モデルが答えを複数出し、正解した答えは確率を上げ、不正解の答えは下げます。

しかし、このプロセスがモデルに なかった能力を作るのか, あるいは すでにたまに出すことができた正解をより頻繁に出すようにするのかは別の話です。この違いを測定するツールがpass@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枚で実行できるサイズに縮小しました。

損失の核心は数行です。

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つの変更を行いました。

課題候補(問題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. 結果

学習曲線

학습 중 보상(정답 비율, 5스텝 이동 평균) 스텝마다 문제 16개 × 응답 8개, 온도 1.0, 실측 0 0.2 0.4 0.6 0.8 1 1 25 50 75 100 125 150 GRPO 스텝 평균 보상 16문제 1문제 많은 문제
図:学習中の報酬
条件 最初の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@k, 느슨한 채점(마지막 정수) 0.5B 지시 모델, 테스트 128문제 × 32개, 온도 0.6, 따로 적지 않으면 150걸음, 실측 0 0.2 0.4 0.6 0.8 1 1 2 4 8 16 32 k(뽑는 개수, 로그 눈금) pass@k 베이스 많은 문제 75걸음 많은 문제 1문제 16문제
図:pass@k 緩い採点
pass@k, 엄격 채점(태그 안의 답) 0.5B 지시 모델, 테스트 128문제 × 32개, 온도 0.6, 따로 적지 않으면 150걸음, 실측 0 0.2 0.4 0.6 0.8 1 1 2 4 8 16 32 k(뽑는 개수, 로그 눈금) pass@k 많은 문제 75걸음 많은 문제 1문제 베이스 16문제
図:pass@k 厳しい採点
モデル 採点 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番目、改行は / で表示)。

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の結果を否定するものではありません。条件が異なります。

結局、この小さな実験が示したのは、「少数の問題でRLを行うには、方針がベースから離れないように固定する仕組みが必要であるように見える」ということです。これは次回の実験の仮説であり、まだ未計測です。

7. 限界

元データと参考文献

ログインするといいねできます

コメント

まだコメントはありません。

ログインするとコメントできます