> For the complete documentation index, see [llms.txt](https://yeasy.gitbook.io/llm_internals/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://yeasy.gitbook.io/llm_internals/di-er-bu-fen-xun-lian-pian/06_training_techniques/6.1_loss_optimizer.md).

# 6.1 损失函数与优化器：为什么选择 Adam

Transformer 训练中最常用的损失函数是**交叉熵损失**（Cross-Entropy Loss）。本节从它出发，一直走到把这个标量变成参数更新的那一端：SGD 差在哪里、Adam 补上了什么、AdamW 又改了 Adam 的哪一处，以及 AdamW 这个“默认”近来为什么开始被 Muon 动摇。第五章停在“15 万亿词元”这样的数据规模上，但同一批词元交给不同的优化器，收敛到的并不是同一个模型。学习率本身随训练进程如何变化不在本节，见 6.2 节。

## 6.1.1 交叉熵损失

对于一个分类问题（语言模型的每步预测本质上就是在词汇表中分类），交叉熵衡量的是模型预测分布 $$\hat{p}$$ 与真实分布 $$p$$ 之间的差异：

$$\mathcal{L} = -\sum\_{c=1}^{V} p(c) \log \hat{p}(c)$$

在语言建模中，真实分布是独热的（正确词元概率为 1，其余为 0），因此简化为：

$$\mathcal{L} = -\log \hat{p}(x\_{\text{true}})$$

直觉上，交叉熵惩罚的是 **“对正确答案分配的概率太低”**——模型越不确定正确答案，损失越大。

**标签平滑**（Label Smoothing）是一种常用的正则化技巧。它将真实标签从硬性的 \[0, 0, ..., 1, ..., 0] 软化为均匀分布与 one-hot 标签的混合：正确类概率为 $$1-\epsilon+\epsilon/V$$，其他类为 $$\epsilon/V$$（原始论文中 $$\epsilon = 0.1$$）。这防止模型对预测过度自信，提升泛化能力。

### 困惑度：交叉熵的“人话”版本

**困惑度**（Perplexity，PPL）是衡量语言模型好坏最常用的指标，本质就是对每词元平均交叉熵取指数：

$$\text{PPL} = \exp!\left(\frac{1}{N}\sum\_{i=1}^{N} -\log \hat{p}(x\_i)\right) = \exp(\mathcal{L})$$

它可以直观理解为模型在每一步“等效地在多少个候选词元之间犹豫”——PPL=1 表示完全确定，PPL=10 表示平均纠结于约 10 个等概率选项。困惑度越低，模型对语言的建模越好。但要特别注意：**PPL 依赖于分词方式**——词表与切分粒度不同的两个模型，其困惑度不可直接比较（这正是跨模型评测常改用 bits-per-byte 等与分词无关指标的原因）。

## 6.1.2 SGD 的局限

随机梯度下降（SGD）是最基本的优化算法：$$\theta \leftarrow \theta - \eta \nabla\_\theta \mathcal{L}$$。但对于 Transformer 而言，SGD 有几个问题：

**损失地形复杂**：深度 Transformer 的损失函数包含大量鞍点和狭窄山谷，SGD 的固定学习率难以同时在不同方向上取得合适的步长。

**梯度噪声大**：大规模训练中使用的小批量梯度本身带有较大的噪声，SGD 直接使用这些嘈杂梯度容易导致训练不稳定。

## 6.1.3 Adam 优化器：自适应学习率

**Adam**（Adaptive Moment Estimation，Kingma & Ba，2015）通过维护梯度的一阶矩（均值）和二阶矩（未中心化方差）的指数移动平均来解决上述问题：

$$m\_t = \beta\_1 m\_{t-1} + (1 - \beta\_1) g\_t \quad \text{（一阶矩估计）}$$ $$v\_t = \beta\_2 v\_{t-1} + (1 - \beta\_2) g\_t^2 \quad \text{（二阶矩估计）}$$

由于 $$m\_t$$ 和 $$v\_t$$ 初始化为零，在训练初期会产生有偏估计。为此，Adam 引入了**偏差修正**：

$$\hat{m}\_t = \frac{m\_t}{1 - \beta\_1^t} \quad \text{（修正一阶矩）}$$ $$\hat{v}\_t = \frac{v\_t}{1 - \beta\_2^t} \quad \text{（修正二阶矩）}$$

参数更新规则为：

$$\theta\_t = \theta\_{t-1} - \eta \frac{\hat{m}\_t}{\sqrt{\hat{v}\_t} + \epsilon}$$

这里 $$t$$ 是时间步数（从 1 开始），$$\eta$$ 是学习率，$$\epsilon$$ 是数值稳定性项（通常取 $$10^{-8}$$）。

Adam 的核心优势是**每个参数有独立的自适应学习率**：梯度幅度大的参数（$$v\_t$$ 大）自动获得较小的学习率，梯度幅度小的参数获得较大的学习率。这使得 Adam 在处理稀疏梯度和损失地形复杂的情况时特别有效。

直觉上，二阶矩 $$v\_t$$ 衡量的是各参数梯度平方的历史尺度。梯度幅度长期较大的参数会被 $$1/\sqrt{v\_t}$$ 更强地缩放，避免某些坐标方向更新过猛；梯度幅度较小的参数则保留相对更大的有效步长。方向是否稳定更准确地体现在 $$\hat{m}\_t / \sqrt{\hat{v}\_t}$$ 的信噪比中，而不是由 $$v\_t$$ 单独判断。

原始 Transformer 使用了 $$\beta\_1 = 0.9$$、$$\beta\_2 = 0.98$$、$$\epsilon = 10^{-9}$$——这组参数后来成为了 Transformer 训练的经典配置。

## 6.1.4 AdamW：权重衰减的修正

在实践中，更常用的是 **AdamW**（Loshchilov & Hutter，2019）——它修正了 Adam 中权重衰减（L2 正则化）的实现方式。

**问题根源**：在原始 Adam 中，L2 正则化通过在损失函数中加入 $$\frac{\lambda}{2}|\theta|^2$$ 项实现，其梯度为 $$\lambda\theta$$。但由于 Adam 自适应学习率的存在，不同参数受到的实际正则化强度不同。具体地，Adam 对梯度进行了幅度缩放，这导致 L2 正则化的有效强度与参数的梯度历史有关，而非恒定：

$$\text{原始Adam的权重衰减} = \eta \frac{\lambda \theta}{\sqrt{v\_t} + \epsilon}$$

**AdamW 的改进**：AdamW 将权重衰减与梯度更新**完全解耦**，对每个参数直接施加固定比例的衰减：

$$\theta\_t = \theta\_{t-1} - \eta \frac{\hat{m}\_t}{\sqrt{\hat{v}*t} + \epsilon} - \eta \lambda \theta*{t-1}$$

第二项是与优化器状态无关的直接衰减。这种方式下，权重衰减强度对所有参数统一，与其梯度波动无关。实验表明这种修改显著改善了大模型的泛化性能。

AdamW 长期是大模型训练的默认选择（DeepSeek-V3 等前沿模型均采用），此外还有针对大批量训练优化的 LAMB（Layer-wise Adaptive Moments optimizer for Batch training），以及 T5 等模型采用的 Adafactor 等低内存优化器。但自 2024 年底 Muon 提出、并在 2025—2026 年被多个前沿模型采用之后，这个“默认”开始被动摇。

## 6.1.5 Muon：把更新矩阵正交化

Adam 系优化器把每个参数当作独立标量来自适应缩放，完全忽略了权重本身是一个**矩阵**。**Muon**（MomentUm Orthogonalized by Newton-Schulz，Keller Jordan 于 2024 年 12 月提出）正是从这里切入：它只作用于隐藏层的二维参数，先算出常规的 SGD 动量更新，再用 **Newton-Schulz 迭代**对这个更新矩阵做近似正交化（等价于取其 SVD 后只保留 $$U$$ 和 $$V$$、丢掉奇异值），然后才施加到参数上。标量与向量参数、以及输入输出层，仍交给 AdamW——这是 Muon 原始设计就明确的分工。

**为什么正交化会更快？** 这正是本节“为什么选择 Adam”要追问的层次。一项曲率视角的分析（[Why Muon Outperforms Adam: A Curvature Perspective](https://arxiv.org/abs/2606.04662)，2026 年 6 月）对训练曲面做二阶泰勒展开后发现：在相同验证损失下，Muon 与 Adam 的**一阶收益相当、更新范数也相当**，差别出在二阶的曲率惩罚项——把该惩罚拆成“更新范数平方”与“归一化方向锐度”（Normalized Directional Sharpness，NDS）两部分后，Muon 的优势**主要来自更低的 NDS**，而不是更新幅度。换句话说，正交化的作用更像是让更新避开高曲率方向，而非走得更远。

工程上 Muon 已经落地：它被集成进 NVIDIA Megatron Core，并已在多个前沿模型的训练中使用——

* **Moonlight**（[Muon is Scalable for LLM Training](https://arxiv.org/abs/2502.16982)）：3B/16B MoE、5.7T 词元，论文报告在计算最优设置下取得约 AdamW 两倍的计算效率（该倍数为特定设置下的结论，不宜外推为通用常数）
* **Kimi K2**：1T 总参数 / 32B 激活、15.5T 词元训练无损失尖峰，使用的是 Muon 的变体 **MuonClip**（在 Muon 基础上增加 QK-clip 以抑制训练不稳定）
* **Kimi K3**：延续 K2 用 Muon 优化矩阵参数，并对注意力投影再细化出 **Per-Head Muon**——不对完整的 Q/K/V 投影矩阵做 Newton-Schulz 正交化，而是把动量矩阵按头维切开、逐头分别正交化。其理由是：整矩阵正交化把所有头当成一个耦合块，梯度或动量尺度较大的头会主导共享的更新方向，尺度较小的头则得不到充分归一化；逐头正交化使各头的更新尺度对齐，在更大规模上训练更稳，且因为在瘦长的逐头块上做 Newton-Schulz 比在整个投影矩阵上更便宜，优化器开销还略有下降（[arXiv:2607.24653](https://arxiv.org/abs/2607.24653)）。注意该报告的口径是 **Muon**，并未沿用 K2 的 MuonClip 命名
* **DeepSeek-V4**：对**大部分模块**使用 Muon，而嵌入层、预测头、mHC 的静态偏置与门控因子、以及所有 RMSNorm 权重仍保留 AdamW

需要注意两点分寸：一是各家的“Muon”往往是变体而非原版（Kimi K2 是 MuonClip），引用时应以模型方自己的论文口径为准；二是 Muon 的收益体现在**收敛速度与稳定性**上，而非单步吞吐——NVIDIA 在 GB300 上的实测表明其训练吞吐与 AdamW 大致持平，官方措辞是“很小的训练性能损失”（只计模型自身的浮点运算时 Muon 略低于 AdamW；若把 Newton-Schulz 迭代的额外浮点运算也计入总值，则反而略高）。
