【Transformer 与注意力机制】33|RLHF:从 PPO 到 DPO,再到 GRPO
SFT 的似然目标画不出相对偏好,只能到一个由数据规模决定的天花板。RLHF 用奖励模型把偏好压成标量再接 PPO,代价是 KL 约束、采样成本和可实测的奖励黑客曲线;DPO 从同一个 KL 目标解出隐式奖励绕开在线采样,GRPO 在可验证奖励场景把 critic 也省掉。工程细节外链 rl-posttraining 系列。
Linux 内核、存储与网络、可观测性、系统架构与大模型基础设施的工程笔记:机制拆解、踩坑复盘与可核对证据,少空谈。
共 61 篇文章 · 返回首页
SFT 的似然目标画不出相对偏好,只能到一个由数据规模决定的天花板。RLHF 用奖励模型把偏好压成标量再接 PPO,代价是 KL 约束、采样成本和可实测的奖励黑客曲线;DPO 从同一个 KL 目标解出隐式奖励绕开在线采样,GRPO 在可验证奖励场景把 critic 也省掉。工程细节外链 rl-posttraining 系列。
Kaplan(2020)第一次把 loss 随参数、数据、算力的幂律关系钉成经验规律,却因为训练配方设计的一个隐藏 bug 把配比钉歪了;Chinchilla(Hoffmann et al., 2022)用三种独立方法纠正过来,结论是很多大模型不是不够大,是每个参数看过的 token 不够多。本文用两篇论文的原始公式、Epoch AI 的复现危机和“过训/欠训”的真实工程后果,讲清楚 compute-optimal 到底在优化什么,以及这套规律正在被哪些新事实推着往前走。
大模型训练最怕的不是 loss 降得慢,而是它在一切正常时突然尖峰、发散、NaN。本文从 GLM-130B、OPT-175B、PaLM 的真实训练事故出发,讲清 loss spike、梯度爆炸的现场停训判据,warmup、Pre-LN、BF16、梯度裁剪各自修复的是哪个假设,以及为什么小模型上验证过的稳定超参放大后会失效。
BERT 的每个设计选择都有可核对的实测代价。本文钉住 BERT 这一条路线本身:80/10/10 掩码策略真正缓解了多少 pretrain-finetune mismatch、NSP 为什么被 RoBERTa 的受控实验指出可能是输入格式而非目标函数在起作用、BERT 为什么在数学上是一个可以生成文本的 Markov Random Field 却没人拿它做生成模型,以及 2024 年之后 ModernBERT 一类工作为什么还在升级这条路线。三条路线的横向比较见 40|三大路线之争。
GPT-1 到 GPT-4 四次跃迁里,next-token prediction 这个目标函数从未换过,真正变化的是任务接口、参数规模和对齐机制。本文只用公开论文与技术报告拆解每代的改与不改,并摆开 in-context learning 机制、涌现能力是否为度量假象、能力该归因 scale、数据还是对齐这几个仍在争论的问题。
FlashAttention 的关键不是近似注意力,也不是把公式改掉,而是重新安排标准 attention 在 GPU 内存层级里的计算路径。本文解释为什么标准 attention 的瓶颈常常是 HBM 读写,FlashAttention 如何用 tiling 和 online softmax 避免物化完整注意力矩阵,以及它为什么省显存、提吞吐,却没有消除 O(n²) 的根本复杂度。
语言模型每一步只输出一组 logits,真正决定输出哪个 token 的是解码策略。本文从 softmax 与 temperature 的几何直觉出发,讲清贪心、Beam Search 为何在开放生成中显得枯燥重复,top-k/top-p/min-p 叠加时的组合陷阱,以及重复惩罚、presence/frequency penalty 对专有名词和代码的副作用,并给出采样是否掩盖模型校准问题的学界争论。
自回归推理里,历史 token 的 K/V 因果掩码下不变、可以缓存,Q 不行——本文给出可自证的归纳证明,推导显存公式与长上下文并发上限,拆解 MQA/GQA/MLA、PagedAttention、cache 量化三条正交压缩路线各解决哪一项,并给出结构性压缩路线上一处工业选择分歧与两个开放问题。
FlashAttention 能把 attention 的 I/O 推到理论下界,却动不了 FLOPs;SETH 复杂度理论进一步证明标准 attention 在多数参数区间没有亚二次算法。本文区分工程瓶颈与架构瓶颈,用 RULER、Lost in the Middle 和数据受限 scaling law 说明长上下文非长期记忆、数据效率有硬约束,并给出新架构必须同时赢下的质量/成本/稳定/生态四条战线。
推理退化不是单一故障。死循环、乱码/控制字符、无意义数字串各自踩中注意力正反馈、数值溢出与词表边缘的不同路径。本文分清三种形态的触发条件与可观察信号,钉住 Softmax 马太效应、Attention Sink、Causal Mask 退路切断、FP16/量化与 KV Cache 污染,并给出架构到运行时的分层防线、争论与开放问题。
Transformer 用 KV Cache 保存全部历史,SSM 用固定状态压缩历史。本文讲清 S4 为何长程却难训、Mamba 的 selective SSM 与 parallel scan 如何让递归既线性又能并行训练,比较推理状态与 KV Cache 的胜负边界,并给出 SSM 能否取代通用 LLM 的争论。
线性注意力把 softmax attention 改写成可累积的矩阵状态,RWKV 让训练走 Transformer 的路、推理走 RNN 的路,RetNet 用 retention 统一 parallel/recurrent/chunkwise 三种计算。本文用 MQAR、Based、GLA、RULER 等论文的实测数据说明它们各自在哪里赢、在哪里输给 full attention。
后 Transformer 时代的判断不该是「哪个架构赢」,而是系统边界问题。本文用 Jamba、Griffin、NVIDIA 的受控对照实验说明纯 SSM 为何缺 in-context learning、混合架构为何更可能,用 RETRO/RAG/ReAct/MemGPT 说明模型与系统边界如何模糊,并结合 Hardware Lottery 与 SWE-bench/GAIA 等交互式评测讨论硬件和评测如何反向塑造架构。
KV Cache 后 decode 仍是显存带宽受限的串行循环。本文给出投机解码的接受-拒绝公式与正确性证明,推导接受率如何决定加速比,用实测数据说明批大小何时让投机解码倒贴,并只钉住 Medusa/EAGLE/MTP 的原理差异。
量化、蒸馏、剪枝常被当成同一件事的三种手段——"让模型变小",但它们改变的对象、误差来源和失败模式完全不同。本文从 weight-only 与 activation quantization 的假设差异、GPTQ/AWQ/SmoothQuant 的数学分野,讲到 attention、FFN、KV Cache 承受压缩代价的不同,以及 PPL 为什么骗过了很多人的质量评测。
attention 权重容易被读成“模型关注了哪里”,但 Jain 和 Wallace(NAACL 2019)等工作证明相关不等于因果。本文区分用户、行为、机制三层解释,梳理 attention is not explanation 之争,梯度、遮挡、探针、因果中介分析各自的证据边界,以及 RLHF 之后 LLM 自我解释为何更容易“听起来合理却不真实”。
机制可解释性要的不是热力图,而是因果证据。本文用 induction head、IOI 26-head 电路、activation patching、superposition 和 Sparse Autoencoder 讲清楚:找到一个 head 远不等于解释整个模型,patching 本身也会制造“解释幻觉”,SAE 从玩具模型扩到 Claude 3 Sonnet 后仍有系统性失败模式。
Wei et al. 用 BIG-Bench 定义了"涌现能力",Schaeffer et al. 用一个数学模型证明很多涌现曲线是非线性指标的产物。本文梳理这场争论的证据链、in-context learning 与 Chain-of-Thought 各自的机制证据,以及涌现能力是否可预测、可诱导两个仍未解决的问题。
T5 把翻译、分类、摘要、问答都改写成统一的文本到文本任务,但这个接口不是免费的。本文拆开 span corruption 的 corruption rate 和平均 span 长度旋钮、T5 论文的原始消融数字、任务前缀如何变成模型的格式捷径、C4 清洗规则本身携带的归纳偏置,以及 Encoder-Decoder 在推理服务上的结构性代价,并给出 Text-to-Text 是否该覆盖分类与检索这条至今没有定论的争论线。
Encoder-only、Encoder-Decoder、Decoder-only 的差异不是谁更聪明,而是谁能看见谁的信息流不变量。本文从可见性图出发,解释这个不变量如何锁死任务接口与训练管线,KV Cache、continuous batching、投机解码为什么默认假设单流 causal Decoder,以及 embedding、rerank、强制双向抽取场景为什么不该硬上生成式大模型。
RoPE 把位置从"加在输入上的向量"焊进了 Q·Kᵀ 本身——本文推导旋转后点积为何只依赖相对位置,核对高频通道在长距离上的绕圈失真、RoPE scaling/YaRN 到底改了哪个假设;再看 ALiBi 的线性 bias 何时帮、何时伤长程依赖;最后用 RULER、Lost in the Middle 说明"跑得动"和"用得好"是两件事,并摆出一条有文献支撑的争论:相对位置编码是否在用归纳偏置换长度。
FlashAttention 优化的是 full attention 这张完全图的 IO 路径,稀疏 attention 直接改写连接图本身。本文用邻接矩阵钉死 Sparse Transformer 的结构化两跳可达、Longformer 的 local+global 与自定义 kernel、BigBird 的随机图连通性证明与理论下界,并划清它与 Ring Attention、学习型 sparsity 的边界。
MoE 把参数量和每 token 计算量解耦,但代价从模型结构转移到了路由:过载丢 token、专家塌缩、路由抖动是训练现场的三种症状,All-to-All 通信是成本中心,小 batch 推理会让专家利用率变差。本文交代这些机制为什么会发生,以及负载均衡与质量的权衡为什么还没有定量答案。
ViT 把图像切成 patch 再当 token,但 patch size 和分辨率一旦定下来,序列长度、attention 的显存和算力也同时被锁死——这不是"像素当 token"这句简化说法能盖过去的代价。本文用 Swin 的复杂度公式和可复算的数字拆开这条代价链,解释 CNN 归纳偏置为何让它在小数据上更稳、DeiT 靠数据增强和蒸馏补的是哪一块、CLS token 与位置编码在图像分辨率变化时会怎样失效,以及"还需不需要强视觉偏置"这条至今没有定论的争论。
CLIP 靠 batch 负样本和温度做对比学习,不是拼 caption;projector、Flamingo cross-attention、LLaVA 指令微调三种接法各有幻觉、OCR、分辨率失败模式;SAM 的 promptable segmentation 与聊天 VLM 是两条产品线。
DiT 把扩散模型的去噪网络从 U-Net 换成 Transformer,靠的是把图像压成 latent patch token、用 adaLN-Zero 注入时间步与类别条件。本文用论文原始 Gflops-FID 数据讲清这次替换的收益边界,用 O(n²) 公式解释视频时空 token 为什么比长文本更贵,并交代 U-Net 阵营的真实反驳证据。
从《Attention Is All You Need》出发把 Transformer 注意力机制、Q/K/V、多头注意力、位置编码、Causal Mask、Softmax、FFN、训练范式、模型变体、推理工程、可解释性、未来架构以及推理退化防御串成 59 篇深度博客。
这是【Transformer 与注意力机制】系列的第一篇,承担两件事:一是把这套五十多篇文章为谁写、解决什么问题、彼此之间是什么关系交代清楚;二是为完全没基础的读者画出一条从向量、点积、矩阵乘法走到自注意力、再走到大语言模型的爬升路径,让你在投入时间之前先知道终点在哪、路上要经过哪些坎、读完之后你会、还不会做什么事。
从二维平面上的箭头开始,把『向量、内积、夹角、相似度』这几个概念用几何方式串起来,最后落到注意力公式里那个 QK^T 的来历。
把矩阵乘法掰开成两种等价但风格不同的视角——『行 × 列』的点积视角和『列的线性组合』视角,最终落到 QK^T 的形状分析。
这篇文章只比较文本模型里最重要的三类预训练目标:GPT 的自回归语言建模、BERT 的掩码语言建模、T5/BART 的去噪式序列到序列。重点不是背定义,而是看清它们各自优化什么接口、为什么迁移方式不同,以及为什么通用 LLM 最后大多落到 decoder-only 的 next-token prediction。
把《Attention Is All You Need》的实验结果拆开看:WMT14 英德与英法任务上的 headline number 到底意味着什么,为什么 8 张 P100、3.5 天训练就足以压过当时最强的 RNN 与 CNN 路线,注意力可视化又真实说明了什么,哪些地方是结论,哪些地方只是 2017 年特定 benchmark 下的胜利。
把 Transformer block 里那个看起来最不起眼的两层 MLP 真正讲清楚——4 倍扩张比的来历、逐位置而不是跨位置的设计、Geva 等人 2021 年提出的「键值记忆」视角、SwiGLU/GLU/GeGLU 的现代变体、参数量分布、可解释性研究、量化时的瓶颈,以及它和 MoE 的关系。
把 2017 年 Transformer 原论文的训练配方完整复现一遍——数据集、硬件、优化器、学习率公式、warmup、label smoothing、dropout、batching by tokens、beam search 推理。重点解释那个看起来很神秘的学习率公式 lr = d^(-0.5) · min(step^(-0.5), step · warmup^(-1.5)),以及为什么 warmup_steps=4000 这个魔法常数不能去掉。
从 ResNet 的核心思想出发,讲清 Transformer 里残差连接真正解决的不是“信息保留”这种空泛说法,而是优化路径、梯度传播和迭代修正。顺带说明为什么 pre-norm 能训得更深、为什么现代大模型会讨论 residual scaling,以及 residual stream 为什么会成为理解大模型机制时的重要观察对象。
从公式到工程把 LayerNorm 讲清楚:它在每个 token 内部如何做归一化,为什么比 BatchNorm 更适合变长序列和自回归训练,post-LN 与 pre-LN 对梯度路径有什么影响,RMSNorm 又为什么会在现代大模型里大量替代标准 LN。
从「self-attention 是排列等变的」这件几乎被忽视的事实出发,推导出位置编码不是装饰、不是工程小技巧,而是结构性必需。原论文为什么选正弦、那个奇怪的 10000 是怎么来的、PE 与 embedding 是相加还是拼接、可学习位置和 sinusoidal 的本质差别在哪、为什么训练 512 推理 2048 会让可学习位置难以直接外推——这一篇把这些问题一次讲完,并把读者交到现代位置编码(RoPE、ALiBi)的门口。
把 Transformer encoder 从“左半边”这个模糊概念拆成可操作的结构:单层里 self-attention、FFN、残差、LayerNorm 各做什么;6 层堆叠为什么不是重复劳动;encoder 输出为什么适合理解任务而不直接擅长生成;以及它和 decoder-only、encoder-decoder 两条路线到底差在哪。
把 Transformer decoder 拆开讲透:masked self-attention、cross-attention、FFN 三块子层如何串起来;训练时为什么能并行、推理时为什么必须串行;以及 decoder-only 为什么会成为 GPT 时代的主流路线。
从“模型到底在预测什么最小单位”这个问题出发,把 tokenization 讲清楚:按词为什么 OOV 爆炸,按字节或字符为什么序列太长,BPE、WordPiece、SentencePiece 分别怎么切、各自优化目标是什么,为什么现代大模型最后大多落在“子词 + 字节兜底”这条折中路线上。
全参数微调的代价 → Adapter / Prefix Tuning / Prompt Tuning 的早期尝试 → LoRA 低秩分解的核心洞察 → r 与 alpha 的真实关系 → QLoRA 与 DoRA 的工程演进 → 与全参数微调的效果对比 → 灾难性遗忘与多任务部署。这一篇把「为什么不再有人对 7B 模型做全参数 SFT」讲清楚。
预训练模型会补全,不等于会按人类意图回答。本文把 instruction tuning 的逻辑讲清楚:SFT 数据从哪里来,prompt-response 格式为什么能改写模型行为,FLAN、InstructGPT、Self-Instruct、LIMA、Orca 分别贡献了什么,以及为什么“会听话”本质上是分布重定向,而不是凭空长出新知识。
大模型训练里最贵的不只是算力,还是高质量数据。本文把数据工程拆开讲:语料从哪里来,为什么去重、过滤、混配、污染控制都属于“模型能力工程”,C4、The Pile、RefinedWeb、Dolma 这些语料路线各自代表什么,以及为什么 scaling laws 最终会把问题推回到数据质量上。
自回归语言模型的核心约束是:预测 t 时刻只能用 t 之前的信息。Causal Mask 用一个上三角的 -∞ 矩阵让 softmax 之后未来位置的权重恒为零,使得模型在训练时能并行计算所有时间步、推理时严格自回归。本文从 teacher forcing 到 attention sink,把 causal mask 在训练、推理、长上下文中的所有面相讲清楚。
为什么 attention 是 O(n²),O(n²) 到底贵在哪里,5 类降复杂度方案的优劣,FlashAttention 不是 O(n) 这件事,长上下文是怎么把架构师逼疯的。
把 18 篇文章里讲过的所有零件——QKV、多头注意力、causal mask、位置编码、FFN、残差、归一化——拼成一张完整的 Transformer 图。跟随一个 token 走完从输入到输出的全部旅程,建立对架构的「身体记忆」。
单头 attention 只有一组 softmax 权重,只能在一种相似度度量下做一次聚合。Multi-Head Attention 通过多套独立的 Q/K/V 投影,让模型在同一步内并行建模多种关系,并在几乎不增加参数量的前提下提升表达力。
> 本文从零推导注意力机制点积方差的来源,解释缩放因子如何防范梯度弥散,并作为大模型 Scaling Laws 数值稳定的基石。
从 cross-attention 到 self-attention 的退化路径 → 为什么 self-attention 是 O(1) 跳数 → 为什么它对位置完全无知(permutation-equivariant) → 「The cat sat on the mat. It was tired.」中 it→cat 的共指消解 → 为什么需要位置编码 → attention 不等于解释(向第 52 篇预告)。
信息检索类比 → Bahdanau 到 Q/K/V 的演化 → 为什么要分开 Q/K/V → softmax($QK^\top$/$\sqrt{d_k}$)V 公式逐项拆解 → 维度走查 → 三 token、d_k=2 的玩具示例手算 → additive vs multiplicative 取舍 → 自注意力时 Q/K/V 同源的特殊性。这是整个系列最重要的一篇。
把 Bahdanau, Cho, Bengio 2014 那篇「Neural Machine Translation by Jointly Learning to Align and Translate」逐项拆开。固定 context vector 的瓶颈、双向 RNN 编码、additive attention 公式 vᵀtanh(W₁s + W₂h)、与 Luong 2015 multiplicative attention 的取舍,以及为什么这是 Q/K/V 的雏形。
RNN 三难(长程依赖、梯度稳定、训练并行)的系统分析;attention 如何作为补丁逐步把 RNN 推向极限;Vaswani 2017 抛弃循环的范式革命
从人类阅读时的眼动出发,把「注意力」拆成视觉生理、翻译对齐、加权平均三件事。讲清楚为什么权重必须满足非负与和为一、为什么 softmax 不是审美选择而是可微优先的工程结果,以及为什么我们要选连续概率选择而不是 argmax。
在 Transformer 出现之前,序列建模属于 RNN 的世界。本文从 Vanilla RNN 讲起,经过 BPTT、梯度消失爆炸、LSTM、GRU,到 Sutskever 2014 的 Seq2Seq 框架,完整讲述 RNN 时代的故事和它留下的工程经验。
用 6 张 matplotlib 图和一个真实可运行的 toy MLP,把神经网络从单神经元、前向传播、损失函数、反向求导、梯度下降、NumPy/PyTorch 实现一路讲到为什么序列任务最终需要 RNN。
embedding 是把离散的词变成稠密向量的桥梁。从 one-hot 的痛苦出发,经过 Firth 的分布假设、word2vec、GloVe、ELMo、BERT,一路走到现代 LLM 的 embedding 矩阵,本文把这条 70 年的演化讲清楚。
Softmax 不是一个孤立的归一化函数,而是把任意实数分数变成概率分布的一座桥。本文从'为什么需要它'出发,讲清楚公式、几何、温度、稳定性、与交叉熵的配合,以及它在 Transformer 注意力里扮演的关键角色。
神经网络真正会「学习」靠的是两件事:把误差变成可微分的损失函数,再沿着这个损失对参数的梯度方向一点点往下挪。本文从一维抛物线讲到多变量梯度,从两层网络的手算反向传播讲到为什么 backprop 是 O(参数量),再到 Transformer 为什么几乎一律选 Adam/AdamW,希望把「网络是怎么学的」这件事彻底讲透。
上一篇我们论证了一件事——纯线性的网络再深,也只是一个线性变换。把 $W2(W1\mathbf{x} + \mathbf{b}1) + \mathbf{b}2$ 展开就是 $W'\mathbf{x} + \mathbf{b}'$。线性的复合还是线性,这是线性代数的铁律。
如果你问我「神经网络到底是什么」,我会先把所有教材合上,然后给你一句朴素得近乎敷衍的话——神经网络就是一个函数。
回到 2017 年 6 月那篇论文:八位作者、Google Brain/Translate 的内部背景、LSTM 时代的工程困境、为什么这篇在当年是「机器翻译的论文」、为什么七年后却被读成了「大模型时代的圣经」。