深度学习系列(七) 优化算法(梯度下降、动量法、AdaGrad算法、RMSProp算法、AdaDelta算法、Adam算法) 2020.6.24

前言

在训练模型时,会使⽤优化算法不断迭代模型参数以降低模型损失函数的值
本节详细学习常用的优化算法

  • 梯度下降
  • 动量法
  • AdaGrad算法
  • RMSProp算法
  • AdaDelta算法
  • Adam算法

1、优化算法的挑战

优化算法的⽬标函数通常是⼀个基于训练数据集的损失函数
优化的⽬标在于降低训练误差

通常会遇上两个挑战

  • 局部最小值
  • 鞍点

局部最小值

  • 如果f(x)在x上的值⽐在x邻近的其他点的值更小,那么f(x)可能是⼀个局部最小值(local minimum)
  • 如果f(x)在x上的值是⽬标函数在整个定义域上的最小值,那么f(x)是全局最小值(global minimum)

在这里插入图片描述
当⼀个优化问题的数值解在局部最优解附近时,由于⽬标函数有关解的梯度接近或变成零,最终迭代求得的数值解可能只令⽬标函数局部最小化而⾮全局最小化

鞍点

梯度接近或变成零也可能是由于当前解在鞍点(saddle point)附近在这里插入图片描述
如果在深度学习训练过程中,损失函数落到了局部最小值和鞍点上,必然会造成模型效果不是最佳
这是优化算法需要解决的问题

2、梯度下降

梯度下降应该是最常见的优化算法了
对于f(x),其梯度是
在这里插入图片描述
f沿着单位向量u的方向导数是
在这里插入图片描述
我们希望找到f下降最快的方向,来迅速找到f的最小值
当u在梯度⽅向∇f(x)的相反⽅向时,⽅向导数被最小化
故有梯度下降
在这里插入图片描述
式中的超参数称作学习率
调整学习率也就是我们日常所说的调参了

随机梯度下降

当训练数据样本数很⼤时,梯度下降每次迭代的计算开销很⾼
随机梯度下降(stochastic gradient descent,SGD)减少了每次迭代的计算开销
在随机梯度下降的每次迭代中,我们随机均匀采样⼀个样本索引
在这里插入图片描述
这是对梯度的无偏估计
在这里插入图片描述

小批量随机梯度下降

传统的是对整个样本集进行梯度下降
随机梯度下降则是每次抽取一个样本
那我们同样可以每次抽取一小批样本B
得到梯度
在这里插入图片描述
其梯度下降
在这里插入图片描述

3、动量法

梯度下降根据⾃变量当前位置,沿着当前位置的梯度更新⾃变量
如果⾃变量的迭代⽅向仅仅取决于⾃变量当前位置,这可能会带来⼀些问题
动量法创建速度变量v
对小批量随机梯度下降的迭代做修改
在这里插入图片描述
动量超参数
在这里插入图片描述

4、AdaGrad算法

梯度下降和动量法使用统⼀的学习率,难以适应所有维度
引入AdaGrad算法,根据⾃变量在每个维度的梯度值的⼤小来调整各个维度上的学习率

  • 将小批量随机梯度g按元素平⽅后累加到变量s
    在这里插入图片描述
  • 将⽬标函数⾃变量中每个元素的学习率通过按元素运算重新调整
    在这里插入图片描述
    其中,
    在这里插入图片描述

不过,当学习率在迭代早期降得较快且当前解依然不佳时,AdaGrad算法在迭代后期
由于学习率过小,可能较难找到⼀个有⽤的解
在这里插入图片描述

5、RMSProp算法

RMSProp算法对AdaGrad算法做了⼀点小小的修改
该算法源⾃Coursera上的⼀⻔课程“机器学习的神经⽹络”
在这里插入图片描述
在这里插入图片描述
可以看到,是参考了动量法
使得⾃变量每个元素的学习率在迭代过程中不再⼀直降低
在这里插入图片描述

6、AdaDelta算法

AdaDelta算法也是针对AdaGrad算法的改进
在这里插入图片描述
相较于RMSProp算法
AdaDelta算法维护了⼀个额外的状态变量Δxt
在这里插入图片描述
然后更新自变量
在这里插入图片描述
在这里插入图片描述

7、Adam算法

Adam算法在RMSProp算法基础上对小批量随机梯度也做了指数加权移动平均
在这里插入图片描述
在这里插入图片描述
做偏差修正
在这里插入图片描述
更新自变量
在这里插入图片描述
在这里插入图片描述

结语

较为全面的学习了常用的优化算法

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章