一貫性のある動作のためにモデルを微調整する

完了

プロンプト エンジニアリングはモデルの動作をガイドするのに役立ち、RAG は実際のデータでの応答を根拠にするのに役立ちます。 モデルが一貫したスタイル、トーン、または形式での応答を生成しないことがあります。 詳細なシステム メッセージや少数の例を含む場合でも、モデルが無視されるか、一貫性のない手順に従うことに気付いた場合は、モデルを 微調整 する必要があります。

微調整 は、事前トレーニング済みの言語モデルを取得し、より小さなタスク固有のデータセットでさらにトレーニングするプロセスです。 これにより、モデルの内部重みが調整され、トレーニング データのパターンと一致する応答が生成されます。

微調整を理解する

GPT-4o などの基礎モデルは、膨大な量の一般的なデータに対してトレーニングされます。 微調整は、特定の要件を反映する追加の例を使用してモデルをトレーニングすることによって、その基盤に基づいています。 これは一般化者を専門と考えてください。モデルは幅広い言語機能を保持しますが、トレーニング データが示す特定の方法で対応することを学習します。

微調整では、低ランク表現で重みの変化を近似する手法であるLoRA(低ランクアダプテーション)が使用されます。 LoRA では、モデルのすべてのパラメーターを再トレーニングする代わりに、重要なパラメーターの小さなサブセットのみが更新されます。 これにより、モデルの品質を維持しながら、トレーニングをより迅速かつコスト効率に優れています。

ゼロからモデルをトレーニングする上で微調整を行う主な利点は、効率です。 モデルの動作をカスタマイズするために必要な時間が短縮され、コンピューティング リソースが少なくなり、データが大幅に少なくなります。

微調整するタイミングを把握する

微調整は、プロンプト エンジニアリングだけでは必要な一貫性が得られないシナリオに適しています。 一般的なユース ケースは次のとおりです。

  • 一貫したスタイルとトーン: 組織には特定のブランドの声があり、モデルはすべての対話にわたって確実にそれに従う必要があります。 たとえば、旅行代理店は、すべての応答が短い段落で暖かく、励ましのトーンを使用することを望んでいます。
  • 特定の出力形式: 定義されたスキーマに続く JSON 応答など、構造化された出力を確実に生成するにはモデルが必要であり、少数の例だけでは十分ではありません。
  • プロンプトの長さを短くする: 多くの例を含む長いシステム メッセージはトークンを消費し、待機時間を長くします。 微調整により、これらのパターンがモデルに埋め込まれるため、要求ごとに必要なプロンプト サイズが小さくなります。
  • 蒸留: 大規模で高価なモデルの機能をより小さく効率的なモデルに転送する必要があります。 たとえば、パフォーマンスの高いモデルから出力を収集し、それらを使用して、低コストと待機時間で同様の品質を実現する小さなモデルを微調整できます。
  • ツールの使用を強化する: アプリケーションでツール呼び出しを使用する場合、ツールの例を使用して微調整することで、ツールの選択とパラメーター生成の精度を向上させることができます。

Important

微調整は高度な機能です。 微調整を検討する前に、常に標準モデルのベースライン パフォーマンスを要件に照らして評価することから始めます。 ベースラインがないと、微調整によってモデルのパフォーマンスが向上したか低下したかを検出するのは困難です。

微調整の種類を調べる

Microsoft Foundry には、いくつかの微調整手法が用意されています。

  • 監視微調整 (SFT): プロンプトと応答のペアのラベル付きデータセットでモデルをトレーニングします。 モデルは、トレーニング データ内のパターンに一致する出力を生成することを学習します。 この手法は、明確に定義された方法でタスクにアプローチする場合に最適です。
  • 強化の微調整 (RFT): 段階的により良い応答を得るためにグレーダーを使用して、反復フィードバックによってモデルの動作を最適化します。 RFT は、多くの可能なソリューションがあり、モデルの推論品質を向上させる必要がある複雑または動的なタスクに適しています。
  • 直接優先の最適化 (DPO): 優先応答と優先しない応答のペアを指定して、人間の好みに基づいてモデルを調整します。 DPO は、従来の強化学習アプローチよりも計算的に軽く、アラインメントでも同様に効果的です。

また、手法を組み合わせることもできます。 たとえば、まず教師あり学習でモデルをカスタマイズし、その後、DPO を使って応答をあなたの特定の好みにさらに合わせます。

トレーニング データの準備

微調整には、JSONL (JSON Lines) 形式の高品質な例のデータセットが必要です。 チャット完了モデルの場合、各例はシステム、ユーザー、およびアシスタント メッセージとの会話で構成されます。

{"messages": [{"role": "system", "content": "You are a friendly travel advisor for Margie's Travel."}, {"role": "user", "content": "What's a good beach destination in Europe?"}, {"role": "assistant", "content": "For a beautiful European beach experience, consider the Algarve in southern Portugal! It offers stunning golden cliffs, warm waters, and charming coastal towns. The best time to visit is from May through September."}]}
{"messages": [{"role": "system", "content": "You are a friendly travel advisor for Margie's Travel."}, {"role": "user", "content": "I need a budget hotel in Tokyo."}, {"role": "assistant", "content": "Here are some great budget-friendly options in Tokyo:\n\n- **Sakura Hotel Jimbocho** - Central location, from $45/night\n- **Khaosan World Asakusa** - Near Senso-ji temple, from $35/night\n- **Imano Tokyo Ginza Hostel** - Modern design, from $40/night\n\nAll three options are close to public transit, making it easy to explore the city."}]}

トレーニング データを準備する場合:

  • 例間で一貫したシステム メッセージを含めます。
  • 想定されるシナリオの範囲をカバーする、高品質で代表的な例を使用します。
  • 少なくとも数百の例を目指してください。より多くの方が一般的に優れています。
  • アシスタントの応答に、目的のスタイル、形式、トーンが正確に反映されていることを確認します。

トレーニング データにシステム メッセージを含めると重要です。 空白のままにすると、精度の低いモデルが生成される傾向があります。 推論用に微調整されたモデルをデプロイするときは、同じシステム メッセージを使用します。

課題を検討する

微調整では、コミットする前に評価する必要があるコストと複雑さが生まれます。

  • トレーニング コスト: 微調整には、トレーニングの初期コストと、カスタム モデルをホストするための継続的な時間単位のコストがあります。
  • データ品質要件: 品質が低い、または表現されていないトレーニング データは、オーバーフィット、アンダーフィット、またはバイアスにつながります。
  • メンテナンス: 微調整されたモデルは、データの変更や更新された基本モデルのリリース時に再トレーニングが必要になる場合があります。
  • 実験: ハイパーパラメーター (エポック、バッチ サイズ、学習率) の適切な組み合わせを見つけるには、テストと反復が必要です。
  • モデルの誤差: 特殊化が狭すぎると、微調整されたドメイン外の一般的な言語タスクでモデルの効果が低下する可能性があります。

旅行代理店の場合、微調整は、広範なシステム メッセージがなくても、すべての応答が会社のブランドの音声と書式設定のガイドラインに一貫して一致することを意味します。 しかし、チームは、トレーニング データを準備し、時間の経過と同時に微調整されたモデルを維持するコストと比較して、この利点を比較検討する必要があります。