李沐动手学深度学习V2-双向循环神经网络Bidirectional RNN和代码实现

本文详细介绍了双向循环神经网络(Bi-RNN)的概念,它结合了过去和未来的上下文信息,提高了序列建模的效果。在文本填空任务中,Bi-RNN能更好地理解上下文。然而,由于需要前向和后向传播,训练成本较高且不适合实时预测。Bi-RNN常用于序列编码、命名实体识别和机器翻译等任务。文章通过代码展示了Bi-RNN的PyTorch实现,并强调了其在预测任务中的局限性。

一. 双向循环神经网络和代码实现

1. 介绍

在序列学习中,以往假设的目标是:在给定观测的情况下(例如在时间序列的上下文中或在语言模型的上下文中),对下一个输出进行建模,虽然这是一个典型情景,但不是唯一的,例如我们考虑以下三个在文本序列中填空的任务:

  • ___
  • ___饿了。
  • ___饿了,我可以吃半头猪。

根据可获得的信息量,我们可以用不同的词填空,如“很高兴”(“happy”)、“不”(“not”)和“非常”(“very”)。很明显每个短语的“下文”传达了重要信息(如果有的话),而这些信息关乎到选择哪个词来填空,所以无法利用这一点的序列模型将在相关任务上表现不佳
例如如果要做好命名实体识别(例如,识别“Green”指的是“格林先生”还是绿色),不同长度的上下文范围重要性是相同的。

2. 双向模型

在前向模式下“从第一个词元开始运行”的循环神经网络,同时需要增加一个“从最后一个词元开始从后向前运行”的双向循环神经网络,下图所示描述了具有单个隐藏层的双向循环神经网络的架构。
双向循环神经网络

3. 定义

对于任意时间步 t t t,给定一个小批量的输入数据 X t ∈ R n × d \mathbf{X}_t \in \mathbb{R}^{n \times d} XtRn×d(样本数: n n n,每个示例中的输入数: d d d),并且令隐藏层激活函数为 ϕ \phi ϕ。在双向架构中,我们设该时间步的前向和反向隐状态分别为 H → t ∈ R n × h \overrightarrow{\mathbf{H}}_t \in \mathbb{R}^{n \times h} H tRn×h H ← t ∈ R n × h \overleftarrow{\mathbf{H}}_t \in \mathbb{R}^{n \times h} H tRn×h,其中 h h h是隐藏单元的数目。前向和反向隐状态的更新如下:
H → t = ϕ ( X t W x h ( f ) + H → t − 1 W h h ( f ) + b h ( f ) ) , H ← t = ϕ ( X t W x h ( b ) + H ← t + 1 W h h ( b ) + b h ( b ) ) , \begin{aligned} \overrightarrow{\mathbf{H}}_t &= \phi(\mathbf{X}_t \mathbf{W}_{xh}^{(f)} + \overrightarrow{\mathbf{H}}_{t-1} \mathbf{W}_{hh}^{(f)} + \mathbf{b}_h^{(f)}),\\ \overleftarrow{\mathbf{H}}_t &= \phi(\mathbf{X}_t \mathbf{W}_{xh}^{(b)} + \overleftarrow{\mathbf{H}}_{t+1} \mathbf{W}_{hh}^{(b)} + \mathbf{b}_h^{(b)}), \end{aligned} H tH t

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值