天天看點

吳恩達深度學習筆記:RNN模型簡介

RNN model

1、Notation

吳恩達深度學習課程中采用了如下的記号

吳恩達深度學習筆記:RNN模型簡介

以命名體識别為例子來舉例,如輸入一句話,識别出哪個單詞是人名,有以下句子:

He said,“Teddy Roosevelt was a great President”.

N o t a t i o n : Notation: Notation:

  • T x T^{x} Tx表示輸入序列的長度,如上面這句話有8個單詞是以 T x = 8 T^{x}=8 Tx=8, T y T^{y} Ty表示輸出序列長度,本例中 T x = T y T^{x}=T^{y} Tx=Ty
  • x &lt; 1 &gt; ,   x &lt; 2 &gt; . . . x T x x^{&lt;1&gt;},\ x^{&lt;2&gt;}...x^{T_x} x<1>, x<2>...xTx​ 表示輸入語句的序列,如 x &lt; 1 &gt; x^{&lt;1&gt;} x<1>表示第一個單詞He
  • y &lt; i &gt; y^{&lt;i&gt;} y<i>是根據已經輸入的資訊計算的結果,如果是二分類,如人名識别可以是0或者1,1表示 x &lt; i &gt; x^{&lt;i&gt;} x<i>是一個人名,比如第三個和第四個單詞Teddy,Roosevelt是人名,是以希望 y &lt; 3 &gt; = 1 , y &lt; 4 &gt; = 1 y^{&lt;3&gt;}=1,y^{&lt;4&gt;}=1 y<3>=1,y<4>=1
  • a &lt; i &gt; a^{&lt;i&gt;} a<i>是由 x &lt; i &gt; x^{&lt;i&gt;} x<i>和 a i − 1 a^{i-1} ai−1(之前的資訊)計算出來的激活值,其中 a &lt; 0 &gt; a^{&lt;0&gt;} a<0>是随機生成的向量

2、Forward Propagation

basic notation

符号 w y a w_{ya} wya​中的第一個下标表示這個參數最終要計算的是 y y y,而第二個參數表示這個參數将會乘以一個 a a a, w a a w_{aa} waa​同理

吳恩達深度學習筆記:RNN模型簡介

首先為了計算前向傳播,現将上圖藍色框框住的參數進行随機初始化,包括 a &lt; 0 &gt; , W a a , W a x , W y a a^{&lt;0&gt;},W_{aa},W_{ax},W_{ya} a<0>,Waa​,Wax​,Wya​

I n i t i a l i z e : a &lt; 0 &gt; = 0 ⃗ , W a a , W a x , W y a Initialize: a^{&lt;0&gt;} = \vec0,W_{aa},W_{ax},W_{ya} Initialize:a<0>=0

,Waa​,Wax​,Wya​

RNN的計算過程如上圖中間的箭頭方向所示,從左向右進行計算,每一時間步都有目前這一步的文本輸入 x &lt; t &gt; x^{&lt;t&gt;} x<t>,和前一步的激活值 a &lt; t − 1 &gt; a^{&lt;t-1&gt;} a<t−1>,利用這些輸入分别和對應的參數 W a x , W a a W_{ax},W_{aa} Wax​,Waa​進行線性運算再經過激活函數得到目前這步的激活值 a &lt; t &gt; a^{&lt;t&gt;} a<t>

a &lt; 1 &gt; = g 1 ( W a a a &lt; 0 &gt; + W a x x &lt; 1 &gt; + b a ) , w h e r e   g 1 ( x )   c a n   b e   s i g m o i d / t a n h / R e l u ( X ) . . . a^{&lt;1&gt;}=g_1(W_{aa}a^{&lt;0&gt;}+W_{ax}x^{&lt;1&gt;}+b_a), where\ g_1(x)\ can\ be\ sigmoid/tanh/Relu(X)... a<1>=g1​(Waa​a<0>+Wax​x<1>+ba​),where g1​(x) can be sigmoid/tanh/Relu(X)...

得到目前時間步t的激活值 a &lt; t &gt; a^{&lt;t&gt;} a<t>之後,用 a &lt; t &gt; a^{&lt;t&gt;} a<t>和對應的參數 W y a W_{ya} Wya​進行線性運算再經過激活函數得到輸出 y &lt; t &gt; y^{&lt;t&gt;} y<t>,如果需要輸出多個值,激活函數可以選擇 s o f t m a x softmax softmax激活函數

y &lt; 1 &gt; = g 2 ( W y a a &lt; 1 &gt; + b y ) , w h e r e   g 2 ( x )   c a n   b e   s o f t m a x ( x ) . . . y^{&lt;1&gt;}=g_2(W_{ya}a^{&lt;1&gt;}+b_y),where\ g_2(x)\ can \ be \ softmax(x)... y<1>=g2​(Wya​a<1>+by​),where g2​(x) can be softmax(x)...

. . . ... ...

每一步都按照上面的公式進行計算,并且每一步的參數 W a a , W a x , W y a W_{aa},W_{ax},W_{ya} Waa​,Wax​,Wya​使用的都是同一套參數(在每個時間步上參數是共享的)

a &lt; t &gt; = g 1 ( W a a a &lt; t − 1 &gt; + W a x x &lt; t &gt; + b a ) a^{&lt;t&gt;} = g_1(W_{aa}a^{&lt;t-1&gt;}+W_{ax}x^{&lt;t&gt;}+b_a) a<t>=g1​(Waa​a<t−1>+Wax​x<t>+ba​)

y &lt; t &gt; = g 2 ( W y a a &lt; t &gt; + b y ) y^{&lt;t&gt;} = g_2(W_{ya}a^{&lt;t&gt;}+b_y) y<t>=g2​(Wya​a<t>+by​)

why RNN works?

RNN優點:

RNN 可以對整個句子序列進行表示,保持完整的上文資訊。尤其是較長距離(超過卷積視窗)的詞彙間的關聯資訊。(理論上)

吳恩達深度學習筆記:RNN模型簡介

從上圖以及前向傳播的過程可以看出:RNN的計算結果不僅僅取決于目前時間步的輸入 x &lt; t &gt; x^{&lt;t&gt;} x<t>,而是在時間步t上加入了前一步的激活值 a &lt; t &gt; a^{&lt;t&gt;} a<t>進而綜合考慮了前面 x &lt; 1 &gt; , x &lt; 2 &gt; , . . . x &lt; t − 1 &gt; x^{&lt;1&gt;},x^{&lt;2&gt;},...x^{&lt;t-1&gt;} x<1>,x<2>,...x<t−1>的輸入對目前輸出的影響。如上圖中 h 3 h_3 h3​的輸出不僅僅和 x 3 x_3 x3​有關,而且還受 x 0 x_0 x0​和 x 1 x_1 x1​的影響。正是因為RNN這種考慮目前輸出不僅僅和目前輸入有關,還與之前的輸入有關的特性(可以稱為RNN具有記憶能力,記憶了之前輸入的資訊),使得RNN對于序列資料具有很好的模組化能力。

Simplified RNN notation

a &lt; t &gt; = g ( W a a a &lt; t − 1 &gt; + W a x x &lt; t &gt; + b a ) a^{&lt;t&gt;} = g(W_{aa}a^{&lt;t-1&gt;}+W_{ax}x^{&lt;t&gt;}+b_a) a<t>=g(Waa​a<t−1>+Wax​x<t>+ba​)

y &lt; t &gt; = g ( W y a a &lt; t &gt; + b y ) y^{&lt;t&gt;} = g(W_{ya}a^{&lt;t&gt;}+b_y) y<t>=g(Wya​a<t>+by​)

将 w a a w_{aa} waa​和 w a x w_{ax} wax​按列水準堆疊起來得到新的矩陣 w a w_{a} wa​,

W a = [ W a a , W a x ] W_a= \begin{bmatrix} W_{aa},W_{ax} \end{bmatrix} Wa​=[Waa​,Wax​​]

然後将 a &lt; t − 1 &gt; a^{&lt;t-1&gt;} a<t−1>和 x &lt; t &gt; x^{&lt;t&gt;} x<t>按行縱向堆疊起來得到:

[ a &lt; t − 1 &gt; x &lt; t &gt; ] \begin{bmatrix} a^{&lt;t-1&gt;}\\ x^{&lt;t&gt;} \end{bmatrix} [a<t−1>x<t>​]

是以得到:

W a [ a &lt; t − 1 &gt; x &lt; t &gt; ] = [ W a a , W a x ] [ a &lt; t − 1 &gt; x &lt; t &gt; ] = W a a a &lt; t − 1 &gt; + W a x x &lt; t &gt; W_a\begin{bmatrix} a^{&lt;t-1&gt;}\\ x^{&lt;t&gt;} \end{bmatrix}= \begin{bmatrix} W_{aa},W_{ax} \end{bmatrix} \begin{bmatrix} a^{&lt;t-1&gt;}\\ x^{&lt;t&gt;} \end{bmatrix}=W_{aa}a^{&lt;t-1&gt;}+W_{ax}x^{&lt;t&gt;} Wa​[a<t−1>x<t>​]=[Waa​,Wax​​][a<t−1>x<t>​]=Waa​a<t−1>+Wax​x<t>

是以最初的公式可以簡化如下:

a &lt; t &gt; = g ( W a [ a &lt; t − 1 &gt; x &lt; t &gt; ] + b a ) a^{&lt;t&gt;}=g(W_a\begin{bmatrix} a^{&lt;t-1&gt;}\\ x^{&lt;t&gt;} \end{bmatrix}+b_a) a<t>=g(Wa​[a<t−1>x<t>​]+ba​)

y &lt; t &gt; = g ( W y a &lt; t &gt; + b y ) , W y = W y a y^{&lt;t&gt;}=g(W_ya^{&lt;t&gt;}+b_y),W_y=W_{ya} y<t>=g(Wy​a<t>+by​),Wy​=Wya​

以上就是RNN的前向傳播過程

3、Rough Sense of Backprop Works in RNN

前向傳播的計算圖如下:

吳恩達深度學習筆記:RNN模型簡介

首先前向傳播:用 a &lt; 0 &gt; a^{&lt;0&gt;} a<0>, x &lt; 1 &gt; x^{&lt;1&gt;} x<1>計算出 a &lt; 1 &gt; a^{&lt;1&gt;} a<1>,由 a &lt; 1 &gt; a^{&lt;1&gt;} a<1>計算出 y ^ &lt; 1 &gt; \hat y^{&lt;1&gt;} y^​<1>,到此完成了第一步的前向傳播…以此類推由 a &lt; t − 1 &gt; , x &lt; t &gt; a^{&lt;t-1&gt;},x^{&lt;t&gt;} a<t−1>,x<t>計算出 a &lt; t &gt; a^{&lt;t&gt;} a<t>,然後由 a &lt; t &gt; a^{&lt;t&gt;} a<t>計算出 y ^ &lt; t &gt; \hat y^{&lt;t&gt;} y^​<t>,到此完成了第t步的前向傳播。

以下計算圖中的紅色箭頭表示反向傳播的步驟

吳恩達深度學習筆記:RNN模型簡介

首先定義在每一個時間步上的損失函數,這裡使用交叉熵損失函數:

L &lt; t &gt; ( y ^ &lt; t &gt; , y &lt; t &gt; ) = − y ^ &lt; t &gt; l o g ( y ^ &lt; t &gt; ) − ( 1 − y &lt; t &gt; ) l o g ( 1 − y &lt; t &gt; ) L^{&lt;t&gt;}(\hat y^{&lt;t&gt;},y^{&lt;t&gt;})=-\hat y^{&lt;t&gt;}log(\hat y^{&lt;t&gt;})-(1-y^{&lt;t&gt;})log(1-y^{&lt;t&gt;}) L<t>(y^​<t>,y<t>)=−y^​<t>log(y^​<t>)−(1−y<t>)log(1−y<t>)

對每一時間步的損失加起來,得到總的損失:

L = ( y ^ , y ) = ∑ t = 1 T x L &lt; t &gt; ( y ^ &lt; t &gt; , y &lt; t &gt; ) L=(\hat y, y)=\sum_{t=1}^{T^x}L^{&lt;t&gt;}(\hat y^{&lt;t&gt;},y^{&lt;t&gt;}) L=(y^​,y)=t=1∑Tx​L<t>(y^​<t>,y<t>)

反向傳播的方向如上圖紅色箭頭所示

4、Different types of RNNS

吳恩達深度學習筆記:RNN模型簡介

1、one-to-many

吳恩達深度學習筆記:RNN模型簡介

應用場景音樂生成,或者序列生成。給定一個整數表示序列、音樂的種類,然後生成一段序列、音樂

吳恩達深度學習筆記:RNN模型簡介

2、many-to-one

吳恩達深度學習筆記:RNN模型簡介

應用場景情感分類。給定一個文本序列,通過RNN模型給出對該段文本的情感評價,1-5的一個整數,越大表示文本情感越接近積極

吳恩達深度學習筆記:RNN模型簡介

3、many-to-many

吳恩達深度學習筆記:RNN模型簡介

3.1輸入序列和輸出序列長度相等

命名體識别。給定一段文本,識别文本中的人名,輸出向量和輸入的文本單詞數一樣( T x = T y T^x=T^y Tx=Ty, T x T^x Tx表示輸入序列長度, T y T^y Ty表示輸出序列長度),輸出向量中為1的表示該單詞為名字,為0的表示不是。

吳恩達深度學習筆記:RNN模型簡介

3.2輸入序列和輸出序列長度不相等

吳恩達深度學習筆記:RNN模型簡介

機器翻譯。給定一段文本将其翻譯成另一種語言的文本( T x ̸ = T y T^x \not = T_y Tx̸​=Ty​, T x T^x Tx表示輸入序列長度, T y T^y Ty表示輸出序列長度)

吳恩達深度學習筆記:RNN模型簡介
吳恩達深度學習筆記:RNN模型簡介