关于注意力机制,可以先回顾一下:初探注意力机制-优快云博客
关于 Q、K、V 的计算,可以先回顾一下:来聊聊Q、K、V的计算-优快云博客
基于以上基础,我们接着讲。
多头注意力机制(Multi-Head Attention)
Multi-Head Attention是由多个Self-Attention组成,具体结构如下图:
上图左半部分就是Self-Attention结构,最下面是 Q(查询)、K(键值)、V(值矩阵),通过输入矩阵和权重矩阵相乘得到。
在文章来聊聊Q、K、V的计算-优快云博客中,我们已经知道怎么通过Self-Attention计算得到输出矩阵 Z,而Multi-Head Attention是由多个Self-Attention组合形成的,如下图所示(上图的右半部分):
从上图可以看到Multi-Head Attention包含多个Self-Attention层,首先将输入 X 分别传递到 h 个不同的Self-Attention中,计算得到 h 个输出矩阵 Z。下图是 h = 8 的情况,此时会得到 8 个输出矩阵 Z。
得到 8 个输出矩阵后,Multi-Head Attention将它们拼接在一起,然后传入一个 Linear 层,得到Multi-Head Attention最终的输出矩阵 Z。
和 Transformer 中的多层注意力相同吗?
多头注意力 (MHA) | 多层注意力(如堆叠 Transformer 块) |
单层内并行计算多个注意力头 | 多个串行的注意力层(如 Encoder 的 6 层) |
多头结果拼接后输出 | 每层的输出作为下一层的输入 |
关注多视角特征 | 逐层抽象高阶特征 |
以输入序列 The teacher said
为例:
-
单头注意力:可能聚焦
teacher
与said
的语义关系。 -
多头注意力:
-
头1:捕捉
The
与teacher
的冠词-名词关系。 -
头2:发现
teacher
与said
的主谓关联。 -
头3:建模整个句子的全局结构。
-
最终拼接所有头的输出,得到更丰富的表征。
-
S2A
讲了这么多注意力机制,再来稍微扩展一下S2A。
为什么要有 S2A?必然是 Transformer 中的注意力机制有可改进的空间:Transformer 的 Soft Attention 会平等处理所有输入 token,即使某些内容无关。S2A 模拟了人类的思维,人类在解决问题时,会先主动忽略无关信息(类似 System 2 的理性思考),再专注关键部分。
System 2 Attention (S2A) 是一种改进的注意力机制,旨在解决传统 Transformer 注意力机制(即 Soft Attention)在处理无关信息时的局限性。它并非完全替代 Transformer 的注意力机制,而是通过 额外的推理层 来优化其决策过程,使其更接近人类 System 2(深思熟虑的推理)而非 System 1(快速直觉)的思维方式。
S2A 不改变 Transformer 原有的注意力计算,而是在其基础上增加了一个 前置推理模块,类似于“注意力优化器”。计算方式上,Transformer直接计算 Query-Key-Value 交互,而 S2A 先让 LLM 重写上下文,去除无关信息,然后再计算Query-Key-Value(先推理,后注意)。
S2A过滤掉不相关的上下文,促进LLM推理的真实性和客观性。
NSA
再来聊聊 DeepSeek 中的 NSA(Native Sparse Attention),NSA 与 Transformer 中的传统 Soft Attention 在计算方式、效率优化和应用场景上有显著区别。
标准 Transformer 采用全注意力机制,计算复杂度为\(O(N^2)\)(N 为序列长度),即每个 token 需要与所有其他 token 计算注意力权重。这在处理长文本时,计算和内存开销极大,导致训练和推理成本高昂。
NSA 采用 “三层级稀疏策略”(粗压缩、细选择、滑动窗口),动态筛选关键 token,计算复杂度可降至接近线性(如\(O(NLogN)\)或更低)。在 64K 长序列任务中,NSA 的解码速度提升 6-12 倍。
传统稀疏注意力因内存访问不连续,难以充分利用 GPU 算力。
NSA 通过 块级数据加载 和 GQA(Grouped Query Attention)优化,提升算力。
通过“三层级稀疏策略”后,再计算Query-Key-Value(先稀疏,后注意)。这种设计平衡了效率与性能,使得 NSA 在长序列任务中兼具速度和准确性。
上文提到了 S2A 类似 System 2 的理性思考,我们再扩展一下。
System 1 和 System 2 的定义
System 1 和 System 2 是心理学家丹尼尔·卡尼曼(Daniel Kahneman)在其著作《思考,快与慢》中提出的双系统理论模型,用于描述人类思维的两种不同模式。
System 1(快思考)
- 自动、快速、无意识运作,依赖直觉和习惯。
- 无需刻意努力,适用于熟悉的场景(如识别表情、简单算术)。
- 容易受偏见和情绪影响,可能产生错误判断。
System 2(慢思考)
- 需要主动控制、缓慢且有意识的逻辑分析。
- 用于复杂任务(如解题、决策权衡),消耗认知资源。
- 更理性但懒惰,常依赖 System 1 的快速结论。
两者的交互与特点
- 分工:System 1 处理多数日常决策,System 2 在必要时介入纠错。
- 效率与准确性:System 1 高效但易出错,System 2 准确但耗能高。
- 认知负荷:高负荷时(如疲惫),System 2 作用减弱,依赖 System 1 可能导致失误。
应用示例
# 比喻:System 1 如自动执行的函数,System 2 需手动调用
def system_1_reaction(stimulus):
return "直觉反应:" + stimulus # 快速无意识处理
def system_2_analysis(problem):
return "分析结果:" + str(eval(problem)) # 缓慢有意识计算
print(system_1_reaction("危险!")) # 输出直觉反应
print(system_2_analysis("2 + 3 * 5")) # 输出逻辑分析结果
该理论广泛应用于行为经济学、心理学及决策优化领域,帮助理解人类判断机制。