←上一篇 ↓↑ 下一篇→
1.10 长短期机器 (LSTM) 回到目录 1.12 深层循环神经网络

双向循环神经网络 (Bidirectional RNN)

现在,你已经了解了大部分RNN模型的关键的构件,还有两个方法可以让你构建更好的模型,其中之一就是双向RNN模型,这个模型可以让你在序列的某点处不仅可以获取之前的信息,还可以获取未来的信息,我们会在这个视频里讲解。第二个就是深层的RNN,我们会在下个视频里见到,现在先从双向RNN开始吧。

为了了解双向RNN的动机,我们先看一下之前在命名实体识别中已经见过多次的神经网络。这个网络有一个问题,在判断第三个词Teddy(上图编号1所示)是不是人名的一部分时,光看句子前面部分是不够的,为了判断 y^<3>\hat{y}^{<3>}y^​<3> (上图编号2所示)是0还是1,除了前3个单词,你还需要更多的信息,因为根据前3个单词无法判断他们说的是Teddy熊,还是前美国总统Teddy Roosevelt,所以这是一个非双向的或者说只有前向的RNN。我刚才所说的总是成立的,不管这些单元(上图编号3所示)是标准的RNN块,还是GRU单元或者是LSTM单元,只要这些构件都是只有前向的。

那么一个双向的RNN是如何解决这个问题的?下面解释双向RNN的工作原理。为了简单,我们用四个输入或者说一个只有4个单词的句子,这样输入只有4个, x<1>x^{<1>}x<1> 到 x<4>x^{<4>}x<4> 。从这里开始的这个网络会有一个前向的循环单元叫做 a→<1>,a→<2>,a→<3>\overrightarrow{a}^{<1>},\overrightarrow{a}^{<2>},\overrightarrow{a}^{<3>}a<1>,a<2>,a<3> 还有 a→<4>\overrightarrow{a}^{<4>}a<4> ,我在这上面加个向右的箭头来表示前向的循环单元,并且他们这样连接(下图编号1所示)。这四个循环单元都有一个当前输入 xxx 输入进去,得到预测的 y^<1>,y^<2>,y^<3>\hat{y}^{<1>},\hat{y}^{<2>},\hat{y}^{<3>}y^​<1>,y^​<2>,y^​<3> 和 y^<4>\hat{y}^{<4>}y^​<4> 。

到目前为止,我还没做什么,仅仅是把前面幻灯片里的RNN画在了这里,只是在这些地方画上了箭头。我之所以在这些地方画上了箭头是因为我们想要增加一个反向循环层,这里有个 a←<1>\overleftarrow{a}^{<1>}a<1> ,左箭头代表反向连接, a←<2>\overleftarrow{a}^{<2>}a<2> 反向连接, a←<3>\overleftarrow{a}^{<3>}a<3> 反向连接, a←<4>\overleftarrow{a}^{<4>}a<4> 反向连接,所以这里的左箭头代表反向连接。

同样,我们把网络这样向上连接,这个反向连接就依次反向向前连接(上图编号2所示)。这样,这个网络就构成了一个无环图。给定一个输入序列 x<1>x^{<1>}x<1> 到 x<4>x^{<4>}x<4> ,这个序列首先计算前向的 a→<1>\overrightarrow{a}^{<1>}a<1> ,然后计算前向的 a→<2>\overrightarrow{a}^{<2>}a<2> ,接着 a→<3>,a→<4>\overrightarrow{a}^{<3>},\overrightarrow{a}^{<4>}a<3>,a<4> 。而反向序列从计算 a←<4>\overleftarrow{a}^{<4>}a<4> 开始,反向进行,计算反向的a←<3>\overleftarrow{a}^{<3>}a<3>。你计算的是网络激活值,这不是反向而是前向的传播,而图中这个前向传播一部分计算是从左到右,一部分计算是从右到左。计算完了反向的 a←<3>\overleftarrow{a}^{<3>}a<3> ,可以用这些激活值计算反向的 a←<2>\overleftarrow{a}^{<2>}a<2> ,然后是反向的 a←<1>\overleftarrow{a}^{<1>}a<1> ,把所有这些激活值都计算完了就可以计算预测结果了。

举个例子,为了预测结果,你的网络会有如 y^<t>\hat{y}^{<t>}y^​<t> , y^<t>=g(Wg[a→<1>,a←<1>]+by)\hat{y}^{<t>}=g(W_g[\overrightarrow{a}^{<1>},\overleftarrow{a}^{<1>}] +b_y)y^​<t>=g(Wg​[a<1>,a<1>]+by​) (上图编号1所示)。比如你要观察时间3这里的预测结果,信息从 x<1>x^{<1>}x<1> 过来,流经这里,前向的 a←<1>\overleftarrow{a}^{<1>}a<1> 到前向的 a→<2>\overrightarrow{a}^{<2>}a<2> ,这些函数里都有表达,到前向的 a→<3>\overrightarrow{a}^{<3>}a<3> 再到 y^<3>\hat{y}^{<3>}y^​<3> (上图编号2所示的路径),所以从 x<1>,x<2>,x<3>x^{<1>},x^{<2>},x^{<3>}x<1>,x<2>,x<3> 来的信息都会考虑在内,而从 x<4>x^{<4>}x<4> 来的信息会流过反向的 a←<4>\overleftarrow{a}^{<4>}a<4> ,到反向的 a←<3>\overleftarrow{a}^{<3>}a<3> 再到 y^<3>\hat{y}^{<3>}y^​<3> (上图编号3所示的路径)。这样使得时间3的预测结果不仅输入了过去的信息,还有现在的信息,这一步涉及了前向和反向的传播信息以及未来的信息。给定一个句子"He said Teddy Roosevelt…"来预测Teddy是不是人名的一部分,你需要同时考虑过去和未来的信息。

这就是双向循环神经网络,并且这些基本单元不仅仅是标准RNN单元,也可以是GRU单元或者LSTM单元。事实上,很多的NLP问题,对于大量有自然语言处理问题的文本,有LSTM单元的双向RNN模型是用的最多的。所以如果有NLP问题,并且文本句子都是完整的,首先需要标定这些句子,一个有LSTM单元的双向RNN模型,有前向和反向过程是一个不错的首选。

以上就是双向RNN的内容,这个改进的方法不仅能用于基本的RNN结构,也能用于GRULSTM。通过这些改变,你就可以用一个用RNNGRULSTM构建的模型,并且能够预测任意位置,即使在句子的中间,因为模型能够考虑整个句子的信息。这个双向RNN网络模型的缺点就是你需要完整的数据的序列,你才能预测任意位置。比如说你要构建一个语音识别系统,那么双向RNN模型需要你考虑整个语音表达,但是如果直接用这个去实现的话,你需要等待这个人说完,然后获取整个语音表达才能处理这段语音,并进一步做语音识别。对于实际的语音识别的应用通常会有更加复杂的模块,而不是仅仅用我们见过的标准的双向RNN模型。但是对于很多自然语言处理的应用,如果你总是可以获取整个句子,这个标准的双向RNN算法实际上很高效。

好的,这就是双向RNN,下一个视频,也是这周的最后一个,我们会讨论如何用这些概念,标准的RNNLSTM单元,GRU单元,还有双向的版本,构建更深的网络。

课程板书




←上一篇 ↓↑ 下一篇→
1.10 长短期机器 (LSTM) 回到目录 1.12 深层循环神经网络

1.11 双向循环神经网络-深度学习第五课《序列模型》-Stanford吴恩达教授相关推荐

  1. 1.12 深层循环神经网络-深度学习第五课《序列模型》-Stanford吴恩达教授

    ←上一篇 ↓↑ 下一篇→ 1.11 双向神经网络 回到目录 1.13 总结 深层循环神经网络 (Deep RNNs) 目前你学到的不同RNN的版本,每一个都可以独当一面.但是要学习非常复杂的函数,通常 ...

  2. 2.19 总结-深度学习-Stanford吴恩达教授

    ←上一篇 ↓↑ 下一篇→ 2.18 Logistic 损失函数的解释 回到目录 3.1 神经网络概览 文章目录 总结 习题 第 11 题 第 12 题 第 13 题 第 14 题 第 15 题 第 1 ...

  3. 深度学习教程(6) | 神经网络优化算法(吴恩达·完整版)

    作者:韩信子@ShowMeAI 教程地址:https://www.showmeai.tech/tutorials/35 本文地址:https://www.showmeai.tech/article-d ...

  4. 1.3 循环神经网络模型-深度学习第五课《序列模型》-Stanford吴恩达教授

    ←上一篇 ↓↑ 下一篇→ 1.2 数学符号 回到目录 1.4 通过时间的方向传播 循环神经网络模型 (Recurrent Neural Network Model) 上节视频中,你了解了我们用来定义序 ...

  5. 1.1 欢迎-深度学习第一课《神经网络与深度学习》-Stanford吴恩达教授

    ←上一篇 ↓↑ 下一篇→ 无 回到目录 1.2 什么是神经网络 欢迎 第一个视频主要讲了什么是深度学习,深度学习能做些什么事情.以下是吴恩达老师的原话: 深度学习改变了传统互联网业务,例如如网络搜索和 ...

  6. 1.8 其他正则化方法-深度学习第二课《改善深层神经网络》-Stanford吴恩达教授

    ←上一篇 ↓↑ 下一篇→ 1.7 理解 Dropout 回到目录 1.9 归一化输入 其他正则化方法 (Other Regularization Methods) 除了 L2L2L2 正则化和随机失活 ...

  7. 3.12 总结-深度学习-Stanford吴恩达教授

    ←上一篇 ↓↑ 下一篇→ 3.11 随机初始化 回到目录 4.1 深层神经网络 文章目录 总结 习题 第 21 题 第 22 题 第 23 题 第 24 题 第 25 题 第 26 题 第 27 题 ...

  8. 3.5 向量化实现的解释-深度学习-Stanford吴恩达教授

    ←上一篇 ↓↑ 下一篇→ 3.4 多个例子中的向量化 回到目录 3.6 激活函数 向量化实现的解释 (Explanation for Vectorized Implementation) 在上一个视频 ...

  9. 机器学习和深度学习到底怎么学?顶尖专家吴恩达告诉你

    机器学习和深度学习到底怎么学? 在外国版知乎上,有位网友问:新手如何学习机器学习?学习完MOOC的课程后有没有能力阅读研究论文或者真正的做出一点研究成果? 这个困惑很多人的问题吴恩达给出了详细的回答, ...

最新文章

  1. Flask 项目实战|从零开发“StackOverflow”问答网站
  2. 图片加到json中,提交到服务器端处理异常问题。
  3. leetcode170. 两数之和 III - 数据结构设计
  4. 微信小程序-基于canvas画画涂鸦
  5. 买了小区一楼的感受是怎样的?
  6. 关于HTML中onSubmit属性的触发时机
  7. 计算机装固态硬盘,电脑怎么装固态硬盘?电脑加装固态硬盘步骤教程
  8. 远程服务器显示登录密码,远程服务器怎么知道登录密码
  9. 云计算时代,NGINX将是你的“必杀技”
  10. Gitlab服务器 forbidden
  11. 大数据图数据库之TAO数据库
  12. NodeBB论坛搭建
  13. 你应该会喜欢的5个自定义 Hook
  14. 酷炫命令行背景图操作步骤
  15. 基于NFS共享存储实现kvm虚拟主机动态迁移
  16. remapkey不能打开注册表_到底要不要清理注册表?
  17. 应用ast抽象语法树修改js函数
  18. 联发科处理器手机安装linux,BQ Aquaris Ubuntu 智能手机配 4.5 英寸屏幕四核CPU
  19. 共享内存实现无亲缘关系的通信
  20. 小程序的退出登陆功能实现代码

热门文章

  1. jQuery操作css样式、属性、动画、节点
  2. 推荐: 五分钟搞懂Xen、KVM、Qemu间的关系和区别[转载]
  3. Triangular Pastures (二维01背包)
  4. Linux手动分区步骤
  5. Python 操作 MySQL 的正确姿势
  6. Atitit.工作流 与 规则引擎
  7. dev机上数据库中批量生成table
  8. tomcat安装问题解决
  9. {ldelim},{rdelim} - smarty 内建函数
  10. linux下听MP3