吴恩达深度学习第五课--第一周RNN


参考 红色石头Will

一、为何用RNN而不是CNN

  • 序列模型用tensorflow独热编码实现
  • CNN的缺点
    • 不同样本的输入序列长度或输出序列长度不同
    • CNN无法共享序列不同 x < t > x^{<t>} x<t>之间的特征
  • RNN模型如下:
    在这里插入图片描述
    • RNN正向传播过程为:

a < t > = g ( W a a a < t − 1 > + W a x x < t > + b a ) a^{<t>}=g(W_{aa}a^{<t-1>}+W_{ax}x^{<t>}+b_a) a<t>=g(Waaa<t1>+Waxx<t>+ba)
y ^ < t > = g ( W y a a < t > + b y ) \hat y^{<t>}=g(W_{ya}a^{<t>}+b_y) y^<t>=g(Wyaa<t>+by)
为了简化表达式,对 a < t > a^{<t>} a<t>整合:
W a a a < t − 1 > + W a x x < t > = [ W a a W a x ] [ a < t − 1 > x < t > ] = W a [ a < t − 1 > , x < t > ] W_{aa}a^{<t-1>}+W_{ax}x^{<t>}=[W_{aa} W_{ax}]\begin{bmatrix} a^{<t-1>} \\ x^{<t>} \\ \end{bmatrix}=W_a[a^{<t-1>},x^{<t>}] Waaa<t1>+Waxx<t>=[WaaWax][a<t1>x<t>]=Wa[a<t1>,x<t>]
则正向传播可表示为:
a < t > = g ( W a [ a < t − 1 > , x < t > ] + b a ) a^{<t>}=g(W_a[a^{<t-1>},x^{<t>}]+b_a) a<t>=g(Wa[a<t1>,x<t>]+ba)
y ^ < t > = g ( W y a < t > + b y ) \hat y^{<t>}=g(W_{y}a^{<t>}+b_y) y^<t>=g(Wya<t>+by)
- RNN反向传播过程为:
进过RNN正向传播,单个元素的loss function为:
L < t > ( y ^ < t > , y < t > ) = − y < t > l o g y ^ < t > − ( 1 − y < t > ) l o g ( 1 − y ^ < t > ) L^{<t>}(\hat y^{<t>},y^{<t>})=-y^{<t>}log \hat y^{<t>}-(1-y^{<t>})log(1-\hat y^{<t>}) L<t>(y^<t>,y<t>)=y<t>logy^<t>(1y<t>)log(1y^<t>)
该样本的所有元素的loss function为:
L ( y ^ , y ) = ∑ t = i T y L < t > ( y ^ < t > , y < t > ) L(\hat y,y)=\sum_{t=i}^{T_y}L^{<t>}(\hat y^{<t>},y^{<t>}) L(y^,y)=t=iTyL<t>(y^<t>,y<t>)
然后,反向传播过程就是从右到左分别计算 L ( y ^ , y ) L(\hat y,y) L(y^,y)对参数 W a , W y , b a , b y W_a,W_y,b_a,b_y Wa,Wy,ba,by的偏导数。

1.2、BRNN

在这里插入图片描述
输出 y < t > y^{<t>} y<t>表达式为:
y ^ < t > = g ( W y [ a − > < t > , a < − < t > ] + b y ) \hat y^{<t>}=g(W_y[a^{-><t>},a^{<-<t>}]+b_y) y^<t>=g(Wy[a><t>,a<<t>]+by)
特点:

  • 模型能够考虑前面的信息,也能考虑后面的信息。
  • 模型必须是一个完整的数据的序列,才能预测任意位置。

1.3、Deep RNNs

Deep RNNs由多层RNN组成,其结构如下图所示:
在这里插入图片描述
Deep RNNs中 a [ l ] < t > a^{[l]<t>} a[l]<t>的表达式为:
a [ l ] < t > = g ( W a [ l ] [ a [ l ] < t − 1 > , a [ l − 1 ] < t > ] + b a ) a^{[l]<t>}=g(W_a^{[l]}[a^{[l]<t-1>},a^{[l-1]<t>}]+b_a) a[l]<t>=g(Wa[l][a[l]<t1>,a[l1]<t>]+ba)
在这里插入图片描述

二、不同类型的RNNs

  • many to many: T x = Y y T_x = Y_y Tx=Yy
  • many to many: T x ≠ Y y T_x \neq Y_y Tx=Yy
  • many to one: T x > 1 , T y = 1 T_x >1,T_y =1 Tx>1,Ty=1
  • one to many: T x = 1 , Y y > 1 T_x =1,Y_y>1 Tx=1,Yy>1
  • one to one: T x = 1 , Y y = 1 T_x =1, Y_y=1 Tx=1,Yy=1
    在这里插入图片描述

三、利用RNN解决现实生活的问题

3.1、建立语言模型

  • 什么是语言模型?
    计算某个语句的概率,选择概率最大的语句作为正确的翻译。
  • 如何使用RNN构建语言模型?
    需要一个由大量的单词语句语料库corpus构成的训练集,然后对corpus的每句话进行切分词tokenize(建立vocabulary,对每个单词进行one-hot编码)。
  • 达到什么效果?
    对语料库的每条语句进行RNN模型训练,最终得到的模型可以根据给出语句的前几个单词预测其余部分。
  • 补充
    整个语句出现的概率等于语句中所有元素出现的条件概率乘积。例如某个语句包含 y < 1 > , y < 2 > , y < 3 > , y^{<1>},y^{<2>},y^{<3>}, y<1>,y<2>,y<3>,则整个语句出现的概率为:
    P ( y < 1 > , y < 2 > , y < 3 > ) = P ( y < 1 > ) ∗ P ( y < 2 > ∣ y < 1 > ) ∗ P ( y < 3 > ∣ y < 1 > , y < 2 > ) P(y^{<1>},y^{<2>},y^{<3>})=P(y^{<1>})*P(y^{<2>}|y^{<1>})*P(y^{<3>}|y^{<1>},y^{<2>}) P(y<1>,y<2>,y<3>)=P(y<1>)P(y<2>y<1>)P(y<3>y<1>,y<2>)

3.2、新的序列采用

利用训练好的RNN语言模型,可以进行新的序列采样,从而随机产生新的语句。
在这里插入图片描述

四、RNN的缺点

4.1、梯度爆炸

4.1.1、解决1:梯度剪枝:设定一个阈值,一旦梯度最大值达到这个阈值,就对整个梯度向量进行尺度缩小。

  • 梯度消失
    • 解决1:添加记忆单元c,构建GRU
      在这里插入图片描述
      相应的表达式为:
      c ~ < t > = t a n h ( W c [ Γ r ∗ c < t − 1 > , x < t > ] + b c ) \tilde{c}^{<t>}=tanh(W_c[\Gamma_{r}*c^{<t-1>},x^{<t>}]+b_c) c~<t>=tanh(Wc[Γrc<t1>,x<t>]+bc)
      Γ u = σ ( W u [ c < t − 1 > , x < t > ] + b u ) \Gamma_{u}=\sigma(W_u[c^{<t-1>},x^{<t>}]+b_u) Γu=σ(Wu[c<t1>,x<t>]+bu)
      Γ r = σ ( W r [ c < t − 1 > , x < t > ] + b r ) \Gamma_{r}=\sigma(W_r[c^{<t-1>},x^{<t>}]+b_r) Γr=σ(Wr[c<t1>,x<t>]+br)
      c < t > = Γ ∗ c ~ < t > + ( 1 − Γ u ) ∗ c < t − 1 > c^{<t>}=\Gamma*\tilde{c}^{<t>}+(1-\Gamma_{u})*c^{<t-1>} c<t>=Γc~<t>+(1Γu)c<t1>
      a < t > = c < t > a^{<t>}=c^{<t>} a<t>=c<t>
      注意:
      候选值: c ~ < t > \tilde{c}^{<t>} c~<t>,代替表示 c < t > c^{<t>} c<t>
      相关性门: Γ r \Gamma_{r} Γr,计算出的下一个 c < t > c^{<t>} c<t>的候选值 c ~ < t > \tilde{c}^{<t>} c~<t> c < t − 1 > c^{<t-1>} c<t1>有多大的相关性。
      更新门: Γ u \Gamma_{u} Γu,取值为0或1,0代表不更新,1代表更新。

4.1.2、解决2:LSTM

在这里插入图片描述
相应表达式:
c ~ < t > = t a n h ( W c [ a < t − 1 > , x < t > ] + b c ) \tilde{c}^{<t>}=tanh(W_c[a^{<t-1>},x^{<t>}]+b_c) c~<t>=tanh(Wc[a<t1>,x<t>]+bc)
Γ u = σ ( W u [ a < t − 1 > , x < t > ] + b u ) \Gamma_{u}=\sigma(W_u[a^{<t-1>},x^{<t>}]+b_u) Γu=σ(Wu[a<t1>,x<t>]+bu)
Γ r = σ ( W r [ a < t − 1 > , x < t > ] + b r ) \Gamma_{r}=\sigma(W_r[a^{<t-1>},x^{<t>}]+b_r) Γr=σ(Wr[a<t1>,x<t>]+br)
Γ o = σ ( W o [ a < t − 1 > , x < t > ] + b o ) \Gamma_{o}=\sigma(W_o[a^{<t-1>},x^{<t>}]+b_o) Γo=σ(Wo[a<t1>,x<t>]+bo)
c < t > = Γ u ∗ c ~ < t > + Γ f ∗ c < t − 1 > c^{<t>}=\Gamma_u*\tilde{c}^{<t>}+\Gamma_{f}*c^{<t-1>} c<t>=Γuc~<t>+Γfc<t1>
a < t > = Γ o c < t > a^{<t>}=\Gamma_{o}c^{<t>} a<t>=Γoc<t>
参数详情:
更新门: Γ u \Gamma_{u} Γu
遗忘门: Γ f \Gamma_{f} Γf
输出门: Γ o \Gamma_{o} Γo
如果考虑 c < t − 1 > c^{<t-1>} c<t1> Γ u 、 Γ f 、 Γ o \Gamma_{u}、\Gamma_{f}、\Gamma_{o} ΓuΓfΓo的影响,可加入 c < t − 1 > c^{<t-1>} c<t1>,则修改后的表达式为:
c ~ < t > = t a n h ( W c [ a < t − 1 > , x < t > ] + b c ) \tilde{c}^{<t>}=tanh(W_c[a^{<t-1>},x^{<t>}]+b_c) c~<t>=tanh(Wc[a<t1>,x<t>]+bc)
Γ u = σ ( W u [ a < t − 1 > , x < t > , c < t − 1 > ] + b u ) \Gamma_{u}=\sigma(W_u[a^{<t-1>},x^{<t>},c^{<t-1>}]+b_u) Γu=σ(Wu[a<t1>,x<t>,c<t1>]+bu)
Γ r = σ ( W r [ a < t − 1 > , x < t > , c < t − 1 > ] + b r ) \Gamma_{r}=\sigma(W_r[a^{<t-1>},x^{<t>},c^{<t-1>}]+b_r) Γr=σ(Wr[a<t1>,x<t>,c<t1>]+br)
Γ o = σ ( W o [ a < t − 1 > , x < t > , c < t − 1 > ] + b o ) \Gamma_{o}=\sigma(W_o[a^{<t-1>},x^{<t>},c^{<t-1>}]+b_o) Γo=σ(Wo[a<t1>,x<t>,c<t1>]+bo)
c < t > = Γ u ∗ c ~ < t > + Γ f ∗ c < t − 1 > c^{<t>}=\Gamma_u*\tilde{c}^{<t>}+\Gamma_{f}*c^{<t-1>} c<t>=Γuc~<t>+Γfc<t1>
a < t > = Γ o c < t > a^{<t>}=\Gamma_{o}c^{<t>} a<t>=Γoc<t>

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值