Return
AI相关 深度学习 训练技巧

深度学习 10

这些训练技巧在调整训练过程的节奏、噪声和尺度。

三类技巧

除开前面已经讲过几类训练问题与解决方案,还有一些工程上的技巧。

可以大致分成三类:

  1. 增加随机性:平滑损失空间,鼓励模型探索(Exploration)。
  2. 训练节奏控制:调整学习率和数据分布难度,避免早期震荡。
  3. 尺度约束:控制数据、中间激活值与梯度的数值范围,避免爆炸或消失。

增强随机性

数据洗牌(Shuffling)

如果训练数据按类别连续排列,模型在特定阶段只会计算出单一方向的梯度,导致优化轨迹严重偏离全局最优,甚至陷入局部特化。

随机洗牌确保了每个 mini-batch 的数据分布尽可能接近全局数据集的真实分布,使得梯度的期望方向更加稳定。

Shuffling

梯度噪声(Gradient Noise)

在计算出的真实梯度上,显式叠加一个服从高斯分布的噪声:

g=g+N(0,σt2)g' = g + \mathcal{N}(0, \sigma_t^2)

公式拆解:

  • gg:当前 mini-batch 计算得出的原始梯度。
  • σt2\sigma_t^2:随时间步 tt 衰减的噪声方差。通常采用 σt2=η(1+t)γ\sigma_t^2 = \frac{\eta}{(1+t)^\gamma} 的退火策略。

核心逻辑:深度神经网络的损失(Loss)空间极度非凸,充满局部最优和鞍点(Saddle Point)。叠加高斯噪声等价于对损失空间进行平滑化,使得优化器在陷入平缓区域时,仍能获得足够的动量跳出局部陷阱。随着训练深入,模型逼近收敛,噪声方差逐渐归零。


训练节奏控制

学习率预热(Warmup)

训练初期,网络权重处于随机初始化状态,且优化器(如 Adam)的动量统计量尚未建立。如果直接使用较大的初始学习率,会产生剧烈的梯度更新,瞬间破坏网络参数分布。

Warmup 的操作非常简单:在前 NN 个 epoch 或 step 中,将学习率从一个极小值(或 00)线性递增至预设的基准学习率。这给了优化器收集稳定一阶/二阶动量的缓冲期。

Warmup

课程学习(Curriculum Learning)

调整数据的输入难度。

训练初期使用特征清晰、背景干净的“简单样本”,帮助模型快速确立基础决策边界;随着训练推进,逐渐混入遮挡、噪声严重、边缘模糊的“困难样本”。这种自适应的数据喂入策略能显著提升模型的最终鲁棒性。

微调(Fine-tuning)

相比从零初始化(Train from scratch),拿一个在大规模泛化数据集上预训练过的权重作为起点,收敛速度更快,且不易在小数据集上过拟合。

核心痛点是灾难性遗忘(Catastrophic Forgetting)。为了保护预训练模型中已有的高质量底层特征,微调通常需要搭配极其微小的学习率,或者直接冻结(Freeze)浅层网络,只更新顶层分类器。


归一化(Normalization)

网络变深带来的致命问题是:内部协变量偏移(Internal Covariate Shift)。 第一层参数微小的更新会被层层放大,导致高层网络每次都在面对剧烈变化的输入分布。归一化的目标是将中间激活的分布强制拉回稳定尺度。

批归一化(BatchNorm)

将维度粗略想成一张表:行是样本,列是特征。BatchNorm 是按列归一化

对第 jj 个特征,拿当前 mini-batch 中所有 mm 个样本进行统计:

μj=1mi=1mxij\mu_j = \frac{1}{m}\sum_{i=1}^{m} x_{ij} σj2=1mi=1m(xijμj)2\sigma_j^2 = \frac{1}{m}\sum_{i=1}^{m}(x_{ij}-\mu_j)^2

拉回标准正态分布:

x^ij=xijμjσj2+ϵ\hat{x}_{ij} = \frac{x_{ij}-\mu_j}{\sqrt{\sigma_j^2+\epsilon}}

最后乘以可学习缩放参数 γ\gamma,加上平移参数 β\beta

yij=γx^ij+βy_{ij} = \gamma \hat{x}_{ij} + \beta

为什么需要 γ\gammaβ\beta 强制均值为 0、方差为 1 可能会破坏特征本身的表达能力(比如 ReLU 函数前的非负特征如果被强制拉平,会损失一半的激活空间)。γ\gammaβ\beta 将“是否需要保留原始分布”的控制权交还给网络去学习。

注:BN 极度依赖 Batch Size。且训练时使用当前 Batch 的统计量,推理时使用全局移动平均(Running Mean/Var)。

层归一化(LayerNorm)

LayerNorm 是按行归一化

只看当前第 ii 个样本内部的全部 dd 个特征:

μi=1dj=1dxij\mu_i = \frac{1}{d}\sum_{j=1}^{d} x_{ij} σi2=1dj=1d(xijμi)2\sigma_i^2 = \frac{1}{d}\sum_{j=1}^{d}(x_{ij}-\mu_i)^2 x^ij=xijμiσi2+ϵ\hat{x}_{ij} = \frac{x_{ij}-\mu_i}{\sqrt{\sigma_i^2+\epsilon}}

LN 不依赖 Batch 中的其他样本,因此在 Transformer 等处理变长序列的场景中占据统治地位。

对于输入张量 XRB×T×DX \in \mathbb{R}^{B \times T \times D}(Batch, 序列长度, 隐藏层维度),LayerNorm 通常独立作用于最后的 DD 维。

维度切片直观对比

无论是 BN、LN 还是 InstanceNorm,底层数学都一样,区别仅仅在于“参与计算 μ\muσ2\sigma^2 的数据切片范围”

其他 Norm

  • InstanceNorm:更常见于风格迁移,倾向于单张图片、单个 channel 内部做归一化。
  • GroupNorm:把 channel 分组后归一化,常用于 batch size 很小、BatchNorm 不稳定的视觉任务。
  • RMSNorm:可以看成 LayerNorm 的简化版本,不减均值,只按均方根缩放,很多 LLM 会使用。

尺度与自由度约束

除了数据本身的归一化,训练稳定性还需要直接干预梯度和模型参数的规模。

梯度裁剪(Gradient Clipping)

在面临悬崖般的陡峭 Loss 空间时(常见于早期的 RNN),一次巨大的梯度反向传播会直接把参数推向 NaN,导致训练直接崩溃。

梯度裁剪是对抗梯度爆炸的最粗暴且有效的手段。计算出整个参数层的梯度范数(L2 Norm):

if g2>c,gcgg2\text{if } \|g\|_2 > c, \quad g \gets c \cdot \frac{g}{\|g\|_2}

公式拆解:

  • gg:原始梯度矩阵。
  • g2\|g\|_2:梯度的 L2 范数(大小)。
  • cc:预设的阈值上限。

核心逻辑:只限制梯度的最大长度,不改变梯度的方向。确保参数更新的步伐始终在一个安全范围内。

正则化(Regularization)

正如前文在 L2 与 Dropout 中所述,正则化是从损失函数的角度对模型施加“紧箍咒”。

  • L2 正则化(Weight Decay):在 Loss 后附加参数的平方和惩罚项 λ2w2\frac{\lambda}{2} \|w\|^2,迫使模型使用分布更均匀、数值更小的权重矩阵,避免对个别噪声特征产生极端依赖。
  • Dropout:每次前向传播时,按概率 pp 随机将神经元置零:y=mx, mBernoulli(p)y = m \odot x, \ m \sim \text{Bernoulli}(p)。这物理性地切断了特定神经元之间的固定共适应(Co-adaptation),迫使网络在残缺的路径上也能提炼出鲁棒特征。