引言
梯度下降法的核心是在最小化目标函数时,每次迭代中,对每个变量,按照目标函数在该变量梯度的相反方向更新对应的参数值。也就是,在目标函数的超平面上,沿着斜率下降的方向前进,直到遇到最小值(这个最小值不一定是全局最小值)。
梯度下降法
梯度下降推导
一元函数的泰勒展开如下:
只去右边的前两项,则有:
即
我们的目标是在迭代的过程中, 函数值逐渐变小,即
则我们构造
此时,
则迭代形式为:
在使用梯度下降时,需要进行调优:
- 1、算法步长的选择。
- 2、算法参数的初始值选择。
- 3、归一化。
牛顿法
对泰勒展开取前两项,有
两边取导数得
根据微积分性质,当取最小值时导数为0,则有
则牛顿法的参数迭代更新公式为:
函数有极值的必要条件是在极值点处的一阶导数为0,即梯度向量为0。当海森矩阵是正定是,函数的极值为极小值。
梯度下降法和牛顿法虽然都可以根据泰勒展开来推导,但是所依托的思想是不一样的。梯度下降法是梯度求解,牛顿法是用二阶的海森矩阵的逆矩阵求解。相对而言,使用牛顿法收敛更快,但是每次迭代时间较长。
拟牛顿法
在牛顿法中,需要计算二阶海森矩阵的逆矩阵,因此使用近似的矩阵代替逆矩阵。
梯度下降优化算法
在SGD中, ,其中是参数的变化量,是梯度。
SGD存在的问题:因为参数更新比较频繁,会造成cost function有严重的震荡,最终停留在局部最小。
改进方法:
1、加入一阶动量,即在梯度下降过程中加入惯性,使梯度方向不变的维度上速度更快,梯度方向有所改变的维度上的速度变慢,这样可以加速收敛并较小震荡。
一阶动量是移动平均值,参数取经验值0.9,也就是说t时刻的主要下降方向是由t-1时刻的下降方向再加上一点点t时刻的偏向决定的。
2、加入二阶动量
梯度为
3、由于二阶动量会不断积累,导致变化量急剧较少,使用滑动窗口加权平均二阶动量
Adam = 自适应+动量,继承了一阶动量和二阶动量