Batch_size对于深度学习训练过程的影响?

 

    batch_size的大小决定了深度学习训练过程中完成每个epoch所需的时间和每个迭代(epoch)之间梯度的平滑程度

  1. 对于每个epoch所需时间的解释:

   对于一个大小为N的训练集,如果每个epoch中mini-batch的采样方式采用最常规的(N个样本每个样本都采样一次)方式,设mini-batch大小为b,那么每个epoch所需要的迭代次数为 N/b ,因此完成每个epoch所需要的时间大致也随着迭代次数的增加而增加。

  1. 每个迭代(epoch)之间梯度的平滑程度的解释:

   一般深度学习框架在处理mini-batch的反向传播时,默认都是先将每个mini-batch中的每个样本得到的loss平均化之后再反求梯度,也就是说每次反向传播的梯度是对mini-batch中每个样本的梯度平均之后的结果,所以b的大小决定了相邻迭代之间的梯度平滑程度;

b太小,相邻mini-batch间的差异相对过大,那么相邻两次迭代的梯度震荡情况会比较严重,不利于收敛;

b越大,相邻mini-batch间的差异相对越小,虽然梯度震荡情况会比较小,一定程度上利于模型收敛,但是如果b极端大,相邻mini-batch间的差异过小,相邻两个mini-batch的梯度没有区别了,整个训练过程中就是沿着一个方向快速往下,很容易陷入到局部最小值。

总结:batch size过小,计算时间较长,同时震荡严重,不利于收敛;batch_size过大,不同batch的梯度方向没有任何变化,容易陷入局部极小值。

问题总结:

在合理范围内,增大batch_size有何好处?

内存利用率提高了,大矩阵乘法的并行化效率提高;

跑完一次epoch(全数据集)所需的迭代次数减少,对于相同数据量的处理速度进一步加快。

在一定范围内,一般来说batch_size越大,其确定的下降方向越准,引起训练震荡越小。

 

盲目增大batch__size有何坏处?

内存利用率提高了,但是内存会出现内存溢出的问题。

跑完一次epoch所需的迭代次数减少,要想达到相同的精度,其所花费的时间大大增加,从而对参数的修正也就显得更加缓慢。

Batch_size增大到一定程度,其确定的下降方向已经基本不再变化。

 

综上所述,我们再设置batch_size的大小时,必须通过实验来不断调整。首先需要设定最大限度,这里设置的初始值最好是2的幂次方,然后采用折半查找的方法找到满足我们要求的值。

https://www.zhihu.com/question/32673260/answer/71137399

 

 

你可能感兴趣的:(深度学习)