本文记录了自己在阅读《动手学深度学习》时的一些思考,仅用来作为作者本人的学习笔记,不存在商业用途。

正如我们在9.5机器翻译中所讨论的,机器翻译是序列转换模型的一个核心问题,其输入和输出都是长度可变的序列。为了处理这种类型的输入和输出,我们可以设计一个包含两个主要组件的架构:第一个组件是一个编码器(encoder):它接受一个长度可变的序列作为输入,并将其转换为具有固定形状的编码状态。第二个组件是解码器(decoder):它将固定形状的编码状态映射到长度可变的序列。这被称为编码器-解码器(encoder-decoder)架构,如:fig_encoder_decoder 所示。

fig_encoder_decoder🏷fig_encoder_decoder

我们以英语到法语的机器翻译为例:给定一个英文的输入序列:“They”“are”“watching”“.”。首先,这种“编码器-解码器”架构将长度可变的输入序列编码成一个“状态”,然后对该状态进行解码,一个词元接着一个词元地生成翻译后的序列作为输出:“Ils”“regordent”“.”。由于“编码器-解码器”架构是形成后续章节中不同序列转换模型的基础,因此本节将把这个架构转换为接口方便后面的代码实现。

9.6.1 编码器

在编码器接口中,我们只指定长度可变的序列作为编码器的输入X。任何继承这个Encoder基类的模型将完成代码实现。

from torch import nn#@save
class Encoder(nn.Module):"""编码器-解码器架构的基本编码器接口"""# 利用接受任意关键字参数**kwargs(参数都是键值对)初始化实例def __init__(self, **kwargs):# 调用父类nn.Module的构造函数, 确保Pytorch能正确初始化模块super(Encoder, self).__init__(**kwargs)# 前向传播逻辑需要输入数据X和位置参数*argsdef forward(self, X, *args):# 强制子类必须重写此方法, 否则调用时会报错raise NotImplementedError

🏷python中的*args和**kargs的用法
https://blog.csdn.net/GODSuner/article/details/117961990`

🏷python中的raise NotImplementedError
https://blog.csdn.net/qq_40666620/article/details/105026716`

9.6.2 解码器

在解码器接口中,我们新增一个init_state函数,用于将编码器的输出(enc_outputs)转换为编码后的状态。注意,此步骤可能需要额外的输入,例如:输入序列的有效长度,这在 9.5.4节中进行了解释。为了逐个地生成长度可变的词元序列,解码器在每个时间步都会将输入(例如:在前一时间步生成的词元)和编码后的状态 映射成当前时间步的输出词元

#@save
class Decoder(nn.Module):"""编码器-解码器架构的基本解码器接口"""# 利用接受任意关键字参数**kwargs(参数都是键值对)初始化实例def __init__(self, **kwargs):# 调用父类nn.Module的构造函数, 确保Pytorch能正确初始化模块super(Decoder, self).__init__(**kwargs)# 接受编码器的出书enc_outputs和位置参数*args初始化解码器的状态def init_state(self, enc_outputs, *args):# 强制子类必须重写此方法, 否则调用时会报错raise NotImplementedError# 前向传播逻辑需要输入数据X和编码后的状态statedef forward(self, X, state):# 强制子类必须重写此方法, 否则调用时会报错raise NotImplementedError

9.6.3 合并编码器和解码器

“编码器-解码器”架构包含了一个编码器和一个解码器, 并且还拥有可选的额外的参数。 在前向传播中,编码器的输出用于生成编码状态, 这个状态又被解码器作为其输入的一部分。

#@save
class EncoderDecoder(nn.Module):"""编码器-解码器架构的基类"""def __init__(self, encoder, decoder, **kwargs):super(EncoderDecoder, self).__init__(**kwargs)self.encoder = encoderself.decoder = decoder# 前向传播需要编码器输入enc_X和解码器输入dec_X以及位置参数*args(比如语句长度)def forward(self, enc_X, dec_X, *args):# 根据编码器输入enc_X(语句中的词元用词表索引编码)和语句长度*args得到编码器输出enc_outputsenc_outputs = self.encoder(enc_X, *args)# 根据编码器输出enc_outputs和语句长度*args得到编码后的状态dec_statedec_state = self.decoder.init_state(enc_outputs, *args)# 根据解码器输入dec_X和状态dec_state得到解码输出return self.decoder(dec_X, dec_state)

“编码器-解码器”体系架构中的术语状态 会启发人们使用具有状态的神经网络来实现该架构。 在下一节中,我们将学习如何应用循环神经网络, 来设计基于“编码器-解码器”架构的序列转换模型。

9.6.4 小结

  • “编码器-解码器”架构可以将长度可变的序列作为输入和输出,因此适用于机器翻译等序列转换问题。
  • 编码器将长度可变的序列作为输入,并将其转换为具有固定形状的编码状态。
  • 解码器将具有固定形状的编码状态映射为长度可变的序列。

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DocBench:面向大模型文档阅读系统的评估基准与数据集分析

本文由「大千AI助手」原创发布,专注用真话讲AI,回归技术本质。拒绝神话或妖魔化。搜索「大千AI助手」关注我,一起撕掉过度包装,学习真实的AI技术! 一、数据集概述与核心目标 DocBench 是由研究团队于2024年提出的首个…

Python高级排序技术:非原生可比对象的自定义排序策略详解

引言:超越原生比较操作的排序挑战在Python数据处理中,我们经常需要处理不原生支持比较操作的对象。根据2024年《Python开发者生态系统报告》,在大型项目中,开发者平均需处理28%的自定义对象排序需求,这些对象包括&…

低代码系统的技术深度:超越“可视化操作”的架构与实现挑战

在很多非开发者眼中,低代码平台似乎只是简化流程、快速搭建页面的工具。然而,在真实的企业级应用中,低代码系统必须面对高并发请求、复杂业务规则、多角色权限、跨系统集成与持续演进等一系列工程挑战。高效交付(Rapid Delivery&a…

【NLP舆情分析】基于python微博舆情分析可视化系统(flask+pandas+echarts) 视频教程 - 词云图-微博评论词云图实现

大家好,我是java1234_小锋老师,最近写了一套【NLP舆情分析】基于python微博舆情分析可视化系统(flaskpandasecharts)视频教程,持续更新中,计划月底更新完,感谢支持。今天讲解词云图-微博评论词云图实现 视频在线地址&…

Webpack核心技能:Webpack安装配置与模块化

一、webpack 的安装和使用1. webpack 简介webpack 是基于模块化的打包 (构建)工具,它把一切视为模块(包括 JS、CSS、图片等资源文件)。工作原理:以开发时态的入口模块为起点递归分析所有依赖关系经过压缩、合并等处理最终生成运行…

数据结构---二级指针(应用场景)、内核链表、栈(系统栈、实现方式)、队列(实现方式、应用)

一、二级指针的应用场景1、在被调函数中,想要修改主调函数中的指针变量,需要传递该指针变量的地址,形参用二级指针接收。2、指针数组的数组名是一个二级指针,指针数组的数组名作为参数传递时,可用二级指针接收。指针数…

NodeJs学习日志(1):windows安装使用node.js 安装express,suquelize,sqlite,nodemon

windows安装使用node.js 安装express,suquelize,sqlite 系统是win10,默认已经安装好nodejs与npm包名作用expressWeb应用框架suquelize数据库ORMsqlite数据库nodemon代码热重载安装express 添加express生成器 npm add express-generator4安装e…

Cervantes:面向渗透测试人员和红队的开源协作平台

Cervantes 是一个专为渗透测试人员和红队打造的开源协作平台。它提供了一个集中式工作区,用于集中管理项目、客户端、漏洞和报告。通过简化数据组织和团队协调,它有助于减少规划和执行渗透测试所需的时间和复杂性。 作为 OWASP 旗下的开源解决方案&…

[Python 基础课程]猜数字游戏

使用 Python 实现一个猜数字游戏,先随机生成一个 1 到 100 之间的一个随机整数,让用户猜测这个数是什么,每次都提示用户猜大了还是猜小了,如果用户猜对了,提示用户猜对了,用了多少次,并且之前每…

文件加密实现

一、不依赖外部库实现 使用自定义的XOR加密算法结合简单的密钥扩展。 实现说明 这个方案不依赖任何外部库,仅使用C标准库实现: 加密原理:采用XOR加密算法,这是一种简单但有效的对称加密方式,相同的密钥可以用于加密和解…

Unity轻量观察相机

一、脚本功能简介ObserveCamera 是一个可直接挂载到任意 GameObject 上的通用摄像机控制脚本,支持以下功能:鼠标右键控制摄像机绕自身旋转(俯仰、水平)鼠标左键拖拽目标对象进行平移(局部 XY 平面移动)鼠标…

1深度学习Pytorch-pytorch、tensor的创建、属性、设备和类型转换、数据转换、常见操作(获取元素、元素运算、形状改变、相乘、广播)

文章目录PyTorchTensor1 Tensor 的创建1.torch.tensor2.torch.Tensor3. 线性张量4. 随机张量5. 特定数值的张量2 Tensor 常见属性1 属性2 设备切换3 类型转换torch.Tensor.to(dtype)类型专用方法创建张量时直接指定类型与 NumPy 数组的类型互转4 数据转换(浅拷贝与深…

五、Istio管理网格外部服务

因语雀与csdn markdown 格式有区别,请查看原文: https://www.yuque.com/dycloud/pss8ys 一、Egress Listener 流量策略 前面学习了 sidecar 自动注入原理、inbound Listener、outbound Listener 等概念,也知道了 EgressListener 的流量策略…

Ubuntu20.04 离线安装 FFmpeg 静态编译包

系统版本 Ubuntu20.04 去现场部署项目,发现现场的设备连接的内网,无法使用apt直接安装ffmpeg ,想解决也简单,数据线连接手机使用共享网络,再使用命令sudo apt install ffmpeg安装即可,奈何现场百多台设备&a…

C语言高级编程技巧与最佳实践

C语言高级编程技巧与最佳实践 - 完整版 目录 宏定义与预处理技巧内存管理高级技巧函数指针与回调机制数据结构设计并发与多线程错误处理与异常机制性能优化技巧调试与测试技巧跨平台编程安全编程实践综合演示示例 宏定义与预处理技巧 1. 条件编译与平台检测 /*** 平台和编译…

cygwin+php教程(swoole扩展+redis扩展)

cygwin 1.下载cygwin安装程序 :在Windows上获得Linux的感觉 ​ 2. 打开安装包:setup-x86_64.exe 3.选择安装类型 从互联网安装首次安装下载而不安装仅下载软件包不安装从本地目录安装迁移程序时使用 4.选择安装目录 5.选择本地软件包目录&#xff…

Ethereum: Uniswap V3核心”Tick”如何引爆DEX的流动性革命?

大家好,今天,我们来聊聊一个在去中心化交易所(DEX)领域,尤其是自Uniswap V3问世以来,变得至关重要的概念——Tick(流动性边界)。 如果大家接触过DeFi,可能听说过Uniswap …

【概念学习】什么是深度学习

人工智能 人工智能的简洁定义如下:努力将通常由人类完成的智力任务自动化。 因此,人工智能是一个综合性的领域,不仅包括机器学习与深度学习,还包括更多不涉及学习的方法。 在相当长的时间内,许多专家相信,只…

【MATLAB】(八)矩阵

一.矩阵的定义MATLAB 以矩阵作为数据操作的基本单位,这使得矩阵运算变得非常简捷、方便、高效。矩阵是由m*n个数q(i1,2,…,m;j1,2,…,n),排成的m行n列数表,记成称为 mxn 矩阵,也可以记成aij或Am*n。其中,i表示行数,j表…

python的高校考研交流系统

前端开发框架:vue.js 数据库 mysql 版本不限 后端语言框架支持: 1 java(SSM/springboot)-idea/eclipse 2.NodejsVue.js -vscode 3.python(flask/django)–pycharm/vscode 4.php(thinkphp/laravel)-hbuilderx 数据库工具:Navicat/SQLyog等都可以 在当今社…