日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

rnn按时间展开_双向RNN的理解

發布時間:2023/12/2 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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的幾個方面:

  • 網絡的結構:在本文的開始有講解,或者百度下,很多講雙向RNN的資料,基本上只講解了這部分。要優化的參數包含兩組:W,U,V。
  • 前向傳播算法:和RNN相比,這正是不太容易理解的地方。雙向RNN中,有兩個隱藏狀態,一個是正序,如下圖中的實線;一個是逆序,如下圖中的虛線。那么在計算t時刻的狀態變量時,對于正序,比較好理解,輸入是上一個時刻的隱藏狀態和當前時刻的系統輸入;對于逆序,輸入是下一個時刻的隱藏狀態和當前時刻的系統輸入。下一個時刻的隱藏狀態屬于未來的狀態,那么,系統在計算時,怎么能夠用未來的狀態做輸入呢?
  • 損失函數的定義,是根據要解決的問題的類型來選擇的,跟網絡的類型一般關系不大。
  • 后向傳播算法,也是采用BPTT。不詳細展開,根據函數定義和偏導數的定義,比如容易類推。
  • 什么情況下認為是發現了過擬合,怎么進行優化。和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的理解的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。