1. 程式人生 > >吳恩達深度學習筆記(deeplearning.ai)之循環神經網絡(RNN)(一)

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

不同的 圖片 存在 最終 一個 har end markdown 輸入

1. RNN

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

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

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

1.1 前向傳播

技術分享圖片

以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)\]

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