首先明確一下,本文須要對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同理