改善深层神经网络:超参数调整、正则化以及优化——2.2 理解Mini-batch梯度下降法

使用batch梯度下降法时,每次迭代都需要遍历整个训练集,可以预期每次迭代的成本都会下降。如果成本函数J是迭代次数的一个函数,它应该会随着每次迭代而减少,如果J在某次迭代中增加了,那肯定出了问题。

如果使用mini-batch梯度下降法,如果作出成本函数在整个过程中的图,则并不是每次迭代都是下降的,特别是在每次迭代中要处理的是 X { t } X^{\left\{t\right\}} X{t} Y { t } Y^{\left\{t\right\}} Y{t}。如果要作出成本函数 J { t } J^{\left\{t\right\}} J{t}的图,而 J { t } J^{\left\{t\right\}} J{t}只和 X { t } X^{\left\{t\right\}} X{t} Y { t } Y^{\left\{t\right\}} Y{t}有关,也就是每次迭代下都在训练不同的样本数或者说训练不同的mini-batch。如果要作出成本函数J的图,很可能是下图中的结果,走向朝下,但有更多的噪声。
在这里插入图片描述
所以如果作 J { t } J^{\left\{t\right\}} J{t}的图,因为在训练mini-batch梯度下降法时,会经过多代,没有每次迭代都下降时不要紧的,但是走势应该向下,噪声产生的原因在于,也许 X { 1 } X^{\left\{1\right\}} X{1} Y { 1 } Y^{\left\{1\right\}} Y{1}是比较容易计算的mini-batch,因此成本低一点。不过也许出于偶然, X { 2 } X^{\left\{2\right\}} X{2} Y { 2 } Y^{\left\{2\right\}} Y{2}是比较难运算的mini-batch,或许你需要一些残缺的样本,这样一来成本会更高一些,所以才会出现这些摆动,因为是在运行mini-batch梯度下降法作出的成本函数图。

需要决定的变量之一是mini-batch的大小,m是训练集大小。极端情况下,如果mini-batch的大小为m,其实就是batch梯度下降法。在这种极端情况下,就有了 X { 1 } X^{\left\{1\right\}} X{1} Y { 1 } Y^{\left\{1\right\}} Y{1},并且该mini-batch等于整个训练集,所以把mini-batch大小设为m可以得到batch梯度下降法。

另一种极端情况,假设mini-batch大小为1,这就是随机梯度下降法,每个样本都是独立的mini-batch。当看第一个mini-batch X { 1 } X^{\left\{1\right\}} X{1} Y { 1 } Y^{\left\{1\right\}} Y{1},它就是第一个训练样本。

看在两种极端下,成本函数的优化情况。如下图如果这是想要最小化的成本函数的轮廓,最小值点在轮廓中心,batch梯度下降从某处开始,相对噪声低些,幅度也大一些。

相反,在随机梯度下降法中,从某一点开始,重新选取一个起始点,每次迭代只对一个样本进行梯度下降,大部分时候向着全局最小值靠近,有时候会远离最小值,因为那个样本恰好给你指定的方向不对,因此随机梯度下降法是有很多噪声的。平均来说,它最终会靠近最小值,不过有时候也会方向错误。因为随机梯度下降法永远不会收敛,而是会一直在最小值附近波动,但它并不会在达到最小值并停留在此。

实际上你选择的mini-batch大小在1和m二者之间,原因在于,如果使用batch梯度下降法,mini-batch的大小为m,每次迭代需要处理大量训练样本,该算法的主要弊端在于,特别是在训练样本数量巨大的时候,单次迭代耗时太长,如果训练样本不大,batch梯度下降法运行地很好。相反,如果使用随机梯度下降法,如果只要处理一个样本,这个方法很好,通过减小学习率,噪声会被改善或者有所减少,但随机梯度下降法的一大缺点是会失去所有向量化带来的加速,因为每一次只处理一个训练样本,这样效率过于低下,所以实践中最好选择不大不小的mini-batch尺寸,实际上学习率达到最快。你会发现两个好处。一方面得到了大量向量化的数据,另一方面不需要等待整个训练集被处理完就可以开始后续工作。
在这里插入图片描述
用mini-batch梯度下降法,它不会总朝向最小值靠近,但它比随机梯度下降要更持续地靠近最小值的方向,它也不一定在很小的范围内收敛或者波动,如果出现这个问题,可以慢慢减少学习率。

如果mini-batch的大小既不是1也不是m,应该取中间值,那应该怎么选择呢?首先,如果训练集较小,直接用batch梯度下降法,样本集较小就没必要使用mini-batch梯度下降法,可以快速处理整个训练集,所以使用batch梯度下降法也很好,这里说的少是说小于2000个样本,这样比较适合使用batch梯度下降法。不然,样本数目较大的话,一般的mini-batch大小为64到512,考虑到电脑内存设置和使用的方式,如果mini-batch大小是2的次方,代码会运行地快一些。最后要注意的是,在mini-batch中, X { t } X^{\left\{t\right\}} X{t} Y { t } Y^{\left\{t\right\}} Y{t}要符合CPU/GPU内存,取决于你的应用方向,以及训练集的大小。如果你处理的mini-batch和CPU/GPU内存不相符,不管用什么方法处理数据,你会注意到算法的表现急转直下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值