深度学习——优化算法[6]

时间:2021-11-29 14:14:09

目录

  • mini-batch
  • 指数加权平均
  • 优化梯度下降法:momentum、RMSprop、Adam
  • 学习率衰减
  • 局部最优问题

一、mini-batch

mini-batch:把训练集划分成小点的子集

表示法 $x^{\{1\}}$ $x^{(1)}$ $x^{[1]}$
意义 第一个mini-batch 第一个样本 第一层的输入
  • 为什么用mini-batch:当数据集样本数较多时,需要对整个数据计算完成后才能进行梯度下降,速度较慢
  • epoch:一代,表示遍历了整个数据集(而不是一个子集)
  • 使用mini-batch的梯度下降方法过程:每次以当前的一个mini-batch作为输入数据

for $t = 1,...,5000$

  //forward prop on 第t个minibatch,输入为$X^{\{t\}}$

  for $i=1...l$ //正向计算,共l层

    $Z^{[i]}=W^iA^{[i-1]}+b^{[i]}$

    $A^{[i]}=g^{[i]}(Z^{[i]}$

      //$A^{l}$为最后的输出结果

     计算该mini-batch的cost $J^{\{t\}}=\frac{1}{1000}\sum \mathcal{L}(\widehat{y}^{j},y^{j})$

  反向计算求导$J^{\{t\}}$

  更新参数$W$$b$,$W^{[l]}:=W^{[l]}-\alpha dW^{[l]}$ $b^{[l]}:=b^{[l]}-\alpha db^{[l]}$

  •  使用mini-batch的成本函数变化趋势:并不是每一次都下降,但是整体趋势是下降

深度学习——优化算法[6]深度学习——优化算法[6]

  • 选择min-batch的大小

太大的话每次迭代耗时太长,太小的话每次只处理少量效率低(失去了向量加速的优势)

当数据集比较小(小于2000)时,可以直接使用batch

当数据集比较大时,一般可以用的mini-batch大小:64,128,256, 512...(与CPU/GPU内存相匹配)

二、指数加权平均(指数加权移动平均)exponentially weighted average

例:伦敦的温度变化

$\theta_{1}=40^{\circ}F$

$\theta_{2}=49^{\circ}F$

$\theta_{3}=45^{\circ}F$

 ...

深度学习——优化算法[6]

求解$v_{t}$:前$t$天的温度加权平均值。虽然$v_{t}$包含1~$t$天的温度,但是越接近第$t$天的权重会更大一点,而较前的就会接近0

$v_{0}=0$

$v_{1}=\beta v_{0} + (1-\beta )\theta_{1}$

$v_{2}=\beta v_{1} + (1-\beta )\theta_{2}$

...

$v_{t}=\beta v_{t-1} + (1-\beta )\theta_{t}$

  $=\beta^{t}\theta_{0}+\beta^{t-1}(1-\beta)\theta_{1}$

    $+\beta^{t-2}(1-\beta)\theta_{2}+...+(1-\beta)\theta_{t}$

深度学习——优化算法[6]

蓝色点为原始数据,其它为不同的$\beta$取值时,加权平均结果

  • 应该平均多少天的温度?当某天温度的权重很低时就不用再考虑

$y=(1-\varepsilon)^{\frac{1}{\varepsilon}}$单调递减。当$\varepsilon=0.9$时,$y \approx \frac{1}{e}$。所以,当计算到第$\frac{1}{e}\approx 0.3$天时,温度会下降到当天的1/3以下,可忽略。因此,可以认为$v_{t}$是$\frac{1}{1-\beta}$天的温度加权平均值

  • 做偏差修正bias correct

为什么需要:开始的时候设置$v_0=0$,容易导致前期的预测会比较实际的小很多,估计不准确

修正方法:$v'_{t}=\frac{v_{t}}{1-\beta^{t}}$,用$v'_{t}$来代替$v_{t}$。前期的值可以变大一些,而后期时$t$较大时,$\beta^{t}$趋于0,$v'_{t}$也就趋于$v_{t}$

下图中紫线为$v_{t}$,绿色为$v'_{t}$

深度学习——优化算法[6]

三、优化梯度下降算法

  • 标准梯度下降的问题(下图蓝线效果):从一个随机的点开始进行梯度下降,可能会像蓝色部分波动比较大,下降速度慢;无法使用更大的学习率,因为可能会偏离函数范围

深度学习——优化算法[6]

    • 优化手段:减少纵向的浮动,加快横向的移动,以及增大学习率
  • 动量梯度下降法momentum
    • 优化:利用对梯度求指数加权平均的方法以加快训练的速度(上图红线效果)

         通过求平均,可以把纵向的浮动抵消,而横向的变化依旧,从而加快下降速度

    • 具体实现:用加权平均值来代替当前的求导结果;实际中一般不用做偏差修正,大概10次迭代就过了初始期,不再是有偏差的结果;$\beta$取值为0.9

      for $t = 1...,$

        计算当前mini-batch的$dW, db$

        $v_{dW}=\beta v_{dW}+(1-\beta)dW$
        $v_{db}=\beta v_{db}+(1-\beta)db$

        $W:=W-\alpha v_{dW}$, $b:=b-\alpha v_{db}$

  • RMSprop : root mean square prop
    • 均方根:先对$dW$求平方,更新时又除以它的根方
    • 为什么有效果

    假设$W$和$b$分别表示横向和纵向变化。

             如果要让纵向也就是$b$的变化慢一点(浮动小一些),也就是更新时减去的值小一些。可以发现原来纵向的变化较大($db$较大),所以$\frac{1}{\sqrt{S_{db}}}$会小一点,由此可让$db$变化慢点

    • 具体实现:为了避免除数为0,一般可以加上$\varepsilon=10^{-8}$

for $t = 1,...$

  计算当前mini-batch的$dW,db$

  $S_{dW}=\beta_{2}S_{dW}+(1-\beta_{2})dW^{2}$

  $S_{db}=\beta_{2}S_{db}+(1-\beta_{2})db^{2}$

  $W:=W-\alpha \frac{dW}{\sqrt{S_{dW}}+\varepsilon}$, $b:=b-\alpha \frac{db}{\sqrt{S_{db}}+\varepsilon}$

  • Adam算法 :momentum与RMSprop的结合,常用的方法
    • 具体实现

$for t = 1,...$

  计算当前mini-batch人$dW,db$

  //momentum部分

  $v_{dW}=\beta_{1} v_{dW}+(1-\beta_{1})dW$, $v_{db}=\beta_{1} v_{db}+(1-\beta_{1})db$

  //RMSprop部分

  $S_{dW}=\beta_{2}S_{dW}+(1-\beta_{2})dW^{2}$, $S_{db}=\beta_{2}S_{db}+(1-\beta_{2})db^{2}$

  //偏差修正

  $v^{corrected}_{dW}=\frac{v_{dW}}{1-\beta_{1}^{t}}$,$v^{corrected}_{db}=\frac{v_{db}}{1-\beta_{1}^{t}}$

  $S^{corrected}_{dW}=\frac{S_{dW}}{1-\beta_{2}^{t}}$, $S^{corrected}_{db}=\frac{S_{db}}{1-\beta_{2}^{t}}$

  //更新

  $W:=W-\alpha \frac{v_{dW}^{corrected}}{\sqrt{S_{dw}{corrected}}+\varepsilon}$, $b:=W-\alpha \frac{v_{db}^{corrected}}{\sqrt{S_{db}{corrected}}+\varepsilon}$

    • 超参数选择
$\alpha$学习率 $\beta_{1}$用于momentum $\beta_{2}$用于RMSprop $\varepsilon$
需要调 0.9 0.999 $10^{-8}$

四、学习率衰减:随时间逐渐减少学习率

为什么:如果一直用比较大的学习率,当靠近最小值时,结果可能会在较大范围内进行浮动(不易收敛),而不是在很接近最小值的小范围内变化

重要性:不是最开始的重点,可以先设置一个固定的,先调整其它的,后期再进行调整

学习率衰减的方式

  • $\alpha = \frac{1}{1+decay-rate*epoch-num}\alpha_{0}$
  • $\alpha=0.95^{epoch-num}\alpha_{0}$   指数衰减
  • $\alpha=\frac{k}{\sqrt{epoch-num}}\alpha_{0}$
  • 每过一段时间,对学习率减半(离散下降discrete staircase)

五、局部最优问题

  • 局部最优问题:在做梯度下降时,会不会最后是趋于局部最优的解,而非最优解?
  • 答:这不是一个大问题,要找到一个局部最优点,需要它在各个维度都是最优的(比如都是凹/凸)。当维度比较大时,这种情况很难遇到。不过,鞍点还是比较容易遇到的
  • 鞍点:在某个位置,各维导数均为0,但是凹凸性不是完全一致的。如下图右侧

深度学习——优化算法[6]

  • 应该考虑的问题:存在平滑导致梯度下降变化慢的问题
  • 解决方法:利用上面提到的几种优化方法来加快

深度学习——优化算法[6]