[深度学习基础] Jacobian矩阵与Hessian矩阵

Jacobian矩阵定义:(函数的所有偏导数)

如果我们有一个函数 f : R m R n f: \mathbb{R}^m\rightarrow \mathbb{R}^n f f 的Jacobian矩阵 J R n × m J\in \mathbb{R}^{n\times m} 定义为 J i , i = x j f ( x ) i J_{i,i}=\frac{\partial }{\partial x_j}f(x)_i

Hessian矩阵 H ( f ) ( x ) H(f)(x) 定义:(函数的二阶偏导,等价于梯度的Jacobian矩阵)

H ( f ) ( x ) i , j = 2 x i x j f ( x ) H(f)(x)_{i,j}=\frac{\partial ^2}{\partial_{x_i} \partial_{x_j}}f(x)

微分算子在任何二阶偏导连续的点处可以交换,意味着 H i , j = H j , i H_{i,j}=H_{j,i} ,则Hessian矩阵是实对称的。我们可以通过检测Hessian矩阵的特征值来判断该临界点是一个局部极大点、局部极小点还是鞍点。当Hessian矩阵是正定时,临界点为局部极小点;当Hessian矩阵是负定时,临界点为局部极大点;当Hessian矩阵的特征值至少有一个正定且至少有一个负定时,临界点为鞍点。
在这里插入图片描述

当Hessian矩阵是病态时(矩阵条件数很大)(条件数可以理解成函数导数最大变化速度/函数导数最小变化速度),仅利用梯度信息(局部信息)很难进行最优化,梯度下降会把时间浪费在峡谷壁反复下降,如下图所示。【推荐阅读:ill-conditioning 对SGD有什么影响】一般对一阶优化算法而言,Hessian矩阵条件数越大,收敛越慢
在这里插入图片描述
一阶优化算法仅使用梯度信息,二阶优化算法使用Hessian矩阵,如牛顿法。

Hessian矩阵处处半正定(所有特征值大于等于0)的函数为凸函数。这些函数没有鞍点,且局部最优解就是全局最优解。凸优化是目前最成功的特定优化领域。

深度学习中大多数问题难以表示成凸优化形式,且使用的函数族相当复杂,所以深度学习算法往往缺乏理论保证。但是,通过限制函数满足Lipschitz连续或其导数Lipschitz连续可以获得一些保证。Lipschitz连续函数的变化速度以Lipschitz常数 L {\bf L} 为界:
x , y , f ( x ) f ( y ) L × x y 2 \forall x,\forall y,|f(x)-f(y)|\leq{\bf L}\times||x-y||_2
这个属性允许我们量化自己的假设:梯度下降算法导致的微小输入变化将使输出只产生微小变化。Lipschitz连续也是相当弱的约束,在深度学习的很多优化问题经过相对较小的修改后就能变得Lipschitz连续。

参考文献:
Ian Goodfellow et al, deep learning

猜你喜欢

转载自blog.csdn.net/qq_26020233/article/details/88878787
今日推荐