本文作者為:Xavier Glorot與Yoshua Bengio。
本文干了點什么呢? 第一步:探索了不同的激活函數對網絡的影響(包括:sigmoid函數,雙曲正切函數和softsign y = x/(1+|x|) 函數)。
文中通過不斷的實驗:1,來monitor網絡中隱藏單元的激活值來觀察它的飽和性;2. 梯度。 並且evaluate 所選擇的激活函數與初始化方法(預訓練被看作一種特殊的初始化方法)。
實驗數據的選擇:
無窮多的訓練集:ShapeSet-3*2: 它這個數據3集上進行在線學習,它的數據的大小是無窮多的,因為為不斷地隨機生成。在線學習(或不斷學習)具有優點的:它可以把我們的任務focus在最優化問題上而不是小樣本中回歸問題,明白吧,應該。 還應該指出:當面對很大很大的訓練集時,從非監督學習預訓練中來進行初始化網絡仍然使網絡的性能有巨大的提升,意思就是當面對在的訓練集時,非監督學習預訓練的作用依然沒有消失。
這是一個人工生成的數據集:每一個樣本中包括2個形狀(從三角形,長方形與橢圓形中選擇),並且它們的大小、角度等參數都是任意的,唯一的限制為一方不能覆蓋另一方50%即可。 所以最終會有9種結果。這個任務是相當難的:第一,我們的分類結果要對樣本對象的角度、大小、平移等具有不變性;第二:同時需要學習專門變量的參數來識別三角目標對樣本進行預測。
有限多的訓練集: MNIST digits ,10個數字的識別,50000個用於訓練,10000用於 validation,10000個用於測試。
CIFAR-10 :10種物品的識別,40000個用於訓練,10000用於 validation,10000個用於測試。
Small-ImageNet:10個物品的識別,90000個用於訓練,10000用於 validation,10000個用於測試。
實驗的設置:
實驗設置基本沒有什么技巧,因為也還是文章的目的所在。
網絡的隱含層選擇1-5層,每一層的網絡的神經單元數為1000個,輸出層為一個softmax logistic regression。 代價函數為:negtive log-likelihood,即:-log P(y|x).
網絡的優化方法為:梯度的反向傳播算法, mini-batches的大小為10。權值更新過程中的學習率基於驗證集誤差來確定。
在隱含層選用分別試驗三種不同的激活函數:sigmoid函數, 雙曲正切函數, softsign函數,后面兩個函數的是相似的,唯一的區別在於:雙曲正切函數以指數型接近漸近線(速度快),softsign函數以二次型接近它的漸近線。
網絡權值的確定為下面區間上的均勻分布,其中 n 為:前一層的單元數。
不同的激活函數對網絡的影響:
在選擇激活函數時,我們總要去避免兩點:第一點,避免激活函數的過飽和(因為這樣的話,梯度就不會很好地在網絡中傳播),第二點,過度線性化(由於激活函數沒有了非線性,那么,它學習到的東西會變少,非線性才可以擬合更多)。
sigmoid激活函數:
對於sigmoid激活函數問題,LeCun(1998b)已經研究過了,它會降低學習速率的(由於它的mean不是0)。文章中,這里選擇sigmoid激活函數的目的是來通過觀察它的激活值來反應的它的飽和程度。下圖為實驗的結果:
先說一句,上面的網絡為4層的隱含層,我們通過上面的圖可以看出:第一層至第三層的隱含層的輸出的mean基本為0.5左右,對於sigmoid函數來說,在0.5附近的話,它不是飽和區的,是線性區的, 而第四層呢?它的輸出的平均值隨着迭代迅速下降至0左右,進入了飽和區了。然后,到后面的話,隨着迭代不斷進行,又稍微慢慢的有跳出飽和區的傾向。
文中解釋的原因為:由於權值一開始是隨機初始化的,所以呢,前面幾層的輸出對於最后輸出的各類的預測是基本沒有作用的,或者說直到第三層為止,前幾層的輸出都是隨機的,而第四層的輸出加權后的值直接影響到的最后的代價函數的,因為它后面接的是softmax的輸出層的,即,第四層的 b+Wh 值關系到輸出層的預測。而 h 為第四層的輸出。 為了在一開始讓 h 的值不至於影響到 b+Wh 值,網絡自己就在代價函數的作用下學習了,學習的結果就是:h的結果驅於0了,偏置b 學習迅速,支撐起了整個預測結果。(我這里有一個疑問:為什么不是讓w學習得到的值為0呢?如果第四層的包含層的輸出為0了,是由於第三層與第四層相連的權值導致的,對吧,權值的變化是學習得到的,第四層與輸出層的權值什么時候都可以學習到的,因為它們不經過激活函數的,為什么不直接把這個權值w變為0呢,為什么要去學習前一層的權值?我覺得在必要去跟綜可能權值的變化看看分析的過程是否正確呢?總之吧,這個權值的學習是很隨機的的應該,或者說很難去預測的)。在這里說明一下:對於第四層的激活值迅速變為0,會使得sigmoid的激活函數進入飽和區的,對於雙曲正切與softsign激活函數來說則不會進入飽和區的,對吧)。
雙曲正切激活函數與softsign激活函數:
實驗觀察到的結果為:
我們會發現,從第一層開始至第五層,逐漸每層慢慢進行飽和區了。對於這個現象,文中也沒有給出合理的推測。
再看看雙曲正切激活函數與softsign激活函數的 區別吧,下面的的圖為訓練完成以后的結果激活值的分布圖:
從上圖看,softsign激活函數的結果會更好一些,因為吧,一二三四層的激活值的分布基本在0.4-0.8之間,沒有過飽和,同樣也沒有過線性(在0.5處會線性的);而雙曲正切激活函數的話,對於第一至四層的話,很多值分布在-1或1附近,這肯定是飽和狀態了吧。
網絡的梯度與在網絡中的傳播
不同代價函數的影響:在1986年 Rumelhart 已經發現:logistic function 或者叫 conditional log-likelihood function: -log P(y|x) 的效果比 quadratic cost function的效果好很多的,原因在於 quadratic cost function在訓練過程中會出現更多的 plateaus。文章給出了一個兩個參數下的圖:
初始化的梯度分析:
文中基於Bradley(2009)的理論分析 the variance of the back-propagated gradients,並提出一種新的權值初始化的方法。
分析的前提:1. 網絡在初始化處於線性條件下,即激活活函數的導數為1;2. 初始化的權值的mean 為0,且獨立同分布的;3, 輸入特征 x 的 variance是相同的。經過一系列推導,得到了下面這樣的結果:(文中的推導過程我也推了一遍,有的地方與文中有所不同,不過大致是相同的,並且不影響結果)
第一:
第二:公式5有用哦:
第三:公式6有用;
推出這玩意來了以后呢, 下面是關鍵:
1.前向傳播:用文中的話說:From a forward-propagation point of view, to keep information flowing we would like that:
就是說,為了在前向傳播過程中,可以讓信息向前傳播,做法就是讓:激活單元的輸出值的方差持不變。為什么要這樣呢??有點小不理解。。
2. 反向傳播:在反向傳播過程中,也是為了讓梯度可以反向傳播,讓:對激活單元輸入值的梯度 保持不變,即:
最后得到的結論就是:
上面兩個式子折衷一下,為:
所以呢,權值初始化時,服從這樣的分布:
這個方法就叫做: normalized initialization.
在訓練過程中,梯度問題:
這時,我們就不能單純地用梯度的 variance 去分析了,因為已經不滿足我們的假設條件了啊。
文章后面的一大堆基本沒有什么重點的東西了吧,我覺得。寫幾個覺得有必要的總結吧:
1. softsign激活函數與雙曲正切函數相比,效果還 很不錯的,
2. normalized initialization 的方法很不錯。
3. 在訓練過程中,monitor 激活值與梯度的在不同層之間的變化是很好的分析工具。