循環神經網絡(二)-極其詳細的推導BPTT

首先明確一下,本文須要對RNN有必定的瞭解,並且本文只針對標準的網絡結構,旨在完全搞清楚反向傳播和BPTT。網絡

 

反向傳播形象描述架構

什麼是反向傳播?傳播的是什麼?傳播的是偏差,根據偏差進行調整。函數

舉個例子:你去買蘋果,你說,老闆,來20塊錢蘋果(目標,真實值),老闆開始往袋子裏裝蘋果,感受差很少了(預測),放稱上一稱,還差點(偏差),又裝了一個,還差點(調整一次以後的偏差),又裝了一個...迭代,直到20塊錢。優化

注意每次都是根據偏差來進行調整,這點謹記。spa

 

BPTT 剖析3d

RNN網絡結構比較複雜,BPTT在梯度計算時也不一樣於常規。blog

 

不一樣1:權重共享,多個偏差教程

常規是偏差分兩條路傳遞,而後每條路分別算w,很容易理解變量

而權重共享時,一個權重,生成了2個偏差,還有個總偏差,到底用哪一個?怎麼反向?假設能反向回去,2個w,怎麼處理?咋一想,好亂,im

實際上是這樣的

1. 總偏差,分偏差,實際上是同樣的

2. 2個w,須要求和。

一個權重,多個偏差,求和

 

不一樣2:權重共享,鏈式傳遞

也是2個w,咋一看,不知道咋算。

實際上是這樣的

鏈式法則

一個權重,屢次傳遞,其梯度中含有w,且容易看出,傳遞次數越多,w的指數越大

 

其實rnn比這些不一樣點更復雜

圖不解釋了,直接上乾貨。

 

首先對網上各類坑爹教程進行補充和完善,總結,固然雖然坑爹,可是對咱們理解也是有幫助的。

教程1:教程描述ly1的偏差來自ly2 和 next_ly1兩個方向(下圖),其實說法不錯,只是不完整。

 

 補充:

1. ly1的偏差來自兩個方向,ly2和next_ly1,這兩條路都要從各自的偏差開始算起。(這裏體現了我上面例子裏提醒謹記的話)

2. 這裏計算的是「單層」的梯度,即單個w的梯度,實際計算BPTT梯度時並非這樣。

這裏的公式應該是這樣子

 

教程2:教程定義了中間變量,並用中間變量來表示梯度

 各類δ,徹底搞不清,公式也沒有推導過程。

 

補充:這裏針對單個節點自定義了變量,而後把每一個節點直接相加獲得總梯度。

總結:這裏定義了中間變量δ,之因此定義這個,是由於這個計算比較麻煩,並且要常常用到,這樣會很好地簡化運算。

這裏的公式應該是這樣子

 

這些教程加上個人補充,其實已經能夠算出梯度了。

 

下面我再系統的講一遍BPTT

仍是用這張圖,這張圖在整個網絡架構上比較完整,可是缺少完整的cell,我在前向傳播中標記一下。

前向傳播

wi 表示輸入權重,wh表示隱層權重

 

反向傳播

首先理解以下公式

 

1. v 和 c並無多路傳遞偏差,和普通的梯度計算無差異

2. wi wh b都有多路傳播

一樣設定中間變量,注意這個變量最好是個遞推公式,可以大大簡化運算,且容易獲得規律

初步設定

 

優化

 

再優化

 

這樣貌似好多了,遞推下去

 

注意到這裏仍是傳遞偏差,從上式大概能夠看出

1. 這是t時刻隱層cell的偏差 ,固然要乘以總偏差

2. t時刻的偏差是t時刻到T的一個和,也就是說是從終點一步一步傳過來的

3. 每步傳遞都是從t時刻到傳遞時刻的連乘,w指數。

4. 大概是這樣 w * losst1 + ww * losst2 + www * losst3 + wwww * losst4 + wwwww * losst5 ,越往前傳這個式子越長,損失也越傳越小

5. 加上激活函數的攪和,其導數常常小於1

 

 

wi同理

相關文章
相關標籤/搜索