深入理解深度学习——Transformer:解码器(Decoder)部分

news2024/11/27 12:36:53

分类目录:《深入理解深度学习》总目录

相关文章:
·注意力机制(Attention Mechanism):基础知识
·注意力机制(Attention Mechanism):注意力汇聚与Nadaraya-Watson核回归
·注意力机制(Attention Mechanism):注意力评分函数(Attention Scoring Function)
·注意力机制(Attention Mechanism):Bahdanau注意力
·注意力机制(Attention Mechanism):自注意力(Self-attention)
·注意力机制(Attention Mechanism):多头注意力(Multi-head Attention)
· 注意力机制(Attention Mechanism):带掩码的多头注意力(Masked Multi-head Attention)
·注意力机制(Attention Mechanism):位置编码(Positional Encoding)
· Transformer:编码器(Encoder)部分
· Transformer:解码器(Decoder)的多头注意力层(Multi-headAttention)


假设我们想把英语句子“I am good.”(原句)翻译成法语句子“Je vais bien.”(目标句)。首先,将原句“I am good.”送入编码器,使编码器学习原句,并计算特征值。《深入理解深度学习——Transformer:编码器(Encoder)部分》中,我们学习了编码器是如何计算原句的特征值的。然后,我们把从编码器求得的特征值送入解码器。解码器将特征值作为输入,并生成目标句Je vais bien,如下图所示。
解码器

在编码器部分,我们了解到可以叠加 N N N个编码器。同理,解码器也可以有 N N N个叠加在一起。为简化说明,我们设定 N = 2 N=2 N=2。如下图所示,一个解码器的输出会被作为输入传入下一个解码器。我们还可以看到,编码器将原句的特征值(编码器的输出)作为输入传给所有解码器,而非只给第一个解码器。因此,一个解码器(第一个除外)将有两个输入:一个是来自前一个解码器的输出,另一个是编码器输出的特征值。
编码器和解码器

接下来,我们学习解码器究竟是如何生成目标句的。当 t = 1 t=1 t=1时( t t t表示时间步),解码器的输入是<sos>,这表示句子的开始。解码器收到<sos>作为输入,生成目标句中的第一个词,即Je,如下图 t = 1 t=1 t=1所示。当 t = 2 t=2 t=2时,解码器使用当前的输入和在上一步( t − 1 t-1 t1)生成的单词,预测句子中的下一个单词。在本例中,解码器将<sos>Je作为输入,并试图生成目标句中的下一个单词,如下图 t = 2 t=2 t=2所示。同理,解码器在 t = 3 t=3 t=3时,将<sos>Jevais作为输入,并试图生成句子中的下一个单词,如下图 t = 3 t=3 t=3所示。在每一步中,解码器都将上一步新生成的单词与输入的词结合起来,并预测下一个单词。因此,在最后一步( t = 4 t=4 t=4),解码器将<sos>Jevaisbien作为输入,并试图生成句子中的下一个单词,如下图 t = 4 t=4 t=4所示。
解码器在各个时间段的输入与输出
从上图中可以看到,一旦生成表示句子结束的<eos>标记,就意味着解码器已经完成了对目标句的生成工作。

在编码器部分,我们将输入转换为嵌入矩阵,并将位置编码添加到其中,然后将其作为输入送入编码器。同理,我们也不是将输入直接送入解码器,而是将其转换为嵌入矩阵,为其添加位置编码,然后再送入解码器。如下图所示,假设在时间步 t = 2 t=2 t=2,我们将输入转换为嵌入(我们称之为嵌入值输出,因为这里计算的是解码器在以前的步骤中生成的词的嵌入),将位置编码加入其中,然后将其送入解码器。
带有位置编码的编码器和解码
一个解码器模块及其所有的组件如下图所示。解码器内部有3个子层:

  • 带掩码的多头注意力层
  • 多头注意力层
  • 前馈网络层

与编码器模块相似,解码器模块也有多头注意力层和前馈网络层,但多了带掩码的多头注意力层。
解码器模块及其所有的组件
以英法翻译任务为例,假设训练数据集样本如下样本:

原句(英语)目标句(法语)
I am good.Je vais bien.
Good morning.Bonjour.
Thank you very much.Merci beaucoup.

上述数据集由两部分组成:原句和目标句。在上文中我们学习了解码器在测试期间是如何在每个步骤中逐字预测目标句的。在训练期间,由于有正确的目标句,解码器可以直接将整个目标句稍作修改作为输入。解码器将输入的<sos>作为第一个标记,并在每一步将下一个预测词与输入结合起来,以预测目标句,直到遇到<eos>标记为止。因此,我们只需将<sos>标记添加到目标句的开头,再将整体作为输入发送给解码器。比如要把英语句子“I am good.”转换成法语句子“Je vais bien.”。我们只需在目标句的开头加上<sos>标记,并将<sos>Je vais bien作为输入发送给解码器。解码器将预测输出为Je vais bien<eos>,如下图所示。
ransformer的编码器和解码器

我们不是将输入直接送入解码器,而是将其转换为嵌入矩阵(输出嵌入矩阵)并添加位置编码,然后再送入解码器。假设添加输出嵌入矩阵和位置编码后得到下图所示的矩阵 X X X嵌入矩阵
将矩阵 X X X送入解码器。解码器中的第一层是带掩码的多头注意力层。这编码器中的多头注意力层的工作原理相似,但有一点不同,具体的原理可以参考《深入理解深度学习——注意力机制(Attention Mechanism):带掩码的多头注意力(Masked Multi-head Attention)》中的带掩码的多头注意力。最后,我们把注意力矩阵 M M M送到解码器的下一个子层,也就是另一个多头注意力层。这个多头注意力层的设计可以参考文章《深入理解深度学习——Transformer:解码器(Decoder)的多头注意力层(Multi-headAttention)》,它会输出一个注意力矩阵到后面的前馈网络层。

解码器的下一个子层是前馈网络层,且解码器的前馈网络层的工作原理与我们在《深入理解深度学习——Transformer:编码器(Encoder)部分》中学习的编码器部分的前馈网络层完全相同。同样,叠加和归一组件连接子层的输入和输出,如下图所示。
在这里插入图片描述
一旦解码器学习了目标句的特征,我们就将顶层解码器的输出送入线性层和Softmax层,如下图所示。
线性层和Softmax层
线性层将生成一个logit向量,其大小等于原句中的词汇量。假设原句只由以下3个词组成:

vocabulary = {bien, Je, vais}

那么,线性层返回的logit向量的大小将为3。接下来,使用Softmax函数将logit向量转换成概率,然后解码器将输出具有高概率值的词的索引值。让我们通过一个示例来理解这一过程。假设解码器的输入词是<sos>Je。基于输入词,解码器需要预测目标句中的下一个词。然后,我们把顶层解码器的输出送入线性层。线性层生成logit向量,其大小等于原句中的词汇量。假设线性层返回如下logit向量: logit = [ 45 , 40 , 49 ] \text{logit}=[45, 40, 49] logit=[45,40,49],则Softmax函数应用于logit向量,从而得到概率: prob = [ 0.018 , 0.000 , 0.981 ] \text{prob}=[0.018, 0.000, 0.981] prob=[0.018,0.000,0.981]。从概率矩阵中,我们可以看出索引2的概率最高。所以,模型预测出的下一个词位于词汇表中索引2的位置。由于vais这个词位于索引2,因此解码器预测目标句中的下一个词是vais。通过这种方式,解码器依次预测目标句中的下一个词。

上文就是解码器的所有组件。下面,让我们把它们放在一起,看看它们是如何作为一个整体工作的。下图显示了两个解码器。为了避免重复,只有解码器1被展开说明。
解码器总览
通过上图,我们可以得出以下几点:

  1. 我们将解码器的输入转换为嵌入矩阵,然后将位置编码加入其中,并将其作为输入送入底层的解码器(解码器1)。
  2. 解码器收到输入,并将其发送给带掩码的多头注意力层,生成注意力矩阵 M M M
  3. 将注意力矩阵 M M M和编码器输出的特征值 R R R作为多头注意力层(编码器—解码器注意力层)的输入,并再次输出新的注意力矩阵。
  4. 把从多头注意力层得到的注意力矩阵作为输入,送入前馈网络层。前馈网络层将注意力矩阵作为输入,并将解码后的特征作为输出。
  5. 我们把从解码器1得到的输出作为输入,将其送入解码器2。
  6. 解码器2进行同样的处理,并输出目标句的特征。我们还可以将 N N N个解码器层层堆叠起来。从最后的解码器得到的输出(解码后的特征)将是目标句的特征。
  7. 我们将目标句的特征送入线性层和Softmax层,通过概率得到预测的词并输出。

参考文献:
[1] Lecun Y, Bengio Y, Hinton G. Deep learning[J]. Nature, 2015
[2] Aston Zhang, Zack C. Lipton, Mu Li, Alex J. Smola. Dive Into Deep Learning[J]. arXiv preprint arXiv:2106.11342, 2021.
[3] 车万翔, 崔一鸣, 郭江. 自然语言处理:基于预训练模型的方法[M]. 电子工业出版社, 2021.
[4] 邵浩, 刘一烽. 预训练语言模型[M]. 电子工业出版社, 2021.
[5] 何晗. 自然语言处理入门[M]. 人民邮电出版社, 2019
[6] Sudharsan Ravichandiran. BERT基础教程:Transformer大模型实战[M]. 人民邮电出版社, 2023
[7] 吴茂贵, 王红星. 深入浅出Embedding:原理解析与应用实战[M]. 机械工业出版社, 2021.

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

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

相关文章

微信小程序分享到微信,公众号h5分享到微信,微信小程序跳转h5页面

一&#xff1a;微信小程序分享到微信 1&#xff1a;需求 分享微信小程序中某个详情页&#xff0c;可以分享到群&#xff0c;个人&#xff0c;朋友圈&#xff0c;好友点击分享页&#xff0c;能跳转到对应详情页阅读。 2&#xff1a;分析问题 如何实现分享&#xff1f;分享时如…

Nvidia 3060显卡 CUDA环境搭建(Ubuntu22.04+Nvidia 510+Cuda11.6+cudnn8.8)

写在前面 工作中遇到&#xff0c;简单整理理解不足小伙伴帮忙指正 对每个人而言&#xff0c;真正的职责只有一个&#xff1a;找到自我。然后在心中坚守其一生&#xff0c;全心全意&#xff0c;永不停息。所有其它的路都是不完整的&#xff0c;是人的逃避方式&#xff0c;是对大…

【踩坑记录】STC8H8K64U硬件PWM使用小结

快速导航 写在前面库配置时钟配置GPIO配置定时器配置串口配置硬件PWM特殊功能同步功能 总结 写在前面 不出意外这是我第一次也是最后一次使用STC的芯片&#xff0c;写这篇博的目的纯粹记录下前段时间调试的痛苦经历&#xff0c;所有目前打算选或是已经开始调试这款芯片的朋友&…

Ubuntu16.04部署BEVformer 实时记录

一 配置依赖 a. Create a conda virtual environment and activate it. conda create -n open-mmlab python3.8 -y conda activate open-mmlabb. Install PyTorch and torchvision following the official instructions. pip install torch1.9.1cu111 torchvision0.10.1cu11…

【Linux】面试重点:死锁和生产消费模型原理

面试要点来了~ 文章目录 前言一、死锁的一系列问题二、生产者消费者模型原理总结 前言 上一篇的互斥量原理中我们讲解了锁的原理&#xff0c;我们知道每次线程申请锁的时候一旦申请成功这个线程自己就把锁带在自己身上了&#xff0c;这就保证了锁的原子性&#xff08;因为只有…

备忘录模式(二十二)

相信自己&#xff0c;请一定要相信自己 上一章简单介绍了中介者模式(二十一), 如果没有看过, 请观看上一章 一. 备忘录模式 引用 菜鸟教程里面备忘录模式介绍: https://www.runoob.com/design-pattern/memento-pattern.html 备忘录模式&#xff08;Memento Pattern&#xff…

基于Java单位人事管理系统设计实现(源码+lw+部署文档+讲解等)

博主介绍&#xff1a; ✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战 ✌ &#x1f345; 文末获取源码联系 &#x1f345; &#x1f447;&#x1f3fb; 精…

大面积无线WIFI覆盖 H3C WX3010E(AC+PoE三层交换机)+ H3C WA2620E、WA4320无线AP +华为USG6310S防火墙

一、适用场景&#xff1a; 1、跨复杂区域覆盖WIFI。支持多房间、多栋、多层复式楼、别墅、自建房的无线WIFI覆盖。 2、强大的漫游功能。楼上楼下移动使用WIFI时&#xff0c;需要支持WIFI的信号漫游&#xff0c;更换地理位置不掉线、不中断。 3、用户量或网络流量的负载均衡功…

IMX6ULL的官方SDK和官方BSP下载

买了块IMX6ULL的开发板&#xff0c;但是不想直接用开发板跟的程序&#xff0c;还有比如后面移植uboot和kernel的时候也想基于IMX6ULL官方的uboot和kernel做移植工作&#xff0c;所以自己先找一下怎么在官网下载这些东西。 1 官方SDK下载 百度搜索NXP官网&#xff0c;进去之后…

HotSpot虚拟机参数配置及优化

目录 一、JVM配置参数 二、GC回收日志分析 三、虚拟机性能监控和故障处理工具 1.命令工具 1)&#xff1a;基础工具 2)&#xff1a;性能监控和故障处理 2.可视化工具 四、JVM常出现问题 五、参考资料 一、JVM配置参数 HotSpot直到JDK9才提供统一的日志处理框架&#xff…

【k8s系列】使用MicroK8s 5分钟搭建k8s集群含踩坑经验

文章目录 MicrosK8s介绍版本选择准备三台虚拟机搭建MicroK8s环境安装Microk8s把当前用户加入Admin Group访问K8s启动和停止MicroK8s服务 搭建MicroK8s集群把Worker节点分别加入到MicroK8s集群在Master节点检查节点运行情况在Master节点打开存储插件在Master节点打开DNS插件查看…

低转速压榨,充分保留营养,用蓝宝原汁机每天轻享新鲜果汁

现在大家都特别重视健康&#xff0c;像是蔬菜、水果都是每天必需的&#xff0c;而且为了充分获取营养&#xff0c;很多人都会使用破壁机之类的工具&#xff0c;我觉得原汁机效果更好一些&#xff0c;它能够用慢速研磨技术来提取果汁&#xff0c;使用时不需要加水&#xff0c;能…

el-date-picker 结合dayjs 快速实现周选择、月选择,并设置控件的显示格式

目录 情况需求思路&#xff1a;使用el-date-picker 配置type属性&#xff0c;结合dayjsdayjs的安装以及常用api实现效果图 实现代码其他配置设置周选择控件显示一行为星期一 至 星期日 情况需求 在传递查询条件时&#xff0c;要求时间参数需要为 一周 或 一个月 思路&#xf…

系统移植 编译uboot和linux源码及驱动配置

写在前面&#xff1a;若是有些命令执行失败&#xff0c;前面添加sudo后再执行 目录 写在前面&#xff1a;若是有些命令执行失败&#xff0c;前面添加sudo后再执行 uboot源码获取和编译&#xff1a; Linux源码获取和编译 关于驱动配置 uboot源码获取和编译&#xff1a; 获…

驾驶安全、便捷,尽在车载Notification开发的掌握

Notification 概述 通知&#xff08;Notification&#xff09;是移动应用中常用的一种交互方式&#xff0c;用于向用户展示重要的信息、提醒事件或提供即时反馈等。通知可以以弹出窗口、图标或声音等形式呈现给用户。 以下是关于通知的一些基本概念和要点&#xff1a; 通知栏…

React基础教程(三):JSX语法

React基础教程(三)&#xff1a;JSX语法 1、JSX简介 全称&#xff1a;JavaScript XMLreact定义的一种类似于XML的JS扩展语法&#xff1a;JSXML本质是React.createElement(component, props, ...children)方法的语法糖作用&#xff1a;用来简化创建虚拟DOM&#xff08;注意&…

【数据库三】MySQL事务

MySQL事务 1.事务的概念2.事务的ACID特点3.知识点总结 1.事务的概念 事务是一种机制、一个操作序列&#xff0c;包含了一组数据库操作命令&#xff0c;并且把所有的命令作为一个整体&#xff0c;一起向系统提交或撤销操作请求&#xff0c;即这一组数据库命令要么都执行&#x…

JAVA0615_2

04JDK的下载和安装 05常用dos命令

golang-gin-mysql转gorm-struct--gen-model

背景:python-django项目用go-gin重构&#xff0c;数据库已存在&#xff0c;gin中使用gorm 所以需要工具将mysql数据库中的表结构转到orm的model中。 前提&#xff1a;因为国内访问github需要稳定的代理 Goproxy.cn 推荐这个 1.在项目路径中下载gen-model模块 go get -u git…

测试员怎么克服职业惯性获得成功?

长期从事质量控制的测试员&#xff0c;容易患上职业病——挑毛病、谈风险&#xff0c;踩刹车&#xff0c;大部分时候说的和做的都对。正所谓“手里拿个锤子&#xff0c;看什么都是钉子”。但事情成功者往往是那些有想法&#xff0c;有冲劲的乐观主义者&#xff0c;正所谓“悲观…