ファインチューニングとは何か
大規模言語モデル(LLM)は、インターネット上の膨大なテキストデータで事前学習されている。この事前学習により、言語の理解・生成という汎用的な能力を獲得する。しかし、特定の業務ドメインや特定の文体・フォーマットで使いたい場合、汎用モデルでは精度が不十分なことがある。
ファインチューニングとは、この事前学習済みモデルを、用途に特化した追加データでさらに訓練することだ。一から学習し直すのではなく、既存の能力を土台に「方向付け」をするイメージで、比較的少ないデータと計算資源で特化したモデルを作れる。
どんな場合にファインチューニングが必要か
プロンプトエンジニアリングで解決できない問題
まず考えるべきは、プロンプトエンジニアリング(指示文の工夫)で解決できないかどうかだ。GPT-4やClaudeは汎用性が高く、適切なプロンプトを書けば多くのタスクをこなせる。ファインチューニングはコストと時間がかかるため、プロンプトの工夫で解決できるなら、そちらが効率的だ。
ファインチューニングが有効なのは主に次のようなケースだ。
- 特定のフォーマットで常に出力させたい(例: 決まったJSONスキーマ)
- 大量の例示をプロンプトに含めるとトークン数が増えすぎる(Few-shot学習の限界)
- 社内の専門用語・ドメイン知識を深く組み込みたい
- レスポンスの速度やコストを下げたい(小さいファインチューニング済みモデルの方が安い)
主な手法の解説
SFT(Supervised Fine-Tuning)
SFT(教師あり微調整)は最も基本的なファインチューニング手法だ。「入力→正解出力」のペアデータセットを用意し、モデルがその正解出力を生成するように重みを更新する。
具体的には、「この問い合わせメールに対してこう返答せよ」というサンプルを数百〜数千件用意し、それを使ってモデルを訓練する。訓練後のモデルは、同じようなメールが来たときに訓練データに近いスタイルと内容で返答するようになる。
シンプルで実装しやすい反面、高品質なラベル付きデータを大量に用意する必要があり、データ収集コストが高くなりがちだ。
LoRA(Low-Rank Adaptation)
LoRAは、大規模モデルを効率的にファインチューニングするための手法だ。モデル全体の重みを更新するのではなく、各層に小さな「アダプター行列」を追加し、そのアダプターだけを訓練する。
LLMの重みは数十億〜数千億パラメータにのぼることがあり、全パラメータを更新しようとすると膨大なGPUメモリが必要になる。LoRAはこの問題を解決し、消費者向けのGPU(例: RTX 4090)でも7Bや13B規模のモデルをファインチューニングできるようにした。
訓練後はアダプターをベースモデルに統合でき、推論時の速度低下はほとんどない。現在のオープンソースLLMファインチューニングでは、LoRAとその改良版QLoRAがデファクトスタンダードになっている。
RLHF(Reinforcement Learning from Human Feedback)
RLHF(人間フィードバックによる強化学習)は、ChatGPTやClaudeがユーザーの好みに合った回答を生成するために使われている手法だ。
手順は3段階ある。まずSFTでモデルを基本的に調整する。次に、複数の回答候補を人間が「どちらが良いか」で比較評価し、そのデータで「人間の好みを予測するモデル(報酬モデル)」を訓練する。最後に、この報酬モデルを使って本体のLLMを強化学習で最適化し、人間に高く評価されやすい回答を生成するよう調整する。
RLHFは安全性の向上にも使われており、有害な回答を避けるようにモデルを調整するDPO(Direct Preference Optimization)という手法も登場している。RLHFよりシンプルに実装できるため、現在はDPOの採用が増えている。
ファインチューニングのコストと現実
データ収集が最大のハードル
ファインチューニングで最もコストがかかるのは、高品質なトレーニングデータの準備だ。SFTなら数百〜数千件の入出力ペア、RLHFなら人間による比較評価データが必要になる。データの品質がそのまま最終的なモデルの品質に直結するため、手を抜けない。
クラウドAPIでのファインチューニング
OpenAIやAnthropicはAPIでファインチューニングサービスを提供している。GPT-4o miniのファインチューニングは比較的手頃な価格で試せる。自前でGPUを用意する必要がなく、手軽に始められる。
ただし、クラウドAPIでのファインチューニングはモデルの重みへのアクセスが制限されており、細かい設定の自由度が低い。より深いカスタマイズが必要な場合は、Llama・MistralなどのオープンソースモデルをローカルまたはクラウドGPU上でファインチューニングする方が適している。
ファインチューニングかRAGか
ドメイン知識をモデルに組み込む方法として、ファインチューニングとRAG(Retrieval-Augmented Generation)の選択がしばしば議論される。最新の情報を反映させたい場合や、データの更新頻度が高い場合はRAGの方が柔軟だ。一方、特定の出力スタイルやフォーマットを徹底させたい場合はファインチューニングが向いている。多くの実務ケースでは両者を組み合わせるのが最善策だ。
まとめ
ファインチューニングは事前学習済みLLMを特定用途に特化させる技術だ。SFTはシンプルで実装しやすく、LoRAは計算コストを大幅に削減し、RLHFは人間の好みに合わせた調整を可能にする。どの手法を選ぶかはデータの種類・量・目的によって変わる。まずはプロンプトエンジニアリングで解決できないかを確認し、それでも限界を感じたときにファインチューニングを検討するのが実践的なアプローチだ。