深度学习——优化算法

Posted 记性不好,多记记吧

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深度学习——优化算法相关的知识,希望对你有一定的参考价值。

目录

  • 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的成本函数变化趋势:并不是每一次都下降,但是整体趋势是下降

  • 选择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$

 ...

求解$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}$

蓝色点为原始数据,其它为不同的$\\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}$

三、优化梯度下降算法

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

    • 优化手段:减少纵向的浮动,加快横向的移动,以及增大学习率
  • 动量梯度下降法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,但是凹凸性不是完全一致的。如下图右侧

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

以上是关于深度学习——优化算法的主要内容,如果未能解决你的问题,请参考以下文章

深度学习结课总结和进阶学习 优化算法 动手学深度学习v2

深度学习中的优化算法之Adadelta

五深度学习优化算法

深度学习的优化算法

深度学习中的优化算法之Nadam

深度学习优化算法大全系列1:概览