Instruction Tuning
指示チューニングでは、指示に従えるよう、事前学習済み言語モデルを指示と応答のペアでファインチューニングします。FLAN、InstructGPT、データ、VLMについて解説します。
指示チューニングとは、事前学習済みの大規模言語モデル (LLM)を、指示と期待される応答のペアでファインチューニングし、平易な言葉で書かれた要求に従えるようにすることです。事前学習済みモデルはテキストを続けるだけです。OpenAIが「月面着陸について6歳児向けに数文で説明して」と尋ねたところ、GPT-3は重力や相対性理論に関する類似の要求を続けましたが、指示チューニング済みのInstructGPTは説明を書きました。Googleの研究者は2021年のFLAN論文でこの手法を説明しました。同論文では、1370億パラメーターのモデルを、指示形式に書き換えた60を超える自然言語処理 (NLP)データセットでチューニングしました。チューニング済みモデルは、未経験の25タスクのうち20タスクで、1750億パラメーターのGPT-3のゼロショット性能を上回りました。チャットモデルのパイプラインでは、同じ工程を通常、教師ありファインチューニング (SFT) と呼び、この2つの用語は同義語として使われます。
指示チューニングの仕組み#
各例は、指示の終わりと応答の始まりを示すテンプレートで整形します。たとえば、現在のモデルのチャットテンプレートや、StanfordのAlpacaが使用した「### Instruction」と「### Response」のヘッダーです。学習では事前学習と同じ次トークンの損失関数を使用しますが、損失の計算対象になるのは応答のトークンだけです。そのため、モデルは指示自体を予測するのではなく、回答を生成することを学習します。OpenAIのGPT-2を使った学習例を示します。
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("gpt2")
model = AutoModelForCausalLM.from_pretrained("gpt2")
optimizer = torch.optim.AdamW(model.parameters(), lr=5e-5)
# One instruction-response pair in the Alpaca prompt format
prompt_ids = tokenizer("### Instruction:\nName three animals that can fly.\n\n### Response:\n").input_ids
response_ids = tokenizer("Bats, eagles, and bees." + tokenizer.eos_token).input_ids
input_ids = torch.tensor([prompt_ids + response_ids])
# Label -100 drops the instruction from the loss, so the model learns only to respond
labels = torch.tensor([[-100] * len(prompt_ids) + response_ids])
for step in range(3):
loss = model(input_ids=input_ids, labels=labels).loss
loss.backward()
optimizer.step()
optimizer.zero_grad()
print(f"step {step}: loss {loss.item():.2f}")応答の10トークンだけが損失に含まれ、この1つの例に対する3回の更新で損失は4.45から1.49に減少します。指示チューニングでは、同じ更新を数千から数百万件の異なる指示・応答ペアに適用するため、モデルは1つの回答ではなく、回答するという一般的な習慣を学習します。
指示チューニングは通常、ポストトレーニングの最初の段階であり、データにはさまざまなソースを利用できます。
指示データセット#
GoogleのFlanコレクションは2022年に1,836タスクに拡大し、これを使った指示チューニングにより、5400億パラメーターのPaLMの性能が平均9.4%向上しました。OpenAIのInstructGPTは、ラベラーが作成したデモンストレーションと人間のフィードバックによる強化学習 (RLHF)を組み合わせ、人々は1750億パラメーターのGPT-3よりも13億パラメーターのモデルの出力を好みました。StanfordのAlpacaは2023年3月に公開され、OpenAIモデルがSelf-Instruct手法で生成した52,000件の例を使って、MetaのLLaMA 7Bを600ドル未満でファインチューニングしました。これは、指示データのソースとしての合成データの初期の例です。MetaのLIMAは、小規模なデータセットの有効性を示しました。わずか1,000件の厳選された例で650億パラメーターのLLaMAをチューニングし、モデルは事前学習中に知識のほぼすべてを学び、指示チューニングでは回答の形式とスタイルを学ぶと結論付けました。その後、直接選好最適化 (DPO)などの手法で、選好データを使ってチューニング済みモデルを改善します。
視覚指示チューニング#
視覚言語モデル (VLMs)も同様に、画像に関する指示に従うことを学習します。2023年4月に発表されたLLaVAでは、テキスト専用のGPT-4にCOCO画像のキャプションとバウンディングボックスを与え、それらに関する会話、詳細な説明、複雑な推論の例を158,000件作成させました。次に、そのデータを使って、CLIP画像エンコーダーを言語モデルに接続するモデルをチューニングしました。この手法は視覚指示チューニングと呼ばれます。指示チューニング済みVLMは写真について自由形式の要求に回答します。Ultralytics Platform AgentsのLLMブロックは、この機能を利用します。画像、上流のYOLO26の結果、記述されたプロンプトを、選択した視覚言語モデルに送信します。
指示チューニングと関連用語#
プロンプトチューニングでは少数のソフトプロンプトベクトルを学習し、モデルの重みは固定したままにします。プロンプトエンジニアリングでは入力テキストだけを変更します。一方、指示チューニングではモデルの重みを更新します。ドメインファインチューニングは、必ずしも要求への追従を教えることなく、モデルを医療や法律などの分野に適応させます。指示チューニングはパラメーター効率の高いファインチューニング (PEFT)と組み合わせることもできます。QLoRAは4ビットに量子化されたモデル上でLoRAアダプターを学習し、その論文では単一の48 GB GPUを使って650億パラメーターのモデルを指示チューニングしました。










