现代循环神经网络 - 双向循环神经网络

文章目录

  • 双向循环神经网络
    • 1 - 隐马尔可夫模型中的动态规划
    • 2 - 双向模型
      • 定义
      • 模型的计算代价及其应用
    • 3 - 双向循环神经网络的错误应用
    • 4 - 小结

双向循环神经网络

现代循环神经网络 - 双向循环神经网络_第1张图片
现代循环神经网络 - 双向循环神经网络_第2张图片

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

现代循环神经网络 - 双向循环神经网络_第3张图片
现代循环神经网络 - 双向循环神经网络_第4张图片
现代循环神经网络 - 双向循环神经网络_第5张图片

2 - 双向模型

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sW4PPAM8-1662903858314)(imaes/d6.png)]

定义

现代循环神经网络 - 双向循环神经网络_第6张图片

模型的计算代价及其应用

现代循环神经网络 - 双向循环神经网络_第7张图片

3 - 双向循环神经网络的错误应用

由于双向循环神经网络使用了过去和未来的数据,所以我们不能盲目地将这一语言模型应用于任何观察任务

尽管模型产生的困惑度是合理的,该模型预测未来词元的能力却可能存在严重缺陷。我们用下面的实例代码引以为鉴,以防止在错误的环境中使用它们

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)
perplexity 1.1, 115267.0 tokens/sec on cuda:0
time travellerererererererererererererererererererererererererer
travellerererererererererererererererererererererererererer

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EGcxvXIE-1662903858315)(https://yingziimage.oss-cn-beijing.aliyuncs.com/img/202209112131557.svg)]

上述结果显示不如人愿,关于如何更高效地使用双向循环神经网络,在以后会有更详细的讨论

4 - 小结

  • 在双向循环神经网络中,每个时间步的隐状态由当前时间步的前后数据同时决定
  • 双向循环神经网络与概率图模型中的“前向-后向”算法具有相似性
  • 双向循环神经网络主要用于序列编码和给定双向上下文的观测统计
  • 由于梯度链更长,因此双向循环神经网络的训练代价非常高

你可能感兴趣的:(深度学习)