掌握Transformer之注意力为什么有效

01

引言

在过去的几年里,Transformer在 NLP 领域掀起了一场风暴。现在,它们在 NLP 之外的应用中也取得了成功。Transformer结构之所以有如此大的能量,是因为注意力模块。这是因为它能捕捉到序列中每个单词与其他单词之间的关系。

但最重要的问题是,它究竟是如何做到这一点的?在本文中,我们将尝试回答这个问题,并了解它为什么要进行这样的计算。

闲话少说,我们直接开始吧!

02

输入序列如何送入Attention模块

注意力模块存在于编码器stack中的每个编码器以及解码器stack中的每个解码器中。我们先来观察编码器中的Attention模块。

编码器中的Attention

举个例子,假设我们正在处理一个英语到西班牙语的翻译问题,其中一个样本源序列是 "The ball is blue"。目标语序列是 "La bola es azul"。

源序列首先经过嵌入层和位置编码层,该层为序列中的每个单词生成嵌入向量。嵌入向量被传递到编码器,首先到达Attention模块。在Attention模块中,嵌入序列会经过三个线性层,产生三个独立的矩阵--即Query、Key和Value。这三个矩阵用于计算注意力得分。需要牢记的是,这些矩阵的每一行对应源序列中的一个单词。

源序列的流程

03

每行都是序列中的一个单词

为了帮助大家理解Attention模块,我们首先从源序列中的单个单词开始,然后沿着它们的路径通过Transformer,我们尤其需要关注Attention模块内部的处理情况。这将有助于我们清楚地看到源序列和目标序列中的每个单词是如何与源序列和目标序列中的其他单词相互作用的。

因此,在我们进行解释时,请将注意力集中在对每个单词进行了哪些运算,以及每个向量是如何映射到原始输入单词的。一般诸如矩阵形状、算术计算的具体细节、多头注意力等许多其他细节与每个单词的走向没有直接关系,我们就不必担心。

因此,为了简化解释和可视化,让我们忽略嵌入向量的维度,只跟踪每个单词的走向。

The flow of each word in the source sequence

04

每个单词都经过一系列可学习的变换

观察上图,每一行都是通过一系列转换--嵌入层、位置编码层和线性层--从相应的源序列生成的。所有这些转换操作都是可训练学习的。这意味着,这些操作中使用的权重不是预先确定的,而是通过模型学习的方式产生的。

Linear and Embedding weights are learned

关键问题是,Transformer如何确定哪组权重能达到最佳的效果?请记住这一点,因为我们稍后会再讨论这个问题的。

05

注意力得分之Q和K之间的点积

Attention的计算需要经过多个步骤,但在这里,我们只关注线性层和注意力分数。

Multi-head attention

Attention Score calculation

从上述公式中我们可以看到,Attention 的第一步是在Query矩阵和Key矩阵的转置之间进行矩阵乘法(即点积)。看看每个单词会发生什么变化。我们生成一个中间矩阵,其中每个单元格都是两个词之间的矩阵乘法。

Query矩阵和Key矩阵之间的点积

例如,第四行的每一列都对应于第四个Query与每个Key之间的点积。

Query矩阵和Key矩阵之间的点积

06

注意力得分之Q-K和V之间的点积

下一步是将上一步中得到的中间矩阵与Value矩阵相乘,得出注意力模块中的注意力分数。

Dot Product between Query-Key and Value matrices

在这里,我们可以看到第四行对应的是第四个Query矩阵与所有其他Key和Value的乘积。这就产生了注意力模块输出的注意力分数向量 Z。

我们可以这样来理解输出注意力得分:对于每个单词来说,它都是Value矩阵中每个词的编码值,并由中间矩阵加权。中间矩阵是该特定词的Query值与所有词的Value值的点积。

Attention Score is a weighted sum of the Value words

针对所有自学遇到困难的同学们,我帮大家系统梳理大模型学习脉络,将这份 LLM大模型资料 分享出来:包括LLM大模型书籍、640套大模型行业报告、LLM大模型学习视频、LLM大模型学习路线、开源大模型学习教程等, 😝有需要的小伙伴,可以 扫描下方二维码 领取🆓**↓↓↓**

👉[CSDN大礼包🎁:全网最全《LLM大模型入门+进阶学习资源包》免费分享(安全链接,放心点击)]()👈

07

Query,Key,Value的作用是什么?

Query可以解释为我们当前需要计算注意力得分的词。Key和Value是我们需要关注的词,即该词与Query的相关程度。

Attention Score for the word "blue" pays attention to every other word

例如,对于 "The ball is blue"这句话来说,"blue"这一行将包含单词"blue"与其他每个单词的Attention得分。这里,"blue "是Query,其他单词是 "Key/Value"。

还有其他一些操作需要执行,如除法和softmax,但在本文中我们可以忽略它们。它们只是改变矩阵中的数值,但不会影响矩阵中每个单词行的位置。

08

点积衡量单词之间的相似度

因此,我们可以看到,注意力分数是通过点积,然后将它们相加,来捕捉特定单词与句子中其他单词之间的一些互动关系。但是矩阵乘法如何帮助Transformer来确定两个词之间的相关性呢?

要理解这一点,请记住Query、Key和Value实际上是具有嵌入维度的向量。让我们来看看这些向量之间的矩阵乘法是如何计算的。

每个单元都是两个词向量的点积

当我们在两个向量之间进行点积操作时,我们是将对应位置上的一对数字相乘,然后求和。

  • 如果两个配对的元素(如上面的 "a "和 "d")都是正数或都是负数,那么乘积将是正数。乘积将增加最终的求和结果。

  • 如果一个数是正数,另一个数是负数,那么乘积就是负数。乘积将减少最终的求和结果。

  • 如果乘积是正数,则两个数字越大,它们对最终求和的贡献就越大。

这意味着,如果两个向量中相应数字的符号一致,最终的和会更大。

09

Transformer如何学习词语间的相关性

点积的概念同样适用于注意力得分。如果两个词的向量更加一致,那么注意力得分就会更高。那么,我们希望Transformer有什么样的行为呢?

我们希望句子中相互关联的两个词的注意力得分高。而对于两个互不相关的词语,我们则希望其得分较低。

例如,在 "The black cat drank the milk"这个句子中,"milk"与 "drank"非常相关,与 "cat"的相关性可能略低,而与 "black"则无关。我们希望 "milk"和 "drank"产生较高的Attention得分,"milk"和 "cat"产生稍低的分值,而 "milk"和 "black"产生的分值可以忽略不计。

这是我们希望模型通过训练学习产生的输出结果。为此,milk和drank的词向量必须对齐。milk和cat的词向量会有些偏离。而 milk和 black的词向量则会大不相同。

让我们回到我们一直萦绕在脑海中的问题--Transformer是如何计算出哪组权重能达到最佳效果的?

词向量是根据词嵌入和线性层的权重生成的。因此,Transformer可以学习这些嵌入层和线性层权重,从而生成上述所需的词向量。换句话说,它将以这样一种方式学习这些层的权重:如果句子中的两个词彼此相关,那么它们的词向量就会对齐。从而产生更高的注意力得分。而对于互不相关的单词,单词向量将不会对齐,并产生较低的注意力得分。

因此,milk和drank的嵌入会非常一致,并产生较高的注意力得分。在milk和cat的嵌入中,它们会有一些偏离,从而产生稍低的分数,而在milk和black的嵌入中,它们会有很大的不同,从而产生较低的分数。

这就是注意力模块的原理。

10

Transformer中的Attention

Query和Key之间的点积计算出每对词之间的相关性。然后,将该相关性作为一个 "因子",计算出所有Value的加权总和。加权总和将作为注意力得分的输出。

Transformer结构中有三处使用了Attention:

  • 编码器中的自注意力 --关注源序列自身

  • 解码器中的自注意力 --关注目标序列自身

  • 解码器中的交叉注意力 -- 目标序列关注源序列

Attention in the Transformer

在编码器自注意力中,我们计算源句子中每个单词与源句子中其他单词的相关性。这发生在编码器stack中的所有编码器中。

11

解码器中的自注意力

我们刚才在编码器的自我注意力中看到的大部分内容也适用于解码器中的自注意力的计算,只是存在一些微小但重要的区别。

Attention in the Decoder

在解码器自注意力计算过程中,我们计算目标句中每个单词与目标句中其他单词的相关性。

Decoder Self Attention

12

解码器中的交叉注意力

在解码器的交叉注意力的计算过程中,Query来自目标语句,而Key/Value来自源输入语句。这样,它就能计算出目标语句中每个词与源输入语句中每个词的相关性。

Encoder-Decoder Attention

13

总结

希望这能让大家充分感受到 Transformer设计的优雅。请阅读我的系列文章中的其他 Transformer 文章,深入了解为什么 Transformer 如今已成为众多深度学习应用的首选架构。

读者福利:如果大家对大模型感兴趣,这套大模型学习资料一定对你有用

对于0基础小白入门:

如果你是零基础小白,想快速入门大模型是可以考虑的。

一方面是学习时间相对较短,学习内容更全面更集中。

二方面是可以根据这些资料规划好学习计划和方向。

包括:大模型学习线路汇总、学习阶段,大模型实战案例,大模型学习视频,人工智能、机器学习、大模型书籍PDF。带你从零基础系统性的学好大模型!

😝有需要的小伙伴,可以保存图片到wx扫描二v码 免费领取【保证100%免费】🆓

👉AI大模型学习路线汇总👈

大模型学习路线图,整体分为7个大的阶段:(全套教程文末领取哈)

第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;

第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;

第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;

第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;

第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;

第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;

第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。

👉大模型实战案例👈

光学理论是没用的,要学会跟着一起做,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

👉大模型视频和PDF合集👈

观看零基础学习书籍和视频,看书籍和视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

👉学会后的收获:👈

• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;

• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;

• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;

• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。

👉获取方式:

😝有需要的小伙伴,可以保存图片到wx扫描二v码 免费领取【保证100%免费】🆓

相关推荐
聚梦小课堂7 分钟前
OpenAI GPT o1技术报告阅读(2)- 关于模型安全性的测试案例
gpt·大模型·cot·openai o1·o1
WPG大大通12 分钟前
有奖直播 | onsemi IPM 助力汽车电气革命及电子化时代冷热管理
大数据·人工智能·汽车·方案·电气·大大通·研讨会
百锦再14 分钟前
AI对汽车行业的冲击和比亚迪新能源汽车市场占比
人工智能·汽车
ws20190718 分钟前
抓机遇,促发展——2025第十二届广州国际汽车零部件加工技术及汽车模具展览会
大数据·人工智能·汽车
Zhangci]21 分钟前
Opencv图像预处理(三)
人工智能·opencv·计算机视觉
新加坡内哥谈技术39 分钟前
口哨声、歌声、boing声和biotwang声:用AI识别鲸鱼叫声
人工智能·自然语言处理
wx7408513261 小时前
小琳AI课堂:机器学习
人工智能·机器学习
FL16238631291 小时前
[数据集][目标检测]车油口挡板开关闭合检测数据集VOC+YOLO格式138张2类别
人工智能·yolo·目标检测
YesPMP平台官方1 小时前
AI+教育|拥抱AI智能科技,让课堂更生动高效
人工智能·科技·ai·数据分析·软件开发·教育