(9)-2类神经网络训练不起来怎么办?

Batch

Review:Optimization with Batch

batch是怎么做的呢?

实际上我们我们再算微分的时候,不是真的对所有的数据算出来的L作微分,而是将L 分成N 个batch,当我们更新参数的时候是将其中的一个Batch拿出来算gradient,然后在更新参数。再拿另一个batch算gradient ,更新参数,以此类推,并不是拿所有的的数据一起去算Loss.将所有的batch算一遍的方法叫做1 epoch。实际上在做batch的时候会做一件事情叫做shuffle,shuffle有很多不同的做法,最常见的做法是再每一个epoch之间会分一次batch,每一个epoch的batch都不一样

(9)-2类神经网络训练不起来怎么办?_第1张图片

可能第一个epoch分上面图的batch,但是另一个epoch重新分另外的一个batch,这样的方法叫做epoch。

为什么要用batch?batch对training带来什么样的好处?

(9)-2类神经网络训练不起来怎么办?_第2张图片

 

上面的这两个图,都是假设有20个训练资料,左边的图是没有分batch的,右边的图是分了batch的。没有分batch的在计算loss的时候,要把这20个数据全部看完,才能更新一次参数,但是分了batch的,就可以看完其中的一个数据,就可以更新参数,所以现在是由20 个训练资料,那在一个一个epoch里面就更新了20次参数。

上面两种方法的对比可以知道,左边冷却的时间比较长但是比较稳,右边的冷却时间比较短但是不稳当。

(9)-2类神经网络训练不起来怎么办?_第3张图片

 如果考虑平行运算(有GPU)的话,左边的时间不一定比右边的时间长。为什么呢?

实际上:用MNIST做手写辨识的实验

比较大的batch,计算loss,在进而算gradient的时间不一定是比小的batch话的时间长。

下面的这个实验是batch size在1,10,100,1000的时候,计算loss,gradient更新参数的时间都是一样的。是因我们有GPU 可以做平行运算,但是GPU 平行运算的能力还是有限的,当batch size非常的巨大的时候,GPU 在跑完一个batch计算处gradient所花费的时间还是会随着batch 四则 的时间增加而增加。

(9)-2类神经网络训练不起来怎么办?_第4张图片

因为有平行运算的能力,当batch size非常小的时候,跑完一个epoch花的时间比大的batch size还要多,为什么这样说呢?

假设今天我们的训练资料有60000笔,那batch=1的话,要60000次的更新才能跑完一个epoch。batch=1000的时候,要60 次的更新才能跑完一个epoch,两者的差距两就是显而易见的。

(9)-2类神经网络训练不起来怎么办?_第5张图片(有平行运算的时候)

综上:当我们比较batch的大小的时候,冷却时间就不是一个很好的指标

 (9)-2类神经网络训练不起来怎么办?_第6张图片

 现在剩下的这个指标是noisy的gradient反而是可以帮助训练的。用不同的batch来训练模型

(9)-2类神经网络训练不起来怎么办?_第7张图片

 如果我们看验证的结果,会发现batch size越大,验证的结果就越差,但是这个并不是over fitting

出现这样的情况是因为optimization(优化)的问题

 (9)-2类神经网络训练不起来怎么办?_第8张图片

解释:不分batch的时候,参数沿着L函数的图像更新参数的时候可能会遇见local minima的问题,那这样参数就没办法继续更新。

但是如果分了batch的话,参数的更新就会有多个L 的函数图像,机器是其中的一个函数图像遇到local minima,也会有其他的更新路径,如下图所示:

(9)-2类神经网络训练不起来怎么办?_第9张图片

现在一个更神奇的事情是:小的batch对testing有帮助

(9)-2类神经网络训练不起来怎么办?_第10张图片

 上面的图可以知道小的batch在testing Acc的时候要比大的batch差,这样的才叫over fitting

 为什么会出现这样的情况呢?

解释:

假设training loss上面有很多的local minima,这些点的loss都很低趋近于0,但是这些minima也是分好坏的,在比较平缓的地方是好的,在陡峭的地方是坏的。为什么呢?

现在假设把training loss图像往右平移一点,得到的是testing loss,这两个点在testing loss上的表现不一样,好的点就是small batch,坏的点就是large batch。

(9)-2类神经网络训练不起来怎么办?_第11张图片

 比较大的batch和小的batch:

在没有平行运算的情况下,小的batch比较有效,再有平行运算的情况下,小的batch和 大的batch没什么差距,除非大的batch非常大,才会显示处差距来。但是一个epoch的时间是大的batch比较

 块,小的反而慢。但是noisy的更新反而在优化的时候占到优势,在testing的是时候也是有优势的。

(9)-2类神经网络训练不起来怎么办?_第12张图片

能不能将大的batch和小的batch的优点相结合呢?(不细讲)

(9)-2类神经网络训练不起来怎么办?_第13张图片

 Momentum

是可以对抗local和saddle point的技术:

这个技术的运作方式是什么样的呢?

假设error surface是一个斜坡,参数就是上面的球,如果球从上面滚下来,是gradient descent的话,走到local minima就停下来了或者是走到saddle point就停住了,但是在实际的物理实验当中,小球还是凭借惯性,翻过去。我们可以根据这样的概念用到gradient descent当中

(9)-2类神经网络训练不起来怎么办?_第14张图片

 回忆一下gradient descent

(9)-2类神经网络训练不起来怎么办?_第15张图片(反方向更新参数)

Gradient  descent +Momentum(更新参数不止是反方向的更新参数而且还要机上前一步更新的方向)

过程是:

(9)-2类神经网络训练不起来怎么办?_第16张图片

 上面的每一步移动都可以用m表示,m可以表示成之前gradient的加权总和

(9)-2类神经网络训练不起来怎么办?_第17张图片

另一个对Momentum的解释是:对过去所有gradient的总和

 用下面的这个图来解释:

(9)-2类神经网络训练不起来怎么办?_第18张图片

 今天的讲解内容是:

(9)-2类神经网络训练不起来怎么办?_第19张图片

 

原创不易,随手笔记,,内容有误,转载请告知

 

 

 

你可能感兴趣的:(机器学习,机器学习)