Attention Mechanisms/zh

    From Marovi AI
    < Attention Mechanisms
    Revision as of 04:01, 24 April 2026 by DeployBot (talk | contribs) ([deploy-bot] Deploy from CI (775ba6e))
    (diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
    Languages: English | Español | 中文
    Article
    Topic area Deep Learning
    Difficulty Advanced
    Prerequisites Neural Networks, Recurrent Neural Networks

    注意力机制(Attention Mechanism)是一组允许神经网络在生成每个输出元素时选择性地关注输入相关部分的技术。注意力机制最初被引入以克服序列到序列模型中固定长度上下文向量的局限性,如今已成为Transformer等现代架构的基础构建模块。

    动机

    早期的序列到序列(Sequence-to-Sequence)模型使用循环神经网络将整个输入序列编码为单个固定维度的向量。这一瓶颈迫使长距离依赖关系被压缩到一个固定大小的向量中,导致在长序列上性能下降。注意力机制通过让解码器在每个生成步骤中查阅每个编码器隐藏状态来解决这一问题,根据学习到的相关性分数对它们进行加权。

    Bahdanau(加性)注意力

    Bahdanau等人(2015)提出了第一个被广泛采用的机器翻译注意力机制。给定编码器隐藏状态 $ h_1, \dots, h_T $ 和解码器状态 $ s_{t-1} $,对齐分数计算为:

    $ e_{t,i} = v^{\!\top} \tanh(W_s\, s_{t-1} + W_h\, h_i) $

    其中 $ W_s $$ W_h $$ v $ 是可学习参数。注意力权重通过应用softmax获得:

    $ \alpha_{t,i} = \frac{\exp(e_{t,i})}{\sum_{j=1}^{T} \exp(e_{t,j})} $

    上下文向量是加权和 $ c_t = \sum_{i=1}^{T} \alpha_{t,i}\, h_i $,它与 $ s_{t-1} $ 拼接后输入解码器。

    Luong(乘性)注意力

    Luong等人(2015)通过用点积或双线性形式替换加性网络来简化评分函数:

    变体 评分函数
    点积(Dot) $ e_{t,i} = s_t^{\!\top} h_i $
    一般(General) $ e_{t,i} = s_t^{\!\top} W_a\, h_i $
    拼接(Concat) $ e_{t,i} = v^{\!\top} \tanh(W_a [s_t;\, h_i]) $

    点积变体要求编码器和解码器维度匹配,而一般变体引入了一个可学习的权重矩阵 $ W_a $

    缩放点积注意力

    Vaswani等人(2017)引入了Transformer中使用的公式。给定查询(Query)矩阵 $ Q $、键(Key)矩阵 $ K $ 和值(Value)矩阵 $ V $

    $ \mathrm{Attention}(Q, K, V) = \mathrm{softmax}\!\left(\frac{Q K^{\!\top}}{\sqrt{d_k}}\right) V $

    缩放因子 $ \sqrt{d_k} $ 防止点积随着键维度 $ d_k $ 的增加而变得很大,否则会将softmax推入梯度极小的区域。

    自注意力

    自注意力(Self-Attention)中,查询、键和值都来自同一个序列。每个位置关注所有其他位置(包括自身),使模型能够在单层中捕获长距离依赖关系。对于输入矩阵 $ X \in \mathbb{R}^{n \times d} $

    $ Q = X W^Q, \quad K = X W^K, \quad V = X W^V $

    自注意力的复杂度为 $ O(n^2 d) $,对于很长的序列来说可能非常昂贵。稀疏注意力(Sparse Attention)和线性注意力(Linear Attention)等高效变体降低了这一成本。

    多头注意力

    多头注意力(Multi-Head Attention)不是执行单个注意力函数,而是使用独立的投影运行 $ h $ 个并行的注意力头:

    $ \mathrm{MultiHead}(Q, K, V) = \mathrm{Concat}(\mathrm{head}_1, \dots, \mathrm{head}_h)\, W^O $

    其中 $ \mathrm{head}_i = \mathrm{Attention}(Q W_i^Q,\, K W_i^K,\, V W_i^V) $。每个头可以学习关注输入的不同方面——例如,一个头可能捕获句法关系,另一个捕获语义关系。典型配置使用8个或16个头。

    位置编码

    由于自注意力是置换不变的(Permutation-invariant)(它将输入视为无序集合),位置信息必须被显式注入。原始Transformer使用正弦位置编码:

    $ \mathrm{PE}(pos, 2i) = \sin\!\left(\frac{pos}{10000^{2i/d}}\right), \quad \mathrm{PE}(pos, 2i+1) = \cos\!\left(\frac{pos}{10000^{2i/d}}\right) $

    可学习的位置嵌入和相对位置编码(例如RoPE、ALiBi)是常见的替代方案,它们可以更好地泛化到未见过的序列长度。

    交叉注意力

    交叉注意力(Cross-Attention)用于查询来自一个序列而键/值来自另一个序列的情况。在编码器-解码器Transformer中,解码器通过交叉注意力关注编码器输出,使模型能够根据完整的输入上下文来生成。

    实践注意事项

    • 掩码(Masking):在自回归解码中,未来位置被屏蔽(在softmax之前设为 $ -\infty $)以保持因果结构。
    • 注意力Dropout:在训练期间随机丢弃注意力权重起到正则化的作用,减少对特定对齐模式的过拟合。
    • 键值缓存(KV Cache):在推理过程中,缓存先前计算的键和值向量以避免冗余计算,显著加速自回归生成。

    参见

    参考文献

    • Bahdanau, D., Cho, K. and Bengio, Y. (2015). "Neural Machine Translation by Jointly Learning to Align and Translate". ICLR.
    • Luong, M.-T., Pham, H. and Manning, C. D. (2015). "Effective Approaches to Attention-based Neural Machine Translation". EMNLP.
    • Vaswani, A. et al. (2017). "Attention Is All You Need". NeurIPS.
    • Shaw, P., Uszkoreit, J. and Vaswani, A. (2018). "Self-Attention with Relative Position Representations". NAACL.
    • Su, J. et al. (2021). "RoFormer: Enhanced Transformer with Rotary Position Embedding". arXiv:2104.09864.