Learning both Weights and Connections for Efficient Neural Network -- 論文筆記 阿新 • • 發佈:2019-02-14 這是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。