卷積神經網路之前向反向傳播演算法
前面我們已經介紹了深度神經網路和卷積神經網路,這些演算法都是前向反饋,模型的輸出和模型本身沒有關聯關係。今天我們學習輸出和模型間有反饋的神經網路,迴圈神經網路(Recurrent Neual Networks),其廣泛應用於自然語言處理中的語音識別,書寫識別和機器翻譯等領域。
1.RNN簡介
前面介紹的DNN和CNN之中,訓練樣本的輸入和輸出都是確定的。但對於訓練樣本輸入是連續的序列,訓練樣本長度不同的樣本,比如一段連續的語音和手寫文字,DNN和CNN是比較難處理的。而對於上述問題,RNN則是比較擅長,那麼RNN是怎麼做到的呢?
RNN假設輸入樣本是基於序列的,比如是從序列索引1到序列索引τ,對於其中的任意序列索引號t,輸入是對應樣本序列的。而模型在序列索引號t位置的隱藏狀態,則由和t-1時刻的隱藏狀態共同決定。在任意序列索引號t,也有相對應的模型預測輸出。通過預測輸出和訓練序列的真實輸出,以及損失函式,我們就可以用和DNN類似的方法來訓練模型,接著用來預測測試樣本的輸出,下面我們來看看迴圈神經網路的模型。
2.RNN模型
迴圈神經網路有多種模型結構,這裡我們介紹最主流的模型結構。上圖中左邊是沒有按時間序列展開的圖,右邊是按照時間序列展開的結構,我們重點看右邊的模型結構。這裡描述了在序列索引號t附近的RNN模型,下面針對一些引數做具體說明。
- 代表在序列索引號t時訓練樣本的輸入,同樣和分別代表t-1時刻和t+1時刻訓練樣本的輸入。
- 代表在序列索引號t時模型的隱藏狀態,由和共同決定。
- 代表在序列索引號t時模型的輸出,由模型當前的隱藏狀態決定。
- 代表在序列索引號t時模型的損失函式。
- 代表在序列索引號t時訓練樣本序列的真實輸出。
- 矩陣是模型的線形關係引數,在整個RNN網路間是共享的,這點和DNN不同。正是因為引數的共享,體現了RNN模型迴圈反饋的思想。
3.RNN前向傳播演算法
根據上面介紹的模型,我們來看一下RNN前向傳播演算法,對於任意時刻序列索引號t,能夠得到當前的隱藏狀態。其中σ為RNN的啟用函式,一般是tanh,b為偏倚係數。 序列索引號t時模型的輸出為 最終能夠得到模型的預測輸出,由於RNN是識別類的分類模型,所以下式啟用函式一般是softmax函式。 最後通過損失函式,比如對數似然損失函式,我們可以量化模型在當前位置的損失,即和的差距。
4.RNN反向傳播演算法
RNN反向傳播演算法和DNN思路相同,即通過梯度下降法進行迭代,得到合適的RNN模型引數U,W,V,b,c,傳播過程中所有的引數在序列中各個位置是共享的,即反向傳播中我們更新的是相同的引數。為了簡化描述,反向傳播時損失函式採用對數損失函式,隱藏層的啟用函式為tanh函式,輸出的啟用函式為softmax函式。
對於RNN,由於我們在序列各位置都有損失函式,因此最終的損失函式L為 其中V,c的梯度計算比較簡單,如下所示
針對W,U,b的梯度計算比較複雜,從RNN模型可以看出,在反向傳播時,在某一序列位置t的梯度損失,由當前位置的輸出對應的梯度損失和序列索引位置t+1時的梯度損失兩部分共同決定。對於W在某一序列位置t的梯度損失需要反向傳播一步步來進行計算,此處定義序列索引t位置的隱藏狀態梯度為 這樣便可以像DNN一樣從遞推得到