指示チューニングとは
Instruction Tuning
多様なタスクを指示文と模範応答のペアとして学習させ、LLMの指示追従能力を高めるファインチューニング手法
ひとことで言うと
「〜してください」という指示にきちんと従えるよう、AIにたくさんの指示と正しい答えの例を練習させること。
概要
指示チューニングは、要約・翻訳・質問応答・分類など多種多様なタスクを「指示文とその模範応答」というペアの形式に統一し、事前学習済みのLLMへ追加学習させることで、学習していない未知の指示に対しても適切に応答できる能力(指示追従性・汎化性能)を高めるファインチューニング手法。 事前学習だけを行ったモデルは、文章の続きを予測することは得意でも、ユーザーからの指示の意図を汲んで期待された形式で応答することは不得手な場合が多く、指示チューニングはこのギャップを埋める役割を果たす。 多数の異なるタスクを共通の指示形式で学習させることで、個々のタスクの精度向上だけでなく、学習時に見ていない新しいタスクの指示にも一定程度対応できる汎化能力を獲得できることが知られている。 OpenAIのInstructGPTやGoogleのFLANシリーズなどの研究を通じて確立され、現在の対話型LLM(ChatGPT等)を実現する上で欠かせない工程になっている。
背景
事前学習は大量のテキストから次の単語を予測するタスクを通じて言語の統計的な構造を学習するが、ユーザーの指示に従って有用な応答を返すという振る舞いは、事前学習の目的関数には直接組み込まれていない。 指示チューニングは、指示と応答のペアを教師データとして明示的に学習させることで、事前学習で得た知識をユーザーの意図に沿った振る舞いへ橋渡しする目的で行われる。
歴史
2021年: GoogleがFLANを発表し、多数のタスクを指示形式に統一して学習させることで、未知タスクへのゼロショット性能が向上することを示す。 2022年: OpenAIがInstructGPTを発表し、指示チューニングとRLHFを組み合わせることで人間の意図に沿った応答生成が大きく改善することを実証。 2022年以降: ChatGPTをはじめとする対話型LLMの標準的な学習工程として定着。
ワークフロー
要約・翻訳・分類・質問応答など多様なタスクのデータセットを、「指示文+入力+模範応答」という共通フォーマットに変換する。 事前学習済みモデルに対し、指示文と入力を条件として模範応答を生成するよう教師あり学習する。 学習後のモデルは、学習に含まれていない新しい指示に対しても、指示の意図を汲んだ応答を生成できるようになる。
コード例
TRLでの指示チューニング(SFT)の骨格
from trl import SFTTrainer, SFTConfig
config = SFTConfig(output_dir="./instruct-model", max_seq_length=1024)
trainer = SFTTrainer(
model=model,
args=config,
train_dataset=instruction_dataset, # {instruction, input, output} 形式
)
trainer.train()利点
欠点
- 指示と模範応答のペアデータを大量かつ高品質に用意するコストがかかる
- 学習データに含まれる指示の種類・分布へ応答スタイルが偏りやすい
- 指示チューニングだけでは、微妙なニュアンスや安全性に関する人間の選好を十分に反映しきれない場合がある
比較
- ファインチューニング — 指示チューニングは、多様なタスクの指示・応答ペアを使う汎用的なファインチューニングの一種
- RLHF — 指示チューニングで基本的な指示追従能力を獲得したのち、RLHFでさらに人間の選好に沿うよう調整する流れが一般的
- Few-shot — 指示チューニング済みモデルは、Few-shotの例を示さなくても指示だけでタスクをこなしやすくなる