当我们训练机器学习模型时,优化算法本质上是在一个复杂的空间中进行搜索。这个空间由损失函数 L(heta) 定义,其中 heta 代表模型参数。这个空间被称为损失曲面。我们的目标通常是在此曲面上找到与最小损失对应的点 heta∗。凸性是一种特性,它保证了单一的全局最小值,并极大地简化了优化过程。然而,大多数现代机器学习模型,特别是深度神经网络,呈现出高度非凸的损失曲面。对这些曲面几何形态的认识,是理解高级优化算法的挑战和运行特点的主要基础。
“将损失函数想象为定义了模型参数 θ 的每一种可能配置的‘高度’。对于只有两个参数的模型,(θ1,θ2),我们可以将此曲面可视化为三维图,其中 x 轴和 y 轴代表 θ1 和 θ2,z 轴代表损失 L(θ1,θ2)。然而,模型通常有数百万甚至数十亿个参数。直接可视化如此高维空间中的曲面是不可能的。”
高维地形的可视化
尽管无法直接可视化,但我们可以通过审视低维截面或投影来获取信息。常用方法包含:
- 一维线图: 沿参数空间中的特定直线绘制损失值。这条直线可以由 θ(α)=θa+α(θb−θa) 定义,展示两点 θa 和 θb 之间的损失,或者沿梯度方向 θ(α)=θt−α∇L(θt) 定义,展示梯度下降从点 θt 可能采取的路径上的损失。
- 二维等高线图或曲面图: 在高维空间中的二维平面上绘制损失值。这个平面可以通过选择两个有意义的方向来定义,例如训练过程中参数轨迹的前两个主成分,或由随机向量定义的方向。
这些可视化虽然有限,但有助于我们建立对损失曲面结构的直观认识。有专门用于生成这些图表的工具和库,特别适用于神经网络。
损失曲面的特性
损失曲面的几何形态决定了优化器找到良好最小值的难易程度。以下是一些重要的特性:
- 全局最小值: 在整个参数空间中损失值绝对最低的点 θ∗。对于凸问题,这是唯一的最小值。
- 局部最小值: 损失低于其周围邻近区域,但不一定是整体最低的点。优化算法,特别是简单的梯度下降,可能会陷入局部最小值,导致模型表现不佳。理论认为,在高维空间中,许多局部最小值可能与全局最小值具有非常接近的损失值,使它们在实际中成为可接受的方案。
- 鞍点: 这些点处梯度 ∇L(θ) 为零,但它们既非最小值也非最大值。相反,曲面在某些方向向上弯曲,而在另一些方向向下弯曲(如同马鞍)。一个简单的例子是函数 f(x,y)=x2−y2 在 (0,0) 处。对于高维非凸问题,鞍点通常被认为比局部最小值更显著的障碍。一阶方法在鞍点附近会显著减慢,因为梯度变得非常小。
一个简单的曲面图,演示了 (0,0) 处的鞍点。曲面沿 y 轴向下弯曲,沿 x 轴向上弯曲。优化算法在此处可能会停滞,因为梯度为零。
- 平坦区域: 梯度持续较小但非零的大片平坦区域。在这些区域,优化可能会变得极其缓慢,因为更新对降低损失值几乎没有帮助。平坦区域在深度学习地形中很常见。
- 吸引盆: 参数空间中的区域,如果优化从该区域内部开始,它很可能会收敛到特定的最小值。这些吸引盆的大小和形状会影响最终解对参数初始化的敏感度。
- 尖锐最小值与平坦最小值: 最小值可以由损失函数周围的曲率来描述。一个尖锐最小值就像一个狭窄的山谷,而一个平坦最小值是一个宽广而浅的盆地。越来越多的证据表明,平坦最小值通常对应于对未见过的数据有更好泛化能力的方案。这是因为参数的微小扰动(可能由于训练和测试数据分布之间的差异而发生)在平坦最小值中对损失的影响比在尖锐最小值中要小。像 SGD 这样的算法,由于其固有的噪声,可能倾向于找到更平坦的最小值。
对优化的影响
损失曲面的特点直接影响算法表现:
- 梯度下降(和 SGD): 遵循最陡下降方向。可能陷入局部最小值,并在平坦区域和鞍点附近大幅减慢。步长(学习率)非常重要;太大会越过最小值,太小则可能耗时过长或陷入停滞。
- 动量法: 沿一致方向累积速度,有助于更快地通过平坦区域,并可能越过小的崎岖或浅的局部最小值/鞍点。
- 自适应学习率方法(第三章): 根据每个参数调整学习率,通常基于梯度的历史记录。这有助于在复杂的几何形态中移动,在平坦方向上加速,在陡峭方向上减速,可能减轻参数缩放不当带来的问题。
- 二阶方法(第二章): 利用曲率信息(Hessian 矩阵)构建损失曲面的局部二次逼近。例如,牛顿法直接跳到该局部逼近的最小值。这使其能够有效区分鞍点和最小值,并在最小值附近快速收敛。然而,计算和求逆 Hessian 矩阵的计算成本高昂,特别是对于大型模型。
对这些几何特征的认识提供了重要的背景信息,有助于理解为什么某些优化算法在特定情况下(尤其是在深度学习中常见的具有挑战性的非凸地形中)比其他算法表现更好。当我们研究后续章节中更高级的算法时,我们会经常回顾它们如何处理由局部最小值、鞍点、平坦区域以及损失曲面整体高维结构所带来的挑战。