在 NLP 领域,注意力机制(Attention)已经成为现代模型的核心基石,从早期的 Encoder-Decoder 到如今的 Transformer、大语言模型,都离不开它的支撑。今天我就结合学习笔记,把注意力机制的核心原理、演进脉络和经典实现一次性讲透。


一、注意力机制是什么?

1. 核心思想

早期的 Encoder-Decoder 模型(如 Seq2Seq)只能把整个输入压缩成一个固定向量,无法区分 “重点” 和 “非重点”,在处理长文本时效果极差。

注意力机制的本质:让模型在处理每一步输出时,自动关注输入中最相关的部分,弱化不重要的信息,就像人阅读时会重点关注和当前语义最相关的词语。

2. 核心公式

不管哪种注意力,都遵循统一的计算范式:Attention(Q,K,V)=softmax(score(Q,K))⋅V拆解为三步:

  1. 打分(Score):计算 Query(查询)和 Key(键)的相似度,得到注意力分数
  2. 归一化(Softmax):将分数转化为 0~1 之间的权重,保证总和为 1
  3. 加权求和:用权重对 Value(值)进行加权,得到最终的注意力输出

二、注意力机制的计算流程

我们以机器翻译为例(输入英文 “The cat eats fish”,输出中文 “猫吃鱼”),直观展示注意力的计算过程:

1. 准备 Q、K、V

  • Q(Query):来自 Decoder 的隐藏状态,代表 “当前要生成的词需要查询什么信息”
  • K(Key):来自 Encoder 的隐藏状态,代表 “输入中每个词提供了什么信息”
  • V(Value):和 K 同源,代表 “输入中每个词的实际内容信息”

2. 三步计算

以生成目标词 “猫” 为例:

  1. 打分:计算 Q 和每个 K 的相似度,得到分数 [2.6, 1.2, 6.1, 2]
  2. 归一化:通过 Softmax 转化为注意力权重 [0.2, 0.06, 0.1, 0.1]
  3. 加权求和:用权重对 V 加权,得到针对 “猫” 的上下文向量 [0.2*v1 + 0.06*v2 + 0.1*v3 + 0.1*v4]

每生成一个目标词,都会重复这个过程,动态计算专属的上下文向量,让模型精准聚焦关键信息。


三、两种经典注意力:加法 vs 乘法

注意力机制的核心差异在于 ** 打分函数(Score)** 的设计,主流分为加法注意力和乘法注意力:

1. 加法注意力(Bahdanau Attention)

  • 打分公式:score(qi​,kj​)=v⊤⋅tanh(Wq​qi​+Wk​kj​)
  • 特点
    • 通过可学习参数 W_q, W_k, v 来计算相似度
    • 适合维度不一致的 Q 和 K
    • 计算复杂度高,效率较低

2. 乘法注意力(Luong Attention)

  • 打分公式:score(qi​,kj​)=qi⊤​kj​
  • 特点
    • 直接计算 Q 和 K 的点积,速度快、可并行
    • 要求 Q 和 K 维度相同
    • 效果更优,是后续 Transformer 的基础

3. 核心对比

表格

特性 加法注意力 乘法注意力
打分方式 神经网络 + 激活函数 点积
计算效率
并行性
适用场景 Q/K 维度不一致 Q/K 维度一致

四、缩放点积注意力:Transformer 的核心

为了解决乘法注意力的数值稳定性问题,Transformer 提出了缩放点积注意力(Scaled Dot-Product Attention),这也是现代大模型的基础。

1. 公式

Attention(Q,K,V)=softmax(dk​​QK⊤​)V

  • dk​:Q/K 的维度
  • 关键改动:在点积后除以 dk​​ 进行缩放

2. 为什么要除以 dk​​?

假设 Q 和 K 的元素服从均值为 0、方差为 1 的分布:

  • 直接点积 QK⊤ 的结果方差会变成 dk​,数值过大
  • 经过 Softmax 后会趋近于 one-hot 编码,梯度消失,模型无法学习
  • 除以 dk​​ 后,方差回到 1,保证数值稳定,梯度正常流动

3. 直观理解

缩放操作就像 “温度调节”,防止 Softmax 的输出过于尖锐,让模型能更平滑地分配注意力权重。


五、注意力机制的演进脉络

从早期的简单实现到 Transformer 的核心模块,注意力机制的演进逻辑非常清晰:

  1. 原始注意力:解决 Seq2Seq 长文本问题,实现动态关注重点
  2. 加法 / 乘法注意力:探索不同打分方式,平衡效果与效率
  3. 缩放点积注意力:优化数值稳定性,成为 Transformer 核心
  4. 多头注意力(Multi-Head Attention):扩展到多维度关注,让模型同时捕捉不同类型的语义关联
  5. 自注意力(Self-Attention):让输入序列内部的词互相注意力,捕捉全局依赖

六、总结与实践建议

核心总结

  • 注意力机制的本质是动态加权:让模型在每一步都聚焦最相关的信息
  • 统一范式:打分 → 归一化 → 加权求和
  • Transformer 核心:缩放点积注意力,解决了数值稳定性问题,为并行计算和长序列建模打下基础

实践建议

  • 入门阶段:先理解加法 / 乘法注意力的计算流程,手动推导一遍机器翻译的例子
  • 进阶阶段:重点掌握缩放点积注意力,理解除以 dk​​ 的数学意义
  • 工程实践:直接使用 PyTorch/TensorFlow 的nn.MultiheadAttention模块,快速搭建 Transformer 模型
Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐