標籤:
本系列文章由 @yhl_leo 出品,轉載請註明出處。
文章連結: http://blog.csdn.net/yhl_leo/article/details/51736830
Noisy Activation Functions是ICML 2016年新發表的一篇關於啟用函數的論文,其中對以往的啟用函數進行了深入的分析,並提出了訓練過程中添加雜訊的新方法,效果不錯,覺得很有意義,目測會在今後的深度學習領域產生比較大的影響,因此將其原論文翻譯,並略作註解(計劃分兩篇部落格來寫,本文涵蓋從摘要到第三節的內容),希望能夠協助大家理解,如有紕漏,請指正。
Paper URL: http://arxiv.org/pdf/1603.00391v3.pdf
Abstract
神經網路中使用的常見的非線性啟用函數(Nonlinear Activation Functions,同樣也可以簡稱為 NAF),由於啟用函數本身的飽和(Saturation)現象(飽和現象,後文有講解是指訓練收斂接近目標時,導數趨向於0的現象,這對於收斂是不利的,也就是越接近目標,如果學習率固定的話,每次迭代更新的結果與前一次迭代結果的差異性就會越小),會導致訓練困難,這種情形中可能會使得一些 vanilla-SGD (只使用一階梯度)不敏感的相關性損失。論文提出注入合適的噪音,從而讓梯度更加顯著(相對於不使用雜訊的啟用函數可能會出現零梯度的情形)。引入大量雜訊會支配無雜訊梯度(意思是引入雜訊,改變了無雜訊情形下的梯度大小以及方向),使得隨機梯度下降(Stochastic Gradient Descent, SGD)演算法在收斂過程中可以進行更多的嘗試。我們通過在記過函數的不確定部分(problematic parts)添加雜訊(在後文可以看到,雜訊添加在啟用函數兩端導數為零的部分,這部分可能被稱為 problematic parts),嘗試讓最佳化過程探索退化/飽和與啟用函數良好部分(良好部分應該是與不確定部分互補的部分吧)之間的邊界。當雜訊的數量呈退火下降,會使得最佳化硬目標函數更加容易,我們建立了類比退火關係。通過實驗發現,用含雜訊變數的啟用函數替代傳統的飽和啟用函數,能夠在很多情形下協助訓練,在不同資料集和任務中,產生非常好的結果,尤其是當訓練看似非常困難的時候,例如,當需要通過課程學習(Curriculum Learning, Bengio et al., 2009)獲得好的結果時。
1.Introduction
類似 ReLU 和 Maxout (Goodfellow et al., 2013)這種分段線性啟用函數的引入,對於深度學習具有深遠的影響,並成為一種主要的催化劑使得訓練更深層的神經網路成為可能。多虧有了ReLU,我們才能第一次意識到深層純監督網路可以進行訓練(Glorot et al., 2011),而此之前的 tanh 非線性函數只能訓練淺層的網路。關於最近湧起的對於這些分段線性啟用函數的關注的似乎合理的假設認為,這是由於這些啟用函數對於使用 SGD 和 BP(Back-Propagation)最佳化更加容易(相對於使用平滑的啟用函數,例如 sigmiod 和 tanh)。最近我們可以在電腦視覺領域中看到分段線性函數的成功案例,這也使得 ReLU 成為了卷積網路中啟用層的標配。
我們提出一種新的訓練神經網路的技術,當輸入非常巨大時使用強飽和的啟用函數。做法是在啟用函數的飽和部分注入雜訊,並學習雜訊的規模。使用這種方法,我們發現使用更加廣泛的啟用函數種類來訓練神經網路是可行的。而在此之前,就已經有人提出在 ReLU 單元中添加雜訊(Bengio et al., 2013; Nair & Hinton, 2010)在前反饋網路(feed-forward networks)和玻爾茲曼機(Boltzmann machines)中,用以激勵單元進行更多的探索,簡易最佳化過程。
最近重新興起了一股對於複雜閘門(Gate)架構的關注,例如 LSTMs (Hochreiter& Schmidhuber, 1997)和 GRUs (Cho et al., 2014),同時圍繞神經的注意機制(Neural Attention Mechanisms, Desimone et al., 1995)出現了 NTM (Graves et al., 2014), Memory Networks (Weston et al., 2014),automatic image captioning (Xu et al., 2015), video caption generation(Yao et al., 2015)以及更為廣泛的應用(LeCun et al., 2015)。貫穿這些研究工作的一點就是使用軟飽和非線性函數,來類比邏輯電路中的硬決策問題,例如 sigmiod 和 softmax。儘管取得了一些成功,但是存在兩點不容忽視的問題:
- 由於非線性函數的飽和特徵,導致當穿越“閘門”時存在梯度消失問題;
- 由於非線性函數只是軟飽和的,並不能實現硬決策。
因為閘門經常在軟飽和狀態下運作(Karpathy et al., 2015; Bahdanau et al., 2014; Hermann et al., 2015),這種架構下導致閘門無法完全開啟或者關閉。我們採用一種新穎的方法來解決上述問題。我們的方法,通過使用硬飽和非線性函數來解決第二個問題,這種方法允許閘門在飽和狀態時完全開啟或者關閉。由於閘門可以完全開啟或者關閉,將不存在軟閘門架構泄露性導致的資訊損失問題(因為軟閘門的決策或者分類,都是一種近似)。
使用硬飽和非線性函數後,因為梯度在飽和狀態時,被精確設定為0而不是趨向於0,這加重了梯度流的問題。然而,通過在啟用函數中進入隨著飽和程度變化的雜訊,能夠促進隨機探索。(這兩句話,我覺得是這樣理解的,單純使用硬飽和非線性函數後,由於在飽和狀態時梯度為0,就沒辦法繼續最佳化,這樣看硬飽和非線性函數雖然具備硬決策的優勢,但是卻不利於訓練,於是為了避免在飽和狀態下無法繼續最佳化和探索,第二句指出,如果根據飽和的程度/量級,引入適當的雜訊,這樣梯度就不為0,SGD等方法仍然可以繼續探索。)
在測試時,啟用函數中的雜訊可以剔除或者使用期望值替換,而且根據實驗顯示,(我們的方法)在多種任務的決策網路中的實驗結果勝過軟飽和函數的方法,而且只要簡單直接地替換掉現有訓練代碼中非線性函數部分,就能獲得搶眼的表現。
我們提出的技術解決了最佳化困難問題,在測試時能夠針對閘門單元實現硬啟用,另外,我們提出一種應用於神經網路的類比退火方法。
Hannun et al. (2014); Le et al. (2015) 在簡單 RNNs 中使用過 ReLU 啟用函數。本文,我們成功證實了,在帶閘門架構的迴圈網路(例如, LSTM, GRU’s)中使用分段線性啟用函數是可行的。
2. Saturating Activation Functions
定義 2.1: 啟用函數(Activation Function)。啟用函數值得是一種映射關係 h : R → R, 幾乎在整個定義域內都是可微的。(R是數域中的實數集,也就是映射關係中的象與原象都是實數)
定義 2.2: 飽和(Saturation)。當啟用函數 h(x) 的導函數 h’(x) 滿足x → ∞(或者 x → ?∞)時值為0,則稱其為右(左)飽和。當啟用函數同時滿足左、右飽和時,就稱其為飽和。(用數學公式表示如下)
大多數常見的使用在迴圈網路中的啟用函數(例如 sigmoid 和 tanh )都是飽和的。並且它們都是軟飽和,也就是說,它們只能在極限狀態下達到真正的飽和狀態。
定義 2.3 :硬/軟飽和(Hard and Soft Saturation)。對於任意的x,如果存在常數c,滿足 x > c 有 h’(x) = 0和 x < c 有h’(x)=0,則稱這種啟用函數為硬啟用,而像前面所述的那些只有在極限狀態下偏導數等於0的函數,稱之為軟飽和。(為了方便理解,我在matlab中繪製出兩種函數曲線,見圖 1。)
圖 1 硬/軟飽和
我們可以通過泰勒展開(Taylor expansion)在0點附近展開,將軟飽和函數進行近似(只保留到一階導部分),從而構造成硬飽和函數。
以 sigmoid 函數和 tanh 函數為例,在0附近進行展開:
截取得到的線性近似解:
(同樣把hard-sigmoid(x)和hard-tanh(x)給繪製出來,見圖 2。)
圖 2 hard-sigmoid 和 hard-tanh
這樣構造的動機為了使靠近0時函數具有線性特性,從而在單元還未飽和時,梯度流向更加顯著,而在飽和部分能夠獲得硬決策。
hard-sigmoid 和 hard-tanh 函數能夠獲得硬決策,但代價卻是導致飽和地區的梯度為0。這會導致訓練困難,(於是提出)引入一些小但不是無窮小的變化在預啟用前能夠協助解決這個問題,與此同時卻不會影響整體的梯度。
在文檔後續部分,我們用h(x)表示一般的啟用函數,使用u(x)來表示前面所述的通過泰勒在0處展開保留到一階導數部分的線性函數。(見圖 2)hard-sigmoid函數在區間x小於等於-2和大於等於2內,處於飽和狀態,而hard-tanh在區間x小於等於-1和大於等於1內飽和。我們令xt 為函數(飽和邊界)閾值。對於兩種函數其絕對值分別是 xt=2(hard-sigmoid)和 xt=1(hard-tanh。
需要注意的是,我們指出 hard-sigmoid(x) 和 hard-tanh(x)函數都是收縮的映射(contractive mapping)。這種收縮只有在輸入值的絕對值大於閾值(前面剛提到的)時成立。這些啟用函數的一個非常重要的差異在於不動點不同(fixed point,對於不動點、吸性不動點在該篇部落格中都有講述)。hard-sigmoid(x)的不動點為x=2/3, 而 sigmoid(x) 的不動點約為0.69。對於在區間-1到1之間的任意實數,都是 hard-tanh(x) 函數的不動點,而 tanh(x) 函數的不動點只有個x=0。另外,tanh(x) 和 sigmoid(x) 函數的不定點屬於吸性不動點。這些飽和啟用函數在數學上的差異性,導致它們在 RNNs 和深層網路中表現出入較大。
在某些應用中,那些陡峭不平滑的梯度下降軌跡,獲得的參數有可能使得啟用單元趨向於0梯度的地區,而在這種情形下很有可能會難以擺脫並被困在這種0梯度地區。
當(啟用)單元飽、梯度消失時,演算法補救的方法,往往是投入更多的訓練資料和進行大量的計算去彌補。
Figure 1. 各種啟用函數的導數圖
3. Annealing with Noisy Activation Functions
給定一個雜訊啟用函數 φ(x,ξ) ,我們注入獨立同分布的(Independent Identically Distributed, IID)的雜訊ξ,來代替像前文中提到的 hard-sigmoid 和 hard-tanh 這樣的飽和非線性函數。接下來的部分,我們將會描述所提出的雜訊啟用函數,但在之前我們想先介紹一下這類雜訊啟用函數家族。
令ξ具有方差為 σ^2,,均值為0。我們想描述,當我們逐漸將雜訊退火,也就是從大量雜訊逐漸減少到不存在雜訊,會發生什麼。
而且,我們假設 φ 滿足,當雜訊的量級非常大時, φ 對 x 求導存在極限:
而在雜訊為0處對應的極限φ(x,0),就是前面提到的普通的確定性非線性啟用函數,在我們的實驗中,這種(雜訊啟用函數 φ )是分段線性而且可以通過學習得到我們想要的複雜的函數。Figure 2闡述了剛剛提到的概念,在雜訊數量趨向於無窮大時,BP演算法由於 φ 偏導數較大而獲得較大梯度,由此雜訊會淹沒訊號(就像樣本中給出的方差為無窮大時的梯度遠遠大於方差為0時(此時的輸入認為是真實訊號))。因此,SGD就帶著模型待求解參數隨著雜訊到處探索,而且由於梯度是無窮大,也就無法得知所謂的趨勢方向。
Figure 2. 一種1-維,非凸的目標函數,使用簡單的梯度下降方法效果不佳。當雜訊數量較大時,SGD演算法能夠通過大量探索,避免鞍點以及局部最小極值點。當雜訊數量退火到趨近於0時,SGD演算法能夠最終收斂到一個局部極值點x*。
退火過程與信噪比(Signal to Noise Ratio, SNR)是相關的,此處信噪比可以定義為訊號和雜訊方差之比:
如果 SNR 趨向於0,模型就會隨機探索(沒有所謂的梯度下降趨勢)。隨著退火過程,SNR 將會逐漸增大(雜訊方差減少),而當雜訊方差收斂到0時,訓練探索中唯一雜訊來源就是Monte Carlo估算的隨機梯度。
以往的研究中恰好有一些方法,例如 simulated annealing( Kirkpatrick et al., 1983)和 continuation methods(Allgower & Georg, 1980),在上文提到的最佳化那種非凸包的目標時,對我們都非常有協助。雖然充斥著大量雜訊,讓 SGD 自由地探索更多參數空間。隨著雜訊減少,往往趨向於停留在訊號強度足夠被 SGD 感受到的地區:給定有限的 SGD 迭代步驟,雜訊非均勻分布而且其方差佔主導地位的區間。這時 SGD 會花費更多時間在全域較優的參數空間內。當雜訊接近於0時,就相當於我們在微調(fine-tuning)我們的解決方案和收斂到損失最小的無雜訊目標函數。
後面章節,待續~~~
《Noisy Activation Function》雜訊啟用函數(一)