BP演算法和RNN 雙向RNN的理解

2021-10-10 23:16:03 字數 2823 閱讀 8044

我們在學習某種神經網路模型時,一定要把如下幾點理解透了,才算真正理解了這種神經網路。

網路的架構:包含那些層,每層的輸入和輸出,有那些模型引數是待優化的

前向傳播演算法

損失函式的定義

後向傳播演算法

什麼情況下認為是發現了過擬合,怎麼進行優化。

很多介紹深度學習的書籍,在介紹全連線神經網路時,對這幾個方面都會介紹的比較清楚,但是在介紹cnn,rnn,lstm等,都會只偏重介紹網路的架構,其他的方面介紹的少,沒有講解透徹。

如果不信,我提乙個問題,如果能夠在那本書中找到答案,請一定要告訴我這邊書的名字!

問題:雙向rnn中,有兩個隱藏狀態,乙個是正序,如下圖中的實線;乙個是逆序,如下圖中的虛線。那麼在計算t時刻的狀態變數時,對於正序,比較好理解,輸入是上乙個時刻的隱藏狀態和當前時刻的系統輸入;對於逆序,輸入是下乙個時刻的隱藏狀態和當前時刻的系統輸入。下乙個時刻的隱藏狀態屬於未來的狀態,那麼,系統在計算時,怎麼能夠用未來的狀態做輸入呢?

我可是日夜冥思苦想才想通這個問題啊。 下面給出歷程。

先理解下rnn的幾點:

網路的架構:

這是乙個標準的rnn結構圖,圖中每個箭頭代表做一次變換,也就是說箭頭連線帶有權值。左側是摺疊起來的樣子,右側是展開的樣子,左側中h旁邊的箭頭代表此結構中的「迴圈「體現在隱層。

在展開結構中我們可以觀察到,在標準的rnn結構中,隱層的神經元之間也是帶有權值的。也就是說,隨著序列的不斷推進,前面的隱層將會影響後面的隱層。圖中o代表輸出,y代表樣本給出的確定值,l代表損失函式,我們可以看到,「損失「也是隨著序列的推薦而不斷積累的。

除上述特點之外,標準rnn的還有以下特點:

1、權值共享,圖中的w全是相同的,u和v也一樣。

2、每乙個輸入值都只與它本身的那條路線建立權連線,不會和別的神經元連線。

前向傳播演算法:

x是輸入,h是隱層單元,o為輸出,l為損失函式,y為訓練集的標籤。這些元素右上角帶的t代表t時刻的狀態,其中需要注意的是,因策單元h在t時刻的表現不僅由此刻的輸入決定,還受t時刻之前時刻的影響。v、w、u是權值,同一型別的權連線權值相同。

前向傳播演算法其實非常簡單,對於t時刻:

h(t)=ϕ(u*x(t)+w*h(t−1)+b)

其中ϕ()為啟用函式,一般來說會選擇tanh函式,b為偏置。

t時刻的輸出就更為簡單:

o(t)=v*h(t)+c

最終模型的**輸出為:

yˆ(t)=σ(o(t))

其中σ為啟用函式,通常rnn用於分類,故這裡一般用softmax函式。

損失函式的定義:

對於分類問題,採用交叉熵。

後向傳播演算法:

bptt(back-propagation through time)演算法是常用的訓練rnn的方法,其實本質還是bp演算法,只不過rnn處理時間序列資料,所以要基於時間反向傳播,故叫隨時間反向傳播。bptt的中心思想和bp演算法相同,沿著需要優化的引數的負梯度方向不斷尋找更優的點直至收斂。綜上所述,bptt演算法本質還是bp演算法,bp演算法本質還是梯度下降法,那麼求各個引數的梯度便成了此演算法的核心。

需要尋優的引數有三個,分別是u、v、w。與bp演算法不同的是,其中w和u兩個引數的尋優過程需要追溯之前的歷史資料,引數v相對簡單只需關注目前。

什麼時候出現過擬合,怎麼優化?

很多資料在介紹全連線神經網路時,都介紹過擬合的定義以及優化的方法,然後在介紹rnn時,卻沒有介紹這些。對於學習和實踐的過程就很容易忽略這些。其中這些在實踐中也是非常重要的。

出現過擬合的現象,就是安裝過擬合的定義,當模型在訓練資料的表現很好,而在測試資料集的表現不好時。

優化的方法:一是使用正則化,而是使用dropout。 dropout就是對權重引數進行隨機丟棄的過程,採用超引數來控制丟失的比例。一般對同乙個序列的內部的引數(即 u和v)使用dropout,而不對不同序列之間的連線的引數(即w)進行dropout。為什麼要這樣呢?這點很多書籍和資料都沒有講解透徹。

這其實是乙個從實踐的角度總結出來的,隱狀態h是之前輸入的資訊的表示,在傳遞給下乙個時刻,如果進行dropout,會有資訊丟失。 而對同乙個序列的內部的引數(即 u和v)使用dropout,只是講資訊表示的維數降低,比如隱層的維數是200維,使用dropout之後,變成180維,從而降低模型的複雜度。

現在理解雙向rnn的幾個方面:

前向傳播演算法:和rnn相比,這正是不太容易理解的地方。雙向rnn中,有兩個隱藏狀態,乙個是正序,如下圖中的實線;乙個是逆序,如下圖中的虛線。那麼在計算t時刻的狀態變數時,對於正序,比較好理解,輸入是上乙個時刻的隱藏狀態和當前時刻的系統輸入;對於逆序,輸入是下乙個時刻的隱藏狀態和當前時刻的系統輸入。下乙個時刻的隱藏狀態屬於未來的狀態,那麼,系統在計算時,怎麼能夠用未來的狀態做輸入呢?損失函式的定義,是根據要解決的問題的型別來選擇的,跟網路的型別一般關係不大。

後向傳播演算法,也是採用bptt。不詳細展開,根據函式定義和偏導數的定義,比如容易類推。

什麼情況下認為是發現了過擬合,怎麼進行優化。和rnn相比,比較容易類推。

下乙個時刻的隱藏狀態屬於未來的狀態,那麼,系統在計算時,怎麼能夠用未來的狀態做輸入呢?

這個問題,既然很多資料沒有講,那就找原始*****的作者,是怎麼說明的。

這裡的確是講解了,只是我還是沒有理解。到這裡為止,能夠理解的請舉手!

我發現tensorflow的**,bidirectional_dynamic_rnn 函式的實現,坐了兩遍計算:第一遍先正向計算隱狀態h,儲存成乙個序列,順序是t時刻從1到t。第二遍,將輸入反轉,計算隱狀態h,儲存為乙個序列,這樣順序就是t時刻從t到1. 最後在計算output,這樣在計算output時,所有時刻的隱狀態都是已經計算出來了。這樣之前的疑問就得到解答了。

DNN中的BP和RNN中的BPTT推導

參考部落格 1 反向傳播演算法 backpropagation 深層神經網路 deep neural network,dnn 由輸入層 多個隱藏層和輸出層組成,任務分為分類和回歸兩大類別。如果我們使用深層神經網路做了乙個 任務,輸出為y tilde y 真實的為y,這時候就需要定義乙個損失函式來評價...

簡單的RNN和BP多層網路之間的區別

先來個簡單的多層網路 關於rnn出現的原因,rnn詳細的原理,已經有很多博文講解的非常棒了。如下 多層網路 x tf.placeholder tf.float32,none,256 y tf.placeholder tf.float32,none,10 w1 tf.variable tf.rando...

RNN和LSTM GRU的簡單理解

rnn迴圈神經網路,recurrent neural networks 1,rnns已經在眾多自然語言處理 natural language processing,nlp 中取得了巨大成功以及廣泛應用,如語言模型與文字生成,機器翻譯,語音識別,2,rnns的目的是用來處理序列資料,rnn中乙個序列當...