Transformer 注意力机制

2025 年 2 月 3 日 | 阅读 9 分钟

Vaswani 等人在论文 "Attention is All You Need" 中提出的 Transformer 模型已成为自然语言处理 (NLP) 领域的新王者。因此,Transformer 的主要组成部分之一就是所谓的注意力机制,它使模型能够确定一个词在特定句子中的重要性,即使它不是第一个词。这使得模型能够捕捉数据的依赖关系和关联,从而在解决翻译、文本生成等问题时获得更好的性能。因此,Transformer 模型提出的注意力机制已成为 NLP 的新参考,并且是现代架构的基础。

Transformer 模型是一种深度学习模型,用于在人工智能程序和软件中执行自然语言处理。

Transformer 是一种深度学习架构,专门用于顺序数据处理、语言翻译和文本生成。与 RNN 和 CNN 不同,Transformer 采用注意力机制来捕捉句子中的所有单词,无论它们在结构中的距离如何。

什么是注意力机制?

注意力机制是一种技术,通过这种技术,模型在生成输出序列的每个组件时,能够专注于输入序列的特定位置。在确定模型输入的权重时,模型可以优先考虑一个信息片段而不是另一个。这在语言翻译等操作中特别有用,其中某些词的引用取决于其周围的上下文。它展示了 Transformer 中用于在输入和输出之间建立连接的各种注意力机制。

1. 缩放点积注意力 (Scaled Dot-Product Attention)

缩放点积注意力是 Transformer 注意力步骤中的一个重要组成部分。它包含三个主要元素:查询 (Q)、键 (K) 和值 (V)。注意力分数可以通过查询向量和键向量的点积得到。然后,分数除以键向量维度的平方根。为了从该分数中导出注意力权重,将其通过 softmax 函数,然后得到值向量的注意力总和。

公式

Transformer Attention Mechanism

其中 dk 是键向量的维度。

2. 多头注意力 (Multi-Head Attention)

多头注意力增强了模型一次关注输入序列多个部分的能力。这是通过使用多个注意力头来实现的,每个头都有自己的查询矩阵、键矩阵和值矩阵。然后将这些头的输出相加,再通过线性变换得到最终输出。这种机制允许模型涵盖给定序列中的各种特征和关系。

公式

MultiHead (Q, K, V) = concat(head1 , head2 ,....., headh)Wo

其中 head1 = Attention (QWiQ, KWiK, VWiV)

此处 WiQ、WiK、WiV 是第 i 个注意力头的投影矩阵,WO 是输出投影矩阵。

3. 自注意力 (Self-Attention)

自注意力或内部注意力意味着模型在推导单词表示时,可以根据同一序列中的其他位置来计算序列。在 Transformer 架构中,自注意力同时应用于编码器和解码器部分,这使得捕捉输入序列中的长距离依赖关系和关联成为可能。

4. 编码器-解码器注意力 (Encoder-Decoder Attention)

交叉注意力,也称为编码器-解码器注意力,用于 Transformer 模型的可​​解码器阶段。它使解码器在生成目标句子中的每个单词时,能够关注源句子(由编码器编码)中的必要部分。这种注意力允许解码器访问整个输入序列,从而提高了翻译的质量和相关性。

5. 因果注意力或掩码自注意力 (Causal or Masked Self-Attention)

因果注意力或掩码自注意力用于解码器:这确保在预测特定位置的输出时,只能看到前一个位置的输出。这对于语言建模等任务尤其重要,在这些任务中,不应该在训练期间提供后续标记。这种不敏感的原理适用于未来的标记;未使用的标记被掩码,因此模型无法窥视未来的标记。

公式

Masked attention(Q, V, K) = softmax((QK^T+M)/root(dk))V

其中 M 是掩码矩阵,应被掩码的位置为 -∞。

Transformer 注意力机制的实现

步骤 1:导入库

第一步是导入程序开发所需的库。首先,我们需要导入 TensorFlow 和将用于我们程序的所有其他必需库。

步骤 2:缩放点积注意力

它通过按维度的平方根进行缩放来计算查询向量和值向量之间的兼容性。为此,实例化 ScaledDotProductAttention 类,该类计算注意力分数并得出值向量的加权和。这包括点积计算、分数的重新缩放、如果需要则在分数中使用掩码、获取分数的 softmax 以及最后的值的加权和。

步骤 3:多头注意力

定义 MultiHeadAttention 类以采用多个注意力头,模型能够一次关注序列的不同部分。

步骤 4:位置编码

创建 PositionalEncoding 类以添加位置信息,以识别嵌入序列中标记的位置。

步骤 5:编码器层

导出 EncoderLayer 类,它作为多头注意力和前馈网络、层归一化和用于正则化目的的 dropout 的组合。

步骤 6:编码器

通过添加多个编码器层、嵌入和位置编码来构建 Encoder 类。最后,检查编码器层的工作情况,并将编码器应用于需要输入的文本。在解码过程之前的最后一步是测试编码器层和编码器,如下所示。

代码

输出

 
(32, 20, 128)

说明

以上是 Transformer 模型核心组件——注意力机制在 TensorFlow 中的通用代码。Scaled Dot-Product Attention 类计算注意力权重,Multi-Head Attention 类支持它们同时关注输入序列的不同部分。Positional Encoding 类以向量形式为标记添加位置信息,以便在线性空间中区分它们,而 Encoder Layer 添加了归一化和 dropout 以实现最佳正则化。Encoder 类依赖于多个编码器层,因此能有效地处理输入序列。由于从编码器层到解码器层通过使用注意力层和前馈层,编码器层的输出没有经过任何修改,因此通过使用测试输入来检查编码器层的输出形状,以确保其正常工作并返回正确的形状。

Transformer 注意力机制的意义

Transformer 中的注意力机制通过提供几个独特的优势,彻底改变了自然语言处理 (NLP) 领域

  1. 并行处理:与逐个单词处理的循环神经网络 (RNN) 不同,Transformer 中的所有单词都以并行方式进行处理。这种并行性极大地有助于减少训练时间,从而提高模型的效率,可扩展性是另一个得到增强的因素。
  2. 长距离依赖:传统模型在识别数据中的长距离依赖方面也存在不足。Transformer 中的注意力机制意味着注意力可以关注序列中遥远的单词,从而很好地解决了这个问题。这对于许多 NLP 任务都非常有用,因为这些上下文理解通常需要在相当大的距离上进行。
  3. 可扩展性:Transformer 具有高度的可扩展性。这意味着它们可以处理不同大小的数组并解决与给定模型类型的经典代表相比具有不同复杂性的函数。因此,Transformer 的可扩展性使其适用于各种任务,从最简单的文本分类到机器翻译。
  4. 上下文感知:在注意力机制中,通过使输入序列长度的分布依赖于特定步骤的功能,Transformer 可以选择性地在这些步骤中更多地关注输入的区域。这种上下文感知的处理会产生更准确或至少更适合上下文的输出。

Transformer 模型应用

Transformer 及其注意力机制已成功应用于各种 NLP 任务,证明了其多功能性和有效性

  1. 机器翻译:去年,我们看到了像 BERT(代表 Transformer 的双向编码器表示)和 GPT(代表生成式预训练 Transformer)这样的突破性模型在语言翻译方面表现出色。这些模型采用注意力机制来学习目标语言中单词使用的上下文,以便翻译给定文本。
  2. 文本摘要:这包括文本摘要的方面,Transformer 在开发摘要长文本的方法方面可能很有效。它们可以区分和存储特定数据,因此,对于自动摘要文章、报告和其他大量文档等内容很有用。
  3. 情感分析:因此,Transformer 的使用保证了在识别序列中的积极或消极词及其上下文方面的高准确性。这种能力使它们在计算书面文本的整体情绪方面非常有用,尤其是在产品评论、社交媒体和客户反馈评估中。
  4. 问答:包括 T5(文本到文本传递 Transformer)在内的模型能够根据上下文回答问题。因此,这些模型能够关注从输入数据中获取重要信息,并生成准确且与上下文相关的答案。
  5. 命名实体识别 (NER):某些类型的 Transformer 能够分段和分类文本中提到的命名实体(人名、组织名、地名)。这对于信息提取、内容分类和实体搜索等应用非常有益。
  6. 文本生成:因此,Transformer 可以生成逻辑上和上下文上相关的文本。这使其适用于内容生成、聊天机器人和写作等领域。
  7. 语言建模:Transformer 用于语言建模,在那里它们学习单词序列的概率分布。这对于自动完成、语音识别和文本输入建议等功能至关重要。

结论

自注意力操作是 Transformer 架构中用于解决输入数据依赖性的主要组成部分。因此,本文概述了五种主要的注意力机制,包括缩放点积注意力、多头注意力、自注意力、编码器-解码器注意力和因果自注意力,当将它们集成到您的模型中时,它们将通过使模型能够处理各种 NLP 任务来增强模型的性能。