训练中常常遇到这样两类问题:
1.训练损失降不下去。
2.训练损失很低,测试表现却不好。
这对应了两个不同的概念。前者涉及数值尺度或优化困难,后者则可能过拟合。归一化和正则化就分别与这两个问题有关。
1. 两个概念分别在做什么
给定训练集 $\mathcal D=\{(x_i,y_i)\}_{i=1}^{n}$,普通经验风险最小化为
$$\min_\theta\frac1n\sum_{i=1}^{n}\ell(f_\theta(x_i),y_i)$$
如果只要求训练误差小,模型可能连样本中的噪声也拟合进去。我们可以额外表达一种偏好,例如在拟合同样好时倾向于较小的权重。把这种偏好写成惩罚项,就得到
$$\min_\theta\frac1n\sum_{i=1}^{n}\ell(f_\theta(x_i),y_i)+\lambda\Omega(\theta)$$
$\Omega(\theta)$ 是惩罚项,$\lambda$ 控制约束强度。归一化则常把输入或激活变换为
$$\hat x=\frac{x-\mu}{\sqrt{\sigma^2+\varepsilon}},$$
这里的 $\mu$、$\sigma^2$ 是所选维度上的均值与方差,$\varepsilon$ 用于避免分母为零。这一步改变了后续计算看到的尺度,通常没有直接加入参数复杂度的惩罚。我们仍要看具体方法作用在哪儿,不能仅凭名称判断。
| 对比项 | 正则化 | 归一化 |
|---|---|---|
| 主要目的 | 减少过拟合,改善泛化 | 稳定数值尺度,改善优化 |
| 常见位置 | 损失、参数、结构或训练过程 | 输入、激活、权重或概率 |
| 常见方法 | L1、L2、Weight Decay、Dropout、早停 | 标准化、BatchNorm、LayerNorm、RMSNorm |
| 推理阶段 | 多数惩罚项不再显式计算 | 归一化层通常仍参与前向计算 |
2. L2 与 Weight Decay
L2 正则化在损失中加入参数平方和:
$$\mathcal L_{L2}=\mathcal L_{data}+\frac{\lambda}{2}\lVert w\rVert_2^2$$
对惩罚项求导会多出 $\lambda w$。我们将它代入不带动量的普通 SGD,并把含 $w_t$ 的项合并,得到
$$w_{t+1}=(1-\eta\lambda)w_t-\eta\nabla_w\mathcal L_{data}$$
这里 $\eta$ 是学习率。只看正则项的作用,权重每次都会乘以 $1-\eta\lambda$,这正是乘法式的 Weight Decay。因此在普通 SGD 下,我们可以把这两种写法对应起来。L2 会抑制较大的权重,但并不普遍保证某个参数恰好变成零。
如果换成 Adam,上面的合并就不再成立了:$\lambda w$ 会和数据梯度一起进入一阶、二阶矩估计,再受到自适应缩放。我们若仍希望执行独立的乘法衰减,就需要把它移到自适应更新之外,这便是 AdamW 的做法:
$$w_{t+1}=(1-\eta\lambda)w_t- \eta\frac{\hat m_t}{\sqrt{\hat v_t}+\varepsilon}$$
现代 Transformer 训练通常使用 AdamW,并对偏置和归一化层的缩放参数关闭 Weight Decay。
3. L1 与稀疏性
L1 正则化使用绝对值之和:
$$\mathcal L_{L1}=\mathcal L_{data}+\lambda\lVert w\rVert_1$$
在非零点,绝对值的导数只取决于正负,惩罚产生的拉力不会随参数变小而减弱。这提供了稀疏性的直觉,但普通梯度步可能跨过零,未必恰好停在零。我们用近端梯度的软阈值更新来看,会更明确:
$$w_j\leftarrow\operatorname{sign}(z_j) \max(|z_j|-\eta\lambda,0)$$
其中 $z_j$ 表示先沿数据损失梯度更新后得到的值。若它的绝对值不超过 $\eta\lambda$,上式会直接输出零;较大的值则向零收缩。这才具体说明了 L1 为什么能用于稀疏建模和特征选择。
4. Dropout、早停与数据增强
正则化也不一定要写成参数惩罚。我们可以在训练时随机丢弃一部分激活,让网络不能总依靠固定的一组特征。设丢弃率为 $p$,掩码 $m_i\sim\operatorname{Bernoulli}(1-p)$,inverted dropout 写成
$$\tilde h_i=\frac{m_i}{1-p}h_i,$$
保留时为什么要除以 $1-p$?因为 $\mathbb E[m_i]=1-p$,这样恰好使 $\mathbb E[\tilde h_i]=h_i$,推理时可以关闭 Dropout 而不用再缩放激活。这里保持的是该层激活的期望,并不意味着整个非线性网络的输出期望完全相同。丢弃比例太大也会妨碍拟合,所以它的强度仍需要验证。
早停根据验证集指标选择训练终点。当训练损失继续下降而验证损失开始上升,模型通常正在进一步贴合训练集。数据增强则扩大有效样本空间,但增强后的样本必须保持标签语义。图像裁剪和翻转较容易判断,文本改写则更容易悄悄改变原意。
5. 输入标准化
再看归一化。假设一个特征以米计量,另一个以毫米计量,我们直接计算欧氏距离,后者很可能仅凭单位就占主导。Min-Max 归一化先把训练数据中的特征映射到固定区间:
$$x'=\frac{x-x_{min}}{x_{max}-x_{min}}$$
Z-score 标准化使特征均值约为 $0$、方差约为 $1$:
$$x'=\frac{x-\mu}{\sigma}$$
训练集统计得到的 $\mu$、$\sigma$、$x_{min}$ 和 $x_{max}$ 必须原样用于验证集和测试集。若分别使用测试集统计量,会造成数据泄漏。
特征尺度差异较大时,欧氏距离、KNN、K-Means、线性模型和梯度优化都会受到影响。树模型按阈值划分单个特征,通常对不同特征之间的尺度差异不敏感。
6. BatchNorm
输入可以标准化,中间激活也可以;接下来的区别在于,我们用哪些元素计算统计量。对全连接层的某一个特征,BatchNorm 沿 mini-batch 中的 $m$ 个样本计算
$$\mu_B=\frac1m\sum_{i=1}^{m}x_i,\qquad \sigma_B^2=\frac1m\sum_{i=1}^{m}(x_i-\mu_B)^2,$$
$$y_i=\gamma\frac{x_i-\mu_B}{\sqrt{\sigma_B^2+\varepsilon}}+\beta$$
$\gamma$ 和 $\beta$ 是可学习的缩放与偏移,允许网络重新选择适合后续计算的尺度。用于卷积时,通常还会把同一通道的空间位置纳入统计。由于训练时可以使用 batch,而推理可能只来一个样本,常规实现会维护滑动均值和方差供推理使用。这也解释了为什么 train() 与 eval() 在这里会改变计算方式。
BatchNorm 的输出依赖同一 batch 中的其他样本。batch 太小时,统计量噪声较大;序列长度变化和分布式训练也会增加处理难度。所以它常用于 CNN,在 Transformer 中较少使用。
7. LayerNorm 与 RMSNorm
如果不希望一个样本依赖同批次的其他样本,我们可以把统计范围移到它自己的特征维上。设一个 token 的隐藏向量为 $x\in\mathbb R^d$,LayerNorm 计算
$$\mu=\frac1d\sum_{j=1}^{d}x_j,\qquad \sigma^2=\frac1d\sum_{j=1}^{d}(x_j-\mu)^2,$$
$$\operatorname{LN}(x)=\gamma\odot \frac{x-\mu}{\sqrt{\sigma^2+\varepsilon}}+\beta$$
每个 token 独立归一化,不依赖 batch size,训练和推理的计算方式相同。它稳定了送入注意力和前馈网络的尺度,也降低了深层网络对初始化和学习率的敏感程度。
我们还可以少做一步,不减均值,仅控制向量的整体幅度。RMSNorm 就按均方根缩放:
$$\operatorname{RMSNorm}(x)=\gamma\odot \frac{x}{\sqrt{\frac1d\sum_{j=1}^{d}x_j^2+\varepsilon}}$$
它计算更简单,并保留均值信息。LLaMA 等现代大模型普遍使用 RMSNorm。
8. Pre-Norm 与 Post-Norm
统计维度确定后,归一化放在哪儿还会影响梯度传播。用 $F$ 表示注意力或前馈子层,Post-Norm 先将子层输出与残差相加,再归一化:
$$y=\operatorname{Norm}(x+F(x))$$
原始 Transformer 使用这种结构。网络很深时,梯度需要连续经过归一化层,训练更依赖学习率预热和初始化。
Pre-Norm 先归一化,再把子层结果加回残差:
$$y=x+F(\operatorname{Norm}(x))$$
从这个式子求导,我们会在 $\partial y/\partial x$ 中得到一项恒等矩阵 $I$。它来自直接保留的 $x$,不必经过子层或归一化,因此为深层训练提供了一条直接的梯度路径。这解释了 Pre-Norm 为什么通常较容易优化,但不保证它在所有设置下都更好。残差流幅度仍可能随深度增加,一些模型会进一步使用残差缩放或末端归一化。
9. 怎样选择
面对训练问题,我们可以先回到开头的区分:连训练数据都拟合不好,应检查优化、容量和数据;训练表现很好却不能泛化,再考虑正则强度和数据增强。归一化可以改善计算条件,但不能替我们判断过拟合,也不能自动修复错误标签。两类方法经常一起出现,是因为实际训练可能同时遇到这两类困难。
传统表格数据常从输入标准化和 L1、L2 开始;CNN 大 batch 常用 BatchNorm,小 batch 可考虑 GroupNorm;Transformer 通常使用 Pre-LayerNorm 或 Pre-RMSNorm,并由 AdamW 提供解耦的权重衰减。