一、引言

本章围绕深度学习中神经网络优化的核心问题展开,深入剖析了训练过程中常见的障碍及其应对策略。理解这些概念有助于我们从多个角度改进模型训练效果,提升收敛速度与泛化能力。


二、临界点:局部极小值 vs 鞍点

2.1 为什么优化会失败?

在训练深层神经网络时,常常遇到损失不再下降的情况。这可能是因为优化过程陷入了临界点(critical point) —— 即梯度为零的点。传统观点认为这是由于陷入局部极小值(local minimum),但现代研究表明,更常见的是鞍点(saddle point)

  • 局部极小值:在该点附近所有方向的损失都更高。
  • 鞍点:某些方向损失上升,某些方向损失下降,形状类似马鞍。

在高维空间(如百万级参数的网络)中,真正的局部极小值极为罕见,大多数临界点其实是鞍点。

2.2 如何判断临界点类型?

使用泰勒展开近似海森矩阵(Hessian matrix)

$$ L(\theta) \approx L(\theta') + \frac{1}{2} (\theta - \theta')^T H (\theta - \theta') $$

  • 若海森矩阵 $H$ 的所有特征值 > 0 → 局部极小值
  • 所有特征值 < 0 → 局部极大值
  • 特征值有正有负 → 鞍点

虽然理论上可通过海森矩阵逃离鞍点(沿负特征值对应的特征向量方向更新),但实际因计算成本过高几乎不用。


三、批量与动量:提升优化效率

3.1 批量大小的影响

  • 全批量梯度下降(BGD):稳定但慢,每次更新需遍历全部数据。
  • 随机梯度下降(SGD):噪声大但能跳出局部极小值,更新频繁。
  • 小批量梯度下降(Mini-batch SGD):兼顾效率与稳定性,是主流方法。

实验表明:小批量虽训练稍慢,但泛化更好;大批量易陷入“尖锐最小值”(sharp minima),导致测试性能差。

3.2 动量法(Momentum)

模拟物理惯性:不仅考虑当前梯度,还累积历史梯度方向。

更新公式: $$ m_t = \lambda m_{t-1} - \eta g_t \ \theta_{t+1} = \theta_t + m_t $$

  • $\lambda$:动量系数(通常 0.9)
  • 优势:可越过小的局部极小值或鞍点,加速收敛

四、自适应学习率:让每个参数“聪明地走”

固定学习率难以适应不同参数的尺度差异。自适应方法为每个参数动态调整学习率。

4.1 AdaGrad

根据历史梯度平方的累积调整学习率: $$ \sigma_t^i = \sqrt{\frac{1}{t+1} \sum_{j=0}^{t} (g_j^i)^2}, \quad \theta_{t+1}^i = \theta_t^i - \frac{\eta}{\sigma_t^i} g_t^i $$

  • 梯度大 → 学习率小;梯度小 → 学习率大
  • 缺点:学习率单调递减,后期可能过小

4.2 RMSProp

引入指数移动平均,更关注近期梯度: $$ \sigma_t^i = \sqrt{\alpha (\sigma_{t-1}^i)^2 + (1-\alpha)(g_t^i)^2} $$

  • $\alpha$ 控制历史权重(通常 0.9)
  • 能快速响应梯度变化,避免“学不动”

4.3 Adam(最常用)

结合 RMSProp + 动量,同时估计一阶(动量)和二阶(自适应学习率)矩:

  • 默认超参($\beta_1=0.9, \beta_2=0.999$)通常表现良好
  • PyTorch/TensorFlow 中首选优化器

五、学习率调度:动态调整步伐

即使使用自适应方法,仍需对全局学习率 $\eta$ 进行调度。

5.1 学习率衰减(Decay)

随训练进程逐渐减小 $\eta$,防止后期震荡: $$ \eta_t = \eta_0 \cdot \gamma^t \quad \text{或} \quad \eta_t = \frac{\eta_0}{1 + kt} $$

5.2 预热(Warmup)

初期用小学习率收集梯度统计信息(尤其对 Adam/RMSProp),再逐步增大:

  • BERT、Transformer 等大模型标配
  • 原因:初始 $\sigma$ 不准确,小 $\eta$ 可避免早期剧烈更新

六、分类任务中的关键设计

6.1 输出表示:独热编码 vs 数值标签

  • 使用独热向量(one-hot) 避免类别间人为距离假设

6.2 Softmax 激活

将原始输出归一化为概率分布: $$ y'_i = \frac{e^{y_i}}{\sum_j e^{y_j}} $$

  • 使输出 ∈ (0,1),且和为1
  • 放大最大值与其他值的差距,利于分类

6.3 损失函数选择:交叉熵优于均方误差

  • 交叉熵:在远离目标时梯度大,利于优化
  • 均方误差:在错误严重时梯度趋近于0,易卡住

分类任务应优先使用 Softmax + 交叉熵


七、批量归一化(Batch Normalization, BN)

7.1 核心思想

对每层输入(或激活前)进行归一化,使分布稳定为均值0、方差1:

$$ \tilde{z}_i = \frac{z_i - \mu_B}{\sqrt{\sigma_B^2 + \epsilon}}, \quad \hat{z}_i = \gamma \tilde{z}_i + \beta $$

  • $\mu_B, \sigma_B$:当前 batch 的均值与标准差
  • $\gamma, \beta$:可学习参数,恢复表达能力

7.2 作用

  • 平滑误差表面,加速收敛
  • 允许使用更大初始学习率
  • 减轻对初始化敏感性
  • 一定程度上起到正则化作用

7.3 测试阶段处理

使用训练时各 batch 的移动平均 $\bar{\mu}, \bar{\sigma}$ 代替实时计算,确保单样本推理可行。

注意:BN 依赖足够大的 batch size(通常 ≥ 32)


八、总结:现代优化器的完整形式

综合上述技术,当前主流优化更新可表示为:

$$ \theta_{t+1}^i = \theta_t^i - \eta_t \cdot \frac{m_t^i}{\sigma_t^i} $$

其中:

  • $m_t^i$:动量(历史梯度加权和,含方向)
  • $\sigma_t^i$:自适应学习率分母(梯度幅值统计,无方向)
  • $\eta_t$:调度后的全局学习率

关键洞见:动量与自适应学习率不抵消,因前者保留方向信息,后者仅反映幅度。


十、实践反思:几何特征分类中的鞍点挑战

在近期工作中,我开发了一个基于深度学习的分类器,用于识别由几何外形向量组(如点云坐标、轮廓关键点或CAD参数化表示)构成的工业零件类别。这类输入具有高度结构化的空间关系,但维度高、冗余性强,且不同样本间尺度差异显著。

训练初期,模型损失迅速下降,但很快停滞在一个较高水平,验证准确率提升缓慢。通过监控梯度范数发现:梯度并未趋近于零,但损失几乎不再变化——这提示我们并非真正陷入临界点,而是在一个高曲率山谷中震荡(如图3.20所示)。然而,在进一步调试中,当我固定其他层、仅优化某一层时,确实观察到了梯度接近零且海森矩阵特征值正负混杂的现象,证实了局部存在鞍点

结合本章知识,我采取了以下措施:

  1. 引入 Adam 优化器:替代原始 SGD,利用其自适应学习率与动量机制,有效缓解了不同几何维度上梯度尺度不一致的问题;
  2. 在输入层前加入 Z-score 归一化:对每个几何坐标维度独立标准化,使 $x, y, z$ 等方向具有相近的数值范围,从源头改善误差表面形态;
  3. 在网络中间层嵌入 Batch Normalization:稳定隐藏层激活分布,减少因几何变换(如旋转、缩放)带来的内部协变量波动;
  4. 采用带 Warmup 的学习率调度:前5个epoch使用线性增大学习率,帮助优化器在初始阶段更稳健地探索损失地形。

最终,模型收敛速度提升约40%,验证准确率提高6.2个百分点。这一经历让我深刻体会到:鞍点虽在理论上“可逃离”,但在实际高维非凸问题中,它常表现为优化停滞的表象之一;而真正的解法不在于直接计算海森矩阵,而在于通过归一化、自适应优化和学习率调度等工程手段,从根本上“重塑”误差表面,使其更平滑、更易导航

这也印证了本章的核心思想:优化失败往往不是算法的终点,而是改进模型设计与训练策略的起点

更多推荐