標準RNN的推導

1.RNN前向計算:對於如下結構,x是輸入,s爲隱層,o爲輸出,U,W,V爲不同層的權值,同一類型的權連接權值相同

則ot可表示爲

其中,g,f爲輸出層,隱層的激活函數,f一般選擇tanh函數,若RNN用於分類的話,g選擇softmax函數

2.RNN反向傳播:BPTT算法,本質還是BP算法,因爲RNN處理序列數據,所以在原有基礎上增加了序列維度反向傳播。BPTT的中心思想與BP算法相同,沿着需要優化的參數的負梯度方向不斷尋找更優的點直至收斂。其中RNN損失爲各個時間點的損失之和,故各個梯度的變化爲各個時間點梯度變化之和

 

 

從上圖可以看出,反向傳播每計算一個隱層,都會與一個激活函數的導數相乘,而激活函數的累乘會導致梯度消失或梯度爆炸的現象發生

3.常用的幾個激活函數

(1)sigmoid函數

從圖中可以看出,函數的導數取值範圍爲(0,0.025],反向傳播時每多一個一層,梯度變化都會至少縮小四倍,傳到神經網絡前部很容易造成梯度消失。同時,sigmoid函數的輸出不是中心對稱,均大於0,稱爲偏移現象,這就導致後一層的神經元 將上一層輸出的非0均值的信號也學習到作爲此層的輸入,易學習到噪聲。

(2)tanh函數

從圖中可以看出,tanh函數的輸出關於零點中心對稱,網絡收斂性更好,同時,tanh函數的導數範圍爲(0,1],反向傳播每經過一層,梯度變化較sigmoid函數慢,也就是梯度消失的速度更慢

(3)Relu函數

relu函數的導數左側爲0,右側爲1,在一定程度上避免了梯度消失的問題,但是與激活函數相乘的另一個因子在反向傳播中呈現增長的趨勢,則恆爲1的導數容易引起梯度爆炸,而恆爲0的導數有可能把神經元學死,設置合適的步長可有效避免這個問題的發生

解決梯度消失或梯度爆炸的方法主要有:

1. 選擇更適合的激活函數

2.改變傳播結構

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章