深度学习笔记(二):2优化算法(一)Mini-batch和指数加权平均数

Mini-batch

  1. Mini-batch是一个一次训练数据集的一小部分,而不是整个训练集的技术。它可以使内存较小、不能同时训练整个数据集的电脑也可以训练模型。
    Mini-batching 从运算角度来说是低效的,因为你不能在所有样本中计算 loss。但是这点小代价也比根本不能运行模型要划算。它跟随机梯度下降(SGD)结合在一起用也很有帮助。
    方法是在每一代训练之前,对数据进行随机混洗,然后创建 mini-batches,对每一个 mini-batch,用梯度下降训练网络权重。因为这些 batches 是随机的,你其实是在对每个 batch 做随机梯度下降(SGD)。

  2. 假设 mini-batch 大小为 1,就有了新的算法,叫做随机梯度下降法,每个样本都是独立的 mini-batch,当你看第一个 mini-batch,也就是????{1}和????{1},如果 mini-batch 大小为 1,它就是你的第一个训练样本,这就是你的第一个训练样本。接着再看第二个mini-batch,也就是第二个训练样本,采取梯度下降步骤,然后是第三个训练样本,以此
    类推,一次只处理一个。

  3. 首先,如果训练集较小,直接使用 batch 梯度下降法,样本集较小就没必要使用 mini-batch 梯度下降法,你可以快速处理整个训练集,所以使用 batch 梯度下降法也很好,这里的少是说小于 2000 个样本,这样比较适合使用 batch 梯度下降法。不然,样本数目较大的话,一般的 mini-batch 大小为 64 到 512,考虑到电脑内存设置和使用的方式,如果 mini-batch 大小是2 的????次方,代码会运行地快一些,64 就是2 的6 次方,以此类推,128 是2 的7 次方,256 是2 的 8 次方,512 是 2 的9 次方。所以我经常把 mini-batch 大小设成 2 的次方。在上一个视频里,我的 mini-batch 大小设为了 1000,建议你可以试一下 1024,也就是2 的10 次方。也有mini-batch 的大小为1024,不过比较少见,64 到512 的mini-batch 比较常见。

指数加权平均数

  1. 什么是指数加权平均

指数加权平均(exponentially weighted averges),也叫指数加权移动平均,是一种常用的序列数据处理方式。

它的计算公式如下:
深度学习笔记(二):2优化算法(一)Mini-batch和指数加权平均数

其中,

θ_t:为第 t 天的实际观察值,
V_t: 是要代替 θ_t 的估计值,也就是第 t 天的指数加权平均值,
β: 为 V_{t-1} 的权重,是可调节的超参。( 0 < β < 1 )
例如:

我们有这样一组气温数据,图中横轴为一年中的第几天,纵轴为气温:

直接看上面的数据图会发现噪音很多,

这时,我们可以用 指数加权平均 来提取这组数据的趋势,

按照前面的公式计算:

这里先设置 β = 0.9,首先初始化 V_0 = 0,然后计算出每个 V_t:
  深度学习笔记(二):2优化算法(一)Mini-batch和指数加权平均数

将计算后得到的 V_t 表示出来,就得到红色线的数值:

可以看出,红色的数据比蓝色的原数据更加平滑,少了很多噪音,并且刻画了原数据的趋势。

指数加权平均,作为原数据的估计值,不仅可以 1. 抚平短期波动,起到了平滑的作用,

深度学习笔记(二):2优化算法(一)Mini-batch和指数加权平均数

可以看出,红色的数据比蓝色的原数据更加平滑,少了很多噪音,并且刻画了原数据的趋势。

指数加权平均,作为原数据的估计值,不仅可以 1. 抚平短期波动,起到了平滑的作用,

  1. 为什么在优化算法中使用指数加权平均

上面提到了一些 指数加权平均 的应用,这里我们着重看一下在优化算法中的作用。

以 Momentum 梯度下降法为例,

Momentum 梯度下降法,就是计算了梯度的指数加权平均数,并以此来更新权重,它的运行速度几乎总是快于标准的梯度下降算法。

这是为什么呢?

让我们来看一下这个图,

深度学习笔记(二):2优化算法(一)Mini-batch和指数加权平均数

例如这就是我们要优化的成本函数的形状,图中红点就代表我们要达到的最小值的位置,
假设我们从左下角这里出发开始用梯度下降法,那么蓝色曲线就是一步一步迭代,一步一步向最小值靠近的轨迹。

可以看出这种上下波动,减慢了梯度下降法的速度,而且无法使用更大的学习率,因为如果用较大的学习率,可能会偏离函数的范围。

如果有一种方法,可以使得在纵轴上,学习得慢一点,减少这些摆动,但是在横轴上,学习得快一些,快速地从左向右移移向红点最小值,那么训练的速度就可以加快很多。

这个方法就是动量 Momentum 梯度下降法,它在每次计算梯度的迭代中,对 dw 和 db 使用了指数加权平均法的思想,

深度学习笔记(二):2优化算法(一)Mini-batch和指数加权平均数

这样我们就可以得到如图红色线的轨迹:

深度学习笔记(二):2优化算法(一)Mini-batch和指数加权平均数

可以看到:
纵轴方向,平均过程中正负摆动相互抵消,平均值接近于零,摆动变小,学习放慢。
横轴方向,因为所有的微分都指向横轴方向,因此平均值仍然较大,向最小值运动更快了。
在抵达最小值的路上减少了摆动,加快了训练速度。

  1. β 如何选择?

根据前面的计算式子:

深度学习笔记(二):2优化算法(一)Mini-batch和指数加权平均数

将 V_{100} 展开得到:

深度学习笔记(二):2优化算法(一)Mini-batch和指数加权平均数

这里可以看出,V_t 是对每天温度的加权平均,之所以称之为指数加权,是因为加权系数是随着时间以指数形式递减的,时间越靠近,权重越大,越靠前,权重越小。

深度学习笔记(二):2优化算法(一)Mini-batch和指数加权平均数

再来看下面三种情况:

当 β = 0.9 时,指数加权平均最后的结果如图红色线所示,代表的是最近 10 天的平均温度值;
当 β = 0.98 时,指结果如图绿色线所示,代表的是最近 50 天的平均温度值;
当 β = 0.5 时,结果如下图黄色线所示,代表的是最近 2 天的平均温度值;

深度学习笔记(二):2优化算法(一)Mini-batch和指数加权平均数
深度学习笔记(二):2优化算法(一)Mini-batch和指数加权平均数

β 越小,噪音越多,虽然能够很快的适应温度的变化,但是更容易出现奇异值。

β 越大,得到的曲线越平坦,因为多平均了几天的温度,这个曲线的波动更小。
但有个缺点是,因为只有 0.02 的权重给了当天的值,而之前的数值权重占了 0.98 ,
曲线进一步右移,在温度变化时就会适应地更缓慢一些,会出现一定延迟。

通过上面的内容可知,β 也是一个很重要的超参数,不同的值有不同的效果,需要调节来达到最佳效果,一般 0.9 的效果就很好。

  1. 指 数 加 权 平 均 的 偏 差 修 正
    在机器学习中,在计算指数加权平均数的大部分时候,大家不在乎执行偏差修正,因为大部分人宁愿熬过初始时期,拿到具有偏差的估测,然后继续计算下去。如果你关心初始时期的偏差,在刚开始计算指数加权移动平均数的时候,偏差修正能帮助你在早期获取更好的估测

深度学习笔记(二):2优化算法(一)Mini-batch和指数加权平均数

在估测初期不用v_t,而是v_t/(1-β^t),也就是????1和????2的加权平均数,并去除了偏差。你会发现随着????增加,????????接近于 0,所以当????很大的时候,偏差修正几乎没有作用.因此当????较大的时候,紫线基本和绿线重合了