次の方法で共有


Azure OpenAI o4-mini を使用した強化微調整 (RFT) (プレビュー)

強化微調整 (RFT) は、ラベル付けされたデータのみに依存するのではなく、報酬ベースのプロセスを通じてそれらをトレーニングすることで、o4-mini などの推論モデルを改善する手法です。 RFT は、フィードバックまたは "報酬" を使用して学習をガイドすることで、モデルがより適切な推論と問題解決のスキルを開発するのに役立ちます。特に、ラベル付けされた例が限られている場合や複雑な動作が必要な場合に役立ちます。

プロセス

強化微調整 (RFT) のプロセスは、教師あり微調整 (SFT) に似ていますが、いくつかの顕著な違いがあります。

  • データ準備 システム メッセージはサポートされておらず、 assistant メッセージの代わりに、トレーニング データの最後のメッセージが参照応答になります。
  • モデルの選択: RFT をサポートするのは o4-mini のみです。
  • Grader の定義: RFT では、微調整されたモデルの品質をスコア付けし、学習をガイドするために 、グレーデラー を使用する必要があります。 文字列チェック、テキストの類似性、またはモデルベースの採点者を使用したり、複数の採点者と組み合わせたりすることができます。
  • トレーニング:eval_sampleseval_intervalreasoning_effortcompute_multiplierなどの追加パラメーターが含まれます。 また、ジョブを一時停止および再開するオプションもあり、トレーニングの一時停止、チェックポイントの検査、さらにトレーニングが必要な場合にのみ続行できます。
  • 評価: 精度と損失に加えて、RFT は平均報酬と解析エラー、および平均トークンを返します。

トレーニング プロセス全体を通じて、プラットフォームはデータセットを反復処理し、プロンプトごとに複数の応答を生成します。 次に、これらの応答がグレーダーによって評価され、受信したスコアに基づいてポリシー 勾配更新が適用されます。 このサイクルは、トレーニング データが完全に処理されるか、指定されたチェックポイントでジョブが停止するまで繰り返され、最終的に目的のメトリックに合わせてモデルが微調整されます。

しかし、これらの違いにもかかわらず、SFT と RFT には多くの共通点があります。データ準備は重要です。サーバーレス トレーニング ジョブは Foundry UI を使用して開始できます。標準およびグローバル標準デプロイをサポートしています。

トレーニングおよび評価ファイルの形成要件

o4-mini RFT を実行するには、トレーニング ファイルと検証ファイルの両方が必要です。 o4-mini では、強化の微調整に新しい形式のデータが使用されます。 これらは、監視対象の微調整 (SFT) に使用されるファイルと同様に、jsonl ファイルである必要があります。

ファイルの各行にはメッセージ フィールドが含まれている必要があります。SFT との違いがいくつかあります。

  • システム メッセージはサポートされていません
  • 最後のメッセージは、アシスタントではなく、ユーザーからのメッセージである必要があります (SFT の場合と同様)。
  • Toolsresponse_formats、サポートされています
  • イメージ/マルチモーダル データはサポートされていません

JSONL データ ファイルの各行には、メッセージ配列と、モデルからの出力を評価するために必要な追加フィールドが含まれている必要があります。 この値は有効な JSON オブジェクトである必要があります (辞書やリストなど。特定の型と構造は、選択したグレーダーに依存します)。

トレーニング データの例

必要な RFT トレーニング形式で解決するパズルをモデルに与えると、次のようになります。

"messages": [
    {
      "role": "user",
      "content": "You are a helpful assistant. Your task is to solve the following logic and puzzle quiz:\n\n2. In the expression 1 * 2 * 3 * 4 * 5 * 6 * 7 * 8 * 9 = 100, replace the asterisks with arithmetic operation signs to obtain a correct equation."
    }
  ],

  "solution": "Solution. 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 \\cdot 9 = 100.\n\nEvaluation. 12 points for the correct solution.",

  "final_answer": "1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 \\cdot 9 = 100"
}

上記のテキストを 1 行の jsonlから展開したので、メッセージ、ロール、コンテンツ、 final_answerなど、予想されるフィールドを確認できます。

RFT のデータセット サイズ

大規模なデータセットにコミットする前に RFT の有効性を評価するために、数十から数百の例で構成される小さなデータセットから始めます。 安全上の理由から、トレーニング セットは自動スクリーニング プロセスを受ける必要があります。このプロセスは、ファイルのアップロード時ではなく、微調整ジョブが開始されたときに開始されます。 ファイルが正常にスクリーニングに合格すると、遅延なく繰り返し使用できます。

数量が限られている場合でも、高品質の例が不可欠です。 スクリーニング後、データ量の増加は、高品質を維持していれば有利である。 データセットが大きいほど、より大きなバッチ サイズを使用できます。そのため、一般的にトレーニングの安定性が向上します。

トレーニング ファイルには最大 50,000 個の例を含めることができますが、テスト データセットには最大 1,000 個の例を含めることができます。 どちらの種類のデータセットも自動スクリーニングの対象となります

微調整ジョブの作成

他のモデルを微調整するのと同じ方法で、Azure AI Foundry で o4-mini RFT のトレーニング ジョブを作成できます。サポートされているリージョンで 微調整 を選択し、ベース モデルとして o4-mini を選択します。

Azure AI Foundry ポータルでの o4-mini モデルの選択のスクリーンショット。

Azure AI Foundry ポータルの強化微調整メニューのスクリーンショット。

ハイパーパラメーターの選択

強化方法のハイパーパラメーター セクションでは、すべての通常のトレーニング ハイパーパラメーター (学習率、エポック数、バッチ サイズなど) と、3 つの新しいハイパーパラメーターがサポートされます。

ハイパーパラメーター名 価値 説明
Eval_samples: 1 ~ 10 評価中に使用するサンプルの数。 検証分割報酬メトリックは、データ ポイントごとに異なるサンプル間で平均されます。 既定値は 5 です。
Eval_interval 1-25 指定された検証ファイルに対する評価間のトレーニング ステップの数。 既定値の は 1 です。
Compute-multiplier 0.5 -3.0 トレーニング中の検索領域を探索するためのコンピューティング使用量の乗数。 増加すると、インスタンスごとにロールされるサンプルの数が多くなります。 低すぎるとアンダーフィットする可能性があり、高すぎるとオーバーフィットする傾向があります。
Reasoning_effort 低、中、高 モデルが推論に費やすべき労力。 既定では中程度の作業量です。 パフォーマンスが低い場合は、推論作業を増やすことを検討してください。

メソッドが指定されている場合、最上位レベルのハイパーパラメーター フィールドは無視されます。 通常のトレーニングパラメーターと強化学習パラメーターの両方を設定する場合は、強化学習のハイパーパラメーターのセクションで両方を設定してください。

ヒント

これらの値はすべて省略可能であり、ハイパーパラメーターを調整する前に、既定値で最初のジョブを開始することをお勧めします。

グレーダー

RFTは、審査員を使ってモデルの応答の質を評価し、モデルに推論する能力を発揮させるため、ユニークな特徴を持っています。 SFT とは異なり、最終的なメッセージはアシスタントからではなく、モデルをサンプリングし、各サンプルでグレーダーを使用してその品質をスコア付けします。 その後、これらのスコアに基づいてトレーニングし、モデルのパフォーマンスを向上させます。

実質的にグレーダーとは、トレーニング ファイルからの reference_answer とサンプリングされた応答を比較する機能のことです。

グレーダー:

  • 0 から 1 までの浮動小数点数を返します。 バイナリ 0/1 ではなく、回答の部分的なクレジットをモデルに与えるのに役立ちます。
  • 採点者は JSON として指定されます (下記参照)

サポートされているグレーダー

文字列チェック、テキストの類似性、モデルの採点者の 3 種類の採点者をサポートしています。 また、グレーダーを組み合わせて使用する、複数グレーダー オプションもあります。

String-check-grader

これらの基本的な文字列操作を使用して、 0 または 1を返します。

仕様:

{
    "type": "string_check",
    "name": string,
    "operation": "eq" | "ne" | "like" | "ilike",
    "input": string,
    "reference": string,
}

サポートされる操作:

  • eq: 入力が参照と一致する場合は 1 を返します (大文字と小文字が区別されます)。それ以外の場合は 0 を返します。
  • neq: 入力が参照と一致しない場合は 1 を返します (大文字と小文字が区別されます)。それ以外の場合は 0 を返します。
  • like: 入力に参照が含まれている場合は 1 を返します (大文字と小文字が区別されます)。それ以外の場合は 0 を返します。
  • ilike: 入力に参照が含まれている場合は 1 を返します (大文字と小文字は区別されません)。それ以外の場合は 0 を返します。

テキストの類似性

モデルによって生成された出力が参照にどの程度近いかを評価するには、さまざまな評価メトリックでスコア付けします。

仕様:

{
    "type": "text_similarity",
    "name": string,
    "input": string,
    "reference": string,
    "pass_threshold": number,
    "evaluation_metric": "fuzzy_match" | "bleu" | "gleu" | "meteor" | "rouge_1" | "rouge_2" | "rouge_3" | "rouge_4" | "rouge_5" | "rouge_l" 
}

サポートされる操作:

  • bleu – 文字列間の BLEU スコアを計算します
  • Fuzzy_match – rapidfuzz を使用する、あいまい文字列の一致
  • gleu – 文字列間の google BLEU スコアを計算します
  • meteor – 文字列間の流星スコアを計算します
  • rouge-* - ルージュ python ライブラリで定義されているとおり

モデルのスコア付け

これは、LLM を使用してトレーニング出力を評価できるモデル グレーダーです。

グレーダー モデルとしてサポートしているモデルは次のとおりです。

  • gpt-4o-2024-08-06
  • o3-mini-2025-01-31
{
    "type": "score_model",
    "name": string,
    "input": Message[],
    "model": string,
    "pass_threshold": number,
    "range": number[],
    "sampling_params": {
        "seed": number,
        "top_p": number,
        "temperature": number,
        "max_completions_tokens": number,
        "reasoning_effort": "low" | "medium" | "high"
    }
}

スコア モデル グレーダーを使用するには、入力はチャット メッセージの一覧であり、それぞれにロールとコンテンツが含まれます。 グレーダーの出力は、指定された範囲に切り捨てられ、すべての数値以外の出力の既定値は 0 になります。

マルチグレーダー

マルチグラダー オブジェクトは、複数の採点者の出力を結合して、1 つのスコアを生成します。

{  
"type": "multi",
 "graders": dict[str, Grader],
 "calculate_output": string, 
"invalid_grade": float
}

サポートされる操作:

演算子:

  • + (追加)
  • - (減算)
  • * (乗算)
  • / (除算)
  • ^ (電力)

関数:

  • min
  • max
  • abs
  • floor
  • ceil
  • exp
  • sqrt
  • log

UX を使用する場合は、プロンプトを記述し、必要に応じて有効なグレーダーと応答形式を json で生成できます。 グレーダーは、微調整ジョブの送信中に入力する必須のフィールドです。 応答形式は省略可能です。

Von Bedeutung

適切なグレーダー スキーマを生成するには、慎重なプロンプト作成が必要です。 最初の数回の試行で無効なスキーマが生成されたり、トレーニング データを適切に処理するスキーマが作成されなかったりすることがあります。 グレーダーは、微調整ジョブの送信中に入力する必要がある必須のフィールドです。 応答形式は省略可能です。

強化された微調整グレーダー スキーマ生成エクスペリエンスのスクリーンショット。

各カテゴリのグレーダーの例を次に示します。

string-check-grader - 単純な文字列操作を使用して 0 または 1 を返します。

例:

{
"name": "string_check_sample_grader",
 "type": "string_check", 
"input": "{{item.reference_answer}}",
 "reference": "{{sample.output_text}}", 
"operation": "eq"
}

テキストの類似性 - モデルによって生成された出力が参照にどの程度近いかを評価し、さまざまな評価メトリックでスコア付けします。

{
"name": "text_similarity_sample_grader",
 "type": "text_similarity",
 "input": "{{item.reference_answer}}",
 "reference": "{{sample.output_text}}", "evaluation_metric":"fuzzy_match"
}

モデルのスコア付け - これは、LLM を使用してトレーニング出力を評価できるモデル グレーダーです。

グレーダー モデルとしてサポートしているモデルは、 gpt-4o-2024-08-06o3-mini-2025-01-31です。

{ 
"name": "score_model_sample_grader", 
"type": "score_model",
 
"input": [ { 
"role": "user", 
"content": "Score\nhow close the reference answer is to the model answer. You will be comparing these\ntwo as JSON objects that contain 2 keys, \"extracted_text\" and\n\"clause_type\". Score 1.0 if they are both the same, 0.5 if one is\nthe same, and 0.0 if neither are the same. Return just a floating point\nscore\n\n Reference answer: {\"extracted_text\": \n{{item.extracted_text}}, \"clause_type\": {{item.clause_type}}}\n\n\nModel answer: {{sample.output_json}}"}],

"model": "gpt-4o-2024-08-06", 
"sampling_params": {"seed": 42}
}

マルチグレーダー - マルチグラダー オブジェクトは、複数の採点者の出力を結合して、1 つのスコアを生成します。

{
"name":"sample_multi_grader",
"type":"multi",
"graders":{"ext_text_similarity":{"name":"ext_text_similarity",
"type":"text_similarity",
"input":"{{sample.output_json.ext_text}}",
"reference":"{{item.ext_text}}",
"evaluation_metric":"fuzzy_match"},

"clause_string_check":{"name":"clause_string_check",
"type":"string_check",
"input":"{{sample.output_json.clause_type}}",
"operation":"eq",
"reference":"{{item.clause_type}}"}},

"calculate_output":"0.5 * ext_text_similarity + 0.5 * clause_string_check"
}

: 現在、モデル グレーダーをサブグレーダーとして使用する multi はサポートされていません。 Multi grader は、 text_Similaritystring_checkでのみサポートされます。

省略可能なフィールドである応答形式の例:

トレーニング データの例で使用されているのと同じパズルの問題に対する応答が必要な場合は、次に示すように応答形式を追加できます。ここで、フィールド 'solution' と 'final answer' は構造化された出力で共有されます。

{
  "type": "json_schema",
  "name": "puzzles_assistant",
  "schema": {
    "type" : "object",
    "properties": {
      "solution": {
        "type": "string",
        "title": "solution"
      },
      "final_answer": {
        "type": "string",
        "title": "final_answer"
      }
    },
    "required": [
      "solution",
      "final_answer"
    ],
    "additionalProperties": false
  },
  "strict": true
}

トレーニングの進行状況と結果

RFT ジョブは通常実行時間が長く、パラメーターの選択によっては最大 24 時間かかる場合があります。 AI Foundry ポータルの微調整ビューの両方で進行状況を追跡できます。 ジョブは、通常の微調整ジョブ (キュー済み、実行中、成功) と同じ状態を推移します。

トレーニングが実行されている間に結果ファイルを確認することで、進捗状況を把握し、トレーニングが期待通りに進んでいるかどうかを見ることもできます。

新機能: 一時停止と再開

トレーニング中は、ログと RFT メトリックを表示し、必要に応じてジョブを一時停止できます (メトリックが収束していない場合や、モデルが適切なペースで学習していないと感じる場合、選択した設定が正しくない場合など)。 トレーニング ジョブが一時停止されると、展開可能なチェックポイントが作成され、ジョブの推定または再開を続行し完了させます。 一時停止操作は、少なくとも 1 つのステップについてトレーニングされ、 実行中 の状態にあるジョブにのみ適用されます。

実行中のジョブにおける強化微調整のスクリーンショット。

トレーニング支出に関するガードレール

RFT ジョブは高いトレーニング コストにつながる可能性があるため、合計トレーニング コスト (トレーニング + 採点) で 5,000 ドルに達すると、ジョブが自動的に一時停止されます。 ユーザーは、最新のチェックポイントをデプロイするか、トレーニング ジョブを再開できます。 ユーザーがジョブの再開を決定した場合、ジョブの課金は続行され、その後、トレーニング ジョブにそれ以上の価格制限は適用されません。

トレーニング結果の解釈

強化の微調整ジョブの場合、主なメトリックはステップごとの報酬メトリックです。 これらのメトリックは、トレーニング データに対するモデルのパフォーマンスを示します。 これらは、タスク構成で定義した評価者によって計算されます。

報酬メトリック

これらは、2 つの独立した最上位レベルの報酬メトリックです。

  • train_reward_mean: 現在のステップのすべてのデータポイントから取得されたサンプル全体の平均報酬。 バッチ内の特定のデータ ポイントは各ステップで変化するため、異なるステップ間のtrain_reward_mean値は直接比較できません。また、特定の値はステップごとに大幅に変動する可能性があります。

  • valid_reward_mean: 検証セット内のすべてのデータポイントから取得されたサンプル全体の平均報酬。これは、より安定したメトリックです。

ヒント

推論のテストは常にあなたのモデルで行う必要があります。 不適切な採点者を選択した場合、平均報酬がモデルのパフォーマンスを反映していない可能性があります。 モデルからのサンプル出力を確認して、正しく書式設定され、意味があることを確認します。 モデルの予測が地上の真理値と一致しているかどうかを確認し、説明的な分析が妥当な説明を提供するかどうかを確認します。

推論トークン

train_reasoning_tokens_meanvalid_reasoning_tokens_meanメトリックを使用して、モデルが時間の経過と同時にその動作をどのように変化しているかを確認します。 これらのメトリックは、トレーニング データセットと検証データセットのプロンプトに応答するためにモデルによって使用される推論トークンの平均数です。 また、微調整ダッシュボードで平均推論トークン数を表示することもできます。

ヒント

多くの場合、トレーニング中に、モデルはプロンプトに応答するために使用する推論トークンの平均数を大幅に変更します。 これは、モデルが報酬シグナルに応じて動作を変更していることを示しています。 モデルでは、同じ報酬を達成するために使用する推論トークンの数を減らしたり、より多くの推論トークンを使用してより高い報酬を得る方法を学習したりする場合があります。

結果を評価する

微調整ジョブが完了するまでに、検証セットの平均報酬値に基づいて、モデルのパフォーマンスがどの程度優れているかを適切に把握している必要があります。 ただし、モデルがトレーニング データに過剰適合しているか、またはグレーダーに報酬を与える学習を行っている可能性があり、これにより、実際に正しくなくても高いスコアが生成されることがあります。

微調整ジョブに関連付けられている評価を調べることで、モデルの動作をすばやく理解できます。 具体的には、最後のトレーニング ステップに対して行われた実行に細心の注意を払って、エンド モデルの動作を確認します。 また、evals 製品を使用して、最終実行を以前の実行と比較し、トレーニングの過程でモデルの動作がどのように変化したかを確認することもできます。

o4-mini RFT モデルのデプロイと使用

微調整されたモデルは、他の微調整されたモデルと同様に、UI または REST API を使用してデプロイできます。

一時停止操作をトリガーすることで、完了した微調整ジョブ、または自動的または手動で作成された断続的なチェックポイントをデプロイできます。 モデルのデプロイと Chat Playground でのテストの詳細については、 デプロイの微調整に関するページを参照してください。

モデルを使用する場合は、トレーニング中に使用したのと同じ手順と構造を使用してください。 これにより、モデルが分散状態に保たれ、推論中の問題に対して、トレーニング中に達成したのと同じパフォーマンスが確実に表示されます。

ベスト プラクティス

グレーダーの選択

採点者は強化学習に使用されます。間違った採点者を選択すると、報酬が無効になり、微調整によって期待される結果が得られません。

採点者の選択に関するいくつかの基本的なルール:

  • 数値、ブール値の回答、複数の選択肢などの 短い特定の回答 がある場合は、 一致するグレーダーの文字列を選択します。

  • 複数の条件でスコア付けできる複雑な回答がある場合は、複数の採点者を使用します。 これにより、応答のさまざまな側面をスコア付けし、それを集計に結合できます。

  • グレーダーを複数のステップに分割し、部分的なクレジットを与えて、モデルの推論を正しい方向に微調整することを検討してください。採点は安定しており、優先順位に合わせて調整されます。 プロンプトで、いくつかの場面の例において、回答が優秀、公正、不十分であるかを指定します。

  • コードが不足している場合は、LLM をジャッジとして使用します。 オープンエンドの豊富な回答については、別の言語モデルに評価を依頼してください。 LLM のグレーダーを構築するときは、確実性のために、LLM の判定を通じて複数の候補による回答とグランド トゥルースを実行します

グレーダーをテストする

RFT で使用できるすべての採点者は、 Azure OpenAI 評価でサポートされています。 トレーニングの実行を開始する前に、トレーニングに使用する予定の同じグレーダーを使用して、検証データに対してバニラ o4 ミニ モデルをテストします。 採点者のスコアが期待値と一致しない場合は、別の採点者を選択する必要があります。

また、構成の有効性を確認するために使用できるグレーダー チェック API も用意されています。

データの準備

最初は数百の例を目指し、必要に応じて約 1,000 個の例にスケールアップすることを検討してください。 偏りを回避し、一般化を確保するために、予測されるクラスの観点からデータセットのバランスを取る必要があります。

プロンプトの場合は、応答形式と出力に対する制約を指定するなど、明確で詳細な手順を必ず指定してください (説明の最小長、true/false でのみ応答するなど)。