深度学习-吴恩达-笔记-6-优化算法

 

Mini-batch 梯度下降


之前的梯度下降法,在每一次迭代时都处理了全部的样本数据,如果样本过大,一次迭代会变得非常慢。
 
训练样本:

实际输出值:

mini-batch 梯度下降法就是把全部训练集分割成数量相等的多个小批次集,一次迭代只处理一个小批次集,直到遍历迭代完所有的小批次集即可。
 
把训练集 𝑋 分成 𝑡 等份,同样,把 𝑌 也分成 𝑡 等份,得到以下符号:
 
  :表示第 𝑡 个小批次集的训练样本。
 
  :表示第 𝑡 个小批次集的实际输出值。
 
mini-batch 梯度下降法一次迭代只处理    和   ,而不是 𝑋 和 𝑌 。
 
使用 batch 梯度下降法,一次遍历训练集只能做一次梯度下降,使用 mini-batch 梯度下降法,一次遍历训练集,可以做 𝑡 次梯度下降。因此,在大量训练集情况下, mini-batch 梯度下降法比 batch 梯度下降法运行地更快。
 
 

理解 mini-batch 梯度下降法


使用 batch 梯度下降法时,每次迭代都需要历遍整个训练集,可以预期每次迭代成本函数都会下降。
 
使用 mini-batch 梯度下降法,每次迭代只需要遍历一个小批次集,所以并不是每次迭代成本函数都会下降,但是总体趋势是下降的。导致趋势抖动的原因,可以理解为,每次迭代只用到了一部分数据,导致成本或误差变高了。
 
如图:

这里需要设置超参数是 mini-batch 的大小:
 
mini-batch等于所有训练集大小,其实就是 batch 梯度下降法。
 
mini-batch等于1,其实就是随机梯度下降法。
 
三种梯度下降法的学习效果如下:
 

批量梯度下降法:每次迭代使用全部数据训练,所以每次都能朝误差最小的方向快速收敛,缺点是每次训练比较耗时间。
 
随机梯度下降法:每次迭代使用一个训练样本,所以每次的梯度方向误差较大,导致波动也较大。
 
小批量梯度下降法:每次迭代使用一小批次样本,所以每次的梯度方向误差相对较小,收敛也较快。
 
如何选择梯度下降法:
 
训练集小于 2000 个样本,比较适用批量梯度下降法。
 
训练集大于 2000 个样本,比较适用小批量梯度下降法, 一般 mini-batch 大小是 2 的 𝑛 次方(如:64,128等,一般不大于 512),通常做法是,尝试几个不同的 mini-batch 值,选择效果最好的一个。
 
 

指数加权平均数


下面介绍几个比梯度下降更快的优化算法,在理解这些算法之前,先了解一下指数加权平均数。
 
指数加权平均数公式:𝑣𝑡 = 𝛽𝑣𝑡-1 + (1 - 𝛽)𝜃𝑡
 
𝑣𝑡:第 t 天的加权平均值。
 
𝜃𝑡:第 t 天的实际观察值。
 
𝛽:加权平均值的权重(0 < 𝛽 < 1),用于调节历史平均值和当前观察值的权重比例,表示当前的平均值受到历史平均值的影响程度。
 
例子:天气趋势预测(蓝点就是每天的温度):
 

为了预测趋势,这里使用温度的局部平均值来表示局部的趋势,也就是指数加权平均数。
 
设置温度初始值为 0 ,根据初始值计算出每天温度的平均值:
𝑣0 = 0
𝑣1 = 𝛽𝑣0 + (1 - 𝛽)𝜃1
𝑣2 = 𝛽𝑣1 + (1 - 𝛽)𝜃2
𝑣3 = 𝛽𝑣2 + (1 - 𝛽)𝜃3
……
𝑣n = 𝛽𝑣n-1 + (1 - 𝛽)𝜃3
 
将 𝑣n 展开:
 

𝑣n = 𝛽^n * 𝑣0 + (1 - 𝛽) ( 𝛽^(n-1) * 𝜃1 + 𝛽^(n-2) * 𝜃2 + ... + 𝛽 * 𝜃n-1 + 𝜃n )

可以看出,𝑣n 是对每天温度的加权平均,时间越靠近,权重越大,时间越靠前,权重越小,因为权重系数是以指数形式来表示的,所以称为指数加权。这也符合我们对温度变化的直观感受,当天的温度受最近几天的影响较大,受较远时期的影响较小。
 
如果这里 𝛽 设置为 0.9,可以看成是近10天的平均值,因为 𝛽^9 的值是非常小了,后续的可以近似为 0。平均天数的计算公式:
 

𝛽 分别为 0.9(平均天数为10天)、0.98(平均天数为50天)时,对应上图中的趋势是红线,绿线。可以看出,𝛽 值越大,趋势越平缓一些,也就是要平均的天数更多了,受到较远时期的影响变大了,缺点是趋势出现了延迟。
 
如果 𝛽 分别为 0.5,趋势如下图(黄线):
 

0.5对应的平均天数为2天,平均的数据太少,趋势中有了更多的噪声,有可能出现异常值, 但是这个曲线能够更快适应温度变化。
 
指数加权平均数在统计学中被称为指数加权移动平均值,通过调整参数 𝛽 来提高算法的效果,如上面例子中,红色曲线的效果最好。
 
 

理解指数加权平均数


在天气趋势预测的例子中,𝛽 为 0.9 时的效果最好,它平均了最近10天的数据,而 0.9^10大约是0.35,这大约是 1/e,e是自然常数。换句话说, 我们只关注过去10 天的温度,因为10天后,权重下降不到当日权重的 1/3,也就是下降不到 1/e。所以可以用 1/e 作为一个分界点,当权重衰减到这个值以下,就可以忽略不计。
 
对于任意的 𝛽,都满足 𝛽^(1/(1-𝛽)) 约等于 1/e。因此,指数加权平均数就是最近 1/(1-𝛽) 天的平均值。
 
注意:以1/e为分界点,只是作为一种理解问题的思考方向,并不是严格的数学证明。
 
计算指数加权平均数只需要单行数字的存储,资源占有率大大减小,且计算逻辑较简单,运行效率也就大大提高。
 
 

指数加权平均的偏差修正


指数加权平均数存在一个冷启动的问题,也就是开始时的预测偏差较大。如图:
 

当 𝛽 =0.98 ,实际上得到的是紫色曲线,可以看到紫色曲线的起点较低。假设 𝑣0 = 0, 𝜃1 = 40,通过加权平均公式得到 𝑣1 = 0.98 * 𝑣0 + 0.02 * 40 = 8,这离真实的温度 40 偏差较大,因此需要修正。
 
带有偏差修正的指数加权平均数的公式:
 

修正后的 𝑣1 = ( 0.98 * 𝑣0 + 0.02 * 40 ) / 0.02 = 40,这样就可以对开始的部分平均值进行偏差修正, 随着 𝑡 (天数)增加, 𝛽^𝑡 接近于 0,也就是说过了开始的冷启动阶段,𝛽^𝑡 趋向 0,分母趋向1,就不再进行修正。
 
上面例子中,紫线在开始的冷启动阶段和绿线存在偏差,当 𝑡 较大时,紫线基本上和绿线是重合的。通过对紫线开始的冷启动阶段进行修正后,整个紫线和绿线就基本重合了。
 
 

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


动量梯度下降法( Momentum), 基本的思想就是计算梯度的指数加权平均数,并利用该梯度更新权重。该方法的效率快于一般的标准梯度下降法。
 
如图:
 

假设纵轴代表参数 𝑏(摆动较大),横轴代表参数 𝑊(摆动较小)。我们的目的是,在纵轴方向减缓摆动(变化慢),在横轴方向加快学习速度(变化快)。
 
动量梯度下降法:
 

这里使用 mini-batch 计算 𝑑𝑊,𝑑𝑏。
 
这里有两个超参数, 学习率 𝑎 以及参数 𝛽。 𝛽 最常用的值是0.9,这里的意思是平均了前10次迭代的梯度。
 
在迭代过程中,会发现纵轴方向的移动平均值 𝑣𝑑𝑏 接近于零(纵轴摆动较大,导数出现正负值,正负值抵消后,平均值接近零),纵轴会变得平缓。横轴方向的移动平均值 𝑣𝑑𝑊 仍然较大(横轴方向大体一致,导数都指向了最小值的方向,平均值变化较小),横轴方向运动较快。
 
虽然这里可以使用偏差修正,但是一般经过10次迭代后,移动平均已经过了初始阶段,所以在实际中可以不使用偏差修正。
 
有一些动量梯度下降法的资料会把  1 - 𝛽 去掉,也就得到: 𝑣𝑑𝑊 = 𝛽𝑣𝑑𝑊 + 𝑑𝑊。 实际上,这两种方式效果都不错,只是该方法会影响到学习率 𝑎 的最佳值。 也就是调整超参数 𝛽 的同时,也要调整学习率 𝑎 。
 
建议使用第一种方式,也就是带有 1 - 𝛽 的公式。
 

RMSprop


RMSprop也是一种加速梯度下降算法,全称是 root mean square prop (均方根)算法。
 
如图:
 

假设纵轴代表参数 𝑏(摆动较大),横轴代表参数 𝑊(摆动较小)。我们的目的是,在纵轴方向减缓摆动(变化慢),在横轴方向加快学习速度(变化快)。
 
这里使用新符号𝑆𝑑𝑊 、 𝑆𝑑𝑏: 

这里使用 mini-batch 计算 𝑑𝑊,𝑑𝑏。
 
注意:这里的平方是导数 𝑑𝑊 和 𝑑𝑏 的平方,不是 𝑊 和 𝑏 的平方。
 
在迭代过程中,会发现纵轴方向的移动平均值 𝑆𝑑𝑏 变得较大(纵轴摆动较大,所以导数也比较大,虽然有正负值,但是平方后就变得较大了),𝑏 变化得较慢,纵轴会变得平缓。横轴方向的移动平均值 𝑆𝑑𝑊 变得较小(横轴摆动较小,所以导数也较小,虽然平方后会变大,但是相比纵轴还是小很多,也就是函数的倾斜程度还是在纵轴上),𝑊 变化得较快,横轴方向运动较快。
 
注意:这里把纵轴和横轴方向分别称为 𝑏 和 𝑊, 只是为了方便展示。对于高纬度空间,该方法一样可以平缓摆动较大的维度。
 
RMSprop的全称是均方根,也就是将微分进行平方,然后再使用平方根。
 
这里有一个问题是, 如果 𝑆𝑑𝑊 的平方根趋近于 0 ,得到的值会非常大。为了确保数值稳定,在实际操练中,要在分母上加上一个很小的 𝜀,如  𝜀 为 10^-8 是不错的选择。
 
RMSprop 跟 Momentum 相似的一点是可以消除梯度下降中的摆动,并且允许使用一个较大的学习率 𝑎,从而加快算法学习速度。
 
 

Adam 优化算法


上面提到的 Momentum 和 RMSprop 梯度下降法 ,都适用于不同结构的神经网络,且效果不错。
 
Adam 算法结合了 Momentum 和 RMSprop,并且是一种极其常用的学习算法,被证明能有效适用于不同的神经网络。
 
如图:
 

这里使用 mini-batch 计算 𝑑𝑊,𝑑𝑏。
 
公式如下:

一般使用 Adam 算法的时候,要计算偏差修正:
 

最后更新权重:

超参数的选择:

使用 Adam 的时候,建议使用缺省值或建议值即可:
 
学习率 𝑎 :需要不断尝试,然后选择效果最好的值。
 
𝛽1:常用的缺省值为 0.9。
 
𝛽2:建议为 0.999。
 
𝜀:建议为 10^-8。
 
Adam 代表自适应矩估计(Adaptive Moment Estimation), 𝛽1用于计算导数的平均值(𝑑𝑊),称为第一阶矩, 𝛽2用来计算平方数的指数加权平均数((𝑑𝑊)^2),叫做第二阶矩。这是 Adam 名字的由来。
 
 

学习率衰减


学习率衰减是指为了加快学习算法的收敛,学习率要随时间慢慢减少。
 
例子:
 

这里假设使用了 mini-batch 梯度下降法。
 
蓝线:使用固定的学习率 𝑎,在迭代过程中会有噪音,最后算法在最小值附近有较大的摆动,并不会精确收敛。
 
绿线:开始时学习率 𝑎 还较大,算法学习相对较快, 但随着 𝑎 变小,学习的步伐也变慢变小,最后算法在最小值的较小区域内摆动,收敛效果也较好。
 
控制学习率 𝑎 的衰减公式:

decayrate: 衰减率(超参数)
 
epoch-num:迭代的次数
 
𝛼0:初始学习率(超参数)
 
还有其它的学习率衰减公式:
 
1) 指数衰减:

 
2)按照迭代次数平方根的比例衰减:

𝑘:常数(超参数)
 
𝑡: mini-batch 的次数(类似迭代次数)
 
3)离散的阶梯衰减:如每过一会,就让学习率减少一半。
 
4)手动衰减:如果训练模型的数量较少,如一两个,可以通过观察训练过程,然后人工调整学习率。
 
注意:相比其它超参数,学习率衰减的相关超参数的优先级较低,可以最后再进行超参数地调整。
 
 

局部最优的问题


局部最优的理解(低维空间):
 

低维空间的时候,我们直观上的局部最优点就像上图一样,有很多个局部最优点。
 
实际上,在高维空间中,如优化一个神经网络, 通常梯度为零的点并不是上图中的局部最优点,而是鞍点。如图:
 

所以我们对低维空间的局部最优的直觉理解,并不适用于高维空间中。
 
算法训练时遇到鞍点,会出现一个问题:鞍点的附近是一段停滞区(导数长时间接近零的一段区域),停滞区曲面很平坦,导致梯度下降很缓慢。如图:
 

要解决算法训练遇到鞍点的问题,这里就要使用高级优化算法(如:Momentum、RMSprop、Adam),高级优化算法可以加速学习速度,可以尽快地走出停滞区。
 
 
 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值