深度學習BP算法的推導附加RNN-LSTM的推導

注:1)這篇文章主要參考Alex Graves的博士論文《Supervised Sequence Labelling with Recurrent Neural Networks》 詳細介紹其關於BP算法的推導過程。 

        2)論文沒有提到過偏差的處理,不過如果能耐心推導出論文給出的公式,那麼這將十分簡單。

        3)由於是結合語音訓練的,最後是softmax出來是獲得有限結果的概率值,然後做交叉熵作爲目標函數,所以可能與其他的網絡不一致,但是反饋的推導應該是一樣的,除了輸出層和最後一個隱層之間的個推導。

  轉載請保留出處 http://write.blog.csdn.net/postedit/41809341

1.MLP 多層感知器

        我覺的在看下面公式之前多少也要對BP有些瞭解吧,最起要明白,建立網絡的目的是要擬合一個非線性函數,最終效果是整個網絡就是一個函數。函數的參數便是裏面的權重,所以主要目的就是如何訓練得到這些參數。一般都是建立一個目標函數O,然後優化它,因爲它和權重w有關,所以利用梯度下降法,來更新權重,所以文中最終的目的就是是在設法求dO/dw ……這些基本知識我還是不說了。
下面這張圖是我結合kaldi中dnn的代碼畫的圖不知對接下來講的有沒有幫助,我覺的kaldi的代碼和論文這裏的一抹一樣,只是代碼中把權重和層看作不同的component。

1.1前向傳播

       普通的BP前向傳播很簡單,如果最後一層不是softmax層,那麼就是 輸入 ×  權重 然後通過一個激活函數(eg. sigmoid),加上偏差作爲輸出。爲了簡便以下直接通過截圖,然後詳細的介紹每一步的作用。

         

        其中I 代表輸出單元個數,輸入的數據是向量x,下表帶有h的表示在隱層。左面兩個式子就是求第一個隱層其中一個unit(單元)的輸出。  3.1式,可以理解爲一個過渡式子,但是這個式子很重要,後面推導的時候就是用目標函數對a求導作爲基本結構(我猜想這也是考慮到 後面對權重w求導方便)。右面兩個式子,是其餘隱層單元的輸出(因爲這裏要講的是深度網絡,所以有多個隱層)

        那個θ是一個非線性函數(激活函數),一般有下面兩種選擇:


      指所以選擇非線性函數,因爲其可以擬合線性的函數,發現非線性的分類邊界(nonlinear classi cation boundaries),同時線性函數的組合還是線性的,而非線性則可以更好地”記憶“輸入數據的特徵。(算了這樣下去就成翻譯了,我還是注重推導吧,反正大家的ANN基本知識比我好)

     前向傳播到最後,當然要把輸出數據和原來的數據進行比對然後更新權重(這裏講的是有監督學習)。對於語音識別網絡結構CD-DNN-HMM熟悉的話,知道網絡最後的輸出是關於每個phoneme或triphone的概率,而概率的得來是通過最後一個softmax層求得並輸出的(此層非常特殊,不像原來每個節點單獨求輸出b,而是等此層所有節點的a都求出後,一起求b【概率】)。式子如下

              

     左面那個就是標準的softmax函數,求Ck類的概率值。 右面那個函數z是標籤(或者說本應該的正確結果,但是完全由一個1其餘爲0組成比如[0,1,0,0,0]  ,1,0其實代表的是概率值,它們求和爲1,可以理解爲總共有5個分類結果,輸入應該對應第二個分類) 

1.2目標函數O

結合2.11式(在下面,就是求交叉熵的)與3.13式可得3.15式——我們需要最小化的目標函數(交叉熵越小,說明模型越逼近真實的結果)


         目標函數以前用的是均方誤差    

         最小化目標函數O就需要用梯度下降法【應該是隨機梯度下降,因爲基本上是訓練一個數據(或mini-batch),更新一下權重,而不是把所有的都訓練完再更新】

        關於梯度下降法,要理解清楚,要不然就不知道下面爲什麼要那麼幹,可參考博客 http://www.cnblogs.com/iamccme/archive/2013/05/14/3078418.html 。 簡單說一下,如果要更新權重w,就要知道更新量,可以選取梯度最大的值(傳說中的導數),如果+則是最大化目標函數,如果減則是最小化目標函數.爲了防止過快/慢則乘以一個係數.

1.3 後向傳播

這纔是真正難的地方.大體說一下,由於最後一次層特殊是個softmax層,所以單獨證明一下,後面的則完全一樣了,通過找到遞歸的算法.使得公式十分簡潔.

再次強調,ah是指下面的 輸入X 權重 求和的值,還沒有通過節點,而 bh 是指ah 通過節點的激活函數θ的值,那麼這個bh乘以權重whk與其他求和,就又得到上一層的ak,而論文的作者是以求dO/da 爲核心,然後推導出遞歸公式。

先看softmax這層的推導

根據3.15式和3.13式,不難想到3,20式 【牢記每個 單元/節點 的softmax值依賴於這層所有的a】

     

對於3.22式,有興趣的同學可以自己推,下面是我的推導過程,截圖如下,不知是否準確


其他層的遞歸求法推導

之前我強調了很久的地方,是因爲我在推導哦啊RNN和LSTM的時候,充分發現其巧妙之處,作者在接下來也直接給出了公式 3.23


      

δk 在3.22式就已經得到了,接下來,論文通過簡單的求導變換就推出出的遞歸公式,下面慢慢講,首先是倒數第二個隱層

      類似3.1有 

     解釋:上面這個式子,在不知不覺中牽扯到兩個隱層 ,ah產生bh,bh產生ak,記住a只是通過矩陣乘法還沒通過節點,而b就是a通過後的值。

     給個我畫的圖片吧,



     通過3.24式與3.2,3.9式結合,便可得3.25式,這樣推廣一下除了最後的softmxt層其他層都可以按3.36這樣遞歸來算

    

   雖然找到了遞歸關係,但是有朋友要問了,不是應該求權重w的倒數嗎?怎麼一直沒看到?我想說的是如果一開始直接利用求w的倒數來推導,那麼上面的公式將會複雜,還有論文後面的LSTM列出的公式(論文同樣沒給具體的推導,需要自己來推推)也利用dO/da 總結出公式……不說了,下面就看看這樣之後求dw是多麼簡潔吧!



2.RNN Recurrent Neural Networks(循環的神經網絡)

網絡的結構就是每一個隱層,擁有上一時刻這個隱層輸出的輸入值.,原文示意圖如下


2.1前向傳播

   直接看公式吧,很簡單,注意上標是指時間t

    

當然輸出層的a則和以前的一樣


2.2 後向傳播

先給公式

   

    其實也沒什麼難的,但是有個地方要仔細揣摩一下,仔細觀察 公式3.23 用到了t+1,如果求導思路清晰則可以推,出來.但是也可以這樣理解:前向傳播時h層的輸出bh影響了h層t+1時刻,所以按照多元函數求導的法則,自然要加上對t+1時刻的影響,或者乾脆看作上面不僅有k層還有 h(t+1) 層,這樣就好理解爲什麼有 δ(t+1)了吧,【明白這個很重要,要不然LSTM給出的公式將更難理解

求對w的倒數和往常一樣的簡單



3 LSTM Long Short-Term Memory (長短時間記憶)


到這裏,朋友們可能要失望了,因爲接下來我也不貼結構圖或者是公式。在這裏給想推導出LSTM公式的同學一些經驗。

1)先把結構圖看明白,要對照論文給出的各個定義,結合Forward Pass ,注意圖中C=1,其實這一個memory block 應該有多個輸出。前萬不要先看 Backward Pass

2)要時刻警惕腳標t ,t+1 ,t-1

3)開始推導後向算法的朋友,也不要害怕,其實就是下圖這麼回事


    推導過程中z到t可能間隔幾層,而非上圖中的一層,一定要明白誰是最後的求導對象。一般來說除了像3.24那種需要變換的,其餘只要根據圖中箭頭的反像就可以慢慢鏈式的求出來。 當然這是我的理解不一定對,大家數學好的可能就會說,這還用求嗎?顯然是這樣,就像1+1=2一樣的顯然。


    這一塊內容我看了很久,這三個推導看了大約5天,很多筆記在打印紙上,這裏只能摘一點防止自己忘記,也爲入門的朋友提供一些小的幫助。

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