59 双向循环神经网络【动手学深度学习v2】

双向循环神经网络
- 对于序列来讲,通常假设的目标是:在给定观测的情况下(如在时间序列的上下文中或语言模型的上下文中),对下一个输出进行建模。虽然这是一个典型的场景,但并不是唯一的
- 对于序列模型来讲,可以从前往后看,也可以从后往前看,在某些情况下是可以的,有的情况下是不行的
隐马尔可夫模型中的动态规划
假设有一个隐变量模型:在任意时间步 t ,假设存在某个隐变量 ht ,通过概率 P(xt | ht) 控制观测到的 xt。此外,任何 ht -> h(t+1) 转移都是由一些状态转移概率 P(h(t+1) | ht)给出,则这个概率图模型就是一个隐马尔可夫模型(hidden Markov model,HMM)

双向模型

- 在循环神经网络中,只有一个在前向模式下“从第一个次元开始运行”的循环神经网络。如果想要循环网络获得与隐马尔可夫模型类似的前瞻能力,只需要增加一个“从最后一个词元开始从后向前运行”的循环神经网络。
- 双向循环神经网络的架构与隐马尔可夫模型中的动态规划的前向和后向递归没有太大的区别,主要的区别在于:隐马尔科夫模型中的方程具有特定的统计意义,而双向循环神经网络只能当作是通用的、可学习的函数(这种转变集中体现了现代深度网络的设计原则: 首先使用经典统计模型的函数依赖类型,然后将其参数化为通用形式。)
- 双向循环神经网络 P1 - 01:26
- 双向循环神经网络的隐藏层中有两个隐状态(前向隐状态和反向隐状态,通过添加反向传递信息的隐藏层来更灵活地处理反向传递的信息):以输入 X1 为例,当输入 X1 进入到模型之后,当前的隐藏状态(右箭头,前向隐状态)放入下一个时间步的状态中去;X2 更新完隐藏状态之后,将更新后的隐藏状态传递给 X1 的隐藏状态(左箭头,反向隐状态),将两个隐藏状态(前向隐状态和反向隐状态)合并在一起,就得到了需要送入输出层的隐状态 Ht (在具有多个隐藏层的深度双向循环神经网络中,则前向隐状态和反向隐状态这两个隐状态会作为输入继续传递到下一个双向层(具有多个隐藏层的深度双向循环神经网络其实就是多个双向隐藏层的叠加)),最后输出层计算得到输出 Ot

- 实现:将输入复制一遍,一份用于做前向的时候,正常的隐藏层会得到一些输出;另一份用于做反向的时候,反向的隐藏层会得到另外一些输出,然后进行前后顺序颠倒。将正向输出和颠倒顺序后的反向输出进行合并(concat),就能得到最终的输出了
模型的计算代价及其应用
双向循环神经网络的一个关键特性是:使用来自序列两端的信息来估计输出
- 使用过去和未来的观测信息来预测当前的观测,因此并不适用于预测下一个词元的场景,因为在预测下一个词元时,并不能得知下一个词元的下文,因为不会得到很好的精度
- 如果使用双向循环神经网络预测下一个词元,尽管在训练的时候能够利用所预测词元过去和未来的数据(也就是所预测词元的上下文)来估计所预测的词元,但是在测试的时候,模型的输入只有过去的数据(也就是所预测词所在位置之前的信息),所以会导致精度很差
此外,双向循环神经网络的计算速度非常慢
- 主要原因是网络的前向传播需要在双向层中进行前向和后向递归,并且网络的反向传播也以依赖于前向传播的结果,因此梯度求解将有一个非常长的链
双向层在实际中的时用的比较少,仅仅应用于部分场合:
- 填充缺失的单词
- 词元注释(如命名实体识别)
- 作为序列处理流水线中的一个步骤对序列进行编码(如机器翻译)
训练

推理

- 双向 LSTM 不适合做推理,几乎不能用于预测下一个词,因为为了得到隐藏状态 H ,既要看到它之前的信息,又要看到之后的信息,因为在推理的时候没有之后的信息,所以是做不了推理的
- 双向循环神经网络主要的作用是对句子做特征提取,比如在做翻译的时候,给定一个句子去翻译下一个句子,那么可以用双向循环神经网络来做已给定句子的特征提取;或者是做改写等能够看到整个句子的应用场景下,做整个句子的特征提取
总结
1、双向循环神经网络通过反向更新的隐藏层来利用方向时间信息
2、在双向循环神经网络中,每个时间步的隐状态由当前时间步的前后数据同时决定
3、双向循环神经网络与概率图模型中的“前向-后向”算法具有相似性
4、双向循环神经网络主要用于序列编码和给定双向上下文的观测估计,通常用来对序列抽取特征、填空,而不是预测未来
5、由于梯度链更长,因此双向循环神经网络的训练代价非常高
Q&A
- 1、双向 RNN ,反向的初始 hidden state 是什么?
- QA P3 - 00:00
- 2、LSTM 为什么要分 C 和 H?
- QA P3 - 00:26
- 3、时间序列预测,也用双向的吗?这个能从后往前看吗,不太理解
- QA P3 - 00:43
- 4、双向循环神经网络,在正向和反向之间有权重关系吗?
- QA P3 - 01:03
- 5、隐藏层和隐含马尔科夫有什么关系?
- QA P3 - 01:41
- 6、正向和反向是同一组权重 W ,还是不同的?
- QA P3 - 02:41
- 7、美国其他公司在 AI 方面,哪个比较强?
- QA P3 - 03:01
- 8、隐藏层是不是可以设两个 256 ?
- QA P3 - 03:35
- 9、双向是否可以深度双向?
- QA P3 - 03:58
----end----
其他参考:
1、《动手学深度学习》,PPT,https://courses.d2l.ai/zh-v2/assets/pdfs/part-3_7.pdf
2、《动手学深度学习》,教材,https://zh-v2.d2l.ai/chapter_recurrent-modern/bi-rnn.html