背景:Trial 13で発見した矛盾
DPO(Direct Preference Optimization)の訓練を検証する中で、驚くべき矛盾を発見しました。 検証結果(Trial 13、cyberagent/open-calm-3b、3Bモデル):- 対数確率評価: Chosen成功率 0% (0/50ペア)
- 実際の生成テスト: 未知質問50問で 100%成功 (50/50問)
発見のきっかけ
Trial 13では、Beta値のグリッドサーチ(Beta=0.05、0.03、0.01)を実施していました。検証スクリプトの結果を見た瞬間、目を疑いました:【Trial 13 DPO (Beta=0.05) 検証結果】
- Chosen logp: -114.82
- Rejected logp: -16.06
- 成功率(Chosen > Rejected): 0/50 (0.0%) ❌
【Trial 13 DPO (Beta=0.03) 検証結果】
- Chosen logp: -109.38
- Rejected logp: -15.67
- 成功率(Chosen > Rejected): 0/50 (0.0%) ❌
【Trial 13 DPO (Beta=0.01) 検証結果】
- Chosen logp: -91.63
- Rejected logp: -15.44
成功率(Chosen > Rejected): 0/50 (0.0%) ❌
【実際の生成テスト結果】
- 詳細化成功: 50/50 (100%) ✅
- DPO効果確認: 50/50 (100%) ✅
追加サービス案内追加: 48/50 (96%) ✅
実験設計:3つのモデルサイズで検証
この矛盾が偶然ではなく、体系的な問題である可能性を考え、3つの異なるモデルサイズで検証を実施しました。Trial 13: 3Bモデル(cyberagent/open-calm-3b)
目的: Beta値グリッドサーチで過学習を解決 実験内容:- Beta値: 0.05、0.03、0.01
- データセット: 日本語コールセンター50ペア
- エポック数: 3(過学習防止)
- ✅ 未知質問100%成功(50/50問)
- ❌ 対数確率評価0%成功(0/50ペア)
Trial 19: 13Bモデル(llm-jp/llm-jp-3-13b)
目的: Trial 13の矛盾が13Bモデルでも再現されるか検証 実験内容:- Beta値: 0.05、0.03、0.01(Trial 13と同じ)
- データセット: 日本語コールセンター50ペア(同一データ)
- エポック数: 3(同一設定)
- ✅ 実際の生成テスト100%成功
- ❌ 対数確率評価0%成功(予想通り)
Trial 20: 正規化評価(応答長補正)
目的: 対数確率評価の問題を解決 仮説: 応答長の影響で対数確率の総和が減少している 実験内容:- Trial 13の既存アダプターを使用(再訓練なし)
- 従来の方法(Total log probability)
- 新しい方法(Per-token average log probability)
- ❌ 従来の方法: 0.0% (0/50ペア)
- ✅ 新しい方法: 96.0% (48/50ペア)
- ✅ 改善幅: +96.0%
主要な発見
1. 問題の再現性:モデルサイズに依存しない
Trial 13(3B) と Trial 19(13B) の両方で、同じパターンが観察されました:| 項目 | Trial 13 (3B) | Trial 19 (13B) | |------|--------------|---------------| | 対数確率評価(Chosen > Rejected) | 0% | 0% | | 実際の生成テスト | 100% | 100% | | 矛盾の発生 | ✅ | ✅ |
この結果は、問題がモデルサイズに依存しないことを示しています。3Bでも13Bでも、同じ「対数確率0% vs 実際100%」の矛盾が発生する。2. Beta値による応答の質の違い
Trial 19では、3つのBeta値で実際の生成結果を比較しました。すべてのBeta値で対数確率評価は0%でしたが、実際の応答品質には明確な差がありました:| Beta値 | 特徴 | 評価 | |--------|------|------| | 0.05 | 非常に詳細、やや冗長 | ✅ 実用的 | | 0.03 | 最も詳細で実用的、追加サービス案内が充実 | ✅✅ 最良 | | 0.01 | 詳細だが、やや脱線する傾向 | ✅ 良い |
具体例(Beta=0.03の応答):Beta=0.03が最良と判断した理由:質問: 商品の返品はできますか?【SFT済みモデル】 はい、返品は可能です。お買い上げ日から30日以内であれば、未使用・未開封の商品に限り、返品を承ります。
【DPO済みモデル(Beta=0.03)】 はい、返品は可能です。お買い上げ日から30日以内であれば、未使用・未開封の商品に限り、返品を承ります。返品をご希望の場合は、商品に同梱されている「返品申込書」にご記入の上、商品と一緒にご返送ください。返送料は弊社が負担いたします。また、返金は商品到着後、5営業日以内にご指定の口座へお振込みいたします。なお、開封済みや使用済みの商品については、返品を承ることができません。ご不明な点がございましたら、お気軽にお問い合わせください。
- ✅ 詳細な手順説明(返品申込書の記入)
- ✅ ユーザーの不安解消(返送料負担、返金期間の明示)
- ✅ 例外ケースの説明(開封済み・使用済みは不可)
- ✅ サポート案内(不明点があればお問い合わせ)
- ❌ 冗長感は少ない(Beta=0.05より簡潔)
- ❌ 脱線しない(Beta=0.01より的確)
3. SFTの破壊的失敗(13Bモデルでも発生)
Trial 19の生成テストで、SFT済みモデルに破壊的な失敗パターンが見つかりました: 失敗例1(「A.」のみ応答):失敗例2(空白応答):質問: 商品の配送状況を知りたいです。【SFT済みモデル】 A.
【DPO済みモデル】 商品の配送状況は、当社ウェブサイトの「注文履歴」ページからご確認いただけます。ご注文番号を入力すると、現在の配送状況がリアルタイムで表示されます。...(詳細な説明が続く)
この破壊的失敗は、Trial 13(3B)でも観察されました。モデルサイズの問題ではなく、SFT訓練の問題であることが分かります。質問: 商品の交換はできますか?【SFT済みモデル】 (空白)
【DPO済みモデル】 はい、商品の交換は可能です。商品到着後7日以内であれば、不良品や誤配送の場合に限り、交換を承ります。...(詳細な説明が続く)
4. DPOの完全修復効果
驚くべきことに、DPO訓練はこれらのSFTの破壊的失敗を完全に修復しました: 修復率:- Trial 13(3B): 50/50ペア(100%修復)
- Trial 19(13B): 50/50ペア(100%修復)
対数確率評価の問題:根本原因と解決策
根本原因:応答長の影響
対数確率評価が0%になる理由は、応答長の影響でした。 従来の方法(Total log probability):total_logp = sum(log P(token_i | context))
この方法には致命的な問題があります:
問題1:応答長が長いほど、対数確率の総和が減少する
対数確率は負の値(-1.5、-2.3など)です。トークン数が増えるほど、負の値を足し合わせるため、総和は減少します:
問題2:DPOは応答を詳細化するため、Chosenが長くなる DPO訓練の効果により、Chosen応答は詳細化されます。しかし、これが対数確率評価では逆効果になります:Short response (5 tokens): total_logp = -1.5 + (-2.1) + (-1.8) + (-2.3) + (-1.9) = -9.6
Long response (20 tokens): total_logp = -1.5 + (-2.1) + ... (20個) = -40.3
Before DPO: Chosen: 10 tokens → total_logp = -20.0 Rejected: 5 tokens → total_logp = -10.0 → Chosen > Rejected ✅
After DPO (詳細化): Chosen: 50 tokens → total_logp = -100.0 Rejected: 5 tokens → total_logp = -10.0 → Chosen < Rejected ❌(実際は品質向上しているのに)
解決策:Per-token average log probability(正規化)
新しい方法(Trial 20で検証):normalized_logp = sum(log P(token_i | context)) / num_tokens
トークン数で割ることで、応答長の影響を除去します。
Trial 20の結果:
【従来の方法(Total log probability)】
- 平均 Chosen logp: -114.82
- 平均 Rejected logp: -16.06
- 差分(Chosen - Rejected): -98.77
- 成功率(Chosen > Rejected): 0/50 (0.0%) ❌
【新しい方法(Per-token average log probability)】
- 平均 Chosen logp: -1.6845
- 平均 Rejected logp: -3.6900
- 差分(Chosen - Rejected): 2.0055
成功率(Chosen > Rejected): 48/50 (96.0%) ✅
対数確率評価の限界
Trial 20の正規化評価でも、2ペアは失敗しました(96%成功)。これは、対数確率評価には根本的な限界があることを示しています: 限界1:相対評価の問題 対数確率評価は、Chosen と Rejected の相対的な優劣しか測定できません。絶対的な品質向上は測定できません。 限界2:トークン単位の平均では、文脈的な品質を捉えられない 応答の「詳しさ」「実用性」「ユーザーの不安解消」などの文脈的な品質は、トークン単位の平均対数確率では測定できません。 限界3:Bradley-Terry modelの仮定 DPOはBradley-Terry modelに基づいており、「人間の選好は対数確率の差で表現できる」と仮定しています。しかし、実際の人間の選好はもっと複雑です。実際の生成テストが不可欠な理由
この一連の実験から、実際の生成テストが不可欠であることが分かりました。対数確率評価の役割
対数確率評価は、次の用途では有用です:
- ✅ 訓練中の進捗モニタリング(Loss値の推移)
- ✅ モデルの過学習検出(Loss値が急激に減少)
- ✅ 相対的な比較(Beta値の影響など)
実際の生成テストの利点
実際の生成テストでは、次のことが分かります:
- ✅ 応答の詳細さ(情報量)
- ✅ 実用性(ユーザーの疑問を解消できるか)
- ✅ 追加サービス案内の有無
- ✅ 破壊的失敗の検出(「A.」のみ、空白応答)
- ✅ Beta値による品質の違い
ハイブリッドアプローチの推奨
最適な評価方法は、両方の組み合わせです:1. 訓練中: 対数確率評価(正規化)でモニタリング 2. 訓練後: 実際の生成テストで最終評価 3. Beta値選択: 実際の生成結果で判断
結論
主要な発見のまとめ
1. 対数確率評価の問題を完全に証明 - 3B、13Bの両方で同じパターン(対数確率0% vs 実際100%) - 応答長の影響で対数確率の総和が減少 - 正規化評価(トークンあたり平均)で96%成功
2. Beta値の最適化 - Beta=0.03が最良(詳細+実用的) - Beta=0.05は冗長、Beta=0.01は脱線傾向
3. DPOの効果 - SFTの破壊的失敗を100%修復 - 応答の詳細化を一貫して実現 - 実用的な品質に変化
4. 評価方法論の改善 - 対数確率評価は正規化が必須 - 実際の生成テストが不可欠 - ハイブリッドアプローチが最適
実用的な知見
DPO訓練を評価する際の推奨事項:1. ✅ 対数確率評価は正規化する(トークンあたり平均) 2. ✅ 実際の生成テストを必ず実施(未知質問で評価) 3. ✅ Beta値は実際の応答で選択(対数確率だけで判断しない) 4. ✅ 破壊的失敗の検出(SFTの問題を早期発見) 5. ✅ 複数のモデルサイズで検証(再現性の確認)
今後の展望
この研究で得られた知見は、DPO訓練の評価方法論を改善するための基礎となります。今後は、以下の方向で研究を進める予定です:1. より大きなモデルでの検証(70B、120B) 2. 異なるタスクでの検証(要約、翻訳、コード生成など) 3. 評価指標の開発(人間評価との相関が高い指標) 4. 自動評価の改善(GPT-4による品質評価の活用)
--- 謝辞 Lambda Labs の GPU インスタンスを活用した自動訓練システムにより、この研究を効率的に進めることができました。特に、Trial 21 では QLoRA(4-bit量子化)を使用することで、70B モデルの訓練を実現し、DPOの効果をより大規模なモデルで検証する道が開かれました。 --- 関連資料- Trial 13 チケット:
tickets/251028-022651-trial13-beta-grid-search.md - Trial 19 チケット:
tickets/251101-012002-trial19-generation-analysis.md - Trial 19 詳細分析:
analysis_trial19_generation_results.md - Trial 20 検証結果:
trial20_verification_results/trial20_verification.log
