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

时间:2022-04-23
本文章向大家介绍DeepLearning.ai学习笔记(二)改善深层神经网络:超参数调试、正则化以及优化--Week2优化算法,主要内容包括1. Mini-batch梯度下降法、算法步骤、2. 理解mini-batch梯度下降法、3. 指数加权平均、4. 理解指数加权平均、5. 指数加权平均的偏差修正、6. 动量梯度下降法、7. RMSprop、8. Adam优化算法、9. 学习率衰减、10. 局部最优问题、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。

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^{(5000)}})

算法步骤

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

  • 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)}))

如图示,蓝色收敛曲线表示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)

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

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

(V_0=0)

(V_1=β*V_0+(1-β)θ_1)

(……)

(V_t=β*V_{t-1}+(1-β)θ_t)

上面的(θ_t)表示第t天的温度,β是可调节的参数,(V_t)表示(frac{1}{1-β})天的每日温度。

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

4. 理解指数加权平均

我们将上面的公式(V_t=β*V_{t-1}+(1-β)θ_t)展开可以得到 (假设β=0.9)

[V_t=0.1θ_t+0.1*0.9θ_{t-1}+0.1*0.9^2θ_{t-2}+…]

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

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

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

首先我们假设的是(β=0.98, V_0=0),然后由(V_t=βV_{t-1}+(1-β)θ_t)可知

(V_1=0.98V_0+0.02θ_1=0.02θ_1)

(V_2=0.98V_1+0.02θ_2=0.0196θ_1+0.02θ_2)

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

[V_t=frac{βV_{t-1}+(1-β)θ_t}{1-β^t}]

注意!!!上面公式中的 (V_{t-1})是未修正的值

为方便说明,令(β=0.98,θ_1=40℃,θ_2=39℃),则

当(t=1,θ_1=40℃)时,(V_1=frac{0.02*40}{1-0.98}=40),哇哦~有没有很巧的感觉,再看 当(t=2,θ_2=39℃)时,(V_2=frac{0.98*V_{t-1}+0.02*θ_2}{1-0.98^2}=frac{0.98*(0.02*θ_1)+0.02*39}{1-0.98^2}=39.49)

所以,记住你如果直接用修正后的(V_{t-1})值代入计算就大错特错了

6. 动量梯度下降法

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

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

Momentum算法的第t次迭代:

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

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

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

7. RMSprop

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

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

在第t次迭代:

  • 计算该次mini-batch的dw,db
  • (S_{dw}=βS_{dw}+(1-β)dw^2) (S_{db}=βS_{db}+(1-β)db^2)
  • (w:=w-αfrac{dw}{sqrt{S_{dw}}}) (b:=b-αfrac{db}{sqrt{S_{db}}})

收敛效果(原谅色)

8. Adam优化算法

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

  • 初始化(V_{dw}=0,V_{db}=0,S_{dw}=0,S_{dw}=0)
  • 在第t次迭代
    • 计算出dw,db
    • (V_{dw}=β_1V_{dw}+(1-β_1)dw),(V_{db}=β_1V_{db}+(1-β_1)db) (S_{dw}=β_2S_{dw}+(1-β_2)dw^2),(S_{db}=β_2S_{db}+(1-β_2)db^2)
    • (V_{dw}^{corrected}=frac{V_{dw}}{1-β_1^t}),(V_{db}^{corrected}=frac{V_{db}}{1-β_1^t}) (S_{dw}^{corrected}=frac{S_{dw}}{1-β_2^t}),(S_{db}^{corrected}=frac{S_{db}}{1-β_2^t})
    • (W=W-αfrac{V_{dw}^{corrected}}{sqrt{S_{dw}^{corrected}}+ε}),(b=b-αfrac{V_{db}^{corrected}}{sqrt{S_{db}^{corrected}}+ε})

该算法中的超参数有(α,β_1,β_2,ε),一般来说(β_1=0.9,β_2=0.999,ε=10^{-8})

9. 学习率衰减

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

  • Learning rate decay

[α=frac{1}{1+decay_rate*epoch_num}α_0]

decay_rate:衰减率 epoch_num: 迭代次数

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

Epoch

α

1

0.1

2

0.067

3

0.05

……

……

  • 其他衰减算法
    • 指数衰减:(α=0.9^{epoch_num}α_0)
    • (α=frac{K}{sqrt{epoch_num}}α_0)或(α=frac{k}{t}α_0)(这个t表示mini-batch的第t组数据)
    • 离散衰减,每次迭代后变为上一次迭代的一半。

10. 局部最优问题

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

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

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

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