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