最近在調網絡結構的參數,其實就是漫無目的的亂改。但是運氣不佳,沒有得到自己想要的准確率。於是,硬着頭皮,去了解一下別人選擇參數的一些依據。正如這篇論文的標題: Delving Deep into Rectifiers,或許只有這樣才能對選擇參數的原則有一個基本認識吧!
Background
給定一個很深的網絡結構,我們有以下三個個問題需要解決:網絡能訓練、網絡性能好、網絡訓練速度較快。
Main Points
網絡結構越深(性能應該越好),越難訓練。本文從non-linear unit(Relu,提出了增強版PRelu)、卷積核參數初始化着手解決上述問題。
1) PRelu

如上圖所示,作者將原始的Relu進行了簡單擴展便得到了PRelu,其中的參數a是可以學習的(初始化時a=0.25)。前向傳播、后向傳播都很簡單,這一改變引入的計算量也基本可以忽略。也許我們會不服氣,不就是簡單修改了一下Relu嗎?我也可以對這個函數修改一通,然后發篇質量很高的paper的。說實話,我們是可以亂修改一通的,但是我們必須得給出理論分析(如果我們對問題沒有一個深刻的認識,這一點是很難做到的哦!哈哈)。這篇paper的理論分析思路很值得我們借鑒“從簡單例子出發,通過近似、假設得出結論”,然后用所得結論指導我們的實驗。
在論文中,作者指出“We investigate how PReLU may affect training via computing the Fisher Information Matrix (FIM). If the off-diagonal blocks of FIM are closer to zero, SGD which is a first-order solver becomes closer to natural gradient descent which is second-order and converges faster”,下面作者通過一個兩層的MLP證明了PRelu能夠使得對角線外的FIM元素更接近於0,從而比Relu收斂的速度更快。實驗也證實了這一點。此外,這一改變又提升了一點網絡的性能。
2)Initialization of Filter Weights for Rectifiers
在論文中作者提到,“Rectifier networks are easier to train compared with traditional sigmoid-like activation networks. But a bad initialization can still hamper the learning of a highly non-linear system”。那么我們能不能提供一個初始化參數的原則,從而避免bad initialization呢?能,論文中給出了答案。
作者遵循的原則很簡單“A proper initialization method should avoid reducing or magnifying the magnitudes of input signals exponentially”,在實際操作的時候就是使得每一層的輸出具有一致的方差,並據此得出了兩個選擇初始化參數的約束條件。其本質就是確定一個合適的權值初始化方差(均值為0,bias為0是假設,在應用時我們應該保證假設條件的成立!)
有了一個較好的權值初始化策略之后,我們就可以端到端的形式訓練很深的網絡了。可惜的是,更深的網絡並沒有帶來更好的性能,這是后話了!
3)網絡結構及其初始化
這篇論文對於網絡結構及其初始化方式寫的還是很清楚的,如學習率是“stepwise”的(初始為0.01,然后分別為0.001、0.0001)、weight decay、dropout ration、momentum、全連接層初始化方式等。數據增強方式、測試方式都很清楚。強烈建議大家讀一讀這篇paper。
Summary
1)兩個很簡單的改進在Imagenet上取得那么好的效果,的確有點令我吃驚。
2)作者的兩個改進都有理論分析、實驗驗證,分析的過程清晰易懂,得出的結論具有很強的指導意義。這或許就是科研的魅力吧!
3)潛下心來,好好琢磨琢磨!哈哈
4)如果我們可以對權值進行這樣的約束,那么我們是不是可以對數據也進行同樣的約束呢?(Batch Normalization是不是完成這樣的功能的呢?)
