梯度下降和牛顿法的推导均与泰勒公式有关,所以先介绍泰勒展开公式:
假设,将在出进行泰勒展开:
上面这个迭代形式将应用到下面的梯度下降和牛顿法中。
一、梯度下降法
梯度下降法应用一阶泰勒展开,假设L(θ)代表损失函数,目标:最小化损失函数,θ是需要更新的模型参数。下面公式中alpha是步长(学习率),可以直接赋值一个小的数,也可以通过line search。
二、牛顿法
Hessian矩阵中各元素对应二阶偏导数。Hessian矩阵的逆同比于梯度下降法的学习率参数alpha,Hessian的逆在迭代中不断减小,起到逐渐缩小步长的效果。
利用牛顿法求解目标函数的最小值其实是转化成求使目标函数的一阶导为0的参数值。这一转换的理论依据是,函数的极值点处的一阶导数为0.
其迭代过程是在当前位置x0求该函数的切线,该切线和x轴的交点x1,作为新的x0,重复这个过程,直到交点和函数的零点重合。此时的参数值就是使得目标函数取得极值的参数值。
其迭代过程如下:
三、牛顿法和梯度下降法的比较
- 梯度下降法是一阶优化算法,牛顿法是二阶优化算法
- 牛顿法的收敛速度相比梯度下降法常常较快
- 牛顿法每次需要更新一个二维矩阵,计算代价很大,实际使用中常使用拟牛顿法
- 牛顿法对初始值有一定要求,在非凸优化问题中(如神经网络训练),牛顿法很容易陷入鞍点(牛顿法步长会越来越小),而梯度下降法则很容易逃离鞍点(因此在神经网络训练中一般使用梯度下降法,高维空间的神经网络中存在大量鞍点)
- 梯度下降法在靠近最优点时会震荡,因此步长调整在梯度下降法中是必要的,具体有adagrad, adadelta, rmsprop, adam等一系列自适应学习率的方法
二维情景下两种方法的比较:
梯度下降法每次只从你当前所处位置选一个坡度最大的方向走一步,牛顿法在选择方向时,不仅会考虑坡度是否够大,还会考虑你走了一步之后,坡度是否会变得更大。所以,牛顿法比梯度下降法看得更远一点,能更快地走到最底部。(牛顿法目光更长远,所以少走弯路;梯度下降法只考虑局部最优,没有全局思想。)
4.拟牛顿法
使用正定矩阵近似Hessian矩阵的逆,简化了运算的复杂度。常用的拟牛顿算法:DFP算法和BFGS算法。
特点:
1.只需用到函数的一阶梯度;(Newton法用到二阶Hesse阵)
2.下降算法,故全局收敛
3.不需求矩阵逆;(计算量小)
参考博客: