Jacobian矩阵定义:(函数的所有偏导数)
如果我们有一个函数 , 的Jacobian矩阵 定义为
Hessian矩阵 定义:(函数的二阶偏导,等价于梯度的Jacobian矩阵)
微分算子在任何二阶偏导连续的点处可以交换,意味着
,则Hessian矩阵是实对称的。我们可以通过检测Hessian矩阵的特征值来判断该临界点是一个局部极大点、局部极小点还是鞍点。当Hessian矩阵是正定时,临界点为局部极小点;当Hessian矩阵是负定时,临界点为局部极大点;当Hessian矩阵的特征值至少有一个正定且至少有一个负定时,临界点为鞍点。
当Hessian矩阵是病态时(矩阵条件数很大)(条件数可以理解成函数导数最大变化速度/函数导数最小变化速度),仅利用梯度信息(局部信息)很难进行最优化,梯度下降会把时间浪费在峡谷壁反复下降,如下图所示。【推荐阅读:ill-conditioning 对SGD有什么影响】一般对一阶优化算法而言,Hessian矩阵条件数越大,收敛越慢。
一阶优化算法仅使用梯度信息,二阶优化算法使用Hessian矩阵,如牛顿法。
Hessian矩阵处处半正定(所有特征值大于等于0)的函数为凸函数。这些函数没有鞍点,且局部最优解就是全局最优解。凸优化是目前最成功的特定优化领域。
深度学习中大多数问题难以表示成凸优化形式,且使用的函数族相当复杂,所以深度学习算法往往缺乏理论保证。但是,通过限制函数满足Lipschitz连续或其导数Lipschitz连续可以获得一些保证。Lipschitz连续函数的变化速度以Lipschitz常数
为界:
这个属性允许我们量化自己的假设:梯度下降算法导致的微小输入变化将使输出只产生微小变化。Lipschitz连续也是相当弱的约束,在深度学习的很多优化问题经过相对较小的修改后就能变得Lipschitz连续。