AI・機械学習
上級

Logit蒸留(ロジットジョウリュウ)

Logit蒸留とは、教師モデルのsoftmax出力層のlogit(対数確率)を生徒モデルが模倣する知識蒸留の最も基本的な手法で、KL-divergence損失を用いて教師の出力確率分布全体を生徒に転移する。

0 回閲覧
0 いいね

Logit蒸留は知識蒸留の最も直接的な手法であり、教師モデルのsoftmax出力層の生のlogit値(softmax適用前の対数確率)を生徒モデルが模倣する。教師の最終層出力z_teacherに温度Tを適用したsoftmax σ(z_teacher/T)と、生徒の対応する出力σ(z_student/T)の間のKL-divergenceを最小化することで知識を転移する。

数学的定式化

Logit蒸留の損失関数は以下のように定式化される:

  • 入力: トークン列x = (x_1, ..., x_n)
  • 教師の出力: p_T(y|x) = softmax(z_teacher / T) ※T: 温度パラメータ
  • 生徒の出力: p_S(y|x) = softmax(z_student / T)
  • 蒸留損失: L_KD = T² × KL(p_T || p_S)
  • タスク損失: L_CE = CrossEntropy(p_S(y|x, T=1), y_true)
  • 最終損失: L = α × L_KD + (1-α) × L_CE

T²の補正項は、温度Tで割ることにより勾配が1/T²倍にスケールダウンされるのを補償する。

Word-Level vs Sequence-Level Logit蒸留

手法粒度メモリ使用量精度計算コスト適用場面
Word-Level KD各トークン独立低(top-K保存)中〜高低い大規模LLM(70B+)の蒸留
Sequence-Level KD文全体の確率高(全系列保存)最高非常に高い高品質な小型モデル生成
Top-K Logit KD上位K個のlogit最低中最低メモリ制約環境
On-Policy KD生徒の出力で蒸留中高高い分布シフト対策

実装上の重要なポイント

Logit蒸留を実装する際の注意点は以下の通りである:

  • 語彙サイズの一致: 教師と生徒でtokenizerが異なる場合、語彙マッピングが必要。Llama(32K語彙)→Phi(51K語彙)のような異なるtokenizer間ではToken Alignment技術を使用
  • メモリ効率: 70Bモデルの全logitを保存すると1トークンあたり128KB(32K語彙×fp32)。バッチサイズ2048、シーケンス長2048で約537GBのディスク容量。top-256のみ保存で1/128に圧縮可能
  • 温度スケジューリング: 学習初期はT=8〜10(広い探索)、後期はT=2〜4(教師の自信を重視)に段階的に下げるWarm-Cool戦略が有効
  • Mixed Precision: BF16精度での蒸留がFP32と同等の結果を得られることが確認されており、A100でのスループットが約2倍に向上

Logit蒸留の最新研究(2024-2026年)

  • GKD(Generalized Knowledge Distillation): Google DeepMindが2024年に提案。生徒自身の生成結果に対して教師のlogitを適用するOn-Policy手法。従来のOff-Policy蒸留より分布シフトに強い
  • MiniLLM: Microsoftが提案。逆KL-divergence KL(p_S || p_T)を使用し、生徒が低確率領域を過度に模倣することを防止。GPT-2 1.5B→120Mで従来手法比5%改善
  • DistiLLM: Sunら(2024)が提案。Skewed KL-divergenceを使用し、順方向・逆方向KLの両方の利点を統合。Llama 2 13B→1.1Bで最高精度達成
  • f-Distill: f-divergenceファミリーからタスクに最適な発散度を自動選択。α-divergence(α=0.5〜2.0)のグリッドサーチで最適化

主要クラウドでのLogit蒸留サポート

プラットフォーム教師logitアクセス蒸留ツール備考
Azure AIPhi-3/Llama系のみAzure MLlogprobs APIで上位100まで取得可能
Google Vertex AIGemma系のみVertex TrainingGKDパイプライン統合
AWS SageMaker自前ホスト必須SageMaker Trainingカスタムコンテナ必要
Hugging Face全OSS対応transformers TrainerKDTrainerクラス提供

よくある質問(FAQ)

Q1: Logit蒸留とFeature蒸留のどちらが効果的ですか? A: Logit蒸留の方が実装が簡単で一般的に高い精度を達成する。ただし教師と生徒のアーキテクチャが大きく異なる場合(例: Transformer→RWKV)はFeature蒸留が適している。両者を組合せたMulti-Level Distillationが最も効果的だが、ハイパーパラメータ調整が複雑になる。

Q2: 商用APIモデル(GPT-4, Claude)からのLogit蒸留は可能ですか? A: 直接的なLogit蒸留は不可能。商用APIはlogitの一部(上位5〜20トークン)しか返さず、全語彙のlogitは取得できない。代替として、APIモデルで合成データを生成し、生徒をファインチューニングする「合成データ蒸留」が実用的な手段となっている。

Q3: Logit蒸留に必要なGPUメモリはどれくらいですか? A: 教師7B+生徒1.5Bの場合、BF16でA100 80GB×1基で実行可能。教師70B+生徒7Bの場合、A100 80GB×4基(教師をtensor parallelismで分散)が最小構成。vLLMで教師をServing化してlogitを事前計算すれば、蒸留時は生徒のみGPUに載せればよい。

まとめ

  • Logit蒸留は教師のsoftmax出力分布をKL-divergenceで生徒に転移する基本手法
  • 温度パラメータT=4〜8が汎用的で、Warm-Coolスケジューリングが効果的
  • Word-Level KDがメモリ効率と精度のバランスに優れる
  • GKD、MiniLLM等の最新手法でOn-Policy蒸留と発散度選択が進化中