深度学习(8):Momentum RMSprop Adam 学习率衰减

指数加权平均

对于一个序列a[1],a[2]…a[3]
我们定义一个数组v[], 其中
v[0]=0
v[i]= beta*v[i-1] + (1-beta)*a[i]
这个v就叫做a的指数加权平均值
可以直观的理解为v[i]代表着a[i]之前的1/(1-beta)组数据的平均值,例如beta为0.9时,v[n]近似代表着v[n-9]-v[n]的平均值

然而我们可以发现,由于v[0]=0,导致在计算初期,我们的平均值是不准确的,例如v[1]和a[1]差了(1-beta)倍。
因此我们想到对其进行偏差修正
v_correct[i] = v[i]/(1-betai)
可以看到,初始时1/(1-betai)起到修正效果。当i逐渐增大时,滑动平均值已经趋于准确,而此时的1/(1-betai)也恰好接近于1。

Momentum梯度下降法

对于简单的梯度下降法我们如下更新参数:
w = w - dw*learning_rate

在Momentum梯度下降法中我们令vdw代表dw的指数加权平均值:
w = w - vdw*learning_rate

这样做的好处是:对于简单的梯度下降法,在训练参数时可能出现这样的情况:
深度学习(8):Momentum RMSprop Adam 学习率衰减_第1张图片
在训练的过程中参数变化会产生抖动,在某一维上反复横跳。
而采用指数加权平均值的方式,可以中和抖动,进而提升
收敛速度(如下图红线)
深度学习(8):Momentum RMSprop Adam 学习率衰减_第2张图片

RMSprop

还是观察上面的图片,对于简单的梯度下降法,我们出现抖动的原因是:对于某一个维度,它的导数值过分的大导致梯度下降在该维度产生了不必要的位移,在下一次迭代中又要返回。
因此我们想到,如果某一维的偏导数过大,则缩小该维度的更新速度。
对于每一个w,构造其偏导数平方dw2的指数加权移动平均值sdw。按照下列规则更新参数。
w = w - dw*learning_rate/sqrt(sdw)
如果某一维的偏导数过大,则其滑动平均值sdw也会很大,这样1/sqrt(sdw)就会缩小其更新速度,从而避免了反复折返,提升了模型的收敛速度。

Adam优化算法

Adam是以上两种算法的结合,继承了两方面的优点
更新参数规则如下:
w = w - vdw*learning_rate/sqrt(sdw)

学习率衰减

在模型训练初期,我们希望学习率稍微大一点以提升收敛速度。而训练一段时间后,我们的模型会在最低点左右徘徊,因此此时需要小一点的学习率以保证我们能够接近最低点。面对这种要求,产生了学习率衰减。
常见公式有:

learning_rate=1/(1+decay_rate*epoch_num)
这里的decay_rate是一个超参数,能够控制衰减速率,epoch_num代表完整训练所有数据集X的轮数。

learning_rate=k/sqrt(epoch_num)

以及各种离散型衰减函数。

可以看到随着训练轮数的增加,这些方法的学习率都在减小。

局部最优解的讨论

在梯度下降训练过程中,我们最害怕陷入局部最优解的情况,导致我们的模型永远找不到最小的代价函数点
深度学习(8):Momentum RMSprop Adam 学习率衰减_第3张图片
在本图中,有很多极小值点,但只有一个最小值点

然而面对高维输入的情况时,我们往往不会遇到极小值点,而是会遇到鞍点(很难遇到各个维度上凹凸一致的情况):
深度学习(8):Momentum RMSprop Adam 学习率衰减_第4张图片
因此局部最优解往往不成问题。可怕的是局部平坦的情况(局部导数值一直很小,难以走出平坦区域)
深度学习(8):Momentum RMSprop Adam 学习率衰减_第5张图片
往往利用Adam就可以轻松应对这种情况。

你可能感兴趣的:(深度学习笔记,深度学习,机器学习,人工智能)