3.31-batch和momentum

之前讲过训练不是拿所有的N个数据都去训练,而是会分为几个batch,这个分的过程就叫做shuffle(洗牌)。

那到底是分batch好还是不分batch好呢,如下图,左图是不分(相当于让batch size直接为N),右边是让size=1。因为走完一个batch就会找到一个梯度,更新一次参数,所以20的肯定比1的这个时间花的更久,因为它得看20个examples再更新,但是它一定比1的更精准。今天这个size为1的会更新20次,但是每一次的更新都很无序。图中比喻成了放技能,20的技能冷却时间长,但是威力更大。

其实在这样说并不能判断出来哪种更好,但是现在有一种东西叫GPU,它可以做并行计算,比如这个TeslaV100,在这个上面,batch size为1和为1000其实都是1秒多,那肯定选batch size大的呀,有精准又时间短。这里就是说的总时间了,总时间是1个epoch里总update的时间乘以跑完一个batch的时间,那如果1和1000都话1S,但是1的update数是1000的1000倍,那1个epoch的总时间就是1000倍了。这也就是在GPU上,小的batch size反而会花更多时间。

不过可以看出来如果数据量太大了,到了100000,花的时间还是会增加。


但是神奇的东西来了,按照刚才的说法,选取大的batch size,能够又powerful又short time。可是,noisy的update其实反而效果更好。如下图,在两个数据集上不同batch size的曲线,纵轴是accuracy准确率,当然是准确率越大越好。此时随着size的增加,准确率是下降的。

原因如下,full batch的时候,因为只更新一次,这一次看完所有的数据,所以相当于沿着L这一个方向在走,很容易陷入stuck中停下来。而小的batch需要看多个方向,在L1的地方卡住了,指不定在L2的相同位置是可走的。

下面是有一篇论文探讨过这个问题,得出来的结论也是在testing上,小batch比大batch好,一个是数据支撑,一个是大概的原理解释。

从数据可以看出来training上都可以到99%,但是在testing上,大的就很明显不如小的了。

解释是说,今天training和testing会很像但是还是会有偏差,那么比如说是向右偏一点的偏差,这里的梯度为0 的低谷点也有两种,一种是很平缓的flat minima,一种是很狭窄的sharp minima。在发生偏差的时候,红色就代表差值,那肯定是flat的偏差小,因为平缓你左右移动一点其实海拔影响不大。而large batch指向性更明显,不容易走出sharp minima,在sharp minima中,小的batch的noisy大,随便指指就出去了。所以小batch的一般是在flat minima。

所以结论就是在testing的时候,small size的batch会又更好的效果。

那么通过以上,我们会发现大的和小的其实各有优势,比如小的虽然画的时间多,但是在optimization和generalization上表现更好。所以batch size成为了一个hyper parameter,由个人来决定。也有很多人来想能不能优点兼得,他们一般会设很大的size然后用其他方法取解决优化上的问题。


下面来讲momentum(动力/冲力)。我们说梯度下降最怕遇到梯度为零的谷底,也就是critical point,或者说local minima,因为到这儿时候就如同下图的小球,走不出去了。但是在实际物理中,小球不会一到这里就停住,他会有一个惯性一个冲量继续往前,甚至可能会翻过去到达另一个更好的minima。

然后回忆一下最原始的梯度下降法,他是每次算一个g之后往g的反方向走(这里不用纠结,总之就是只受算出来的g值影响下一步的方向)。假设初始没有方向就是一个点,那么就会一步步跟着算出来的g走,如果g不巧为0 ,就不会再走下去了。

momentum的思想就是和现实世界的物理规律一样,如果能让移动带有惯性就好了。数学上就设置为会考虑除当前计算的g之外的,前一次的g甚至是前前次的g,它定义为每一次新的移动方向是g的反向和前一次方向的相加。具体如下图。

这一次,在小球移动到最低点的时候,红色的增量,也就是梯度为0了,但是加上前一次移动量之后,它就有可能冲出这个local minima了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值