正则化技术
正则化是防止过拟合、提高模型泛化能力的关键技术。本部分介绍深度学习中最重要的正则化方法。
01Dropout
Dropout是最广泛使用的正则化技术之一,通过随机丢弃神经元来防止网络对特定神经元的依赖。
Dropout原理
训练时,每个神经元以概率p被随机"丢弃"(输出置零)。测试时,所有神经元都参与,但输出乘以(1-p)进行缩放。
Dropout公式
训练时:
h = f(Wx + b) · mask, mask ~ Bernoulli(p)
测试时:
h = f(Wx + b) · p
为什么Dropout有效?
- 集成学习:每次训练相当于训练一个子网络,最终是大量子网络的集成
- 减少共适应:防止神经元之间形成强依赖关系
- 隐式正则化:近似于L2正则化的效果
Dropout变体
Standard Dropout
随机丢弃神经元,适用于全连接层和小型网络。
Spatial Dropout (Dropout2D)
丢弃整个通道而非单个神经元,常用于CNN的特征图。
DropBlock
丢弃相邻区域而非单个神经元,更适合CNN的特征结构。
Dropout vs DropPath (Stochastic Depth)
DropPath随机跳过整个层,而不是丢弃神经元。广泛应用于ResNet、Transformer等深层网络。
02Batch Normalization
Batch Normalization通过归一化层的输入来解决Internal Covariate Shift问题,是深度学习最重要的技术创新之一。
BN原理
对每个batch的每个通道,计算均值和方差进行归一化,然后进行仿射变换。
Batch Normalization公式
μB = (1/m) Σxi # batch均值
σ²B = (1/m) Σ(xi - μB)² # batch方差
x̂i = (xi - μB) / √(σ²B + ε) # 归一化
yi = γx̂i + β # 仿射变换(可学习)
BN使用技巧
训练 vs 推理
- 训练时:使用当前batch的均值和方差
- 推理时:使用全局统计的移动平均均值和方差
BN的优点
- 加速收敛,允许使用更大的学习率
- 减少对初始化的敏感性
- 一定的正则化效果
- 缓解Internal Covariate Shift
BN的局限性
- 依赖batch size,batch太小时效果差
- RNN中难以使用(序列长度可变)
- 训练和推理行为不一致
- 对分布式训练不友好
03Layer Normalization
Layer Normalization是Transformer时代最重要的归一化方法,解决了BN在序列模型中的问题。
LN vs BN
| 特性 | Batch Norm | Layer Norm |
|---|---|---|
| 归一化维度 | batch维度 | feature维度 |
| batch依赖 | 强依赖 | 无依赖 |
| 适用场景 | CNN、batch固定 | RNN、Transformer |
| 训练/推理一致性 | 不一致 | 一致 |
Layer Normalization公式
μl = (1/H) Σiali # 层均值
σl = √((1/H) Σi(ali - μl)²) # 层方差
ŷl = γ(al - μl) / σl + β # 归一化+仿射
归一化方法对比
Instance Normalization
对每个样本的每个通道单独归一化。广泛应用于风格迁移等生成任务。
Group Normalization
将通道分成G组,每组内做LayerNorm。解决了小batch时BN效果差的问题。
RMS Norm
只使用均方根进行归一化,去掉了中心化操作。更高效,效果与LN相当。
Llama、Mistral等模型使用。
Transformer中的归一化位置
- Post-LN:归一化在残差连接之后(原始Transformer)
- Pre-LN:归一化在残差连接之前(更稳定,大模型推荐)
- Sandwich-LN:多头注意力前后都归一化