59 双向循环神经网络_by《李沐:动手学深度学习v2》pytorch版

系列文章目录



双向RNN

在这里插入图片描述
这里理解这个图的时候,不要把正向和逆向认为有上下的关系,其实这两者都是各自做各自的运算,最后只在 O t O_t Ot进行了一次运算。

推理

在这里插入图片描述
双向RNN非常不适合做我们之前的那种推理任务,因为后边的数据还没有,这样根本不足以满足双向RNN的要求,因此一般只用做训练来对句子进行特征提取,比如在翻译的时候,给我的句子我用双向来处理,来得到句子的语义信息。

总结

  1. 双向循环神经网络通过反向更新的隐藏层来利用方向时间信息
  2. 通常用来对序列抽取特征、填空,而不是预测未来

以下为理论部分

双向循环神经网络

🏷sec_bi_rnn

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

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

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

隐马尔可夫模型中的动态规划

这一小节是用来说明动态规划问题的,
具体的技术细节对于理解深度学习模型并不重要,
但它有助于我们思考为什么要使用深度学习,
以及为什么要选择特定的架构。

如果我们想用概率图模型来解决这个问题,
可以设计一个隐变量模型:
在任意时间步 t t t,假设存在某个隐变量 h t h_t ht
通过概率 P ( x t ∣ h t ) P(x_t \mid h_t) P(xtht)控制我们观测到的 x t x_t xt
此外,任何 h t → h t + 1 h_t \to h_{t+1} htht+1转移
都是由一些状态转移概率 P ( h t + 1 ∣ h t ) P(h_{t+1} \mid h_{t}) P(ht+1ht)给出。
这个概率图模型就是一个隐马尔可夫模型(hidden Markov model,HMM),
如 :numref:fig_hmm所示。

在这里插入图片描述

🏷fig_hmm

因此,对于有 T T T个观测值的序列,
我们在观测状态和隐状态上具有以下联合概率分布:

P ( x 1 , … , x T , h 1 , … , h T ) = ∏ t = 1 T P ( h t ∣ h t − 1 ) P ( x t ∣ h t ) ,  where  P ( h 1 ∣ h 0 ) = P ( h 1 ) . P(x_1, \ldots, x_T, h_1, \ldots, h_T) = \prod_{t=1}^T P(h_t \mid h_{t-1}) P(x_t \mid h_t), \text{ where } P(h_1 \mid h_0) = P(h_1). P(x1,,xT,h1,,hT)=t=1TP(htht1)P(xtht), where P(h1h0)=P(h1).
:eqlabel:eq_hmm_jointP

现在,假设我们观测到所有的 x i x_i xi,除了 x j x_j xj
并且我们的目标是计算 P ( x j ∣ x − j ) P(x_j \mid x_{-j}) P(xjxj)
其中 x − j = ( x 1 , … , x j − 1 , x j + 1 , … , x T ) x_{-j} = (x_1, \ldots, x_{j-1}, x_{j+1}, \ldots, x_{T}) xj=(x1,,xj1,xj+1,,xT)
由于 P ( x j ∣ x − j ) P(x_j \mid x_{-j}) P(xjxj)中没有隐变量,
因此我们考虑对 h 1 , … , h T h_1, \ldots, h_T h1,,hT选择构成的
所有可能的组合进行求和。
如果任何 h i h_i hi可以接受 k k k个不同的值(有限的状态数),
这意味着我们需要对 k T k^T kT个项求和,
这个任务显然难于登天。
幸运的是,有个巧妙的解决方案:动态规划(dynamic programming)。

要了解动态规划的工作方式,
我们考虑对隐变量 h 1 , … , h T h_1, \ldots, h_T h1,,hT的依次求和。
根据 :eqref:eq_hmm_jointP,将得出:

P ( x 1 , … , x T ) = ∑ h 1 , … , h T P ( x 1 , … , x T , h 1 , … , h T ) = ∑ h 1 , … , h T ∏ t = 1 T P ( h t ∣ h t − 1 ) P ( x t ∣ h t ) = ∑ h 2 , … , h T [ ∑ h 1 P ( h 1 ) P ( x 1 ∣ h 1 ) P ( h 2 ∣ h 1 ) ] ⏟ π 2 ( h 2 ) = d e f P ( x 2 ∣ h 2 ) ∏ t = 3 T P ( h t ∣ h t − 1 ) P ( x t ∣ h t ) = ∑ h 3 , … , h T [ ∑ h 2 π 2 ( h 2 ) P ( x 2 ∣ h 2 ) P ( h 3 ∣ h 2 ) ] ⏟ π 3 ( h 3 ) = d e f P ( x 3 ∣ h 3 ) ∏ t = 4 T P ( h t ∣ h t − 1 ) P ( x t ∣ h t ) = … = ∑ h T π T ( h T ) P ( x T ∣ h T ) . \begin{aligned} &P(x_1, \ldots, x_T) \\ =& \sum_{h_1, \ldots, h_T} P(x_1, \ldots, x_T, h_1, \ldots, h_T) \\ =& \sum_{h_1, \ldots, h_T} \prod_{t=1}^T P(h_t \mid h_{t-1}) P(x_t \mid h_t) \\ =& \sum_{h_2, \ldots, h_T} \underbrace{\left[\sum_{h_1} P(h_1) P(x_1 \mid h_1) P(h_2 \mid h_1)\right]}_{\pi_2(h_2) \stackrel{\mathrm{def}}{=}} P(x_2 \mid h_2) \prod_{t=3}^T P(h_t \mid h_{t-1}) P(x_t \mid h_t) \\ =& \sum_{h_3, \ldots, h_T} \underbrace{\left[\sum_{h_2} \pi_2(h_2) P(x_2 \mid h_2) P(h_3 \mid h_2)\right]}_{\pi_3(h_3)\stackrel{\mathrm{def}}{=}} P(x_3 \mid h_3) \prod_{t=4}^T P(h_t \mid h_{t-1}) P(x_t \mid h_t)\\ =& \dots \\ =& \sum_{h_T} \pi_T(h_T) P(x_T \mid h_T). \end{aligned} ======P(x1,,xT)h1,,hTP(x1,,xT,h1,,hT)h1,,hTt=1T

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值