paddle深度学习基础之优化算法

paddle深度学习基础之优化算法

前言

咱们前面通过优化损失函数,将之前按用的均方误差损失函数换成了最合适的交叉熵损失函数。这一节,咱们将在优化算法上进行讨论。

网络结构

img

关于学习率

学习率我们大家一定不陌生,就是优化算法中的参数learning_rate。这个我们之前的例子把它比作步长。

步长越小,我们下山的速度就越慢,也就是我们下到山底需要很长时间

步长越大,我们下山的速度就越快,但是我们很容易就一步跨过山底,到另一个山上。

img

​ 不同学习率(步长过大/过小)的示意图

所以,在我们进行模型调参的时候,可以通过设置不同的学习率,观察损失值的变化,来找到适合你这个模型的学习率。

学习率主流优化算法

img

  • SGD :随机梯度下降,每次从大量训练数据中抽取少量数据,这就会造成一种上下波动。但是总体方向都是朝着最小值走的。

  • Momentum:我们称之为动量梯度下降。什么意思呢,这个算法参照了物理学中的惯性。在物体前进的过程中,速度越块,惯性就越大,不容易收到其他方面的影响。比如篮球,重的篮球惯性大,更不容易受到手势的小幅变形或风吹的影响。引入这个概念是因为SGD在下降的过程中,会进行一定的波动。我们引入物理动量的概念,给梯度下降的过程加入一定的“惯性”累积,就可以减少更新路径上的震荡!即每次更新的梯度由“历史多次梯度的累积方向”和“当次梯度”加权相加得到。历史多次梯度的累积方向往往是从全局视角更正确的方向,这与“惯性”的物理概念很像,也是为何其起名为“Momentum”的原因。

  • AdaGrad :如果说上述是从梯度方向上的考量,那么这个算法是从学习率的大小来考量的。我们所希望的是,在梯度下降的前期,步长能够大一些,到快要接近最低点的时候,步长小一些。这个算法的思路就是 **根据不同参数距离最优解的远近,动态调整学习率。学习率逐渐下降,依据各参数变化大小调整学习率。**根据这个思想编写的优化算法称为“AdaGrad”,Ada是Adaptive的缩写,表示“适应环境而变化”的意思。

  • Adam :这个是算法不做过多解释,是将AdaGrad和Monmentum两个算法思路结合起来,也是我们现在应用的最广泛的算法。

代码实践

    #四种优化算法的设置方案,可以逐一尝试效果
    optimizer = fluid.optimizer.SGDOptimizer(learning_rate=0.01)
    #optimizer = fluid.optimizer.MomentumOptimizer(learning_rate=0.01)
    #optimizer = fluid.optimizer.AdagradOptimizer(learning_rate=0.01)
    #optimizer = fluid.optimizer.AdamOptimizer(learning_rate=0.01)

上述代码分别对应的就是上面咱们介绍的优化算法,大家可以一一尝试,找到适合自己模型的那一个算法。

分别对应的就是上面咱们介绍的优化算法,大家可以一一尝试,找到适合自己模型的那一个算法。

发布了87 篇原创文章 · 获赞 76 · 访问量 24万+

猜你喜欢

转载自blog.csdn.net/lzx159951/article/details/105255042