轻松理解 Transformers (4) :Decoder 和 Output 部分

编者按:Transformers凭借其卓越的性能,已经成为自然语言处理领域的代表性模型架构。但是Transformers的内在机制却比较复杂,对许多读者来说可能还存在一定的难度。本系列对 Transformer各组件进行逐一剖析,我们可以更直观地理解这个模型架构的整体运行逻辑。本篇文章是《轻松理解Transformers》系列的最后一篇,主要介绍Transformer的Decoder和Output 部分。

文章首先指出,Transformers属于编码器-解码器架构,输入数据通过编码器转换为数学表征,再输入解码器生成最终输出。接着又以Teacher Forcing为线索,剖析了带Mask的Decoder是如何基于Encoder 的输出,一步步生成目标语言的。在描述每个组件的作用时,作者都会补充通俗的示例或类比,帮助读者更好地理解 Transformers 。

这种融通俗性、系统性与启发性为一体的写作风格,使得本文对于理解 Transformer模型具有很高的参考价值。如果想要全面理解这个极具代表性的模型架构,本文将是很好的学习资料。预祝各位读者的深度学习旅途越走越顺!

以下是译文,enjoy!

作者 | Chen Margalit

https://www.linkedin.com/in/chen-margalit/

编译 | 岳扬

本文经原作者授权,由Baihai IDP编译。如需转载译文,请联系获取授权。

原文链接:https://medium.com/towards-data-science/simplifying-transformers-state-of-the-art-nlp-using-words-you-understand-part-5-decoder-and-cd2810c6ad40

🚢🚢🚢欢迎小伙伴们加入AI技术软件及技术交流群,追踪前沿热点,共探技术难题~

图片来自 Vaswani, A. 等人的论文[1]

如果您之前没有阅读过本系列的前几篇文章,并且对上图架构中左侧组件的工作原理不太了解,我建议你先阅读本系列的其他文章。本文中未解释的任何术语都可能在本系列前面几篇文章中有过介绍。

本系列往期文章:
轻松理解 Transformers(1):Input部分
轻松理解 Transformers(2):Attention部分
轻松理解 Transformers(3):Feed-Forward Layer部分

01 解码器 Decoder

Transformers 是一种编码器-解码器(Encoder-Decoder)架构。输入的数据经过编码(转换)成数学表征(某种形式的数字,通常是向量)。然后,它被传输到另一个被称为解码器的处理单元,在解码器中将数字转换回所需的输出。 在语言模型中,就是生成一个单词作为最终的输出结果。

解码器的首要任务是根据目标序列(我们想要给出的答案)创建值矩阵。它会接收整个目标序列,将其转换为嵌入向量(Embeddings),并像编码器(encoder)一样添加位置编码。然后,它将嵌入向量传递给一个带掩码的多头注意力层,该层就会创建值矩阵。这个矩阵将帮助模型决定用户的Prompt和预期目标如何共同发挥作用。

在解释 Transformers 的工作原理时存在一种悖论,因为我们需要理解各个组成部分才能理解最终结果(end result)是如何产生的,但我们同时也需要理解最终结果是如何产生的才能理解各个组成部分。在解释Transformer的训练过程时,我们将超越当前的理解,从未来的角度进行解释,以便更好地理解Transformer的训练方式:

首先,在编码器中,用户的Prompt被转换为嵌入向量,然后我们在其中添加位置编码。编码器组(原始论文中为6个)处理数据并生成文本的数字表征。接下来,在解码器中,我们将期望的输出(我们希望模型回应的内容)会被加上一个特殊的标记,表示这是每条句子的第一个标记。比如像(句子开头)这样的标记,但也可以是模型训练时使用的其他符号。这个输入(input)被转换为嵌入向量,并添加位置编码。解码器组(最初也是6个)接收这些向量,并与编码器的输出一起生成新的单词表征(word representation)。再将单词表征转换为概率分布(probability distribution),并从模型的整个数据集中选出概率最高的单词。最后,根据模型所选单词和模型期望的输出之间的差距计算损失函数。该损失函数可用于生成梯度(gradients),而这些梯度对于反向传播算法(一种根据各自对整体误差的贡献计算权重应如何变化的算法)非常重要。

既然我们已经了解了总体流程,那么让我们来看看一个微小但重要的细节:我们使用的一种名为Teacher Forcing的技术。

02 Teacher Forcing

假如你要做一个数学测试,这个测试有3个题目:

  1. 取数字4,加上5,并记下分数。

  2. 取第一题的结果,乘以2,记分。

  3. 取第二题的结果,除以2。

如果根据每个题目解答的结果单独排名,无论对错。您发现什么问题了吗?如果第一题做错了,那么在第二题和第三题中也会做错。Teacher Forcing技术就解决了这个问题。 由于语言模型也是基于序列的(例如,如何预测第二个单词取决于第一个单词是什么),为了后续的内容正确,必须在之前的内容就正确。在上文给出的示例中,Teacher Forcing会在第二题给出正确答案,然后在第三题给出正确答案,这样实际上我们接受的是乘法/除法测试,而不是加法测试。每个题目仍会单独评分,只是不会因为在第一题中犯错误而在第二题中受到影响。

具体而言,Teacher Forcing可以帮助我们更快地完成训练。我们在每个步骤都给模型提供正确的标签,确保第x个单词的预测是准确的。例如,第4个单词将基于前3个正确的标签,而不是可能有错误的预测标签,这样可以确保模型不会因为之前的错误而无法继续正确地运行。

好的,现在回归正题。在将输入转换为嵌入向量并添加位置编码之后,我们将输入通过一个带有掩码的多头注意力层进行处理。

03 带有掩码的多头注意力机制  Masked Multi-Head Attention

在本系列前面部分的内容已经介绍了注意力层(attention layer)的作用和存在的原因。带有掩码的注意力层基本上是出于同样的原因做同样的事情,但有一个重要区别。由于解码器会处理全部的期望输出,模型很容易在构建注意力得分(attention scores)时使用整个序列。由于这些注意力得分是 Transformers 工作机制的重要组成部分,因此我们必须正确处理。假设我们需要生成这样一条句子:“Amazing technology, I love it”。在当前阶段,我们正试图预测单词“technology”。但在推理时(实际使用模型的时候),模型只能逐步生成输出,而无法一次性获取整个句子的信息。 因此,在训练模型时,为了使其能够适应实际使用,我们需要确保模型只能依赖于已经生成的前面的单词,而不能直接访问后面的单词。 这个步骤就是通过掩码(隐藏)未来的单词来实现的。

你可能已经猜到了,由于机器学习与数学紧密相连,并不仅仅只有隐藏单词这样一种方法,还有一种更高级的方法。具体来说,在计算注意力得分时,我们会加上负无穷大(一个非常小的负数,例如-86131676513135468),这将使得在下一阶段softmax函数会将这些负数变为0。这种技术确保了模型在没有访问权限的情况下无法访问下一个单词。

该图片由作者提供

在计算完经过掩码的注意力得分之后,输入(the input)会经过一个“Add & Normalize”层(译者注:“Add & Normalize”层主要执行加法和归一化操作。),其工作方式和使用原因与该系列文章第二篇所解释的相同。它还接收来自注意力计算(attention calculation)前层的skip connection(译者注:本系列第二篇文章第6节介绍了skip connection技术)。之后,值矩阵(Values)进入下一阶段。然后从编码器中获取Q(查询)和K(键)矩阵,它们分别代表用户的提示词(Prompt)和针对给定的查询(query),可能的建议或推荐内容。(译者注:编码器提供了与查询相关的建议,这些建议可以用来帮助解码器生成合适的输出。这些建议可以是与查询相关的相关单词、短语或句子,用于辅助解码器在生成输出时做出更准确的决策。)解码器带有自己的值矩阵(Values),以决定重点关注编码器输入的哪一部分。通过这3个矩阵(2个来自编码器,1个来自解码器),我们计算出一个“常规”的注意力得分。

接下来,又有另一个前馈网络和 “Add & Normalize”层,它接收另一个skip connection,就像前文说明的那样,然后…解码器部分就讲述完成了!

现在我们来到最后一步。堆叠的解码器层(stack of decoders)中的最后一个(即第6个)解码器(译者注:在 Transformers 架构中,解码器通常由多个相同结构的解码器层组成。堆叠的解码器层可以通过逐层传递信息和特征来逐步生成输出,从而实现更准确的预测和生成)将其输出传递给一个线性层(linear layer)。通过线性层,我们可以生成任意数量的数字表征。在语言模型中,我们希望表征的数量与模型的词汇量相匹配。如果模型的全部词汇量(它所见过的所有单词)是 1000 个,那么就需要 1000 个数字来表示词汇表中的每个单词。我们需要对每个位置上的每个单词都这样做。如果最终的输出内容拥有10个单词,我们要为其中的每一个单词计算1000个数字(译者注:即需要为每个单词生成一个1000维的数值向量)。然后,我们将其传递给一个Softmax层,该层会给出每个单词的概率,最高概率的单词就是我们要使用的单词。Softmax会返回给我们一个索引,比如3。模型就会输出词汇表中索引为3的单词。如果我们的词汇表是[‘a’, ‘man’, ‘works’, ‘nice’, ‘go’],那么输出的单词将是’nice’。

本系列文章的全部内容到此结束,感谢您的支持!希望通过阅读本系列文章,能够让您对Transformers架构的工作原理有一个较为深入的理解。

Have a good time.

END

参考资料

[1]https://proceedings.neurips.cc/paper_files/paper/2017/file/3f5ee243547dee91fbd053c1c4a845aa-Paper.pdf

🚢🚢🚢欢迎小伙伴们加入AI技术软件及技术交流群,追踪前沿热点,共探技术难题~

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

HTML表单的基本应用

注释很详细,直接上代码 效果: 涉及内容: 1.信息输入框 2.单选框 3.复选框(多选框) 4.文本输入框 5.下拉栏 6.隐藏域(用于防脚本) 7.确认按钮 8.重置按钮 9.普通按钮 10.禁用部件 11.下拉栏默认选…

Git常用指令以及常见问题解决

摘要:记录本人Git常用指令以及常见问题解决 1.Git流程 2.具体操作 git init:初始化目录(一般直接git clone远端的工程,这一步都可以省略掉); 输入命令“git config --global user.name xxx”来配置你的用…

MySQL最新2023年面试题及答案,汇总版(6)【MySQL最新2023年面试题及答案,汇总版-第三十六刊】

文章目录 MySQL最新2023年面试题及答案,汇总版(6)01、MySQL中DATETIME和TIMESTAMP的区别?02、简单描述MySQL中,索引,主键,唯一索引,联合索引的区别,对数据库的性能有什么影响(从读写…

【毕业论文】基于微信小程序的大学生互助平台设计与实现

完整下载链接https://download.csdn.net/download/No_Name_Cao_Ni_Mei/88519756 基于微信小程序的大学生互助平台设计与实现 Design and Implementation of a College Student Assistance Platform based on WeChat Mini Program 目录 目录 2 摘要 3 关键词 4 第一章 绪论 4 1.…

文案神器:8款AI文案工具轻松搞定文案

无论你是否准备好,它们都已经来了。如果你知道如何使用它们,AI文案工具可以成为你的新朋友。 现在AI文案工具无处不在,眼花缭乱,从内容生成器到电子商务聊天机器人。原因很简单:AI可以节省大量时间和金钱。这是我们都…

GaussDB SQL基础语法示例-循环语句

目录 一、前言 二、GaussDB数据库总的循环语句 三、GaussDB中常用循环语句(语法 示例) 1、LOOP循环语句 2、WHILE … LOOP 循环语句 3、FOR … LOOP循环语句(integer变量) 4、FORALL循环语句(批量查询&#xf…

RK3568驱动指南|第七期-第63章 dtb展开成device_node实验

瑞芯微RK3568芯片是一款定位中高端的通用型SOC,采用22nm制程工艺,搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码,支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU,可用于轻量级人工…

C++——const成员

这里先用队列举例&#xff1a; #define _CRT_SECURE_NO_WARNINGS 1 #include <iostream> #include <assert.h> using namespace std; class SeqList { public:void pushBack(int data){if (_size _capacity){int* tmp (int*)realloc(a, sizeof(int) * 4);if (tm…

el-upload上传附件预览只能上传一个,上传玩没有+号

el-upload上传附件预览只能上传一个&#xff0c;上传玩没有号 一、效果图二、主要代码 一、效果图 二、主要代码 实现原理是通过控制css显隐hideUpload 字段 <template><div id"uploadOne"><!-- 预览附件上传一个 --><el-upload:class"{ h…

ChatkBQA:一个基于大语言模型的知识库问题生成-检索框架11.13

ChatkBQA&#xff1a;一个基于大语言模型的知识库问题生成-检索框架 摘要1 引言3 准备工作4 方法4.1 ChatKBQA概述4.2 在LLMS上进行高效微调4.3 用微调LLMS生成逻辑形式4.4 实体和关系的非监督检索4.5 可解释查询执行 摘要 基于知识的问答&#xff08;KBQA&#xff09;旨在从大…

C 语言递归

C 语言递归 在本教程中&#xff0c;您将借助示例学习使用C语言编程编写递归函数。 调用自身的函数称为递归函数。并且&#xff0c;这种技术称为递归。 递归如何工作&#xff1f; void recurse() {... .. ...recurse();... .. ... }int main() {... .. ...recurse();... .. …

【C++初阶】类与对象(三)

目录 一、再谈构造函数1.1 初始化列表1.1.1 初始化列表写法1.1.2 哪些成员要使用初始化列表 1.2 初始化列表的特点1.2.1 队列类问题解决1.2.2 声明顺序是初始化列表的顺序 1.3 explicit关键字1.3.1 explicit关键字的作用 二、static成员2.1 类的静态成员概念2.2 类里创建了多少…

GPTS应用怎么创建?GPTS无法创建应用很卡怎么办

在首届开发者大会上&#xff0c;OpenAI宣布推出了GPTs功能&#xff0c;也就是GPT Store&#xff0c;类似App Store的应用商店&#xff0c;任何用户都可以去参与创建应用。那么GPTS应用该如何创建?碰到应用无法创建很卡怎么办呢?下面就为大家带来GPTS应用创建图文教程&#xf…

php在线审稿系统mysql数据库web结构layUI布局apache计算机软件工程网页wamp

一、源码特点 php在线审稿系统是一套完善的web设计系统mysql数据库 &#xff0c;对理解php编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。 php在线审稿系统 代码 https://download.csdn.net/download/qq_41221322/885…

11种方法判断​软件的安全可靠性​

软件的安全可靠性是衡量软件好坏的一个重要标准&#xff0c;安全性指与防止对程序及数据的非授权的故意或意外访问的能力有关的软件属性&#xff0c;可靠性指与在规定的一段时间和条件下&#xff0c;软件 软件的安全可靠性是衡量软件好坏的一个重要标准&#xff0c;安全性指与防…

开通和配置支付宝支付完整教程

开通和配置支付宝支付 登录支付宝 1.进入支付宝商家中心 支付宝商家中心-国内领先的第三方支付和金融服务平台 进入产品中心 2.点击产品中心 找到网站支付,进行申请接入支付,如果已经开通请跳过 进入开放中心 3.进入支付宝商家开发者中心登录 - 支付宝 创建应用 4.点击创…

跨机RPCLIB编译

Q1. 按照以下编码增加rpclib报错 find_package(rpclib REQUIRED)include_directories(${RPCLIB_INCLUDE_DIR})add_executable(calculator_server calculator_server.cc) target_link_libraries(calculator_server ${RPCLIB_LIBS} ${CMAKE_THREAD_LIBS_INIT}) Q2. 编译rpclib是…

SOME/IP学习笔记2

1. SOME/IP 协议 SOME/IP目前支持UDP&#xff08;用户传输协议&#xff09;和TCP&#xff08;传输控制协议&#xff09;&#xff0c; PS:UDP和TCP区别如下 TCP面向连接的&#xff0c;可靠的数据传输服务&#xff1b;UDP面向无连接的&#xff0c;尽最大努力的数据传输服务&…

操作系统——内存管理(一文搞懂操作系统的内存管理)

VIRT(虚拟内存)、RES(常驻内存)和SHR(共享内存) VIRT&#xff08;虚拟内存&#xff09; 进程“需要的”虚拟内存大小&#xff0c;包括进程使用的库、代码、数据&#xff0c;以及malloc、new分配的堆空间和分配的栈空间等&#xff1b;假如进程新申请10MB的内存&#xff0c;但实…
最新文章