JA EN
体系蒸留と圧縮
·★ 会員·論文·12分で読めます

蒸留レシピ図鑑 — logit・feature・attention・self をどう使い分けるか

蒸留のレシピは「教師のどこを学生に合わせるか」で決まります。出力(logit)・中間層(FitNet)・注意行列・自己蒸留の4種を、1枚の表と4本の式で並べ、教師がAPI越しなのか同族アーキなのかといった条件から選び方を決める地図にします。

対象textタスクtraining

Distilling the Knowledge in a Neural Network


「真似る」場所は、出口だけではない

料理の師匠から学ぶとき、真似る対象はいくつもあります。完成した皿の味だけを真似ることもできるし、下ごしらえで野菜がどう切られているかを真似ることもできる。師匠が鍋のどこを見ているか、その視線ごと真似る道もある。あるいは昨日の自分の出来映えを今日の手本にする、という独学の道もあります。

知識蒸留のレシピの違いは、突き詰めるとこれだけです。教師モデルのどこを学生モデルに合わせるか。合わせる場所が変われば、教師に要求する情報も、損失関数の形も、うまくいく条件も変わります。

蒸留の土台 — なぜ正解ラベルより教師の出力のほうが情報量が多いのか — は知識蒸留を1からで扱いました。この記事はその次の地図、「で、実際どれを使うのか」です。

4つのレシピを1枚の表で

レシピ 合わせるもの 教師に要求すること 効きやすい場面 主な落とし穴
出力蒸留(logit / response) 最終層の確率分布 出力の分布だけ(中身は不要) 教師がAPI越し、構造が全く違う 出口の情報しか流れず、深い学生に情報が足りない
中間層蒸留(feature / FitNet) 隠れ層の特徴ベクトル 中間活性の取り出し 学生が細く深い、教師と同族 次元とスケールの不一致、層の対応づけが恣意的
注意蒸留(attention) 注意行列・注意由来のマップ 各層の注意重み Transformer同士、事前学習段階での圧縮 ヘッド数・系列長・マスク位置の食い違い
自己蒸留(self) 自分(の過去/深い層)の出力 教師モデルが存在しない 教師を用意できない、正則化が欲しい 誤りを自分で強化する、伸びが小さい

この表の各行を、式・体感・コードの順に開いていきます。

レシピ1: 出力蒸留 — いちばん少ない材料で作れる

もっとも古典的で、いまも主力なのが出力蒸留です。教師と学生の最終出力の確率分布を近づけるだけで、教師の内部には一切触れません。

L=(1α)CE(y,pS)+αT2KL ⁣(pT(T)pS(T))\mathcal{L} = (1-\alpha)\,\mathrm{CE}(y, p_S) + \alpha T^2 \cdot \mathrm{KL}\!\left(p_T^{(T)} \,\|\, p_S^{(T)}\right)
(1)

言い換えると「正解ラベルに合わせる分と、温度を上げてぼかした教師の分布に合わせる分を、α\alpha の割合で混ぜる」だけです。yy は正解ラベル、CE\mathrm{CE} は交差エントロピー、pSp_S は学生の確率、pT(T)p_T^{(T)}pS(T)p_S^{(T)} は温度 TT でならした教師・学生の分布、KL\mathrm{KL} は2つの分布のズレを測る量(KL情報量を1から)です。

温度 TT は softmax に入る値を TT で割る操作で、TT を上げるほど分布は平らになります。平らになると「1位ではないが2位の候補」の情報が浮かび上がり、そこに教師の知識が宿っている、というのが蒸留の出発点でした。式(1)の頭に付いている T2T^2 は補正項です。温度で割った分だけ勾配が 1/T21/T^2 に縮むので、掛け戻さないと温度を変えるたびに実効的な学習率が変わってしまうのです。

FIG 1温度スライダーを上げると、1位に集中していた棒が平らになり、2位・3位の候補が見えてくる。教師が渡している「ソフトな知識」はこの部分にある

このレシピの強みは要求の少なさです。教師の重みが手に入らなくても、構造がまったく違っていても、語彙さえ共有していれば実行できます。だから「まずこれを試す」が既定の順序になります。

弱みは強みと対称で、出口の1点からしか情報が流れないこと。学生が深いと下のほうの層まで信号が届きにくく、教師が持っている「途中でどんな特徴に分解しているか」は、確率分布に潰れてしまってからでは復元できません。ここから先の3つのレシピは、いずれもこの一点への対処だと思って読めます。

レシピ2: 中間層蒸留 — 途中の下ごしらえを合わせる

出口だけでは足りないなら、途中も合わせよう、というのがFitNetの発想です。教師のある層の出力(hint)と、学生のある層の出力(guided layer)を直接近づけます。

Lhint=r(hS(j))hT(i)22\mathcal{L}_{\text{hint}} = \left\| r\big(h_S^{(j)}\big) - h_T^{(i)} \right\|_2^2
(2)

この式が言っているのは要するに、比べる場所を出口から途中へ移した、というだけのことです。教師と学生の棚を1段ずつ選び、そこに載っているものがどれだけ違うかを罰する。出口の確率分布ではなく、答えを作る途中の中間生成物どうしを突き合わせています。

「学生の第 層の特徴ベクトル を、変換器 で形を合わせてから、教師の第 層の特徴 との差の2乗を取る」という意味です。 は要素ごとの差を2乗して足した平方距離です。

この先にあるもの

§

ここから先は会員限定です

解説記事371本・教科書26章・学生モード48単元・論文精読6本が、月額¥490ですべて読み放題になります。新しい解説は毎日3本ずつ増えます。いつでも解約でき、解約後も期間の終わりまで読めます。

会員の方はログインすると続きが表示されます

参考文献

  1. Distilling the Knowledge in a Neural Network. arXiv:1503.02531論文ページ·PDF
  2. FitNets: Hints for Thin Deep Nets. arXiv:1412.6550論文ページ·PDF
  3. Paying More Attention to Attention: Improving the Performance of Convolutional Neural Networks via Attention Transfer. arXiv:1612.03928論文ページ·PDF
  4. TinyBERT: Distilling BERT for Natural Language Understanding. arXiv:1909.10351論文ページ·PDF
  5. MiniLM: Deep Self-Attention Distillation for Task-Agnostic Compression of Pre-Trained Transformers. arXiv:2002.10957論文ページ·PDF
  6. Born-Again Neural Networks. arXiv:1805.04770論文ページ·PDF
  7. Be Your Own Teacher: Improve the Performance of Convolutional Neural Networks via Self Distillation. arXiv:1905.08094論文ページ·PDF

本記事は上記論文の本文にもとづいて執筆しています。数値・主張は原典を優先してください。

コメント

コメントにはログインが必要です