zoukankan      html  css  js  c++  java
  • DeepLearning.ai学习笔记(二)改善深层神经网络:超参数调试、正则化以及优化--Week2优化算法

    转载自https://www.cnblogs.com/marsggbo/p/7577362.html

    1. Mini-batch梯度下降法

    介绍

    假设我们的数据量非常多,达到了500万以上,那么此时如果按照传统的梯度下降算法,那么训练模型所花费的时间将非常巨大,所以我们对数据做如下处理:

    如图所示,我们以1000为单位,将数据进行划分,令x{1}={x(1),x(2)x(5000)}, 一般地用x{t},y{t}来表示划分后的mini-batch。

    注意区分该系列教学视频的符号标记:

    • 小括号() 表示具体的某一个元素,指一个具体的值,例如x(i)

    • 中括号[] 表示神经网络中的某一层,例如Z[l]

    • 大括号{} 表示将数据细分后的一个集合,例如x{1}={x(1),x(2)x(1000)}

    算法步骤


    假设我们有5,000,000个数据,每1000作为一个集合,计入上面所提到的x{1}={x(1),x(2)x(1000)},

    • 1)所以需要迭代运行5000次神经网络运算。
    for i in range(5000):
    • 2)每一次迭代其实与之前笔记中所提到的计算过程一样,首先是前向传播,但是每次计算的数量是1000

    • 3)计算损失函数,如果有正则化,则记得加上正则项
    • 4)反向传播

    注意,mini-batch相比于之前一次性计算所有数据不仅速度快,而且反向传播需要计算5000次,所以效果也更好。

    2. 理解mini-batch梯度下降法

    如上面所提到的,我们以1000位单位对数据进行划分,但是这只是为了更方便说明问题才这样划分的,那么我们在实际操作中应该如何划分呢?

    首先考虑两个极端情况:

    • mini-batch size = m
      此时即为Batch gradient descent(x{t},y{t})=(X,Y)

    • mini-batch size = 1
      此时即为Stochastic gradient descent(x{t},y{t})=(x(i),y(i))(x{t},y{t})=(x(i),y(i))

    如图示,蓝色收敛曲线表示mini-batch size=m,比较耗时,但是最后能够收敛到最小值;而紫色收敛曲线表示mini-batch size=1,虽然速度可能较快,但是收敛曲线十分曲折,并且最终不会收敛到最小点,而是在其附近来回波动。

    说了这么多,那么mini-batch size该如何选择呢?以下是选择的原则:

    • 如果数据量比较小(m<2000),可以使用batch gradient descent。一般来说mini-batch size取2的次方比较好,例如64,128,256,512等,因为这样与计算机内存设置相似,运算起来会更快一些。

    3. 指数加权平均

    为了理解后面会提到的各种优化算法,我们需要用到指数加权平均,在统计学中也叫做指数加权移动平均(Exponentially Weighted Moving Averages)

    首先我们假设有一年的温度数据,如下图所示


    我们现在需要计算出一个温度趋势曲线,计算方法如下:

    V0=0

    V1=βV0+(1β)θ1

    ……

    Vt=βVt1+(1β)θt

    上面的θtθt表示第t天的温度,β是可调节的参数,Vt表示11β天的每日温度。

    • β=0.9时,表示平均了过去十天的温度,且温度趋势曲线如图中红线所示

    • β=0.98时,表示平均了过去50天的温度,温度趋势曲线如图中绿线所示。此时绿线相比较红线要平滑一些,是因为对过去温度的权重更大,所以当天天气温度的影响降低,在温度变化时,适应得更缓慢一些。

    • β=0.5时,温度趋势曲线如图中黄线所示

    4. 理解指数加权平均

    我们将上面的公式Vt=βVt1+(1β)θt展开可以得到
    (假设β=0.9)

    Vt=0.1θt+0.10.9θt1+0.10.92θt2+

    可以看到在计算第t天的加权温度时,也将之前的温度考虑进来,但是都有一个衰减因子β,并且随着天数的增加,衰减幅度也不断增加。(有点类似于卷积计算)

    5. 指数加权平均的偏差修正

    为什么需要修正呢?我们仔细分析一下就知道了

    首先我们假设的是β=0.98,V0=0,然后由Vt=βVt1+(1β)θt可知

    V1=0.98V0+0.02θ1=0.02θ1

    V2=0.98V1+0.02θ2=0.0196θ1+0.02θ2

    假设θ1=40,那么V1=0.0240=0.8,这显然相差太大,同理对于后面的温度的计算也只会是变差越来越大。所以我们需要进行偏差修正,具体方法如下:

    Vt=βVt1+(1β)θt1βt

    注意!!!上面公式中的 Vt1是未修正的值

    为方便说明,令β=0.98,θ1=40,θ2=39,则

    t=1,θ1=40时,V1=0.024010.98=40,哇哦~有没有很巧的感觉,再看
    t=2,θ2=39时,V2=0.98Vt1+0.02θ210.982=0.98(0.02θ1)+0.023910.982=39.49

    所以,记住你如果直接用修正后的Vt1值代入计算就大错特错了

    6. 动量梯度下降法

    首先介绍一下一般的梯度算法收敛情况是这样的


    可以看到,在前进的道路上十分曲折,走了不少弯路,在纵向我们希望走得慢一点,横向则希望走得快一点,所以才有了动量梯度下降算法

    Momentum算法的第t次迭代:

    • 计算出dw,db
    • 这个计算式子与上一届提到的指数加权平均有点类似,即
      Vdw=βVdw+(1β)dw
      Vdb=βVdb+(1β)db
    • W=WαVdw,b=bαVdb

    最终得到收敛的效果如下图的红色曲线所示。

    该算法中涉及到的超参数有两个,分别是 αβ,其中一般β=0.9是比较常取的值。

    7. RMSprop

    该算法全称叫Root Mean Square Prop(均方根传播)

    这一节和上一节讲的都比较概括,不是很深入,所以就直接把算法记录下来吧。

    在第t次迭代:

    • 计算该次mini-batch的dw,db
    • Sdw=βSdw+(1β)dw2
      Sdb=βSdb+(1β)db2
    • w:=wαdwSdw√
      b:=bαdbSdb√

    收敛效果(原谅色)

    8. Adam优化算法

    Adam其实是MomentumRMSprop两个算法的结合,具体算法如下:

    • 初始化Vdw=0,Vdb=0Sdw=0Sdw=0
    • 在第t次迭代
      • 计算出dw,db
      • Vdw=β1Vdw+(1β1)dw,Vdb=β1Vdb+(1β1)db
        Sdw=β2Sdw+(1β2)dw2,Sdb=β2Sdb+(1β2)db2
      • Vcorrecteddw=Vdw1βt1Vdwcorrected=Vdw1−β1t,Vcorrecteddb=Vdb1βt1Vdbcorrected=Vdb1−β1t
        Scorrecteddw=Sdw1βt2Sdwcorrected=Sdw1−β2t,Scorrecteddb=Sdb1βt2Sdbcorrected=Sdb1−β2t
      • W=WαVcorrecteddwScorrecteddw√+εW=W−αVdwcorrectedSdwcorrected+ε,b=bαVcorrecteddbScorrecteddb√+εb=b−αVdbcorrectedSdbcorrected+ε

    该算法中的超参数有α,β1,β2,εα,β1,β2,ε,一般来说β1=0.9,β2=0.999,ε=108β1=0.9,β2=0.999,ε=10−8

    9. 学习率衰减

    之前算法中提到的学习率α都是一个常数,这样有可能会一个问题,就是刚开始收敛速度刚刚好,可是在后面收敛过程中学习率偏大,导致不能完全收敛,而是在最低点来回波动。所以为了解决这个问题,需要让学习率能够随着迭代次数的增加进行衰减,常见的计算公式有如下几种:

    • Learning rate decay
    α=11+decayrateepochnumα0α=11+decayrate∗epochnumα0

    decay_rate:衰减率
    epoch_num: 迭代次数

    举个栗子:
    假设α0α0初始化为0.2,decay_rate=1,则α的衰减过程如下:

    Epochα
    1 0.1
    2 0.067
    3 0.05
    …… ……
    • 其他衰减算法
      • 指数衰减:α=0.9epochnumα0α=0.9epochnumα0
      • α=Kepochnum√α0α=Kepochnumα0或α=ktα0α=ktα0(这个t表示mini-batch的第t组数据)
      • 离散衰减,每次迭代后变为上一次迭代的一半。

    10. 局部最优问题


    图左中有很多局部最优点。
    图右用青色标记出来的点称为鞍点(saddle point),因为和马鞍相似,所以称为鞍点。

    鞍点相比于局部最优点要更加棘手,因为从横向上看似乎是最低点,但是纵向上看却不是最低点,所以收敛过程有点缓慢,原因如下:


    横向收敛只能沿着红线方向收敛,直到鞍点,而到了鞍点后才能往两边收敛,所以收敛的比较缓慢。

    但是momentumAdam等算法因为能够加速学习,所以收敛速率更快,能够更快地收敛。

  • 相关阅读:
    .VC中的Attach和Detach
    virtual void DrawItem(LPDRAWITEMSTRUCT /*lpDrawItemStruct*/);
    用API OleLoadPicture通过IStream来加载JPG、GIF格式的图片
    .OnNcHitTest
    线性规划与网络流24题索引
    线性规划与网络流24题 17运输问题
    网络流24题 21最长k可重区间集问题
    网络流16数字梯形问题
    网络流24题 20深海机器人问题
    网络流24题 19负载平衡问题
  • 原文地址:https://www.cnblogs.com/scarlett-ma/p/8616412.html
Copyright © 2011-2022 走看看