為了要讓 network model 可以儲存在空間有限的裝置中(例如行動裝置或穿戴式設備)這些裝置空間可能不夠放太深的網路,或是運算效能不夠快,無法即時運算,我們需要把NN縮小

以下列舉幾個可以讓network變小的方式:

Network Pruning

把一個大的network的一些w或neuron剪掉,讓他變得比較小

因為我們通常相信今天train 出來的NN是 over-parameterized (裡面有很多參數是沒有用的)

所以可以從network 中移除掉一些從來沒用過的參數

  1. 首先要有一個大的network
  2. 評估出每一個weight/neuron的重要程度(有很多方法可以衡量,以下是其中一個例子)
  3. 移除不重要的weight/neuron,這裡performance通常會下降
  4. 用新的network再拿回去fine-tune一下,update幾次參數,把損傷修補回來
  5. 繼續移除不重要的 weight/neuron,因為一次移除太多,可能會無法recover,所以一次只移除一點

Why Network Pruning?

既然我們要比較小的network,為什麼不一開始就train比較小的network就好?

因為小的network比較難train。只要network夠大,卡在 local minima 或settle point的問題會比較小

所以train一個大network再把它縮小是一個好的做法