Self-Attention 到 GQA
会员专享从 Self-Attention 出发,依次拆开 Multi-Head、Causal Masking 与 GQA / MQA 的设计权衡
登录以继续阅读
这是一篇付费内容,请登录您的账户以访问完整内容。
从 Self-Attention 出发,依次拆开 Multi-Head、Causal Masking 与 GQA / MQA 的设计权衡
这是一篇付费内容,请登录您的账户以访问完整内容。
Attention(注意力机制)是现代深度学习中最重要的创新之一,它使模型能够在处理序列数据时动态地关注不同位置的信息。
在 Transformer 架构中,Attention 机制的核心思想是:让每个位置的 token 根据其与其他 token 的相关性,对它们进行加权求和。
值得先说清楚它替代了什么。RNN 处理序列时,第 个位置的信息要传到第 个位置,必须经过 步递推,路径越长信号衰减越严重,而且这些步骤天然串行、无法并行。Attention 把这条路径压到常数:任意两个位置之间只隔一次点积。代价是计算量从 变成 ,显存也随序列长度平方增长。这笔交易是后面 FlashAttention、GQA、KV cache 等一整条优化线索的起点。
给定输入序列,Self-Attention 通过以下步骤计算输出:
线性变换:将输入 分别投影为 Query ()、Key ()、Value ()
直观理解:
import torch
import torch.nn.functional as F
def self_attention(X, W_q, W_k, W_v):
"""
X: (batch, seq_len, d_model)
W_q, W_k, W_v: (d_model, d_head)
"""
Q = X @ W_q
计算注意力分数:通过 Query 和 Key 的点积计算相似度
应用 Softmax:将分数转换为概率分布
加权求和:用注意力权重对 Value 进行加权
其中 是 head dimension,除以 用于数值稳定性(scaled dot-product)