深度学习之Hessian矩阵在牛顿法中的应用

对于多维函数,每个点在每一个方向上的导数是不同的,如果使用梯度下降,有可能在某一方向上导数增加很快,而在另外一方向上增加很慢,梯度下降是不知道导数的这些信息的,因为梯度只是一阶导数,只有二阶导数能反应一阶导数的变化情况,也就是Hessian矩阵。

一般来说, 牛顿法主要应用在两个方面, 1, 求方程的根; 2, 最优化.

1), 求解方程

并不是所有的方程都有求根公式, 或者求根公式很复杂, 导致求解困难. 利用牛顿法, 可以迭代求解.

原理是利用泰勒公式, x0处展开, 且展开到一阶, f(x) = f(x0) + (x-x0) f’(x0)

求解方程f(x) = 0, f(x0) + (x-x0)f'(x0) = 0, 求解x = x1 = x0 - f(x0)/f’(x0), 因为这是利用泰勒公式的一阶展开, f(x) = f(x0) + (x-x0) f’(x0)处并不是完全相等, 而是近似相等, 这里求得的x1并不能让f(x) = 0 ,只能说f(x1) 的值比f(x0) 更接近f(x) = 0, 于是乎, 迭代求解的想法就很自然了, 可以进而推出

Xn+1=X- f(Xn)/f’(Xn) 通过迭代, 这个式子必然在f(x*) = 0的时候收敛. 整个过程如下图:


深度学习之Hessian矩阵在牛顿法中的应用

2), 最优化

在最优化的问题中, 线性最优化至少可以使用单纯形法(或称不动点算法)求解, 但对于非线性优化问题, 牛顿法提供了一种求解的办法. 假设任务是优化一个目标函数f, 求函数f的极大极小问题, 可以转化为求解函数f的导数f' = 0的问题, 这样求可以把优化问题看成方程求解问题(f' = 0). 剩下的问题就和第一部分提到的牛顿法求解很相似了.

这次为了求解f' =0的根, 首先把f(x)在探索点Xn处泰勒展开, 展开到2阶形式进行近似:

深度学习之Hessian矩阵在牛顿法中的应用

然后用f(x)的最小点做为新的探索点Xn+1,据此,令:

深度学习之Hessian矩阵在牛顿法中的应用

求得出迭代公式:

深度学习之Hessian矩阵在牛顿法中的应用

一般认为牛顿法可以利用到曲线本身的信息, 比梯度下降法更容易收敛(迭代更少次数), 如下图是一个最小化一个目标方程的例子, 红色曲线是利用牛顿法迭代求解, 绿色曲线是利用梯度下降法求解.

深度学习之Hessian矩阵在牛顿法中的应用

在上面讨论的是2维情况, 高维情况的牛顿迭代公式是:

深度学习之Hessian矩阵在牛顿法中的应用

通过牛顿法迭代地更新近似函数和跳到近似函数的最小点可以比梯度下降更快地到达临界点,但是只有当附近的临界点时最小点(Hessian的所有特征值都是正的)时牛顿法才适用,因为它会被吸引到鞍点。

参考

http://jacoxu.com/jacobian矩阵和hessian矩阵/