模型训练技巧
让模型训练更快、更稳、更好的实用技巧。
学习率调度(Learning Rate Scheduling)
常见策略
- Step Decay:每 N 个 epoch 乘以 γ
- Cosine Annealing:余弦周期衰减,配合 Warm Restart
- ReduceLROnPlateau:验证损失不再下降时减小 LR
- Linear Warmup:训练初期线性增加 LR,避免早期不稳定
- One Cycle Policy:先升后降
学习率与收敛
- 学习率大:收敛快但可能震荡
- 学习率小:收敛慢但稳定
- 最佳学习率范围:LR Range Test 确定
归一化技术
Batch Normalization(BN)
- 对每个 mini-batch 的每个通道做归一化
- 训练时:μ 和 σ 由当前 batch 计算
- 推理时:使用全局移动平均 μ 和 σ
- 优点:加速收敛、缓解梯度消失、正则化效果
Layer Normalization(LN)
- 对每个样本的所有特征做归一化
- Transformer 中使用,不依赖 batch size
其他归一化
- Instance Normalization(图像风格迁移)
- Group Normalization(小 batch size)
正则化技术
Dropout
- 训练时随机丢弃神经元,防止过拟合
- 推理时保留所有神经元,权重乘以 keep_prob
- 常用 p=0.5(全连接层)/ p=0.1(Transformer FFN)
Weight Decay(L2 正则化)
- 损失函数 + λ∑w²
- 等价于带衰减的 SGD 更新
- AdamW:将 weight decay 与学习率解耦
Label Smoothing
- 将 one-hot 标签替换为 soft 标签
- 提高泛化性,减少过拟合
Early Stopping
- 验证损失不改善时停止训练
梯度裁剪(Gradient Clipping)
- 解决梯度爆炸问题
- L2 范数裁剪:g ← g × (max_norm / ||g||₂)
- PyTorch:torch.nn.utils.clip_grad_norm_
混合精度训练(Mixed Precision Training)
- FP16 + FP32 混合
- 好处:显存减半、计算加速(Volta/Turing GPU Tensor Core)
- PyTorch AMP:torch.cuda.amp.autocast + GradScaler
- 损失缩放(Loss Scaling)防止梯度下溢
Warmup 策略
- 线性 Warmup + 余弦退火
- 稳定训练初期的大梯度
梯度积累(Gradient Accumulation)
- 模拟更大的 batch size
- 多个小 batch 的梯度累加后更新
参数初始化技巧
- Xavier/Glorot(Sigmoid/Tanh)
- He/Kaiming(ReLU)
- 零均值、小方差随机初始化
数据增强
- 图像:随机翻转/旋转/裁剪/颜色抖动
- 文本:回译、随机删除/替换
- 混合增强:Mixup、CutMix
总结
- 学习率调度 + 正则化 + 混合精度 = 训练三件套