在深度学习和数值优化领域,海森矩阵(Hessian Matrix)是理解函数局部行为的关键工具。这个二阶导数矩阵包含了函数在各个方向上的曲率信息,对于分析临界点性质和设计优化算法至关重要。
海森矩阵的特征值揭示了函数在不同方向上的曲率特性。当所有非零特征值符号相同时,我们可以明确判断临界点的性质:
特别值得注意的是,当所有非零特征值同号但至少有一个特征值为零时,二阶导数测试变得不确定。这是因为在对应于零特征值的横截面上,单变量二阶导数测试无法给出明确结论。
在实际应用中,这种情况通常需要结合更高阶的导数或采用其他分析方法来判断临界点性质。
在多维空间中,单个点处可能存在多种不同的二阶导数,因为每个方向都有对应的二阶导数。海森矩阵的条件数(最大特征值与最小特征值的比值)衡量了这些二阶导数的变化程度:
条件数 = λ_max / λ_min
条件数大的矩阵称为"病态"矩阵,这种情况下不同方向上的曲率差异显著,给优化算法带来挑战。
当海森矩阵条件数不佳时,梯度下降法表现较差。这是因为:
梯度下降法无法感知这种导数变化,不知道应该优先探索导数保持负值时间更长的方向。这导致算法在曲率较大的方向上反复震荡,而在曲率较小的方向上进展缓慢。
病态条件下选择合适步长面临两难:
如图4.6所示,在条件数为5的二次函数优化中,梯度下降法沿着峡谷壁反复下降,无法有效利用曲率信息。这种函数形状类似于细长的峡谷,最陡峭的特征[1,1]方向并不是最有希望的搜索方向。
牛顿法利用海森矩阵信息指导搜索方向。其核心思想是在当前点x⁰处用二阶泰勒展开近似函数:
f(x) ≈ f(x⁰) + (x-x⁰)ᵀ∇f(x⁰) + ½(x-x⁰)ᵀH(x⁰)(x-x⁰)
求解这个近似函数的临界点,得到更新公式:
x* = x⁰ - H⁻¹∇f(x⁰)
对于正定二次函数,牛顿法一步即可跳到最小值。对于非二次函数,通过迭代更新可以比梯度下降更快接近临界点。
然而,牛顿法在鞍点附近表现不佳,因为它会被任何临界点(包括鞍点)吸引。相比之下,梯度下降通常只被梯度指向的临界点吸引。
深度学习模型通常具有以下特点:
为保证收敛性,我们常对函数施加Lipschitz连续性条件:
∀x,y, |f(x)-f(y)| ≤ L||x-y||₂
这个条件限制了函数变化率,确保小的输入变化不会导致输出剧烈波动。
凸优化算法针对凸函数设计,这类函数具有:
然而,大多数深度学习问题难以表示为凸优化形式。深度神经网络的损失函数通常是非凸的,包含多个局部极小值和鞍点。这使得设计高效的优化算法更具挑战性。
图4.5展示了一个典型的鞍点示例:函数f(x)=x₁²-x₂²。这个函数:
这种马鞍形状正是"鞍点"名称的由来。值得注意的是,在多维空间中,鞍点的存在不需要任何特征值为零,只需同时存在正负特征值即可。
我们可以将鞍点理解为:
这种特性使得优化算法容易陷入鞍点,特别是在高维空间中,鞍点比局部最小值更为常见。
针对病态问题,可以采用:
这些方法能根据局部曲率信息动态调整步长,平衡不同方向上的进展速度。
现代优化算法常采用近似海森矩阵信息:
这些方法避免了直接计算和存储海森矩阵,同时保留了部分二阶信息。
选择优化算法时应考虑:
在实践中,我们常采用:
这些技巧能显著改善优化过程,特别是在深层网络训练中。