84. 双向循环神经网络
Posted chnyi6_ya
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了84. 双向循环神经网络相关的知识,希望对你有一定的参考价值。
1. 未来很重要
- 取决于过去和未来的上下文,可以填很不一样的词
- 目前为止RNN只看过去
- 在填空的时候,我们也可以看未来城
2. 双向RNN
两个隐状态层,并行计算隐状态,但是隐状态传播方向相反。
公式如下:
3. 推理
双向RNN不适合做推理,而是主要对一个句子做特征提取。比如做翻译的时候,给定一个句子去翻译下一个句子,那么给我的句子,我可以双向地去看它。
4. 总结
- 双向循环神经网络通过反向更新的隐藏层来利用时间信息
- 通常用来对序列抽取特征、填空,而不是预测未来
5. 双向循环神经网络的错误应用
由于双向循环神经网络使用了过去的和未来的数据, 所以我们不能盲目地将这一语言模型应用于任何预测任务。 尽管模型产出的困惑度是合理的, 该模型预测未来词元的能力却可能存在严重缺陷。 我们用下面的示例代码引以为戒,以防在错误的环境中使用它们。
使用双向RNN,只需要在nn.LSTM
中加上一句bidirectional=True
。
import torch
from torch import nn
from d2l import torch as d2l
# 加载数据
batch_size, num_steps, device = 32, 35, d2l.try_gpu()
train_iter, vocab = d2l.load_data_time_machine(batch_size, num_steps)
# 通过设置“bidirective=True”来定义双向LSTM模型
vocab_size, num_hiddens, num_layers = len(vocab), 256, 2
num_inputs = vocab_size
lstm_layer = nn.LSTM(num_inputs, num_hiddens, num_layers, bidirectional=True)
model = d2l.RNNModel(lstm_layer, len(vocab))
model = model.to(device)
# 训练模型
num_epochs, lr = 500, 1
d2l.train_ch8(model, train_iter, vocab, lr, num_epochs, device)
运行结果:
6. Q&A
Q1:双向RNN,反向的初始hidden state是什么?
A1:是0。从代码上来讲,反向和正向是一样的代码实现。
Q2:LSTM为什么要分C和H?
A2:H的取值是-1到+1,而C的取值比较大,没有数值限制,但是使用激活函数后可以把取值范围限制到-1和+1
Q3: 双向是否可以深度双向?
A3:可以的。并且双向的两个隐藏层是看成一组的,如果要弄得更深,就是弄更多这样的组。
以上是关于84. 双向循环神经网络的主要内容,如果未能解决你的问题,请参考以下文章
序列模型-----双向神经网络(BRNN)和深层循环神经网络(Deep RNN)
长短期记忆网络 LSTM 深层循环神经网络 Deep RNN 双向循环神经网络 Bidirectional RNN 动手学深度学习v2
长短期记忆网络 LSTM 深层循环神经网络 Deep RNN 双向循环神经网络 Bidirectional RNN 动手学深度学习v2