首页 > 其他分享 >《动手学深度学习 Pytorch版》 9.4 双向循环神经网络

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

时间:2023-10-19 12:23:31浏览次数:37  
标签:boldsymbol 神经网络 times Pytorch num 双向 9.4

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

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

数学推导太复杂了,略。

9.4.2 双向模型

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

image

9.4.2.1 定义

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

\[\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) \]

参数字典:

  • \(\overrightarrow{\boldsymbol{H}}_t,\overleftarrow{\boldsymbol{H}}_t\in\R^{n\times h}\) 表示前向和反向隐状态

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

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

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

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

\[\boldsymbol{O}_t=\boldsymbol{H}_t\boldsymbol{W}_{hq}+\boldsymbol{b}_q \]

参数字典:

  • \(\boldsymbol{O}_t\in\R^{n\times q}\) 表示输出层输出

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

  • \(\boldsymbol{b}_q\in\R^{1\times q}\) 表示偏置

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

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

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

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

9.4.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, 62244.4 tokens/sec on cuda:0
time travellerererererererererererererererererererererererererer
travellerererererererererererererererererererererererererer

image

练习

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

如果一个是 \(\overrightarrow{\boldsymbol{H}}_t\in\R^{n\times h_1}\),另一个是 \(\overleftarrow{\boldsymbol{H}}_t\in\R^{n\times h_2}\) 那么最后拼接出的 \(\boldsymbol{H}_t\in\R^{n\times (h_1+h_2)}\)。


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

不会,略。


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

那必然是双向循环网络。

标签:boldsymbol,神经网络,times,Pytorch,num,双向,9.4
From: https://www.cnblogs.com/AncilunKiang/p/17774438.html

相关文章

  • LSTM-CRF模型详解和Pytorch代码实现
    在快速发展的自然语言处理领域,Transformers已经成为主导模型,在广泛的序列建模任务中表现出卓越的性能,包括词性标记、命名实体识别和分块。在Transformers之前,条件随机场(CRFs)是序列建模的首选工具,特别是线性链CRFs,它将序列建模为有向图,而CRFs更普遍地可以用于任意图。本文中crf......
  • 《动手学深度学习 Pytorch版》 9.2 长短期记忆网络(LSTM)
    解决隐变量模型长期信息保存和短期输入缺失问题的最早方法之一是长短期存储器(longshort-termmemory,LSTM)。它与门控循环单元有许多一样的属性。长短期记忆网络的设计比门控循环单元稍微复杂一些,却比门控循环单元早诞生了近20年。9.2.1门控记忆元为了记录附加的信息,长短期记......
  • Pytorch-(三)张量
    1、张量支持的数据类型  (1)获取/设置Pytorch默认的张量类型importtorch#2、张量Tensor#2.1、获取/设置Pytorch的默认类型defDefaultType_func():dtype=torch.tensor([1,2,3.4]).dtypeprint("张量Tensor的默认类型为:",dtype)print("") 2、张量生成......
  • 6.卷积神经网络
    卷积层的作用一在说卷积层之前,我想先说一下为什么会有卷积层;前面几个博客提到的神经网络都是用矩阵乘法来建立输入和输出之间的关系,如果有n个输入和m个输出,那么就需要n*m个参数;如果n和m很大并且有多个全连接层的话需要的参数数量是庞大的;卷积层就是通过三个特性来解......
  • pytorch 量化相关参考
    ref:https://blog.csdn.net/znsoft/article/details/130788437importtorchimporttorch.quantizationclassM(torch.nn.Module):def__init__(self):super(M,self).__init__()self.quant=torch.quantization.QuantStub()#静态量化时量化桩......
  • pytorch一些准备工作
    conda常用指令激活以及退出当前虚拟环境condaactivatexxxcondadeactivate创建以及删除condacreate-nxxxpython=3.8condaremove-nxxx查看当前虚拟环境有哪些condainfo--envs查看当前环境中有哪些库condalist安装与更新包condainstallnump......
  • Python3,3分钟,带你了解PyTorch,原来科学计算库也不是很难嘛。
    1、引言小屌丝:鱼哥,最近忙啥嘞?小鱼:啥也没干。小屌丝:确定没干??小鱼:…这话到你嘴里,咋就变为了。小屌丝:也没有啊,我就是确认下,你干没干。小鱼:…能干啥,你想干啥?小屌丝:我想请教你个问题。小鱼:正儿八经的问题,是不?小屌丝:你就看我今天这身穿的,还能不正经?小鱼:穿新鞋走老路小屌丝:此话咋......
  • 神经网络入门篇:为什么深度学习会兴起?
    为什么深度学习会兴起?这篇我们来讲故事,关于为什么深度学习会兴起的故事~深度学习和神经网络之前的基础技术理念已经存在大概几十年了,为什么它们现在才突然流行起来呢?因为多亏数字化社会的来临,现在的数据量都非常巨大,我们花了很多时间活动在这些数字的领域,比如在电脑网站上、......
  • 《动手学深度学习 Pytorch版》 9.1 门控循环单元(GRU)
    我们可能会遇到这样的情况:早期观测值对预测所有未来观测值具有非常重要的意义。考虑一个极端情况,其中第一个观测值包含一个校验和,目标是在序列的末尾辨别校验和是否正确。在这种情况下,第一个词元的影响至关重要。我们希望有某些机制能够在一个记忆元里存储重要的早期信息。如......
  • pytorch问题集合
    根据kernelsize,stride和padding计算卷积后的尺寸对于PyTorch中的1维卷积层nn.Conv1d,输出序列长度可以根据以下公式计算:假设:-输入序列长度:L_in-卷积核大小:K-步长:S-填充:P则输出序列长度为:pythonL_out=(L_in+2*P-K)//S+1这里://表示地板除(向下......