GRPO(Group Relative Policy Optimization)は、DeepSeekが論文「DeepSeekMath」(2024年2月)で提案した強化学習アルゴリズムです。大規模言語モデル(LLM)の推論能力を強化学習で伸ばす場面で使われ、DeepSeek-R1の学習にも採用されました。最大の特徴は、PPOが必要とする価値モデル(Critic)を持たないこと。1つの質問に対してモデルが複数の回答を生成し、そのグループ内で報酬を相対比較してアドバンテージを求めるため、価値関数を別途学習するメモリと計算のコストを丸ごと削れます。この記事では、GRPOの公式(数式)、PPOとの違い、TRLでの実装、向く場面と限界を整理します。
まとめ:GRPOの要点
- 提案元:DeepSeek(論文DeepSeekMath、arXiv:2402.03300、2024年2月)。PPOの派生。
- 核心:価値モデル(Critic)を廃止し、同一プロンプトから生成したG個の回答(グループ)内で報酬を標準化してアドバンテージを算出。
- アドバンテージの公式:
A_i = (r_i − mean(r)) / std(r)(グループ内で報酬を平均0・分散1に標準化)。 - 目的関数:PPO同様のクリップ付き比率に、参照モデルとのKLダイバージェンス罰則を加える。
- 主なハイパーパラメータ(DeepSeekMath):グループサイズ G=64、KL係数 β=0.04(クリップ幅 ε=0.2 はPPO/GRPO一般の既定値)。
- 用途:LLMの推論・数学・コード生成のRLHF/報酬学習。ロボ制御など汎用RLの標準手法ではない。
GRPOとは何か:DeepSeekが価値モデルを外した理由
GRPOは「Group Relative Policy Optimization(グループ相対方策最適化)」の略で、読みは「ジー・アール・ピー・オー」です。DeepSeekが数学推論モデルDeepSeekMath-7Bの強化学習段階で導入し、後継のDeepSeek-R1でも中核に据えました。位置づけとしてはPPO(Proximal Policy Optimization)を土台にした改良版で、方策勾配法に属します。
PPOでは、各行動の「基準値」を見積もるために方策(Actor)とは別に価値モデル(Critic)を学習します。この価値モデルは方策本体と同規模になりがちで、LLMのように数十億パラメータのモデルでは学習コストとGPUメモリを大きく圧迫します。GRPOはこの価値モデルを丸ごと外し、同じ質問に対して生成した複数回答の報酬の平均を基準値として代用します。基準値を「グループ内の相対比較」で作るのが名前の由来です。
結果として、GRPOはPPOと同等の安定した更新を保ちながら、価値モデルの学習・保持コストを不要にします。旧来「GRPOは軌跡をグループ化する汎用強化学習手法で、批評家(価値)側も損失設計で支援する」といった説明が見られますが、これは誤りです。GRPOの本質はむしろCriticを持たないことにあります。
GRPOの公式:目的関数とアドバンテージの数式
手順1:グループサンプリングと相対アドバンテージ
まず質問 q に対し、更新前の方策 π_old から G 個の回答 o_1〜o_G を生成します。各回答に報酬 r_1〜r_G を付け、グループ内で標準化してアドバンテージを求めます。
A_i = (r_i − mean(r_1, …, r_G)) / std(r_1, …, r_G)
平均より良い回答は正、悪い回答は負になります。質問ごとに標準化するため、問題の難易度で報酬スケールが違っても比較可能になり、報酬の正規化やスケーリングの手作業を減らせます。この基準値の作り方が、PPOの価値モデルの役割を置き換えている点が要です。
手順2:クリップ付き目的関数とKL罰則
次に、PPOと同じクリップ付きの確率比を使って方策を更新します。確率比 ρ_i = π_θ(o_i|q) / π_old(o_i|q) とすると、目的関数は次の形です(回答単位の簡略表記)。
J_GRPO(θ) =
(1/G) Σ_i min( ρ_i · A_i , clip(ρ_i, 1−ε, 1+ε) · A_i )
− β · D_KL( π_θ ‖ π_ref )
上式は回答単位の簡略表記で、実装ではクリップとKL項を各回答のトークン単位で取って総和します。第1項はクリップにより更新幅を [1−ε, 1+ε] に制限し、方策が一度に大きく変わって崩れるのを防ぎます。第2項は参照モデル π_ref からの逸脱をKLダイバージェンスで罰し、事前学習で得た能力の破壊を抑えます。DeepSeekMathでは、このKL項に次の不偏推定量を使っています。
D_KL = (π_ref(o_i|q) / π_θ(o_i|q)) − log(π_ref(o_i|q) / π_θ(o_i|q)) − 1
手順3:主要ハイパーパラメータ
DeepSeekMath論文(7Bモデルの強化学習)で用いられた代表値は次のとおりです。実タスクでは値の調整が前提のため、最新の推奨値は公式実装・論文で確認してください。
| 記号 | 意味 | 値 | 出所 |
|---|---|---|---|
| G | グループサイズ(1問あたりの生成回答数) | 64 | DeepSeekMath |
| β | KL罰則の係数 | 0.04 | DeepSeekMath |
| 学習率 | 方策モデルの学習率 | 1e-6 | DeepSeekMath |
| ε | クリップ幅 | 0.2 | PPO/GRPO一般の既定値 |
グループサイズは論文では64ですが、後述するTRLの入門例では計算を軽くするため8にしています。Gを大きくするほどグループ内比較は安定する一方、1問あたりの生成量が増えます。
GRPOとPPOの違い
両者はどちらもクリップ付きの方策勾配法ですが、アドバンテージ(基準値)の作り方が根本的に異なります。
| 観点 | PPO | GRPO |
|---|---|---|
| 価値モデル(Critic) | 必要(方策と別に学習) | 不要 |
| アドバンテージの基準値 | 価値関数の推定値 | グループ内報酬の平均・標準偏差 |
| 1問あたりの生成 | 基本1系列 | 複数回答(G個) |
| メモリ・計算コスト | 高い(Critic分) | 低い(Critic不要) |
| 主な使いどころ | 汎用RL・LLMのRLHF | LLMの推論・報酬学習 |
PPOは価値モデルが基準値を細かく見積もるぶん、報酬が密なタスクで有利になることがあります。一方GRPOは、正解・不正解のように報酬がスパースで、同じ問題に複数回答を生成して比較しやすいLLMの推論学習で強みを発揮します。DeepSeekがGRPOを選んだのも、この用途での効率が理由です。
GRPOの実装:TRLのGRPOTrainer
Hugging FaceのTRLライブラリにはGRPOTrainerが用意されており、報酬関数を渡すだけでGRPOによる学習を回せます。以下は最小構成の例です。reward_funcsには、生成テキストを受け取ってスコアを返す関数(自作でもルールベースでも可)を指定します。
from datasets import load_dataset
from trl import GRPOConfig, GRPOTrainer
dataset = load_dataset("trl-lib/tldr", split="train")
# 生成長が20語に近いほど高スコアを返す簡易報酬関数
def reward_len(completions, **kwargs):
return [-abs(20 - len(c)) for c in completions]
trainer = GRPOTrainer(
model="Qwen/Qwen2-0.5B-Instruct",
reward_funcs=reward_len,
args=GRPOConfig(output_dir="Qwen2-0.5B-GRPO", num_generations=8),
train_dataset=dataset,
)
trainer.train()
num_generationsが公式のグループサイズ G に対応します。実務では、数学問題なら「答えが正しいか」、コードなら「テストが通るか」といった検証可能な報酬関数を設計するのが定石です。報酬関数の質がそのまま学習結果を左右するため、報酬ハッキング(意図しない抜け道で高スコアを取る挙動)が起きていないかの確認が欠かせません。
GRPOが向く場面と限界
GRPOが効くのは、同じ入力に複数の候補を生成して優劣を比較でき、かつ報酬が検証可能な場面です。数学・コード・論理推論のように正誤がはっきりするタスクと相性が良く、DeepSeek-R1の推論能力向上はその代表例です。価値モデルが不要なぶん、大規模モデルでも学習基盤を軽く保てます。
一方で限界もあります。1問あたりG個の回答を生成するため、推論(生成)側の計算量はグループサイズに比例して増えます。報酬がグループ内相対で決まる以上、良い報酬関数を設計できないタスク(曖昧な良し悪ししか定義できない領域)では効果が出にくくなります。人間のフィードバックで報酬を作るRLHFの文脈では、Human In The Loopによる評価設計や、Constitutional AIのような規範ベースの手法と組み合わせて報酬の質を担保する設計が現実的です。
よくある質問
GRPOとは何ですか?
Group Relative Policy Optimization(グループ相対方策最適化)の略で、DeepSeekが提案した強化学習アルゴリズムです。PPOの派生で、価値モデルを使わずに同一質問への複数回答の報酬を相対比較して方策を更新します。LLMの推論学習で主に使われます。
GRPOとPPOの違いは何ですか?
最大の違いは価値モデル(Critic)の有無です。PPOは基準値を見積もる価値モデルを別途学習しますが、GRPOはこれを持たず、グループ内報酬の平均・標準偏差で基準値を作ります。そのぶんメモリと計算コストが下がります。
GRPOの公式(アドバンテージ)はどう計算しますか?
グループ内の報酬を標準化して求めます。A_i = (r_i − mean(r)) / std(r) で、平均より良い回答が正、悪い回答が負になります。この値をクリップ付きの目的関数に入れ、参照モデルとのKL罰則を加えて更新します。
GRPOはどこで使われていますか?
DeepSeekMath-7BやDeepSeek-R1の強化学習段階で使われました。実装面ではHugging FaceのTRLライブラリのGRPOTrainerが広く利用されています。
GRPOの読み方・全称は?
読みは「ジー・アール・ピー・オー」、全称は「Group Relative Policy Optimization」です。日本語では「グループ相対方策最適化」と訳されます。