rnn按时间展开_双向RNN的理解
我們在學習某種神經網絡模型時,一定要把如下幾點理解透了,才算真正理解了這種神經網絡。
很多介紹深度學習的書籍,在介紹全連接神經網絡時,對這幾個方面都會介紹的比較清楚,但是在介紹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的幾個方面:
下一個時刻的隱藏狀態屬于未來的狀態,那么,系統在計算時,怎么能夠用未來的狀態做輸入呢?
這個問題,既然很多資料沒有講,那就找原始paper的作者,是怎么說明的。
https://www.di.ufpe.br/~fnj/RNA/bibliografia/BRNN.pdf?www.di.ufpe.br這里的確是講解了,只是我還是沒有理解。到這里為止,能夠理解的請舉手!
我發現tensorflow的代碼,bidirectional_dynamic_rnn 函數的實現,坐了兩遍計算:第一遍先正向計算隱狀態h,保存成一個序列,順序是t時刻從1到T。第二遍,將輸入反轉,計算隱狀態h,保存為一個序列,這樣順序就是t時刻從T到1. 最后在計算output,這樣在計算output時,所有時刻的隱狀態都是已經計算出來了。這樣之前的疑問就得到解答了。
總結
以上是生活随笔為你收集整理的rnn按时间展开_双向RNN的理解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 监督分类空白处也被分类了_监督学习(2)
- 下一篇: endnote能自动翻译吗_自动挡和手自