Skip to content

LLM Attention 系列

📅 发表于 2025/11/14
🔄 更新于 2025/11/14
👁️ -- 次访问
📝 0 字
0 分钟
llm-attention
#softmax attention

概览

分类方法核心思想主要解决的问题
基础Traditional Softmax Attention计算完整的 N x N 注意力矩阵建立序列依赖关系
算法优化Linear Attention利用矩阵乘法结合律近似计算O(N²) 复杂度
Sparse Attention只计算部分重要的注意力权重O(N²) 复杂度
架构创新Multi-Head Attention并行计算多个子空间的注意力提升模型表达能力
Multi-Query / Group-Query Attention多组/所有头 共享K和VMHA的KVCache显存瓶颈
Multi-Head Latent Attention引入信息瓶颈(潜向量处理超长序列的 O(N²) 复杂度
实现优化Flash Attention分块计算,避免读写巨大中间矩阵内存带宽瓶颈,硬件利用率低

标准Softmax Attention/Full Attention

标准Softmax注意力公式

标准 Softmax Attention

符号定义

qi,ki,vi,oiRd×1Q=[q1,q2,,qn]Rn×dK=[k1,k2,,kn]Rn×dV=[v1,v2,,vn]Rn×dO=[o1,o2,,on]Rn×d
  • Q、K的维度和V、O的维度可以不相同,参考MLA。

核心思想

  • 注意力本质:Q,K,VO 映射。

  • Causal场景ot 至多和 Q[:t],K[:t],V[:t] 有关

    O=softmax(QK+logM)V
  • MRn×n掩码矩阵,下三角矩阵

    Mi,j={1,ij0,i<j
    • logM,对M的分量逐一取loglog0=

Softmax Attention 分量形式

  • 分母:权重和,分子每项的权重*值,再求和。除以分母:保持数值稳定性
ot=j=1texp(qtkj)vjj=1texp(qtkj)
  • 简单示例,多项V加权求和
o5=q5k1sumv1+q5k2sumv2+q5k3sumv3+q5k4sumv4+q5k5sumv5

Softmax Attention 精简

  • 最核心为分子,需把 n×n的矩阵exp(QK)算出来,空间和时间复杂度,都正比于n2

    O=exp(QK+logM)V=(exp(QK)M)V
  • 精简:去掉softmax

    O=(QKM)V
  • 精简:去掉掩码,非causal

    O=(QK)V=Q(KV)
  • 增加归一化

    O=RMSNorm((QKM)V)

注意力精简公式

注意力精简公式

Attention 精简公式

ot=Attn(qt,k:t,v:t)ot=Attn(qt,k:t,v:t)=i=1tαt,ivij=1tαt,jαt,i=eqtkidk=eqtkiedk

矩阵带掩码 公式

O=softmax(QK+logM)VO=exp(QK+logM)V=(exp(QK)M)V

矩阵精简公式

O=(QKM)VO=(QK)V=Q(KV)O=RMSNorm((QKM)V)

Softmax和Linear时间复杂度

Softmax和线性注意力时间复杂度

Softmax和线性注意力

O=(QK)Rn×nVRn×dQRn×d(KV)Rd×d
  • 左侧:传统softmax注意力
    • 时间复杂度O(n×n×d)=O(dn2)
      • 第一步:O(n×d×n);第二步:O(n×n×d)
      • 综合两步:O(dn2)+O(dn2)=O(dn2)
    • 当n很大时:由于 n2计算成本非常高
    • Flash Attention降低了空间需求,但平方时间复杂度依然无法避免
  • 右侧:线性注意力
    • 时间复杂度O(d×n×d)=O(nd2)
      • 第一步:O(d×n×d);第二步:O(d×n×d)
      • 综合两步:O(nd2)+O(nd2)=O(nd2)
    • 当n很大时d2为常数,复杂度随n线性递增计算成本低
  • 区别
    • 计算上:仅仅是交换了计算顺序

Softmax 时间复杂度例子

  • QK矩阵乘法 (传统softmax注意力)

    QRn×d×KRd×n=WRn×n
    • 结果矩阵Wn×n个元素,第i行j列元素Wi,j计算过程

      • Qi第i列d个元素行向量,维度为 1×d
      • Kj第j行d个元素列向量,维度为 d×1
      Wi,j=QiKj=l=1dQi,lKl,j
    • 单个元素计算复杂度o(d)d次乘法d1次加法

    • 整体复杂度:有n2个元素,共o(dn2)

线性注意力时间复杂度例子

  • KV矩阵乘法 (线性注意力)

    KRd×n×VRn×d=WRd×d
    • 结果矩阵Wd×d个元素,第i行j列元素Wi,j计算过程

      • Ki第i行n个元素行向量,维度为 1×n
      • Vj第j列n个元素列向量,维度为 n×1
      Wi,j=KiVj=l=1nKi,lVl,i
    • 单个元素计算复杂度o(n)n次乘法n1次加法

    • 整体复杂度:有d2个元素,共o(nd2)复杂度线性依赖于n

Attention 概念

Attention 概念
  • Input:一般是一个句子;乘以矩阵得Q/K/V 3个向量

  • QKV向量

    • Query:表示当前查询query
    • Key: Key是各个位置的键,
    • Value:Value各个位置的信息
  • 注意力权重

    • softmax(QK): 即当前query对各个位置的注意力权重α1,,αl
    • 早期QK有 dot/concat/w 这3种score计算的3种方式
  • 加权求和

    • 利用注意力权重对各位置Value加权求和,就得到输出
Attention(Q,K,V)=softmax(QKdk)V
  • 除以dk进行缩放,防止梯度爆炸,
Self-Attention vs 其他Attention

Self-Attention

  • Self-attention:self顾名思义,计算自身序列中各位置与其他各位置的注意力V来自自身
  • Target-Attention:计算自己和其他内容的注意力,V来自其他内容
  • Self-Attention 可以通过两个位置一步attention计算远距离学习知识依赖和语序结构
  • RNN/LSTM:距离越远,信息损耗越大,有效提取捕获远可能性越小。
Attention vs 全连接
  • 👁️Attention:有锚点👍
    • 有Query和Key,有Value。Query作为一个锚点计算attention score后做加权
    • 比喻:左手拿白色小球,右手从袋子抓球,抓出来和左手做对比
  • 全连接层:🈚️锚点
    • 无Query和Key,只有一个Value。最后给每个v一个权重做加权。
    • 比喻:在袋子里凭记忆和感觉随便抓一个球出来。

Attention 变体

  • 最早期的Attention、Hard Attention等。
  • Muliti-Head Attention:使用多组QKV生成多个Z,拼接乘大矩阵,得融合Z,再给FFN。
    • 学习不同表征,识别不一样的模式,增强模型表达能力
  • Relative Position Encoding:使用相对位置编码引入位置信息

Attention 解码详细推导

Attention 推导

符号定义

  • 假设dim=dk,部分公式省略缩放、softmax、向量转置等
  • Attnstepi(Q,K,V)第i步的完整Attention矩阵
  • Attni(Q,K,V)attention矩阵的第i行

Step=1,共1行

  • 第1行Attn1(Q,K,V)=softmaxted(Q1K1T)V1=(Q1K1T)V1
Attnstep1(Q,K,V)=softmax(Q1K1Tdk)×V1=[Q1][K1][V1]=[softmax(Q1K1T)×V1]=[Attn1(Q,K,V)]

Step=2,共2行

  • 第1行Attn1(Q,K,V)=(Q1K1T)V1step1已算过
  • 第2行Attn2(Q,K,V)=(Q2K1T)V1+(Q2K2T)V2
Attnstep2(Q,K,V)=[Q1Q2][K1K2][V1V2]=[Q1K1TQ1K2TQ1K2Q2K1TQ2K2T][V1V2]=[Q1K1TQ2K1TQ2K2T]masksoftmax[V1V2]=[Q1K10Q2K1Q2K2]softmax[V1V2]=[Q1K1TV1Q2K1V1+Q2K2V2]=[Attn1(Q,K,V)Q2K1V1+Q2K2V2]

Step=3, 共3行

  • 第1行Attn1(Q,K,V)=(Q1K1T)V1第1步已算过
  • 第2行Attn2(Q,K,V)=(Q2K1T)V1+(Q2K2T)V2第2步已算过
  • 第3行Attn3(Q,K,V)=(Q3K1T)V1+(Q3K2T)V2+(Q3K3T)V3第3步算第3行

结论

  • 每一步都存在大量冗余第i步,只需要计算第i行即可,前i-1行都已经计算过

  • 矩阵中,第k行只和Qk相关,和其余位置的Q无关。

    • Qk会和前面的每一对Ki,Vi做attention计算,来计算当前行。
  • 解码xk,只需输入字符xk1即可。

几个重点思考(降维/dk等)

重要思考

1、Self-Attention Padding 做 Mask

  • QK ,需要对padding部分置为负无穷,再过Softmax才会为0。

2、Transformer Multi-Head Attention 要对head 进行降维

  • 输入向量维度为d,需要降维到 d(远小于d),主要是为了降低计算复杂度
  • 时间复杂度:o(d2)o(hd2)o(d2)o(hd2)

3、维度和点击的关系

  • q,k向量 维度d越大,点积值qk越大,点积属于均值0、方差d的正态分布。

    E(qk)=0,D(qk)=d
  • 方差的性质

    D(cx)=c2D(x),D(c+x)=D(x)c

3、深入理解dk缓解梯度爆炸问题

  • Attention计算过程:内积QK后 -> softmax。softmax主要入参是eqk

  • 如果不进行缩放

    • softmax入参在[e3d,e3d]之间,会很大或很小
      • 导致注意力权重 接近one-hot分布
      • 饱和区梯度消失x值继续变大,y几乎不变
  • 因此:QK后才除以dk

    • 使得softmax入参[e3,e3]之间,不大也不小
  • 数学思路

    • qk 除以d,抵消掉,由0-d正态分布,又回到0-1正态分布
    E(qk)=0,D(qk)=dD(qkd)=qk(d)2=1
    • 方差为1,有效控制点积结果发散,应对了梯度消失问题。

注意力算法优化(降低时间复杂度)

线性注意力

核心思想

线性注意力核心思想

背景

  • 把FullAttention 复杂度O(dn2)变为O(nd2)O(n2) 变成 O(n),即平方复杂度变成线性复杂度

核心思想

  • 矩阵交换律,右乘,中间状态矩阵迭代计算,具体公式见下文。

优点

  • 速度极快、内存占用小

缺点

  • 性能效果损失,最新MiniMax-M2 已经由 Lighting Attention 切换回 FullAttention了。

线性注意力基本公式

线性注意力

线性注意力基本公式

O=(QK)Rn×nVRn×dQRn×d(KV)Rd×d
  • 分量形式

    ot=j=1tvj(kjqt)=j=1t(vjkj)qt=(j=1tvjkj)qt=Stqt
    • 各元素维度vjRd×1kjR1×dqtRd×1kjqtR1×1,St=vjkjRd×d

状态公式

  • 记括号部分为St,Casual形式的Attention可写成St为状态线性RNNot=Stqt,St=St1+vtkt
St=j=1tvjkj
  • 线性Attention:本质是一个cumsum,将所有历史信息 等权地叠加

记忆遗忘及解决方法(RetNet/Minimax-01)

提示

现行Attention 记忆遗忘缺点

  • 本质是cumsum,各历史信息同等权重叠加
  • 当叠加token足够多时每个token的信息占比会变得很小
  • 仅靠固定大小矩阵 StRd×d难以准确重建任意token,每个token的记忆会变得模糊不清

RetNet/MiniMax-01:增加衰减因子

  • 衰减因子γ:模型倾向于遗忘早期信息,就近原则
ot=Stqt,St=γSt1+vtkt

DFW/Mamba/Mamba2

  • 把衰减因子γ推广为位置t的函数γ(t)ot=Stqt,St=γ(t)St1+vtkt

TestTimeTraining

Test Time Training

TTT 思想

  • K,V视作语料对,根据语料训练模型,St为模型参数

    (k1,v1),(k2,v2),,(kt,vt)
  • 最后输出

    ot=f(St,qt)

TTT 实现的RNN

  • 当前模型参数为St1,优化器接收到新数据(kt,vt),更新模型参数为St

    ot=f(St,qt),St=St1ηtSt1L(f(St,qt),vt)
  • RNN:把历史数据有效压缩到一个固定大小的State中,而模型参数正好是固定大小的。

  • 类比

    • 压缩任务:RNN;解压器:模型f;压缩包:权重;压缩算法:SGD;压缩率:损失L

线性注意力主要工作

线性注意力主要工作

Sparse Attention

核心思想

核心思想

背景

  • 传统Softmax Attention,时间复杂度随长度二次方增加 o(dn2),不利于长度扩展。

稀疏注意力核心思想

  • 假设
    • 一个token只需关注序列中少数几个关键位置无需关注所有位置
  • 具体做法
    • 不计算完整 N×N的注意力矩阵,只计算一小部分稀疏位置的。
    • 选择与Q相关的少量Token,来计算Query-Key注意力

优点

  • 在性能和效率之间取得平衡,复杂度可降低到o(nlogn)

传统稀疏注意力的缺点

常见稀疏模式

常见稀疏模式

局部注意力 / Sliding Window

  • 只关注邻近的几个词

全局注意力 / Global Attention

  • 预设一些全局节点,让所有词都与它们进行计算。

组合模式

稀疏注意力主要工作

稀疏注意力主要工作

注意力结构优化(提升推理效率)

一图概览MHA+MQA+GQA+MLA

MHA + MQA + GQA + MLA

Multi-Head Attention

  • 并行计算多个子空间QKV的注意力提升模型表达能力

Multi-Query Attention

  • 所有Query共享一对K和V减少KV参数,提升推理速度,优化o(dn2)问题。

Group-Query Attention

  • 在MHA和MQA中做折中,把Query分组每组共享一对K和V,效果比MQA好、速度比MHA快。

Multi-Head Latent Attention

  • 把KV联合压缩成一个 小的潜在向量,来解决KV缓存高的问题。压缩缓存重建三步。

Mulit-Head Attention(2017)

多头注意力

Multi-Head Attention

核心思想

  • MHA,多组QKV学习不同表征模式增强模型能力,类似CNN多个卷积核

优点

  • 多头关注不同部分最终再融合 起来得更好效果

  • 如:对词向量维度512进行8头切割,每头输入维度为64,最后采用concat进行融合。

缺点

  • 计算成本高

Multi-Query Attention(2019)

Multi-Query-Attention

核心思想

  • 所有query共享同一个Key和Value 矩阵,每头仅保留Query参数,

优点

  • 大大减少KeyValue参数提升推理速度

缺点

  • 但带来 精度损失

Group-Query Attention(2023)

Grouped-Query Attention

核心思想

  • query分为n组每组共享Key和Value矩阵
  • 其实在MHA和MQA之间做折中。

优点

  • 精度比MQA好,速度比MHA快。

Multi-Head Latent Attention(2024)

Multi-Head Latent Attention

问题

  • MHA计算复杂度高 O(dn2)
  • MHA推理长序列时,KV缓存高显存压力大

核心思想: 低秩KeyValue联合压缩

  • 压缩
    • 不直接计算存储完整的K和V,而是压缩成一个维度很小latent vector
  • 缓存
    • 推理时,缓存非常小的潜在向量,而非原始KV
  • 重建
    • 计算注意力时,从缓存的latent vector中,重建出原始的Key和Value

优点

  • 大幅减少KV缓存:与DeepSeek 67B比,KV缓存减少93.3%
  • 推理性能提升:最大生成吞吐量提升5.76倍
  • 相比MQA/GQA,性能还有提升

实现优化(解决硬件效率问题)

Flash Attention

Flash Attention
  • 目前最高效的注意力实现
  • 核心思想:利用GPU的SRAM将连续的内存块加载进来进行计算,最大化硬件利用率。

GPU 硬件限制

GPU 硬件限制
  • GPU - SRAM:很小很快,20MB、19TB/s (吞吐量)
  • GPU - HBM:GPU显存大小,大但慢,80GB、1.5TB/s
  • CPU - DRAM:CPU内存,很大但很慢, 1TB、12GB/s

Softmax Tiling

参考文章:FlashAttention中的softmax快分块计算详解

Softmax Tiling
  • 数值稳定

    • 背景:避免数值exi 过大溢出
    • 方法:每个元素都减去最大值eximax(x)
    • 效果:eximax(x) 在[0,1]区间。softmax结果和原softmax一致
  • 分块计算softmax

    • 把X分为多个块,各块单独计算最大值softmax分子softmax分母
    • 根据各块信息,计算全局分母;再更新各自分子,得全局分子

Flash Attention 算法

Flash Attention 算法
  • 主要目标:避免从GPU-HBM中读取和写入注意力矩阵。
  • 计算softmax不需要全局信息
    • 把输入分块,以分块增量方式计算softmax,即 softmax tiling算法。
  • 反向传播不存储中间attention矩阵(N2)只存储softmax归一化系数
    • 标准Attention:需要把过程中的S、P写入HBM中,矩阵大小和输入序列长度有关,非常大
    • FlashAttention不使用中间注意力矩阵通过存储归一化因子来减少HBM内存的消耗
  • 算法流程,具体见论文。
    • 简单讲:每次只计算一个block的只,通过多轮双for循环完成注意力计算。
总访客数:   ·   总访问量:
PLM's Blog @ 2016 - 2025