《Attention Is All You Need》--注意力

85 阅读2分钟

Transformer架构的核心机制——注意力(Attention) ——是该模型取代传统循环神经网络(RNN)和卷积网络(CNN)的关键创新。

Transformer中注意力的核心作用与优势

注意力机制是Transformer架构的唯一基础,完全摒弃了循环和卷积结构。这种彻底的技术转变将序列建模范式从依赖于时间上逐步累积的“记忆”转变为通过计算元素间关系权重的“关系依赖范式”。

  1. 大规模并行化:传统RNN由于其固有的顺序处理性质,难以实现并行化计算,导致训练耗时且效率低。而Transformer架构将复杂的序列依赖建模转化为高维矩阵乘法运算,实现了高度并行处理能力。这种并行计算优势使得在合理的时间和成本内训练超大型模型成为可能。
  2. 缩短信息路径:注意力机制显著缩短了网络中长程依赖(long-range dependencies)之间的路径长度。在一个自注意力层中,所有位置之间的连接操作数量是恒定的(O(1)O(1)),而RNN层需要 O(n)O(n) 的顺序操作。路径越短,模型学习长程依赖关系就越容易,从而解决了RNN在长序列中容易出现的上下文信息衰减问题(即梯度消失或爆炸)。
  3. 上下文理解:注意力机制允许模型在计算序列中任一元素(词语或特征)的表示时,直接关注序列中的所有其他元素,并分配权重来衡量它们之间的相关性。这种能力使模型能够捕捉全局上下文信息,从而产生更具语境敏感性的表示。此外,自注意力机制还可以产生更具可解释性的模型,因为它能够揭示与句子句法和语义结构相关的依赖关系。

注意力机制的类型和计算细节

Transformer主要依赖于缩放点积注意力(Scaled Dot-Product Attention)多头注意力(Multi-Head Attention)

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

注意力函数可以被描述为一个映射过程,它将查询(Query, Q)和一个键-值(Key-Value, K-V)对集合映射到一个输出,其中输出是值的加权和

  • Q, K, V 向量:查询(Q)代表当前正在被处理的词语,键(K)代表序列中所有元素的“索引”,而值(V)包含实际的语义内容。
  • 计算方式:Transformer采用点积(Dot-Product)来衡量Q和K之间的匹配度。其核心公式为: Attention(Q,K,V)=softmax(QKTdk)V\text{Attention}(Q, K, V) = \text{softmax} \left( \frac{Q K^T}{\sqrt{d_k}} \right) V
  • 缩放因子:除以键维度 dkd_k 的平方根 (dk\sqrt{d_k}) 是为了防止梯度消失。当 dkd_k 较大时,点积 QKTQ K^T 的值可能会变得很大,使得Softmax函数被推入梯度极小的区域。缩放因子将 QKTQ K^T 结果的方差标准化到1,从而稳定了Softmax的输入和模型的训练。
  • 效率:在实践中,缩放点积注意力比加性注意力(Additive Attention)更快且更节省空间,因为它可以通过高度优化的矩阵乘法代码来实现。

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

MHA是Transformer架构的关键组成部分,旨在并行地捕捉输入序列中不同方面的关系

  • 设计理念:模型不是使用单一的、高维的注意力函数,而是将 Q、K、V 线性地投影到 hh 个不同的、维度较低的子空间(即“头”)。
  • 功能多样性:每个注意力头可以独立地关注输入序列中“相关性”的不同定义。例如,一个头可能专注于句法关系,而另一个则专注于语义关系。通过这种方式,MHA能够从更丰富和多样化的视角来更新输入表示。
  • 实现:每个头独立地计算缩放点积注意力,然后将所有 hh 个头的输出在特征维度上拼接起来,并通过一个最终的线性投影 WOW^O 恢复到所需的输出维度 dmodeld_{\text{model}}

注意力机制在Transformer架构中的应用

Transformer是一个编码器-解码器架构的实例,注意力机制在编码器和解码器中以三种不同的形式使用。

1. 编码器自注意力 (Encoder Self-Attention)

  • 作用:在编码器内部,自注意力允许输入序列中的每个位置关注前一层编码器中的所有位置
  • 机制:查询、键和值都来自前一个编码器层的输出。这是一种全连接或 all-to-all 注意力,不需要因果掩码,用于将输入序列转化为上下文感知的表示。

2. 解码器掩码自注意力 (Decoder Masked Self-Attention)

  • 作用:在解码器内部,自注意力机制被修改并施加了掩码
  • 机制:查询、键和值都来自前一个解码器层的输出。然而,通过应用掩码(Masking) ,每个位置只能关注到该位置及其之前的所有位置。这种掩码机制防止了信息向左流动(即不能看到未来的输出标记),从而保留了解码器的自回归(autoregressive)属性,确保预测仅依赖于已生成的输出标记。

3. 编码器-解码器交叉注意力 (Encoder-Decoder Cross-Attention)

  • 作用:作为解码器中的第三个子层,它位于自注意力和前馈网络之间。它允许解码器的每个位置关注整个输入序列,从而实现源序列和目标序列之间的动态对齐。
  • 机制查询(Q) 来自前一个解码器层的输出,而 键(K)和值(V) 来自Transformer编码器的最终输出。这使得解码器能够利用其当前的解码状态(Q)来查询和整合编码器输出(K/V)中最相关的信息。

挑战与演变

尽管注意力机制带来了性能飞跃,但原始Transformer面临的主要挑战是其计算和内存复杂度与序列长度 NN 成二次方关系 (O(N2)O(N^2)) 。在计算注意力矩阵 QKTQ K^T 时,序列长度翻倍,计算量将增加四倍。这种二次复杂度极大地限制了模型处理长序列的能力。

为了克服这一瓶颈,研究界致力于开发低复杂度替代方案,如Longformer、Reformer、Linformer和Performer等,它们通过稀疏化或近似化注意力计算来尝试将复杂度降低至亚二次方时间。然而,有理论研究指出,对于某些涉及文档相似性等关键学习任务,任何亚二次方时间的方法都无法有效解决(假设 SETH 猜想成立),这意味着在追求计算效率的同时,存在着表达能力的理论下限。

尽管如此,注意力机制的强大表达能力毋庸置疑,因为即使是一个包含单个注意力单元的简单Transformer,也能够解决文档相似性等需要二次时间复杂度的任务。