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

## 6.1.1 交叉熵损失

Transformer 训练中最常用的损失函数是**交叉熵损失**（Cross-Entropy Loss）。对于一个分类问题（语言模型的每步预测本质上就是在词汇表中分类），交叉熵衡量的是模型预测分布 $$\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 正则化通过在损失函数中加入 $\lambda |\theta|^2$ 项实现。但由于 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 等低内存优化器。


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://yeasy.gitbook.io/llm_internals/di-er-bu-fen-xun-lian-pian/06_training_techniques/6.1_loss_optimizer.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
