LogoCookLLM文档
LogoCookLLM文档
首页CookLLM

原理精讲

词元化
Tokenization 基础BPE 算法详解GPT 系列 TokenizerBPE 训练工程化
模型架构
Transformer LM
从 token ids 到 logitsEmbedding 与 LM Head
Attention 机制
Self-Attention 到 GQAAttention Sink
位置编码
位置编码基础RoPE 数学推导RoPE 代码实现长度外推
GPU 编程基础
GPU 架构基础张量布局Triton 入门:向量加法
FlashAttention
Flash Attention 原理详解从朴素实现到 Auto-TuningBlock Pointer 与多维支持Causal Masking 优化Grouped Query Attention反向传播实现
分布式训练
数据并行ZeRO 优化器全分片数据并行张量并行流水线并行多维混合并行
推理优化
KV CacheContinuous BatchingPagedAttention

动手训练

概述
预训练
预训练数据Tokenizer 训练模型架构数据流水线训练循环监控与验证
X (Twitter)
基础知识模型架构Attention 机制

Self-Attention 到 GQA

会员专享

从 Self-Attention 出发,依次拆开 Multi-Head、Causal Masking 与 GQA / MQA 的设计权衡

什么是 Attention 机制

登录以继续阅读

这是一篇付费内容,请登录您的账户以访问完整内容。

Attention(注意力机制)是现代深度学习中最重要的创新之一,它使模型能够在处理序列数据时动态地关注不同位置的信息。

在 Transformer 架构中,Attention 机制的核心思想是:让每个位置的 token 根据其与其他 token 的相关性,对它们进行加权求和。

值得先说清楚它替代了什么。RNN 处理序列时,第 nnn 个位置的信息要传到第 mmm 个位置,必须经过 ∣m−n∣|m - n|∣m−n∣ 步递推,路径越长信号衰减越严重,而且这些步骤天然串行、无法并行。Attention 把这条路径压到常数:任意两个位置之间只隔一次点积。代价是计算量从 O(N)O(N)O(N) 变成 O(N2)O(N^2)O(N,显存也随序列长度平方增长。这笔交易是后面 FlashAttention、GQA、KV cache 等一整条优化线索的起点。

标准 Self-Attention 计算流程

给定输入序列,Self-Attention 通过以下步骤计算输出:

  1. 线性变换:将输入 XXX 分别投影为 Query (QQQ)、Key (KKK)、Value (VVV)

    Q=XWQ,K=XWK,V=XWVQ = XW_Q, \quad K = XW_K, \quad V = XW_VQ=XW

直观理解:

  • QQQ(Query):我想要什么信息?
  • KKK(Key):我提供什么信息?
  • VVV(Value):我实际包含的信息是什么?
  • 注意力分数:衡量"我需要的"和"你提供的"有多匹配

PyTorch 参考实现

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  













Attention 机制

从 MHA / Causal / GQA,到 Attention Sink 与 Gated Attention,理解注意力机制的设计、缺陷与演进

Attention Sink

第一个 token 为什么吸走绝大部分注意力,这一现象的机制、代价,以及为何消除它要留到 Gated Attention

目录

什么是 Attention 机制
标准 Self-Attention 计算流程
PyTorch 参考实现
Multi-Head Attention (MHA)
为什么需要多头?
MHA 的结构
PyTorch 实现
MHA 的优势与挑战
Causal Attention(因果注意力)
什么是 Causal Attention?
数学表示
为什么需要 Causal Masking?
PyTorch 实现
Causal Masking 的性能机会
应用场景
Grouped Query Attention (GQA)
从 MHA 到 GQA 的演进
MHA 的内存问题
Multi-Query Attention (MQA)
Grouped Query Attention (GQA)
GQA 的数学原理
PyTorch 实现
三种机制的对比
总结
2
)
Q
​
,
K
=
XWK​,V=
XWV​
  • 计算注意力分数:通过 Query 和 Key 的点积计算相似度

    S=QKTDS = \frac{QK^T}{\sqrt{D}}S=D​QKT
  • 应用 Softmax:将分数转换为概率分布

    A=softmax(S)A = \text{softmax}(S)A=softmax(S)
  • 加权求和:用注意力权重对 Value 进行加权

    O=AVO = AVO=AV
  • # (batch, seq_len, d_head)
    K = X @ W_k
    V = X @ W_v
    # 计算注意力分数
    scores = Q @ K.transpose(-2, -1) # (batch, seq_len, seq_len)
    scores = scores / (K.shape[-1] ** 0.5) # 缩放
    # Softmax 归一化
    attn_weights = F.softmax(scores, dim=-1)
    # 加权求和
    output = attn_weights @ V # (batch, seq_len, d_head)
    return output, attn_weights
    ​

    其中 DDD 是 head dimension,除以 D\sqrt{D}D​ 用于数值稳定性(scaled dot-product)