Transformer结构解析

这篇具有很好参考价值的文章主要介绍了Transformer结构解析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.什么是Transformer?

首先,我们需要弄清Transformer的来龙去脉,先从seq2seq模型谈起。seq2seq是sequence to sequence的简写,指一类模型其输入是一个序列,输出是另一个序列,比如翻译任务,输入是一段英文文本序列,输出是中文序列,序列的长度可以是不相等的。seq2seq是一类模型,而Encoder-Decoder是这类模型的网络结构。Encoder即编码器,将原始文本转换为一个固定长度的语义向量,再由解码器Decoder对其进行解码,得到输出序列,由此完成一个sequence到另一个sequence的转换。

原始的seq2seq,其encoder和decoder一般都是由RNN来承担,RNN很适合于处理这种序列,能够利用整个句子的信息,但是缺点是难以处理长程依赖,无法并行,计算效率低;CNN可以并行,但是利用的信息有限,如果要看到整个句子,就要叠很多层。Transformer就是一种encoder-decoder结构,其encoder和decoder不再简单的使用RNN或CNN,而是由特殊设计的block堆叠而成,这个特殊设计的block中应用了自注意力机制,可以并行计算,并且能够让模型对重要的信息重点关注。

Transformer结构解析
【图1】做序列任务时,RNN能够处理整个句子的信息,但无法并行化;CNN可以并行,但是利用的信息有限,如果要看到整个句子,就要叠很多层。
Transformer结构解析
【图2】自注意力机制,其输入是一个sequence,输出是一个sequence,和RNN是一样的,每一个输出都看了整个输入sequence,但特别的是,可以并行化计算,b_1,b_2,b_3,b_4 是同时进行的。

现在,总结一下什么是Transformer,看一下Transformer的整体结构。首先明确它是seq2seq的 Encoder-Decoder架构,先看Encoder部分,此时可以把它当成黑盒去只看它的输入输出,即:输入是一排向量,输出是另一排向量。Encoder的输出会送到Decoder中,经过一系列处理得到又一排向量,经过线性层和softmax层得到最终的结果。内部具体的过程后文再进行详细介绍。

Transformer结构解析

2.自注意力机制

自注意力机制说白了,就是对一个句子中的词,计算其他词和它的相关性大小(这里说相关性可能不准确,就是该词和其他词之间的联系程度,或者说,理解该词时应放多少注意力在其他各个词上),这个值就是注意力分数,两个词之间的注意力分数大,意味着两者之间联系紧密,因而经过自注意力机制处理后的向量,更能够捕获词语间的语义依赖关系。其计算步骤如下:

(1)对每一个单词的词嵌入向量 x i x_i xi,生成三个向量:查询向量 q i q_i qi、键向量 k i k_i ki 、值向量 v i v_i vi. 这三个向量是通过词嵌入与三个权重矩阵相乘创建的。即:
q i = x i ⋅ W Q q_i=x_i\cdot W_Q qi=xiWQ k i = x i ⋅ W K k_i=x_i\cdot W_K ki=xiWK v i = x i ⋅ W V v_i=x_i\cdot W_V vi=xiWV

(2)计算自注意力得分。假设我们在为句子中第一个词 “today” 计算自注意力向量,我们需要拿输入句子中的每个单词对 “today” 打分。这些分数决定了在编码单词 “today” 的过程中有多重视句子的其它部分。这些分数是通过打分单词(所有输入句子的单词)的键向量与 “today” 的查询向量相点积来计算的。

举例来说,一个句子有 n n n 个单词,其嵌入向量分别为: x 1 , x 2 , . . . , x n x_1,x_2,...,x_n x1,x2,...,xn,计算第一个单词的自注意力向量,就是用每一个词的键向量 k i ( i = 1 , . . . , n ) k_i(i=1,...,n) ki(i=1,...,n) 乘第一个单词的查询向量 q 1 q_1 q1 得到第一个单词对应其他各个词的注意力分数: s c o r e ( x 1 , x i ) = q 1 ⋅ k i score(x_1,x_i)=q_1\cdot k_i score(x1,xi)=q1ki

(3)将分数除以8(除8是因为,论文中使用的键向量维数为64,其平方根为8,除8可以让梯度更稳定。这里也可以使用其它值,8只是默认值) : s c o r e ( x 1 , x i ) / 8 score(x_1,x_i)/8 score(x1,xi)/8

(4)softmax归一化,得到的分数都是正值且和为1,这个分数反应了各个单词和第一个单词相关性的大小。

(5)每个值向量 v i v_i vi (前面计算注意力分数用了 k k k q q q,这里用的是 v v v) 乘以与其对应的softmax分数,相当于进行加权。

(6)对加权值向量求和,得到第一个单词 x 1 x_1 x1 经过自注意力机制处理之后的向量,然后将该结果送入前馈神经网络中即可。

Transformer结构解析

以上就是自注意力机制的一般过程,但是在Transformer中,实际使用的是 多头注意力multi-head attention,其实就是同样的计算步骤基于不同的 W K , W Q , W V W_K,W_Q,W_V WK,WQ,WV 矩阵进行多次,这些矩阵都是进行随机初始化生成的。Transformer使用八个注意力头,即有八组不同的 W K , W Q , W V W_K,W_Q,W_V WK,WQ,WV 矩阵,最后每一个原始词向量都有8个不同的向量表示,将其拼接到一起,再乘以一个权重矩阵 W O W_O WO 进行融合,得到自注意力层最后的输出。

Transformer结构解析

3.Transformer结构解析

3.1 Encoder

下图展示了Encoder的主要过程:

Transformer结构解析

再用一个图来直观地表达一下这个过程,这个图片里解释了层归一化的具体操作(等式右侧的 x i ’ x_i^’ xi 改为 x i x_i xi

Transformer结构解析

3.2 Decoder

Decoder与Encoder的区别在于,有两个MultiHead Attention:

  • 底层是Masked MultiHead Attention
  • 中间的MultiHead Attention可以叫做cross attention,正是这个组件将encoder和decoder连接起来
Transformer结构解析

下面主要解释一下什么是Masked MultiHead Attention以及decoder和encoder是怎么连接交互的

(1)Masked MultiHead Attention

如图所示,masked的意思是,生成 b 1 b_1 b1 的时候只能考虑 a 1 a_1 a1, 生成 b 2 b_2 b2 的时候只能考虑 a 1 a_1 a1 a 2 a_2 a2,而不能考虑 a 3 a_3 a3, a 4 a_4 a4……为什么要这样做呢?比如说翻译任务,Encoder是一次性把整个 a 1 a_1 a1- a 4 a_4 a4都用进去,但是翻成另一种语言时是从左到右依次生成的,在翻译到第一个字的时候,右边还没有其他的字。Decoder是从左到右解码的,先有 a 1 a_1 a1, 再有 a 2 a_2 a2,逐次生成,在生成 b 2 b_2 b2的时候,还没有 a 3 a_3 a3, a 4 a_4 a4.

Transformer结构解析

关于这一部分的内容,这篇帖子讲解得很详细:Transformer模型详解

(2)cross attention

Decoder模块中间的部分即cross attention, 主要的区别在于其中 Self-Attention 的 K, V矩阵不是使用 上一个 Decoder block 的输出计算的,而是使用 Encoder 的的最终输出来计算的

根据 Encoder 的输出计算得到 K, V,根据上一个 Decoder block 的输出 Z 计算 Q,这样做的好处是在 Decoder 的时候,每一位单词都可以利用到 Encoder 所有单词的信息 (这些信息无需 Mask)。

Transformer结构解析

总结

Encoder部分的每一个block,接收输入向量,和八组不同的权重矩阵 W K , W Q , W V W_K,W_Q,W_V WK,WQ,WV 相乘得到八组 k , v , q k,v,q k,v,q,利用 k , q k,q k,q 计算注意力分数,这个注意力分数和 v v v 相乘起到加权求和的作用,八个拼起来再成权重矩阵 W O W_O WO得到一个block的最终输出向量。同样的操作重复6次得到encoder部分的最终输出。decoder这边先要给一个表示开始的特殊token,经过mask multihead attention处理得到中间结果,用它生成查询向量 q q q 和基于Encoder输出结果生成的 k , v k,v k,v 进行自注意力机制处理。Decoder也是有6个同样的block,每次做cross attention都是和encoder的最终结果进行的。文章来源地址https://www.toymoban.com/news/detail-407035.html

到了这里,关于Transformer结构解析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MASA MinimalAPI源码解析:为什么我们只写了一个app.MapGet,却生成了三个接口

    源码如下: AutoMapRoute自动创建map路由,MinimalAPI会根据service中的方法,创建对应的api接口。 比如上文的一个方法: MinimalAPI会帮我们生成一个Post 的Weather接口,接口地址: ParseMethod方法代码: methodName 是方法名。PostWeather方法帮我们解析方法名中的关键信息生成对应请求类型

    2024年02月02日
    浏览(38)
  • C++这么难,为什么我们还要用C++?C++ Core Guidelines解析给了我答案

    C++ 是一门强大而复杂的编程语言,它有其独特的应用场景和优势,尽管它可能在学习和使用上有一些挑战,但仍然被广泛采用的原因有很多,尽管 C++ 有其优势,但它也确实有一些复杂性和潜在的陷阱,因此在选择使用它时需要权衡。对于一些应用场景,其他编程语言,如Py

    2024年02月09日
    浏览(47)
  • 当我们谈笔记的时候,我们在谈什么

      文章具体内容如图,感谢妙友分享好文🎉 本篇内容来源于网站Untag @Minja 上传的内容《当我们谈笔记的时候,我们在谈什么》 如有侵权请联系删除! 

    2024年02月07日
    浏览(42)
  • PostgreSQL是什么?它有什么功能和特性?它值不值得我们去学习?我们该如何去学习呢?

    PostgreSQL是一种开源的对象关系数据库管理系统(ORDBMS),它是一种高度可靠的数据库系统,具有丰富的功能和强大的性能。PostgreSQL的发展历史可以追溯到1986年,最初是由加拿大的计算机科学家Michael Stonebraker领导的一支研究小组开发的。PostgreSQL是一个强大的数据库系统,它

    2024年01月20日
    浏览(78)
  • 解析Transformer模型

    原文地址:https://zhanghan.xyz/posts/17281/ RNN很难处理冗长的文本序列,且很容易受到所谓梯度消失/爆炸的问题。RNN是按顺序处理单词的,所以很难并行化。 用一句话总结Transformer:当一个扩展性极佳的模型和一个巨大的数据集邂逅,结果可能会让你大吃一惊。 1.位置编码(Posi

    2024年01月19日
    浏览(42)
  • C#COM是什么?它有什么功能和特性?它值不值得我们去学习?我们该如何去学习呢?

    C#COM是C# Component Object Model的缩写,是一种用于创建可重用组件的技术。C#COM允许开发人员使用C#编程语言创建可在不同应用程序和系统中重复使用的组件。这些组件可以包括类、接口、方法和属性等,可以被其他应用程序或系统调用和使用。 C#COM技术基于COM(Component Object Mod

    2024年01月20日
    浏览(86)
  • ChatGPT为我们带来了什么?

    近两周,AI频频占据头条。 “用三秒完成我一天的活。”ChatGPT为中国众多的小型、产业链分布绵长的跨境电商企业降低了获得定制化方案的成本。许多商家相信,ChatGPT还能处理大量的财务报表和数据分析模型,这也广大跨境电商不需要再花钱聘请外部开发机构,建个小程序

    2023年04月23日
    浏览(45)
  • ChatGPT能帮助我们人类做什么

    一、ChatGPT可以在多个方面帮助人类: 回答问题: ChatGPT可以回答各种问题,提供信息和解释概念。 创造性写作: 它可以生成文章、故事、诗歌等创意性文本。 学术辅助: ChatGPT可以辅助学术研究,提供解释、背景信息和学科知识。 编程辅助: 在编写代码时,它可以提供建

    2024年01月17日
    浏览(35)
  • 我们来说说蹿红的AIGC到底是什么?ChatGPT又是什么?

    近期,人工智能(AI)领域动作频频,OPENAI公司Chat GPT的出现,标志着人工智能的研究与应用已经进入了一个崭新的发展阶段, 国内腾讯、阿里巴巴、百度、易网、国外微软、谷歌、苹果、 IBM、Amazon,等互联网大厂 相继跟进 ,未来将可能掀起一场新的工业革命,由此可见人

    2024年01月20日
    浏览(41)
  • 卖期权的时候,我们在卖什么?

    一直在思考一个问题,卖期权到底是怎么回事?卖实值期权、平值期权、虚值期权背后的本质有什么区别?卖近期的和远期的期权背后的本质又是什么?我们用沪深300指数期权来研究一下。   我们先从数据上来直观感受一下。上面这个表格是2020-12-09日这一天期权的情况。这里

    2024年02月06日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包