KTO(Kahneman-Tversky Optimization)(ケーティーオーカーネマントバースキーオプティミゼーション)
ペアデータ不要でLLMをアライメントする手法。好ましい/好ましくない応答を個別に使用し、行動経済学のKahneman-Tversky理論(プロスペクト理論)に基づく損失関数を採用。ペアデータが少ない場合に特に有効。
KTO(Kahneman-Tversky Optimization)とは
KTO(Kahneman-Tversky Optimization)は、IBMリサーチが2024年に提案したLLMアライメント手法です。ノーベル賞受賞者Daniel KahnemanとAmos Tverskyが提唱したプロスペクト理論(行動経済学)をLLM学習に応用しており、DPOと異なりペアデータを必要としません。
DPOとの主な違い
| 項目 | DPO | KTO |
|---|---|---|
| データ形式 | (prompt, chosen, rejected)のペア | (prompt, completion, label)の単独 |
| データ収集 | 比較評価が必要 | Good/Badラベル付けのみ |
| 理論基盤 | Bradley-Terryモデル | プロスペクト理論 |
| 長さバイアス | あり | 軽減 |
プロスペクト理論とKTO
KahnemanとTverskyのプロスペクト理論では、人間は「損失」を「同等の利得」より大きく感じる傾向があります(損失回避)。KTOはこの原則をLLMの学習に組み込み:
- Good応答: モデルの期待報酬を最大化(利得側)
- Bad応答: モデルの期待報酬を最小化(損失回避側)
損失関数は非対称な価値関数で設計されており、良い応答と悪い応答で異なる重み付けが行われます。
KTO損失関数
# KTO損失の概念
def kto_loss(model_output, reference_output, label, beta=0.1):
z0 = log_ratio(reference_output) # 参照モデルの平均対数比
ratio = log_ratio(model_output) # 対象モデルの対数比
if label == "good": # 良い応答
loss = 1 - sigmoid(beta * (ratio - z0))
else: # 悪い応答
loss = 1 - sigmoid(beta * (z0 - ratio))
return loss
データ形式
KTOのデータ形式はDPOより収集しやすいです。
[
{
"prompt": "機械学習とは何ですか?",
"completion": "機械学習はデータからパターンを学習する...",
"label": true
},
{
"prompt": "機械学習とは何ですか?",
"completion": "よくわかりません。難しいです。",
"label": false
}
]
DPOのような「同じプロンプトに対するペア」が不要なため、既存の注釈データをより柔軟に活用できます。
実装(TRLライブラリ)
from trl import KTOTrainer, KTOConfig
training_args = KTOConfig(
beta=0.1,
desirable_weight=1.0,
undesirable_weight=1.0,
output_dir="./kto-model",
)
trainer = KTOTrainer(
model=model,
args=training_args,
train_dataset=dataset,
tokenizer=tokenizer,
)
trainer.train()
KTOの性能
論文ではLlama-7B/13BのインストラクションチューニングにおいてDPOと同等以上の性能を達成。特にペアデータが少ない・収集コストが高い状況でのアドバンテージが大きいです。
よくある質問
Q1: DPOよりKTOを選ぶべき場面は? A: ペアデータの収集が困難な場合、または既存のGood/Badラベルデータが既にある場合。
Q2: good/badの比率はどうすべき? A: 論文では1:1が推奨。ただし実際には1:2程度のgood多めが安定することも多い。desirable_weightとundesirable_weightで調整可能。
Q3: KTOは日本語LLMに使えますか? A: はい。言語非依存の手法のため、日本語コーパスで収集したGood/Badペアに適用可能。
まとめ
KTOは行動経済学の知見をLLM学習に融合した革新的手法で、ペアデータが不要という実用上の大きな利点があります。2025年現在、TRLライブラリに組み込まれており、DPOと並んで選好最適化の主要手法の一つとなっています。