# 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 長得很像

* 新的集成模型就是去學 ensemble model 跑出來的 output,所以只要一個 model 就可以達到 ensemble 的效果~

### 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 學沒兩樣)


* 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>

:::info
:exclamation: Note
1. 大模型的 T 與小模型的 T 參數設定相同
2. hard target 的權重小一點效果比較好!
:::
### 實驗

* 這是 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 的資料分布資訊

* 使用 3% training data,出現overfitting
* 使用 3% training data 搭配 soft target的 Test accuracy已逼近baseline 100% training data accuracy