这意味着 Hi,j=Hj,i ,因此Hessian矩阵在这些点上是对称的。在深度学习背景下,我们遇到的大多数函数的Hessian几乎处处都是对称的。因为Hessian矩阵是实对称的,我们可以将其分解成一组实特征值和一组特征向量的正交基。在特定方向 d 上的二阶导数可以写成 d⊤Hd 。当 d 是 H 的一个特征向量时,这个方向的二阶导数就是对应的特征值。对于其他的方向 d ,方向二阶导数是所有特征值的加权平均,权重在 0 和 1 之间,且与 d 夹角越小的特征向量的权重越大。最大特征值确定最大二阶导数,最小特征值确定最小二阶导数。
我们在当前点 x(0) 处作函数 f(x) 的近似二阶泰勒级数:
f(x)≈f(x(0))+(x−x(0))⊤g+21(x−x(0))⊤H(x−x(0))
其中 g 是梯度, H 是 x(0) 点的Hessian。如果我们使用学习率 ϵ ,那么新的点 x 将会是 x(0)−ϵg 。代入上述的近似,可得
最坏的情况下, g 与 H 最大特征值 λ 对应的特征向量对齐,则最优步长是 λmax1 。我们要最小化的函数能用二次函数很好地近似的情况下,Hessian的特征值决定了学习率的量级。
回想一下,在临界点处 f′(x)=0 。而 f′′(x)>0 意味着 f′(x) 会随着我们移向右边而增加,移向左边而减小,也就是 f′(x−ϵ)<0 和 f′(x+ϵ)>0 对足够小的 ϵ 成立。换句话说,当我们移向右边,斜率开始指向右边的上坡,当我们移向左边,斜率开始指向左边的上坡。因此我们得出结论,当 f′(x)=0 且 f′′(x)>0 时, x 是一个局部极小点。同样,当 f′(x)=0 且 f′′(x)<0 时, x 是一个局部极大点。这就是所谓的二阶导数测试。不幸的是,当 f′′(x)=0 时测试是不准确的。在这种情况下, x 可以是一个鞍点或平坦区域的一部分。
在多维情况下,我们需要检测函数的所有二阶导数。利用Hessian的特征值分解,我们可以将二阶导数测试扩展到多维情况。在临界点处 (∇xf(x)=0) ,我们通过检测Hessian的特征值来判断该临界点是一个局部极大点、局部极小点还是鞍点。当Hessian是正定的(所有特征值都是正的),则该临界点是局部极小点。同样,当Hessian是负定的(所有特征值都是负的),这个点就是局部极大点。在多维情况下,实际上我们可以找到确定该点是否为鞍点的积极迹象(某些情况下)。如果Hessian的特征值中至少一个是正的且至少一个是负的,那么 x 是 f 某个横截面的局部极大点,却是另一个横截面的局部极小点,如下图例子。最后,多维二阶导数测试可能像单变量版本那样是不确定的。当所有非零特征值是同号的且至少有一个特征值是 0 时,这个检测就是不确定的。这是因为单变量的二阶导数测试在零特征值对应的横截面上是不确定的。