1. 程式人生 > >循環神經網絡-極其詳細的推導BPTT

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

了解 容易 老板 height 中間變量 要求 color 技術 eight

首先明確一下,本文需要對RNN有一定的了解,而且本文只針對標準的網絡結構,旨在徹底搞清楚反向傳播和BPTT。

反向傳播形象描述

什麽是反向傳播?傳播的是什麽?傳播的是誤差,根據誤差進行調整。

舉個例子:你去買蘋果,你說,老板,來20塊錢蘋果(目標,真實值),老板開始往袋子裏裝蘋果,感覺差不多了(預測),放稱上一稱,還差點(誤差),又裝了一個,還差點(調整一次之後的誤差),又裝了一個...叠代,直到20塊錢。

註意每次都是根據誤差來進行調整,這點謹記。

BPTT

RNN網絡結構比較復雜,BPTT在梯度計算時也不同於常規。

不同1:權重共享,多個誤差

技術分享圖片

常規是誤差分兩條路傳遞,然後每條路分別算w,很容易理解

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

其實是這樣的

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 ,越往前傳這個式子越長,損失也越傳越小

技術分享圖片

wi同理

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