Transformer的核心理解起来也不难,但为什么这么强呢?

‍作者 | 摘星狐狸  编辑 | 自动驾驶之心

原文链接:https://www.zhihu.com/question/580810624/answer/3323146786

点击下方卡片,关注“自动驾驶之心”公众号

戳我-> 领取自动驾驶近15个方向学习路线

>>点击进入→自动驾驶之心Transformer技术交流群

本文只做学术分享,如有侵权,联系删文

Transformer的强大在于它的设计。高票答案已经详细讲解了Transformer在长距离依赖建模方面的能力,我就试着从设计方面补充一下“Transformer能够work很好”的其他几个原因吧。抛砖引玉,大家轻拍。

并行计算 + 强大的表达与泛化能力

传统的循环神经网络(RNN)在处理序列数据时需要按顺序逐步计算,无法并行。而Transformer可以做到”同时计算所有位置的输出”!它是怎样做到的呢?

ebabb16669011b5d97813b260d69b916.png

上图是论文中 Transformer 的内部结构图,左侧为 Encoder block,右侧为 Decoder block。

首先,Transformer使用位置编码(Position Encoding)来记录各单词在语句中的位置或次序,位置编码的值遵循一定规则(如由三角函数生成),每个源单词(或目标单词)的Word Embedding与对应的位置编码相加(位置编码向量与Word Embedding的维度相同)得到自己的编码,并最终成为Encoder的输入。

347816a7c074b2cef25579f9ee91edd3.png

Transformer的Encoder组件由6个相同结构的Encoder串联而成,Decoder组件也是由6个结构相同的Decoder串联而成。最后一层Encoder的输出将传入Decoder的每一层。

ffda7d12acbd3ec4ba4d664ce4d9b824.png

进一步看,每个Encoder中的Multi-Head Attention,通过多个独立的注意力头并行计算,可以从不同的子空间中学习到不同的表示,从而使模型拥有关注语言不同方面的能力。下面是Multi-Head Attention的内部结构,

9350655906417030ac444b649e5b81f0.png

从上图可以看到 Multi-Head Attention 包含多个 Self-Attention 层,首先将输入X分别传递到 h 个不同的 Self-Attention 中,计算得到 h 个输出矩阵。

然后,Multi-Head Attention 将它们拼接在一起 (Concat),传入一个Linear层,得到 Multi-Head Attention 最终的输出Z

d1026f73b68225a58427b5128e4961bb.png

Linear层(全连接的神经网络层)的映射是非线性变换,它的作用是对输入进行维度变换和特征提取。线性变换只能进行简单的比例缩放和平移操作,而非线性变换可以引入更多的复杂性,例如曲线形状、峰值和谷底等。这样可以使模型更加灵活,能够更好地适应不同类型的数据分布,从而增加模型的表达能力。

Multi-Head Attention 上方还包括一个 Add & Norm 层,Add 表示残差连接 (Residual Connection) 用于防止网络退化(这也是RNN的顽疾),而Norm 表示 Layer Normalization,用于对每一层的激活值进行归一化,也就是将每一层神经元的输入都转成均值方差都一样的,这样可以加快收敛。

除了多头机制,Transformer还使用了Feed Forward前馈网络,它由两个线性变换和一个非线性激活函数(通常是ReLU)组成。输入的词向量经过一个线性变换,将其映射到一个更高维度的空间。然后,通过ReLU进行非线性变换。最后,再经过一个线性变换,将其映射回原始的词向量维度。通过多层前馈网络的堆叠,模型可以学习到更复杂的特征表示,从而更好地捕捉输入序列中的语义信息。

Transformer架构强大的表达与泛化能力使之成为GPT等大语言模型的底层核心,如果你也对Transformer和大模型感兴趣,想掌握使用和开发大模型的必备技巧,最终进入这一领域,那么选择一门相应的网课是比较快的路径。

自注意力模型的设计

传统序列模型在处理长序列时,由于信息的传递是依次进行的,容易出现梯度消失或梯度爆炸的问题,同时也无法充分捕捉到序列中不同位置之间的依赖关系。

通过引入注意力机制,我们可以对每个位置的注意力权重进行独立计算,不需要像传统序列模型那样依次进行计算,从而实现全局的信息交互。这也使得自注意力模型在处理长序列时具有更高的效率。

469bb72a04d2d152f7027cb239702561.png

在这个模型中,MatMul是矩阵乘法的操作。具体来说,MatMul将查询矩阵Q与键矩阵K相乘,得到一个注意力分数矩阵。这个注意力分数矩阵表示了查询与每个键之间的相关性或相似度,从而决定在注意力机制中分配多少注意力权重给每个键对应的值(Value)。通过将注意力分数矩阵与值矩阵V相乘,可以得到最终的注意力表示。

Scale是指对注意力分数进行缩放的操作。在计算注意力分数时,通常会将点积的结果除以一个缩放因子,这个缩放因子是注意力机制中的一个超参数。缩放的目的是为了控制注意力分数的大小,使其更稳定和可解释。

具体来说,计算注意力分数的公式为:Attention(Q, K) = softmax(QK^T / sqrt(d_k)) * V

其中,Q表示查询(Query),K表示键(Key),V表示值(Value),d_k表示键的维度。在计算注意力分数时,将点积结果除以sqrt(d_k)来进行缩放。这个缩放因子可以使得注意力分数的范围更合适,避免了点积结果过大或过小的情况。

较大的缩放因子可以增加注意力分数的范围,使得模型更加关注不同位置之间的差异;较小的缩放因子可以减小注意力分数的范围,使得模型更加平均地分配注意力权重。

这种注意力机制不依赖于外部的上下文信息,而是通过内部的自我关注来计算注意力权重。因此,它被称为self-attention自注意力机制。

Mask是一种用于控制注意力机制的操作。它被用来屏蔽或限制模型在计算注意力分数时对某些位置的关注。在自注意力模型中,常见的mask操作有两种:padding mask和sequence mask。

  1. Padding mask(填充掩码):在处理变长序列时,为了保持序列的长度一致,通常会在序列的末尾添加一些特殊的填充符号(如0)。Padding mask的作用是将这些填充符号对应的位置的注意力分数设为一个很小的值(如负无穷),从而使模型在计算注意力分数时忽略这些padding符号。这样可以避免填充的内容对计算产生干扰。

  2. Sequence mask(序列掩码):在某些任务中,为了避免模型在生成序列时看到未来的信息,需要对注意力分数进行掩码操作。Sequence mask的作用是将当前位置之后的位置的注意力分数设为一个很小的值,从而使模型只能关注当前位置之前的信息。这样可以保证模型在生成序列时只依赖于已经生成的部分,而不会受到未来信息的影响。

通过使用mask操作,自注意力模型可以更好地处理变长序列和生成任务,并且能够控制模型在计算注意力分数时的关注范围。不同的任务和应用场景可能需要不同类型的mask操作。

比如在机器翻译任务中,我们希望将一个源语言句子逐步翻译成目标语言句子。使用sequence mask可以确保模型只能依赖于之前已生成的部分,逐步生成目标语言句子。

而在文本分类任务中,输入的文本长度可能不一致。使用padding mask可以将填充部分的注意力权重设为0,忽略填充部分的影响,确保模型只关注真实的文本内容。

演化

如今当我们谈论Transformer时,其实是在谈论一个大家族。2018年年初,AllenNLP发布了一个新模型ELMo。ELMo是一种比Word2vec更好的训练词向量的模型。而之后的BERT、RoBERTa、XLNet、T5、ALBERT、GPT-3等模型从自然语言理解及自然语言生成等角度,不断刷新自然语言处理领域任务的SotA(State of the Art)表现。

Transformer架构也像其他AI新技术一样,会不断迭代和更新,如果你也对Transformer大家族感兴趣,想进入大模型开发这一热门领域,那么通过学习一门靠谱的网课会是比较快的路径。

投稿作者为『自动驾驶之心知识星球』特邀嘉宾,欢迎加入交流!重磅,自动驾驶之心科研论文辅导来啦,申博、CCF系列、SCI、EI、毕业论文、比赛辅导等多个方向,欢迎联系我们!

8ca7a8990fe49c00f314999a04d8cf45.jpeg

① 全网独家视频课程

BEV感知、BEV模型部署、BEV目标跟踪、毫米波雷达视觉融合多传感器标定多传感器融合多模态3D目标检测车道线检测轨迹预测在线高精地图世界模型点云3D目标检测目标跟踪Occupancy、cuda与TensorRT模型部署大模型与自动驾驶Nerf语义分割自动驾驶仿真、传感器部署、决策规划、轨迹预测等多个方向学习视频(扫码即可学习

5c5ddcecafa99a36292f7f2b6399e861.png

网页端官网:www.zdjszx.com

② 国内首个自动驾驶学习社区

国内最大最专业,近3000人的交流社区,已得到大多数自动驾驶公司的认可!涉及30+自动驾驶技术栈学习路线,从0到一带你入门自动驾驶感知2D/3D检测、语义分割、车道线、BEV感知、Occupancy、多传感器融合、多传感器标定、目标跟踪)、自动驾驶定位建图SLAM、高精地图、局部在线地图)、自动驾驶规划控制/轨迹预测等领域技术方案大模型、端到端等,更有行业动态和岗位发布!欢迎扫描下方二维码,加入自动驾驶之心知识星球,这是一个真正有干货的地方,与领域大佬交流入门、学习、工作、跳槽上的各类难题,日常分享论文+代码+视频

a34a43a5f2467d53eeb6224f99c56125.png

③【自动驾驶之心】技术交流群

自动驾驶之心是首个自动驾驶开发者社区,聚焦感知、定位、融合、规控、标定、端到端、仿真、产品经理、自动驾驶开发、自动标注与数据闭环多个方向,目前近60+技术交流群,欢迎加入!扫码添加汽车人助理微信邀请入群,备注:学校/公司+方向+昵称(快速入群方式)

f6b384c12967998b7aec906662482b21.jpeg

④【自动驾驶之心】全平台矩阵

d1b0a0fc89572a12e9aa3d9d06c831e0.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值