吴恩达深度学习笔记-优化算法(第5课)

优化算法

  • 一、Mini-batch梯度下降算法
  • 二、理解mini-batch梯度下降法
  • 三、指数加权平均
  • 四、理解指数加权平均
  • 五、指数加权平均值的偏正修差
  • 六、动量梯度下降法(gradient with momentum)
  • 七、RMSprop(root mean square prop)
  • 八、Adam优化算法
  • 九、学习率衰减
  • 十、局部最优的问题

一、Mini-batch梯度下降算法

当X是一个数量很大的数据集,例如m=5000000;根据Mini-batch的思想,将这个大数据集X和Y以同样的方式划成小的数据集,如下图:
吴恩达深度学习笔记-优化算法(第5课)_第1张图片

符号:

  1. x(i) : 第i个数据集
  2. X{t}、Y{t} : 第t个mini-batch数据集

之前的梯度下降法是同时处理整个数据集,即整个batch训练集的样本被处理;mini-batch梯度下降每次同时处理的是单个的mini-batch的X{t}和Y{t}

mini-batch gradient descent

假设有X的样本个数为5000 000,将数据集分成每1000个样本为一个mini-batch;可以分出5000个mini-batch数据集。
对这5000个数据集X{t}和Y{t}分别进行梯度下降,即一个mini-batch数据集进行一次梯度下降。
具体过程如下图:
吴恩达深度学习笔记-优化算法(第5课)_第2张图片
上面的代码可被称为一代(one epoch)训练,即只遍历了一次训练集。

使用原来的batch梯度下降法,每遍历一次数据集只能进行一次梯度下降;使用mini-batch梯度下降一次遍历数据集可以进行m/b次梯度下降。【m:样本数;b:每个mini-batch的数据样本数】

二、理解mini-batch梯度下降法

  • mini-batch梯度下降法若要画出代价函数图,图像可能不会是光滑曲线;因为代价函数J{t}只与X{t}和Y{t}相关,即每次迭代下都在训练不同的样本集。所有要画出代价函数图,你可能会看到下图的结果:
    吴恩达深度学习笔记-优化算法(第5课)_第3张图片
    代价函数在向下减少,但是存在很多的噪声。
  • 选择mini-batch的大小
    当mini-batch size = m,则变成了batch gradient descent(批量梯度下降);
    当mini-batch size = 1,则变成了stochastic batch gradient descent(随机梯度下降);

批量梯度下降代价函数会光滑些,曲线相对噪声低些,幅度也大些。
随机梯度下降代价函数曲线会有很多噪声,平均来看是接近局部最优解的,但是有时候下降的方向会错误;因为随机梯度下降法永远不会收敛,所有会一直在局部最优解附件波动

小批量梯度下降可以不用遍历整个数据集就可以进行一次梯度下降;当样本数很大时,相比批量梯度下降会减少很多计算代价。随机梯度下降每次梯度下降的计算代价少,但是会失去所有向量化带来的加速效果(矩阵计算运算速度会比较快);所有在具体实践中,应该选择一个不大不小的mini-batch size。
选择合适的mini-batch size可以获得两个好处:(1)享受向量化的加速;(2)不必遍历整个数据集就进行一次梯度下降

三、指数加权平均

现在我们拥有伦敦的每日温度数据,如下图:
吴恩达深度学习笔记-优化算法(第5课)_第4张图片
图像存在许多噪声,为了方便观看每日温度的总体趋势,可以通过移动平均的方法来对每天气温进行平滑处理。
对该数据采用移动平均(指数加权平均)进行处理,处理过程如下:
吴恩达深度学习笔记-优化算法(第5课)_第5张图片

  • 先令v0=0;
  • 第一天的加权平均为:v1=0.9*v0+0.1+θ1
  • 第二天的加权平均为:v2=0.9*v1+0.1+θ2
  • ……
  • 第t天的加权平均为:vt=0.9*vt-1+0.1+θt

最后,各天的加权平均在图上画出,如下图红线所示:
吴恩达深度学习笔记-优化算法(第5课)_第6张图片

公式可表示为
指数加权平均:vt =βvt-1+(1-β)θ t

对于vt 可以近似的认为是过去1/(1-β)天的初略平均(这里不理解先记着,看下一节就会了)。
如β=0.9,那么vt可以看作是粗略估计过去10天的温度平均值,图像如上图红色部分;
如β=0.98,那么vt可以看作是粗略估计过去50天的温度平均值,图像如下图绿色部分;
吴恩达深度学习笔记-优化算法(第5课)_第7张图片

可以看出绿色曲线更加平缓,原因在于多平均了几天的温度;缺点如图像的右边,温度发生了变化,图像下降地更缓慢些。

因此,当β越大,说明越考虑过去的数值,图像会较为平缓,当当前数值波动对整体也不会有太大影响;当β越小,说明越在乎当前的数值,不重视过去的数值,当前数据波动整体数据也会造成波动,图像较为起伏。

四、理解指数加权平均

下面是指数加权平均的公式:
吴恩达深度学习笔记-优化算法(第5课)_第8张图片
令β=0.9,将v100进行展开可以得到:
v100=0.1xθ100+0.1x0.9xθ99+0.1x(0.9)2θ98+0.1x(0.9)3θ97+0.1x(0.9)4θ96+……

v100=(1-β)θ100+(1-β)βθ99+(1-β)(β)2θ98+(1-β)(β)3θ97+(1-β)(β)4θ96+……
可以看出第100个数据依赖于0~100的当日温度,从左到右依次看系数,可以看出相邻系数之间相差一个β,呈指数型增长。

用图片来表示如下面所示:
数据如下图所示,接着我们在构建一个指数衰减函数。
吴恩达深度学习笔记-优化算法(第5课)_第9张图片

指数衰减函数从左边的第一个系数0.1开始构造,然后成语0.9构造第二点,以此类推。如下图示:
吴恩达深度学习笔记-优化算法(第5课)_第10张图片
然后计算v100就是把两个函数对应的元素相乘,然后求和。

vt 可以近似的认为是过去1/(1-β)天的粗略平均的解释:
上述例子β=0.9,(0.9)10=0.35≈e-1
可以得到:(1- ε)1/ε ≈e-1
具体的含义是,当过了1/ε天,衰减函数值就会降到峰值的e-1,即权重下降不到当日权重的1/3。所以看作是过去1/(1-β)天的粗略平均

实施指数加权平均

  • vθ=0
  • 循环{
    获取下一个θt
    vθ:=βvθ+(1-β)θt
    }

计算加权平均十分节省内存,只要记录当前vθ和下一个θt,不断覆盖vθ即可。相比正常的求平均值,指数加权平均不用存储过去的n个数值,但数值上会不是那么准确。

五、指数加权平均值的偏正修差

偏差修正可以让平均数运算更加准确

  • 首先看一个存在的问题,令β=0.98,得到下图的紫色曲线:
    吴恩达深度学习笔记-优化算法(第5课)_第11张图片
    紫色曲线在一开始比较低,因为一开始假设了v0=0,若第一天温度是40度
    第一天的指数加权平均就是:
    v1=0.98*v0+0.02 θ1=0.02 * 40 = 8;
    第二天的指数加权平均就是:
    v2=0.98
    v1+0.02 *θ2=0.98 * 0.02 * θ1 +0.02 * θ2= 0.0196 * θ1 + 0.02 *θ2
    计算后v2的值要远小于θ1和θ2,并不能很好的估测前两天的温度。

  • 为了解决上述问题,用vt/(1-βt)代替vt
    例如,当t=2:1-βt = 1- (0.98)2 = 0.0396。第二天的数值变成v2/0.0396 = (0.0196 * θ1 + 0.02 *θ2)/ 0.0396
    吴恩达深度学习笔记-优化算法(第5课)_第12张图片
    式子变成了θ1和θ2的加权平均数并除于对应的偏差。
    可以看出随着t的增加,βt接近于0,所以当t很大的时候,偏差修正几乎没有作用

六、动量梯度下降法(gradient with momentum)

吴恩达深度学习笔记-优化算法(第5课)_第13张图片

  • 原来的梯度下降过程如上图蓝线所示,一路慢慢摆动向局部最优靠近;这个上下摆动减缓了梯度下降的速度,导致无法使用更大的学习率;因为更大的学习率会导致更大的摆动,如上图紫色线条所示。
    因此在纵轴上希望学习的慢一点,不想要这些摆动;在横轴上希望加快学习,希望快速的从左向右移动。

  • gradient with momentum
    每次迭代都进行以下操作
    (1)计算dw和db
    (2)Vdw=βVdw+(1-β)dw
    (3)Vdb=βVdb+(1-β)db
    (4)W = W - αVdw
    (5)b = W - αVdb
    吴恩达深度学习笔记-优化算法(第5课)_第14张图片
    上述的方法(gradient with momentum)可以减缓下降的摆动程度,且横轴移动速度变快(因为积分方向大致都指向了局部最优解)。因此动量梯度下降可以加快梯度下降,可以使用更大的学利率

物理角度理解:
把梯度下降想象成小球在一个山谷下落,下落的梯度由下面两个公式提供:
Vdw=βVdw+(1-β)dw
Vdb=βVdb+(1-β)db
公式右部的Vdw和Vdb是原来的下落速度,β是小于1的数,可以看作下落过程中的阻力,因此小球不会无止境下落;右部的dw和db看作当前样本提供的加速度,让小球更快速的向局部最优下落。
因此,动量梯度下降法的每一步梯度下降都不会独立于之前梯度下降

  • gradient with momentum 实现细节:
    吴恩达深度学习笔记-优化算法(第5课)_第15张图片所以需要控制两个超参数:学习率α和参数β,β控制着指数加权平均数;β最常用的数值是0.9

  • 关于偏差修正,只需要将Vdw和Vdb除于(1-βt),但一般不这么做,因为过了1/t次迭代后,移动平均就已经过了初始阶段,不再是一个具有偏差的预测

现在有的版本动量梯度下降的梯度计算如下:
Vdw=βVdw+dw
Vdb=βVdb+db
去掉了(1-β),这个不会影响最后的结果,但是会影响对应最佳α的值

七、RMSprop(root mean square prop)

  • RMSprop是另一种优化梯度下降的算法。
    每次迭代都进行以下操作
    (1)计算dw和db
    (2)Sdw=βSdw+(1-β)dw2
    (3)Sdb=βSdb+(1-β)db2
    (4)更新方式如下图:
    吴恩达深度学习笔记-优化算法(第5课)_第16张图片- 理解RMSprop:
    为了简化理解,只考虑b和w两个参数,横轴为方向为w,纵轴方向为b。梯度下降过程如下图蓝色线条所示:
    吴恩达深度学习笔记-优化算法(第5课)_第17张图片
    我们想要的效果是在横轴w方向能够快速移动,纵轴方向b能够减少摆动。上图曲线可以看出纵轴摆动很大,从而db也会很大,因此Sdb也很大;横轴移动速度较慢,从而dw较小,因此Sdw也较小。结果就是纵轴b上的更新要被一个很大的数相除,就能消除摆动;而横轴w的更新则被较小的数相除,就能加速移动。【这里的w可以是一个多维的参数】
    该方法的好处是:可以使用更大的学习率,然后加快学习,而无须在纵轴上垂直方向偏离。

  • 实现细节
    在现实时,为了确保更新时除的分子不是0或者接近于0的数(更新幅度会非常大),通常会在分子加上ε,ε=10-8是一个不错的选择。
    吴恩达深度学习笔记-优化算法(第5课)_第18张图片

八、Adam优化算法

Adam算法结合了动量梯度下降算法和RMSprop算法。算法流程如下:

  • 先初始化Vdw=0,Sdw =0,Vdb=0,Sdb =0
    每次迭代都进行以下操作
    (1)计算dw和db
    (2)计算动量梯度下降的加权平均数:
    Vdw1Vdw+(1-β1)dw
    Vdb1Vdb+(1-β1)db
    (3)再进行RMSprop的计算:
    Sdw2Sdw+(1-β2)dw2
    Sdb2Sdb+(1-β2)db2
    (4)对Vdw和Vdb进行偏差修正:
    吴恩达深度学习笔记-优化算法(第5课)_第19张图片
    (5)参数更新
    吴恩达深度学习笔记-优化算法(第5课)_第20张图片

Adam能够有效适用于不同神经网络,适用于广泛的结构。

  • 本算法有很多超参数:
    α:学习率需要调整
    β1:可以设置为0.9
    β2:推荐设置为0.999
    ε:推荐设置为10-8,不设置也行,不会影响算法表现

  • Adam全称:Adaptive Moment Estimation

九、学习率衰减

加快学习算法的一个办法就是随时间减少学习率,称之为学习率衰减。

  • 为什么要用学习率衰减?
    假设使用mini-batch梯度下降, mini-batch数量不大,则在迭代过程中会有噪音,最后在局部最优的范围内进行徘徊,如下图所示。徘徊的原因就是使用了固定的学习率α。
    吴恩达深度学习笔记-优化算法(第5课)_第21张图片
    但要逐渐减少学习率的话,在迭代初期,学习率较大,学习还是相对较快;随着α的减小,步伐也会变慢变小,所以最后曲线会最小值附件的一小块区域里摆动(即收敛于更小的一片区域),如下图的绿色线条。
    吴恩达深度学习笔记-优化算法(第5课)_第22张图片

  • 可以这样做:
    1epoch=一个mini-batch被遍历完
    学习率可以定义为下图的式子:
    吴恩达深度学习笔记-优化算法(第5课)_第23张图片
    decay_rate为衰减率,一个新的需要设置的超参数。上述学习率与迭代次数成反比,随着迭代次数的增加,学习率递减。

  • 其他计算公式:
    α = 0.95epoch α0 (指数衰退)

吴恩达深度学习笔记-优化算法(第5课)_第24张图片
【t为mini-batch的数量】
还有将α设置为关于t的离散值:
吴恩达深度学习笔记-优化算法(第5课)_第25张图片

十、局部最优的问题

下图是我们脑海中局部最优的图像,到处存在这局部最优,算法有可能困在某个局部最优里面,而不能抵达全局最优。
吴恩达深度学习笔记-优化算法(第5课)_第26张图片
对于局部最优解是一个个小山谷其实是错误的理解;在神经网络中,梯度为0的点并不是这个突得局部最优点,其实就只是代价函数的0梯度点,通常是鞍点,如下图所示:
吴恩达深度学习笔记-优化算法(第5课)_第27张图片

这只是二维的情况下,在高维的数据下,若是局部最优,要求在每个维度下都是凸函数或者是凹函数,但维度很高时发生的概率很小。所以,在高维数据更可能遇到鞍点

但鞍点的平稳段会减缓学习,平稳段是一块区域,其导数长时间接近于0。因此需要多次梯度下降才能缓慢的走出平稳段,如下图所示。
吴恩达深度学习笔记-优化算法(第5课)_第28张图片

  • 本节两个要点:
    (1)不太可能会困在极差的局部最优中
    (2)平稳段会使学习十分缓慢(采用Adam、动量梯度下降算法可以尽早的走出平稳段)

你可能感兴趣的:(吴恩达深度学习,深度学习,算法,人工智能)