Network Compression — 2
先train 一個大的network 叫做Teacher Network
再根據大的Network去製造 Student Network
Student network是根據teacher network來學習而不是直接從大的network修剪而來。
學生不是看正確答案來學習,而是把老師的輸出當作正確答案,也就是那個分布。
為何不直接train小的network,要先讓大的先學,再讓小的跟大的學。
原因跟network pruning一樣。
因為告訴student network要輸出1太難了,因為1很像7也很像9,所以他直接去跟老師學,老師學到1是0.7 7是0.2就夠了,那麼學生也學到就可以,這樣小的network可以學得比直接train 數字還要好。
teacher network可以是多個network的ensemble,
ensemble:訓練多個模型,輸出的結果就是多個模型投票的結果就結束了,或是把多個模型的輸出平均起來的結果當作是最終答案
knowledge distillation tip
更改softmax的函式,可以避免掉某些資料太過於集中,導致student network不好學習。
Parameter Quantization
- 能不能用比較少的空間來儲存一個參數。
- Weight Clustering : 幫參數數值分群,接近的在同一群。接下來只拿一個數字代表那一群。這樣就可以把一個參數要存很多bit只壓縮到2 bit。
- Huffman encoding: 常出現的東西用較少bits來儲存,不常出現的東西用較多bits來儲存,這樣平均起來需要儲存的bits就變少了。
最終的結果是可以只拿1個bit來儲存參數,可以說network裡面的weight 只有1 , -1兩種選擇
Architecture Design
利用Network架構的設計來達到減少參數量的效果。
方法: Depthwise Separable Convolution
step 1: depthwise Convolution :
有幾個channel 就有幾個filter,每一個filter 只管一個channel
每一個filter只負責一個channel
做完會發現每一層channel之間不會有互動。
因此有了下一個step 2.Pointwise Convolution
現在有一樣有一堆filter,這些filter的kernel 大小 = 1x1
這些1x1的filter就是在考慮channel跟channel之間的關聯性。
參數量減少的情況如下圖:
上圖是原本的CNN操作,我們發現需要有18個參數經過filter之後才可以得到feature map的一個值,
下面是經過Depthwise Separable Convolution,由18 input變成2 input在最後得到一個feature map的值。
Dynamic computation
希望network可以自由調整它所需要的運算量。
因為有時候同樣模型會要應用在不同的裝置上,每個裝置所擁有的資源不一樣。
有一個方向是,讓network可以自由調整network深度
現在我們在每一層layer之間再額外多一層layer,那個extra layer是用在預測現在所輸出的vector所產生的結果。
也可以自由決定network的寬度,是在同一個network中。
#以上參考李宏毅老師講義 自己做筆記使用