# Week 30: Knowledge Distillation ###### tags: `技術研討` [paper] [Distilling the Knowledge in a Neural Network](https://arxiv.org/pdf/1503.02531.pdf) [李鴻毅老師講解] [Yotube連結](https://www.youtube.com/watch?v=mzZzn8fBvEs&t=23s) ## Knowledge Distillation 介紹 2015 年 Paper,作者為人稱「神經網路之父」、「深度學習鼻祖」的 <font color=#F6D55C>**Geoffrey Hinton**</font> ### Abstract 主要有兩點的貢獻: * 提出==知識蒸餾 (Knowledge Distillation) 的方法==,從大模型學習到的知識中,<font color=#20639B>學習其中的 knowledge 有用訊息來訓練小模型</font>,在成效差不多的情况下進行模型壓縮 * 過去為了有效提升模型準確率,常會使用集成模型 (Ensembles of Models) 的方法,透過知識蒸餾的方法即可==蒸餾出各個 ensemble 的知識到一個模型當中==,因此只要一個 model 也可以達到 ensembles 的效果 ### 1. Introduction :pushpin: 論文背景 > 過去為了有效提升 model 的準確率,常常會採用 ensemble 的方法集成模型,而 Knowledge Distillation 的概念就是<font color=#ED553B>將一個ensemble 中的知識資訊壓縮到一個小模型中</font>,讓最終的模型更易於部署,減少運算量 > 過去的模型都再想辦法最大化目標的 log probability,但<font color=#ED553B>相對的同時也會讓其他非正確目標也有機率值存在</font>,即便這些機率值很小 > <font color=#20639B>這些非正確答案的相對機率,其實也提供了不少的資訊</font> :pushpin: 看圖說故事 * 小的模型不是去學圖片,而是==學大模型產生的 Output!!== * 目標:小模型 output 的 distribution 可以越接近大模型的 distribution 越好~~ * 作者相信<font color=#20639B>大模型 (teacher model) 提供比 label data 更有用的資料</font>,如果是直接學 label data 只會告訴你這張圖是 1,但跟老師學的話還會順便跟你說 1 跟 7 & 9 長得很像 ![](https://i.imgur.com/djdT1Nz.png =480x320) * 新的集成模型就是去學 ensemble model 跑出來的 output,所以只要一個 model 就可以達到 ensemble 的效果~ ![](https://i.imgur.com/AM32cwz.png =480x300) ### 2. Distillation #### 修改 Softmax 公式 左邊公式是傳統的 Softmax,右邊是這次提出來的修改概念 (<font color=#ED553B>原本的公式多除參數 T (Temperature)</font>) * softmax的exponential是為了強化 Y 之間的差距,讓結果趨近於1和0 * 為了平滑這個差距,多除上Temperature,希望能得到每個target之間的關係,例如:1跟7很像,跟8完全不像,所以不希望得到的結果只有1跟0 * 假設T=1(就是原softmax),最後 target Y 長得就是 [1, 0, 0],那這樣就沒有學到其他東西了 (直接跟 label data 學沒兩樣) ![](https://i.imgur.com/3oWLZrj.png =480x240) ![](https://i.imgur.com/fvaQhS5.jpg) * x軸: logits y軸: prob,4張圖的T分別為 1, 5, 10, 20 * 當T越高,可以蒸餾出 ==非正確label== 帶出來的訊息,供student model學習,因此可以看到logits跟prob的關係越來越平滑 #### 蠻清楚的流程圖 * 當==未知資料集的 label 時== (拿別人的 pre-trained model),直接使用大模型的 soft target 來訓練小模型。訓練的損失函式是 cross-entropy * 若是==已知資料集的 label 時==,可以將 soft target 和小模型預測值的 cross-entropy 與 hard target 和小模型預測值的 cross-entropy 進行<font color=#20639B>加權求合 (𝛌)</font> ![](https://i.imgur.com/aZmfS5I.png) :::info :exclamation: Note 1. 大模型的 T 與小模型的 T 參數設定相同 2. hard target 的權重小一點效果比較好! ::: ### 實驗 ![](https://i.imgur.com/ZXs9jkX.png) * 這是 MNIST 資料及上的實驗 * Distilled model (Hard + Soft target) 加上**Temperature = 20**,Test errors逼近於Teacher model的成效! * 如果把 hidden units 調降成 300,高於 8 的 Temperature 也可以有還不錯的效果;如果再降成 30 個 hidden unit,介於 2.5~4 的 Temperature 效果會比這個範圍以上或以下的溫度效果好很多。(由此實驗得知,越大的 student 模型可以使用越高的溫度,因為對於雜訊的) * 作者有做一個實驗,就是在做知識蒸餾的時候,dataset 完全沒有提供 3 這個數字,但是在 test set 中有 1010 個 3,student 模型居然只預測錯其中的 133 張圖,表示模型真的是在學 teacher general 的資料分布資訊 ![](https://i.imgur.com/7rDNeBJ.jpg) * 使用 3% training data,出現overfitting * 使用 3% training data 搭配 soft target的 Test accuracy已逼近baseline 100% training data accuracy