双向循环神经网络

一般,我们认为循环神经网络模型都是假设当前时间步是由前面的较早时间步的序列决定的,因此它们都将信息通过隐藏状态从前往后传递。
有时候,当前时间步也可能由后面时间步决定
例如,当我们写下一个句子时,可能会根据句子后面的词来修改句子前面的用词。双向循环神经网络通过增加从后往前传递信息的隐藏层来更灵活地处理这类信息。

  • 给定时间步ttt的小批量输入Xt∈Rn×d\boldsymbol{X}_t \in \mathbb{R}^{n \times d}Xt​∈Rn×d(样本数为nnn,输入个数为ddd)
  • 隐藏层激活函数为ϕ\phiϕ。

在双向循环神经网络的架构中, 设

  • 该时间步正向隐藏状态为H→t∈Rn×h\overrightarrow{\boldsymbol{H}}_t \in \mathbb{R}^{n \times h}Ht​∈Rn×h(正向隐藏单元个数为hhh)
  • 反向隐藏状态为H←t∈Rn×h\overleftarrow{\boldsymbol{H}}_t \in \mathbb{R}^{n \times h}Ht​∈Rn×h(反向隐藏单元个数为hhh)。

我们可以分别计算正向隐藏状态和反向隐藏状态:

H→t=ϕ(XtWxh(f)+H→t−1Whh(f)+bh(f)),H←t=ϕ(XtWxh(b)+H←t+1Whh(b)+bh(b))\begin{aligned} \overrightarrow{\boldsymbol{H}}_t &= \phi(\boldsymbol{X}_t \boldsymbol{W}_{xh}^{(f)} + \overrightarrow{\boldsymbol{H}}_{t-1} \boldsymbol{W}_{hh}^{(f)} + \boldsymbol{b}_h^{(f)}),\\ \overleftarrow{\boldsymbol{H}}_t &= \phi(\boldsymbol{X}_t \boldsymbol{W}_{xh}^{(b)} + \overleftarrow{\boldsymbol{H}}_{t+1} \boldsymbol{W}_{hh}^{(b)} + \boldsymbol{b}_h^{(b)})\end{aligned} Ht​Ht​​=ϕ(Xt​Wxh(f)​+Ht−1​Whh(f)​+bh(f)​),=ϕ(Xt​Wxh(b)​+Ht+1​Whh(b)​+bh(b)​)​

其中权重Wxh(f)∈Rd×h\boldsymbol{W}_{xh}^{(f)} \in \mathbb{R}^{d \times h}Wxh(f)​∈Rd×h、Whh(f)∈Rh×h\boldsymbol{W}_{hh}^{(f)} \in \mathbb{R}^{h \times h}Whh(f)​∈Rh×h、Wxh(b)∈Rd×h\boldsymbol{W}_{xh}^{(b)} \in \mathbb{R}^{d \times h}Wxh(b)​∈Rd×h、Whh(b)∈Rh×h\boldsymbol{W}_{hh}^{(b)} \in \mathbb{R}^{h \times h}Whh(b)​∈Rh×h和偏差 bh(f)∈R1×h\boldsymbol{b}_h^{(f)} \in \mathbb{R}^{1 \times h}bh(f)​∈R1×h、bh(b)∈R1×h\boldsymbol{b}_h^{(b)} \in \mathbb{R}^{1 \times h}bh(b)​∈R1×h均为模型参数。

然后通过连结两个方向的隐藏状态H→t\overrightarrow{\boldsymbol{H}}_tHt​和H←t\overleftarrow{\boldsymbol{H}}_tHt​来得到隐藏状态Ht∈Rn×2h\boldsymbol{H}_t \in \mathbb{R}^{n \times 2h}Ht​∈Rn×2h,并将其输入到输出层。

输出层计算输出Ot∈Rn×q\boldsymbol{O}_t \in \mathbb{R}^{n \times q}Ot​∈Rn×q(输出个数为qqq):

Ot=HtWhq+bq,\boldsymbol{O}_t = \boldsymbol{H}_t \boldsymbol{W}_{hq} + \boldsymbol{b}_q,Ot​=Ht​Whq​+bq​,

其中权重Whq∈R2h×q\boldsymbol{W}_{hq} \in \mathbb{R}^{2h \times q}Whq​∈R2h×q和偏差bq∈R1×q\boldsymbol{b}_q \in \mathbb{R}^{1 \times q}bq​∈R1×q为输出层的模型参数。不同方向上的隐藏单元个数也可以不同。

(pytorch-深度学习)双向循环神经网络相关推荐

  1. 水很深的深度学习-Task05循环神经网络RNN

    循环神经网络 Recurrent Neural Network 参考资料: Unusual-Deep-Learning 零基础入门深度学习(5) - 循环神经网络 史上最小白之RNN详解_Tink19 ...

  2. 深度学习之循环神经网络(12)预训练的词向量

    深度学习之循环神经网络(12)预训练的词向量  在情感分类任务时,Embedding层是从零开始训练的.实际上,对于文本处理任务来说,领域知识大部分是共享的,因此我们能够利用在其它任务上训练好的词向量 ...

  3. 深度学习之循环神经网络(11-b)GRU情感分类问题代码

    深度学习之循环神经网络(11-b)GRU情感分类问题代码 1. Cell方式 代码 运行结果 2. 层方式 代码 运行结果 1. Cell方式 代码 import os import tensorfl ...

  4. 深度学习之循环神经网络(11-a)LSTM情感分类问题代码

    深度学习之循环神经网络(11-a)LSTM情感分类问题代码 1. Cell方式 代码 运行结果 2. 层方式 代码 运行结果 1. Cell方式 代码 import os import tensorf ...

  5. 深度学习之循环神经网络(11)LSTM/GRU情感分类问题实战

    深度学习之循环神经网络(11)LSTM/GRU情感分类问题实战 1. LSTM模型 2. GRU模型  前面我们介绍了情感分类问题,并利用SimpleRNN模型完成了情感分类问题的实战,在介绍完更为强 ...

  6. 深度学习之循环神经网络(10)GRU简介

    深度学习之循环神经网络(10)GRU简介 1. 复位门 2. 更新门 3. GRU使用方法  LSTM具有更长的记忆能力,在大部分序列任务上面都取得了比基础RNN模型更好的性能表现,更重要的是,LST ...

  7. 深度学习之循环神经网络(9)LSTM层使用方法

    深度学习之循环神经网络(9)LSTM层使用方法 1. LSTMCell 2. LSTM层  在TensorFlow中,同样有两种方式实现LSTM网络.既可以使用LSTMCell来手动完成时间戳上面的循 ...

  8. 深度学习之循环神经网络(8)长短时记忆网络(LSTM)

    深度学习之循环神经网络(8)长短时记忆网络(LSTM) 0. LSTM原理 1. 遗忘门 2. 输入门 3. 刷新Memory 4. 输出门 5. 小结  循环神经网络除了训练困难,还有一个更严重的问 ...

  9. 深度学习之循环神经网络(7)梯度裁剪

    深度学习之循环神经网络(7)梯度裁剪 1. 张量限幅 2. 限制范数 3. 全局范数裁剪 梯度弥散  梯度爆炸可以通过 梯度裁剪(Gradient Clipping)的方式在一定程度上的解决.梯度裁剪 ...

  10. 深度学习之循环神经网络(6)梯度弥散和梯度爆炸

    深度学习之循环神经网络(6)梯度弥散和梯度爆炸  循环神经网络的训练并不稳定,网络的善妒也不能任意加深.那么,为什么循环神经网络会出现训练困难的问题呢?简单回顾梯度推导中的关键表达式: ∂ht∂hi= ...

最新文章

  1. 长春机械电子计算机类,长春机械电子学校
  2. 【错误解决】[Maven] cannot be opened because it does not exist错误[文件无法编译到target目录下的解决方法]...
  3. Java最佳实践– Char到Byte和Byte到Char的转换
  4. 程序员因太过耿直,致苹果官网出现bug......
  5. awakeFromNib 与 viewDIdLoad 自己小结
  6. 每日一句20191104
  7. 如何建立强有力的人脉关系
  8. DHCP:(3)思科防火墙ASA上部署DHCP服务以及DHCP中继
  9. clark变换与Park变换的推导
  10. 关于IDEA下载安装,jpcap与wincap的一些使用方法
  11. cat 查看声卡播音、卡录音状态
  12. 我自己制作的导航页网站,源码分享~
  13. 【思维导图】一图读懂“心脑相连”最新成果:艾伦研究所发现心跳时,大脑会抖动
  14. 在Windows(VMware)环境中安装Linux虚拟机(CentOS)
  15. 装备制造业ERP软件如何帮助企业做好物料齐套管理?
  16. GPIO与IOMUX
  17. 2021年危险化学品经营单位主要负责人考试报名及危险化学品经营单位主要负责人证考试
  18. Python脚本自动化备份飞塔,华为,思科等设备配置文件。
  19. html单元格上下拆分代码,在HTML/CSS如何垂直拆分表格单元格(特别版)
  20. fiddler模拟伪造请求

热门文章

  1. php邮件中文乱码,phpmailer 发送邮件中文乱码问题的解决方法总结
  2. 撤销前进快捷键_电脑win7系统的快捷键大全
  3. 外设驱动库开发笔记35:迪文触摸屏驱动
  4. SpringMVC解决静态资源不能访问
  5. 复数卷积 tensorflow_PyTorch 中的傅里叶卷积
  6. mysql审计 社区版有吗_mysql 5.6 社区版上审计功能,不扯皮
  7. linux协议栈劫持,Linux系统优化之TCP协议栈优化-基本篇1
  8. 零基础学习java必须要了解的学习路线
  9. python struct pack一个数组_Python中struct.pack的一个疑问
  10. java矩阵类_java矩阵类,矩阵的乘法