Keras中的batch_size
首先这里有个秘密,我们在做gradient descent的时候并不会真正去minimize total loss。我们会把training data会随机分成一个一个的batch。然后计算对第一个batch里面的total loss,然后update参数,也就是计算参数对L'的微分。然后再计算第二个batch的total loss,计算参数对L''的微分,然后更新一次参数,接下来对下一个batch,然后反复进行这个过程,直到把所有的batch都update完。这个过程叫做一个epoch,然后再重复epoch。
如果我们把batch_size设为1的话,就是Stochastic gradient descent。
Stochastic gradient descent对比普通gradient descent有更快的速度,为什么我们还需要batch而不直接用Stochastic gradient descent 呢?
如果现在有50000个example,要用Stochastic gradient descent的话,在一个epoch里你就要更新50000次参数,如果batch_size设为10,在一个epoch里面你就要更新5000次参数,显然Stochastic gradient descent更新参数的速度更快。理论上,对于50000个example,每一个epoch的运算总量是相同的,但是当你batch_size大小不同的时候,就算是同样多的example,一个epoch需要的时间是不一样的。
image.png
为什么batch_size设定大的时候每个epoch速度更快?因为用了GPU,并行计算10个epoch和1个计算时间是差不多的。但是太大的batch_size也会影响性能,GPU也是有限制的。train的时候network会容易卡住,无法再train。
image.png
对GPU来说,每一个矩阵运算都是可以并行运算的,所以把矩阵拼起来,速度更一个矩阵是相同的。
网友评论