深度学习笔记4-模型优化算法

「这里记录的是吴恩达 Andrew Ng 在深度学习课程中提到过的优化算法,以及其他受推荐的优化算法。以及日常感谢 Andrew Ng 的视频」

梯度下降的优化

1.指数加权平均

  • 引入概念

    在讲下面几个优化算法之前,先引出指数加权平均的概念。指数加权平均是一种简称,概念引自统计学中的指数加权移动平均 EWMA(Exponentially Weighted Moving Average)。

深度学习笔记4-模型优化算法_第1张图片

上面这张图是伦敦某一年的气温图,这张图看起来很凌乱,如果要计算趋势,也就是气温的局部平均值,或者说移动平均值,就需要这样做:先设定 v0=0,然后在后一天的计算中,v0 乘以 0.9 的加权数再加上 (1-0.9 )乘以当天温度 θ1,即:v1=0.9v0+(1-0.9)θ1,同理 v2=0.9v1+(1-0.9)θ2, v3=0.9v2+(1-0.9)θ3,......,vt=0.9vt-1+(1-0.9)θt,如此计算,用红线作图的话就能得到下图结果,这样就得到了气温的趋势,即移动平均值。

深度学习笔记4-模型优化算法_第2张图片

引入一个参数 β,计算公式可以表示为:vt = βvt-1+(1-β)θt
当 β=0.9 的时候,得到的是平均过去 1/(1-β)=10 天的气温值,如下图红线所示;极端一点,当 β=0.98 时,平均的是过去 1/(1-β)=50 天的气温值,如下图绿色所示;再取另一个极端,当 β=0.5 时,平均的是过去 1/(1-β)=2 天的气温值,如下图黄色线所示。

深度学习笔记4-模型优化算法_第3张图片

从图中可以看出绿色的线比较平滑,因为它多平均了几天的气温,波动就会比较小;缺点就是曲线较之前发生了平移,这是因为给了前一天很高的加权值,而后一天的加权值就相对较小了。从图中可以看出黄色的线波动很大,这是因为它才平均了两天的气温值,存在很大的噪音。

  • 理解指数加权平均

    1)列举几个式子:
    v100 = 0.9v99 + 0.1θ100
    v99 = 0.9v98 + 0.1θ99
    v98 = 0.9v97 + 0.1θ98
    ...
    2)层层带入后,得到下面的式子:
    v100 = 0.1 θ100 + 0.1×0.9 θ99 + 0.1×0.92 θ98 + 0.1×0.93 θ97 + ...
    这样的结果就相当于是拿每一天的气温数据和一个衰减的指数函数对应的每个元素相乘再相加的结果。其中每项气温数据前的系数是成指数衰减的,所以称为指数加权平均,且每项气温数据前的系数之和接近于1。之前的计算平均的气温天数的公式为 1/(1-β),是从 β1/(1-β)≈1/e 这个式子中得出的。也就是说,当 β 取 0.9 的时候,10 天之后加权系数下降到最先系数的三分之一(1/e ,e≈2.7)

  • 指数加权平均的偏差修正

    在实际计算过程中,会得到如下图紫色的加权平均线,在曲线的初期阶段会和绿色的线存在偏差。可以用公式 vt / (1 - βt) 来修正。

深度学习笔记4-模型优化算法_第4张图片

2.Momentum

Momentum,也称为动量梯度下降法,是一种快于标准梯度下降法的一种算法。Momentum 所采用的方法就是应用上面提到的的指数加权平均来计算梯度的指数加权平均,并利用这个梯度来更新权重和偏置。


深度学习笔记4-模型优化算法_第5张图片

在上面这张图中,椭圆形状代表损失函数,中间的红点表示最小值,标准的梯度下降(如蓝线所示),一步步更新上下摆动到接近于最小值,正是因为这样的上下摆动拖慢了到达最小值附近的速度,也防止我们应用较大的学习速率。如果采用较大的学习速率,摆动就会超出函数的范围(如紫色线所示)。所以要采取的策略就是使垂直方向上的学习速度减慢,使水平方向上的学习速度加快。Momentum 就是这样的一种策略。

具体做法是:

  • 初始化 vdw=0,vdb=0 (维数与 w,b 保持一致)

    在t次迭代中:

    • 计算 dw,db;
    • 然后应用上面的指数加权平均的公式计算 vdw=βvdw+(1-β)dw, 也就是 dw 的平均数;同理计算 db的平均数 vdb=βvdb+(1-β)db
    • 最后更新权重 w = w-αvdw 和偏置 b = b-αvdb ,这里不需要使用偏差修正。

采用 Momentum 能够使垂直方向上的学习变慢的原因是计算上下摆动的平均值,平均过程中垂直方向上正负值抵消,最后可以使平均值接近于 0。能够说明水平方向上加快是因为计算的所有的微分都指向水平方向的右侧,结果计算的横轴的平均值依然很大。最后在几次迭代后就能够快速的到达最小值附近(如上图红线所示)

3.RMSprop

还有一个算法叫做 RMSprop,全称是 root mean square prop,也是一种能加快梯度下降的算法。策略也是在垂直方向上减慢学习速度,在水平方向上则加快学习速度。实行过程与 Momentum 相似,但有一点差异。

具体做法是:

  • 初始化 sdw=0,sdb=0 (维数与 w,b 保持一致)

    在t次迭代中:

    • 计算 dw,db;
    • 应用上面的指数加权平均的公式计算 sdw=βsdw+(1-β)dw2; 同理计算 sdb=βsdb+(1-β)db2
    • 最后更新权重 w = w-αdw/sqrt(sdw+ε) 和偏置 b = b-αdb/sqrt(sdb+ε)
      (常用 ε=10-8, 加上 ε 是防止分母为零的情况出现)

4.Adam

Adam 基本上就是结合了 Momentum 和 RMSprop 这两种算法。全称是 Adaptive Moment Estimation。

具体做法是:

  • 初始化 vdw=0,vdb=0,sdw=0,sdb=0 (维数与 w,b 保持一致)
    在t次迭代中:
    • 计算 dw,db;

    • 计算 vdw1vdw+(1-β1)dwvdb1vdb+(1-β1)db

    • 计算 sdw2sdw+(1-β2)dw2sdb2sdb+(1-β2)db2

    • 对 vdw,vdb 进行偏差修正:
      vdwcorrected=vdw/(1-β1)vdbcorrected=vdb/(1-β1)

    • 对 sdw,sdb 进行偏差修正:
      sdwcorrected=vdw/(1-β2)sdbcorrected=sdb/(1-β2)

    • 最后更新权重和偏置:
      w = w-αdw/sqrt(sdwcorrected+ε)b = b-αdb/sqrt(sdbcorrected+ε)
      (常用 ε=10-8, 加上 ε 是防止分母为零的情况出现)

对于超参数的选择:

  • α:学习速率一直很重要,需要不断地调试
  • β1:一般使用 0.9,当做缺省值使用
  • β1:Adam论文的作者推荐使用 0.999,当做缺省值使用
  • ε:不是特别重要的参数,并不会影响算法的结果,也不用去调试它,Adam 论文的作者建议使用 10-8

你可能感兴趣的:(深度学习笔记4-模型优化算法)