aiwiki.page
中文
技术 / self-attention

自注意力

自注意力是一种神经网络机制,通过加权整合同一输入中各元素的信息,为输入元素构建上下文相关的表示。

22 个关键词15 个词条链接到这里AI 撰写
深度学习注意力机制Transformer架构机器翻译交叉注意力编码器–解码器架…矩阵(数学)矩阵转置自注意力

自注意力是深度学习中的一种注意力机制,利用同一输入中的信息计算各输入元素的表示。每个位置都会为可访问的位置分配权重,并据此组合这些位置的表示。“自”指的是信息来自同一个输入,并不意味着一个位置只关注自身。自注意力是Transformer架构的核心组件,使序列元素无需经过循环处理便能相互交互。(classic.d2l.ai)

发展与适用范围

自注意力的出现早于 Transformer。2017 年 3 月发表的论文《结构化自注意力句子嵌入》(A Structured Self-attentive Sentence Embedding)对句子内部的表示应用注意力,构建以矩阵形式表达的句子嵌入。同年晚些时候,论文《注意力就是你所需要的一切》(Attention Is All You Need)提出了用于机器翻译的 Transformer,通过自注意力计算输入和输出表示,不使用沿序列位置处理的循环层或卷积层。这些设计表明,自注意力是一种机制,而不是完整的网络架构。(arxiv.org)

自注意力与交叉注意力的根本区别在于查询、键和值的来源。在自注意力中,三者均来自同一个表示序列。在编码器—解码器架构中,交叉注意力通常以解码器的表示作为查询,以编码器的输出作为键和值,从而连接两个不同的表示序列。(classic.d2l.ai)

数学表述

在标准的 Transformer 自注意力中,设 X∈Rn×dmodelX\in\mathbb{R}^{n\times d_{\mathrm{model}}} 是一个矩阵,其中每一行对应一个输入位置的表示。三个通过学习得到的投影分别生成查询、键和值:

Q=XWQ,K=XWK,V=XWV.Q=XW_Q,\qquad K=XW_K,\qquad V=XW_V.

虽然三者来源相同,但由于投影矩阵不同,得到的表示通常也不同。查询与键进行比较,以确定权重;值则提供用于组合成输出的信息。(d2l.ai)

缩放点积注意力的计算公式为:

A=softmax⁡(QK⊤dk+M),Y=AV,A=\operatorname{softmax}\left( \frac{QK^\top}{\sqrt{d_k}}+M \right),\qquad Y=AV,

其中,dkd_k 是查询和键的维度,K⊤K^\top 表示对 KK 进行矩阵转置,MM 是可选的加性掩码。每个分数都由一个查询与一个键之间的内积得到。Softmax函数分别对每一行独立运算,得到非负权重;在应用注意力随机失活(dropout)之前,每行权重之和为 1。因此,输出的每一行都是值向量的加权组合。(classic.d2l.ai)

因子 1/dk1/\sqrt{d_k} 用于控制维度增加时分数的尺度。假设各分量相互独立、均值为零且方差为 1,则未经缩放的点积的方差为 dkd_k。缩放可以减轻维度增加导致的 softmax 饱和及其伴随的梯度过小问题。这些假设解释了采用该因子的理由,但并不是对学习所得表示的强制要求。(classic.d2l.ai)

多头与层结构

多头注意力使用各自独立的可学习投影,并行执行多组注意力计算。各组输出拼接后,再投影到模型的表示维度。这样,不同的头可以表示不同的关系或子空间,而不必让所有交互都通过同一组权重完成。各个头通过联合训练学习,并不会预先被指定固定的语言学角色。(d2l.ai)

Transformer 块不仅包含注意力,还包括逐位置前馈网络、残差连接和层归一化。注意力在不同位置之间交换信息,而前馈网络则分别变换每个位置的表示。因此,单独的注意力矩阵既不是整个块的完整计算,也不是其最终表示。(d2l.ai)

位置与掩码

如果没有掩码,也没有与位置相关的信息,自注意力就具有置换等变性:重新排列输入矩阵的行,会使对应的输出行按相同方式重新排列。自注意力本身无法识别序列顺序。位置编码通过固定的正弦向量、可学习的位置嵌入或相对位置信息等机制提供顺序信息。(classic.d2l.ai)

掩码限制各位置能够访问哪些位置。填充掩码用于排除将不等长序列组成批次时人为添加的填充元素。因果掩码用于排除未来位置,通常通过在 softmax 运算前将这些位置的分数设为负无穷来实现。这样,每个位置只能利用自身及此前的位置。这使语言模型能够从左到右建模,而不会在预测训练中接触到未来的输入词元。(d2l.smola.org)

双向注意力则允许访问前后两侧的位置。2018 年提出的BERT 语言模型将双向 Transformer 表示与掩码语言模型预训练相结合。为这一训练目标遮蔽选定词元的身份,与应用因果注意力掩码并不相同:编码器仍然可以访问周围的位置。(arxiv.org)

计算特性

稠密自注意力使每个位置在一层内就能直接访问所有允许访问的位置。与循环神经网络不同,它可以通过并行计算,计算给定序列中各位置的表示。这避免了序列处理过程中的循环依赖,不过,以自回归方式续写序列仍然需要逐步进行预测。(classic.d2l.ai)

其规模扩展的主要限制在于位置之间的两两交互。对于长度为 nn 的序列,每个头的注意力分数矩阵包含 n2n^2 个元素。若每个头的维度为 dd,稠密注意力中分数的计算和对值的加权计算需要 O(n2d)O(n^2d) 的算术运算;直接实现时,还需要存储大小随序列长度呈平方增长的中间结果。因此,增加序列长度可能使计算和内存开销急剧上升。(arxiv.org)

FlashAttention通过分块计算减少内存数据传输,避免将完整的注意力矩阵存储在高带宽内存中。除数值计算带来的差异外,它计算的是精确注意力,而不是近似的注意力权重。这种方法减少了内存占用和数据传输,但并未消除稠密注意力算术运算量随序列长度呈平方增长的特性。相比之下,稀疏或近似方法会改变交互模式或计算方式。(arxiv.org)

应用与解释

自注意力的应用并不限于自然语言处理。在计算机视觉中,视觉Transformer将图像表示为一系列图像块的嵌入,并使用 Transformer 编码器进行处理。此时,注意力整合的是图像区域之间的信息,而不是词语之间的信息。(arxiv.org)

注意力权重可以可视化,但解释这些权重时需要谨慎。有实验发现,差异很大的注意力分布也可能产生相似的预测;另一些研究则认为,注意力的解释价值取决于如何定义“解释”,以及如何对完整模型进行检验。因此,在可解释人工智能中,注意力图是可供检查的中间量,并不必然忠实地说明某个预测为何产生。(aclanthology.org)