強化学習(RL)のすべてと、強化学習(RL)の使い方を学ぶ。 アンクロス 歌で応える グルポ 自分を鍛える。 ディープシーク-R1 推論モデル。入門からマスターまでの完全ガイド。
🦥 何を学ぶか
- RL?RLVR?PPO?GRPO?RLHF?RFT?強化学習は本当に**"運がすべて?" **なのか?**
- 環境とは何か?インテリジェンス?行動?報酬機能?報酬?
この記事では、GRPO、強化学習(RL)、報酬関数について知っておくべきこと(入門から応用まで)、そしていくつかのヒントとコツ、Unslothを使ったGRPOの基本について説明します。GRPOの使い方についてステップバイステップのチュートリアルをお探しの方は、こちらのガイドをご覧ください。
強化学習(RL)とは?
RLの目標はこうだ:
- 良い」結果を見るチャンスを増やす。
- 悪い」結果を目にする機会を減らす。
**それだけです!良い」と「悪い」が何を意味するのか、あるいはどう「足し算」したり「引き算」したりするのか、**複雑なところがある。あるいは「結果」が何を意味するのかさえ、複雑なところがある。
例えばパックマンゲーム (パックマンゲーム):
- マトリックス (環境)はゲームの世界である。
- を取ることができる。ムーブメント (アクション)は上、左、右、下。
- 豆を食べたら。インセンティブ (報酬は)良いが、蠢く敵に当たれば報酬は悪い。
- RLでは、「最善の一手」を知ることはできないが、中間段階や最終的なゲームの状態(勝つか負けるか)を観察することはできる。
別の例として、こんな質問をされたとしよう:「2+2は何になる? (4) 整列されていない言語モデルは、3、4、C、D、-10、何でも吐き出す。
- CやDよりはいい数字だろ?
- 8人より3人の方がいいでしょ?
- 4が出るのはまったく正しい。
をデザインしたところだ。報酬機能 (報酬機能)!
🏃 RLHF、PPOからGRPO、RLVRへ
OpenAIは、RLHF(人間のフィードバックからの強化学習)のコンセプトを推進している。情勢 (状態))は、人間により有用と評価される出力を生成する。
例えば、ChatGPTの「いいね!」やタップは、RLHFプロセスに使用できます。
PPOフォーミュラ
clip(..., 1-e, 1+e)
の項目は、PPO が変化しすぎないようにするために使用される。また、モデルが逸脱しすぎないようにするために、ベータを > 0 に設定した KL 項もある。
RLHFを実施するためには、以下のことが必要である。PPO (近接政策最適化)が開発された。この場合インテリジェントボディは言語モデルである。実際には3つのシステムで構成されている:
- 世代戦略(現在学習済みのモデル)
- 参考戦略(オリジナルモデル)
- バリュー・モデリング(平均報酬推計法)
を使用する。インセンティブ・モデル現在の環境の報酬を計算するために、我々の目標は以下の通りである。この報酬を最大限に活用する!
PPOの計算式は、安定するように設計されているため、かなり複雑なようだ。PPOの詳細な数学的導出については、2025年のRLに関するAIエンジニアトークをご覧ください。
ディープシーク 発展的 グルポ (group relative policy optimisation)を用いてR1推論モデルを学習する。PPOとの主な違いは
- **価値モデルは削除され、報酬モデルへの複数の呼び出しから得られた統計に置き換えられた。
- 報酬モデルを削除を使用できるものに置き換える。 RLVR カスタム報酬関数の
これはGRPOが非常に効率的であることを意味する。以前のPPOでは、複数のモデルをトレーニングする必要があったが、報酬モデルと価値モデルが削除されたため、メモリを節約し、すべてを高速化することができる。
RLVR(検証可能な報酬による強化学習) 簡単に検証可能な解決策を持つタスクに基づいて、モデルに報酬を与えることができる。例
- 数学の方程式は簡単に検証できる。例えば2+2=4。
- コード出力が正しく実行されているかどうかを検証することができる。
- 検証可能な報酬関数を設計するのは難しいので、ほとんどの例は数学的かコードベースである。
- GRPOの使用例は、コードや数学に限定されない。その推論プロセスは、電子メールの自動送信、データベース検索、法律、医療などのタスクを補強し、データセットと報酬関数に基づいて精度を劇的に向上させることができる。採点方法 (ルーブリック)、つまり、究極の、すべてを包括する単一の報酬ではなく、一連の小さな検証可能な報酬である。例えばOpenAIは、強化学習微調整(RFT)サービスでこれを推進している。
なぜグループ相対なのか?
GRPOは価値モデルを完全に削除しているが、現在の状態が与えられた場合の**"平均報酬 "**を推定する必要がある。
トリックは、大規模な言語モデルをサンプリングすることである!次に、いくつかの異なる質問についてサンプリングプロセスをカウントして平均報酬を計算した。
例えば、"2+2は何に等しいか?"という質問に対しては、4回サンプリングする。例えば、"2+2は何回に等しいか?"という質問に対して、私たちは質問を4回サンプリングします。4、3、D、Cの答えが出るかもしれません。そして、それぞれの答えに対する報酬を計算します。平均インセンティブ歌で応える(標準偏差そして、次のように進む。 Zスコアの標準化!
これによりアドバンテージA (利点A)、これを値モデルの代わりに使う。これでメモリを大幅に節約できる!
GRPOの戦力計算
運(または忍耐)さえあればいい!
RLのコツは、必要なものは2つだけということだ:
- 例えば、"2+2は何に等しいか?" など。「PythonでFlappy Birdゲームを作れ」。
- 報酬関数と、出力の良し悪しを検証するバリデーター。
この2つだけで、我々は基本的に言語モデルへの呼び出しは無制限良い答えが出るまで。例えば、"What does 2+2 equal?"(2+2は何に等しいか?という質問に対して、訓練されていない貧弱な言語モデルはこう出力するだろう:
0、猫、-10、1928、3、A、B、122、17、182、172、A、C、BAHS、%$、#、9、-192、12.31、そして突然4。
奖励信号是 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 然后突然是 1.
つまり、運と偶然によって、RLは多くの**"rollouts "**(ロールアウト)で正解を見つけることができたのだ。私たちの目標は、良い答えを4つ多く見て、それ以外(悪い答え)をずっと少なくすることです。
つまり、RLのゴールは忍耐することである。極限において、正解の確率が少なくとも小さな数(ゼロではない)であれば、それは単なる待ちのゲームであり、100%は極限において必ず正解に出会う。
だから私は強化学習を「運がすべて」と呼びたいのだ。
まあ、強化学習に必要なのは「忍耐力だけだ」と言ったほうがいいかもしれない。
RLは本質的に私たちにトリックを与えてくれる。単純に無限大まで待つのではなく、「悪いシグナル」、つまり悪い答えを得ることで、悪い解を生成しないようにモデルを効果的に「ブートストラップ」することができる。悪い解を生成しないようにモデルを効果的に「操縦」することができる。つまり、「良い」答えが現れるのを長い時間待ったとしても、モデルはすでに変化しており、悪い答えを出力しないように最善を尽くすということだ。
例題「2+2は何に等しいか?の例文をご覧ください:
0、猫、-10、1928、3、A、B、122、17、182、172、A、C、BAHS、%$、#、9、-192、12.31、そして突然4。
悪い答えが出ると、RLは悪い答えを出力しないようにモデルに影響を与えます。つまり、時間をかけて慎重に「刈り込み」を行い、モデルの出力分布を悪い答えから遠ざけているのです。このことは、RLが非効率的でないことを意味します。なぜなら、私たちはただ無限大を待っているのではなく、積極的にモデルを「正しい解答空間」に可能な限り「押し込もう」としているからです。
確率が常に0であれば、RLは決して機能しない!.このような理由から、RLは指示によって微調整され、部分的かつ合理的に指示に従うことができるモデルから始めるのが好ましいのである。
アンスローがRLに提供するもの
- わずか15GBのVRAMで、Llama3.1(8B)、Phi-4(14B)、Mistral(7B)、Qwen2.5(7B)など、最大17Bのパラメータを持つモデルを推論モデルに変換できる。
- **5GBのVRAMがあれば、推論モデルをローカルでトレーニングするのに十分です(1.5B以下のパラメータを持つモデルの場合)。
⚡ チュートリアル:GRPOで独自の推論モデルをトレーニングする
GRPOノート
- クウェン3 (4B) - ハイレベル
- DeepSeek-R1-0528-Qwen3-8B - 新しく
- ラマ 3.2 (3B) - プレミアム
- ジェマ3 (1B)
- ファイ-4 (14B)
- クウェン2.5(3B)
- ミストラル v0.3 (7B)
- ラマ3.1 (8B)
**新機能です!**Dr.GRPOおよびその他のほとんどの新しいGRPOテクノロジーをサポートするようになりました。これは GRPOConfig
有効にするには、以下のパラメータを使用する:
のコピーを取る。
epsilon=0.2,
epsilon_high=0.28, # one sided
delta=1.5, # two sided
loss_type='bnpo',
# or:
loss_type='grpo',
# or:
loss_type='dr_grpo',
mask_truncated_completions=True,
- もし推論結果が得られない場合は、十分なトレーニングステップがあること、報酬関数/バリデーターが正しく動作していることを確認してください。ここに報酬関数の例を示します。
- これまでのデモでは、Qwen 2.5(3B)で自分自身の啓示の瞬間を達成できることを示したが、それには2xA100 GPU(160GB VRAM)が必要だ。しかし、これには2xA100 GPU(160GB VRAM)が必要です。今、Unslothを使えば、わずか5GB VRAM GPUで同じ天啓の瞬間を得ることができます。
- これまでGRPOはフルファインチューニングにしか対応していなかったが、QLoRAやLoRAとの併用が可能になった。
- 例えば20K コンテキスト長プロンプトごとに8つのレスポンスが生成されるため、UnslothはLlama 3.1(8B)で54.3GBのVRAMしか使用しません。 510.8GB(アンスロスは90%で減少).
- これは、DeepSeek の R1 蒸留モデルの微調整や、R1 の蒸留データを使用したチューニングではないことに注意してください。これは、GRPOを使用した標準モデルを本格的な推論モデルに変換するものです。
テスト例では、Phi-4をGRPOで100ステップ学習させただけですが、結果はすでに明らかです。GRPOを使わなかったモデルはトークンのことを考えなかったのに対し、GRPOを使って訓練したモデルは考え、答えは正しかった。
GRPO 💻によるトレーニング
UnslothとGRPOを使って、任意のオープンな大規模言語モデルを推論モデルに変換する方法のチュートリアルについては、こちらをご覧ください。
GRPOのモデル育成方法
- 各クイズのペアに対して、モデルは複数の可能性のある回答(例えば、8つのバリエーション)を生成します。
- 各応答は報酬関数を使って評価される。
- トレーニングのステップ
- 300行のデータがあれば、300ステップのトレーニングになる(3エポックトレーニングなら900ステップ)。
- 質問ごとに生成される回答の数を増やすことができます (たとえば、8 から 16)。
- モデルは各ステップで重みを更新することによって学習する。
GRPOモデルの学習に問題がある場合は、当社のアドバンスドGRPOノートブックを使用することを強くお勧めします。
基本/ヒント
- 少なくとも待ってくれ。 300歩その分、報酬も増える。まともな結果を得るためには、少なくとも12時間はトレーニングする必要があるだろう(これがGRPOの仕組みだ)。
- 最良の結果を得るためには、少なくとも 500行のデータ10行のデータで試すこともできるが、もっと多い方がいいだろう。10行のデータで試すこともできるが、より多くのデータがあったほうがいいだろう。
- 各トレーニングの実行は、モデル、データ、報酬関数/バリデーターなどによって異なります。そのため、最低300ステップと書いたとしても、1000ステップ以上かかることもあります。つまり、複数の要因に左右されるのだ。
- GRPOのローカルでUnslothを使用している場合、エラーが発生した場合は、次のことも行ってください。
pip install diffusers
.また、vLLMの最新バージョンを使用してください。 - GRPOは、少なくとも次の用途に使用することを推奨する。 1.5BパラメータThinkTokenを正しく生成するためには、ThinkTokenを正しく生成できない可能性があります。
- GRPOについてGPUのVRAM要件 (QLoRA 4ビット)一般的なルールとして、モデルパラメータ=必要となる VRAM の量です(より少ない VRAM を使用することもできますが、これは念のためです)。コンテキストの長さを長く設定すればするほど、より多くのVRAMが必要になります。loRAの16ビットは、少なくとも4倍のVRAMを使用します。
- 継続的な微調整もしかしたら、GRPOをバックグラウンドで常に起動しておくこともできるかもしれない。
- サンプルノートブックではGSM8KデータセットR1スタイルのトレーニングでは、これが圧倒的に人気がある。
- ベースモデルを使用している場合は、チャットテンプレートがあることを確認してください。
- GRPOの素晴らしいところは、多くのデータを必要としないことです。必要なのは、優れた報酬関数/バリデーターだけであり、訓練すればするほど、あなたのモデルはより良くなる。以下に示すように、ステップ数に関連して報酬が時間と共に増加することを期待する:
GRPOのトレーニングロス追跡機能がUnslothに直接組み込まれ、wandbのような外部ツールが不要になりました。集計報酬関数自体を含む、すべての報酬関数の完全なログ詳細が含まれています。
ボーナス・ファンクション/バリデーター
インテンシブ・ラーニングで。報酬機能 (報酬関数)とバリデータ (ベリファイア)は、モデル出力の評価において異なる役割を果たす。一般的には、これらは同じものとして理解できますが、技術的には同じではありません。
バリデータ (検証者):
- 生成されたレスポンスが正しいか正しくないかを判定します。
- 点数をつけるのではなく、正しさを検証するのだ。
- 例 モデルが「2+2」に対して「5」を生成した場合、バリデータはそれをチェックし、「間違い」とマークする(正解は4だから)。
- バリデータは(Pythonなどで)コードを実行し、ロジック、構文、正しさを手動で評価することなく検証することもできる。
報酬機能 (報酬機能):
- 検証結果(またはその他の基準)を数値スコアに変換する。
- 例 答えが間違っていた場合はペナルティ(-1、-2など)が課され、正解の場合はプラスのスコア(+1、+2)が与えられる。
- また、長すぎる、読みにくいなど、正しさ以外の基準でペナルティを課すこともできる。
主な違い::
- バリデータ正しいかどうかをチェックするが、採点はしない。
- 報酬機能分数を割り当てるが、それ自体が正しいかどうかを検証する必要はない。
- 報酬機能可能バリデーターは使われているが、技術的には同じではない。
報酬機能を理解する
GRPOの主な目標は、報酬を最大化し、訓練データから回答を記憶し再現するのではなく、回答がどのように導き出されるかを学ぶことである。
- 各トレーニングステップで、GRPO モデルの重みの調整報酬を最大化する。このプロセスは、モデルを徐々に微調整していく。
- 定期的な微調整 (GRPOなし)のみ次の単語の予測確率を最大にするしかし、報酬のために最適化されることはない。 報酬関数の最適化単に次の単語を予測するだけではない。
- 複数のエポックでこれを行うことができるデータの再利用.
- デフォルトの報酬機能は、様々なユースケースに対してあらかじめ定義することもできますし、ChatGPT/ネイティブモデルに生成させることもできます。
- 報酬関数やバリデーターを設計する唯一の正しい方法はなく、可能性は無限である。しかし、報酬の設計が不十分だと、不注意にモデルのパフォーマンスを低下させる可能性があるため、報酬は適切に設計され、意味のあるものでなければならない。
報酬関数の例
以下の例を参考にしてほしい。生成された結果を以下のようなファイルに入力することができます。 チャットGPT 4o、またはLlama 3.1(8B)のような大規模言語モデルで、それを評価する報酬関数とバリデーターを設計する。例えば、生成された結果を選択した大規模言語モデルに送り込み、"答えがロボットのように聞こえすぎたら3点減点 "というルールを設定する。これは、品質基準に基づいて出力を最適化するのに役立つ。
例#1:単純な算数タスク
- 質問だ:
"2 + 2"
- 回答
"4"
- 報酬機能 1:
- 数字が検出された場合 +1
- 数字が検出されなかった場合 -1
- 報酬機能 2:
- その数字が正解と一致した場合 +3
- 不正確な場合 -3
- 総合的な報酬 すべての報酬関数の合計
例#2:電子メール自動化タスク
- 質問だ: インバウンドメール
- 回答 アウトバウンドメール
- 報酬機能:
- 回答に必要なキーワードが含まれている場合 +1
- 回答が希望する回答とぴったり一致する場合 → (回答が希望する回答とぴったり一致しない場合) → (回答が希望する回答とぴったり一致しない場合 +1
- 回答が長すぎる場合 -1
- 受取人の名前が含まれている場合→(英語 +1
- 署名ブロックが存在する場合(電話、電子メール、住所)→→→。 +1
Unsloth Neighbourhoodベースの報酬関数
もし私たちのプレミアムGRPO コラボ・ノートブック私たちが完全に一から作り上げたものであることにお気づきだろう。カスタム近隣ベース報酬関数これは、より正解に近い答えに報酬を与えるように設計されている。この柔軟な機能は、様々なタスクに適用することができます。
- この例では クウェン3 (ベーシック・エディション)は推論を有効にし、特定のタスクを完了するよう指示する。
- 事前調整ポリシーを適用して、GRPOがデフォルトで優先する学習専用フォーマットを回避する。
- 正規表現ベースのマッチングを使用して、評価精度を向上させる。
- 一般的なプロンプトを超えるものを作る(例.
think
)のようなカスタムGRPOテンプレートを使用する。<start_working_out></end_working_out>
. - 近接ベースのスコアリングを適用する - モデルは、より近い答えを持っている(例えば、10の代わりに9を予測することは、3を予測するよりも優れている)より報われ、一方、異常値はペナルティを受ける。
GSM8Kリワード機能
他の例では、@willccbbによって提供された既存のGSM8K報酬関数を使用している:
- correctness_reward_func - タグに正確に一致する答えを褒める。
- int_reward_func - 整数のみの解答を奨励する。
- ソフト_フォーマット_リワード_ファンク - 構造をチェックするが、多少の改行の不一致は許容する。
- strict_format_reward_func - 改行を含め、回答の構成がプロンプトと一致していることを確認してください。
- xmlcount_reward_func - 各XMLタグがレスポンスに一度だけ現れるようにする。
vLLM 🧮の使用
微調整スタックでvLLMを直接使用できるようになり、スループットが向上し、モデルの微調整と推論を同時に行えるようになりました!1x A100 40GBでUnslothを使用したLlama 3.2 3Bインストラクトのダイナミック4ビット量子化は、~4000と予想されます。 トークン /秒に達する。16GBのTesla T4(無料のColab GPU)なら、300トークン/秒に達する。
を同時に読み込む必要もなくなった。 ブイエルエルエム UnslothとUnslothをロードする際の二重のメモリ使用は、Llama 3.1 8Bで約5GB、Llama 3.2 3Bで約3GBを節約します。Unslothは、Llama 3.3 70Bのウェイトが40GBのVRAMを占有する48GB GPU 1xで、Llama 3.3 70BのInstructを微調整することができました。二重のメモリ使用を排除しない場合、UnslothとvLLMを同時にロードすると、80GB以上のVRAMが必要になります。
しかし、Unslothを使用すれば、48GB以下のVRAMで、1つのパッケージで、微調整と高速推論のメリットを同時に享受することができます!高速推論を使うには、まずvllmをインストールして fast_inference
アンスローをインスタンス化する:
のコピーを取る。
pip install unsloth vllm
from unsloth import FastLanguageModel
model, tokenizer = FastLanguageModel.from_pretrained(
model_name = "unsloth/Llama-3.2-3B-Instruct",
fast_inference = True,
)
model.fast_generate(["Hello!"])
GRPO 要件ガイド
GRPO 用 Unsloth を使用する場合、Flash Attention 2 を使用する標準実装と比較して、さまざまなトリックにより、VRAM 使用量を 90% 以上削減することができます!たとえば、コンテキストの長さが 20K で、キューごとに 8 つの応答を生成する場合、Unsloth for Llama 3.1 8B が使用する VRAM は次のとおりです。 54.3GBのVRAM標準的な実装では 510.8GB(アンスロスは90%で減少).
- GRPOについて QLoRA 4ビットGPU VRAM要件一般的なルールとして、モデルパラメータ=必要となる VRAM の量です(より少ない VRAM を使用することもできますが、これは念のためです)。コンテキストの長さを長く設定すればするほど、より多くのVRAMが必要になります。loRAの16ビットは、少なくとも4倍のVRAMを使用します。
- GRPO用の新しいメモリ効率に優れたリニアコアは、メモリ使用量を8倍以上削減します。これにより、68.5GBのメモリが節約される。
torch.compile
実際、より速い! - 最近リリースされたインテリジェントなアンスロスの勾配チェックポイント・アルゴリズムを活用しました。これはインテリジェントに中間アクティベーションを非同期でシステムRAMにオフロードし、わずか1%遅いだけである。
- Unslothはまた、他のパッケージの実装とは異なり、基礎となる推論エンジン(vLLM)と同じGPU / CUDAメモリ空間を使用する。これにより16GBのメモリを節約できる。
規範 | アンクロス | スタンダード+FA2 |
---|---|---|
トレーニングメモリコスト(GB) | 42GB | 414GB |
GRPOメモリーコスト(GB) | 9.8GB | 78.3GB |
推論コスト(GB) | 0GB | 16GB |
20K コンテキスト長推論KVキャッシュ(GB) | 2.5GB | 2.5GB |
総メモリ使用量 | 54.33GB (90%の減少) | 510.8GB |
標準的なGRPOの実装では、GRPOの損失を計算するために、サイズ(8、20K)のロジットを2つ作成する必要がある。これには 2 * 2 字节 * 8 (生成数量) * 20K (上下文长度) * 128256 (词汇表大小) = 78.3GB
.
unslothは長いコンテキストのGRPOに対して8倍のメモリ使用量を節約するので、20Kのコンテキストの長さであれば、9.8GBのVRAMが追加で必要になるだけである!
Llama 3.1 8Bは32レイヤーで、KとVの両方のサイズは1024である。したがって、20Kのコンテクスト長に対するメモリ使用量は以下のようになる。 2 * 2 字节 * 32 层 * 20K 上下文长度 * 1024 = 每个批次 2.5GB
.私たちはvLLMのバッチサイズを8に設定しますが、VRAMを節約するために計算では1のままにしています。そうしないとKVキャッシュに20GB必要になります。