5.1循环序列模型

觉得有用的话,欢迎一起讨论相互学习~Follow Me

1.7对新序列采样

基于词汇进行采样模型

  • 在训练完一个模型之后你想要知道模型学到了什么,一种非正式的方法就是进行一次新序列采样。

    • 一个序列模型模拟了任意特定单词序列的概率,对新序列采样即是对概率分布进行采样来生成一个新的单词序列。
    • 假设你的RNN训练模型为:
  • 对于新序列进行采样第一步即是对想要模型生成的第一个词进行采样
    • 设置\(a^{<0>}=0,x^{<1>}=0\)从而得到所有可能的输出结果\(\hat{y}^{<1>}\), \(\hat{y}^{<1>}\)是经过softmax层后得到的概率,然后根据经过softmax层后得到的分布进行随机采样。
    • 然后继续下一个时间步,但是和训练RNN不同的是,在第二个时间步中输入的不是正确的\(y^{<1>}\),而是把刚刚采样得到的\(\hat{y}^{<1>}\)作为下一个时间步的输入。
    • 然后对第二个时间步的预测得到的输出\(\hat{y}^{<2>}\)进行采样并作为第三个时间步的输入...直到达到最后一个时间步。
  • 对于采样完成有两种判定方法:
    • 一直在字典集中进行采样,直到得到标识,这表明可以停止采样了。
    • 如果在时间步的结尾,字典中没有这个词,你可以从20个或100个或其他单词中进行采样,然后一直抽样下去,直到达到设定的时间步。但是如果在此过程中又出现了 unknown word,则可以进行重采样,直到得到一个不是一个未知标识的词。如果不介意UNK的话,也可以忽略这些未知的单词。

      基于字符进行采样模型

  • 根据实际问题,还可以建立基于字符的RNN结构,你的字典仅包含从a到z的字母,可能还会有空格符,数字0-9,还有大写的A-Z字母,还有数据集中出现的特殊字符。最终使用这些字符组成你的字典。
  • 这样每次RNN推断的输出都是字母而不是单独的词汇。
  • 优点与缺点
    • 优点

      • 优点是不会出现未知的标识
    • 缺点
      • 缺点是使用字符进行采样的模型会得到很多很长的序列
      • 因为一句话中的英文单词仅有几十个,但是字符的长度却有很多个,这样使得RNN的长度过大,使得其不可以捕捉长范围的关系,而且训练起来计算成本比较高昂。
    • 所以现有的RNN都是使用基于单词的采样,但是随着计算机性能越来越高,使用基于字符进行采样也是一种趋势。

      序列生成

  • 使用新闻的语料库作为训练集,则生成的序列带有明显的新闻语感。
  • 使用莎士比亚的语料库作为训练集,则生成的序列带有明显的莎士比亚风格。

1.8RNN的梯度消失vanishing gradient

  • 基本的RNN有一个很大的问题,就是梯度消失问题

    梯度消失vanishing gradient

  • 示例
  • THe cat, which already ate a bunch of food that was delicious ....was full.
  • THe cats, which already ate a bunch of food that was delicious ....were full.
  • 注意句式中的单复数问题,cat作为主语,则使用was,cats作为主语,则使用were.
  • 主语和谓语的单复数关系,因为有从句(即主语和谓语之间的距离可以足够长)的关系,在时间上往往具有 很长时间的依赖效应(long-term dependencies)
  • 但是普通的RNN并不擅长捕捉这种长期依赖效应(因为具有梯度消失的问题)。

    梯度爆炸exploding gradients

  • 梯度不仅仅会指数级别的下降,也会指数级别的上升--即梯度爆炸(exploding gradients),导致参数的数量级及其巨大会看见许多NaN或者不是数字的情况--这意味着网络的计算出现了数值溢出。
  • 如果出现了梯度爆炸的问题,一个解决方法就是使用梯度修剪(gradient clipping).即--设置一个梯度的天花板,梯度不能超过这个阈值,并对梯度进行缩放。


1.9GRU Gate Recurrent Unit门控循环神经网络

  • GRU网络改变了RNN的隐层结构,可以捕捉深层连接,并改善了梯度消失问题。

  • \(a^{<t>}=g(W_{a}[a^{<t-1>},x^{<t>}]+b_{a})\)

[1] Cho K, Van Merrienboer B, Bahdanau D, et al. On the Properties of Neural Machine Translation: Encoder-Decoder Approaches[J]. Computer Science, 2014.
[2] Chung J, Gulcehre C, Cho K H, et al. Empirical Evaluation of Gated Recurrent Neural Networks on Sequence Modeling[J]. Eprint Arxiv, 2014.

门控循环神经网络单元GRU

  • The cat , which already ate ..., was full
  • 为了记住话语中cat是单数还是复数,在时间T上需要使用记忆细胞memory cell 记住cat这个单词,并且 \(c^{<t>}=a^{<t>}\)
    • 在每一个时间步t,都将用一个候选值\(\breve{c}^{<t>}\)重写记忆细胞的值
    • 其中: \[\breve{c}^{<t>}=Tanh(W_{c}[c^{<t-1>},x^{<t>}]+b_{c})[1]\]
  • GRU中真正重要的思想是,GRU中有一个门Gate(\(\gamma_u\)) 这是一个0到1之间的值
    • \[\gamma_u=\sigma(W_{u}[c^{<t-1>},x^{<t>}]+b_{u})[2]\]
  • [1]式是\(\breve{c}^{<t>}\)的更新公式,[2]式计算的值用以控制是否采用[1]式进行更新
  • 在此例中如果cat变为cats \(\breve{c}^{<t>}\)用以控制was和were的值,而\(\gamma_u\)用以控制 在何时将was变为were
    • \[C^{<t>}=\gamma_u * \breve{C}^{<t>}+(1-\gamma_u) * C^{<t-1>}\]
      如果\(\gamma_u=1\)则\(C^{<t>}=\breve{C}^{<t>}\),\(\gamma_u=0\)则\(C^{<t>}=C^{<t-1>}\),即时间步没有扫到was时,\(\gamma_u一直=0,此时C^{<t>}=c^{<t-1>}\),则C一直等于旧的值。而当时间步扫到"was"时,\(\gamma_u=1\),此时\(C^{<t>}=\breve{C}^{<t>}\)

GRU计算过程

  1. GRU单元输入\(C^{<t-1>}\)对应于上一个时间步,先假设其正好等于\(a^{<t-1>}\), 然后\(x^{<t>}\)也作为输入,然后把这两个用合适的权重结合在一起再用Tanh计算,算出\(\breve{c}^{<t>}\)即\(c^{<t>}\)的替代值
  2. 再用一个不同的参数集,通过\(\sigma\)函数计算出\(\gamma_u\),即更新门。
  3. 最后所有的值通过另一个运算符结合: \[C^{<t>}=\gamma_u * \breve{C}^{<t>}+(1-\gamma_u) * C^{<t-1>}\],其输入一个门值,新的候选值和旧的记忆细胞值,得到记忆细胞的新值\(c^{<t>}=a^{<t>}\),也可以把这个值传入Softmax单元中,并计算出预测序列\(\hat{y}^{<t>}\)

    GRU优点/font>

  • 当你从左往右扫描一整个句子时,控制记忆细胞"不更新不更新不更新... 更新 "
  • 因为门的值很容易取到0,只要激活函数的输入是一个很大的负数,则激活函数的输出值就是一个很接近与0的值。所以 \(C^{<t>}=\gamma_u * \breve{C}^{<t>}+(1-\gamma_u) * C^{<t-1>}\) 中\(C^{<t>}=C^{<t-1>}\)则即是经过很多的时间步,记忆神经细胞的值都会很好的维持了下来--这样就避免了梯度消失的问题。这样可以保证RNN运行在十分庞大的依赖词上。

Note/font>

  • \(C^{<t>},\breve{C}^{<t>},\gamma_u\)是具有一样的维度的向量,其中维度和隐藏层的激活值的个数相等。

    完整GRU

[DeeplearningAI笔记]序列模型1.7-1.9RNN对新序列采样/GRU门控循环神经网络的更多相关文章

  1. 序列模型(4)----门控循环单元(GRU)

    一.GRU 其中, rt表示重置门,zt表示更新门. 重置门决定是否将之前的状态忘记.(作用相当于合并了 LSTM 中的遗忘门和传入门) 当rt趋于0的时候,前一个时刻的状态信息ht−1会被忘掉,隐藏 ...

  2. [DeeplearningAI笔记]序列模型1.10-1.12LSTM/BRNN/DeepRNN

    5.1循环序列模型 觉得有用的话,欢迎一起讨论相互学习~Follow Me 1.10长短期记忆网络(Long short term memory)LSTM Hochreiter S, Schmidhu ...

  3. DLNg序列模型第一周

    1.为何选择序列模型? 给出上面一些序列数据的例子,真的很神奇,语音识别.音乐生成.情感分类.DNS序列分析.机器翻译.视频活动检测.命名实体识别. 2.数字符号 对于输入序列x,进行人名识别,输出中 ...

  4. 吴恩达《深度学习》第五门课(1)循环序列模型(RNN)

    1.1为什么选择序列模型 (1)序列模型广泛应用于语音识别,音乐生成,情感分析,DNA序列分析,机器翻译,视频行为识别,命名实体识别等众多领域. (2)上面那些问题可以看成使用(x,y)作为训练集的监 ...

  5. 序列模型(5)-----双向神经网络(BRNN)和深层循环神经网络(Deep RNN)

    一.双向循环神经网络BRNN 采用BRNN原因: 双向RNN,即可以从过去的时间点获取记忆,又可以从未来的时间点获取信息.为什么要获取未来的信息呢? 判断下面句子中Teddy是否是人名,如果只从前面两 ...

  6. 【学习笔记】循环神经网络(RNN)

    前言 多方寻找视频于博客.学习笔记,依然不能完全熟悉RNN,因此决定还是回到书本(<神经网络与深度学习>第六章),一点点把啃下来,因为这一章对于整个NLP学习十分重要,我想打好基础. 当然 ...

  7. 吴恩达deepLearning.ai循环神经网络RNN学习笔记_看图就懂了!!!(理论篇)

    前言 目录: RNN提出的背景 - 一个问题 - 为什么不用标准神经网络 - RNN模型怎么解决这个问题 - RNN模型适用的数据特征 - RNN几种类型 RNN模型结构 - RNN block - ...

  8. 吴恩达deepLearning.ai循环神经网络RNN学习笔记_没有复杂数学公式,看图就懂了!!!(理论篇)

    本篇文章被Google中国社区组织人转发,评价: 条理清晰,写的很详细! 被阿里算法工程师点在看! 所以很值得一看! 前言 目录: RNN提出的背景 - 一个问题 - 为什么不用标准神经网络 - RN ...

  9. [DeeplearningAI笔记]序列模型3.9-3.10语音辨识/CTC损失函数/触发字检测

    5.3序列模型与注意力机制 觉得有用的话,欢迎一起讨论相互学习~Follow Me 3.9语音辨识 Speech recognition 问题描述 对于音频片段(audio clip)x ,y生成文本 ...

随机推荐

  1. CQOI2018 游记 再见OI,既是反思,也是祝福

    哎,怎么说呢? 时运不齐,命途多舛? 从头开始说吧. 今年的NOIP大家考的都不尽人意,每个人都有或多或少的失误,全部都几十分几十分地丢.最后大家剩下的觉得可能冲击一下省队的人一共只有7个. 伙伴们变 ...

  2. Leftmost Digit(数学)

    Description Given a positive integer N, you should output the leftmost digit of N^N.   Input The inp ...

  3. asp.netcore mvc 权限拦截

    1-背景介绍 需要做一个简单权限系统,基于 角色,用户,菜单 的模式 基于IActionFilter全局拦截,在内部跳转或者浏览器跳转的时候,拦截是成功的,当通过AJAX 请求的时候,页面就不会跳转 ...

  4. FormsAuthentication.SetAuthCookie 方法登录

    FormsAuthentication.SetAuthCookie 方法,登录的原理. FormsAuthentication.SetAuthCookie 方法登录的过期时间. 登录相关阅读 asp. ...

  5. BETA阶段冲刺

    1.介绍小组新加入的成员,Ta担任的角色 新成员 担任工作 江鹭涛 前端设计 2.讨论是否需要更换团队的PM 不需要,上阶段配合不错,这阶段继续努力 3.下一阶段需要改进完善的功能 服务器并发处理,界 ...

  6. android入门 — Activity生命周期

    Activity总共有7个回调方法,代表着不同的生命周期的环节. 1.onCreate() 在活动第一次被创建的时候调用.在这个方法中需要完成活动的初始化操作,比如说加载布局.绑定事件等. 2.onS ...

  7. sed条件不修改匹配

    sed '/^echo/!s/text/subtext/g' 如果是以echo开始行首的行就不进行替换. 参考sed substitution conditional

  8. [Google] 看雪论坛: 安卓碎片化的情况

    2018年10月28日早间消息,谷歌方面发布了Android各版本的最新份额数据,截止到10月26日.即便是已经推出3个月了,Android 9 Pie系统的用户数仍旧没有超过0.1%,导致未出现在榜 ...

  9. 使用ASP.NET Identity 实现WebAPI接口的Oauth身份验证

    使用ASP.NET Identity 实现WebAPI接口的Oauth身份验证   目前WEB 前后端分离的开发模式比较流行,之前做过的几个小项目也都是前后分离的模式,后端使用asp.net weba ...

  10. Python @retry装饰器的使用与实现案例(requests请求失败并重复请求)

    在爬虫代码的编写中,requests请求网页的时候常常请求失败或错误,一般的操作是各种判断状态和超时,需要多次重试请求,这种情况下,如果想优雅的实现功能,可以学习下retrying包下的retry装饰 ...