Review:Optimization with Batch
batch是怎么做的呢?
实际上我们我们再算微分的时候,不是真的对所有的数据算出来的L作微分,而是将L 分成N 个batch,当我们更新参数的时候是将其中的一个Batch拿出来算gradient,然后在更新参数。再拿另一个batch算gradient ,更新参数,以此类推,并不是拿所有的的数据一起去算Loss.将所有的batch算一遍的方法叫做1 epoch。实际上在做batch的时候会做一件事情叫做shuffle,shuffle有很多不同的做法,最常见的做法是再每一个epoch之间会分一次batch,每一个epoch的batch都不一样
可能第一个epoch分上面图的batch,但是另一个epoch重新分另外的一个batch,这样的方法叫做epoch。
为什么要用batch?batch对training带来什么样的好处?
上面的这两个图,都是假设有20个训练资料,左边的图是没有分batch的,右边的图是分了batch的。没有分batch的在计算loss的时候,要把这20个数据全部看完,才能更新一次参数,但是分了batch的,就可以看完其中的一个数据,就可以更新参数,所以现在是由20 个训练资料,那在一个一个epoch里面就更新了20次参数。
上面两种方法的对比可以知道,左边冷却的时间比较长但是比较稳,右边的冷却时间比较短但是不稳当。
如果考虑平行运算(有GPU)的话,左边的时间不一定比右边的时间长。为什么呢?
实际上:用MNIST做手写辨识的实验
比较大的batch,计算loss,在进而算gradient的时间不一定是比小的batch话的时间长。
下面的这个实验是batch size在1,10,100,1000的时候,计算loss,gradient更新参数的时间都是一样的。是因我们有GPU 可以做平行运算,但是GPU 平行运算的能力还是有限的,当batch size非常的巨大的时候,GPU 在跑完一个batch计算处gradient所花费的时间还是会随着batch 四则 的时间增加而增加。
因为有平行运算的能力,当batch size非常小的时候,跑完一个epoch花的时间比大的batch size还要多,为什么这样说呢?
假设今天我们的训练资料有60000笔,那batch=1的话,要60000次的更新才能跑完一个epoch。batch=1000的时候,要60 次的更新才能跑完一个epoch,两者的差距两就是显而易见的。
综上:当我们比较batch的大小的时候,冷却时间就不是一个很好的指标
现在剩下的这个指标是noisy的gradient反而是可以帮助训练的。用不同的batch来训练模型
如果我们看验证的结果,会发现batch size越大,验证的结果就越差,但是这个并不是over fitting
出现这样的情况是因为optimization(优化)的问题
解释:不分batch的时候,参数沿着L函数的图像更新参数的时候可能会遇见local minima的问题,那这样参数就没办法继续更新。
但是如果分了batch的话,参数的更新就会有多个L 的函数图像,机器是其中的一个函数图像遇到local minima,也会有其他的更新路径,如下图所示:
现在一个更神奇的事情是:小的batch对testing有帮助
上面的图可以知道小的batch在testing Acc的时候要比大的batch差,这样的才叫over fitting
为什么会出现这样的情况呢?
解释:
假设training loss上面有很多的local minima,这些点的loss都很低趋近于0,但是这些minima也是分好坏的,在比较平缓的地方是好的,在陡峭的地方是坏的。为什么呢?
现在假设把training loss图像往右平移一点,得到的是testing loss,这两个点在testing loss上的表现不一样,好的点就是small batch,坏的点就是large batch。
比较大的batch和小的batch:
在没有平行运算的情况下,小的batch比较有效,再有平行运算的情况下,小的batch和 大的batch没什么差距,除非大的batch非常大,才会显示处差距来。但是一个epoch的时间是大的batch比较
块,小的反而慢。但是noisy的更新反而在优化的时候占到优势,在testing的是时候也是有优势的。
能不能将大的batch和小的batch的优点相结合呢?(不细讲)
是可以对抗local和saddle point的技术:
这个技术的运作方式是什么样的呢?
假设error surface是一个斜坡,参数就是上面的球,如果球从上面滚下来,是gradient descent的话,走到local minima就停下来了或者是走到saddle point就停住了,但是在实际的物理实验当中,小球还是凭借惯性,翻过去。我们可以根据这样的概念用到gradient descent当中
回忆一下gradient descent
Gradient descent +Momentum(更新参数不止是反方向的更新参数而且还要机上前一步更新的方向)
过程是:
上面的每一步移动都可以用m表示,m可以表示成之前gradient的加权总和
另一个对Momentum的解释是:对过去所有gradient的总和
用下面的这个图来解释:
今天的讲解内容是:
原创不易,随手笔记,,内容有误,转载请告知