Azure AI Foundryでのファインチューニング設定を徹底解説【初心者から中級者向け】



## はじめに

Azure AI Foundryのファインチューニング機能は、
自分の業務やドメインに最適化されたカスタムモデルを作成できる強力なツールですが、
多くの設定項目があり、何をどう選べば良いか迷いやすいです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3937496/88840a30-5635-4bfa-9cb5-de6a0692fd0b.png)

本記事では、ファインチューニングの基本的なメソッドの違いから、実務で押さえておきたい設定のポイント、そして運用時の注意点まで、具体例を交えて丁寧に解説します。

## ファインチューニングのメソッド詳細とユースケース

### 1. 教師あり学習（Supervised Fine-tuning）

**概要**

教師あり学習のアプローチで、既存の大規模言語モデルに対して用意した入力と正解ペアを与え、モデルを目的タスクに適合させる方法。

**ユースケース例**
- FAQデータベースを元にした質問応答モデルの作成
- 自社の専門用語やブランド名を反映した文章生成
- カスタマーサポートの自動応答精度向上

**メリット**
- 比較的簡単に実装できる
- 学習コストや実装コストが低め
- 学習データの品質が良ければ効果が出やすい

**注意点**
- 過学習のリスクがある（特にデータセットが小さい場合）
- 学習データのバイアスがモデルに影響しやすい

### 2. 直接選好最適化（Direct Preference Optimization, DPO）

**概要**

モデルの出力に対する人間の選好を直接学習する手法。従来のRLHF（Reinforcement Learning from Human Feedback）よりもシンプルで効率的にアライメントを実現できる方法。

**ユースケース例**
- より人間らしい自然な応答を生成したい場合
- 有害な出力を減らし、安全性を向上させたい場合
- 特定の回答スタイルや品質基準に合わせたい場合

**メリット**
- 強化学習よりも実装が簡単
- 人間の選好を直接反映できる
- 学習が安定しやすい

**注意点**
- 選好データの品質に依存する
- データ作成コストが高い
- 複雑な最適化目標には向かない場合がある

### 3. 強化学習（Reinforcement Learning）

**概要**

強化学習の枠組みで、モデルの行動（応答）に対し報酬を与えて最適化する方法。人の評価やシミュレーション結果を報酬に利用。

**ユースケース例**
- 複雑な対話システムの自然な応答生成
- 長期的なユーザー満足度を意識した応答改善
- 動的な環境での最適化が必要な場合

**メリット**
- 複雑かつ動的な最適化が可能
- 人間のフィードバックを活用できる
- 長期的な目標を考慮した学習ができる

**注意点**
- 設定・実装が高度で複雑
- 多くの計算資源と時間が必要
- 報酬設計が学習結果に大きく影響する

## ファインチューニング設定項目の詳細解説

### サフィックス

**用途**

ファインチューニング後のモデル名に付与し、管理しやすくするための識別子。

**設定のポイント**
- 開発フェーズ、目的、使用データセットなどを示す文字列を付けるとよい
- 例: `_v1`, `_faq_data`, `_20240315`, `_supervised_cs`

### シード値

**用途**

学習時の乱数の初期値を指定し、学習結果の再現性を確保する。

**設定のポイント**
- ランダム設定だと実行毎に異なる結果になるため、評価や再現が困難
- 再現性を重視する場合は固定値を指定（例: 42, 123, 2024など）
- 実験比較時は必ずシード値を固定して複数回検証するのが望ましい

### ハイパーパラメーターの構成

**Batch size（バッチサイズ）**
- メモリ使用量や学習の安定性に影響
- 大きすぎるとGPUメモリ不足の可能性、小さすぎると学習が遅く不安定
- 推奨: 8-32程度から開始

**Learning rate multiplier（学習率乗数）**
- 学習率をコントロールし、パラメータ更新の大きさを決定
- 過学習や発散を防ぐために、最初は低めで始めて様子を見るのが良い
- 推奨: 0.1-1.0程度から開始

**Number of epochs（エポック数）**
- データセット全体の学習繰り返し回数
- 過学習を防ぐため、適切な回数を選択（少なすぎず、多すぎず）
- 早期停止や検証セットによる評価を活用すると効果的
- 推奨: 3-10程度から開始

## 実践でのおすすめ設定フロー

1. **教師あり学習を選択**し、まずは基本的なファインチューニングを実施
2. **サフィックスは用途がわかる名前**を付ける（例: `_supervised_v1`）
3. **シード値は評価や再現をするなら固定値を指定**
4. **ハイパーパラメータは基本的に自動設定でスタート**
5. 結果を検証し、必要なら**エポック数**や**学習率**を調整
6. 慣れてきたら、**直接選好最適化**を試して品質向上を目指す
7. 高度な要件があれば**強化学習**による最適化を検討

## 強化学習による最適化の設定

強化学習を用いてモデルの応答を最適化する際は、評価基準を明確に定義し、自動でモデル出力を採点・フィードバックできる仕組みを作ることが重要です。

### 推論ワークロード設定

**高精度（High）評価**
- より詳細で複雑な評価基準や多くのサブ評価器を使用
- 応答の細部までチェックするため、推論や評価処理に時間がかかる
- 学習時も多くのフィードバックが必要となり、全体の学習時間が長くなる傾向

**中精度（Medium）評価**
- 重要なポイントに絞った評価を行うため、処理負荷は高精度より軽減
- バランスの良い評価と学習時間のトレードオフとして使われる

**低精度（Low）評価**
- 簡易的・粗い評価のみで高速処理が可能
- 学習時間や計算コストを最小化できるが、細かな改善には向かない

### Grader Schema（評価スキーマ）

**基本構成**
- マルチ評価器（multi タイプ）を用いて複数のサブ評価器をまとめる構成が一般的
- 各サブ評価器はモデル出力の特定フィールドに対する評価器として機能
- 文字列の一致や部分一致、数値範囲チェックなど多様なタイプに対応

**集計方法**
- `calculate_output` でサブ評価器の結果を集計（平均や加重平均など）
- 最終スコアを算出し、モデルへのフィードバックとして使用

**設計のポイント**
- 複数の評価軸に分けることで、多面的かつ詳細な評価を実現
- 必須フィールドの指定など、JSONの構造に従い正確に記述することが重要

### Response Format（応答フォーマット）

**基本設定**
- モデルの応答フォーマットは、評価に用いる各フィールドを明示的に定義したJSONスキーマで固定
- `strict: true` を設定し、想定外の出力を排除し、安定した評価環境を維持

**構造設計**
- フィールドは評価対象ごとに分かれた構造にし、Grader schemaと対応させる
- 出力フォーマットを統一することで、評価器の精度と信頼性が向上

これらの設定を組み合わせることで、強化学習における報酬設計が明確になり、モデルの学習・評価プロセスを効果的に管理できます。

## 運用時の注意点とベストプラクティス

### データ準備
- 高品質な学習データの準備が最も重要
- データのバイアスやノイズを事前にチェック
- 十分なデータ量を確保（最低でも数百件以上を推奨）

### 評価・検証
- 学習データとは別の検証データで性能を評価
- 複数の評価指標を用いて多角的に検証
- 実際の使用環境に近い条件でのテストを実施

### リソース管理
- 学習時間とコストを事前に見積もり
- GPUリソースの使用量を監視
- 必要に応じてスケールアップ・ダウンを検討

## まとめ

Azure AI Foundryでのファインチューニングは、用途や技術レベルに応じてメソッドやパラメータを選択・調整することが大切です。

まずは教師あり学習でのファインチューニングにチャレンジし、基本を押さえましょう。設定の意味を理解しながら、段階的に調整を加えていくことで、カスタムモデルの性能を最大限引き出せます。

本記事がファインチューニング導入の一助となれば幸いです。