上篇说的,仅仅基于梯度的优化算法称为 一阶优化算法(first-order optimization algorithms)
, 比如最典型的 梯度下降法;很多时候,仅仅使用一阶的梯度信息效果是不够优良的,还需要考虑梯度的梯度, 也就是 二阶优化算法(second-order optimization algorithms)
, 二阶优化算法基于的是 Hessian 矩阵, 比较典型的方法如 牛顿法。
先来回顾一下 梯度,Jacobian 矩阵 和 Hessian 矩阵 的关系。开始!
二阶导数(second derivative)
,即导数的导数,表达的是一阶导数如何随着输入的变化而变化。一阶导数,表征的是曲线的斜率
, 同理我们可以认为二阶导数,表征的是曲线(或曲面)的曲率
. 借助物理来理解,就是函数表征的是位移和时间的对应关系,一阶导数就是速度,二阶导数就是加速度。
- 对于一个一次函数而言,比如 y=kx y = k x , 其一阶导数就是常数 k k , 而二阶导数就是 , 或者说匀速直线运动,速度恒定,没有加速度。
- 对于一个二次函数而言,比如自由落体运动 y=12gx2 y = 1 2 g x 2 , 其一阶导数就是 xt x t , 二阶导数就是常数 g g , 也就是说有随 变化的斜率和固定的曲率,或者说有固定的加速度然后有随时间变化的速度。
回到优化算法中,我们之前使用的梯度下降法,相当于以当前的速度匀速直线前进一个 δx δ x 时间,作为估计的 y^ y ^ , 当然这个和真实的 y y 肯定是有差距的。二阶导数信息就可以用来预知这个差距的大小:
- 如果
二阶导数/曲率
为 , 也就是没有加速度,匀速直线运动,那么我们用梯度进行预测就是很准确的。- 如果
二阶导数/曲率
为负, 也就是减速运动,那么我们用梯度进行预测的值就会比真实值大。 - 如果
二阶导数/曲率
为正, 也就是加速运动, 那么我们用梯度进行预测的值就会比真实值小。 对于多元函数,二阶函数有很多,我们将这些导数合并成为 Hessian 矩阵。由于微分算子在任何二阶偏导连续的点处都可以交换,因此 Hessian 矩阵在这些点上是对称的。在深度学习背景中,我们遇到的大多数的 Hessian 矩阵基本都是对称的。而由于Hessian 矩阵是实对称的,我们可以将其分解为一组实特征值和一组特征向量的正交基。那么在特定方向 d d 上的 二阶导数就可以写成 。 当 d d 是
- 如果