Lazy loaded image
技术
✔️自注意力机制
Words 5033Read Time 13 min
2025-3-12
2025-3-12
type
status
date
slug
summary
tags
category
icon
password
comment
Status
简介: 自注意力机制(Self-Attention)最早可追溯至20世纪70年代的神经网络研究,但直到2017年Google Brain团队提出Transformer架构后才广泛应用于深度学习。它通过计算序列内部元素间的相关性,捕捉复杂依赖关系,并支持并行化训练,显著提升了处理长文本和序列数据的能力。相比传统的RNN、LSTM和GRU,自注意力机制在自然语言处理(NLP)、计算机视觉、语音识别及推荐系统等领域展现出卓越性能。其核心步骤包括生成查询(Q)、键(K)和值(V)向量,计算缩放点积注意力得分,应用Softmax归一化,以及加权求和生成输出。自注意力机制提高了模型的表达能力,带来了更精准的服务。

自注意力机制的历史背景与发展

自注意力机制(Self-Attention)的概念最早可以追溯到20世纪70年代的神经网络研究,但直到近年来才在深度学习领域得到广泛关注和发展。现代意义上的自注意力机制首次出现在2017年的论文《Attention is All You Need》中,该论文由Google Brain团队提出,并引入了Transformer架构。这一创新迅速改变了自然语言处理(NLP)领域的格局。
在此之前,循环神经网络(RNN)及其变体长短期记忆网络(LSTM)和门控循环单元(GRU)是处理序列数据的主要方法。然而,这些模型存在一些固有的局限性,比如难以并行化训练、捕捉长距离依赖关系的能力有限等。此外,随着序列长度增加,RNN类模型的表现往往会下降。
为了解决这些问题,研究人员开始探索基于注意力机制的方法,它最初是为了改善编码器-解码器框架下的机器翻译任务而设计的。传统的注意力机制允许模型在生成输出时集中于输入序列中的某些特定部分,从而提高了性能。但是,这种外部注意力机制仍然依赖于编码器提供的上下文信息。

注意力机制与自注意力机制

注意力机制的查询 和键 来自不同的来源。例如,在中译英模型中,查询 是中文单词的特征,而键 是英文单词的特征。
自注意力机制的查询 和键 则来自同一组元素,即查询 和键 都是中文特征,彼此之间进行注意力计算。这可以理解为,同一句话中的词元或同一张图像中的不同 patch 之间的相互作用。能够更有效地捕捉序列内部复杂的依赖关系,还极大地促进了模型的并行化训练,因为每个位置上的计算都可以独立进行。

自注意力机制

自注意力机制(Self-Attention),也称为内部注意力机制,是一种将单个序列的不同位置关联起来以计算同一序列的表示的注意力机制。这种机制允许模型在处理序列数据时,动态地调整对每个元素的关注程度,从而捕捉序列内部的复杂依赖关系。
自注意力机制的核心在于,它不依赖于外部信息,而是在序列内部元素之间进行信息的交互和整合。这意味着,对于序列中的每个元素,自注意力机制会计算该元素与序列中所有其他元素的相关性,生成一个加权的表示,其中权重反映了元素间的相互关系。
notion image
自注意力机制的计算过程可以被分解为几个关键步骤。
  1. 输入序列被映射到查询(Query)、键(Key)和值(Value)三个向量。
  1. 通过计算查询向量与所有键向量之间的点积来获得注意力得分。这些得分随后被缩放并经过Softmax 函数进行归一化,以获得每个元素的注意力权重。
  1. 这些权重被用来对值向量进行加权求和,生成最终的输出序列。

自注意力机制在现代深度学习模型中的重要性

自注意力机制的重要性在于其灵活性和强大表达能力,特别是在处理长文本或其他类型的序列数据方面表现尤为突出。以下是几个关键点:
  • Transformer架构的核心:自从Transformer被提出以来,它已经在多个NLP基准测试中取得了顶尖的成绩,并成为了当前最先进的预训练语言模型的基础,如BERT、GPT系列等。这些模型都依赖于多层堆叠的自注意力机制来实现卓越的效果。
  • 并行化优势:与传统RNN不同的是,自注意力机制允许对整个序列进行并行处理,而不是按顺序逐个处理时间步。这一特性大大加快了训练速度,尤其是在大规模语料库上训练时显得尤为重要。
  • 捕捉全局依赖性:通过让每个元素都能“看到”整个序列中的所有其他元素,自注意力机制能够在单一层内建立起非常广泛且深入的上下文联系。这对于理解复杂句子结构或文档级别的语义关系至关重要。
  • 跨领域应用:除了NLP之外,自注意力机制也被成功应用于计算机视觉、语音识别等多个领域。例如,在图像分类任务中,它可以用来捕捉图片内的空间依赖关系;而在视频分析中,则有助于理解时间维度上的动态变化。

Q、K、V

在自注意力(Self-Attention)机制中,查询(Query,简称Q)、键(Key,简称K)和值(Value,简称V)是三个核心的概念,它们共同参与计算以生成序列的加权表示。
查询(Query,Q)
查询向量Q代表了当前元素在序列中的作用,它用于“询问”序列中的其他元素以获取相关信息。在自注意力机制中,每个元素都会生成一个对应的查询向量,该向量用于与序列中的所有键向量进行比较,以确定每个元素的重要性或相关性。
键(Key,K)
键向量K包含了序列中每个元素的特征信息,这些信息将用于与查询向量进行匹配。键向量的主要作用是提供一种机制,使得模型能够识别和比较序列中不同元素之间的关系。在自注意力中,每个元素都会有一个对应的键向量,它与查询向量一起决定了注意力分数。
值(Value,V)
值向量V包含了序列中每个元素的实际信息或特征,这些信息将根据注意力分数被加权求和,以生成最终的输出。值向量代表了序列中每个元素的具体内容,它们是模型最终用于生成输出的原始数据。
notion image
在自注意力机制中,输入序列的每个元素首先被映射到三个向量:查询(Q)、键(K)和值(V)。这一过程通常通过与三个权重矩阵的线性变换实现。具体来说,输入序列 与权重矩阵 相乘,得到
其中, 表示输入序列, 是可学习的权重矩阵。这些矩阵的维度通常为:
的维度为:
这三个变换可以看作是对原始输入的一种重新编码,目的是从不同角度提取信息,以便后续计算注意力分数时能够更有效地捕捉到元素间的相关性。

缩放点积计算注意力得分

在自注意力机制中,查询向量 与所有键向量 之间的点积被用来计算注意力得分。为了避免点积结果过大导致梯度问题,引入了一个缩放因子 ,其中 是键向量的维度。
缩放后的注意力得分计算如下:
  • :表示查询 和键 之间的点积,结果是一个形状为 (N, L, L) 的矩阵,表示每个查询对所有键的关注程度。
  • :缩放因子,用于稳定梯度传播,防止点积值过大导致的数值不稳定。
这个操作生成了一个注意力得分矩阵,其中每个元素代表对应元素对之间的相似度。

Softmax 归一化

为了将注意力得分转换为权重,应用 Softmax 函数进行归一化。Softmax 确保所有输出权重的和为1,从而使得模型可以学习到每个元素对的重要性:
函数定义为:
它会将任意实数值转换为一个范围在 [0, 1] 之间且总和为 1 的概率分布。
其中, 是注意力得分矩阵中的元素。这意味着对于每个位置 ,在计算完 后,我们会获得该位置与其他所有位置的相关性的“概率”。

权求和生成输出

最后,归一化的注意力权重被用来对值向量V进行加权求和,生成最终的输出序列。输出序列的每个元素是所有值向量的一个加权和,权重由对应的注意力权重决定:
其中, 是序列长度, 是输出序列中的第 个元素, 是第 个元素对第 向量的注意力权重。这一步骤有效地整合了序列内部的信息,使得每个元素的输出表示包含了整个序列的上下文信息。
notion image
 
接下来,会一步步拆解,让你更清楚地理解这个过程。
首先,我们看输入部分:
notion image
然后,我们会用初始化的权重来计算key、value和query:
notion image
接下来,我们会为第一个输入计算 attention score:
notion image
然后,对attention score执行softmax操作:
notion image
这一步之后,我们会将每个输入的softmaxed score和对应的value相乘,得到3个weighted value:
notion image
最后,把上一步的 weighted value 加起来(对应元素相加),就得到了输出。同样的步骤,我们也会对input#2和input#3执行,得到另外两个输出。
notion image
最后,这段代码展示了如何定义一个SelfAttention类,并在其中实现自注意力机制的核心步骤。

代码案例

自然语言处理(NLP)中的机器翻译

案例描述:使用Transformer架构进行英德双语翻译。Transformer通过多层堆叠的自注意力机制,能够捕捉源语言句子中各个单词之间的复杂关系,从而生成更加准确的目标语言句子。

推荐系统中的个性化推荐

在推荐系统中,个性化推荐的目标是为每个用户提供最符合其兴趣和需求的内容或商品。为了实现这一点,模型需要能够捕捉用户行为模式,并根据这些模式进行预测。自注意力机制(Self-Attention)因其强大的建模能力,在这一领域得到了广泛应用。下面我们将进一步细化基于自注意力机制的个性化推荐系统的构建过程,并提供更加详细的代码示例。
模型选择:SASRec (Self-Attentive Sequential Recommendation)
SASRec 是一种专门为序列化推荐设计的深度学习模型,它利用了自注意力机制来捕捉用户历史行为之间的复杂依赖关系。该模型可以有效地处理长序列数据,并且能够在不牺牲计算效率的情况下提高推荐质量。
数据准备
在构建个性化推荐系统之前,我们需要准备好用户的历史行为数据。通常情况下,这些数据包括用户ID、物品ID以及交互时间戳等信息。对于SASRec模型来说,还需要对物品进行编码,以便输入到模型中。
构建SASRec模型
接下来,我们将定义SASRec模型结构。这里使用 TensorFlow 和 Keras API 来实现。需要注意的是,实际应用中可能需要安装额外的库,如 tfrs 或者其他特定于推荐系统的框架。
训练模型
为了训练模型,我们需要定义损失函数和优化器,并编写一个适合推荐任务的数据生成器。这里简化了训练过程,实际应用中应该根据具体情况进行调整。
推荐预测
一旦模型训练完成,就可以用来为新用户提供推荐服务。通过给定用户的最新行为序列,模型可以预测下一个最有可能点击的商品。
这种类型的模型特别适用于那些需要理解用户长期偏好变化的应用场景,例如电子商务平台上的商品推荐、社交媒体中的内容推荐等。
通过上述详细探讨,我们不仅深入了解了自注意力机制的基本原理及其在自然语言处理、计算机视觉、语音处理以及推荐系统等多个领域的广泛应用,还结合具体案例和代码示例展示了如何将这一强大工具付诸实践。自注意力机制凭借其捕捉复杂依赖关系的能力、并行化处理的优势以及对长序列数据的有效建模,已经成为现代深度学习不可或缺的一部分。

参考文献:

Vaswani, A., Shazeer, N., Parmar, N., Uszkoreit, J., Jones, L., Gomez, A. N., … & Polosukhin, I. (2017). Attention is all you need. In Advances in neural information processing systems (pp. 5998-6008).
Devlin, J., Chang, M.-W., Lee, K., & Toutanova, K. (2018). BERT: Pre-training of deep bidirectional transformers for language understanding. arXiv preprint arXiv:1810.04805.
Dosovitskiy, A., Beyer, L., Kolesnikov, A., Weissenborn, D., Zhai, X., Unterthiner, T., … & Houlsby, N. (2020). An image is worth 16x16 words: Transformers for image recognition at scale. arXiv preprint arXiv:2010.11929.
Wu, Y., Al-Shedivat, M., Ghasemipour, S., Wang, Y., Abbeel, P., Schwing, A. G., & Finn, C. (2020). Pay less attention with lightweight and dynamic convolutions. International Conference on Learning Representations.
上一篇
Transformer
下一篇
混合专家模型(MoE)