大模型八股文
近期大厂(字节、阿里、腾讯、百度、快手、美团等)在大模型方向的面试中,八股题目已经从早期的”背诵 Transformer 论文”逐步演化为覆盖 架构设计、训练优化、推理部署、RAG、Agent 等全链路的综合考察。本文系统整理了 2025-2026 年高频出现的大模型八股题目,力求覆盖全面、解答准确,供复习参考。
一、Transformer 架构基础
1.1 Self-Attention 的计算过程及复杂度
输入序列 $X \in \mathbb{R}^{n \times d}$ 分别通过三个线性变换得到 Q、K、V:
注意力计算:
为什么要除以 $\sqrt{d_k}$? 这是一个经典的面试题,需要从方差分析的角度理解。
假设 $q$ 和 $k$ 的每个分量 $q_i, k_i$ 独立同分布,均值为 0、方差为 1。点积 $q \cdot k = \sum_{i=1}^{d_k} q_i k_i$ 的均值和方差:
即点积的方差随 $d_k$ 线性增长。当 $d_k$ 较大时(如 64、128),点积值的量级为 $O(\sqrt{d_k})$,softmax 的输入会出现极端值,输出趋近 one-hot,梯度趋近于 0(进入饱和区)。除以 $\sqrt{d_k}$ 后方差归一化为 1,softmax 维持在合理范围。
Softmax 数值稳定性:直接计算 $e^{x_i} / \sum e^{x_j}$ 在 $x_i$ 很大时会上溢。利用 softmax 的平移不变性,令 $c = \max(x)$,计算 $e^{x_i - c} / \sum e^{x_j - c}$,数学等价但数值安全。标准实现需要三次扫描(求 max → 求 sum → 算 softmax),后续的 Online Softmax(Milakov & Gimelshein, 2018)将前两步合并为一次增量扫描,为 Flash Attention 奠定了基础。
时间复杂度 $O(n^2d)$,空间复杂度 $O(n^2)$(注意力矩阵)。
1.2 Multi-Head Attention 的意义
将 Q、K、V 拆分为 $h$ 个头,每个头独立计算注意力,最后拼接再做一次线性变换:
不同的头可以关注不同子空间的信息(如语法关系、语义关系、共指关系等)。参数量与单头注意力相同,因为每个头的维度为 $d/h$。
1.3 为什么用 LayerNorm 而不是 BatchNorm
- BatchNorm 在 batch 维度上归一化,统计量依赖 batch size。NLP 中序列长度不一致,且 batch size 常常较小,统计量波动大;推理时还需维护 running mean/var
- LayerNorm 在特征维度上归一化,每个样本独立计算,不受 batch size 和序列长度的影响
- 本质区别:BatchNorm 假设同一特征维度在不同样本间服从相似分布(适合 CV 中的通道特征),LayerNorm 假设同一样本的不同特征维度间服从相似分布(更适合 NLP 中的 token 表示)
1.4 Pre-Norm vs Post-Norm
- Post-Norm(原始 Transformer):$\text{LayerNorm}(x + \text{Sublayer}(x))$
- Pre-Norm:$x + \text{Sublayer}(\text{LayerNorm}(x))$

两者的核心区别在于 LayerNorm 相对于残差连接的位置:Post-Norm 是先加残差再归一化,Pre-Norm 是先归一化再进子层、最后加残差。Pre-Norm 训练更稳定,可以不用 warmup,梯度流更通畅(梯度可以通过残差连接直接回传,不被 Norm 层阻断);但 Post-Norm 收敛后效果通常更好。当前大模型(GPT、LLaMA、DeepSeek)普遍采用 Pre-Norm + RMSNorm 的组合。
为什么 Pre-Norm 训练更稳定?
从梯度流的角度:Pre-Norm 中残差路径为 $x + \text{Sublayer}(\text{LN}(x))$,梯度可以通过恒等映射 $x$ 直接回传到任意底层,不经过任何非线性变换。而 Post-Norm 中残差加完后还要经过一次 LN,相当于在残差路径上插入了一个归一化操作,梯度需要穿过这些 LN 层,深层模型中容易出现梯度消失或爆炸。
为什么 Post-Norm 效果可能更好?
Post-Norm 的每一层输出都经过归一化,对参数有更强的正则化效果,相当于每一层都是”足秤”的。Pre-Norm 由于残差路径是恒等映射,如果子层的贡献很小,深层 Pre-Norm 可能退化为”浅层网络”——各层的增量贡献逐渐减小,表现出类似”表示坍塌”的现象。
1.5 RMSNorm 与 LayerNorm 的区别
LayerNorm 包含平移不变性(re-centering)和缩放不变性(re-scaling)两个操作:先减去均值(平移),再除以标准差(缩放),并带有 $\gamma$(缩放)和 $\beta$(偏移)两个可学习参数:
RMSNorm(Root Mean Square Layer Normalization,2019)的核心思想是:LayerNorm 的成功关键在于缩放不变性,而非平移不变性。因此 RMSNorm 去除了均值中心化操作,仅保留基于均方根(RMS)的缩放,且只有 $\gamma$ 参数:
为什么去掉均值中心化仍然有效?
- 原论文通过实验验证,re-centering 操作对模型性能的贡献可以忽略不计,re-scaling 才是归一化成功的核心
- 后续研究进一步发现,模型的隐藏向量自然会与均匀向量正交对齐,即隐藏向量沿均匀方向的分量本身就很小,”减均值”本质上是在做一个几乎无效的操作
- RMSNorm 不具备 re-centering 不变性(即对输入加常数偏移敏感),但实践中这不影响训练稳定性
计算效率优势:LayerNorm 需要两次数据扫描(计算均值 + 计算方差),而 RMSNorm 仅需一次(计算均方和),在不同模型架构上可节省 7%-64% 的归一化计算时间。在 GPT-2 上实测可减少约 18% 的训练时间。
LLaMA、DeepSeek、Qwen、Mistral 等主流大模型均采用 RMSNorm。
1.6 位置编码方案对比
| 方案 | 原理 | 外推能力 | 代表模型 |
|---|---|---|---|
| 正弦位置编码 | 固定三角函数 | 理论可外推,实际有限 | 原始 Transformer |
| 可学习位置编码 | 参数学习 | 长度受限于训练长度 | BERT、GPT |
| RoPE | 旋转矩阵编码相对位置 | 通过 NTK 缩放可外推 | LLaMA、DeepSeek |
| ALiBi | 在 attention score 加线性偏置 | 天然支持外推 | BLOOM、MPT |
RoPE(旋转位置编码) 是当前最主流的方案,其核心目标是:设计位置编码函数 $f(x, m)$,使得两个位置 $m$、$n$ 处的向量内积只依赖于相对位置 $m - n$:
二维直觉:对二维向量施加旋转矩阵 $R(m\theta)$,两个旋转后向量的内积:
结果只依赖 $m - n$,天然编码相对位置。
推广到高维:将 $d$ 维向量($d$ 为偶数)两两分组,每组应用不同频率的旋转:
高频分量(小 $i$)变化快,捕捉相邻 token 的位置关系;低频分量(大 $i$)变化慢,捕捉远距离的位置关系。实际实现只需两次逐元素乘法和一次加法,计算开销极小。
与绝对位置编码的本质区别:绝对位置编码加到输入 embedding 上,位置和语义信息混合在同一向量中;RoPE 作用在 Q、K 上(不改变 V),位置信息通过旋转角度编码,语义通过向量模长编码,解耦更好。
长度外推方案:
- Position Interpolation:线性缩放位置索引到训练范围内,需少量微调
- NTK-aware 插值:调整频率基数 $\theta_{\text{base}}$,高频分量少插值、低频分量多插值
- YaRN:结合 NTK 插值 + 注意力缩放因子 + 分段温度调节,效果最好
1.7 激活函数:GELU、SiLU、SwiGLU
GLU(Gated Linear Unit) 门控机制的核心思想是用一个”阀门”控制信息流:
$\sigma(xW_3)$ 产生 0-1 之间的值,决定 $xW_1$ 中每个维度有多少信息能通过。Shazeer (2020) 系统测试了多种 GLU 变体:
| 变体 | 门控激活 | 代表模型 |
|---|---|---|
| GLU | Sigmoid | - |
| ReGLU | ReLU | - |
| GEGLU | GELU | - |
| SwiGLU | SiLU (Swish) | LLaMA, DeepSeek |
SwiGLU FFN 的完整结构(三矩阵设计):
与传统 FFN(两矩阵 $\text{ReLU}(xW_1)W_2$)相比,SwiGLU 多了一个 $W_{\text{gate}}$。为保持参数量一致,隐层维度从 $4d$ 缩小到 $\frac{8d}{3}$(取最近的 128 倍数),此时 $3 \times d \times \frac{8d}{3} = 8d^2$,与传统 FFN 的 $2 \times d \times 4d = 8d^2$ 参数总量持平。
门控为什么有效? (1) 让网络能动态选择性激活特征;(2) 门控分支提供额外梯度路径,缓解梯度消失;(3) 两个线性变换的逐元素乘积比单一变换后接激活具有更强的表达能力。
二、大模型架构设计
2.1 GPT vs BERT:为什么大模型都是 Decoder-Only
- BERT(Encoder-Only):双向注意力,适合理解任务(分类、NER)
- GPT(Decoder-Only):单向因果注意力,适合生成任务
Decoder-Only 成为主流的原因:
- 统一范式:理解和生成都转化为文本生成,一个模型解决所有任务
- Scaling 更好:因果注意力天然适合自回归生成,扩展效率高
- In-context Learning 更强:@苏建林 指出双向注意力使得模型倾向于”偷懒”——不需要通过 in-context 示例就能看到答案区域的上下文,因果注意力强制模型从左到右逐步推理
- 训练效率:每个 token 都可以作为预测目标,数据利用率高(BERT 只预测 15% 的 masked token)
- encoder 的低秩问题:双向注意力矩阵的秩受限于 $\min(n, d)$,当 $d < n$ 时退化为低秩,信息表达能力受限。而因果注意力矩阵是下三角的,天然满秩
2.2 Causal Decoder vs Prefix Decoder
- Causal Decoder(GPT 系列):所有 token 只能看到之前的 token,注意力矩阵是下三角
- Prefix Decoder(GLM、UniLM):prefix 部分使用双向注意力(完全可见),生成部分使用因果注意力
Prefix Decoder 对输入的理解更充分(prefix 部分可双向交互),但实现更复杂——需要区分两种注意力掩码。实际大规模模型中 Causal Decoder 更为主流,因为其简单统一、对 KV Cache 友好、且 scaling 表现更好。
2.3 MHA、MQA、GQA 对比
| 类型 | Q heads | KV heads | KV Cache(per layer per token) | 代表模型 |
|---|---|---|---|---|
| MHA | H | H | $2 \times H \times d_k$ | GPT-3, LLaMA-1 |
| MQA | H | 1 | $2 \times 1 \times d_k$ | PaLM, GPT-J |
| GQA | H | G (1<G<H) | $2 \times G \times d_k$ | LLaMA-2 70B, Mistral |
MQA(Shazeer, 2019)过于激进——所有头共享 KV,在某些需要精细区分的任务上会损失表达能力。GQA(Ainslie et al., 2023)是 MHA 和 MQA 的折中:将 $H$ 个 Q 头分成 $G$ 组,每组共享一套 KV。
从 MHA 转换到 GQA(Uptraining):从已训练好的 MHA 模型,将同组的 KV 头参数做 mean pooling 合并,然后用约 5% 的原始训练量继续训练即可恢复性能。GQA 论文(T5-XXL 规模)实验显示:GQA-8 的质量约为 MHA 的 99.5%,推理速度提升 2-3 倍。
为什么 GQA 主要加速解码而非 prefill? 解码阶段是 memory-bound 的——每步只生成一个 token,计算量小,瓶颈在于从 HBM 加载 KV Cache 的带宽。GQA 将 KV Cache 缩小到 $G/H$,直接减少内存带宽需求。
2.4 MoE(Mixture of Experts)架构
将 FFN 层替换为多个独立的专家(Expert),通过 Router(门控网络)选择 top-K 个 Expert:
优势:总参数量大(知识容量大),但每次推理只激活部分参数,计算量可控。Mixtral 8x7B 总参数 47B,每次激活仅 13B(top-2 of 8 experts),性能超越 LLaMA-2 70B。
负载均衡问题:Router 倾向于将大部分 token 路由到少数专家(”赢者通吃”),导致其他专家得不到训练。
解决方案:
- 辅助负载均衡损失(Switch Transformer):$L_{\text{balance}} = \alpha \cdot N \cdot \sum_i (f_i \cdot p_i)$,$f_i$ 是第 $i$ 个专家被分配的 token 比例,$p_i$ 是平均路由概率。这个损失鼓励 $f_i$ 和 $p_i$ 的乘积均匀
- Expert Capacity:为每个专家设置最大处理 token 数,溢出的 token 被丢弃或重路由
- DeepSeek-V3 方案:无辅助损失的负载均衡——引入 bias term $b_i$ 动态调节路由偏好,$b_i$ 不产生梯度,仅在 routing 时加到 gate logits 上。当专家被过多选中时减小 $b_i$,反之增大。避免了辅助损失对主训练目标的干扰
MoE 的训练挑战:(1) Router 的离散 top-K 选择导致梯度不连续;(2) Expert Parallelism 中 token 需要 all-to-all 通信,带宽要求高;(3) 总参数量大但每个专家见到的数据少,过拟合风险增加
2.5 DeepSeek 的架构创新
MLA(Multi-head Latent Attention):不同于 GQA 通过减少 KV 头数来压缩 KV Cache,MLA 将所有头的 KV 联合压缩到一个低维潜在向量中:
推理时只缓存 $c_{KV}$(维度 $d_c = 512$),需要时上投影恢复:$K = W_{UK} \cdot c_{KV}$,$V = W_{UV} \cdot c_{KV}$。
DeepSeek-V2 中 $d = 5120$,MHA 的 KV Cache 为 $2 \times 5120 = 10240$ 维/层,而 MLA 仅需 $d_c + d_r = 512 + 64 = 576$ 维/层($d_r$ 是 RoPE 解耦部分,见下文),压缩比约 18 倍,远超 GQA。
RoPE 兼容性:RoPE 的旋转操作与低秩压缩不兼容(不能先压缩再旋转),MLA 的解法是解耦 RoPE:$K = [K_{\text{content}}, K_{\text{rope}}]$,其中 $K_{\text{content}}$ 从 $c_{KV}$ 恢复(不带位置),$K_{\text{rope}}$ 单独计算(带 RoPE),维度仅 $d_r = 64$。
其他创新:
- 细粒度 MoE:将大专家拆为更多小专家(如 160 个小专家,每次激活 6 个),提高组合灵活性
- 共享专家隔离:部分专家始终被激活,处理通用知识,减少专家间冗余
- Multi-Token Prediction:同时预测多个未来 token,提高训练效率
- FP8 混合精度训练
DeepSeek-V3 总参数 671B,激活参数仅 37B。
三、训练与微调
3.1 大模型训练的三个阶段
- 预训练(Pre-training):大规模无标注语料(数万亿 token),自回归 next token prediction,损失函数为交叉熵 $L = -\sum_t \log P(x_t | x_1, \dots, x_{t-1})$
- 有监督微调(SFT):高质量指令-回答对,学习对齐人类意图。LIMA 论文证明 1000 条高质量数据就能取得很好的 SFT 效果,质量远比数量重要
- 对齐(Alignment):RLHF / DPO / GRPO,进一步对齐人类偏好
3.2 分布式训练并行策略
| 策略 | 原理 | 切分维度 | 通信模式 |
|---|---|---|---|
| 数据并行 DP | 每个 GPU 一份模型,不同数据 | batch | All-Reduce 梯度 |
| 张量并行 TP | 单层参数切到多个 GPU | hidden dim | All-Reduce 激活 |
| 流水线并行 PP | 不同层放不同 GPU | layer | 点对点传递激活 |
| 序列并行 SP | 序列维度分到多个 GPU | sequence | All-Gather / Reduce-Scatter |
| Expert 并行 EP | MoE 不同专家放不同 GPU | expert | All-to-All |
ZeRO(DeepSpeed)是理解分布式训练显存的关键。以混合精度 + Adam 训练为例,每个参数的显存占用:
| 组成部分 | 精度 | 字节/参数 |
|---|---|---|
| FP16 模型参数 | FP16 | 2 |
| FP16 梯度 | FP16 | 2 |
| FP32 主权重副本 | FP32 | 4 |
| FP32 一阶动量 (m) | FP32 | 4 |
| FP32 二阶动量 (v) | FP32 | 4 |
总计 16 bytes/参数,其中优化器状态占 $4+4+4 = 12$ bytes,即”12 倍“的来源。以 7B 模型为例:模型+梯度 28GB,优化器状态 84GB,总计约 112GB。
ZeRO 通过分片来切分这些开销(设 $N_d$ 个 GPU):
- ZeRO-1:分片优化器状态 → $2\Phi + 2\Phi + 12\Phi/N_d$
- ZeRO-2:+ 分片梯度 → $2\Phi + (2 + 12)\Phi/N_d$
- ZeRO-3:+ 分片参数 → $16\Phi/N_d$(等价于 PyTorch FSDP)
ZeRO-3 的代价是通信量从 $2\Phi$(标准 All-Reduce)增加到 $3\Phi$(额外一次 All-Gather 收集参数),增加 50%,但换来近线性的显存缩减。
实际训练通常采用 3D 并行(DP + TP + PP)。
3.3 混合精度训练
混合精度的核心:前向和反向使用低精度(FP16/BF16)加速计算,主权重保持 FP32 用于参数更新。
FP16 的问题——梯度下溢:FP16 的动态范围约 $6.1 \times 10^{-5}$ ~ $6.5 \times 10^{4}$(5 位指数),训练中许多梯度值在 $10^{-6}$ ~ $10^{-8}$,直接被截断为 0。
动态 Loss Scaling 机制:反向传播前将 loss 乘以缩放因子 $S$,放大梯度到 FP16 安全范围,更新前再除以 $S$。$S$ 自适应调整——连续成功若干步则 $S \times 2$(尝试更大缩放),出现 inf/nan 则 $S / 2$ 并跳过本步更新。
BF16 为什么不需要 Loss Scaling? BF16 有 8 位指数(与 FP32 相同),动态范围达 $3.4 \times 10^{38}$,几乎不会发生梯度下溢。代价是尾数仅 7 位(FP16 有 10 位),精度略低,但实验表明对训练影响极小。BF16 由 Google 在 TPU 上首创,NVIDIA 从 A100 开始支持。
| 特性 | FP16 | BF16 | FP32 |
|---|---|---|---|
| 指数位 | 5 | 8 | 8 |
| 尾数位 | 10 | 7 | 23 |
| 动态范围 | ~$6.5 \times 10^4$ | ~$3.4 \times 10^{38}$ | ~$3.4 \times 10^{38}$ |
| Loss Scaling | 需要 | 不需要 | 不需要 |
DeepSeek-V3 进一步探索了 FP8 训练(E4M3 用于前向权重和激活,E5M2 用于梯度),在 H100 原生 FP8 Tensor Core 上可获得额外 2 倍加速。
3.4 LoRA 原理
内在维度假说:Aghajanyan et al. (2020) 证明预训练模型的微调过程存在一个远低于参数空间维度的”内在维度“——RoBERTa-base(125M 参数)在 MRPC 上的内在维度仅约 896。预训练越充分,内在维度越低。这意味着 $\Delta W$ 天然是低秩的。
LoRA 冻结原始权重 $W_0$,添加低秩分解增量 $\Delta W = BA$:
其中 $B \in \mathbb{R}^{d \times r}$,$A \in \mathbb{R}^{r \times d}$,$r \ll d$。
初始化策略:B 初始化为零,A 用高斯初始化。原因:(1) 初始时 $BA = 0$,模型行为与预训练完全一致,避免灾难性遗忘;(2) 如果 A 也为零,则 $\partial L / \partial B \propto (Ax)^T = 0$,B 的梯度恒为零,无法打破对称性。
Rank 选择策略:简单任务(分类)r=4-8,指令微调 r=16-64,大领域差异适配 r=64-256。通常先小后大,直到性能不再提升。$\alpha/r$ 控制 LoRA 贡献的缩放,$\alpha$ 通常固定为 16 或等于 $r$。
应用位置:通常加在 Q、V 矩阵上效果最好,也可扩展到 K、O 及 FFN。
DoRA(Weight-Decomposed Low-Rank Adaptation) 的改进:将权重分解为幅度和方向两个组件独立学习。分析发现 LoRA 倾向于同时改变幅度和方向且两者正相关,而全量微调可以独立调整两者。DoRA 在相同 rank 下通常优于 LoRA 0.5-1%。
3.5 QLoRA 的改进
在 LoRA 基础上引入三个关键优化:
- NF4 量化:基于正态分布的最优 4-bit 数据类型。预训练权重近似服从正态分布,NF4 的量化水平(quantization levels)按正态分布的分位数设置,信息理论最优
- Double Quantization:对量化常数(scale)再做一次量化(FP32 → FP8),每个参数额外节省约 0.37 bit
- Paged Optimizers:利用 CUDA unified memory 在 GPU/CPU 间换页优化器状态,处理显存峰值
效果:65B 模型可在单张 48GB GPU 上微调,性能接近全参数微调。
3.6 其他 PEFT 方法
| 方法 | 原理 | 额外推理开销 | 可训练参数量 |
|---|---|---|---|
| LoRA | 低秩增量 $\Delta W = BA$ | 无(可合并) | 0.1-1% |
| Adapter | 每层插入下投影→激活→上投影 | 有 | 0.5-3% |
| Prefix Tuning | 每层 K、V 前添加可学习 prefix | 有(占序列长度) | 0.1% |
| Prompt Tuning | 仅输入 embedding 前加 soft prompt | 有(占序列长度) | <0.01% |
| IA³ | 学习缩放向量调制 K、V 和 FFN | 极小 | <0.01% |
效果排序通常:LoRA ≥ Adapter > Prefix Tuning > Prompt Tuning。LoRA 因为无额外推理开销且效果好,成为最广泛使用的 PEFT 方法。
四、RLHF 与对齐
4.1 RLHF 完整流程
RLHF 涉及四个模型:
| 模型 | 是否更新 | 作用 |
|---|---|---|
| Policy Model(Actor) | 是 | 当前策略,生成回答,是最终训练目标 |
| Reference Model | 否 | SFT 模型的冻结副本,计算 KL 惩罚 |
| Reward Model | 否 | 人类偏好训练的打分模型 |
| Value Model(Critic) | 是 | 估计状态价值函数,计算优势 $A(s,a)$ |
阶段一:SFT,用高质量对话数据微调预训练模型。
阶段二:奖励模型训练(RM),收集人类偏好数据(对同一 prompt 的多个回答排序),训练 RM 学习偏好(Bradley-Terry 模型):
阶段三:PPO 强化学习,每步流程:
- 采样:Policy Model 对每个 prompt 生成回答 $y \sim \pi_\theta(\cdot|x)$
- 计算奖励:$R = r_\text{RM}(x, y) - \beta \cdot \sum_t \left[\log \pi_\theta(y_t|x, y_{<t}) - \log \pi_\text{ref}(y_t|x, y_{<t})\right]$
- 计算优势:用 GAE(Generalized Advantage Estimation):$A_t = \sum_{l=0}^{T-t} (\gamma\lambda)^l \delta_{t+l}$,其中 $\delta_t = r_t + \gamma V_\psi(s_{t+1}) - V_\psi(s_t)$
- PPO Clip 更新:
其中 $r_t(\theta) = \pi_\theta(y_t|s_t) / \pi_{\theta_\text{old}}(y_t|s_t)$,$\epsilon$ 通常取 0.2。Clip 的作用是建立”信任域”,当 $A_t > 0$ 且 ratio 已超过 $1+\epsilon$ 时截断梯度,防止策略变化过大。
KL 惩罚的必要性:防止 reward hacking(策略找到 RM 的漏洞,生成高分但无意义文本)、保持生成多样性、避免遗忘预训练知识。$\beta$ 通过 Adaptive KL Controller 自适应调整。
4.2 DPO:Direct Preference Optimization
DPO 的核心洞察:可以从 RLHF 的最优策略公式直接推导出一个无需 RM 和 PPO 的闭式损失函数。
推导关键步骤:
(1) RLHF 优化目标 $\max_\pi E[r(x,y)] - \beta \text{KL}(\pi | \pi_\text{ref})$ 的最优解为:
(2) 反解奖励函数:$r(x,y) = \beta \log \frac{\pi^*(y|x)}{\pi_\text{ref}(y|x)} + \beta \log Z(x)$
(3) 代入 Bradley-Terry 模型,$Z(x)$ 项在相减时恰好消掉,最终得到:
梯度直觉:当模型错误地认为 $y_l$ 比 $y_w$ 好时,sigmoid 项接近 1,梯度大,强力纠正;已经正确排序时,梯度接近 0,几乎不更新。
优势:从 4 个模型减少到 2 个(policy + reference),无需在线采样,训练更稳定。缺点:离线偏好数据可能导致分布偏移,对数据质量更敏感。
4.3 GRPO:Group Relative Policy Optimization
DeepSeek 提出的方法,核心创新是用组内相对奖励代替 Value Model 来估计优势函数:
- 对每个 prompt 采样 $G$ 个回答(如 $G = 64$):${o_1, \dots, o_G} \sim \pi_{\theta_\text{old}}(\cdot|q)$
- 计算每个回答的奖励 ${r_1, \dots, r_G}$
- 组内归一化:$A_i = (r_i - \mu) / \sigma$,$\mu$ 和 $\sigma$ 是组内均值和标准差
- 用 PPO Clip 目标函数更新策略
与 PPO 的关键区别:省去了 Value Model,从 4 个模型减少到 3 个。组内对比天然消除了 prompt 难度差异的影响(同一 prompt 的不同回答相互比较)。
在 DeepSeek-R1 中的应用:R1-Zero 仅用 GRPO + 规则奖励(准确性 + 格式),无需任何人类标注或 SFT 数据,模型就自发涌现了 chain-of-thought 推理、自我反思、回溯纠错等行为——这就是著名的”顿悟时刻(Aha Moment)“。
4.4 Constitutional AI
Anthropic 提出,用一组”宪法”原则取代部分人类标注:
- 模型生成回答
- 模型根据宪法原则自我批评和修订
- 用修订后的数据做 RLAIF(AI 反馈代替人类反馈)
优点:减少人类标注成本,原则可解释、可修改。
五、推理优化
5.1 KV Cache
自回归生成时,每一步都需要之前所有 token 的 K、V。KV Cache 缓存这些中间结果,将每步的复杂度从 $O(n)$ 降为 $O(1)$(仅需计算新 token 的 Q 与所有 KV 的 attention)。
显存占用公式:
以 LLaMA-2 7B 为例(32 层、32 头、$d_{\text{head}}=128$、FP16):
| 序列长度 | KV Cache(batch=1) | 说明 |
|---|---|---|
| 2048 | 1 GB | LLaMA-2 默认上下文 |
| 4096 | 2 GB | |
| 32K | 16 GB | |
| 128K | 64 GB | 超过单卡 A100 80GB |
模型参数本身仅 13GB(FP16),但 128K 上下文的 KV Cache 已达 64GB——KV Cache 是长上下文推理的主要瓶颈。GQA(如 LLaMA-2 70B 用 8 个 KV 头代替 64 个)可将 KV Cache 缩小 8 倍。
5.2 Flash Attention
核心思想:IO-aware 计算,利用 GPU 内存层级差异(SRAM 带宽 ~19TB/s >> HBM 带宽 ~2TB/s),通过分块计算(tiling)避免将 $n \times n$ 注意力矩阵写入 HBM。
关键技术——Online Softmax + 输出 Rescaling:
传统 softmax 需要三遍扫描(求 max → 求 sum → 算结果)。Flash Attention 基于 Online Softmax 的增量更新思想,在处理每个 KV 块时同时维护 running max $m$ 和 running sum $d$,对之前累积的输出做指数修正(rescaling):
这保证了最终输出与标准 attention 数学上完全等价(exact attention,非近似)。
效果:显存从 $O(n^2)$ 降至 $O(n)$,速度提升 2-4 倍。
Flash Attention v2 改进:(1) 减少非矩阵乘法运算,将 rescaling 延迟到最后;(2) 在序列长度维度额外并行(v1 仅在 batch 和 head 维度并行);(3) 优化 warp 间工作分配。比 v1 快约 2 倍。
Flash Attention 3 利用 H100 Hopper 架构特性:TMA 异步加载(数据搬运与计算重叠)、WGMMA 指令(直接在共享内存上做矩阵乘法)、FP8 支持,达到 740 TFLOPS(利用率 75%)。
5.3 PagedAttention(vLLM)
借鉴操作系统虚拟内存分页机制:
- 将 KV Cache 分成固定大小的页(block)(如每页存 16 个 token 的 KV)
- 通过 block table 维护逻辑块到物理块的映射(类似页表)
- 按需分配,物理块不需要连续——消除碎片和预分配浪费
- 利用率从传统方式的 20-40% 提升到 96% 以上
- 支持 Copy-on-Write:beam search / parallel sampling 中多个序列可共享前缀的 KV 块,修改时才复制
5.4 Continuous Batching
- Static Batching:一个 batch 所有请求等最长序列完成才返回,短请求被 padding 阻塞,GPU 利用率低
- Continuous Batching(Iteration-level Scheduling):每步迭代可插入新请求、移除已完成请求,序列完成即释放资源
- 吞吐量提升 2-4 倍
5.5 Speculative Decoding(投机解码)
用小的 draft model 快速生成 $K$ 个候选 token,再用大模型一次前向传播并行验证:
- 对每个位置,以概率 $\min\left(1, \frac{p(\tilde{x}_t)}{q(\tilde{x}_t)}\right)$ 接受 draft token
- 被拒绝时,从修正分布 $\text{norm}(\max(0, p(x) - q(x)))$ 重新采样
- 输出分布严格等于大模型:对任意 token $x$,$P(\text{output}=x) = \min(q(x), p(x)) + \max(0, p(x) - q(x)) = p(x)$
- 平均接受率 $\alpha = 1 - \text{TV}(p, q)$(总变差距离),draft 越接近 target 加速越好,通常 2-3 倍
5.6 Prefix Caching
共享相同 system prompt 的多个请求,其 KV Cache 前缀完全相同。Prefix Caching 计算一次后缓存,后续请求直接复用,显著降低首 token 延迟(TTFT)。vLLM 中通过 Automatic Prefix Caching (APC) 实现。
5.7 模型量化
基础概念:
- 对称量化:浮点零映射到量化零,$x_q = \text{round}(x / s)$,$s = \max(|x|) / (2^{b-1}-1)$。适合分布对称的权重
- 非对称量化:$[α, β]$ 映射到 $[0, 2^b-1]$,需额外 zero-point。适合激活值(如 ReLU 后全正)
- 量化粒度:per-tensor(整个张量一组)< per-channel(每个输出通道一组)< per-group(每 $g$ 个元素一组,$g=128$ 常用)。4-bit 量化几乎必须用 per-group,否则精度损失太大
PTQ(训练后量化)主要方法:
GPTQ:基于 Optimal Brain Quantization,核心思想是逐列量化权重,利用 Hessian 逆矩阵 $H^{-1} = (X^TX)^{-1}$ 将量化误差最优补偿到未量化的列上。具体地,量化第 $j$ 列后,将误差 $\delta = W_{:,j} - \hat{W}_{:,j}$ 按 $H^{-1}_{j, j+1:} / H^{-1}_{j,j}$ 的方向分配到后续列。使用 Cholesky 分解高效求 $H^{-1}$,分块(block size=128)加速。128B 模型单卡 A100 约 4 小时完成量化。
AWQ:核心观察——不到 1% 的”显著权重”对输出影响极大,且这些权重对应的激活幅度大。通过等价变换 $Y = (X \cdot s^{-1})(s \cdot W)$,用 per-channel scale $s_j = \bar{a}_j^\alpha$($\bar{a}_j$ 为激活均值)放大重要通道的权重,提高其量化精度。$\alpha \in [0,1]$ 通过网格搜索确定。AWQ 无需反向传播,比 GPTQ 快 10 倍以上,且泛化性更好。
SmoothQuant:权重分布平滑(易量化),激活值有 outlier(难量化)。通过数学等价变换 $Y = (X \cdot \text{diag}(s)^{-1}) \cdot (\text{diag}(s) \cdot W)$,将激活的量化难度”迁移”到权重上,实现 W8A8(权重和激活都量化到 INT8)几乎无损。
六、RAG(检索增强生成)
6.1 RAG 基本流程
1 | 文档加载 → 分块(Chunking) → Embedding → 向量数据库 |
6.2 Chunking 策略选择
| 策略 | 原理 | 优缺点 |
|---|---|---|
| 固定大小 | 按 token 数切分 + overlap(10-20%) | 简单但可能截断语义 |
| 递归字符分割 | 按 \n\n → \n → 空格 → 字符 递归 |
LangChain 默认,较通用 |
| 语义分块 | 相邻句子 embedding 相似度骤降处分割 | 边界更合理,计算量大 |
| 文档结构分块 | 利用 Markdown/HTML 标签结构 | 结构清晰,依赖格式 |
chunk size 太小则上下文不完整,太大则引入噪声且可能超出 LLM 上下文窗口。实践中 256-1024 token 较常用。
6.3 检索优化
- 混合检索:向量检索(语义匹配)+ BM25(关键词匹配),覆盖不同匹配模式
- 重排序(Rerank):用 cross-encoder 模型(如 bge-reranker-v2-m3)对 top-100 粗检结果精排到 top-5,效果显著优于只用 embedding
- Query 改写:用 LLM 改写/分解 query,提高检索召回率
- HyDE(Hypothetical Document Embedding):先让 LLM 生成假设答案,用其 embedding 做检索。原理是假设答案与真实文档在语义空间更接近
- RRF 融合排序:$\text{score} = \sum_{i} \frac{1}{k + \text{rank}_i}$,$k=60$ 常用,简单有效地融合多路召回结果
- Self-RAG:模型自主决定是否需要检索、检索结果是否有用、答案是否被支持
6.4 Embedding 模型选型
2025-2026 趋势:大模型做 embedding 占据榜单前列。
| 模型 | 维度 | 最大长度 | 开源 | 特点 |
|---|---|---|---|---|
| BGE-M3 (BAAI) | 1024 | 8192 | 是 | 多语言、同时输出 dense/sparse/colbert |
| GTE-Qwen2-7B (阿里) | 3584 | 32K | 是 | C-MTEB 中文顶级,需 GPU |
| E5-mistral-7b | 4096 | 32K | 是 | 基于 Mistral 7B |
| text-embedding-3-large (OpenAI) | 3072 | 8191 | 否 | 支持 Matryoshka 降维 |
中文场景推荐:资源有限选 BGE-large-zh-v1.5(326M),追求最高精度选 GTE-Qwen2-7B,中英混合选 BGE-M3。
6.5 RAG vs Fine-Tuning
| 维度 | RAG | Fine-Tuning |
|---|---|---|
| 知识更新 | 更新文档库即可 | 需要重新训练 |
| 幻觉控制 | 可追溯来源 | 无法保证 |
| 适用场景 | 文档型知识、实时信息 | 特定风格/格式/推理模式 |
| 推理开销 | 额外检索步骤 | 无额外开销 |
最佳实践:两者结合——微调模型学习领域风格和推理模式,RAG 提供实时知识和引用来源。
6.6 GraphRAG
微软提出:先用 LLM 从文档中抽取实体和关系构建知识图谱,再在图上做社区检测和层次化总结。对全局性问题(如”这批文档的主要主题是什么”)效果远优于传统 RAG——传统 RAG 只能检索局部片段,难以回答需要全局理解的问题。
6.7 RAG 评估(RAGAS 框架)
| 维度 | 指标 | 含义 |
|---|---|---|
| 检索质量 | Context Precision / Recall | 检索到的文档是否相关且完整 |
| 生成忠实度 | Faithfulness | 答案是否忠实于检索到的上下文(不编造) |
| 答案质量 | Answer Relevance | 答案是否回答了问题 |
七、Agent 与工具使用
7.1 LLM Agent 基本架构
Agent = LLM(大脑)+ Memory(记忆)+ Tools(工具)+ Planning(规划)
- LLM:核心推理引擎,负责理解、规划、决策
- Memory:短期记忆(上下文窗口)+ 长期记忆(向量数据库存储历史交互)
- Tools:代码执行器、搜索引擎、API 调用、数据库查询
- Planning:任务分解与执行策略
7.2 Agent 规划策略
ReAct(Reasoning + Acting):交替进行思考(Thought)→ 行动(Action)→ 观察(Observation),循环直到得出答案。核心在于将推理和行动交织,观察结果指导下一步推理。
Plan-and-Execute:先用 LLM 生成完整的步骤列表,然后逐步执行,执行过程中可根据结果动态修改计划。适合复杂多步任务。
Reflexion:执行后进行自我反思(分析成功/失败的原因),将反思存入长期记忆,后续尝试中参考避免重复犯错。相当于给 Agent 加了”经验学习”能力。
Tree of Thoughts:将推理过程组织为树结构,每步生成多个候选思路,通过评估函数选择最优路径,支持回溯。适合需要探索的复杂推理。
7.3 Function Calling 实现原理
1 | 用户输入 → LLM 判断是否需要调用工具 |
训练方式:在 SFT 数据中加入 function calling 格式的样本,让模型学会 (1) 判断何时调用;(2) 选择正确工具;(3) 生成正确参数;(4) 解读返回结果。
支持并行调用(一次输出多个独立 function call,系统并行执行)和嵌套调用(一个函数的输出作为另一个的输入,需理解依赖关系)。
7.4 MCP(Model Context Protocol)
Anthropic 提出的开放协议,标准化 LLM 与外部工具/数据源的连接,类似 AI 的”USB 接口”:
- 架构:MCP Host(LLM 应用)↔ MCP Client ↔ MCP Server(工具提供方)
- 三种能力:Resources(上下文数据)、Tools(可执行操作)、Prompts(预定义模板)
- 与 Function Calling 的区别:Function Calling 是模型层面的能力(模型学会输出结构化调用),MCP 是应用层的标准化协议(定义了工具描述、发现、调用、结果返回的通信格式)
7.5 Multi-Agent 设计模式
- 协作模式:多个 Agent 各有专长,协作完成复杂任务。如一个负责规划、一个负责编码、一个负责测试(AutoGen、CrewAI)
- 辩论模式:多个 Agent 对同一问题给出不同观点,通过辩论达成共识,提高答案质量
- 层级模式:管理者 Agent 接收任务 → 分解 → 分配给工作者 Agent → 综合结果
Agent 安全风险:过度授权(需最小权限原则)、间接 Prompt 注入(恶意内容嵌入工具返回结果)、无限循环(需设最大步数限制)、资源滥用(需设预算和频率限制)。关键操作应引入 Human-in-the-loop 确认。
八、Scaling Laws 与前沿话题
8.1 Scaling Law
模型性能(loss)与参数量 $N$、数据量 $D$、计算量 $C$ 呈幂律关系:
Chinchilla Scaling Law(Hoffmann et al.)指出最优分配是 $N$ 和 $D$ 等比增长,$D \approx 20N$。Chinchilla 70B + 1.4T token 优于 Gopher 280B + 300B token——之前的大模型普遍”训练不足”(under-trained),参数量过大而数据不够。
后续实践(如 LLaMA)发现,如果推理效率更重要,可以用更小的模型 + 更多的数据(如 7B + 2T token),训练时多花计算但推理更快。
8.2 涌现能力(Emergent Abilities)
在小模型中不存在、模型规模达到一定阈值后突然出现的能力:CoT 推理、few-shot 学习、代码生成等。
争议:Schaeffer et al. (2023) 指出”涌现”可能是评估指标选择的假象——使用非线性指标(如 exact match)时看到突变,使用连续指标(如 token-level accuracy)时性能提升是平滑的。但学术界对此尚无定论。
8.3 推理模型(o1 类模型)与 Test-time Compute Scaling
两种 Scaling 范式的对比:
| 维度 | Train-time Scaling | Test-time Scaling |
|---|---|---|
| 方式 | 增大模型/数据/训练计算 | 增加推理时的”思考”计算 |
| 代表 | GPT-3 → GPT-4 | OpenAI o1, DeepSeek-R1 |
| 收益曲线 | 幂律 | 对数(收益递减更快) |
| 优势 | 提升基础能力 | 提升复杂推理能力 |
DeepSeek-R1 的训练路径(四阶段):
- R1-Zero(纯 RL):直接对 base model 施加 GRPO,奖励仅为准确性(数学题对/错)+ 格式(是否使用
<think>标签)。模型自发涌现 CoT 推理、自我反思、回溯纠错等行为——“顿悟时刻“ - 冷启动 SFT:用 R1-Zero 生成的高质量 CoT 数据做少量 SFT,解决 R1-Zero 的可读性差、中英混杂等问题
- 面向推理的 RL:继续 GRPO,加入语言一致性奖励
- 全场景 RL + 蒸馏:在更广泛任务上对齐,并将 CoT 数据蒸馏到小模型。发现 蒸馏效果优于直接在小模型上做 RL——R1-Distill-Qwen-32B 在数学上超越 o1-mini
两种 scaling 并非对立而是互补:$\text{Performance} = f(\text{Train Compute}, \text{Test Compute})$。
8.4 合成数据
用 LLM 生成训练数据,缓解高质量数据不足:
- 方法:Self-Instruct(自我生成指令)、Evol-Instruct(WizardLM,迭代进化指令复杂度)
- 风险:模型坍塌(Model Collapse)——持续在自己生成的数据上训练,分布的尾部逐渐消失,模型退化
- 关键:严格的质量过滤(用强模型打分)+ 多样性控制(去重 + 主题覆盖检查)
8.5 多模态大模型
通用架构:Vision Encoder + Projector + LLM
- Vision Encoder:CLIP ViT、SigLIP(将图像编码为 token 序列)
- Projector:MLP(简单投影)、Q-Former(可学习 query 交叉注意力)、Perceiver Resampler(压缩视觉 token 数量)
- 代表模型:GPT-4V/o、LLaVA、Qwen-VL、InternVL
训练流程通常分两阶段:(1) 预训练对齐——冻结 LLM,只训练 Projector,学习视觉-语言对齐;(2) 多模态指令微调——全量或 LoRA 微调 LLM + Projector。
九、模型幻觉与安全
9.1 幻觉类型与成因
类型:
- 事实性幻觉:生成内容与事实不符(编造论文、虚构数据)
- 忠实性幻觉:生成内容与输入上下文不一致(摘要中添加原文没有的信息)
成因:
- 训练目标的本质:语言模型优化的是 next token 概率,而非事实准确性。模型倾向于生成”流畅”而非”正确”的文本
- 训练数据:存在错误、矛盾、过时信息
- 长尾知识:低频知识记忆不牢,模型用高频模式”脑补”
- 曝光偏差(Exposure Bias):训练用 teacher forcing,推理时自回归,错误会累积放大
- 采样策略:温度和 top-p 引入随机性
9.2 幻觉缓解
- RAG:引入外部可信知识源,最直接有效
- 自一致性(Self-Consistency):多次采样取多数一致的答案
- Chain-of-Thought:展示推理过程,减少跳跃式错误
- RLHF/DPO 对齐:奖励真实回答、惩罚幻觉,训练模型在不确定时说”不知道”
- 温度调低:减少随机性,增加确定性
- Post-hoc 事实核查:用外部搜索引擎或知识图谱验证生成内容
9.3 安全攻击类型
- Prompt Injection:在用户输入中注入恶意指令覆盖系统提示
- Jailbreak:绕过安全限制——DAN 攻击(角色扮演)、编码绕过(base64、低资源语言)、GCG 对抗后缀(自动搜索触发有害输出的 token 序列)
- 间接注入:将恶意指令嵌入 RAG 检索到的文档中(攻击 Agent 系统)
- Prompt Leaking:诱导模型泄露 system prompt
9.4 对齐税(Alignment Tax)
对齐训练后模型某些能力下降:过度拒绝(对无害问题也拒绝)、创造力降低、代码能力下降。
降低方法:
- 提高对齐数据的质量和多样性(尤其是边界案例)
- Constitutional AI(规则约束而非硬编码拒绝)
- 细粒度安全分类:区分真正有害 vs 无害但敏感的请求,减少误拒
十、数据与 Tokenizer
10.1 预训练数据处理
- 数据收集:Common Crawl(网页)、书籍、代码(GitHub/StackOverflow)、学术论文(ArXiv)、Wikipedia
- 质量过滤:
- 规则过滤:去除过短/过长、乱码、重复标点
- 语言检测:fastText 分类器
- Perplexity 过滤:用小型 LM 计算 perplexity,过滤低质量文本
- 分类器过滤:训练二分类器区分高质量 vs 低质量内容
- 去重:
- 精确去重:文档级 hash
- 近似去重:MinHash + LSH,检测高相似度文档对
- 子串去重:去除在多个文档中重复出现的长子串
- 有害内容过滤:色情、暴力、个人隐私(PII)
- 数据混合配比:不同来源数据的比例对效果影响显著。通常代码数据占比提升会增强推理能力
10.2 Tokenizer 方案
| 方案 | 原理 | 代表模型 | 特点 |
|---|---|---|---|
| BPE | 从字符级逐步合并最高频字符对 | GPT 系列 | 最主流,平衡了词汇量和覆盖率 |
| WordPiece | 基于似然度(而非频率)选择合并 | BERT | 与 BPE 类似,合并策略不同 |
| Unigram | 从大词表逐步裁剪低概率 token | T5, LLaMA | 概率框架,可给出多种分词方案 |
| Byte-level BPE | 以字节(256 个)为基本单位 | GPT-2+ | 完全避免 OOV,天然支持所有语言 |
SentencePiece 是一个工具库(非算法),支持 BPE 和 Unigram,不需要预分词(直接处理原始文本),特别适合多语言和中文场景。LLaMA 系列使用 SentencePiece + BPE。
10.3 SFT 数据:质量 > 数量
LIMA 论文(Meta, 2023)证明:仅 1000 条精心筛选的高质量数据就能让预训练模型在对话任务上达到很好的效果,甚至接近用数万条数据训练的模型。
高质量标准:
- 准确性:回答正确无误
- 多样性:覆盖多种任务类型和难度
- 有帮助性:回答详细、有用
- 格式规范:一致的回答风格和结构
启示:SFT 阶段的作用更多是”激活“预训练模型已有的能力,而非”灌入”新知识。
参考文献
[1] Vaswani et al. Attention Is All You Need. NeurIPS 2017.
[2] Zhang & Sennrich. Root Mean Square Layer Normalization. NeurIPS 2019.
[3] Xiong et al. On Layer Normalization in the Transformer Architecture. ICML 2020.
[4] Su et al. RoFormer: Enhanced Transformer with Rotary Position Embedding. 2021.
[5] Shazeer. GLU Variants Improve Transformer. 2020.
[6] Shazeer. Fast Transformer Decoding: One Write-Head is All You Need (MQA). 2019.
[7] Ainslie et al. GQA: Training Generalized Multi-Query Transformer Models from Multi-Head Checkpoints. 2023.
[8] Dao et al. FlashAttention: Fast and Memory-Efficient Exact Attention with IO-Awareness. NeurIPS 2022.
[9] Dao. FlashAttention-2: Faster Attention with Better Parallelism and Work Partitioning. 2023.
[10] Kwon et al. Efficient Memory Management for Large Language Model Serving with PagedAttention. SOSP 2023.
[11] Rajbhandari et al. ZeRO: Memory Optimizations Toward Training Trillion Parameter Models. SC 2020.
[12] Hu et al. LoRA: Low-Rank Adaptation of Large Language Models. ICLR 2022.
[13] Aghajanyan et al. Intrinsic Dimensionality Explains the Effectiveness of Language Model Fine-Tuning. ACL 2021.
[14] Liu et al. DoRA: Weight-Decomposed Low-Rank Adaptation. 2024.
[15] Dettmers et al. QLoRA: Efficient Finetuning of Quantized LLMs. NeurIPS 2023.
[16] Ouyang et al. Training language models to follow instructions with human feedback. NeurIPS 2022.
[17] Rafailov et al. Direct Preference Optimization: Your Language Model is Secretly a Reward Model. NeurIPS 2023.
[18] Shao et al. DeepSeekMath: Pushing the Limits of Mathematical Reasoning (GRPO). 2024.
[19] DeepSeek-AI. DeepSeek-V2: A Strong, Economical, and Efficient Mixture-of-Experts Language Model. 2024.
[20] DeepSeek-AI. DeepSeek-V3 Technical Report. 2024.
[21] DeepSeek-AI. DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning. 2025.
[22] Frantar et al. GPTQ: Accurate Post-Training Quantization for Generative Pre-trained Transformers. ICLR 2023.
[23] Lin et al. AWQ: Activation-aware Weight Quantization for LLM Compression and Acceleration. MLSys 2024.
[24] Xiao et al. SmoothQuant: Accurate and Efficient Post-Training Quantization for Large Language Models. ICML 2023.
[25] Hoffmann et al. Training Compute-Optimal Large Language Models (Chinchilla). NeurIPS 2022.
[26] Lewis et al. Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks. NeurIPS 2020.
[27] Microsoft Research. GraphRAG: Unlocking LLM discovery on narrative private data. 2024.
[28] Zhou et al. LIMA: Less Is More for Alignment. NeurIPS 2023.
[29] Leviathan et al. Fast Inference from Transformers via Speculative Decoding. ICML 2023.
[30] Milakov & Gimelshein. Online normalizer calculation for softmax. 2018.