吳恩達深度學習筆記(deeplearning.ai)之循環神經網絡(RNN)(一)


RNN

首先思考這樣一個問題:在處理序列學習問題時,為什么不使用標准的神經網絡(建立多個隱藏層得到最終的輸出)解決,而是提出了RNN這一新概念?
標准神經網絡如下圖所示:

標准神經網絡在解決序列問題時,存在兩個問題:

  • 難以解決每個訓練樣例子輸入輸出長度不同的情況,因為序列的長度代表着輸入層、輸出層的維度,不可能每訓練一個樣例就改變一次網絡結構。
  • 標准的神經網絡不能共享從文本不同位置上學到的特征。舉例說明:如果Harry作為人名位於一個訓練例子中的第一個位置,而當Harry出現在其他例子的不同位置時,我們希望模型依然能識別其為人名,而不是只能識別位於第一個位置的Harry。

前向傳播

以NLP中“命名實體識別“任務為例,序列中每一個輸入字符對應一個輸出,即\(T_y=T_x\)

  • \(a^{<0>}\)是初始的隱狀態,一般置為零向量。
  • \(a^{<i>}\)代表輸入序列中第\(i\)個輸入所隱含的信息,即時間步\(i\)的激活值。
  • \(x^{<i>}\)代表輸入序列中第i個字符,輸入序列的長度為\(T_x\)
  • \(\hat{y}^{<i>}\)代表與\(x^{<i>}\)相對應的輸出值。

RNN在進行前向傳播時,不光考慮當前時刻的輸入\(x^{<i>}​\),也會考慮包含上一時刻的信息(激活值\(a^{<i-1>}​\))。計算公式如下:

\[a^{<t>}=g(W_{aa}a^{<t-1>}+W_{ax}x^{<t>}+b_a) \]

\[\hat{y}^{<t>}=g(W_{ya}a^{<t>}+b_y) \]

為了方便記憶,可以將公式進行簡化,其中\(W_{aa}\)\(W_{ax}\)合並為\(W_a\)\(a^{<t-1>}\)\(x^{<t>}\)合並為新的矩陣\([a^{<t-1>},x^{<t>}]\)。舉例說明:假定激活值\(a^{<t-1>}\)(也可以成為隱狀態)為\(100\)維,輸入值\(x^{<t>}\)\(10000\)維。那么權重矩陣\(W_{aa}\)\(100\times 100\)維,\(W_{ax}\)\(100\times 10000\)維。合並后的新權重矩陣為\(W_a\)\(100\times (100+10000)\)維,合並后的新輸入\([a^{<t-1>},x^{<t>}]\)\((100+10000)\)維向量,即將\(a^{<t-1>}\)堆疊(stack)在\(x^{<t>}\)上方。

  • 簡化的原理為:

\[\begin{bmatrix}W_{aa}&W_{ax}\end{bmatrix}\begin{bmatrix}a^{<t-1>}\\ x^{<t>}\end{bmatrix}=W_{aa}a^{<t-1>}+W_{ax}x^{<t>} \]

  • 簡化后的計算公式為:

\[a^{<t>}=g(W_{a}[a^{<t-1>},x^{<t>}]+b_a) \]

\[\hat{y}^{<t>}=g(W_{y}a^{<t>}+b_y) \]

RNN類型總結

  1. One to one
  2. One to many
  3. Many to one
  4. Many to many(\(T_x == T_y\)
  5. Many to many(\(T_x != T_y\)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM