---
title: "知識蒸留（Model Distillation）とは？LLM蒸留のやり方とPyTorch実装・規約の注意"
url: "https://www.issoh.co.jp/tech/details/5364/"
published: 2025-02-17
updated: 2026-10-26
categories: ["LLM・RAG"]
publisher: "株式会社一創"
---

# 知識蒸留（Model Distillation）とは？LLM蒸留のやり方とPyTorch実装・規約の注意

知識蒸留（Knowledge Distillation、Model Distillation）は、大きく高精度な「教師モデル」の出力を手本にして、小さな「生徒モデル」を学習させる技術です。英語の distillation は本来、液体を加熱して成分を分ける化学の「蒸留」を指し、機械学習ではその比喩で使われています。この記事では、温度付きソフトマックスの仕組みをPyTorchで実行して確かめた結果と、LLMを蒸留する3つの方式、クラウド各社の蒸留機能の2026年10月時点の状況、ChatGPTやClaudeの出力を蒸留に使うときの規約をまとめます。

## まとめ：知識蒸留の要点とLLM蒸留で選ぶ方式

知識蒸留は、教師モデルが出す確率分布（ソフトターゲット）を生徒モデルに真似させて、精度をなるべく保ったままモデルを小さくする手法です。2015年にHintonらが定式化し、BERTを40%小さくして60%速くしたDistilBERT、推論能力を1.5B〜70Bの小型モデルへ移したDeepSeek-R1の蒸留モデル群などが代表例です。

手書き数字（scikit-learnのdigits）の分類で測ると、ラベル1,078件で学習した生徒に蒸留損失（教師の分布とのKLダイバージェンス）を足した効果は、温度T=4〜8で約1ポイントでした。ラベルが200件しかない場合は、更新回数を十分に取ると蒸留損失で約4ポイント上がり、ラベルの無いデータに教師が答えを付けて学習データを増やすと、正解ラベルを全件使ったときと同じ精度に届きました。LLMの蒸留でも、実務の中心は「教師に大量の回答を作らせ、それで生徒を学習させる」方式です。

方式は次の基準で選びます。教師と生徒のトークナイザが同じでロジットを取れるならロジット蒸留、APIしか使えない教師なら出力でのSFT、SFT後に伸び悩んだらオンポリシー蒸留（Hugging Face TRL の `DistillationTrainer`）です。商用APIの出力を使う場合、OpenAI・Anthropic・Googleはいずれも競合するモデルの開発への利用を規約で禁じています。ライセンスで蒸留を明示的に許しているオープンウェイトの教師（DeepSeek-R1はMITライセンス）を選ぶのが確実です。

## 知識蒸留の仕組み：教師モデル・生徒モデルとソフトターゲット

### Hinton 2015の定義とソフトターゲットが運ぶ情報

知識蒸留の枠組みは、Geoffrey Hinton、Oriol Vinyals、Jeff Deanの論文「[Distilling the Knowledge in a Neural Network](https://arxiv.org/abs/1503.02531)」（arXiv:1503.02531、2015年3月）で定式化されました。生徒モデルは正解ラベル（ハードラベル）だけでなく、教師モデルが各クラスに割り振った確率も学びます。

手書き数字の「2」の画像に対して、教師が「2：0.90、3：0.06、7：0.03」と出したとします。ハードラベルは「2」という1点しか伝えませんが、ソフトターゲットは「この2は3や7に少し似ている」という情報まで運びます。論文は、不正解クラス同士の相対的な確率にも、教師モデルの汎化の仕方を伝える情報があると説明しています。呼び方は、学術文献では Knowledge Distillation、OpenAIやAWSなど製品側では Model Distillation が多く、日本語では単に「蒸留」とも呼ばれますが、指している技術は同じです。

### 温度付きソフトマックスと損失にT²を掛ける理由

ソフトマックスはロジット（出力スコア）を確率に変える関数です。温度付きソフトマックスでは、ロジットを温度Tで割ってから確率に変えます。T=1は通常のソフトマックスと同じで、Tを上げるほど分布がなだらかになり、正解以外のクラスに付いた小さな確率の差が見えるようになります。

実装では、温度を上げるとソフトターゲット由来の勾配が1/T²の大きさに縮むため、蒸留損失にT²を掛けて正解ラベル側の損失との釣り合いを保ちます。これは提案論文が明記している補正で、[PyTorch公式の Knowledge Distillation Tutorial](https://docs.pytorch.org/tutorials/beginner/knowledge%5Fdistillation%5Ftutorial.html) も同じ形で損失を書いています。

### 何を移すか・いつ移すか：手法と自己蒸留の分類

蒸留は「教師の何を真似るか」と「教師と生徒をいつ学習させるか」の2軸で分類されます。

| 分類    | 種類      | 内容                       |
| ----- | ------- | ------------------------ |
| 何を移すか | 応答ベース   | 最終出力の確率分布                |
| 何を移すか | 特徴ベース   | 中間層の特徴表現                 |
| 何を移すか | 関係ベース   | サンプル間・層間の関係              |
| いつ移すか | オフライン蒸留 | 学習済みの教師を固定して使う           |
| いつ移すか | オンライン蒸留 | 教師と生徒を同時に学習する            |
| いつ移すか | 自己蒸留    | 同じモデル（の深い層・過去の自分）が教師を兼ねる |

最初に試すのは、実装が最も簡単な応答ベースのオフライン蒸留です。特徴ベースは教師と生徒の層の対応を自分で決める必要があり、構造が大きく違うと合わせにくくなります。

## PyTorchによる蒸留損失の実装と温度・データ量の比較

### 蒸留損失の実装：KLダイバージェンスと交差エントロピーの併用

応答ベース蒸留の損失は、温度Tで平滑化した教師と生徒の分布のKLダイバージェンス（にT²を掛けたもの）と、正解ラベルとの交差エントロピーの重み付き和です。PyTorchでは次のように書けます。

```
import torch
import torch.nn.functional as F

def distillation_loss(student_logits, teacher_logits, labels, T=4.0, alpha=0.9):
    # 教師と生徒の分布を温度Tで平滑化してKLダイバージェンスを取る
    soft = F.kl_div(
        F.log_softmax(student_logits / T, dim=-1),
        F.log_softmax(teacher_logits / T, dim=-1),
        reduction="batchmean",
        log_target=True,
    ) * (T * T)  # 勾配が1/T^2に縮む分を戻す
    hard = F.cross_entropy(student_logits, labels)  # 正解ラベルとの損失
    return alpha * soft + (1 - alpha) * hard

# 学習ループの1ステップ（教師は固定）
teacher.eval()
with torch.no_grad():
    t_logits = teacher(x)
loss = distillation_loss(student(x), t_logits, y)
optimizer.zero_grad()
loss.backward()
optimizer.step()
```

`F.kl_div` は第1引数に生徒の対数確率を取ります。`log_target=True` を付けると教師側も対数確率で渡せて、小さな確率を求めてから対数を取る際の数値的不安定さを避けやすくなります。`reduction="batchmean"` にしないと、KLダイバージェンスの数学的な定義とスケールが合いません。

### digitsでの実測：温度Tと生徒の精度

上の損失を、scikit-learn 付属の手書き数字データ（8×8画素・1,797枚、学習1,078枚・テスト719枚に分割）で実行しました。環境は Docker（python:3.12-slim）上の PyTorch 2.14.1（CPU）です。教師は64→512→512→10の全結合ネットワーク（301,066パラメータ、テスト精度98.33%）、生徒は64→16→16→10（1,482パラメータ）で、隠れ層の活性化関数はReLUです。入力は16で割って0〜1にそろえ、層化抽出で分割しました（乱数0で固定）。最適化はAdam（学習率0.001、バッチサイズ32）で、教師を60エポック、生徒を200エポック学習し、生徒は乱数シード0〜4の5回の平均と標準偏差を取りました。

| 生徒の学習条件       | ラベル1,078件     | ラベル200件（200エポック） |
| ------------- | ------------- | ---------------- |
| 正解ラベルのみ（蒸留なし） | 96.27%（±0.45） | 89.07%（±1.61）    |
| 蒸留 T=1、α=0.9  | 96.24%（±0.47） | 89.18%（±1.74）    |
| 蒸留 T=2、α=0.9  | 96.52%（±0.14） | 88.54%（±1.65）    |
| 蒸留 T=4、α=0.9  | 97.30%（±0.38） | 88.82%（±0.91）    |
| 蒸留 T=8、α=0.9  | 97.30%（±0.12） | 89.79%（±1.16）    |

学習データが1,078件あるときは、T=4〜8で約1ポイント上がり、T=1〜2ではほぼ変わりませんでした（α=0.5でも同じ傾向で、T=8は97.39%）。温度を上げると、教師が低い確率を付けたクラス間の差を学習に反映しやすくなります。ただし、T=1でもソフトターゲットはクラス間の確率情報を含み、今回の精度差の原因をこの比較だけで確定することはできません。一方、ラベルが200件のときは、どの温度でも蒸留なしとの差が標準偏差の範囲に収まりました。ただしこの列は200件を200エポック（約1,400回の更新）で打ち切った結果で、次の節のように更新回数を増やすと結果が変わります。

### 少量データでの実測：蒸留損失と教師が付けた追加ラベル

次に、ラベル付きは先頭200件だけとし、残り878件をラベル無しとして扱いました。どの条件も更新回数が約3,400回（1,078件を100エポック学習するのと同じ回数）になるようにそろえ、200件だけの条件は486エポック学習しています。

| 生徒の学習データ                  | テスト精度         |
| ------------------------- | ------------- |
| ラベル200件のみ（正解ラベル）          | 90.07%（±1.34） |
| ラベル200件＋蒸留損失（T=4、α=0.9）   | 94.49%（±1.17） |
| 200件＋教師の予測クラス878件         | 96.24%（±0.54） |
| 200件＋教師のソフトターゲット878件（T=4） | 95.58%（±0.47） |
| 正解ラベル1,078件（参考）           | 96.24%（±0.54） |

更新回数をそろえると、ラベル200件だけでも蒸留損失を足すと90.07%から94.49%へ4.4ポイント上がりました。前の表の200エポックでは差が出なかったので、少量データでは蒸留損失の効果が出るまでに長めの学習が要った、というのがこの設定での観測です。教師にラベル無しの878件へ答えを付けさせて学習データに加えると96.24%で、正解ラベル1,078件と同じ値になりました。この実験の教師は878件も学習に使っていて正答率が100%なので、教師の誤答が混ざる実務ではここまで届きません。別のデータセットで同じ差が出るかも確かめていません。DeepSeek-R1の蒸留モデルも、教師側で整備した約80万件のデータによるSFTで作られています。ただし、その内訳は推論関連約60万件と非推論関連約20万件で、後者にはDeepSeek-V3の生成データや既存SFTデータが含まれます。

CPU推論時間は、PyTorchのスレッド数を2、バッチサイズを1に固定し、200回のウォームアップ後に1万回呼び出した平均で、教師78〜79マイクロ秒、生徒44〜50マイクロ秒でした（2回測定）。測定機はIntel Core i9-9880H（2.3GHz）搭載のMac上のDockerで、別の環境では値が変わります。パラメータは約200分の1でも、速度は1.6〜1.8倍にとどまります。モデルが小さすぎると呼び出しのオーバーヘッドが支配するので、速度の改善は実機で測ってから見積もってください。

## LLM蒸留のやり方：3つの方式と選び方

### ロジット蒸留：教師と生徒でトークナイザが同じとき

LLMでも、上の実装と同じく次トークンの確率分布をKLダイバージェンスで合わせられます。語彙ごとの分布を直接比較する実装では、教師のロジット（確率へ変換する前の出力スコア）を取得でき、教師と生徒のトークンIDと語彙の対応が一致している必要があります。Googleは[Gemma 2の技術報告](https://arxiv.org/abs/2408.00118)で2Bと9Bを通常の次トークン予測でなく知識蒸留で学習したと書いています。[Gemma 3の技術報告](https://arxiv.org/abs/2503.19786)では、教師の確率で重み付けして1トークンあたり256個のロジットをサンプリングし、その範囲の分布を学習させています。全語彙の分布を保存すると容量が膨らむため、Gemma 3では教師の確率に基づいて抽出した256個のロジットを使います。確率上位256個を固定的に選ぶ方法とは異なります。

国内では、Sakana AIのTinySwallow-1.5BがQwen2.5-32B-Instructを教師にした独自の蒸留手法TAIDで作られています。詳しくは[TinySwallow-1.5BとTAIDの仕組み](/tech/details/5230/)で解説しています。

### 教師の出力でSFTする：APIでしか使えない教師のとき

教師に回答を生成させ、そのテキストで生徒を通常のファインチューニング（SFT）にかける方式です。ロジットが不要なので、APIでしか使えない教師や、トークナイザの違う教師でも使えます。系列レベルの蒸留とも呼ばれ、LLM蒸留の「やり方」として最も多く使われています。

代表例が[DeepSeek-R1の蒸留モデル](https://huggingface.co/deepseek-ai/DeepSeek-R1)です。[論文](https://arxiv.org/abs/2501.12948)によると、R1で整備した約80万件のサンプルでQwen2.5とLlamaの6モデルをSFTし、蒸留モデル自体には強化学習をかけていません。

| 蒸留モデル                | ベースモデル                 | AIME 2024 pass@1 |
| -------------------- | ---------------------- | ---------------- |
| R1-Distill-Qwen-1.5B | Qwen2.5-Math-1.5B      | –                |
| R1-Distill-Qwen-7B   | Qwen2.5-Math-7B        | 55.5%            |
| R1-Distill-Qwen-14B  | Qwen2.5-14B            | –                |
| R1-Distill-Qwen-32B  | Qwen2.5-32B            | 72.6%            |
| R1-Distill-Llama-8B  | Llama-3.1-8B           | –                |
| R1-Distill-Llama-70B | Llama-3.3-70B-Instruct | –                |
| （参考）OpenAI o1-mini   | –                      | 63.6%            |

32Bの蒸留モデルが数学の推論ベンチマークでo1-miniを上回ったことで、「推論能力は小型モデルへ蒸留できる」ことが広く知られました。表で「-」の行は本記事で数値を扱っていない行で、値はモデルカードで確認できます。

### オンポリシー蒸留：SFTの後に伸び悩んだとき

SFT型の蒸留は、教師が書いた文章を生徒に写させる方式です。推論時の生徒は自分の書いた文章の続きを生成するため、長い出力ほど学習時とのずれが積み重なります。オンポリシー蒸留は、生徒自身に回答を生成させ、その各トークンに教師の確率分布でフィードバックを与えて、このずれを減らします。[GKD](https://arxiv.org/abs/2306.13649)や[MiniLLM](https://arxiv.org/abs/2306.08543)（逆向きのKLダイバージェンスを使う）が元になった研究です。

効果は数字で報告されています。[Qwen3の技術報告](https://arxiv.org/abs/2505.09388)は、オフポリシー蒸留済みの8Bモデルからの追加学習で、強化学習が17,920 GPU時間かかったのに対しオンポリシー蒸留は1,800 GPU時間で上回る性能になったと報告しています。Thinking Machines Labの[2025年10月の解説記事](https://thinkingmachines.ai/blog/on-policy-distillation/)では、40万件のSFT後にAIME 2024で60%だったモデルが、オンポリシー蒸留の約150ステップで70%に届いています。

実装には Hugging Face TRL が使えます。TRL 1.10.0（2026年8月13日）で `DistillationTrainer` が実験機能から正式機能に移り、最新の1.16.0（2026年10月15日）で次のコードが動きます。

```
from datasets import load_dataset
from trl import DistillationConfig, DistillationTrainer

dataset = load_dataset("trl-lib/tldr", split="train")

args = DistillationConfig(
    output_dir="qwen-0.5b-distilled",
    temperature=1.0,             # 生成と損失計算の温度（既定1.0）
    beta=1.0,                    # 0.0=順方向KL、0.5=JSD、1.0=逆方向KL（既定1.0）
    max_completion_length=512,   # 生徒が1回に生成するトークン数の上限
)
trainer = DistillationTrainer(
    model="Qwen/Qwen2.5-0.5B-Instruct",        # 生徒
    teacher_model="Qwen/Qwen2.5-1.5B-Instruct", # 教師（同じトークナイザ）
    args=args,
    train_dataset=dataset,
)
trainer.train()
```

このコードの教師・生徒をテスト用の極小モデル（`trl-internal-testing/tiny-Qwen2ForCausalLM-2.5`）に差し替え、CPUで2ステップ完走することを確かめました。教師と生徒が同じモデルなので損失は0で、確かめたのはAPIが動くことまでです（学習効果は見ていません）。既定はbf16で学習するので、GPUの無い環境では `use_cpu=True` と `bf16=False` を足さないと設定の検証で止まります。古い解説記事にある `GKDTrainer` は `trl.experimental.gkd` へ移り、SFTデータとの混合率を決めていた `lmbda` は1.9.0で `DistillationTrainer` から削除されています（[TRLのリリースノート](https://github.com/huggingface/trl/releases)）。

### LLM蒸留方式の選定基準：教師へのアクセスと学習段階

| 状況                 | 選ぶ方式           |
| ------------------ | -------------- |
| 教師がAPIのみ・トークナイザが違う | 教師の出力でSFT      |
| 教師の重みが手元にあり語彙が同じ   | ロジット蒸留         |
| SFT後に長い推論で精度が伸びない  | オンポリシー蒸留       |
| GPU時間をできるだけ抑えたい    | SFT→オンポリシー蒸留の順 |

最初の1回はSFT型で作り、評価で足りない部分が見えてからオンポリシー蒸留を足すのが無難です。オンポリシー蒸留は学習中に教師の推論を毎ステップ回すため、掲載したDistillationTrainerでは教師モデルの推論用にも計算資源が必要です。このトレーナーのvLLMサーバー連携は生徒の文章生成用であり、教師の推論を外部化する機能ではありません。

## OpenAI・Bedrock・Google Cloudの蒸留機能の現況（2026年10月）

自前でGPUを用意せず、クラウドの蒸留機能を使う選択肢もあります。ただし各社で状況が大きく異なります。

| サービス                              | 状態          | 教師→生徒の例                          |
| --------------------------------- | ----------- | -------------------------------- |
| OpenAI Model Distillation         | 新規組織は利用不可   | 大きいGPT→gpt-4.1-mini等             |
| Amazon Bedrock Model Distillation | GA（2025年5月） | Nova Premier→Nova Pro・Lite・Micro |
| Google Cloud（オープンモデル蒸留）           | 提供中         | DeepSeek R1 0528等→Qwen 3・Gemma 3 |
| Gemini Distillation Service       | 早期アクセス      | gemini-3.1-pro→gemini-2.5-flash  |

OpenAIは[2024年10月1日](https://openai.com/index/api-model-distillation/)に、Stored Completions・Evals・ファインチューニングをつないだ蒸留機能を発表しました。しかし[廃止情報ページ](https://developers.openai.com/api/docs/deprecations)によると、セルフサービスのファインチューニングは2026年5月7日から実行歴のない組織が使えなくなり、2027年1月6日には既存顧客も新規ジョブを作れなくなります。Evalsも2026年10月31日に読み取り専用、11月30日に終了予定です。これから蒸留を始める場合、OpenAIの蒸留機能は選択肢になりません。

[Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/prequisites-model-distillation.html)は、NovaとLlamaの組み合わせで蒸留ジョブを実行できます。Bedrockが教師に追加の回答を作らせた分は教師モデルのオンデマンド単価で課金され、学習料金は「学習データのトークン数×エポック数」、蒸留後のモデルは月額の保存料金がかかります。Google Cloud の[Gemini Enterprise Agent Platform（旧Vertex AI）](https://cloud.google.com/products/gemini-enterprise-agent-platform)は、オープンモデル同士の蒸留を提供し、Gemini同士の蒸留サービスは2026年5月に早期アクセスとして始まった段階です。

## ChatGPTやClaudeの出力を蒸留に使うときの規約とライセンス

「教師の出力でSFT」は手軽なぶん、教師にどのモデルを使うかで契約上の可否が分かれます。主要な規約の該当箇所は次のとおりです。

| 教師                      | 規約・ライセンスの定め                            |
| ----------------------- | -------------------------------------- |
| OpenAI（API・法人向けChatGPT） | 許容例外を除き、競合モデルの開発に出力を使わない               |
| Anthropic（Claude）       | 競合AIモデルの学習を含む競合製品の構築を禁止                |
| Google（Gemini API）      | サービスと競合するモデルの開発に使わない                   |
| Meta Llama 3.1以降        | 出力等で学習・改善したモデルを配布・提供する場合、名前の先頭に「Llama」 |
| DeepSeek-R1             | MITライセンス。他のLLMを学習させる蒸留を明示的に許可          |

出典は[OpenAI Services Agreement](https://openai.com/policies/services-agreement/)第3.3条(e)、[Anthropic Commercial Terms](https://www.anthropic.com/legal/commercial-terms)第D.4条、[Gemini API追加利用規約](https://ai.google.dev/gemini-api/terms)、[Llama 3.1ライセンス](https://raw.githubusercontent.com/meta-llama/llama-models/main/models/llama3%5F1/LICENSE)第1.b.i条です。社内用途でも一律に許可されるわけではありません。OpenAIの規約には許容例外（Permitted Exception）があり、第三者へ配布・商用提供しない分類・整理用のモデル（埋め込みや分類器）と、OpenAIのファインチューニング機能でのカスタマイズは禁止の対象外です。それ以外の生成モデルを学習させる場合は、契約の適用範囲と例外条件を確認してください。

各社はこの点を実際に取り締まっています。OpenAIは2026年2月12日付で米下院の中国特別委員会に宛てた[文書](https://cdn.openai.com/pdf/045aa967-ee96-4a09-94ee-3098ddf6db2c/OpenAI-US-House-Select-Cmte-Update-%5B021226%5D.pdf)で、DeepSeekの従業員に関連するアカウントがアクセス制限の回避手段を開発していたと報告しました。Anthropicは[2026年2月23日](https://www.anthropic.com/news/detecting-and-preventing-distillation-attacks)、DeepSeek・Moonshot・MiniMaxが約24,000の不正アカウントを使い、Claudeと1,600万回を超えるやり取りで能力を引き出そうとしたと公表しています。

業務で蒸留モデルを作るなら、教師にはライセンスが蒸留を許すオープンウェイトモデルを選び、そのライセンス文を記録に残してください。商用APIを教師にするのは、提供元が自社の蒸留機能として用意している範囲（BedrockのNovaやGoogleの蒸留サービスなど）に限るのが安全です。

## 量子化・プルーニング・ファインチューニングとの違い

### 量子化・プルーニングとの違いと併用

モデルを軽くする手法は、出来上がったモデルから情報を削るものと、小さいモデルに学び直させるものに分かれます。

| 手法     | やること            | 構造の変更  | 追加学習            |
| ------ | --------------- | ------ | --------------- |
| 量子化    | 重みのビット数を下げる     | 不可     | 不要（PTQ）〜必要（QAT） |
| プルーニング | 重要度の低い重み・層を削る   | 削る範囲のみ | 多くは再学習          |
| 知識蒸留   | 小さいモデルに教師を真似させる | 自由に設計  | 必要              |

蒸留は生徒の構造を自由に決められる代わりに、学習のコストがかかります。量子化は学習なしでもすぐ効くので、まず[量子化（モデル量子化）の仕組みとPTQ・QATの違い](/tech/details/15846/)を試し、それでも足りないときに蒸留を検討する順番が現実的です。蒸留した生徒をさらに量子化する併用もでき、LLMでは[GPTQ・AWQ・GGUFなどのLLM量子化](/tech/details/13791/)と組み合わせてローカルで動かす構成が一般的です。なお、学習中にニューロンを一時的に無効化するドロップアウトは過学習を防ぐ正則化で、推論時のモデルは小さくならない点がプルーニングとの違いです。

### ファインチューニング・LoRA・転移学習との違い

ファインチューニングは、既存のモデルを新しいタスクやデータに合わせる追加学習で、モデルの大きさは変わりません。蒸留は、教師の振る舞いを別の小さいモデルへ移すことが目的です。「教師の出力でSFT」は手段としてファインチューニングを使っていますが、目的が小型化か適応かで区別されます。追加学習全般は[ファインチューニングの仕組みとRAGとの違い](/column/details/12965/)、少ないパラメータだけを学習する手法は[LoRAのランクとalphaの決め方](/tech/details/8963/)、学習済みモデルの再利用全般は[転移学習とファインチューニング・特徴抽出の違い](/tech/details/13301/)で扱っています。

## 知識蒸留を採用すべき場面と見送る場面

採用を勧めるのは、同じ処理を大量に繰り返して推論費用が積み上がる場合、応答時間の上限が厳しい場合、スマートフォンや[ローカルLLM](/column/details/12964/)のようにメモリの上限が決まっている場合です。いずれも、対象業務を代表する入力データと、学習に使わない評価データを用意してください。必要な件数はタスクと生徒モデルの大きさで変わるため、評価データで精度を見ながら増やします。

見送るべきなのは次の場面です。

- 手本になる高精度モデルが無い、またはライセンス上その出力を学習に使えない
- 入力データが対象業務を十分に代表せず、独立した評価データで必要な精度を確認できない
- 要件が毎月変わり、そのたびに教師の回答を作り直す必要がある
- 量子化だけで目標の速度・メモリに届く

失敗しやすいのは、教師と生徒の大きさの差を広げすぎることです。生徒が小さすぎると教師の分布を表現しきれず、蒸留なしと差が出なくなります。最初は教師と同じ系列で1〜2段小さいサイズ（Qwen2.5なら1.5Bを教師に0.5Bを生徒にするなど）から始め、評価しながら小さくしていくと失敗の原因を切り分けやすくなります。小さい言語モデルの選び方は[SLM（小規模言語モデル）の仕組みとLLMとの違い](/tech/details/13392/)にまとめています。業務データでの教師・生徒モデルの設計や評価から相談したい場合は、[機械学習モデル開発の支援](/service/ai/machine-learning/)も行っています。

## よくある質問

### distillationとはどういう意味ですか？

英語の distillation は、液体を加熱して沸点の違いで成分を分ける化学の「蒸留」です。機械学習では、大きなモデルの知識から必要な部分を取り出して小さなモデルに移すことを、この比喩で knowledge distillation（知識蒸留）や model distillation と呼びます。

### AIやLLMの蒸留とは何ですか？

高性能なLLM（教師）に大量の質問へ回答させ、その回答や確率分布を使って小さなLLM（生徒）を学習させることです。DeepSeek-R1の推論能力を1.5B〜70Bのモデルへ移した例が知られています。

### 蒸留すると精度はどのくらい下がりますか？

教師と生徒の大きさの差とデータ量で決まります。DistilBERTはBERTより40%小さく60%速くなり、言語理解の性能は97%を保ちました。本記事の実測では、パラメータ約200分の1の生徒が教師の98.33%に対して97.30%でした。

### ChatGPTやClaudeの出力で自社モデルを蒸留してもよいですか？

OpenAI・Anthropic・Googleの規約は、出力を提供元と競合するモデルの開発に使うことを禁じています。OpenAIは第三者に提供しない分類用モデルなどを例外にしていますが、社内で生成モデルを作る場合は抵触の余地が残るため、蒸留を許すライセンスのオープンウェイトモデル（DeepSeek-R1など）を教師にするか、提供元の蒸留機能を使ってください。

### 自己蒸留とは何ですか？

別の教師を用意せず、同じモデルが教師を兼ねる蒸留です。深い層の出力を浅い層に真似させる方法や、前の学習段階の自分の出力を手本にする方法があり、モデルを小さくするより精度や学習の安定性を上げる目的で使われます。

## 関連記事

- [量子化（モデル量子化）とは？仕組み・PTQとQATの違いと実装判断を解説【2026年版】](/tech/details/15846/)
- [SLMとは？小規模言語モデルの仕組み・LLMとの違いと実装判断を解説](/tech/details/13392/)
- [TinySwallow-1.5Bとは？TAIDの仕組み・Ollamaでの動かし方と商用利用の条件](/tech/details/5230/)
- [ファインチューニングとは？LLMの追加学習の仕組み・RAGとの違いと使い分けを解説](/column/details/12965/)

---

出典: [知識蒸留（Model Distillation）とは？LLM蒸留のやり方とPyTorch実装・規約の注意](<https://www.issoh.co.jp/tech/details/5364/>)（株式会社一創）
