1. 程式人生 > >Learning both Weights and Connections for Efficient Neural Network -- 論文筆記

Learning both Weights and Connections for Efficient Neural Network -- 論文筆記

這是2015年斯坦福和英偉達的一篇論文。

1.簡介:

通過修剪訓練後網路中的不重要連線(connections),來減少網路所需要的引數,減少記憶體和cpu的消耗,使網路更加適應在移動裝置上執行。

2.idea思想:

1)首先訓練整個網路,判斷哪些是重要連線。

2)修剪不重要的連線。

3)重新訓練修剪後的網路,微調保留下來的引數。

3.達到的效果:

1)在ImageNet上,減少了AlexNet 9倍的引數,從61 million的引數減少到6.1 million的引數;VGG網路則更是減少了16倍,並且修剪後的網路的accuracy沒有下降。

2)可以防止過擬合

4.其它相關的工作:

1)用8位int型的activation代替16位float。

2)Network in Network和GoogleNet模型中使用了global average pooling代替FC層來減少引數,但在使用ImageNet的引數時,需要另外增加一個線性層。

3)dropout和本文的方法不同,dropout主要用來防止過擬合,並且是在訓練過程中就產生0連線,而本文的方法則是在網路訓練完之後對網路進行修剪,產生0連線。

4)HashNet這個本人沒有看過,論文裡作者猜想HashNet和pruning結合可能效果更好。

5.具體流程:

首先訓練整個網路,目的是找出哪些是重要的連線;接著設定一個threshold,pruning掉low-weight的連線,將密集的網路變成稀疏的網路;最後則是對餘下來的params進行微調,如果不微調,那麼對網路的效能會有很大的影響。如圖:

這裡寫圖片描述

而使用本文的方法需要很大的技巧性:

1)Regularization:需要選擇合適的regularization。L1正規化會將更多的params轉換成接近0,這在進行pruning之後,reTrain之前有很好的accuracy;L2正規化在pruning和reTrain之後會降低accuracy。

2)Dropout and capacity control:dropout被當做“soft dropout”,而本文的方法則被當做“hard dropout”;這是因為dropout中被drop的在新的訓練批時,可以被重新訓練;而本文的則是直接去掉連線connections。而在使用本文方法的時候,dropout的ratio也分pruning之前和pruning不一樣,具體如圖所示:

這裡寫圖片描述

3)Local Pruning and Parameter Co-adaptation:在reTrain的過程中,重新訓練pruning後儲存下來的weights比訓練再次初始化的weights更好。其次,為了克服vanish gradient problem的問題,作者只訓練pruning後shallow layer儲存下來的params。

4)Iterative Pruning:其實就是重複的pruning,反覆的找出不重要的連線然後pruning。

5)Pruning Neurons:一些0輸入或者0輸出的 neurons也能被pruned。