コンテンツにスキップ
LinkedInX

知識蒸留

約10分

対象読者: モデルの軽量化・効率化に興味がある方、知識蒸留の概念と実践を理解したい方
前提知識: ファインチューニング入門 の基礎

知識蒸留(knowledge distillation)とは、大きなモデル(教師モデル)が持つ知識を、小さなモデル(生徒モデル)に転移する手法です。Hintonらの知識蒸留論文では、教師モデルの出力分布を使って小さなモデルを学習する考え方が整理されています。[1]

名人シェフ(教師モデル)が、弟子(生徒モデル)にレシピ本(正解ラベル)だけを渡すのではなく、実際に料理を作りながら「この材料はこれくらいの火加減で、こういう感触になったら次の工程に進む」という料理の感覚を伝えるイメージです。

通常の教師あり学習では、正解ラベル(「これは猫」「これは犬」)だけで学習します。知識蒸留では、教師モデルの出力確率分布——たとえば「猫: 85%、犬: 12%、虎: 3%」——を学習することで、正解以外のクラスへの「不確かさの分布」まで学習できます。この分布はソフトラベル(soft labels)と呼ばれ、ハードラベル(0/1の正解)よりも豊かな情報を含んでいます。[1]

graph TD
    I["入力データ"] --> T["教師モデル(大規模・高精度)"]
    I --> S["生徒モデル(小型・高速)"]
    T --> SL["ソフトラベル / 中間表現"]
    SL --> DL["蒸留損失(Distillation Loss)"]
    S --> DL
    DL --> U["生徒モデルの重みを更新"]

1. Response-based Distillation(応答ベース蒸留)

Section titled “1. Response-based Distillation(応答ベース蒸留)”

生徒モデルが教師モデルの最終出力を模倣する方法です。教師モデルが生成したソフトラベルで生徒を学習させます。

最もシンプルな形式で、次のような構成になります。

  • 教師モデルが各クラスに対する確率分布を出力
  • 生徒モデルが同じ入力に対して確率分布を出力
  • 2つの分布の差(KLダイバージェンス)を最小化するように生徒を学習

2. Feature-based Distillation(特徴ベース蒸留)

Section titled “2. Feature-based Distillation(特徴ベース蒸留)”

生徒モデルが教師モデルの中間層の表現(intermediate representations)を模倣する方法です。最終出力だけでなく、モデルが内部で構築する概念表現まで転移しようとします。

実装の難易度は高くなりますが、生徒モデルが教師の「思考過程」をより深く学習できます。DistilBERTの学習では、言語モデリング、蒸留、コサイン距離の損失を組み合わせた三重損失が使われています。[2]

3. Relation-based Distillation(関係ベース蒸留)

Section titled “3. Relation-based Distillation(関係ベース蒸留)”

データ点同士の関係性のパターンを生徒モデルに学習させる方法です。「サンプルAとサンプルBは似ている、CとDは似ていない」という構造的な知識を転移します。

ソフトラベルと温度スケーリング

Section titled “ソフトラベルと温度スケーリング”

通常のソフトマックス出力は、確率が特定クラスに集中しすぎることがあります(例: 猫99.9%、犬0.1%)。この場合、ソフトラベルにしてもハードラベルと大差がありません。

温度スケーリング(temperature scaling)は、ソフトマックスの計算式に温度パラメータ $T$ を導入し、確率分布をなめらかにする手法です。

$p_i = \frac{\exp(z_i / T)}{\sum_j \exp(z_j / T)}$

$T > 1$ にすると分布がフラットになり、クラス間の類似性が見えやすくなります。蒸留時は通常 $T = 2 \sim 4$ 程度が使われます。

実践的な知識蒸留:データ蒸留

Section titled “実践的な知識蒸留:データ蒸留”

LLM時代の実践的な蒸留では、教師モデルを使って学習データを生成するアプローチ(データ蒸留・合成データ蒸留)も使われています。Microsoft の Phi-2 紹介では、合成データセットと厳選されたWebデータを組み合わせた学習が説明されています。[3]

graph LR
    D["社内文書・参考資料"] --> T["教師モデル(GPT-4等)"]
    T --> SD["合成Q&Aデータセット"]
    SD --> S["生徒モデルのファインチューニング"]
    S --> SM["軽量・高速な専用モデル"]

手順の例:

  1. 大規模な教師モデル(GPT-4など)に社内ドキュメントからQ&Aペアを生成させる
  2. 生成されたデータでセット(数千〜数万件)を構築する
  3. 小型のオープンソースモデル(Llama、Mistralなど)をそのデータでファインチューニングする
  4. 特定ドメインでは教師モデルに匹敵する精度を、低コストで実現する
モデル教師モデル生徒モデル結果
DistilBERTBERT-base(1.1億パラメータ)6層Transformer(6700万パラメータ)BERT比40%小型化、速度1.6倍、性能97%維持[2]
Phi-1 / Phi-2合成データと厳選データ13億〜27億パラメータ小型モデルでも高い推論・コーディング性能を示した事例[3]
Llama系の派生GPT-4 / ChatGPT(Alpaca等)7B〜13Bパラメータ会話能力を獲得
蒸留方式実装複雑度品質の傾向主な用途
応答ベース(ソフトラベル)タスクが明確なほど維持しやすい分類・一般タスク
特徴ベース中〜高教師の中間表現まで近づけやすいファインチューニング品質重視
関係ベースデータ間の関係を保ちやすいメトリック学習・埋め込み
データ蒸留(合成データ)低〜中ドメイン依存LLMの専門特化・ローカル展開

知識蒸留は、次のような目的に適しています。

  • 高速推論が必要: エッジデバイス、リアルタイムアプリ、レイテンシー要件が厳しいAPI
  • エッジ展開: スマートフォン、IoTデバイス、オフライン環境でのモデル実行
  • コスト削減: 本番環境で大規模モデルを動かすAPIコストを削減したい
  • プライバシー保護: クラウドAPIに頼らず、ローカルで処理したい

ファインチューニングとの比較

Section titled “ファインチューニングとの比較”
観点ファインチューニング知識蒸留
目的モデルの振る舞い・ドメインを適応モデルを小型化・高速化
出力モデルのサイズベースモデルと同じベースモデルより小さい
実装の難易度中〜高(特にfeature-based)
必要なリソース中(PEFTなら低)中(教師モデルの推論コストも含む)
向いているケース特定タスク・ドメインへの対応デプロイコスト・速度の最適化

ファインチューニングと知識蒸留は排他的ではありません。教師モデルで合成データを生成し、生徒モデルをファインチューニングするというアプローチは両方を組み合わせた典型例です。蒸留後の小型モデルをタスクに合わせて扱う際には、PEFTのような手法も選択肢になります。[4]

Q: 知識蒸留はファインチューニングと同じですか?

A: 異なります。ファインチューニングはモデルの振る舞いを特定のタスクやドメインに適応させることが目的です。知識蒸留は教師モデルの知識を小型の生徒モデルに転移し、モデルを軽量化・高速化することが主な目的です。ただし、データ蒸留(合成データ生成)はファインチューニングの一手法として組み合わせて使われます。

Q: どのくらい小さくできますか?

A: 用途とタスクによります。DistilBERTの例では、BERT比40%の小型化、60%高速化、97%の性能維持が報告されています。[2] ただし、LLMのデータ蒸留では対象ドメインや評価セットによって結果が大きく変わるため、汎用性の低下も含めて実測が必要です。

Q: 品質はどのくらい落ちますか?

A: タスクの特性と蒸留方式によって大きく異なります。単一ドメインの特化タスクでは品質低下をほぼ感じないことがあります。一方、幅広い推論能力が必要な汎用タスクでは、圧縮率が高いほど品質が落ちます。最適な品質を確保するには、対象タスクでの評価セットを用意して実測することが重要です。

  1. Distilling the Knowledge in a Neural Network — Hintonらによる知識蒸留の原論文(2015)
  2. DistilBERT, a distilled version of BERT — DistilBERTの論文(Sanh et al., 2019)
  3. Phi-2: The surprising power of small language models — Microsoftによるデータ蒸留の事例
  4. Hugging Face PEFT Documentation — PEFTライブラリ(蒸留後のモデル管理にも活用)
クイズ