目录
Mini-batch 梯度下降
理解 mini-batch 梯度下降法
指数加权平均数
理解指数加权平均数
指数加权平均的偏差修正
动量梯度下降法 ( Gradient descent with Momentum)
RMSprop
Adam 优化算法
学习率衰减
局部最优的问题
【此为本人学习吴恩达的深度学习课程的笔记记录,有错误请指出!】
Mini-batch 梯度下降
之前的梯度下降法,在每一次迭代时都处理了全部的样本数据,如果样本过大,一次迭代会变得非常慢。
训练样本:
实际输出值:
mini-batch 梯度下降法就是把全部训练集分割成数量相等的多个小批次集,一次迭代只处理一个小批次集,直到遍历迭代完所有的小批次集即可。
把训练集 分成 等份,同样,把 也分成 等份,得到以下符号:
![](http://img.e-com-net.com/image/info8/05dc70096e024ff2b2d4f7e11f75c381.jpg)
:表示第 个小批次集的训练样本。
![](http://img.e-com-net.com/image/info8/e2200fdb2424428fb32a4a2f55cf8b1d.jpg)
:表示第 个小批次集的实际输出值。
mini-batch 梯度下降法一次迭代只处理
![](http://img.e-com-net.com/image/info8/5d11b3ba82ad41fdae2109538bfb9e36.jpg)
和
![](http://img.e-com-net.com/image/info8/447035409c6b405394a67950dfff20af.jpg)
,而不是 和 。
使用 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),高级优化算法可以加速学习速度,可以尽快地走出停滞区。