吴恩达-deep learning 02.改善深层神经网络:优化算法 (Optimization algorithms)Week2

上一周介绍了如何建立一个实用的深度学习神经网络。包括:

  • Train/Dev/Test sets的比例选择,Bias和Variance的概念和区别:Bias对应欠拟合,Variance对应过拟合。
  • 防止过拟合的两种方法:L2 regularization和Dropout;如何进行规范化输入,以加快梯度下降速度和精度。
  • 梯度消失和梯度爆炸的概念和危害,提出使用梯度初始化来降低这种风险。
  • 梯度检查,来验证梯度下降算法是否正确。

本周将继续讨论深度神经网络中的一些优化算法,通过使用这些技巧和方法来提高神经网络的训练速度和精度。


2.1 Mini-batch 梯度下降(Mini-batch gradient descent)

  1. 问题提出
    前一章神经网络训练是对所有样本 m m m,称为batch,通过向量化计算方式,同时进行,我们将这种梯度下降算法称为Batch Gradient Descent。当 m m m很大(达到百万数量级),训练速度往往会很慢(因为每次迭代都要对所有样本进行求和运算和矩阵运算)。

    为了解决这一问题,我们可以把 m m m个训练样本分成若干个子集,称为 m i n i − b a t c h e s mini-batches minibatches,这样每个子集包含的数据量就小了,每次在单一子集上进行神经网络训练,速度就会大大提高。这种梯度下降算法叫做Mini-batch Gradient Descent

  2. 字母上标含义

    • X ( i ) \color{red}X^{(i)} X(i)上标为小括号,表示第 i i i个样本
    • Z [ l ] \color{red}Z^{[l]} Z[l]上标为中括号,表示神经网络第 l l l层网络的输出
    • X { t } , Y { t } \color{red}X^{\{t\}},Y^{\{t\}} X{t},Y{t}上标为大括号,表示第 t t t组mini-batch的样本和标签
  3. min-batch Gradient Descent 实例

    • 假设训练样本个数 m = 5000000 m=5000000 m=5000000,其维度为 ( n x , m ) (n_x,m) (nx,m)。将其分成5000个子集,每个mini-batch含有1000个样本。

      每个mini-batch记为 X { t } \color{red}X^{\{t\}} X{t},其维度为 ( n x , 1000 ) (n_x,1000) (nx,1000)。相应的每个 m i n i − b a t c h mini-batch minibatch的标签记为 Y { t } \color{red}Y^{\{t\}} Y{t},其维度为 ( 1 , 1000 ) (1,1000) (1,1000),则 t = 1 , 2 , ⋯   , 5000 t=1,2,\cdots,5000 t=1,2,,5000

    • Mini-batches Gradient Descent的实现过程:先将总的训练样本分成 T T T个子集(mini-batches),然后对每个mini-batch进行神经网络训练,包括a. Forward Propagation,b. Compute Cost Function,c. Backward Propagation , d. 更新 W [ l ] W^{[l]} W[l] d [ l ] d^{[l]} d[l],循环至 T T T个mini-batch都训练完毕。如下公式所示:
      f o r    t = 1 , ⋯   , T      a . F o r w a r d   P r o p a g a t i o n   o n   X { t } :         { z [ 1 ] = W [ 1 ] X { t } + b [ 1 ]           A [ 1 ] = g [ 1 ] ( Z [ 1 ] )             ⋮           A [ L ] = g [ L ] ( Z [ L ] ) }      b . C o m p u t e    C o s t    F u n c t i o n   o f   X { t } ,   Y { t } :         { J { t } = 1 1000 ∑ i = 1 l L ( y ^ ( i ) , y ( i ) ) + λ 21000 ∑ l ∣ ∣ w [ l ] ∣ ∣ F 2 }      c . B a c k w a r d    P r o p a g a t i o n   o f   J { t }      d . 更新 W [ l ] : = W [ l ] − α ⋅ d W [ l ]      e . 更新 b [ l ] : = b [ l ] − α ⋅ d b [ l ] \begin{array}{l} for\ \ t=1,\cdots,T\\ \ \ \ \ a. Forward\ Propagation\ on\ X^{\{t\}}:\\ \ \ \ \ \ \ \ \{ z^{\lbrack 1\rbrack} =W^{\lbrack 1\rbrack}X^{\{t\}} + b^{\lbrack 1\rbrack}\\ \ \ \ \ \ \ \ \ \ A^{[1]} =g^{[1]}(Z^{[1]})\\ \ \ \ \ \ \ \ \ \ \ \ \vdots\\ \ \ \ \ \ \ \ \ \ A^{\lbrack L\rbrack} = g^{\left\lbrack L \right\rbrack}(Z^{\lbrack L\rbrack})\}\\ \ \ \ \ b. Compute\; Cost\; Function\ of \ X^{\{t\}},\ Y^{\{t\}}:\\ \ \ \ \ \ \ \ \{ J^{\{t\}} = \frac{1}{1000}\sum_{i = 1}^{l}{L(\hat y^{(i)},y^{(i)})} +\frac{\lambda}{2 1000}\sum_{l}^{}{||w^{[l]}||}_{F}^{2}\}\\ \ \ \ \ c. Backward\; Propagation\ of\ J^{\{t\}}\\ \ \ \ \ d. \text{更新} W^{[l]}:=W^{[l]}-\alpha\cdot dW^{[l]}\\ \ \ \ \ e. \text{更新} b^{[l]}:=b^{[l]}-\alpha\cdot db^{[l]}\end{array} for  t=1,,T    a.Forward Propagation on X{t}:       {z[1]=W[1]X{t}+b[1]         A[1]=g[1](Z[1])                    A[L]=g[L](Z[L])}    b.ComputeCostFunction of X{t}, Y{t}:       {J{t}=10001i=1lL(y^(i),y(i))+21000λlw[l]F2}    c.BackwardPropagation of J{t}    d.更新W[l]:=W[l]αdW[l]    e.更新b[l]:=b[l]αdb[l]
      经过 T T T次循环之后,所有 m m m个训练样本都进行了梯度下降计算。这个过程,我们称之为经历了一个 e p o c h epoch epoch
  4. 如何从训练集(X, Y)构建mini-batch GD

    • Shuffle(洗牌):
      在这里插入图片描述
    • Partition(划分):
      在这里插入图片描述
  5. T i p \color{red}Tip Tip:
    1. 对于Batch Gradient Descent而言,一个epoch只进行一次梯度下降算法;而Mini-Batches Gradient Descent,一个epoch会进行 T T T次梯度下降算法。
    2. 对于Mini-Batches Gradient Descent,可以进行多次epoch训练。而且,每次epoch,最好是将总体训练数据重新打乱、重新分成 T T T组mini-batches,这样有利于训练出最佳的神经网络模型。


2.2 理解mini-batch梯度下降法(Understanding mini-batch gradient descent)

  1. 从cost function 角度理解
    Batch gradient descent和Mini-batch gradient descent的cost function曲线如下图所示:
    在这里插入图片描述
    • 左图:对于一般的神经网络模型,使用Batch gradient descent,随着迭代次数增加,cost function是不断减小的。
    • 右图:使用Mini-batch gradient descent,随着在不同的mini-batch上迭代训练,其cost function不是单调下降,出现振荡。但整体的趋势是下降的,最终也能得到较低的cost function值。

    之所以出现细微振荡的原因是不同的mini-batch之间是有差异的。例如可能第一个子集 ( X { 1 } , Y { 1 } ) (X^{\{1\}},Y^{\{1\}}) (X{1},Y{1})是好的子集,而第二个子集 ( X { 2 } , Y { 2 } ) (X^{\{2\}},Y^{\{2\}}) (X{2},Y{2})包含了一些噪声noise。出现细微振荡是正常的。

  2. 如何选择mini-batch size
    • 极端:

      • 如果mini-batch size= m \color{red}m m((Batch) Gradient Descent),只包含一个子集为 ( X { 1 } , Y { 1 } ) = ( X , Y ) (X^{\{1\}},Y^{\{1\}})=(X,Y) (X{1},Y{1})=(X,Y)

        X = data_input
        Y = labels
        parameters = initialize_parameters(layers_dims)
        for i in range(0, num_iterations):
            # Forward propagation
            a, caches = forward_propagation(X, parameters)
            # Compute cost.
            cost = compute_cost(a, Y)
            # Backward propagation.
            grads = backward_propagation(a, caches, parameters)
            # Update parameters.
            parameters = update_parameters(parameters, grads)
        
      • 如果mini-batch size= 1 \color{red}1 1(Stochastic Gradient Descent),每个样本就是一个子集 ( X { 1 } , Y { 1 } ) = ( x ( i ) , y ( i ) ) (X^{\{1\}},Y^{\{1\}})=(x^{(i)},y^{(i)}) (X{1},Y{1})=(x(i),y(i)),共有 m m m个子集。

        X = data_input
        Y = labels
        parameters = initialize_parameters(layers_dims)
        for i in range(0, num_iterations):
            for j in range(0, m):
                # Forward propagation
                a, caches = forward_propagation(X[:,j], parameters)
                # Compute cost
                cost = compute_cost(a, Y[:,j])
                # Backward propagation
                grads = backward_propagation(a, caches, parameters)
                # Update parameters.
                parameters = update_parameters(parameters, grads)
        

        Note also that implementing SGD requires 3 for-loops in total:

        1. Over the number of iterations
        2. Over the m m m training examples
        3. Over the layers (to update all parameters, from ( W [ 1 ] , b [ 1 ] ) (W^{[1]},b^{[1]}) (W[1],b[1]) to ( W [ L ] , b [ L ] ) (W^{[L]},b^{[L]}) (W[L],b[L]))
      • Stochastic Gradient Descent(Batch) Gradient Descent 比较
        在这里插入图片描述

        • Stachastic gradient descent每次前进速度很快,但是路线曲折,有较大的振荡,最终会在最小值附近来回波动,难以真正达到最小值处。而且在数值处理上就不能使用向量化的方法来提高运算速度。
        • Batch gradient descent会比较平稳地接近全局最小值,但是因为使用了所有m个样本,每次前进的速度有些慢。
    • 一般来说:

      • 当总体样本数量 m m m不太大时,例如 m ≤ 2000 m\leq2000 m2000,建议直接使用Batch gradient descent。
      • 当总体样本数量m很大时,建议将样本分成许多mini-batches。推荐常用的mini-batch size为 64 , 128 , 256 , 512 \color{red}64,128,256,512 64,128,256,512这些都是2的幂
      1. 设置的原因是计算机存储数据一般是2的幂,这样设置可以提高运算速度。
      2. mini-batch size不能设置得太大(Batch gradient descent),也不能设置得太小(Stachastic gradient descent)。这样,相当于结合了Batch gradient descent和Stachastic gradient descent各自的优点,既能使用向量化优化算法,又能叫快速地找到最小值。在这里插入图片描述

2.3 指数加权平均数(Exponentially weighted averages)

本节主要介绍:指数加权平均数(Exponentially weighted averages) (又被称为:指数加权移动平均(Exponential Weighted Moving Average)

  1. 例子:
    下图记录半年内伦敦市的气温变化, θ i \theta_i θi表示第 i i i天的华氏温度, v i v_i vi表示第 i i i天的移动加权平均值(EMA)
    在这里插入图片描述
    温度数据似乎抖动较大。如果我们希望看到半年内气温的整体变化趋势,可以通过EMA的方法来对每天气温进行平滑处理。
  2. 指数加权移动平均EMA(Exponential Weighted Moving Average)处理
    v 0 = 0 v_0=0 v0=0,当成第0天的气温值。
    • 第一天的气温与第 1 1 1天的气温有关:
      v 1 = 0.9 v 0 + 0.1 θ 1 v_1=0.9v_0+0.1\theta_1 v1=0.9v0+0.1θ1
    • 第二天的气温与第 2 2 2天的气温有关:
      v 2 = 0.9 v 1 + 0.1 θ 2 v_2=0.9v_1+0.1\theta_2 v2=0.9v1+0.1θ2
    • 第三天的气温与第 3 3 3天的气温有关:
      v 3 = 0.9 v 2 + 0.1 θ 3 v_3=0.9v_2+0.1\theta_3 v3=0.9v2+0.1θ3
    • 即第 t t t天与第 t − 1 t-1 t1天的气温迭代关系为:
      v t = 0.9 v t − 1 + 0.1 θ t v_t=0.9v_{t-1}+0.1\theta_t vt=0.9vt1+0.1θt
      经过 E M A \color{red}EMA EMA处理得到的气温如下图红色曲线所示:
      在这里插入图片描述
  3. 定义
    EMA一般形式为:
    v t = β v t − 1 + ( 1 − β ) θ t \color{red}v_t=\beta v_{t-1}+(1-\beta)\theta_t vt=βvt1+(1β)θt
    上例中, β = 0.9 \beta=0.9 β=0.9 β \beta β值决定了指数加权平均的天数,近似表示为: 1 1 − β \color{red}\frac{1}{1-\beta} 1β1
    • β = 0.9 \beta=0.9 β=0.9,则 1 1 − β = 10 \frac{1}{1-\beta}=10 1β1=10,表示将前10天进行指数加权平均,如 红 线 \color{red}红线 线
    • β = 0.98 \beta=0.98 β=0.98,则 1 1 − β = 50 \frac{1}{1-\beta}=50 1β1=50,表示将前50天进行指数加权平均,如 绿 线 \color{green}绿线 绿线
    • β = 0.5 \beta=0.5 β=0.5,则 1 1 − β = 2 \frac{1}{1-\beta}=2 1β1=2,表示将前2天进行指数加权平均,如 黄 线 \color{yellow}黄线 线
      在这里插入图片描述
      T i p \color{red}Tip Tip: β \beta β值越大,则指数加权平均的天数越多,平均后的趋势线就越平缓,但是同时也会向右平移。

2.4 理解指数加权平均数(Understanding exponentially weighted averages)

  1. 从公式来理解指数加权移动平均EMA(Exponential Weighted Moving Average)
    EMA-指数加权移动平均一般形式为:
    v t = β v t − 1 + ( 1 − β ) θ t \color{red}v_t=\beta v_{t-1}+(1-\beta)\theta_t vt=βvt1+(1β)θt
    我们把公式写成一般形式,则为:
    v t = β v t − 1 + ( 1 − β ) θ t = ( 1 − β ) θ t + ( 1 − β ) ⋅ β ⋅ θ t − 1 + ( 1 − β ) ⋅ β 2 ⋅ θ t − 2 + ⋯ + ( 1 − β ) ⋅ β t − 1 ⋅ θ 1 + β t ⋅ v 0 \begin{array}{l} v_t=\beta v_{t-1}+(1-\beta)\theta_t\\ =(1-\beta)\theta_t+(1-\beta)\cdot\beta\cdot\theta_{t-1}+(1-\beta)\cdot \beta^2\cdot\theta_{t-2}+\cdots+(1-\beta)\cdot \beta^{t-1}\cdot \theta_1+\beta^t\cdot v_0\end{array} vt=βvt1+(1β)θt=(1β)θt+(1β)βθt1+(1β)β2θt2++(1β)βt1θ1+βtv0
    上式中:
    • θ t , θ t − 1 , θ t − 2 , ⋯   , θ 1 \theta_t,\theta_{t-1},\theta_{t-2},\cdots,\theta_1 θt,θt1,θt2,,θ1是原始数据值, ( 1 − β ) , ( 1 − β ) β , ( 1 − β ) β 2 , ⋯   , ( 1 − β ) β t − 1 (1-\beta),(1-\beta)\beta,(1-\beta)\beta^2,\cdots,(1-\beta)\beta^{t-1} (1β),(1β)β,(1β)β2,,(1β)βt1是类似指数曲线,从右向左,呈指数下降的。
    • v t v_t vt的值就是这两个子式的点乘,当 v 0 = 0 v_0=0 v0=0时,可得: v t = ( 1 − β ) ( θ t + β θ t − 1 + β 2 θ t − 2 + . . . + β t − 1 θ 1 ) v_t=(1−β)(θ_t+βθ_{t−1}+β^2θ_{t−2}+...+β^{t−1}θ_1) vt=(1β)(θt+βθt1+β2θt2+...+βt1θ1),从公式中可以看到:每天温度( θ θ θ)的权重系数以指数等比形式缩小,时间越靠近当前时刻的数据加权影响力越大。相当于做了指数衰减,离得越近,影响越大;离得越远,影响越小,衰减越厉害。
  2. 1 1 − β \frac{1}{1-\beta} 1β1的由来
    由上例中,可知: β \beta β值决定了指数加权平均的天数,近似表示为: 1 1 − β \color{red}\frac{1}{1-\beta} 1β1。那 1 1 − β \frac{1}{1-\beta} 1β1是怎么来的呢?
    指数加权移动平均 v t = β v t − 1 + ( 1 − β ) θ t \color{red}v_t=\beta v_{t-1}+(1-\beta)\theta_t vt=βvt1+(1β)θt是指数是衰减的,一般认为衰减到 1 e \color{red}\frac1e e1就可以忽略不计了。因此,根据之前的推导公式得
    β 1 1 − β ≈ 1 e \color{red}\beta^{\frac{1}{1-\beta}}\approx \frac1e β1β1e1
    1 1 − β = N \frac{1}{1-\beta}=N 1β1=N N > 0 N>0 N>0,则 β = 1 − 1 N \beta=1-\frac{1}{N} β=1N1 1 N < 1 \frac1N<1 N1<1。即证明转化为:
    ( 1 − 1 N ) N = 1 e (1-\frac1N)^N=\frac1e (1N1)N=e1
    显然,当 N > > 0 N>>0 N>>0时,上述等式是近似成立的。
    所以指数加权移动平均的移动一般是 1 1 − β \color{red}\frac{1}{1-\beta} 1β1

2.5 指数加权平均的偏差修正(Bias correction in exponentially weighted averages)

  1. 问题提出
    β = 0.98 \beta=0.98 β=0.98时,指数加权移动平均结果希望是下图绿色曲线所示。但是实际上,真实曲线如紫色曲线所示。
    紫色曲线与绿色曲线的区别:紫色曲线开始的时候相对较低一些。这是因为开始时我们设置 v 0 = 0 v_0=0 v0=0,所以初始值会相对小一些,直到后面受前面的影响渐渐变小,趋于正常。
    在这里插入图片描述
  2. 修正上述问题
    修正这种问题的方法是进行 偏 移 校 正 ( b i a s    c o r r e c t i o n ) \color{red}偏移校正(bias\;correction) biascorrection,即在每次计算完 v t v_t vt后,对 v t v_t vt进行下式处理:
    v t 1 − β t \color{red}\frac{v_t}{1-\beta^t} 1βtvt
    • 刚进行迭代时: t t t比较小, ( 1 − β t ) < 1 (1-\beta^t)<1 (1βt)<1,这样就将 v t v_t vt修正得更大一些,效果是把紫色曲线开始部分向上提升一些,与绿色曲线接近重合。
    • 随着迭代的深入, ( 1 − β t ) ≈ 1 (1-\beta^t)\approx1 (1βt)1 v t v_t vt基本不变,紫色曲线与绿色曲线依然重合。
      这样就实现了简单的偏移校正,得到我们希望的绿色曲线。

    T i p \color{red}Tip Tip
    机器学习中, 偏 移 校 正 不 是 必 须 的 \color{red}偏移校正不是必须的 。因为,在迭代一次次数后( t t t较大), v t v_t vt受初始值影响微乎其微,紫色曲线与绿色曲线基本重合。所以,一般可以忽略初始迭代过程,等到一定迭代之后再取值,这样就不需要进行偏移校正了。

  3. EMA(指数加权移动平均)的优点及其应用理解
    1. EMA 的优点
      • 它占用极少内存:计算指数加权平均数只占用单行数字的存储和内存,然后把最新数据代入公式, 内 存 中 不 断 覆 盖 \color{red}内存中不断覆盖
      • 移动平均线能较好的反应时间序列的变化趋势,权重的大小不同起到的作用也是不同,时间比较久远的变量值的影响力相对较低,时间比较近的变量值的影响力相对较高
    2. EMA 在 Momentum 优化算法中应用的理解
      • 假设每次梯度的值都是 g 、 γ = 0.95 g、γ=0.95 gγ=0.95 ,此时参数更新,开始会加速下降;当迭代次数 n n n达到 150 150 150左右,此时达到了速度上限,之后将匀速下降(可参考一中的公式理解)。
      • 假如,在某个时间段内一些参数的梯度方向与之前的不一致时,那么真实的参数更新幅度会变小;相反,若在某个时间段内的参数的梯度方向都一致,那么其真实的参数更新幅度会变大,起到加速收敛的作用。
      • 在迭代后期,由于随机噪声问题,经常会在收敛值附近震荡,动量法会起到减速作用,增加稳定性

    参考:指数加权移动平均(Exponential Weighted Moving Average)


2.6 动量梯度下降法(Gradient descent with Momentum)

  1. 存在的问题
    如下图蓝色所示,当我们使用min-batch的时候,会发现存在以下问题:

    • 当要加速每次迭代的“前进步伐”,增大 α \alpha α时,每次迭代的上下“波动变大”;
    • 当要让每次迭代的“波动减小”,减小 α \alpha α时,每次迭代的上下“前进步伐”变小;

    这就成了一个悖论,如下图蓝色所示。利用指数加权平均的偏差修正(Bias correction in exponentially weighted averages),变成动量梯度下降法(Gradient descent with Momentum),就能很好的解决此问题,如下图红色所示。
    在这里插入图片描述

  2. Momentum算法

    1. 基本思路
      在使用min-batch的时候,对权重 w w w和常数项 b b b指数加权移动平均表达式如下:
      v d W = β ⋅ v d W + ( 1 − β ) ⋅ d W v d b = β ⋅ v d b + ( 1 − β ) ⋅ d b \begin{array}{l}v_{dW}=\beta\cdot v_{dW}+(1-\beta)\cdot dW\\ v_{db}=\beta\cdot v_{db}+(1-\beta)\cdot db\end{array} vdW=βvdW+(1β)dWvdb=βvdb+(1β)db
      从动量的角度:

      • 以权重 W W W为例, v d W v_{dW} vdW可以成速度 v v v d W dW dW可以看成是加速度 a a a指数加权平移动平均可以认为:计算当前的速度,当前速度由之前的速度和现在的加速度共同影响。
      • β < 1 \beta<1 β<1,又能限制速度 v d W v_{dW} vdW过大。也就是说,当前的速度是渐变的,而不是瞬变的,是动量的过程。

      以上保证了梯度下降的平稳性和准确性,减少振荡,较快地达到最小值处。

    2. 基本框架
      动量梯度下降算法的过程如下:
      O n   i t e r a t i o n   t :      C o m p u t e   d W ,   d b   o n   t h e   c u r r e n t   m i n i − b a t c h      v d W [ l ] = β v d W [ l ] + ( 1 − β ) d W [ l ]      v d b [ l ] = β v d b [ l ] + ( 1 − β ) d b [ l ]      W [ l ] = W [ l ] − α v d W [ l ] ,      b [ l ] = b [ l ] − α v d b [ l ] \color{red}\begin{array}{l}On\ iteration\ t:\\ \ \ \ \ Compute\ dW,\ db\ on\ the\ current\ mini-batch\\ \ \ \ \ v_{dW^{[l]}} = \beta v_{dW^{[l]}} + (1 - \beta) dW^{[l]} \\ \ \ \ \ v_{db^{[l]}} = \beta v_{db^{[l]}} + (1 - \beta) db^{[l]} \\ \ \ \ \ W^{[l]} = W^{[l]} - \alpha v_{dW^{[l]}},\\ \ \ \ \ b^{[l]} = b^{[l]} - \alpha v_{db^{[l]}} \\ \end{array} On iteration t:    Compute dW, db on the current minibatch    vdW[l]=βvdW[l]+(1β)dW[l]    vdb[l]=βvdb[l]+(1β)db[l]    W[l]=W[l]αvdW[l],    b[l]=b[l]αvdb[l]
      T i p \color{red}Tip Tip

      • 初始时,令 v d W [ l ] = 0 , v d b [ l ] = 0 v_{dW^{[l]}}=0,v_{db^{[l]}}=0 vdW[l]=0,vdb[l]=0。一般设置 β = 0.9 \beta=0.9 β=0.9,即指数加权移动平均前10天的数据,实际应用效果较好。
      • 偏移校正,可以不使用。因为经过10次迭代后,随着滑动平均的过程,偏移情况会逐渐消失。
      • 动量梯度下降还有另外一种写法:
        v d W = β v d W + d W v d b = β v d b + d b \begin{array}{l}v_{dW}=\beta v_{dW}+dW\\ v_{db}=\beta v_{db}+db\end{array} vdW=βvdW+dWvdb=βvdb+db
      1. 上面的写法消去了 d W dW dW d b db db前的系数 ( 1 − β ) \color{red}(1-\beta) (1β)。这样简化了表达式,但是学习因子 α \color{red}\alpha α相当于变成了 α 1 − β \color{red}\frac{\alpha}{1-\beta} 1βα,表示 α 也受 β 的 影 响 \color{red}\alpha\text{也受}\beta的影响 α也受β
      2. 从效果上来说,这种写法也是可以的,但是不够直观,且 调 参 涉 及 到 α \color{red}调参涉及到\alpha α,不够方便。所以,实际应用中,推荐第一种动量梯度下降的表达式。

2.7 RMS-prop(Root Mean Square Prop)

RMSprop是另外一种优化梯度下降速度的算法。是AdaGrad算法和指数加权移动平均EMA的结合。

  1. RMSprop理解
    1. 公式角度
      RMSprop是Geoff Hinton提出的一种自适应学习率方法。Adagrad会累加之前所有的梯度平方,而RMSprop仅仅是计算指数加权移动平均值,因此可缓解Adagrad算法学习率下降较快的问题,如下公式:
      S W = β S d W + ( 1 − β ) d W 2 S b = β S d b + ( 1 − β ) d b 2 W : = W − α d W S W b : = b − α d b S b \begin{array}{l}S_W=\beta S_{dW}+(1-\beta)dW^2\\ S_b=\beta S_{db}+(1-\beta)db^2\\ W:=W-\alpha \frac{dW}{\sqrt{S_W}}\\ b:=b-\alpha \frac{db}{\sqrt{S_b}}\end{array} SW=βSdW+(1β)dW2Sb=βSdb+(1β)db2W:=WαSW dWb:=bαSb db
    2. 迭代波动角度
      在这里插入图片描述
      从图中可以看出:
      • 梯度下降(蓝色折线)在垂直方向( b b b)上振荡较大,在水平方向( W W W)上振荡较小,表示在 b b b方向上梯度较大,即 d b db db较大,而在 W W W方向上梯度较小,即 d W dW dW较小。因此,上述表达式中 S b S_b Sb较大,而 S W S_W SW较小。
      • 在RMSprop中,更新 W W W b b b的表达式时,变化值 d W S W \frac{dW}{\sqrt{S_W}} SW dW较大,而 d b S b \frac{db}{\sqrt{S_b}} Sb db较小。即 W W W变化得多一些, b b b变化得少一些(加快了 W W W方向的速度,减小了 b b b方向的速度,减小振荡)。实现快速梯度下降算法,其梯度下降过程如绿色折线所示。
      • 总得来说:RMSprop可以认为如果哪个方向振荡大,就减小该方向的更新速度,从而减小振荡
  2. 基本框架
    1. 通过RMSprop,来减缓 b b b方向的学习,即纵轴方向,同时 W W W加快,至少不减缓横轴方向的学习,其更新表达式为:
      O n   i t e r a t i o n   t :      C o m p u t e   d W ,   d b   o n   t h e   c u r r e n t   m i n i − b a t c h      S W = β S d W + ( 1 − β ) d W 2      S b = β S d b + ( 1 − β ) d b 2      W : = W − α d W S W ,      b : = b − α d b S b \color{red}\begin{array}{l}On\ iteration\ t:\\ \ \ \ \ Compute\ dW,\ db\ on\ the\ current\ mini-batch\\ \ \ \ \ S_W=\beta S_{dW}+(1-\beta)dW^2\\ \ \ \ \ S_b=\beta S_{db}+(1-\beta)db^2\\ \ \ \ \ W:=W-\alpha \frac{dW}{\sqrt{S_W}},\\ \ \ \ \ b:=b-\alpha \frac{db}{\sqrt{S_b}}\\ \end{array} On iteration t:    Compute dW, db on the current minibatch    SW=βSdW+(1β)dW2    Sb=βSdb+(1β)db2    W:=WαSW dW,    b:=bαSb db
    2. T i p : \color{red}Tip: Tip:
      • 为了避免RMSprop算法中分母为零,通常可以在分母增加一个极小的常数 ε \varepsilon ε
        W : = W − α d W S W + ε , b : = b − α d b S b + ε \begin{array}{l}W:=W-\alpha \frac{dW}{\sqrt{S_W}+\varepsilon},\\ b:=b-\alpha \frac{db}{\sqrt{S_b}+\varepsilon}\end{array} W:=WαSW +εdW,b:=bαSb +εdb
        其中, ε = 1 0 − 8 \color{red}\varepsilon=10^{-8} ε=108,或者其它较小值。
      • RMSprop是基于权重梯度最近量级的均值,它每一个参数适应性地保留学习率。这意味着在非稳态和在线问题上有很有优秀的性能。

2.8 Adam 优化算法(Adam optimization algorithm)

  1. Adam介绍
    • Adam(Adaptive Moment Estimation)算法结合了Momentum算法和RMSprop算法。
    • Adam是一种可以替代传统随机梯度下降(SGD) 过程的 二 阶 优 化 算 法 \color{red}二阶优化算法 (用到了偏方差/uncentered variance),能基于训练数据迭代地更新神经网络权重。
    • 名称来源于适应性矩估计(ADAptive Moment estimation)。
  2. 基本框架
    • 其算法流程为:
      初始化,令 V d W = 0 ,   S d W = 0 ,   V d b = 0 ,   S d b = 0 V_{dW}=0,\ S_{dW}=0,\ V_{db}=0,\ S_{db}=0 VdW=0, SdW=0, Vdb=0, Sdb=0,然后进行迭代
      O n   i t e r a t i o n   t :      C o m p u t e   d W ,   d b   u s i n g   m i n − b a t c h      V d W = β 1 V d W + ( 1 − β 1 ) d W ,   V d b = β 1 V d b + ( 1 − β 1 ) d b      S d W = β 2 S d W + ( 1 − β 2 ) d W 2 ,   S d b = β 2 S d b + ( 1 − β 2 ) d b 2      V d W c o r r e c t e d = V d W 1 − β 1 t ,   V d b c o r r e c t e d = V d b 1 − β 1 t      S d W c o r r e c t e d = S d W 1 − β 2 t ,   S d b c o r r e c t e d = S d b 1 − β 2 t      W : = W − α V d W c o r r e c t e d S d W c o r r e c t e d + ε ,      b : = b − α V d b c o r r e c t e d S d b c o r r e c t e d + ε \color{red}\begin{array}{l}On\ iteration\ t:\\ \ \ \ \ Compute\ dW,\ db\ using\ min-batch\\ \ \ \ \ V_{dW}=\beta_1V_{dW}+(1-\beta_1)dW,\ V_{db}=\beta_1V_{db}+(1-\beta_1)db\\ \ \ \ \ S_{dW}=\beta_2S_{dW}+(1-\beta_2)dW^2,\ S_{db}=\beta_2S_{db}+(1-\beta_2)db^2\\ \ \ \ \ V_{dW}^{corrected}=\frac{V_{dW}}{1-\beta_1^t},\ V_{db}^{corrected}=\frac{V_{db}}{1-\beta_1^t}\\ \ \ \ \ S_{dW}^{corrected}=\frac{S_{dW}}{1-\beta_2^t},\ S_{db}^{corrected}=\frac{S_{db}}{1-\beta_2^t}\\ \ \ \ \ W:=W-\alpha\frac{V_{dW}^{corrected}}{\sqrt{S_{dW}^{corrected}}+\varepsilon},\\ \ \ \ \ b:=b-\alpha\frac{V_{db}^{corrected}}{\sqrt{S_{db}^{corrected}}+\varepsilon}\end{array} On iteration t:    Compute dW, db using minbatch    VdW=β1VdW+(1β1)dW, Vdb=β1Vdb+(1β1)db    SdW=β2SdW+(1β2)dW2, Sdb=β2Sdb+(1β2)db2    VdWcorrected=1β1tVdW, Vdbcorrected=1β1tVdb    SdWcorrected=1β2tSdW, Sdbcorrected=1β2tSdb    W:=WαSdWcorrected +εVdWcorrected,    b:=bαSdbcorrected +εVdbcorrected
    • Adam算法包含了几个超参数,分别是: α , β 1 , β 2 , ε \alpha,\beta_1,\beta_2,\varepsilon α,β1,β2,ε。其中:
      • β 1 \beta_1 β1通常设置为 0.9 0.9 0.9
      • β 2 \beta_2 β2通常设置为 0.999 0.999 0.999
      • ε \varepsilon ε通常设置为 1 0 − 8 10^{-8} 108
      • 一般只需要对 α \alpha α进行调试。
  3. Adam算法的优势
    • 实际应用中,Adam算法结合了动量梯度下降和RMSprop各自的优点,使得神经网络训练速度大大提高。
    • 在非凸优化问题中,Adam的优势:
      • 实现直接,计算高效;
      • 所需内存少;
      • 梯度对角缩放的不变性;
      • 适合解决含大规模数据和参数的优化问题;
      • 适用于非稳态(non-stationary)目标;
      • 适于解决包含很 高 噪 声 或 稀 疏 梯 度 的 问 题 \color{red}高噪声或稀疏梯度的问题
      • 超参数可以很直观地解释,并且基本上只需极少量的调参。

2.9 学习率衰减(Learning rate decay)

Learning rate decay是通过减小学习因子 α \alpha α来提高神经网络训练速度。

  1. 实验验证
    Learning rate decay就是随着迭代次数增加,学习因子 α \alpha α逐渐减小。下面用图示的方式来解释这样做的好处。下图中:
    • 蓝色折线表示使用恒定的学习因子 α \alpha α,由于每次训练 α \alpha α相同,步进长度不变,在接近最优值处的振荡也大,在最优值附近较大范围内振荡,与最优值距离就比较远。
    • 绿色折线表示使用不断减小的 α \alpha α,随着训练次数增加, α \alpha α逐渐减小,步进长度减小,使得能够在最优值处较小范围内微弱振荡,不断逼近最优值。
      相比较恒定的 α \alpha α来说,learning rate decay更接近最优值。
      在这里插入图片描述
  2. Learning rate decay的衰减方法
    • 基本公式:
      Learning rate decay中对 α \alpha α可由下列公式得到:
      α = 1 1 + ( d e c a y   r a t e ) ∗ e p o c h α 0 \alpha=\frac{1}{1+(decay\ rate)*epoch}\alpha_0 α=1+(decay rate)epoch1α0
      其中, d e a c y   r a t e deacy\ rate deacy rate是参数(可调), e p o c h epoch epoch是训练完所有样本的次数。随着 e p o c h epoch epoch增加, α \alpha α会不断变小。
    • 变形公式
      除了上面计算 α \alpha α的公式之外,还可以选用以下计算公式:
      α = 0.9 5 e p o c h ⋅ α 0 \alpha=0.95^{epoch}\cdot \alpha_0 α=0.95epochα0
      α = k e p o c h ⋅ α 0 \alpha=\frac{k}{\sqrt{epoch}}\cdot \alpha_0 α=epoch kα0
      α = k t ⋅ α 0 \alpha=\frac{k}{\sqrt{t}}\cdot \alpha_0 α=t kα0
      其中, k k k为可调参数, t t t为mini-bach number。
      上述公式都是:设置 α \alpha α为关于 t t t的离散值,随着 t t t增加, α \alpha α呈阶梯式减小。

2.10 局部最优的问题(The problem of local optima)

  1. 局部最优和全局最优

    • 局部最优
      局部最优解的理解是形如碗状的凹槽,如下图左边所示。
    • 全局最优
      大部分梯度为零的“最优点”并不是这些凹槽处,而是形如右边所示的马鞍状,称为saddle point(即有些维度凹形(局部最小),而有些是凸性(局部最大))。也就是说,梯度为零并不能保证所有维度都是convex(极小值),也有可能是concave(极大值)。
      在神经网络中参数很多都是鞍点的情况,所有参数梯度为零的点很可能都是右边所示的马鞍状的saddle point,而不是左边那样的local optimum。
      在这里插入图片描述
  2. 鞍点的特点

    • 类似马鞍状的plateaus会降低神经网络学习速度。鞍点是梯度接近于零的平缓区域,如下图所示。
    • 在鞍点附近上梯度很小,前进缓慢,再继续到达其他鞍点需要很长时间。

      到达plateaus后,由于随机扰动,梯度一般能够沿着图中绿色箭头,离开plateaus,继续前进,只是在plateaus上花费了太多时间。
      在这里插入图片描述

    • 关于local optima,总结:
      • 只要选择合理的强大的神经网络,一般不太可能陷入local optima
      • Plateaus可能会使梯度下降变慢,降低学习速度
  3. 解决鞍点问题
    梯度在平稳段是一个问题,这样使得学习十分缓慢。而使用像Momentum或是RMSpropAdam这样的算法,能够加速学习算法的地方。在这些情况下,更成熟的优化算法,如Adam算法,能够加快速度,让你尽早往下走出平稳段。
    优化方法总结:SGD,Momentum,AdaGrad,RMSProp,Adam
    在这里插入图片描述
    在这里插入图片描述


本章总结

在这里插入图片描述

  • 最左边是min-batch
    小批量随机梯度下降(通常 SGD 指的就是这种)使用一个批量的数据更新参数,因此大大降低了一次迭代所需的计算量。这种方法降低了更新参数的方差,使得收敛过程更为稳定;它也能利用流行深度学习框架中高度优化的矩阵运算器,从而高效地求出每个小批数据的梯度。通常一个小批数据含有的样本数量在 50 至 256 之间,但对于不同的用途也会有所变化。

  • 中间是Momentum和RMSprop

    • 动量梯度下降法(Momentum)旨在加速 SGD 的学习过程,特别是在具有较高曲率的情况下。一般而言,动量算法利用先前梯度的指数衰减滑动平均值在该方向上进行修正,从而更好地利用历史梯度的信息。该算法引入了变量 v 作为参数在参数空间中持续移动的速度向量,速度一般可以设置为负梯度的指数衰减滑动平均值。
    • RMSProp 和 Adam 等适应性学习率算法是目前我们最常用的最优化方法。RMSProp 算法(Hinton,2012)修改 AdaGrad 以在非凸情况下表现更好,它改变梯度累积为指数加权的移动平均值,从而丢弃距离较远的历史梯度信息。RMSProp 是 Hinton 在公开课上提出的最优化算法,其实它可以视为 AdaDelta 的特例。但实践证明 RMSProp 有非常好的性能,它目前在深度学习中有非常广泛的应用。
  • 最右边是Adam
    Adam 算法同时获得了 AdaGrad 和 RMSProp 算法的优点。Adam 不仅如 RMSProp 算法那样基于一阶矩均值计算适应性参数学习率,它同时还充分利用了梯度的二阶矩均值(即有偏方差/uncentered variance)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值