《Attention is all you need》通俗解读,彻底理解版:part2

news2024/11/27 4:26:03

这是《Attention Is All You Need》通俗解读的第2篇,上一篇见这里。

本篇解读模型结构的编码器和解码器,对应于论文的 3.1 小节。

这一部分在论文中作者写的并不长,很多内容没有展开来讲。

虽然对于这一类具有原创架构的论文而言,模型结构是非常重要的一部分,几乎都会写的非常详细,但是作者却对很多算法和技术采取了“一带而过”的写作方式。

也就是说,作者默认读者对背景知识和常见算法非常了解,这也导致了很多人第一次阅读这篇论文时非常困难。

在论文的“3. Model Architecture”部分,作者主要介绍了他们提出的 Transformer 架构是如何实现的,一起来看看吧。

Most competitive neural sequence transduction models have an encoder-decoder structure.

Here, the encoder maps an input sequence of symbol representations (x1, ..., xn) to a sequence of continuous representations z = (z1, ..., zn). Given z, the decoder then generates an output sequence (y1, ..., ym) of symbols one element at a time. At each step the model is auto-regressive, consuming the previously generated symbols as additional input when generating the next.

第一段是背景知识。

这一段的主要内容是:传统的序列转录模型(你可以理解为讲一个序列转换为另一个序列的 Seq2Seq模型)都是基于encoder-decoder架构。

encoder也叫编码器,decoder也叫解码器。

对于编码器而言,输入序列(假设是中文句子)可以用(x1,....xn)来表示,每一个x可以认为是一个token向量,而编码器会将这个序列映射到另一个特征向量z,解码器收到这个向量z之后,会输出目标句子(假设是英文句子)。

但是这里需要强调一点:解码器输出目标句子时是一个单词一个单词输出的,每输出一个目标单词的时刻可以认为是一个时间步。

在输出某个单词时,解码器会根据之前已输出的内容来输出当前的内容,也就是说,之前的输出会影响当前的输出。这部分内容在这里讲的很详细,你可以来这里了解一下。

第一段内容可能是为了行文逻辑的考虑,作者引出编码器和解码器架构,为下文做铺垫。

在接下来的一段,作者就简明扼要的提到了Transformer架构的大致框架,并且放出了 Transformer 的经典架构图(这张图你可能在很多场合都见到过)。

The Transformer follows this overall architecture using stacked self-attention and point-wise, fully connected layers for both the encoder and decoder, shown in the left and right halves of Figure 1, respectively.

作者提到,Transformer 架构的整体仍然是编码器和解码器结构,但是和之前不同的是,编码器和解码器都采用了注意力层+FC层的结构,整体架构你可以参考下面的图,读到这里暂时不用太关注细节,请继续往下看。

图片

图片

Encoder: The encoder is composed of a stack of N = 6 identical layers. Each layer has two

sub-layers. The first is a multi-head self-attention mechanism, and the second is a simple, positionwise fully connected feed-forward network. We employ a residual connection [11] around each of the two sub-layers, followed by layer normalization [1]. That is, the output of each sub-layer is LayerNorm(x + Sublayer(x)), where Sublayer(x) is the function implemented by the sub-layer itself. To facilitate these residual connections, all sub-layers in the model, as well as the embedding layers, produce outputs of dimension dmodel = 512.

这一段作者开始介绍 Transformer 架构中的解码器,也就是上图左侧的部分。

解码器由6个相同的层组成,上图左侧的N=6。

每个层有两个子层组成:第一个子层叫做多头注意力层,第二个子层是一个非常简单的、逐点运算的全连接前馈神经网络层(这里说白了就是一个简单的 FC,不要被长串的英文所吓到)。

在两个子层中,都使用了残差结构,将输入和输出进行相连(你可以看到左侧的残差相连结构),每个子层残差相连(使用Add运算将输入和子层的输出相加)后,都会通过一个 LayerNorm层,因此,每一个子层都可以表达为:LayerNorm(x + Sublayer(x))的形式。

因此,对于第一个子层,你可以写成LayerNorm(x + MHA(x)), MHA 代表多头注意力层,对于第二个子层,你可以写成LayerNorm(x + FF(x)),FF代表前馈全连接层。

在这里,我们可以将两个子层组成的神经网络块叫做 Transformer Block,也就是 Transformer 块,和 Renset 结构中的残差块类似

在每一个block中,每个子层中都有残差连接,而残差连接(加法)要求两个输入的数据维度相同,因此作者在本段的最后一句说到,为了满足残差连接的需求,也为了使模型更加简单,所有子层输入的维度(包括Embedding层,因为Embedding的输出是MHA层的输入)和所有子层输出的维度,都是512。

也就是说作者为了简化模型运算,将每一个block输入和输出的维度都做了恒等限定。

关于编码器,作者到这里就介绍完了,至于细节,在后面会介绍,接下来继续看解码器。

图片

Decoder: The decoder is also composed of a stack of N = 6 identical layers. In addition to the two sub-layers in each encoder layer, the decoder inserts a third sub-layer, which performs multi-head attention over the output of the encoder stack. Similar to the encoder, we employ residual connections around each of the sub-layers, followed by layer normalization. We also modify the self-attention sub-layer in the decoder stack to prevent positions from attending to subsequent positions. This masking, combined with fact that the output embeddings are offset by one position, ensures that the predictions for position i can depend only on the known outputs at positions less than i.

解码器和编码器非常相似,从上图你也可以看的出来。

它也是由6个完全相等的block组成,区别在于,解码器中有3个子层。

其中,后面的两个子层和编码器完全相同,而第一个子层,也就是多出来的子层也是一个多头注意力层,唯一不一样的是该子层的多头注意力层中间的 softmax 函数计算方式不一样,因此作者把这一层叫做 Masked-MHA,带掩码的多头注意力层。

为什么要多出一层带掩码的注意力呢?

简单介绍一下就是:解码器是负责输出目标句子的。假设将一个中文句子翻译为英文,解码器在输出某个单词时(假设该单词在目标句子的第 i 的位置),此时计算注意力时应该只关注前 i-1 个单词,而不应该关注到 i 之后的单词。

这是因为解码器是输出结果,只能已经输出的内容(过去)对当前输出的单词有影响,i 之后的单词的(未来)不应该对当前的输出产生任何影响。

因此作者在其中加了掩码,就是将 i 之后的注意力全部置为零,使其不对当前时刻产生影响。

当然这么做也是为了保持训练和推理时的一致性,从而使得推理更加准确,具体细节这里不多展开,后面再详细介绍。

所以,你可以看到,编码器和解码器是Transformer 架构中非常重要的部分,而作者仅用了两小段就介绍完了。

至于为什么需要使用 LayerNorm 和残差结构,这里并未详细介绍,但没关系,后面的文章会详细介绍,这两段也仅需要了解到Transformer的大致结构即可。

前文链接:

《Attention is all you need》通俗解读,彻底理解版:part1-CSDN博客


我的技术专栏已经有几百位朋友加入了。

如果你也希望了解AI技术,学习AI视觉或者大语言模型,戳下面的链接加入吧,这可能是你学习路上非常重要的一次点击呀

CV视觉入门第三版(细化版)完成

我的Transformer专栏努力更新中

最后,送一句话给大家:生活不止眼前,还有诗和远方,共勉~

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

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

相关文章

open-chat-video-editor:开源短视频生成和编辑工具,以及抖音|TikTok 的移动端短视频项目

open-chat-video-editor:开源短视频生成和编辑工具,以及抖音|TikTok 的移动端短视频项目。 open-chat-video-editor:开源短视频生成和编辑工具 简介 Open Chat Video Editor是开源的短视频生成和编辑工具,整体技术框架如下&…

微盟×爱分析发布《2024年企业AI应用趋势洞察报告》

2023年,国内生成式AI爆发式发展,引发大模型创业热潮。随着大模型的竞争从技术往商业化应用方面延伸,企业级AI应用也迎来了快速发展。6月26日,微盟与爱分析联合发布了《2024年企业AI应用趋势洞察报告》(以下简称《报告》…

确保家电安全无忧:可燃气体报警器检验的重要性与必要性

随着家电行业的快速发展,安全问题已成为消费者关注的焦点。 可燃气体报警器作为一种重要的安全装置,在保障家庭安全中扮演着至关重要的角色。它能够实时监测室内可燃气体浓度,一旦超过预设的安全阈值,便会发出警报,提…

嵌入式Linux系统编程 — 4.6 atoi、strtol等函数实现字符串与数字转换

目录 1 字符串转整形数据 1.1 函数功能 1.2 示例程序 2 字符串转浮点型数据 2.1 函数介绍 2.2 示例程序 3 数字转字符串 3.1 函数介绍 3.2 函数原型 在编程中,经常会需要将数字组成的字符串转换为相应的数字、或者将数字转换为字符串,在 C 函数…

倩女幽魂装备攻略:全面解读与获取指南!

《倩女幽魂》作为一款经典的网络游戏,以其丰富多彩的装备系统和多样的玩法吸引了大量玩家。本文将深入解析《倩女幽魂》中的装备系统,包括装备的颜色、类别、词缀以及获取途径,帮助玩家更好地理解和利用装备来提升自己的游戏体验。 首先下载专…

分享恒指交易的一些心得

1、 做恒指跟国内其它期货一样,可以使用的指标有很多,最重要看适不适合 2、恒指交易一般是短线交易,可以看1分钟线图或3分钟,时间周期越短,反应越快,灵敏度越高 3、做恒指期货操作的时候不要重仓&#xf…

C语言力扣刷题10——有效的括号——[栈]

力扣刷题10——有效的括号——[栈] 一、博客声明二、题目描述三、解题思路1、知识补充 a、什么是栈(Stack) 2、思路说明 四、解题代码(附注释) 一、博客声明 找工作逃不过刷题,为了更好的督促自己学习以及理解力扣大佬…

问题解决:python安装依赖时网络问题报错

进行 pip install 时,安装轮子访问过慢而造成安装失败,有时候配置镜像源仍会出现莫名其妙的问题,包括网络代理问题等。看了一些解决方案,找出了一个最适合的方式,如下所示: pip install -i https://pypi.t…

androidx.preference框架介绍

一,概要 Preference作为setting核心框架,笔者对此框架做一个简单的解析,androidx.preference本质是对设置领域提供了一层View封装,以android view本身的策略模式进行二次开发,将常用的一些设置样式封装到不同的Preference中,以达到快速开发设置相关功能。并且,此风格与…

labview排错

源代码正常跑,应用程序报这个错,是因为源代码的可以找到项目路径内所有dll的路径,而应用程序只能找到data文件夹的dll文件 解决查看源代码中.net的程序集的路径,复制对应的dll到data文件夹下 在执行developinterface.dll出现labv…

k8s架构设计思想

1.谷歌borg云计算管理平台 一类:infrastucture platform software 另一类:borg为主的非虚拟化技术,调度进程 核心是轻量级作业调度,不是做虚拟化/云平台的 borg本身用了一些容器技术 生产业务product workload要求高可用&#xf…

知名大客户销售讲师培训师专家顾问讲运营商政企客户银行公司金融客户销售AI数字B2B市场B2B销售技巧B2B销售策略大客户销售技巧人工智能高价值客户销售

最近在写一本新书AI时代的大客户销售个人如何转型?个人核心能力与方法论如何办? 传统的大客户销售、顾问式销售正在走向高原,销售人效比及效率到达边界,AI数字化销售正在扑面而来。 AI时代销售的未来:销售的必经之路 …

深度解读昇腾CANN计算图优化技术,提升算法计算效率

随着大模型时代的到来,AI算法的能力上限不断被刷新,算力门槛也在持续飙升,如何在有限的计算资源的条件下优化和训练模型显得尤其重要。面向计算图编译和运行优化场景,昇腾AI异构计算架构CANN(Compute Architecture for…

餐饮点餐系统

餐饮点餐系统是一款为餐厅和顾客提供便捷点餐服务的在线平台。 1.DDL CREATE TABLE users (id INT AUTO_INCREMENT PRIMARY KEY COMMENT 用户ID,username VARCHAR(50) NOT NULL UNIQUE COMMENT 用户名,password VARCHAR(255) NOT NULL COMMENT 密码,email VARCHAR(100) UNIQUE…

http服务网络请求如何确保数据安全(含python示例源码)

深度学习类文章回顾 【YOLO深度学习系列】图像分类、物体检测、实例分割、物体追踪、姿态估计、定向边框检测演示系统【含源码】 【深度学习】物体检测/实例分割/物体追踪/姿态估计/定向边框/图像分类检测演示系统【含源码】 【深度学习】YOLOV8数据标注及模型训练方法整体流程…

命令行中关于windows hash md5 , mac hash md5 , linux hash md5 文件校验方式

md5, sha-1 ,sha256. windows certutil -hashfile filename md5certutil -hashfile filename sha1certutil -hashfile filename sha256macos 平台 md5 filenameshasum -a 1 filenameshasum -a 256 filenamelinux 平台 md5sum filenameshasum -a 1 fil…

菜籽桌面4.5.0~4.5.1常见问题解答

目录 如何刷机? 刷机失败? 无法方控? 无法画中画? 原车音乐跟我安装的音乐一起播放? 原车音乐停了,我安装的软件也跟着没声音了? 调节声音时忽大忽小? 怎么安装软件? 软件…

spring boot (shiro)+ websocket测试连接不上的简单检测处理

1、用前端连接测试的demo一切正常,但是到了项目中连接不上了 一开始以为是地址错,但是换了apifox测试也是不可以。 2、考虑是shiro进行了拦截了,所以就访问不到了地址,那么就放行。 3、再次用apifox测试,成功了。 当然…

Halcon 如何让图像自适应窗口

一 如何让图像自适应窗口 read_image(Image,1)get_image_size(Image,Width, Height)dev_close_window()dev_open_window(0,0,Width/2,Height/2,black,WindowHandle)dev_set_part(0,0,Height-800,Width-800)dev_display(Image)二 如何实现彩色图像转化为灰色图像 read_image(I…

Java nio 的线程通信机制线程通信Pipe

Java的Pipe是一种新的线程通信机制,传统的线程通信可以是通过共享内存的方式,socket等方式,而Pipe是通过Java NIO 通信的方式实现共享内存,优点类似于go语言的管道 先上代码 public static void main(String[] args) throws IOEx…