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

news2024/11/18 16:36:28

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

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 t1Whh(f)+bh(f))H t=ϕl(XtWxh(b)+H t1Whh(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 tRn×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} HtRn×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} OtRn×q 表示输出层输出

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

  • b q ∈ R 1 × q \boldsymbol{b}_q\in\R^{1\times q} bqR1×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

在这里插入图片描述

练习

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

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


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

不会,略。


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

那必然是双向循环网络。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1112876.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《向量数据库指南》——向量数据库是小题大作的方案?

假设大语言模型需要 10 秒钟才能生成一条结果,即需要存储的单条新记忆。那么我们获得 10 万条记忆的时间周期将为:100000 x 10 秒 = 1000000 秒——约等于 11.57 天。而即使我们用最简单的暴力算法(Numpy 的点查询),整个过程也只需要几秒钟时间,完全不值得进行优化!也就…

《Helm包管理工具篇:Helm工具概述和安装》

总结:整理不易,如果对你有帮助,可否点赞关注一下? 更多详细内容请参考:企业级K8s集群运维实战 一、Helm概述 Helm 是Kubernetes 的一个包管理工具,类似于Linux下的包管理工具如yum、apt等。可以方便的将之…

【试题025】C语言宏定义和表达式

题目&#xff1a; 若有宏定义: #define MOD(x,y) x%y 则执行以下语句后的输出结果是 ? int a13,b94: printf("%d\n",MOD(b,(a4)); 代码分析&#xff1a; #include <stdio.h> #define MOD(x,y) x%y //x和y两个形式参数进行模运算 int main() {/* 若有宏定义…

uniGUI 快速定制手机端输入界面布局

咱还是直奔主题&#xff0c;如何快速制作输入界面呢&#xff1f;如下图&#xff1a; 第一步&#xff0c;放置一个UnimFieldContainer&#xff0c;设置属性&#xff1a; AlignmentControluniAlignmentClient&#xff0c;让客户端处理对齐&#xff1b; LayoutConfig.Padding10,…

MySQL数据库——视图-介绍及基本语法(创建、查询、修改、删除、演示示例)

目录 介绍 语法 创建 查询 修改 删除 演示示例 介绍 视图&#xff08;View&#xff09;是一种虚拟存在的表。视图中的数据并不在数据库中实际存在&#xff0c;行和列数据来自定义视图的查询中使用的表&#xff08;称为基表&#xff09;&#xff0c;并且是在使用视图时动…

优雅而高效的JavaScript——?? 运算符、?. 运算符和 ?. .运算符

&#x1f974;博主&#xff1a;小猫娃来啦 &#x1f974;文章核心&#xff1a;优雅而高效的JavaScript——?? 运算符、?. 运算符和 ?. 运算符 文章目录 引言空值处理的挑战解决方案1&#xff1a;?? 运算符基本用法与 || 运算符的区别实际应用场景举例 解决方案2&#xff…

fastadmin如何让后台的日期显示成年月日格式

fastadmin的后台时间戳字段如何显示成年月日的日期格式&#xff0c;网上有很多同仁也在问这个问题&#xff0c;下面我把我这摸索到的方法给大家分享一下&#xff1a; 解决方法&#xff1a; 找到public\asset\js\backend\控制器.js 增加formatter: Table.api.formatter.datetim…

基于stm32f103c8t6的串口中断蓝牙通讯

这一篇文章与 上一篇文章相基于 stm32f103c8t6的串口非中断蓝牙通讯上一篇文章相http://t.csdnimg.cn/7j0Ec 相比&#xff0c;硬件部分是相同的。在原有的旧初上&#xff0c;要在stm32cube加入中断&#xff0c;同时代码中也要引入中断函数以及中断回调函数。到后面我谁说说我…

免费的国产数据集成平台推荐

在如今的数字化时代下&#xff0c;企业内部的数据无疑是重要资产之一。随着数据源的多样性和数量剧增&#xff0c;如何有效地收集、整合、存储、管理和分析数据变得至关重要。为了解决这些常见痛点&#xff0c;数据集成平台成为了现代企业不可或缺的一部分。 数据集成是现代数…

腾讯云双11服务器优惠活动价格表预热!

2023腾讯云双十一优惠活动服务器特价多配置报价2核2G3M、2核2G4M、2核4G5M、2核4G5M、4核8G12M、8核16G18M和16核32G28M&#xff0c;目前腾讯云双11价格还没出来&#xff0c;阿腾云根据目前2核2G3M配置95元一年预测双11价格可能是88元一年&#xff0c;整理大概有个10%的优惠幅度…

原型设计工具:Balsamiq Wireframes 4.7.4 Crack

原型设计工具:Balsamiq Wireframes是一种快速的低保真UI 线框图工具&#xff0c;可重现在记事本或白板上绘制草图但使用计算机的体验。 它确实迫使您专注于结构和内容&#xff0c;避免在此过程后期对颜色和细节进行冗长的讨论。 线框速度很快&#xff1a;您将产生更多想法&am…

Android笔记(七)Android JetPack Compose组件搭建Scaffold脚手架

在去年2022年曾发布一篇关于脚手架的文章&#xff1a;“Android JetPack Compose组件中Scaffold的应用” 。但是Android的版本从12变更到13及以上版本&#xff0c;导致一些细节的实现存在不同。在本文中&#xff0c;将从头开始介绍整个脚手架的搭建过程。 一、新建项目模块 在…

uniGUI文件操作

一.文件上传TUniFileUploadButton TUniFileUploadButton主要属性&#xff1a; Filter: 文件类型过滤&#xff0c;有图片image/* audio/* video/*三种过滤 MaxAllowedSize: 设置文件最大上传尺寸&#xff1b; Message&#xff1a;标题以及消息文本&#xff0c;可翻译成中文…

手写call(),apply(),bind()方法

目录 知识储备&#xff1a; 一&#xff1a;手写call方法 1、思路 2、实现 3、Symbol调优 二&#xff1a;手写apply方法 1、思路 2、实现 三&#xff1a;手写bind方法 1、思路 2、实现 四&#xff1a;总结 知识储备&#xff1a; 所有的方法都可以调用我们手写的方法&…

npm ERR! node-sass@6.0.1 postinstall: `node scripts/build.js`

1.遇到的问题 vue npm install提示以下错误 2.首次尝试方法 尝试用下面的方式重新安装弄得-saas&#xff0c;结果不起作用 。 npm config set sass_binary_sitehttps://npm.taobao.org/mirrors/node-sass npm install node-sass 这时考虑降级node版本&#xff0c;node.js从…

上海亚商投顾:沪指再创年内新低 贵州茅台等权重股集体调整

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 一.市场情绪 三大指数昨日全线调整&#xff0c;沪指逼近3000点大关&#xff0c;深成指、创业板指续创年内新低。芯片板块逆…

推荐系统(RS)

主流推荐算法 协同过滤算法 协同过滤算法的原理 根据用户群体对产品偏好的数据&#xff0c;发现用户之间的相似性或者物品之间的相似性&#xff0c;并基于这些相似性为用户作推荐。 基于用户的协同过滤算法&#xff08;User-based Collaborative Filtering&#xff09; 其本…

Leetcode刷题详解——四数之和

1. 题目链接&#xff1a;四数之和 2. 题目描述&#xff1a; 给你一个由 n 个整数组成的数组 nums &#xff0c;和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] &#xff08;若两个四元组元素一一对应&#xff0…

『力扣刷题本』:相交链表

咳咳&#xff0c;实在抱歉&#xff0c;刚开始心气太高了&#xff0c;叫『每日一题』&#xff0c;我是真的坚持不下了。 经过这次打击&#xff0c;我算是摸明白自己在写博客这件事情上几斤几两了&#xff0c;现在预计一周两更&#xff0c;再慢慢把更新频率提上来。 正在努力补…

python写的自动按键和鼠标连点

自己用python写的自动按键和鼠标自动点击。 分享一下源码&#xff0c;比较干净的&#xff0c;缺点就是是python打包有点大50多M from PyQt5 import QtWidgets, uic, QtCore from pynput import keyboard, mouse import pygetwindow as gw from PyQt5.QtGui import QPainter, Q…