《Learning both Weights and Connections for Efficient Neural Networks》論文筆記
1. 論文思想
深度神經網路在計算與儲存上都是密集的,這就妨礙了其在嵌入式裝置上的運用。為了解決該問題,便需要對模型進行剪枝。在本文中按照網路量級的排序,使得通過只學習重要的網路連線在不影響精度的情況下減少儲存與計算量。論文中的方法分為三步:首先,使用常規方法訓練模型;使用剪枝策略進行模型修剪;在修剪模型的基礎上進行finetune。經過試驗證明改文章提出的方法使得AlexNet的大小減小了9倍,引數量從61百萬降到了6.7百萬,同時不會帶來精度上的損失。
大型的網路會帶來更多電能的損失,關係如下圖
在本文中該文章中使用如下圖中左邊的三步操作進行模型剪枝,最後得到的結果如下圖右圖所示
在之前的GoogleNet中後面的使用Average Pooling替換全連線層,從而使得網路的引數量下降。剪枝在之前被用作是模型複雜度降低與防止網路過擬合。
2. 學習除權重之外的聯絡
2.1 正則化
正則化對剪枝與重新練具有重要的影響。L1正則化會使得權重趨近於零,這個在重新訓練之前與剪枝之後會獲得較好的精度。然而,剩下的連線沒有L2正則化那麼好,導致再訓練後準確率下降。總的來說,L2正則化回來帶更好的剪枝結果。
2.2 Dropout
Dropout被用來防止網路過擬合,但是隨著剪枝的進行網路變得稀疏,使用原有的drop_rate便變得不合適。由於Dropout是隨機使得一部分神經元失活,而pruning是永久刪除連結。因而,drop_rate需要根據根據剪枝之後網路的情況進行改變。
剪枝之前的網路連結為
其中, 是層神經元的個數,對應的drop_rate變化應該遵循如下規則
2.3 區域性剪枝與引數協同適應
論文中指出模型的retrain是在剪枝之後的模型上做的,其實叫finetune,也就是保留剪枝之前的網路中的部分引數,並在此基礎上繼續進行訓練。
但是隨著網路的加深,網路中會存在梯度消失的問題,論文中指出,在retrain的時候固定前面卷積層的引數,只是訓練全連線層的引數。
2.4 迭代剪枝
使用訓練的模型進行剪枝,在進行retrain,之後又回到pruning,這稱之為一次迭代。整個剪枝是迭代進行的,需要通過幾次迭代才能達到最小的網路結構。
3. 結果