李宏毅深度学习笔记4-神经网络优化及几何特征分类中的鞍点挑战
一、引言
本章围绕深度学习中神经网络优化的核心问题展开,深入剖析了训练过程中常见的障碍及其应对策略。理解这些概念有助于我们从多个角度改进模型训练效果,提升收敛速度与泛化能力。
二、临界点:局部极小值 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所示)。然而,在进一步调试中,当我固定其他层、仅优化某一层时,确实观察到了梯度接近零且海森矩阵特征值正负混杂的现象,证实了局部存在鞍点。
结合本章知识,我采取了以下措施:
- 引入 Adam 优化器:替代原始 SGD,利用其自适应学习率与动量机制,有效缓解了不同几何维度上梯度尺度不一致的问题;
- 在输入层前加入 Z-score 归一化:对每个几何坐标维度独立标准化,使 $x, y, z$ 等方向具有相近的数值范围,从源头改善误差表面形态;
- 在网络中间层嵌入 Batch Normalization:稳定隐藏层激活分布,减少因几何变换(如旋转、缩放)带来的内部协变量波动;
- 采用带 Warmup 的学习率调度:前5个epoch使用线性增大学习率,帮助优化器在初始阶段更稳健地探索损失地形。
最终,模型收敛速度提升约40%,验证准确率提高6.2个百分点。这一经历让我深刻体会到:鞍点虽在理论上“可逃离”,但在实际高维非凸问题中,它常表现为优化停滞的表象之一;而真正的解法不在于直接计算海森矩阵,而在于通过归一化、自适应优化和学习率调度等工程手段,从根本上“重塑”误差表面,使其更平滑、更易导航。
这也印证了本章的核心思想:优化失败往往不是算法的终点,而是改进模型设计与训练策略的起点。
更多推荐
所有评论(0)