带动量的梯度下降

作者: 老居搞机 | 来源:发表于2020-03-09 12:20 被阅读0次

    上一期我们讲到了批量梯度下降(BGD)、随机梯度下降(SGD)以及小批量梯度下降(MBGD), 为了加快训练速度我们从GBD引入了SGD, 但是使用SGD之后又遇到了新的问题, 导致了梯度的方向来回震荡, 如图:

那如何尽量少走弯路, 减少梯度的来回震荡呢?

经过业界大牛们不懈的研究提出了很多改进的方法, 下面看一看比较流行的几种吧

Momentum

    Momentum的改进非常简单,参数的更新方向不仅由当前的梯度决定,也与此前累积的下降方向有关。这使得参数中那些梯度⽅向变化不大的维度可以加速更新,并减少梯度方向变化较大的维度上的更新幅度。由此产生了了加速收敛和减小震荡的效果

如果原来SGD的梯度下降是:

Momentum带入动量后:

引⼊入一个超参数β 衰减速率, 一般常用0.9效果最好

加入动量后梯度的变化, 震荡已经小了很多:

Adagrad

    SGD、Momentum都是以相同的学习率去更新θ的各个分量, 但是在深度学习模型中往往涉及大量的参数, 不同参数的更新频率又有所区别.

对于更新不频繁的参数,我们希望单次步长更大,多学习一些知识;对于更新频繁的参数,我们则希望步长较小,使得学习到的参数更稳定,不至于被单个样本影响太多, 这时候就出现了Adagrad了

步骤: Adagrad的梯度变化, 针对梯度取平方

α 学习率

ε 保证分母不为0的小常数, 如 1e-8

对梯度取平方为什么会有效果呢?我们看下图:

横轴代表参数θ1, 纵轴代表参数θ2

横轴θ1因为抖动小,所以dθ1的值很小,g1的值很小,最终与α相乘的值就会很大,θ1抖动变动大,在横轴就会前进的更快

纵轴θ2因为抖动大,所以dθ2的值很大,g2的值很大,最终与α相乘的值就会很小,θ2抖动变小,纵向的变化相对平缓

RMSprop

    RMSprop基本上就是在Adagrad基础上再加个动量了, 兼顾梯度动量和不同参数的步长

α 学习率

β 衰减速率

ε 保证分母不为0的小常数, 如 1e-8

Adam

    Momentum,RMSprop是很长时间来最经得住考验的优化算法,适合用于不同的深度学习结构。

这时候又有牛人脑洞大开了,何不将这俩方法结合到一起呢?

对的你没看错Adam就是前面Momentum+RMSprop的集合体, 而且结合以后效果真的更好了!

β1 一阶衰减速率 0.9

β2 二阶衰减速率 0.999

α 学习率 0.001

ε 保证分母不为0的小常数 1e-8

    最后我们看一下使用MNIST对几种梯度下降的评测效果, Adam确实拟合的效率更快, 这也就是为什么现在深度学习常用Adam作为优化器的原因吧

(部分图片来源于网络, 侵删)


关注公众号

相关文章

网友评论

    本文标题:带动量的梯度下降

    本文链接:https://www.haomeiwen.com/subject/bkscdhtx.html