精通Transformer核心:深入解析多头注意力机制,提升模型理解力!

01

引言

这是我关于Transformer系列的第三篇文章。在在前两篇文章中,我们了解了什么是Transformer、Transformer的架构以及其各组件的工作原理。在本文中,我们将进一步深入探讨多头注意力机制,它是Transformer的大脑。

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

02

Transformer中的Attention

正如我们在第二部分中所看到的,Transformer架构中的Attention主要有三个:

  • 编码器中的自注意力层 - 关注输入序列本身

  • 解码器中的自注意力层 - 关注输出序列本身

  • 解码器中的交叉注意力层 - 输出序列关注输入序列

Transformer中的Attention

Attention层的输入参数一共有三个,即Query,key和Value。这三个参数的结构相似,序列中的每个词都由一个向量表示。

03

编码器中的自注意力层

输入序列被送入嵌入层和位置编码层 ,它为输入序列中的每个单词生成相应的编码表示,以捕捉每个单词的含义和位置。该编码表示被送入第一个encoder中的自注意力层的三个参数Query,Key和Value中,通过计算注意力为输入序列中的每个单词添加相应的注意力得分;当这一过程通过编码器stack中的所有encoder时,每个注意力模块都会将自己的注意力分数添加到每个单词的编码表示中。

04

码器中的自注意力层

在解码器stack中,目标序列被送入输出嵌入层和位置编码层,为目标序列中的每个单词生成编码表示,捕捉每个单词的含义和位置。在第一个解码器中,这将被送入自注意力层中的三个参数:Query、Key和Value,然后解码器也会为目标序列中的每个单词生成一个编码表示,现在也包含了每个单词的注意力分数。

接着经过LayerNorm层后,该编码表示将送入第一个解码器中的交叉注意力层中的 参数Query中。

05

解码器中的交叉注意力层

与此同时,最后一个编码器的输出也会送入给解码器中的交叉注意力层中的 Value 和 Key 参数中。

因此,解码器中的交叉注意力层同时获得了目标序列的表示(来自解码器自注意力层的输出)和输入序列的表示(来自最后一个编码器的输出)。因此,解码器会为每个目标序列中的单词生成一个包含注意力分数的表征,该表征也会捕捉到输入序列中注意力分数的影响。

当它通过解码器stack中的所有解码器时,每个自注意力层和每个交叉注意力层也会将自己的注意力分数添加到每个单词的编码表示中。

06

多头注意力

在Transformer中,注意力模块会并行多次重复计算。每个并行计算称为一个 Attention Head。注意力模块将其Query、Key和Value进行 N 次拆分,并将每次拆分独立通过一个单独的注意力head头。然后,所有这些类似的注意力最后会合并在一起,产生最终的注意力分数。这就是所谓的多头注意力机制,使Transformer有更大的特征表示能力为每个单词编码多种关系。

为了确切了解其内部是如何处理数据的,让我们在训练Transformer解决翻译问题时,回顾一下注意力模块的工作过程。我们使用上节的翻译例子,包括一个输入序列(英语 “You are welcome”)和一个目标序列(西班牙语 “De nada”)。

07

Attention中的超参数

Attention中有三个超参数可以决定数据的维度。

  • Embedding Size : 嵌入向量的宽度(我们在示例中使用的宽度为 6)。这个维度贯穿整个Transformer模型,因此有时也被称为模型尺寸

  • Query Size: Query大小等于Key和Value的大小 – 三个线性层分别用于生成Query、Key和Value矩阵的权重大小(我们在示例中使用的Query大小为 3)。

  • 注意力头的数量(我们在示例中使用 2 个注意头)。

此外,我们还有参数batchsize,这为我们提供了一个样本数量维度。

08

输入层

输入嵌入层和位置编码层产生一个形状矩阵(Samples,Seq_len,Embedding_size),并将其输入送到编码器stack中第一个编码器的Query、Key和Value中。

为了简单直观,我们将放弃图片中的Batch这一维度,转而关注其余维度。

09

线性层

Query、Key和Value有三个独立的线性层。每个线性层都有自己的权重矩阵。输入通过这些线性层产生 Q、K 和 V 三个矩阵。

10

根据注意力头划分数据

现在,数据被分割到多个注意力头,以便每个注意力头都能独立处理部分数据。

不过需要注意的是,这只是逻辑上的切分。Query、Key和Value在物理上并没有被切分成单独的矩阵,每个Attention都对应一个单独的矩阵。所有注意力头共享同一个线性层,只是在自己的数据矩阵上运行。

11

根据注意力头划分线性层权重

这种逻辑分割是通过将输入数据和线性层权重均匀地划分到各注意头来实现的。我们可以通过选择Query Size来实现这一目标:

Query Size = Embedding Size / Number of heads

在我们的例子中,这就是QuerySize = 6/2 = 3 的原因。尽管权重(和输入数据)是一个单独的矩阵,但我们可以将其视为 "堆叠 "了每个头的单独权重。如下所示:

因此,所有注意力头的计算都可以通过单一的矩阵运算实现,而不需要 N 个单独的运算。这不仅提高了计算效率,还减少了所需的线性层,使模型保持简单,同时还能发挥单个注意力头的威力。

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

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

12

重塑QKV矩阵

线性层输出的 Q、K 和 V 矩阵经过reshape操作,包含了一个明确的head的维度。现在,每个切片都对应于每个head的一个矩阵。

通过交换heads维度和seq维度,该矩阵再次重塑。虽然没有绘制Batch维度,但现在Q的维度已经变成了(Batch、heads、seq_len、query_size)。

在下图中,我们可以看到从线性层出来后拆分示例 Q 矩阵的完整过程。

最后一个阶段只是为了形象化–虽然 Q 矩阵是一个单一的矩阵,但我们可以把它看作是逻辑上每个头互相独立的Q 矩阵的集合。

13

计算每个头的注意力得分

现在我们有了 3 个矩阵,即 Q、K 和 V,它们被分割到各个head中去。这些矩阵用于计算注意力得分。

我们将仅使用后两个维度(seq_len和query_size)来显示单个head的计算过程,而跳过前两个维度(batch和heads)。从本质上讲,我们可以想象,我们正在查看的计算正在 "重复 "批次中的每个头和每个样本。

第一步是在 Q 和 K 之间进行矩阵乘法运算。

现在会在结果中添加一个掩码值。在编码器的自注意力层中,掩码用于掩盖填充值,使其不参与注意力得分的计算。在解码器的自注意力层和解码器的交叉注意力层中会应用不同的掩码,我们稍后会在流程中介绍。

现在,将结果除以Query_size的平方根,然后对其应用Softmax操作。

Softmax 的输出与 V 矩阵之间再进行一次矩阵乘法运算。如下所示:

编码器自注意力层的完整注意力分数计算过程如下:

14

合并多头注意力得分

我们现在有了每个head的独立注意力得分,我们需要将它们合并成一个分数。合并操作本质上与拆分操作相反。

其方法是对结果矩阵进行简单reshape。具体步骤如下:

  • 通过交换维度heads和维度seq_len来重塑注意力得分矩阵。换句话说,矩阵形状从(batch、heads、seq_len、query_size)变为(batch、seq_len、heads、query_size)。

  • 通过reshape操作将其重塑为(batch、seq_len、heads * query_size)来折叠维度。这样就能有效地将每个头部的注意力分数向量合并成一个单一的合并注意力分数。

由于embedding_size=heads *query_size,因此合并后的注意力分数为(batch、seq_len、embedding_size)。在下图中,我们可以看到注意力得分矩阵合并的完整过程。

15

端到端的多头注意力

综上所述,这就是多头注意力的端到端处理流程。

16

多头注意力的优势

嵌入向量用以捕捉单词的含义。在多头注意力的情况下,正如我们所看到的,输入(和目标)序列的嵌入向量在逻辑上被分割成多个head。这有什么意义呢?

这意味着嵌入的不同部分可以学习每个单词不同方面的含义,因为它与序列中的其他单词相关。这使得Transformer可以捕捉到序列中更丰富的语义信息。

为了帮助大家理解,我们来看个例子:一个head可以捕捉名词的 “性别”(男、女、中性),而另一个head则可以捕捉单词的 “词性”(单数与复数)。这在翻译过程中可能很重要,因为在许多语言中,需要使用的动词取决于这些因素。

17

解码器中的自注意力和Mask

解码器中的自注意力层的工作原理与编码器中的自注意力层的功能相同,只是它对目标序列的每个单词进行操作。

同样,掩码mask也会屏蔽掉目标序列中的 "填充 "词。

18

解码器中的交叉注意力和Mask

解码器的交叉注意力层有两个输入来源。因此,与计算每个输入词与其他输入词之间交互作用的编码器自注意力层和计算每个目标词与其他目标词之间交互作用的解码器自注意力层不同,解码器中的交叉注意力层会计算每个目标词与每个输入词之间的交互作用。

因此,交叉注意力得分中的每个单元格都对应于一个 Q(即目标序列词)与所有其他 K(即输入序列)和所有 V(即输入序列)之间的相互作用。

同样,掩码mask也会屏蔽掉目标输出中后面的单词,这在本系列的第二篇文章中有详细说明。

19

结论

希望这篇文章能让大家对 Transformer 中的注意力模块有一个很好的了解。结合我们在第二篇文章中介绍的整个 Transformer 的端到端流程,我们现在已经介绍了整个 Transformer 架构的详细操作。

您学废了吗?

零基础如何学习大模型 AI

领取方式在文末

为什么要学习大模型?

学习大模型课程的重要性在于它能够极大地促进个人在人工智能领域的专业发展。大模型技术,如自然语言处理和图像识别,正在推动着人工智能的新发展阶段。通过学习大模型课程,可以掌握设计和实现基于大模型的应用系统所需的基本原理和技术,从而提升自己在数据处理、分析和决策制定方面的能力。此外,大模型技术在多个行业中的应用日益增加,掌握这一技术将有助于提高就业竞争力,并为未来的创新创业提供坚实的基础。

大模型典型应用场景

AI+教育:智能教学助手和自动评分系统使个性化教育成为可能。通过AI分析学生的学习数据,提供量身定制的学习方案,提高学习效果。
AI+医疗:智能诊断系统和个性化医疗方案让医疗服务更加精准高效。AI可以分析医学影像,辅助医生进行早期诊断,同时根据患者数据制定个性化治疗方案。
AI+金融:智能投顾和风险管理系统帮助投资者做出更明智的决策,并实时监控金融市场,识别潜在风险。
AI+制造:智能制造和自动化工厂提高了生产效率和质量。通过AI技术,工厂可以实现设备预测性维护,减少停机时间。

AI+零售:智能推荐系统和库存管理优化了用户体验和运营成本。AI可以分析用户行为,提供个性化商品推荐,同时优化库存,减少浪费。

AI+交通:自动驾驶和智能交通管理提升了交通安全和效率。AI技术可以实现车辆自动驾驶,并优化交通信号控制,减少拥堵。


这些案例表明,学习大模型课程不仅能够提升个人技能,还能为企业带来实际效益,推动行业创新发展。

学习资料领取

如果你对大模型感兴趣,可以看看我整合并且整理成了一份AI大模型资料包,需要的小伙伴文末免费领取哦,无偿分享!!!
vx扫描下方二维码即可
加上后会一个个给大家发

在这里插入图片描述

部分资料展示

一、 AI大模型学习路线图

整个学习分为7个阶段
在这里插入图片描述

二、AI大模型实战案例

涵盖AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,皆可用。
在这里插入图片描述

三、视频和书籍PDF合集

从入门到进阶这里都有,跟着老师学习事半功倍。
在这里插入图片描述

在这里插入图片描述

四、LLM面试题

在这里插入图片描述

如果二维码失效,可以点击下方链接,一样的哦
【CSDN大礼包】最新AI大模型资源包,这里全都有!无偿分享!!!

😝朋友们如果有需要的话,可以V扫描下方二维码联系领取~
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值