常用优化方法总结
本篇博文总结一些常用的优化算法。
梯度下降法
最常见的优化方法是 ,基础的原理不详细讲了,讲下其缺陷。
从泰勒公式的角度来看,梯度下降法将 展开到了一阶。
1. 当学习率太小,到达最优点会很慢。
2. 当学习率太高,可能会跳过最优点,出现震荡的现象。
3. 可能会陷入局部最优。
3. 如果输入样本的不同特征的大小差别很大,,则优化时会很慢,其原因为什么要对特征进行缩放(归一化)。
牛顿法
牛顿法用于方程求解(也称切线法)
对 进行一阶泰勒公式展开:
此时,将非线性方程 近似为线性方程:
若 ,则下一次迭代解为:
在多元函数中, 称为雅克比矩阵。
故牛顿迭代又称切线法。
牛顿法用于函数最优化求解
将 按照泰勒公式展开到二阶得:
我们希望 能取得极小值,那么必有,我们对右式中的 求导可得:
从本质上去看,牛顿法是二阶收敛,梯度下降是一阶收敛,所以牛顿法就更快。如果更通俗地说的话,比如你想找一条最短的路径走到一个盆地的最底部,梯度下降法每次只从你当前所处位置选一个坡度最大的方向走一步,牛顿法在选择方向时,不仅会考虑坡度是否够大,还会考虑你走了一步之后,坡度是否会变得更大。所以,可以说牛顿法比梯度下降法看得更远一点,能更快地走到最底部。(牛顿法目光更加长远,所以少走弯路;相对而言,梯度下降法只考虑了局部的最优,没有全局思想。)根据wiki上的解释,从几何上说,牛顿法就是用一个二次曲面去拟合你当前所处位置的局部曲面,而梯度下降法是用一个平面去拟合当前的局部曲面,通常情况下,二次曲面的拟合会比平面更好,所以牛顿法选择的下降路径会更符合真实的最优下降路径。
在多元函数中:
这里我们可以看到需要求(海森矩阵),是一个多元函数的二阶导数构成的方阵,描述了函数的局部曲率。
Momentum Optimization
在这里梯度作为一个累积量, 作为超参数可以看做一个动量,要记忆之前百分之多少的梯度,取0-1之间。
- 相比 能更快的脱离平原地带(梯度变化很小)。
- 从公式上看可以理解为一种指数加权平均,越近的梯度权重越大,对当前步的影响越大。
- 即使 ,他也能很快的到达最优点,在神经网络里面,如果用这种优化方式,则可以不用。
- 当梯度方向改变时,能抑制震荡,加速收敛。
- 不好的地方就是增加了一个需要调节的超参数 。通常取0.9。
Nesterov Accelerated Gradient
的改进版本,可以从公式看出,只是修改了一点点,其 加入了之前的梯度累计。在实际实验中,几乎总是比 更快的到达最优点。
并且减少了震荡的现象。
AdGrad
点乘, 点除。
是平滑项,防止出现除零的情况。
该优化方法有以下特点:
- 自适应的调整学习率。
- 也能很好的处理。
该方法的主要优点就是,在训练的前期,模型的学习速度会比较快,比较快的到达最优点附近,为了不越过最优点,在训练的后期,学习速度降低,慢慢低近最优点,但是可能会出现早停现象。
但是有一个很大的不足,在用该方法优化深度网络时,可能会出现早停的情况,也就是还没达到最优点,学习就停止了,学习率降低的太大。所以一般来说,不用该方法来训练深度神经网络。
RMSProp
修改了 中对学习速率的约束,避免早停现象。
相对于 算法那样暴力直接的累加平方梯度, 加了一个衰减系数来控制历史信息的获取多少,可以避免早停现象。见下:
其也是指数加权平均的方式来累计梯度,可以设想,当存在多参数时,不同的参数拥有不同的梯度,也即有不同的学习速率。起到的效果是在参数空间更为平缓的方向,会取得更大的进步(因为平缓,所以历史梯度平方和较小,对应学习下降的幅度较小),并且能够使得陡峭的方向变得平缓,从而加快训练速度。具体原因请看RMSProp
该方法好过上面所有讲的方法,在 出来之前,该方法是最被推荐的方法。
Adam Optimization
显然,计算 时,保存了 的下坡属性,计算 时结合了 对学习速率的约束,然后在参数更新时把 和 都考虑进去,实验证明该方法在大多数时候能又快又好的到达目标,很快的收敛。
并且该方法能很好的处理存在 正则项的优化。
T 指训练的轮数,从1开始计。
该方法现在是最常用的优化算法。
未完待续。