大規模言語モデルを使って生成 AI アプリケーションを構築するには、新たな課題が伴います。重要な課題の一つは、モデルが与えられたユーザーのリクエストに対して生成するコンテンツの応答品質(正確性と関連性)を確保することです。これまでのレッスンでは、既存モデルへの入力プロンプトを変更することで問題を解決しようとするプロンプトエンジニアリングや検索拡張生成の技術について学びました。
本日のレッスンでは、第三の技術である ファインチューニング を紹介します。これは、モデル自体を追加データで 再訓練 することで課題に取り組む方法です。詳細を見ていきましょう。
本レッスンでは、事前学習された言語モデルのファインチューニングの概念を紹介し、このアプローチの利点と課題を探り、生成AIモデルの性能を向上させるためにファインチューニングをいつどのように使うべきかについての指針を示します。
このレッスンを終えたとき、以下の質問に答えられるようになります:
- 言語モデルのファインチューニングとは何か?
- いつ、なぜファインチューニングが有用なのか?
- 事前学習モデルをどうやってファインチューニングできるのか?
- ファインチューニングの限界は何か?
準備はいいですか?始めましょう。
本格的に学習に入る前に、学習の全体像をつかみたいですか?ファインチューニングの基本概念と動機から、プロセスや実行のベストプラクティスを理解するまでの学習の流れを説明した図解ガイドをご覧ください。興味深いトピックですので、セルフガイド学習のサポートとなる追加リンクを集めたリソースページもぜひチェックしてください!
定義によれば、大規模言語モデルはインターネットを含む多様な情報源からの大量のテキストで 事前学習 されています。これまでのレッスンで学んだように、モデルのユーザーからの質問(「プロンプト」)に対する応答の質を高めるためには、プロンプトエンジニアリング や 検索拡張生成 のような技術が必要です。
プロンプトエンジニアリングの人気手法の一つは、モデルに対して応答に何が期待されているかをより詳しく指示することです。これは 明示的な指示 を与えたり、いくつかの例を提示 したりすることが含まれます。これを few-shot learning(少数ショット学習)と呼びますが、以下の2つの制約があります:
- モデルのトークン制限により、与えられる例の数と効果が制限される。
- 例を毎回のプロンプトに付加するコストが高くなり、柔軟性が制限される。
ファインチューニングは、機械学習システムでよく使われる手法で、事前学習モデルを特定のタスクに特化した新しいデータで再訓練して性能を向上させるものです。言語モデルの文脈では、特定タスクや応用領域のために 厳選した事例セット で事前学習モデルをファインチューニングし、そのタスクや領域に対してより正確かつ関連性の高い カスタムモデル を作成します。ファインチューニングの副次的メリットとして、few-shot learning に必要な例の数を減らせるので、トークン使用量とそれに伴うコストも削減されます。
この文脈でいうファインチューニングとは、新しいデータを追加する ことによりモデルの再訓練を行う 教師あり ファインチューニングを指します。これは、モデルを同じデータで異なるハイパーパラメータで再訓練する教師なしのファインチューニング手法とは異なります。
覚えておくべき重要な点は、ファインチューニングは高度な技術であり、望む結果を得るには一定の専門知識が必要だということです。誤った方法で実施すると、期待される改善が得られないばかりか、ターゲットとする領域におけるモデルの性能が低下することもあります。
したがって、言語モデルのファインチューニング方法を学ぶ前に、なぜこの方法を選ぶべきか、いつファインチューニングを開始すべきかを理解する必要があります。まずは次の質問を自分に問いかけてください:
- ユースケース:ファインチューニングのあなたの ユースケース は何ですか?現在の事前学習モデルのどの側面を改善したいですか?
- 代替手段:望む結果を達成するために 他の技術 を試しましたか?それらを基準に比較してください。
- プロンプトエンジニアリング:関連するプロンプト応答の例を使ったfew-shotプロンプトを試し、応答品質を評価。
- 検索拡張生成:データを検索して取得したクエリ結果でプロンプトを拡張し、応答品質を評価。
- コスト:ファインチューニングのコストを把握していますか?
- チューニングの可否 — 事前学習モデルはファインチューニング可能か?
- 労力 — トレーニングデータの準備、モデルの評価・改善にかかる労力。
- 計算リソース — ファインチューニングジョブの実行やファインチューニング済みモデルのデプロイに必要な計算資源。
- データ — ファインチューニングに十分な質の例が入手可能か。
- メリット:ファインチューニングのメリットは確認できていますか?
- 品質 — ファインチューニングモデルはベースラインを上回る性能か。
- コスト — プロンプトを簡素化し、トークン使用量を削減できるか。
- 拡張性 — ベースモデルを新しい領域に再利用可能か。
これらの質問に答えることで、ファインチューニングがあなたのユースケースに適しているか判断できます。理想的には、メリットがコストを上回る場合にのみこの方法を採用します。決断したら、次に事前学習モデルを どうやって ファインチューニングするかを考えましょう。
意思決定プロセスをさらに深く知りたい方は、To fine-tune or not to fine-tune をご覧ください。
事前学習モデルをファインチューニングするには、以下が必要です:
- ファインチューニングするための事前学習モデル
- ファインチューニングに使用するデータセット
- ファインチューニングジョブを実行するトレーニング環境
- ファインチューニング済みモデルをデプロイするホスティング環境
以下のリソースは、選定したモデルと厳選データセットを用いて実際の例をステップごとに解説するチュートリアルです。これらのチュートリアルを実行するには特定プロバイダーのアカウントと関連モデルおよびデータセットへのアクセスが必要です。
| プロバイダー | チュートリアル | 説明 |
|---|---|---|
| OpenAI | チャットモデルのファインチューニング方法 | gpt-35-turboを特定ドメイン(「レシピアシスタント」)向けにファインチューニングする方法を学びます。トレーニングデータの準備、ファインチューニングジョブの実行、ファインチューニング済みモデルによる推論の方法を解説。 |
| Azure OpenAI | GPT 3.5 Turbo ファインチューニングチュートリアル | Azure上で gpt-35-turbo-0613 モデルをファインチューニングする方法。トレーニングデータの作成・アップロード、ファインチューニングジョブの実行、新モデルのデプロイと利用手順を解説。 |
| Hugging Face | Hugging Face でのLLMファインチューニング | transformers ライブラリと Transformer Reinforcement Learning (TRL) を使い、オープンデータセットでオープンLLM(例: CodeLlama 7B)をファインチューニングするブログ解説。 |
| 🤗 AutoTrain | AutoTrainでのLLMファインチューニング | AutoTrain(または AutoTrain Advanced)は Hugging Face が開発した python ライブラリで、多様なタスクのファインチューニングが可能です。Web GUI、CLI、yaml設定ファイルを使ったトレーニングをサポートし、自身のクラウド、Hugging Face Spaces、ローカル環境でノーコードまたはコードベースでファインチューニング可能です。 |
| 🦥 Unsloth | Unsloth でのLLMファインチューニング | Unsloth は LLM のファインチューニングと強化学習(RL)をサポートするオープンソースフレームワークです。ローカルトレーニング・評価・デプロイを ノートブックで簡単に実行可能。TTS、BERT、マルチモーダルモデルもサポート。入門には段階的なファインチューニングガイドが便利です。 |
上記のチュートリアルのいずれかを選び、実際に手順を踏んでみてください。これらのチュートリアルはリポジトリ内の Jupyter Notebook にまとめて複製する可能性もありますが、最新版は必ず元のソースから直接利用してください。
このレッスンを修了したら、Generative AI Learning collection をチェックして生成AIの知識をさらに深めてください!
おめでとうございます!! 本コースの v2 シリーズの最終レッスンを修了しました!学習と開発を止めないでください。**RESOURCES ページでは、このトピックに関する追加の推薦リソース一覧を公開しています。
v1 シリーズのレッスンも新たな課題や概念を加えアップデートしましたので、ぜひ知識をリフレッシュしてください。ご質問やフィードバックはぜひ こちら から投稿して、コミュニティのためにレッスン改善にご協力ください。
免責事項:
本書類はAI翻訳サービス[Co-op Translator](https://github.com/Azure/co-op-translator)を用いて翻訳されています。正確性には努めておりますが、自動翻訳には誤りや不正確な箇所が含まれる可能性があることをご了承ください。原文の言語で記載された文書が正式な情報源とみなされます。重要な情報については、専門の人間による翻訳を推奨します。本翻訳の利用により生じた誤解や誤訳について、当方は一切の責任を負いかねます。

