batch和momentum

在这里插入图片描述

🚀 机器学习系列前期回顾

1、初识机器学习
2、线性模型到神经网络
3、local minima`的问题如何解决

🚀在初识机器学习中,了解了机器学习是如何工作的并引入了线性模型,在线性模型到神经网络这节,将线性模型进一步改进为弹性较大的神经网络模型并在结尾简要说了一下使用一个batch更新一次参数,在local minima的问题如何解决这节,解决了求解模型未知参数的时候遇见local minima的解决办法。在这一小结,将继续探索为什么要使用batch

1) batch

在前面已经了解过了batch 如何工作,其就是在进行模型未知参数求解的时候,对于构建损失函数来说,之前是使用所有的已知的数据(训练数据)来构建损失函数,而引入batch,将已知的所有数据分成等大小的batch,使用一个batch的数据来构建损失函数,进行更新参数,然后依次使用下一个batch构建新的损失函数,进行更新参数,直到使用完最后一个batch,即看完所有的已知数据,即进行了一个epoch 在进行完一个epoch后,会将数据进行一个shuffle(洗牌的操作),再次分成batch进行训练,更新参数。

在这里插入图片描述

2)batch的大小如何设置

对于batch的大小如何设置,这也是一个超参数,需要自己人工设置,那到底应该设置多大,先来看一个极端的例子

example

假设有20个训练数据,若极端的将batch的大小就设置为20,即full batch;另外一个极端将batch的大小设置为1。

在这里插入图片描述

  • 对于full batch来说,其是使用full batch来构建损失函数,即用20个已知数据来构建损失函数,其更新一次参数要看过所有的20个资料,并且看完20个资料只更新一次。
  • 对于batch的大小为1,即只使用一个数据来构建损失函数,其每次更新数据只看其中一个数据,当看完20个资料更新20次。

这样对比来看,使用full batch的话,计算量较大,好像更新较慢,batch的大小为1的话,计算量较小,且更新的速度较快,所以看起来好像batch的大小越小越好

其实大的batch不需要更长的时间

这是因为其实GPU有平行运算(parallel computing)的能力;在下图中,对于手写体识别的实验来说,若batch的大小是1或者10或者100,甚至1000的话,他们运行所需要的时间都是相差不大的,所以batch的大小只要不太大,其计算时间几乎没有区别

在这里插入图片描述

所以得到小的batch和大的batch在一次计算时间上没有差异。但是对于一个epoch的时间呢?

如下图所示,对于一个epoch来说,如果batch的大小是1的话,进行一个epoch需要60000次的更新操作;如果batch的大小是1000的话,进行一个epoch需要60次的更新操作。在计算时间相同的情况下,60000次的计算更新操作显然要比60次的更新操作所需要的时间更多。

在这里插入图片描述

时间上来说:较大的batch更节约资源

batch的大小对于训练结果的准确度又有什么影响呢?观察下图可知,要是batch的过大,反而会导致准确度的下降。同样的模型使用不同的batch训练,其最后的准确度不同,这显然不是model bias的问题,也并不是overfitting的问题,因为对于过拟合来说,其表现为训练上表现好,测试上表现不好,所以这是由于使用大的batch导致的optimization failed(没有找到最好的解)。
在这里插入图片描述

准确度上来说:较小的的batch可以训练出来更高准确度的模型。

为什么较小的的batch可以训练出来更高准确度的模型?

在这里插入图片描述

  • full batch的其损失函数是固定不变的,在更新参数求解的时候更难走到全局最优解。
  • small batch的损失函数,在不同的batch中,其损失函数是不一样的,就如上图所示,若在batch1中得到的损失函数是 L 1 L^1 L1的话,它也许会卡在local minima的位置,当时进入第二个batch进行训练的时候,也许在batch2中得到的损失函数 L 2 L^2 L2就正好跳过了local minima,所以小一点的batch更好到达全局最优点。

小的batch在训练的时候可以得到更低的准确率,现在想办法将使用大的batch训练(下图中LB(large batch)那列)也达到和小的一样的准确度,然后让LB和SB进行测试,得到的结果也如下图所示,仍然是SB的表现更好。
在这里插入图片描述
所以可以得到,小的batch不仅在训练的时候表现得更好,而且在测试上也会表现得更好,即使使用大的batch,想办法让其在训练得时候达到小batch的训练效果,即使得到了好的训练效果,但是其在测试数据上也不会表现得好。

上图该数据来自论文https://arxiv.org/abs/1609.04836

总结一下小的batch和大batch的对比:

在这里插入图片描述

3) momentum

这也是一个对抗local minimasaddle point的技术。先来假设一下,在物理世界里,一个小球从高处滚落,要想使得其滚到局部最低点的时候,并不会停下来,而是会继续带有一定的momentum(动量) 继续向前运动,也许就会有机会走出local minma

在这里插入图片描述

所以,现在如果可以将这种特性加到之前的梯度下降中的话,就可以进一步很好的克服local minma的问题,可以更好的走到全局最优点。

在加入这种特性之前,先来回顾一下之前的梯度下降;如下所示,随机初始初始点开始,计算梯度,根据该点的梯度进行下降。

在这里插入图片描述

加入momentum之后,每次进行移动的时候会考虑前一次的移动方向。 每一次更新都是计算当前点的梯度然后再加上前一步的梯度。

在这里插入图片描述

具体来看一下momentum是如何工作的

  • 第一个位置,先计算该点的导数,根据导数得出的方向为红色线提供的,蓝色线为初始设定的一个方向。
  • 第二个位置,同样先计算该点的导数,很平缓,所以根据导数得到的红色线很小,同时得加上前一步的移动方向继续向前移动
  • 来到第三个位置,计算导数为零,即不提供红色方向,但是还得加上前一个点的蓝色方向,所以还得再往前走

在这里插入图片描述

  • 来到第四个点后,同样的计算其导数,导数提供的红色方向是向左的,前一个点的蓝色方向提供的蓝色方向是向右的,所以二者相加会抵消一部分,若前一个点提供的蓝色方向更多一点的话,那么整体也就会继续再向右移动,有可能就会越过local minima

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值