《动手学深度学习 Pytorch版》 9.4 双向循环神经网络

之前的序列学习中假设的目标是在给定观测的情况下对下一个输出进行建模,然而也存在需要后文预测前文的情况。

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

数学推导太复杂了,略。

9.4.2 双向模型

双向循环神经网络(bidirectional RNNs)添加了反向传递信息的隐藏层,以便更灵活地处理此类信息。

9.4.2.1 定义

前向和反向隐状态的更新如下:

H → t = ϕ l ( X t W x h ( f ) + H → t − 1 W h h ( f ) + b h ( f ) ) H ← t = ϕ l ( X t W x h ( b ) + H ← t − 1 W h h ( b ) + b h ( b ) ) \overrightarrow{\boldsymbol{H}}t=\phi_l(\boldsymbol{X}t\boldsymbol{W}^{(f)}{xh}+\overrightarrow{\boldsymbol{H}}{t-1}\boldsymbol{W}^{(f)}_{hh}+\boldsymbol{b}^{(f)}h)\\ \overleftarrow{\boldsymbol{H}}t=\phi_l(\boldsymbol{X}t\boldsymbol{W}^{(b)}{xh}+\overleftarrow{\boldsymbol{H}}{t-1}\boldsymbol{W}^{(b)}{hh}+\boldsymbol{b}^{(b)}_h) H t=ϕl(XtWxh(f)+H t−1Whh(f)+bh(f))H t=ϕl(XtWxh(b)+H t−1Whh(b)+bh(b))

参数字典:

  • H → t , H ← t ∈ R n × h \overrightarrow{\boldsymbol{H}}_t,\overleftarrow{\boldsymbol{H}}_t\in\R^{n\times h} H t,H t∈Rn×h 表示前向和反向隐状态

    • h h h 表示隐藏单元数目
  • W x h ( f ) , W h h ( f ) , W x h ( b ) , W h h ( b ) ∈ R h × h \boldsymbol{W}^{(f)}{xh},\boldsymbol{W}^{(f)}{hh},\boldsymbol{W}^{(b)}{xh},\boldsymbol{W}^{(b)}{hh}\in\R^{h\times h} Wxh(f),Whh(f),Wxh(b),Whh(b)∈Rh×h 表示权重参数

  • b h ( f ) , b h ( b ) ∈ R 1 × h \boldsymbol{b}^{(f)}_h,\boldsymbol{b}^{(b)}_h\in\R^{1\times h} bh(f),bh(b)∈R1×h 表示偏重参数

接下来,将前向隐状态 H → t \overrightarrow{\boldsymbol{H}}_t H t 和反向隐状态 H ← t \overleftarrow{\boldsymbol{H}}_t H t 连接起来,获得需要送入输出层的隐状态 H t ∈ R n × 2 h \boldsymbol{H}_t\in\R^{n\times 2h} Ht∈Rn×2h。

最后,输出层计算得到的输出为:

O t = H t W h q + b q \boldsymbol{O}_t=\boldsymbol{H}t\boldsymbol{W}{hq}+\boldsymbol{b}_q Ot=HtWhq+bq

参数字典:

  • O t ∈ R n × q \boldsymbol{O}_t\in\R^{n\times q} Ot∈Rn×q 表示输出层输出

    • q q q 表示输出单元数目
  • W h q ∈ R 2 h × q \boldsymbol{W}_{hq}\in\R^{2h\times q} Whq∈R2h×q 表示权重矩阵

  • b q ∈ R 1 × q \boldsymbol{b}_q\in\R^{1\times q} bq∈R1×q 表示偏置

9.4.2.2 模型的计算成本及其应用

在训练期间,能够利用过去和未来的数据来估计现在空缺的词;而在测试期间,只有过去的数据,因此精度将会很差。下面的实验将说明这一点。

另外,双向循环神经网络的计算速度非常慢。其主要原因是网络的前向传播需要在双向层中进行前向和后向递归,并且网络的反向传播还依赖于前向传播的结果。因此,梯度求解将有一个非常长的链。

双向层的使用在实践中非常少,并且仅仅应用于部分场合。例如,填充缺失的单词、词元注释(例如,用于命名实体识别)以及作为序列处理流水线中的一个步骤对序列进行编码(例如,用于机器翻译)。

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

python 复制代码
import torch
from torch import nn
from d2l import torch as d2l
python 复制代码
# 加载数据
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, 62244.4 tokens/sec on cuda:0
time travellerererererererererererererererererererererererererer
travellerererererererererererererererererererererererererer

练习

(1)如果不同方向使用不同数量的隐藏单位, H t \boldsymbol{H}_t Ht 的形状会发生怎样的变化?

如果一个是 H → t ∈ R n × h 1 \overrightarrow{\boldsymbol{H}}_t\in\R^{n\times h_1} H t∈Rn×h1,另一个是 H ← t ∈ R n × h 2 \overleftarrow{\boldsymbol{H}}_t\in\R^{n\times h_2} H t∈Rn×h2 那么最后拼接出的 H t ∈ R n × ( h 1 + h 2 ) \boldsymbol{H}_t\in\R^{n\times (h_1+h_2)} Ht∈Rn×(h1+h2)。


(2)设计一个具有多个隐藏层的双向循环神经网络。

不会,略。


(3)在自然语言中一词多义很常见。例如,"bank"一词在不同的上下文"i went to the bank to deposit cash"和"i went to the bank to sit down"中有不同的含义。如何设计一个神经网络模型,使其在给定上下文序列和单词的情况下,返回该单词在此上下文中的向量表示?哪种类型的神经网络架构更适合处理一词多义?

那必然是双向循环网络。

相关推荐
yvestine4 小时前
自然语言处理——Transformer
人工智能·深度学习·自然语言处理·transformer
码上地球10 小时前
卷积神经网络设计指南:从理论到实践的经验总结
人工智能·深度学习·cnn
MYH51611 小时前
神经网络 隐藏层
人工智能·深度学习·神经网络
聚客AI12 小时前
系统掌握PyTorch:图解张量、Autograd、DataLoader、nn.Module与实战模型
人工智能·pytorch·python·rnn·神经网络·机器学习·自然语言处理
king of code porter14 小时前
深度学习之模型压缩三驾马车:模型剪枝、模型量化、知识蒸馏
人工智能·深度学习·剪枝
MYH51614 小时前
拉力测试cuda pytorch 把 4070显卡拉满
人工智能·pytorch·python
聚客AI15 小时前
PyTorch进阶:从自定义损失函数到生产部署全栈指南
人工智能·pytorch·深度学习
寻丶幽风18 小时前
论文阅读笔记——Muffin: Testing Deep Learning Libraries via Neural Architecture Fuzzing
论文阅读·笔记·深度学习·网络安全·差分测试
Vertira19 小时前
如何在 PyTorch 中自定义卷积核参数(亲测,已解决)
人工智能·pytorch·python
强盛小灵通专卖员20 小时前
DL00871-基于深度学习YOLOv11的盲人障碍物目标检测含完整数据集
人工智能·深度学习·yolo·目标检测·计算机视觉·无人机·核心期刊