系列文章目录
文章目录
双向RNN
这里理解这个图的时候,不要把正向和逆向认为有上下的关系,其实这两者都是各自做各自的运算,最后只在 O t O_t Ot进行了一次运算。
推理
双向RNN非常不适合做我们之前的那种推理任务,因为后边的数据还没有,这样根本不足以满足双向RNN的要求,因此一般只用做训练来对句子进行特征提取,比如在翻译的时候,给我的句子我用双向来处理,来得到句子的语义信息。
总结
- 双向循环神经网络通过反向更新的隐藏层来利用方向时间信息
- 通常用来对序列抽取特征、填空,而不是预测未来
以下为理论部分
双向循环神经网络
🏷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(xt∣ht)控制我们观测到的 x t x_t xt。
此外,任何 h t → h t + 1 h_t \to h_{t+1} ht→ht+1转移
都是由一些状态转移概率 P ( h t + 1 ∣ h t ) P(h_{t+1} \mid h_{t}) P(ht+1∣ht)给出。
这个概率图模型就是一个隐马尔可夫模型(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=1∏TP(ht∣ht−1)P(xt∣ht), where P(h1∣h0)=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(xj∣x−j),
其中 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}) x−j=(x1,…,xj−1,xj+1,…,xT)。
由于 P ( x j ∣ x − j ) P(x_j \mid x_{-j}) P(xj∣x−j)中没有隐变量,
因此我们考虑对 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,…,hT∑P(x1,…,xT,h1,…,hT)h1,…,hT∑t=1∏T