LabHub

ブログ

推論モデルはどう作られるのか — CoT から GRPO まで、論文十二本でたどる系譜

한국어English日本語

はじめに — 「長く考える」とは実装上なにを指すのか

2024年の秋から、モデル名に reasoning という語が付くようになりました。o1、R1、QwQ、Qwen3 の thinking モード。紹介文はたいてい同じことを言います。「答える前に長く考えます」。

しかし、それが実装の水準で正確になにを意味するのか はあまり説明されません。パラメータが増えたわけでも、新しい構造が生まれたわけでもありません。Transformer はそのままです。変わったのは なにを出力するように学習させたか だけです。

この記事はその変化を論文十二本でたどります。2022年のプロンプト技法から2025年の強化学習パイプラインまで、一本の筋が通っています。最後には、24GB のグラフィックカード一枚でどこまで再現できるかを見積もります。

読み終えたあと、次の三つを区別して説明できるようになるはずです。

第1部 — プロンプトで考えさせていた時代(2022)

Chain-of-Thought — 例示八個が変えたもの

出発点は Google Brain の Chain-of-Thought Prompting(Wei et al., 2022)です。着想は拍子抜けするほど単純で、少数例を示すときに答えだけでなく 解く過程も一緒に見せる というものです。

Q: ロジャーはテニスボールを5個持っている。3個入りの缶を2つ買った。今いくつか。
A: 最初に5個。3個入り2缶は6個。5 + 6 = 11。答えは11。

PaLM 540B の GSM8K(小学校の文章題)正答率が 17.9% から 58.1% に上がりました。モデルには一切手を触れず、プロンプトだけを変えた結果です。

ここで数字より重要な観察が一つあります。この効果は十分に大きいモデルでしか現れませんでした。 10B 以下では、むしろ性能が落ちたのです。中間の一歩を組み立てる力がないモデルに過程を書けと求めても、でたらめが増えるだけでした。

Self-Consistency — 一回のかわりに四十回

続く Self-Consistency(Wang et al., 2022)はさらに単純です。温度を上げて答えを40個つくり、もっとも多く出た答え を選びます。

GSM8K が 58% から 74% に上がりました。のちにテスト時スケーリングと呼ばれる交換関係、つまり 推論時に計算を足せば正答率が上がる という関係がここで初めてはっきり見えます。

ただし、この時期の手法には共通の天井がありました。プロンプトはモデルがすでに持つ能力を引き出すだけで、ない能力を作り出すことはできません。 次の一手は、その能力そのものを学習させることでした。

第2部 — 思考を学習データに変える(2022〜2023)

STaR — 自分が書いた解法で自分を教える

STaR: Self-Taught Reasoner(Zelikman et al., 2022)は、いま読むと R1 の直系の先祖です。手順は四行です。

  1. モデルに問題を解かせる(解法つきで)。
  2. 正解に届いた解法だけ を残す。
  3. 残った解法で微調整する。
  4. 1に戻る。

間違えた問題には答えをヒントとして与え、逆向きに理由づけを書かせて(rationalization)それも使います。人が書いた解法データは一行も要りません。答えさえあればよいのです。

この「答えさえあればよい」という性質が、三年後に検証可能な報酬(verifiable reward)という名前で分野をひっくり返します。

Let's Verify Step by Step — 過程に点をつける

OpenAI の Let's Verify Step by Step(Lightman et al., 2023)は別の問いを立てます。複数の候補解から一つを選ぶとき、なにを見て選ぶのか。

二つの採点者が比べられました。

採点者学習信号必要なラベル
ORM(結果報酬モデル)最終解が合っているか答え一つ
PRM(過程報酬モデル)各段階が正しいか段階ごとの人手ラベル

80万段階に人手でラベルを付けて PRM800K をつくり、MATH で PRM が ORM を明確に上回りました(78.2% 対 72.4%)。

理由は直観的です。結果報酬は「たまたま合った解法」を捨てられません。 3段階目で符号を間違え、5段階目でまた間違えて偶然答えが合った解法も、ORM には満点です。そういう解法で学習すれば、モデルは誤った癖を覚えます。

論文の結論は明快でした。過程を監督するほうが正しい。ところが二年後、DeepSeek はちょうど逆の報告を出します。この話は第5部で戻ります。

第3部 — 強化学習が盤面をひっくり返す(2024〜2025)

o1 — 考える時間を買えば精度が上がる

2024年9月の OpenAI o1 は手法を公開しませんでしたが、図を一枚だけ見せました。横軸に学習計算量と テスト時計算量、縦軸に AIME 正答率。どちらも対数目盛で直線に伸びていました。

この図の伝えることはこうです。モデルを大きくする以外に、性能を上げる軸がもう一本ある。 答える前に長く考えさせればよい。そしてその「長く考える」は強化学習で学習される。

DeepSeek-R1-Zero — 教師データなしの純粋な強化学習

2025年1月の DeepSeek-R1(DeepSeek-AI, 2025)はその方法を公開しました。なかでも R1-Zero の実験が印象的です。ベースモデル(DeepSeek-V3-Base)に 人が書いた推論データを一行も与えず、強化学習だけを回したのです。

報酬は二つだけでした。

それだけです。ところが学習が進むにつれ、モデルは 自分から応答を長くしていきました。 誰も長く書けとは言っていません。長く考えたほうが正答率が高いので、そちらへ最適化されたのです。AIME 2024 の正答率は 15.6% から 71.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...

自分の解法を振り返って検討し直す行動 が、明示的に教えられないまま現れました。強化学習が見つけた戦略でした。

GRPO — 価値ネットワークを捨てた理由

R1 が使ったアルゴリズムは GRPO(Group Relative Policy Optimization)です。PPO を使わなかった理由を理解すると、この分野の実務的な制約が見えてきます。

PPO はトークンごとの優位(advantage)を求めるために 価値ネットワーク を別に学習します。方策とほぼ同じ大きさのモデルがもう一つ要るということです。671B のモデルを学習しながら 671B の批評家も一緒に回すのは、現実的ではありません。

GRPO は批評家をなくし、かわりに 同じ問いに対して答えを G 個生成し、そのグループの中で相対評価 します。

同じ問題に答えを16個生成 → 各答えの報酬 r_1 … r_16
A_i = (r_i - mean(r)) / std(r)          ← これが優位

ある答えがグループ平均より良ければその方向へ、悪ければ逆へ方策を押します。基準線をニューラルネットで推定するかわりに 標本統計量で置き換えた わけです。

目的関数は PPO と同じクリッピングの形に KL 罰則を足したものです。

J(θ) = E[ min( ρ_i · A_i,  clip(ρ_i, 1-ε, 1+ε) · A_i ) ] − β · D_KL(π_θ ‖ π_ref)
       ρ_i = π_θ(o_i|q) / π_θ_old(o_i|q)

メモリは半分以下に減り、検証可能な報酬のある領域(数学・コード)では PPO と同等に働きました。理論的な美しさではなく資源の制約がアルゴリズムを決めた 事例です。

R1 の四段階パイプライン

R1-Zero は成績は良かったものの、読みにくく、一つの応答の中で中国語と英語が混ざりました。人が使う代物ではありません。そこで最終的な R1 は四段階を踏みます。

段階すること目的
1. コールドスタート SFT長い CoT 数千件で微調整読める出力形式を先に入れる
2. 推論 RLGRPO + 正確さ・形式・言語一貫性 報酬推論力を押し上げる
3. 棄却サンプリング SFT2のモデルで60万件生成し、良いものだけ残して再学習一般能力を取り戻す
4. 全領域 RL有用性・無害性まで含めて再び RL人が使えるようにする

第3段階が特に重要です。推論だけを学習させると、ほかの能力が崩れます。 数学は解けるのにメールは書けないモデルになります。そこで推論データ60万件に一般データ20万件を混ぜて分布を戻します。

Kimi k1.5 — 長さに値段をつける

同じ月に公開された Kimi k1.5(Moonshot AI, 2025)は、同じ問題を別の角度から扱います。応答が長くなれば正答率は上がりますが、費用も上がります。そこで 長さ罰則 を報酬に直接入れました。

len_reward = 短くて正解なら+、長いだけで不正解なら−

さらに、長く考えるモデルの力を短く考えるモデルへ移す long2short も提案しています。実務ではこの軸が効きます。正答率だけを見て作ると、トークン代を払えません。

第4部 — 安く作る方法(2025)

s1 — 千件のサンプルと「Wait」

スタンフォードの s1: Simple test-time scaling(Muennighoff et al., 2025)は、この分野でもっとも痛快な論文です。強化学習をまったく使いません。

この budget forcing だけで、モデルは自分の答えを見直して誤りを直します。AIME24 で o1-preview を上回りました。

この結果の含意は重いものです。長い推論の力は事前学習ですでに獲得されていて、事後学習はそれを取り出す鍵にすぎないかもしれない。 同じ結論を上海 AI Lab の LIMO(Ye et al., 2025)が817件で確かめています。

蒸留 — 大きなモデルの思考を小さなモデルへ

R1 論文でもっとも実用的な節は蒸留の実験です。R1 が生成した80万件で Qwen・Llama を微調整したところ、1.5B のモデルが AIME で GPT-4o を上回りました(28.9% 対 9.3%)。

さらに興味深いのは対照実験です。Qwen-32B に直接 RL を回すより、R1 の出力で蒸留したほうが良かったのです。

小さなモデルを強化学習で直接鍛えるより、大きなモデルが見つけた推論のパターンを蒸留するほうが安く、強い。

小さなモデルは、RL が強化するに値する良い解法をそもそも生成できません。探索で見つからないものは学習もできないのです。

RLVR — 報酬モデルそのものをなくす

Allen AI の Tülu 3(Lambert et al., 2024)が整理した概念が RLVR(Reinforcement Learning with Verifiable Rewards)です。報酬をニューラルネットで推定せず、プログラムで検証 します。

報酬モデルがなければ報酬ハッキングの余地が減り、採点が決定的なので再現もしやすい。推論の学習が数学とコードで先に成功したのはこれが理由です。 採点が自動の領域だったからです。

第5部 — 実際に作るとぶつかる壁

報酬ハッキング

モデルは報酬関数を最適化するのであって、こちらの意図を最適化するのではありません。実際に報告された例です。

R1 がニューラル報酬モデルを使わなかった理由がこれです。大規模な RL では、報酬ハッキングの対策がパイプライン全体を複雑にしてしまいました。

なぜ PRM は実務で退けられたのか

第2部では PRM が ORM に勝ったと書きました。ところが R1 論文は PRM を使わず、その理由を三つ挙げています。

  1. 一般的な推論では「段階」を定義しにくい。 数学の証明は行で分かれますが、開かれた問題はそうではありません。
  2. 中間段階の正誤を自動判定しにくい。 人がラベルを付ければ拡張できず、モデルに付けさせればその誤りがそのまま入ります。
  3. PRM 自体が報酬ハッキングの標的になる。 段階の点を上げる言い回しをモデルが学びます。

まとめるとこうです。PRM は正しいが高い。 検証可能な結果報酬は粗いが、安くてハッキングされにくい。大規模では後者が勝ちました。

考えすぎ

Do NOT Think That Much for 2+3=?(Chen et al., 2025)は逆方向の問題を指摘します。推論モデルは易しい問題にも数千トークンを使い、2+3 を求めるのに複数の方針を検討します。

正答率が上がらないのに費用だけ上がる区間が存在するということです。だから最近のモデルは思考予算の切り替えを備えています(Qwen3 の thinking モード、enable_thinking フラグ)。LabHub がローカルモデルを呼ぶときもこのフラグを切ります。台本づくりに長い熟考は要らず、トークンが三倍になるだけだからです。

第6部 — 24GB 一枚でどこまでできるか

このブログを載せているホームラボには RTX 5090 Laptop 24GB が一枚あります。なにが載るか見積もってみます。

推論には余裕があります

このカードにはいま、vLLM で Qwen3.8-27B の NVFP4 量子化版が載っています。実測値です。

項目
重み16.2GB(NVFP4)
文脈長16K
同時リクエスト4
単一リクエストの処理量39 tok/s
同時4件の合計138 tok/s

27B 級が 24GB に載るのは4ビット量子化のおかげです。推論だけなら余裕があります。

学習は計算が違います

GRPO の学習に要るメモリを項目ごとに積んでみます。7B モデルを bf16 で全体微調整すると仮定するとこうなります。

項目大きさ
方策モデルの重み(bf16)14GB
オプティマイザ状態(AdamW、fp32 モーメント2つ)56GB
勾配14GB
参照モデル(KL 用、固定)14GB
活性化+KV キャッシュ(16件 × 4K トークン)10GB 以上
合計約108GB

24GB では始まりもしません。そこでホームラボでは三つを調整します。

  1. LoRA に替える。 オプティマイザ状態はアダプタにしか付かないので 56GB が 1GB を切り、参照モデルはアダプタを外した同じ重みで済むので 14GB が 0 になります。
  2. モデルを小さくする。 1.5B〜4B 級を使います。R1 の蒸留実験が示したとおり小さなモデルは直接 RL より蒸留が向きますが、パイプラインを理解するのが目的 なら小さくて十分です。
  3. 生成を分ける。 GRPO は時間の大半を生成に使います。vLLM を別プロセスで立ててロールアウトを受け、学習は別のカードで回せばよい。verl も TRL もこの構成を支えています。

こうすると Qwen3-1.7B + LoRA rank 16 + グループ幅8 + 生成長 1K あたりが 24GB に収まります。

報酬関数から書くほうがよい

実際に試すなら、学習コードより 採点器を先に 書くことを勧めます。GSM8K ならこうなります。

import re

ANSWER = re.compile(r"<answer>\s*(-?[\d,]+(?:\.\d+)?)\s*</answer>")

def reward(completion: str, gold: str) -> float:
    """検証可能な報酬:形式 0.2 + 正解 1.0。ニューラルネットは使わない。"""
    score = 0.0
    if "<think>" in completion and "</think>" in completion:
        score += 0.1
    m = ANSWER.search(completion)
    if not m:
        return score                      # 形式すら守れないならここまで
    score += 0.1
    got = m.group(1).replace(",", "")
    return score + (1.0 if got == gold.replace(",", "") else 0.0)

この二十行がパイプラインの心臓です。ここが甘いと、モデルは正確にその甘いところを見つけます。たとえばこの関数は <answer> が複数あっても最初の一つしか見ません。モデルがそれに気づけば、候補をずらりと並べて最初に一番それらしいものを置く戦略を学びます。実際に出会う種類の問題です。

まとめ — 本質はなんだったのか

系譜をたどると、一文に収束します。推論モデルは新しい構造ではなく、採点できる目標に向けて長い出力を最適化した結果です。

三つの時期を貫く制約も同じです。自動で採点できる領域でしかこの方法は働きません。 数学とコードが先に破られたのは偶然ではありません。そしていまの最前線は、採点しにくい領域をどう採点可能にするか、という問いそのものです。

🧠 理解度チェック

1. GRPO が PPO の価値ネットワークを外せた理由はなにか。

同じ問いに答えを複数生成し、そのグループの平均と標準偏差で優位を正規化するからです。基準線をニューラルネットで推定するかわりに標本統計量で置き換えたので、方策と同じ大きさの批評家を学習する必要がなくなりました。

2. PRM がベンチマークでは ORM に勝つのに大規模 RL で使われない理由を二つ以上挙げよ。

一般的な推論では段階の境界を定義しにくいこと、中間段階の正誤を自動判定しにくく人手ラベルは拡張できないこと、そして PRM 自体が報酬ハッキングの標的になりパイプラインが複雑になることです。

3. R1 のパイプラインから第3段階(棄却サンプリング SFT)を外すとなにが起きるか。

推論力は保たれますが、文章・常識・役割演技といった一般能力が落ちます。推論データだけで学習すると分布が狭くなるため、一般データを混ぜて戻す段階が要ります。

4. 24GB 一枚で 7B モデルの GRPO 全体微調整ができない最大の理由はなにか。

オプティマイザ状態です。AdamW はパラメータごとに fp32 のモーメントを二つ持つので、7B なら約 56GB になります。重み(14GB)よりはるかに大きい。LoRA はこの項をアダプタの大きさまで縮めて解決します。

参考文献

コメント

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

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