Normalization
Normalization
在深度学习中,Normalization(规范化)指的是在DL模型训练过程中,通过动态调整和重塑(如调整均值和方差)层激活值的分布,来稳定训练、加速收敛并提高模型性能的技术。
Batch Normalization
Ioffe & Szegedy, "Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift", ICML 2015.
Batch Normalization(BN)由 Ioffe 和 Szegedy 在2015年提出,是深度学习中最重要的技术突破之一。
算法步骤: 对于一个 mini-batch \(\mathcal{B} = \{x_1, x_2, \ldots, x_m\}\),BN 对每个特征维度执行以下操作:
- 计算 mini-batch 的均值:\(\mu_\mathcal{B} = \frac{1}{m}\sum_{i=1}^{m} x_i\)
- 计算 mini-batch 的方差:\(\sigma_\mathcal{B}^2 = \frac{1}{m}\sum_{i=1}^{m}(x_i - \mu_\mathcal{B})^2\)
- 标准化:\(\hat{x}_i = \frac{x_i - \mu_\mathcal{B}}{\sqrt{\sigma_\mathcal{B}^2 + \epsilon}}\)
- 仿射变换(Scale and Shift):\(y_i = \gamma \hat{x}_i + \beta\)
其中 \(\gamma\)(缩放)和 \(\beta\)(偏移)是可学习参数。如果没有第4步,BN 会强制将所有激活值固定在标准正态分布,这可能破坏网络的表达能力。通过可学习的 \(\gamma\) 和 \(\beta\),网络可以在需要时"还原"原始分布。
训练模式 vs 推理模式:
- 训练时: 使用当前 mini-batch 的均值和方差进行标准化,同时用指数移动平均(EMA)持续跟踪全局的均值和方差
- 推理时: 不再使用 batch 统计量(因为推理时可能只有一个样本),而是使用训练期间累积的全局均值和方差(即 running mean 和 running var)
这就是为什么在 PyTorch 中需要调用 model.train() 和 model.eval() 来切换模式。
为什么有效:
- 缓解 Internal Covariate Shift: 训练过程中,每一层的输入分布会因为前面层的参数更新而不断变化。BN 通过标准化将每层输入稳定在固定的分布范围内,使得每一层可以独立地进行学习
- 平滑优化landscape: Santurkar et al. (NeurIPS 2018) "How Does Batch Normalization Help Optimization?" 提出了一个重要观点:BN 的主要好处并非来自减少 Internal Covariate Shift,而是通过使损失函数的优化landscape更加平滑(loss Lipschitzness 和 gradient Lipschitzness 得到改善)。具体而言,BN 使得损失函数的梯度变化更加平缓(\(\beta\)-smoothness 更小),从而允许使用更大的学习率而不会导致发散
- 允许更大的学习率: 由于激活值的分布被控制,梯度不容易出现爆炸或消失,因此可以使用更大的学习率来加速训练
- 自带正则化效果: 每个 mini-batch 的均值和方差都有随机性(取决于 batch 中采到了哪些样本),这相当于给网络引入了噪声,起到类似 Dropout 的正则化作用。实验表明,增大 batch size 会降低这种噪声的正则化效果
BN 的缩放不变性与梯度界:
BN 对权重具有缩放不变性(scale invariance):对于任意常数 \(\alpha > 0\),\(\text{BN}(\alpha \mathbf{W}\mathbf{x}) = \text{BN}(\mathbf{W}\mathbf{x})\),因为标准化操作会消除缩放因子。这个性质带来一个重要推论:
即权重越大,梯度越小;权重越小,梯度越大。这提供了一种自动的梯度调节机制,可以有效防止梯度爆炸,使训练更加稳定。
BN 的位置选择:
BN 可以放在激活函数之前或之后:
- 激活前(原始论文):\(\text{BN}(\mathbf{Wx} + \mathbf{b}) \to f(\cdot)\),BN 在线性变换后、激活前应用。此时偏置 \(\mathbf{b}\) 可以省略(因为 BN 的 \(\beta\) 参数已承担偏移功能)
- 激活后:\(f(\mathbf{Wx} + \mathbf{b}) \to \text{BN}(\cdot)\),某些实践中发现效果也很好
在现代实践中,两种位置都有使用,没有统一的最优选择。
局限性: BN 依赖 batch 的统计量,因此在 batch size 很小(如 1 或 2)时统计量不准确,效果会显著下降。此外,BN 不适合序列长度不一的 RNN/Transformer,因为不同位置的分布可能差异很大。
Layer Normalization
Ba et al., "Layer Normalization", 2016.
Layer Normalization(LN)由 Jimmy Lei Ba 等人在2016年提出,是对 BN 的一种替代方案。
公式: 对于单个样本的所有特征维度进行标准化:
其中 \(H\) 是一个样本中特征的总数(即对一个样本的所有隐藏维度求均值和方差),同样有可学习参数 \(\gamma\) 和 \(\beta\) 进行仿射变换。
与 BN 的关键区别: BN 是跨样本(沿 batch 维度)对同一个特征维度做标准化;LN 是在单个样本内部(沿特征维度)做标准化。这意味着 LN 的计算完全不依赖 batch 中的其他样本。
为什么在 Transformer/RNN 中更受青睐:
- 无 batch 依赖: LN 对每个样本独立计算,不需要 batch 统计量。这在 batch size 为 1 或序列长度不一致时依然有效
- 适合变长序列: RNN 和 Transformer 处理的序列长度不同,BN 在不同时间步上的统计量不一致且不稳定;LN 对每个时间步独立标准化,不存在这个问题
- 推理时行为一致: 训练和推理时的计算方式完全相同,不需要维护 running statistics
在 Transformer 中,LN 通常应用在每个子层(Self-Attention 和 FFN)的输入或输出处。
Instance Normalization
Ulyanov et al., "Instance Normalization: The Missing Ingredient for Fast Stylization", 2016.
Instance Normalization(IN)由 Ulyanov 等人在2016年提出,最初是为了解决风格迁移(Style Transfer)中的问题。
公式: 对于一个形状为 \((N, C, H, W)\) 的特征图,IN 对每个样本的每个通道独立进行标准化:
其中 \(\mu_{nc}\) 和 \(\sigma_{nc}^2\) 是在空间维度 \((H, W)\) 上计算的均值和方差。
为什么适合风格迁移: 在风格迁移任务中,图像的"风格"主要体现在特征图各通道的均值和方差中。IN 通过对每个通道独立标准化,有效地移除了原始图像的风格信息,使得网络可以更容易地将新的风格"注入"到内容图像中。
Group Normalization
Wu & He, "Group Normalization", ECCV 2018.
Group Normalization(GN)由 Yuxin Wu 和 Kaiming He 在2018年提出,是 BN 和 LN 之间的一种折中方案。
核心思想: 将通道(Channel)分成若干组(Group),在每组内对空间维度和组内通道维度做标准化。
公式: 将 \(C\) 个通道分成 \(G\) 组,每组 \(C/G\) 个通道。对每组内的所有元素计算均值和方差进行标准化。
与其他方法的关系:
- 当 \(G = 1\)(所有通道为一组)时,GN 等价于 LN
- 当 \(G = C\)(每个通道单独一组)时,GN 等价于 IN
- GN 是 LN 和 IN 的广义形式
优势: GN 不依赖 batch size,在小 batch(甚至 batch=1)场景下依然表现稳定。这在目标检测、语义分割等任务中特别有用,因为这些任务的输入图像较大,GPU 显存限制下 batch size 往往只能设为 1-2。典型的组数设置为 \(G = 32\)。
Normalization 方法对比
| 方法 | 标准化维度 | 是否依赖 Batch | 典型应用场景 |
|---|---|---|---|
| Batch Norm (BN) | 沿 batch 维度,对每个特征/通道 | 是 | CNN 分类(ResNet, VGG 等) |
| Layer Norm (LN) | 沿特征维度,对单个样本的所有特征 | 否 | Transformer, RNN |
| Instance Norm (IN) | 沿空间维度,对单个样本的单个通道 | 否 | 风格迁移, GAN |
| Group Norm (GN) | 沿空间+组内通道维度 | 否 | 目标检测, 小 batch 场景 |
对于形状为 \((N, C, H, W)\) 的 4D 特征图:
- BN 在 \((N, H, W)\) 上计算统计量,对每个 \(C\) 独立
- LN 在 \((C, H, W)\) 上计算统计量,对每个 \(N\) 独立
- IN 在 \((H, W)\) 上计算统计量,对每个 \((N, C)\) 独立
- GN 在 \((C/G, H, W)\) 上计算统计量,对每个 \((N, G)\) 独立
选择建议:
- CNN + 大 batch: 优先使用 BN
- Transformer / RNN: 使用 LN
- 风格迁移 / 图像生成: 使用 IN
- CNN + 小 batch(检测/分割): 使用 GN
RMSNorm (Root Mean Square Normalization)
Zhang & Sennrich, "Root Mean Square Layer Normalization", NeurIPS 2019.
RMSNorm 是 Layer Normalization 的简化版本。它去掉了 LN 中的均值中心化步骤,只做方差归一化:
注意 RMSNorm 没有 \(\beta\)(偏移参数),只有 \(\gamma\)(缩放参数)。
与 LN 的对比: LN 计算均值 \(\mu\) 和方差 \(\sigma^2\) 两个统计量,而 RMSNorm 只计算均方根(RMS)一个统计量。可以将 RMSNorm 理解为"假设均值为零的 Layer Norm"。
为什么有效: 研究表明 Layer Normalization 的效果主要来自缩放不变性(scale invariance),而非均值中心化(re-centering)。RMSNorm 去掉了不必要的均值计算,在保持效果的同时减少了约 10-15% 的计算开销。
应用: RMSNorm 被 LLaMA、LLaMA-2、LLaMA-3、Qwen、Mistral 等主流开源大语言模型采用,已成为大模型的事实标准。
Weight Normalization
Salimans & Kingma, "Weight Normalization: A Simple Reparameterization to Accelerate Training of Deep Neural Networks", NeurIPS 2016.
Weight Normalization 是一种不同于 BN/LN 的归一化思路:它不作用于激活值,而是作用于权重本身。具体做法是将权重向量 \(\mathbf{w}\) 分解为方向和大小两个部分:
其中 \(g\) 是一个可学习的标量(控制权重的大小/范数),\(\mathbf{v}\) 是一个可学习的向量(控制权重的方向),\(\|\mathbf{v}\|\) 是 \(\mathbf{v}\) 的欧几里得范数。
与 BN 的区别:
- BN 对激活值做标准化,依赖 mini-batch 统计量
- Weight Norm 对权重做重参数化,不依赖 batch,计算开销更低
- Weight Norm 没有 BN 的正则化效果(因为没有 batch 噪声)
优势: 计算开销小,不依赖 batch size,适合 RNN 和生成模型(如 WaveNet)。但在大多数现代架构中,BN 或 LN 的效果通常更好。
Extended Batch Normalization
Luo et al., "Towards Understanding Regularization in Batch Normalization", ICLR 2019.
Extended BN(扩展批归一化)研究了 BN 正则化效果的理论基础。标准 BN 使用 mini-batch 的均值和方差来估计总体统计量,这种估计本身引入了噪声。Extended BN 将这种噪声效应形式化,指出 BN 的正则化强度与 batch size 成反比——batch 越小,噪声越大,正则化越强。
这一分析解释了为什么大 batch 训练时模型的泛化性能往往下降,也为调节 BN 的正则化强度提供了理论依据。
Pre-Norm vs Post-Norm
在 Transformer 中,Normalization 层相对于残差连接的位置有两种选择:
Post-Norm(原始 Transformer):
先做残差加法,再做 Normalization。原始 Transformer(Vaswani et al., 2017)使用的就是这种方式。
Pre-Norm:
先做 Normalization,再进入子层,最后做残差加法。
对比:
| 维度 | Post-Norm | Pre-Norm |
|---|---|---|
| 训练稳定性 | 较差,深层时需要 Warmup | 好,不需要 Warmup 也能训练 |
| 最终性能 | 通常略好(如果能稳定训练) | 通常略低于 Post-Norm |
| 学习率敏感性 | 高 | 低 |
| 主要应用 | BERT、原始 Transformer | GPT 系列、LLaMA、大多数 LLM |
为什么 Pre-Norm 更稳定: 在 Pre-Norm 中,残差连接直接从输入到输出,不经过 Normalization 层的"压缩"。这使得梯度可以通过残差路径无阻碍地流动,类似于 ResNet 中的 identity shortcut。而 Post-Norm 中,梯度必须经过 Normalization 层,在深层网络中可能导致梯度消失。
DeepNet:让 Post-Norm 也能稳定训练
Wang et al., "DeepNet: Scaling Transformers to 1,000 Layers", 2022.
Post-Norm 虽然最终性能略好,但训练不稳定。DeepNet 通过对残差分支引入缩放因子 \(\alpha\) 和特殊的初始化策略,使得 Post-Norm Transformer 可以稳定地训练到 1000 层以上:
其中 \(\alpha > 1\) 是一个与层数相关的常数,用于放大残差连接的贡献,同时对子层权重使用更小的初始化。
残差连接与归一化的交互:
在深层网络中,残差连接(\(x + f(x)\))和归一化层的配合至关重要。Pre-Norm 结构中,残差路径上没有归一化层的"压缩",梯度可以通过 identity shortcut 直接流动,类似于 ResNet 的设计哲学。而 Post-Norm 中,每一层的输出都经过归一化的"重新缩放",虽然有助于控制激活值的分布,但在极深网络中可能阻碍梯度传播。
Xiong et al., "On Layer Normalization in the Transformer Architecture", ICML 2020 对 Pre-LN 和 Post-LN 的理论分析表明,Pre-LN 的梯度在初始化时是良好定义的(well-behaved),而 Post-LN 在没有 warmup 的情况下梯度可能发散。
当前趋势: 大多数现代大语言模型(GPT-3、LLaMA、Mistral 等)都采用 Pre-RMSNorm 的配置(Pre-Norm + RMSNorm),因为训练稳定性在大规模预训练中至关重要。
VGG案例
在2015年Batch Normalization论文发表前,VGG训练的效果并不是特别好,只能达到70%左右,但是加上Batch Normalization后,初始VGG在CIFAR-10数据集的表现上可以轻松突破85%。(可以参考PyTorch搭建模型的笔记)这里注意,在这个任务中,添加Batch Normalization后需要去掉Dropout。BatchNorm 本身就自带一定的正则化(防过拟合)效果。如果网络里既有强大的 BatchNorm,又在末尾加上高达 0.5 的 Dropout,有时会导致“方差偏移(Variance Shift)”问题,反而拖慢模型的收敛速度,甚至降低最终准确率。此外,CIFAR-10 的图片只有 32x32 大小,本身提取出来的有用特征就比 224x224 的大图片少很多。在最后一层直接丢弃 50% 的特征,有可能会导致模型在分类时“信息不足”。
Transformer on French-English
本实验主要用来探讨不同的Normalization and Regularization如何影响实验结果:
- Normalization determines how the model's activations are scaled and shifted during training, which directly affect the shape of the layer input/output distributions (mean and variance) and can greatly influence whether the model will converge, the convergence speed, and the stability of learning.
- Regularization methods help prevent overfitting and improve generalization ability by controlling model complexity and constraining parameter updates. They can prevent units from co-adapting or penalize large weights, leading to smoother functions that are less sensitive to input variations and therefore achieve better generalization on unseen test data.
简单来说就是:
- Normalization通过调整模型内部激活值的分布(即均值和方差),来帮助模型更快、更稳定地收敛。
- Regularization则是一项防止过拟合、提升泛化能力的技术;它通过控制模型的复杂度(比如惩罚过大的权重),使模型不过度依赖训练数据的细节,从而在未见过的测试数据上表现更好。
更加简单来说,就是:
- Normalization让model学得动、学得快
- Regularization让model学得好、考得好
IWSLT2017 Dataset
IWSLT2017是一个非常经典且大小适中的机器翻译数据集:
- 来源:TED演讲的转录稿和翻译
- Training Set: 210,000 sentence pairs
- Validation Set: 890 pairs
- Testing Set: 8,000 pairs
每一个sample都包含一个source sentence in French and its corresponding target translation in English.
Transformer Model
具体的网络架构可以参见DNN笔记。简单复习一下就是:
- Transformer不依赖于传统的RNN的序列处理机制,可以高效捕捉长距离依赖,并且可以并行训练
- Multi-head Attention Mechanism 多头(就是多角度的意思)注意力机制可以让model在处理一个词的时候,能够关注到句子中其他所有相关的词
- Position-wise Feed-Forward Networks, FFNs会对每一个词独立加工,换句话说,句子中的每一个词都是单独而独立处理的
- Transformer在把词的含义向量(Embedding)喂给model之前,会给它先加上一个位置向量(Positional Encoding)
Transformer中两个核心的组件:
- Encoder 编码器:处理source sentence,在我们的项目中就是法语;编码器会生成一系列contextual representations(上下文表示),实现“理解”。
- Decoder 解码器:接收目标语言句子,在我们的项目中就是英语;解码器的目标是学会生成,简单来说,就是通过看着解码器的理解来逐词生成对应的英语句子。
那我们来看一下在翻译任务上,Transformer是如何工作的:首先,在训练过程中,encoder先看到所有的法语,理解法语关系;然后decoder看着所有的法语关系,然后一个英语单词一个英语单词地看,每一次都要对着所有法语关系和训练集中强制性喂过来的下一个词进行关联记忆,记住法语关系和decoder已经知道的词语+decoder应该输出的下一个词之间的预测关系。
换句话说,在训练过程中:
- INPUT:Context,即[法语理解] + [正确的英语开头,比如"The cat"]
- TARGET:让模型“猜”中[下一个词"is"]。这里是强制让模型学习的。
训练结束后,model看到一段法语后,就能不断猜出下一个对应的英语单词,然后不断地对着这段法语和已经猜出的英语单词,继续猜测下一个单词,直到所有的单词都被猜测完毕。这个像滚雪球一样的过程就是自回归(Autoregressive)。
Baseline Model
在最初的 Transformer 配置中,dropout (0.1) 在“Add & Norm”步骤之前被应用,使用 Adam 优化器,并且没有额外的正则化方法。该模型使用 后置层规范化 (post-layer normalization,在残差连接之后应用),并在最初的 4,000 个更新步骤中执行 学习率预热 (learning rate warm-up)。权重是使用 Xavier 均匀分布 (Xavier Uniform distribution)进行初始化的。在本项目中,我们将以这个 基线模型 (baseline model)为基础,来探索不同正则化和规范化方法所带来的影响。
Dropout 是一种强大的技术,在训练时,它会以 10% 的概率(0.1)随机“丢弃”或“关闭”神经元。这迫使模型不能过度依赖任何一个神经元,而是要学习更鲁棒、更多样化的特征,从而 防止过拟合 。
在本次实验中,我们需要首先复现baseline model,其核心要点包括:
- Normalization: Post-layer Normalization
- Regularization: Dropout 0.1
- Optimizer: Adam
- LR Scheduling: Learning Rate Warm-Up
- Initialization: Xavier Uniform Distribution
成功复现Baseline实验后,我们将探索不同的方法。
BLEU
BLEU (Bilingual Evaluation Understudy) Score 是一种自动评估机器翻译质量的标准指标 ,它通过将模型生成的翻译与一个或多个人工翻译的“标准答案”进行比较,并计算两者之间共有的词组(n-grams)的重叠程度来打分。在您的项目中, BLEU 分数将是衡量模型好坏的最终“成绩单” :一个更高的 BLEU 分数意味着模型的翻译在用词和句子结构上更接近人类的翻译,即 翻译质量更好 。
实验环境设置
硬件配置:
- Memory: 64GB
- GPU: H200 - 140GB
实验完成内容:
- 初步测试实验(在notebook中)
- 正式实验:10个长时实验(epoch=50),总运行时长约40小时