Network Compression — 2

knowledge distillation

fcmaple
Aug 15, 2021

先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

  1. 能不能用比較少的空間來儲存一個參數。
  2. Weight Clustering : 幫參數數值分群,接近的在同一群。接下來只拿一個數字代表那一群。這樣就可以把一個參數要存很多bit只壓縮到2 bit。
  3. 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中。

#以上參考李宏毅老師講義 自己做筆記使用

--

--

fcmaple
fcmaple

No responses yet