吴恩达深度学习笔记:RNN模型简介

RNN model

1、Notation

吴恩达深度学习课程中采用了如下的记号
在这里插入图片描述
以命名体识别为例子来举例,如输入一句话,识别出哪个单词是人名,有以下句子:

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} ai1(之前的信息)计算出来的激活值,其中 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同理

在这里插入图片描述

首先为了计算前向传播,现将上图蓝色框框住的参数进行随机初始化,包括 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<t1>,利用这些输入分别和对应的参数 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(Waaa<0>+Waxx<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(Wyaa<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(Waaa<t1>+Waxx<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(Wyaa<t>+by)

why RNN works?

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<t1>的输入对当前输出的影响。如上图中 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(Waaa<t1>+Waxx<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(Wyaa<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<t1> 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<t1>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<t1>x<t>]=[Waa,Wax][a<t1>x<t>]=Waaa<t1>+Waxx<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<t1>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(Wya<t>+by),Wy=Wya

以上就是RNN的前向传播过程

3、Rough Sense of Backprop Works in 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<t1>,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步的前向传播。

以下计算图中的红色箭头表示反向传播的步骤
在这里插入图片描述

首先定义在每一个时间步上的损失函数,这里使用交叉熵损失函数:
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>)(1y<t>)log(1y<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=1TxL<t>(y^<t>,y<t>)
反向传播的方向如上图红色箭头所示

4、Different types of RNNS

在这里插入图片描述

1、one-to-many

在这里插入图片描述

应用场景音乐生成,或者序列生成。给定一个整数表示序列、音乐的种类,然后生成一段序列、音乐

在这里插入图片描述

2、many-to-one

在这里插入图片描述

应用场景情感分类。给定一个文本序列,通过RNN模型给出对该段文本的情感评价,1-5的一个整数,越大表示文本情感越接近积极

在这里插入图片描述

3、many-to-many

在这里插入图片描述

3.1输入序列和输出序列长度相等

命名体识别。给定一段文本,识别文本中的人名,输出向量和输入的文本单词数一样 T x = T y T^x=T^y Tx=Ty T x T^x Tx表示输入序列长度, T y T^y Ty表示输出序列长度),输出向量中为1的表示该单词为名字,为0的表示不是。

在这里插入图片描述

3.2输入序列和输出序列长度不相等

在这里插入图片描述

机器翻译。给定一段文本将其翻译成另一种语言的文本( T x ̸ = T y T^x \not = T_y Tx̸=Ty T x T^x Tx表示输入序列长度, T y T^y Ty表示输出序列长度)

在这里插入图片描述

在这里插入图片描述

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值