蒸留データの設計 — 教師に何を答えさせるか
蒸留で生徒の性能を決めるのは、教師の賢さより「教師に何を問うたか」です。合成データの作り方、カバレッジの設計、難問へ偏らせる理由、正しさのフィルタ、そしてDeepSeek-R1の蒸留がなぜ効いたのかを、前提知識ゼロから解説します。
DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning
一次資料 — この記事の根拠
この解説の公開 2026-08-29
DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement LearningarXiv:2501.12948論文ページ·PDFSequence-Level Knowledge DistillationarXiv:1606.07947論文ページ·PDF
The False Promise of Imitating Proprietary LLMsarXiv:2305.15717論文ページ·PDF
Self-Instruct: Aligning Language Models with Self-Generated InstructionsarXiv:2212.10560論文ページ·PDF
STaR: Bootstrapping Reasoning With ReasoningarXiv:2203.14465論文ページ·PDF
良い先生を雇っても、問題集が薄ければ伸びない
家庭教師を雇うところを想像してください。指導力の高い先生を見つけられたとします。それでも生徒の点数を最後に決めるのは、その先生に何を解かせて、その解答を生徒がどれだけ見たかです。先生が微分積分を極めていても、渡した問題集に一問も微分が載っていなければ、その知識は生徒に一切伝わりません。逆に、生徒がもう完璧に解ける計算ドリルを100枚やらせても、時間を使うだけで何も増えません。
知識蒸留(Knowledge Distillation)でも事情はまったく同じです。知識蒸留を1からで見たとおり、蒸留の中身は「教師モデルの出す確率分布に、生徒モデルの確率分布を近づける」ことでした。損失関数も温度も、そこで説明したものがそのまま使えます。ところが実際に生徒の出来を左右するのは、損失関数の細部ではなく、近づける作業をどの入力の上で行ったかのほうです。
この記事はその「入力の集合」——蒸留データ——の設計の話です。
そもそも、いま蒸留されているのは何か
古典的な蒸留では、教師のロジット(softmaxに入る前の生の出力値)をそのまま取り出して使えました。教師も生徒も自分の手元にあるからです。
ところが現代のLLM蒸留では、教師がAPI越しの巨大モデルだったり、教師と生徒で語彙(トークンの種類)が違ったりします。この場合、確率の表そのものは手に入りません。手に入るのは教師が生成したテキストだけです。
そこで主流になったのが系列レベル蒸留(Sequence-Level Knowledge Distillation)です。教師に問題を解かせ、その出力文をそのまま正解ラベルとみなして、生徒を普通の教師あり学習で訓練します。Kim と Rush が2016年に機械翻訳で示した方法で、いまのLLM蒸留はほぼこの形です。
ここで何が起きたかというと、蒸留という問題が丸ごとデータ作りの問題に変わったということです。損失関数は通常の言語モデル学習と変わりません。設計の自由度は、どんな入力を集め、教師に何回・どんな温度で答えさせ、どの答えを残すか、に移りました。この記事の残りは全部その話です。
仕組み: 生徒が縛られるのは「引いた問題の上」だけ
数式でひとこと押さえておきます。蒸留の損失は、おおまかにこう書けます。
記号の意味は順に、 が入力(プロンプト)、 が蒸留データを作るときに入力を引いてくる分布、 が教師の出す確率、 が生徒の出す確率、 が生徒のパラメータ、 が2つの確率分布のズレを測る量(KLダイバージェンス)です。
平易に言い換えると、この式は 「 が選んだ問題の上でだけ、教師と生徒の答え方のズレを小さくしなさい」 と言っています。裏を返すと、 が一度も選ばなかった入力について、この式は生徒に何も要求していません。そこで生徒が何を答えるかは、訓練の外側にある偶然の産物です。
これが蒸留データ設計の出発点です。教師の賢さは の質を決めますが、 を決めるのは私たちです。そして生徒の弱点は、ほぼ の穴の形をしています。
コメント
コメントにはログインが必要です