动手学深度学习 | 双向循环神经网络 | 59

双向循环神经网络

双向LSTM非常不适合做推理,基础是不能用在预测下一个词。

Bi-RNN的作用主要是对一个句子做特征提取,比如做翻译, 给句子A翻译句子B,那么可以对句子A使用Bi-RNN去双向的看它。

代码

这里代码不会讲具体实现,但是其实很简单,前向的隐藏层就正常进行运算。反向的怎么实现呢?首先把reverse(input),然后输入到隐层得到一个输出,再讲这个输出reverse(), 最后将这个两个输出进行连接。

# 可以直接指定RNN的单元和是否是双向的
lstm_layer = nn.LSTM(num_inputs, num_hiddens, num_layers, bidirectional=True)
model = d2l.RNNModel(lstm_layer, len(vocab))
model = model.to(device)

下面是一个错误的案例,就是要说明不能使用双向循环神经网络来做预测。

QA

  1. 时间序列预测,也用双向的吗?这个能从后向前看吗?

时间序列是不能使用双向的,只能做做完形填空、文本分类这种,可以看完一整段文本的。双向循环神经网络不适合做预测的任务。

  1. 双向循环神经网络,在正向和反向之间有权重关系吗?

没有。因为他们正向和反向的权重是concat在一起的,而不是相加或者其他运算,所以是独立的。

  1. 隐藏层和隐马尔科夫有什么关系?

理论上RNN训练是没有长度限制的,但是训练的时候我们把句子裁剪成了不要过长的子序列(比如35),这里就可以认为暗含使用了隐马尔科夫的假设。

  1. 双向是否可以深度双向?

是的,两层是一组单元,可以进行叠加。

posted @ 2021-10-07 15:27  RowryCho  阅读(260)  评论(0编辑  收藏  举报