注意力机制-Transformer 的灵魂

举报
yd_283123001 发表于 2026/10/27 12:46:43 2026/10/27
【摘要】 摘要注意力机制(Attention Mechanism)是现代大语言模型的核心基石,源自2017年《Attention Is All You Need》提出的Transformer架构。它模仿人类阅读时“重点关注相关信息、忽略无关内容”的认知习惯,让模型可以直接建立序列内任意token之间的关联,摆脱了RNN、LSTM串行建模长依赖的局限。本文从基础思想、缩放点积自注意力、多头注意力、因果掩...

摘要

注意力机制(Attention Mechanism)是现代大语言模型的核心基石,源自2017年《Attention Is All You Need》提出的Transformer架构。它模仿人类阅读时“重点关注相关信息、忽略无关内容”的认知习惯,让模型可以直接建立序列内任意token之间的关联,摆脱了RNN、LSTM串行建模长依赖的局限。本文从基础思想、缩放点积自注意力、多头注意力、因果掩码、工程优化(KV Cache、MQA/GQA),再到长上下文注意力变种,系统梳理注意力机制原理、痛点与演进方向,帮助理解大模型上下文理解、逻辑推理能力的底层来源。

一、从RNN到注意力:一次范式变革

在Transformer诞生之前,循环神经网络RNN、LSTM是序列建模主流。这类模型按顺序逐token计算,信息只能沿着序列向后传递,存在两个硬伤:

  1. 串行计算,无法并行:必须等前一个token算完才能处理下一个,训练速度慢;
  2. 长距离依赖衰减:相隔很远的token之间信息传递链路很长,容易出现梯度消失,很难捕捉长文本关联。

注意力机制的核心思路非常直观:不需要按顺序传递隐状态,每一个token都可以直接和序列里所有token计算相关性,根据相关性权重聚合信息。距离不再是信息交互的壁垒,这也是Transformer能够支撑超大模型、超长文本的根本原因。

注意力分为交叉注意力(Cross-Attention)和自注意力(Self-Attention)。交叉注意力常见于编码器-解码器结构,Query来自解码器,K、V来自编码器;而大语言模型(自回归LLM)主要使用自注意力:Q、K、V全部来自同一组输入序列,模型在文本内部做信息匹配与融合。

二、缩放点积自注意力:基础计算公式

自注意力为每一个token生成三个向量:

  • Query(查询Q):代表当前token“我想要找什么信息”;
  • Key(键K):代表其他token“我提供什么信息”;
  • Value(值V):代表其他token“实际携带的内容”。

公式: $$ \text{Attention}(Q,K,V)=\text{softmax}\left(\frac{QK^\top}{\sqrt{d_k}}\right)V $$ 计算分为四步:

  1. Q和K做点积,得到相关性分数矩阵;分数越高,代表两个token语义关联越强;
  2. 除以$\sqrt{d_k}$做缩放:$d_k$是Q/K向量维度。维度变大时,点积结果方差会变大,softmax输出会极度尖锐、梯度很小;缩放用来稳定梯度;
  3. (解码器LLM)加上因果掩码(Causal Mask):把未来位置的分数置为负无穷,经过softmax后权重趋近于0,保证生成时,当前token看不到后面还没生成的内容,防止信息泄露;
  4. softmax归一化得到注意力权重,权重和V加权求和,输出融合了全局上下文的新表征。

简单举例:句子“把杯子放在桌子上,它很重”。当模型处理“它”这个token时,Q会和前文所有K计算相似度,最终分配更高权重给“杯子”,较低权重给“桌子”,从而正确指代。

原生自注意力的复杂度是 $O(n^2)$,$n$ 是序列长度。文本越长,计算量和显存占用平方级暴涨,这是注意力机制最核心的瓶颈,也是后续大量优化方案要解决的问题。

三、多头注意力(Multi-Head Attention, MHA):同时学习多种关系

单头注意力只能在一个特征空间里计算相关性,表达能力有限。多头注意力MHA,把Q、K、V分别投影到$h$个独立的子空间,每个头单独做缩放点积注意力,最后把所有头的输出拼接,再经过线性层融合。

每个注意力头会自主学习不同类型的关联模式:有的头关注语法主谓关系,有的关注指代,有的关注局部相邻词语搭配,有的捕捉长距离逻辑关联。多头让模型并行地从多个维度理解文本语义,这也是MHA成为LLM标配的原因。

MHA的代价是:每个头都维护独立的K、V。推理阶段K、V都要存入显存,也就是KV Cache,头越多,KV缓存体积越大,长上下文场景显存压力急剧上升。由此衍生出MQA、GQA等轻量化方案。

  • MQA(Multi-Query Attention):所有头共享同一组K、V,仅保留多组Q;大幅压缩KV缓存,速度提升明显,但效果会有小幅损失;
  • GQA(Grouped-Query Attention,分组查询注意力):折中方案,把头分成若干组,同一组内共享K、V。平衡推理速度、显存开销与模型效果,是现在主流大模型(如Llama系列)广泛采用的方案。

四、KV缓存:自回归推理的核心优化

大模型是逐token生成的:每输出一个新词,就要把这个新词追加到上下文末尾,重新跑一遍注意力。 如果每次生成新token都重新计算全部历史token的K、V,重复计算量巨大。KV Cache的策略是:历史token的K、V一旦计算完成就保存在显存中,不再重复计算;每一步只需要计算新token的Q,和缓存里全部K、V做注意力。 它把单步生成的计算开销从$O(n^2)$降到$(O(n))$,是线上大模型推理加速必不可少的技术。但代价是显存占用随上下文长度线性增长,超长上下文场景下KV缓存会成为显存瓶颈,因此进一步催生了KV量化、KV回收、MLA(多尺度潜在注意力)等压缩方案,MLA可以把KV缓存压缩到原生MHA的很小比例,被DeepSeek等模型采用。

五、长上下文时代:稀疏、滑动窗口与改进注意力

原生MHA平方复杂度,很难直接支持几十万、上百万token上下文,学术界和工业界发展出多条技术路线:

  1. 滑动窗口注意力(Sliding Window Attention):每个token只和附近窗口内的token计算注意力,不看全部历史;计算量接近线性,适合长文档阅读,缺点是窗口外信息很难访问;
  2. 稀疏注意力(Sparse Attention):每个Query只选择性计算一部分相关Key,比如固定模式稀疏、基于检索的稀疏、地标token机制;只保留高价值关联,跳过无关token;
  3. 线性注意力(Linear Attention):通过核函数改写注意力公式,避开显式的$QK^T$矩阵,把复杂度降到$(O(n))$;理论上支持无限长上下文,但对建模能力有一定取舍;
  4. 混合注意力:局部窗口注意力负责近距离语义,少量全局头负责捕捉关键长距离信息,兼顾速度与全局建模能力。

六、注意力机制的局限与常见现象

注意力权重不是简单的“模型看懂了什么”,它只是中间统计量,存在很多反直觉现象:

  1. 注意力沉点(Attention Sink):模型会持续给开头少数几个token分配稳定高权重,即使这些内容和当前问题无关;是自回归模型为了稳定分布出现的一种偏向;
  2. 注意力过载:大量token权重接近,没有清晰聚焦,语义区分度下降;
  3. 上下文丢失:即便使用稀疏/窗口注意力,超长文本尾部的模型依然容易遗忘前文关键信息,这是长上下文模型依然要持续优化的难题。

同时我们也要区分:注意力权重 ≠ 推理依据。不能直接通过可视化注意力权重来简单解释模型的推理逻辑,它只是信息聚合的一个步骤,最终输出还经过前馈网络、残差连接、归一化等多层变换。

七、总结与展望

注意力机制的本质,是一套可微分的信息检索与加权融合系统:在上下文里检索相关信息,按相关性加权聚合,生成上下文表征。 从最初的MHA,到MQA/GQA优化KV缓存,再到稀疏、线性、滑动窗口、MLA等长上下文方案,整个演进主线非常清晰:在语义能力损失可控的前提下,降低注意力的计算与显存开销。

未来注意力机制的发展方向,一方面是更高效的上下文寻址、动态稀疏选择、分层粒度注意力;另一方面,也有新架构尝试弱化甚至抛弃标准自注意力。但在相当长一段时间内,注意力机制依然是理解、改造、优化大模型最重要的切入点。想要优化大模型长文本能力、推理速度、显存占用,几乎都绕不开对注意力层的设计与调优。

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。