吴恩达DeepLearning.ai笔记(5-1)-- 循环序列模型

吴恩达DeepLearning.ai笔记(5-1)– 循环序列模型

1.一些序列数据例子

这里写图片描述

2.数学符号

这里写图片描述
x<1> x < 1 > 输入序列X第一个单词, Tix T x i 输入序列X的单词个数, Xi<t> X ( i ) < t > 第i个输入序列的第t个单词

  • one-hot表示法
    这里写图片描述
3.循环神经网络模型

这里写图片描述

  • 为什么不使用传统的神经网络?

    1. 输入和输出数据在不同例子中可以有不同长度,即 Tx T x Ty T y 在每个例子中不一定相同;
    2. 从文本不同位置学到的特征不能共享,举例来说已经识别出位置 x1 x 1 出现的Herry是人名的一部分,那么Herry出现在其他位置上,例如位置 xt x t 也是Herry,我们希望它能自动识别出该位置也为人名的一部分。
  • 循环神经网络(RNN)

  • RNN两种表示图例,RNN的限制是在某一时刻的预测仅使用了序列之前的输入信息,没有使用序列后面的信息
    这里写图片描述

  • RNN前向传播
    这里写图片描述

    a<t>=g1(waaa<t1>+waxx<t>+ba) a < t > = g 1 ( w a a a < t − 1 > + w a x x < t > + b a )
    y^<t>=g2(wyaa<t>+by) y ^ < t > = g 2 ( w y a a < t > + b y )

    激活函数 g1 g 1 可以是tanh也可以是Relu, g2 g 2 如果是二分类选择sigmoid函数,多分类可以用softmax。

  • 简化RNN符号
    这里写图片描述
  • 通过时间反向传播
    这里写图片描述
    这里写图片描述
    损失函数
    L<t>(y^<t>,y<t>)=y<t>logy^<t>(1y<t>)log(1y^<t>) L < t > ( y ^ < t > , y < t > ) = − y < t > l o g y ^ < t > − ( 1 − y < t > ) l o g ( 1 − y ^ < t > ) L(y^,y)=Tyt=1L<t>(y^<t>,y<t>) L ( y ^ , y ) = ∑ t = 1 T y L < t > ( y ^ < t > , y < t > )
4.不同类型的循环神经网络

  分为以下五种类型
这里写图片描述
一对一:传统的神经网络 一对多:音乐生成 多对一:情感分类 多对多( Tx=Ty T x = T y :命名实体识别 多对多(T_x!=T_y):机器翻译

5.语言模型和序列生成
  • 什么是语言模型
    这里写图片描述
      语言模型所做的就是它会告诉你某个特定的句子出现的概率是多少,它是语音识别系统和机器翻译系统的基本组成部分。语言模型做的基本工作是输入文本序列 (y<1>,y<2>...y<Ty>) ( y < 1 > , y < 2 > . . . y < T y > ) ,估计序列中各个单词出现的可能性

  • 用RNN构建语言模型

    1. 首先有一个英文文本语料库,语料库由数量众多的句子或文本组成。
    2. 标记化(Tokenize)句子,可以采用one-hot进行标记化 , EOS表示句子结束,UNK表示文本未知。
    3. 用RNN构建语言模型,如下图所示 x<1> x < 1 > , a<0> a < 0 > 初始化为0向量,经过softmax函数计算出 y^<1> y ^ < 1 > (字典中任意的词为第一个词的概率), x<2>=y<1> x < 2 > = y < 1 > y^<2>=p(average|cats) y ^ < 2 > = p ( a v e r a g e | c a t s ) ,以此类推……
      采用交叉熵函数作为损失函数
      这里写图片描述
6.新序列采样

  当训练好一个序列模型时,我们想要知道序列模型学到了什么,一个非正式的方法就是进行一次新序列采样。
  一个序列模型模拟了任意特定单词序列的概率,我们要做的是根据这个概率分布进行采样,生成一个新的单词序列。
这里写图片描述
  采样过程:输入 a<0> a < 0 > =0, x<1> x < 1 > =0,第一个时间步得到所有可能的输出,即经过softmax层得到的概率,根据softmax分布进行随机采样,np.random.choice随机采样,得到 y^<1> y ^ < 1 > ,将 y^<1> y ^ < 1 > 作为第二个时间步的输入,即 x<2>=y^<1> x < 2 > = y ^ < 1 > ,以此类推……采样若输出EOS,采样停止。
  

  • 基于字符的语言模型
    这里写图片描述
    基于字符的语言模型不会出现未知标识EOS这种情况,但其最后会得到太多太长的序列,在捕获句子中的依赖关系上不如基于词汇的语言模型。基于字符的语言模型计算代价高昂。

  • 采用不同的语料训练出的模型
    这里写图片描述

7.传统RNN的缺点

这里写图片描述

  • 梯度消失问题
      梯度消失问题导致基本的RNN不擅长处理长期依赖的问题。
      举一个例子:
      句1:The cat which already ate…,was full.
      句 2:The cats which already ate…,were full.
      两个句子中cat/cats和was/were应保持一致,这表明句子前面的单词对句子后面的单词有长期依赖,但是传统的RNN不善于捕获这种长期依赖效应,为什么那?之前讨论的在深层神经网络模型中存在的梯度消失问题(如上图所示),即输出y的梯度很难传播回去,即很难影响前面层的权重计算;同样,在RNN中也存在一样的问题。梯度消失问题在例子中也就意味着很难让一个神经网络记住看到的是单数名词还是复数名词,然后在句子后部生成依赖单复数形式的was或were。
      所以基本的RNN模型会有很多局部影响,即 y<3> y < 3 > 主要受 y<3> y < 3 > 附近的值的影响,很难受到较远的值的影响。
  • 梯度爆炸问题
      在很深的神经网络中,反向传播时随着层数的增多,梯度不止可以指数级的下降也可以指数级的上升。事实上,梯度下降在训练RNN时是首要问题,尽管梯度爆炸也会出现,但是梯度爆炸很明显,因为指数级的梯度会让你的参数变的极其大,以至于你的网络参数崩溃,所以梯度爆炸很容易发现。当出现NaN或者不是数字的情况时,意味着网络计算出现了数值溢出。可以用梯度修剪(gradient clipping)解决梯度爆炸问题。
      梯度修剪是观察梯度向量,若大于某个阈值,缩放梯度向量,保证它不会太大
8.门控循环单元GRU
  • RNN隐藏单元可视化
    这里写图片描述
  • 简单的GRU
    这里写图片描述
    c:记忆细胞
    c<t>=a<t> c < t > = a < t >
    c~<t>=tanh(Wc[c<t1>,x<t>]+bc) c ~ < t > = t a n h ( W c [ c < t − 1 > , x < t > ] + b c )
    更新门: Γu=σ(Wu[c<t1>,x<t>]+bu) Γ u = σ ( W u [ c < t − 1 > , x < t > ] + b u )
    c<t>=Γuc~<t>+1Γuc<t1> c < t > = Γ u ∗ c ~ < t > + ( 1 − Γ u ) ∗ c < t − 1 >
    GRU优点:当从左向右扫描句子时,通过门决定什么时间更新记忆细胞,缓解了梯度消失问题
  • 完整的GRU单元
    这里写图片描述

    9.长短时记忆网络LSTM

    相较于GRU,LSTM多了遗忘门、输出门
    这里写图片描述
    这里写图片描述

  • 窥视孔连接(peephole connection):门值不仅取决于 a<t1> a < t − 1 > , x<t> x < t > ,有时也取决于 c<t1> c < t − 1 >

9.双向循环神经网络(Bidirectional RNN)
  • 单向RNN遇到的问题
    这里写图片描述
      如果不根据Teddy后面的词判断,是很难识别出Teddy是否是它是不是人名。
    这里写图片描述
    y^<t>=g(wy[a⃗ <t>,a<t>]+by) y ^ < t > = g ( w y [ a → < t > , a ← < t > ] + b y )

      例如计算 y^<3> y ^ < 3 > ,首先我们计算 a⃗ <1> a → < 1 > , a⃗ <2> a → < 2 > , a⃗ <3> a → < 3 > ,然后计算 a<4> a ← < 4 > a<3> a ← < 3 > ,最后根据公式得出 y^<3> y ^ < 3 >
      BRNN缺点:需要完整的序列才能预测序列中的任意位置。
10.深层循环神经网络

这里写图片描述
   a[l]<t> a [ l ] < t > 表示第l层t时刻的激活值,上图是一个3层的RNN,在输出前加一个深层网络的模型也是很常见。每个单元可以是标准RNN单元、GRU、LSTM均可,每一层采用BRNN也是可以的。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值