常用优化方法总结

本篇博文总结一些常用的优化算法。

梯度下降法

最常见的优化方法是SGD ,基础的原理不详细讲了,讲下其缺陷。
从泰勒公式的角度来看,梯度下降法将f(x) 展开到了一阶。

θ=θηθJ(θ)

1. 当学习率太小,到达最优点会很慢。
2. 当学习率太高,可能会跳过最优点,出现震荡的现象。
3. 可能会陷入局部最优。
3. 如果输入样本的不同特征的大小差别很大,the feature have different scale,则优化时会很慢,其原因为什么要对特征进行缩放(归一化)
常用优化方法总结

牛顿法

牛顿法用于方程求解(也称切线法)

f(x) 进行一阶泰勒公式展开:

f(x)f(x0)+f(x0)(xx0)

此时,将非线性方程 f(x)=0 近似为线性方程:
f(x0)+f(x0)(xx0)=0

f(x)0,则下一次迭代解为:
xk+1=xkf(xk)f(xk)

在多元函数中,f(xk) 称为雅克比矩阵。
常用优化方法总结
故牛顿迭代又称切线法。

牛顿法用于函数最优化求解

f(x) 按照泰勒公式展开到二阶得:

f(x)=f(x0)+(xx0)f(x0)+12(xx0)2f(x0)

我们希望f(x) 能取得极小值,那么必有f(x)=0,我们对右式中的x 求导可得:

f(x0)+(xx0)f(x0)=0

xx0=f(x0)f(x0)

xn+1=xnf(xn)f(xn)

从本质上去看,牛顿法是二阶收敛,梯度下降是一阶收敛,所以牛顿法就更快。如果更通俗地说的话,比如你想找一条最短的路径走到一个盆地的最底部,梯度下降法每次只从你当前所处位置选一个坡度最大的方向走一步,牛顿法在选择方向时,不仅会考虑坡度是否够大,还会考虑你走了一步之后,坡度是否会变得更大。所以,可以说牛顿法比梯度下降法看得更远一点,能更快地走到最底部。(牛顿法目光更加长远,所以少走弯路;相对而言,梯度下降法只考虑了局部的最优,没有全局思想。)根据wiki上的解释,从几何上说,牛顿法就是用一个二次曲面去拟合你当前所处位置的局部曲面,而梯度下降法是用一个平面去拟合当前的局部曲面,通常情况下,二次曲面的拟合会比平面更好,所以牛顿法选择的下降路径会更符合真实的最优下降路径。

在多元函数中:

xn=xn1(2f(xn1))1f(xn1)

这里我们可以看到需要求2f(xn1)海森矩阵),是一个多元函数的二阶导数构成的方阵,描述了函数的局部曲率。
常用优化方法总结

Momentum Optimization

m=βm+ηθJ(θ)

θ=θm

在这里梯度作为一个累积量,β 作为超参数可以看做一个动量,要记忆之前百分之多少的梯度,取0-1之间。

  • Momentum Optimization 相比SGD 能更快的脱离平原地带(梯度变化很小)。
  • 从公式上看可以理解为一种指数加权平均,越近的梯度权重越大,对当前步的影响越大。
  • 即使 the feature have different scale,他也能很快的到达最优点,在神经网络里面,如果用这种优化方式,则可以不用Batch_normalization
  • 当梯度方向改变时,能抑制震荡,加速收敛。
  • 不好的地方就是增加了一个需要调节的超参数 β。通常取0.9。

Nesterov Accelerated Gradient

m=βm+ηθJ(θ+βm)

θ=θm

Momentum Optimization 的改进版本,可以从公式看出,只是修改了一点点,其costFunction 加入了之前的梯度累计。在实际实验中,几乎总是比Momentum Optimization 更快的到达最优点。

常用优化方法总结

并且减少了震荡的现象。

AdGrad

s=s+θJ(θ)θJ(θ)

θ=θηθJ(θ)s+ϵ

点乘, 点除。
ϵ 是平滑项,防止出现除零的情况。

该优化方法有以下特点:

  • 自适应的调整学习率η
  • 也能很好的处理the feature have different scale
    常用优化方法总结
    该方法的主要优点就是,在训练的前期,模型的学习速度会比较快,比较快的到达最优点附近,为了不越过最优点,在训练的后期,学习速度降低,慢慢低近最优点,但是可能会出现早停现象。

但是有一个很大的不足,在用该方法优化深度网络时,可能会出现早停的情况,也就是还没达到最优点,学习就停止了,学习率降低的太大。所以一般来说,不用该方法来训练深度神经网络。

RMSProp

修改了AdGrad 中对学习速率的约束,避免早停现象。

s=βs+(1β)θJ(θ)θJ(θ)

θ=θηθJ(θ)s+ϵ

相对于AdGrad 算法那样暴力直接的累加平方梯度,RMSProp 加了一个衰减系数来控制历史信息的获取多少,可以避免早停现象。见下:

s=βs+(1β)θJ(θ)θJ(θ)

其也是指数加权平均的方式来累计梯度,可以设想,当存在多参数时,不同的参数拥有不同的梯度,也即有不同的学习速率。起到的效果是在参数空间更为平缓的方向,会取得更大的进步(因为平缓,所以历史梯度平方和较小,对应学习下降的幅度较小),并且能够使得陡峭的方向变得平缓,从而加快训练速度。具体原因请看RMSProp

该方法好过上面所有讲的方法,在Adam Optimization 出来之前,该方法是最被推荐的方法。

Adam Optimization

常用优化方法总结

显然,计算m 时,保存了Momentum 的下坡属性,计算s 时结合了AdGrad 对学习速率的约束,然后在参数更新时把mv 都考虑进去,实验证明该方法在大多数时候能又快又好的到达目标,很快的收敛。
并且该方法能很好的处理存在 L1 正则项的优化。
T 指训练的轮数,从1开始计。

该方法现在是最常用的优化算法。

未完待续。