【Deep Learning基础知识】深度学习中关于batch、epoch和iteration的含义 和 batchsize的大小对训练过程的影响

时间:2024-05-22 10:08:32

前言:深度学习中最基本的思想为梯度下降,反向传播减小误差优化参数。

而在使用训练数据优化参数的时候有两种方法:

1)Batch gradient descent每次迭代(完成一次前向和反向运算)会计算训练数据集中所有的样本,在深度学习中训练样本数量通常达十万、百万甚至更多,这样一次迭代遍历所有的样本显然很慢。

2)Stochastic gradient descent每次迭代只使用训练集中的一个样本,即一次前向仅使用1个样本计算损失函数,然后计算梯度更新参数,这种方式虽然一次迭代速度很快,但是每次仅使用1个样本计算损失函数,容易受单个样本的质量好坏干扰,较难找到优化的最优点。

3)mini-batch gradient decent(小批量梯度下降):这种方式介于上面两种方法之间,一次迭代使用小批量的数据,既能够防止一次迭代仅有1个样本带来的收敛性较差的问题,同时,每次迭代只是用了小批量样本,不会像Batch gradient descent那样单次迭代耗时过长。

PS:现在的深度学习优化中都是采用的mini-batch gradient decent的方式,而一次batch_size的大小受显卡内存的限制,下面介绍batchsize、epoch和iteration的含义。

1)batchsize一个迭代批次样本数量的大小。即每次迭代使用的样本数量;

2)iteration1个iteration是指一次迭代过程,即上面的一个批次batchsize的样本完成前向和反向的整个过程;

3)epoch1个epoch是指训练集中的全部样本都训练了一次,训练集中所有的样本都被迭代了一次就是完成了一个epoch,通常将的几个epoch就是指训练集中的所有样本被迭代了几次。

例如:训练集32万个样本,而batchsize设置的为32,那么完成一个epoch需要迭代10000轮。

 

batchsize的大小对训练的影响:

1)不同batchsize下梯度的平滑程度:

下面展示的为不同batchsize大小在前1000个迭代中loss的变化情况:(说明:图像参考自微信公众号:Jerry的算法和NLP。作者:陈志远

结论:batchsize越大,loss越平滑,这也应证上面一次迭代只使用1个样本较难收敛的情况,在最优点处易出现震荡。

【Deep Learning基础知识】深度学习中关于batch、epoch和iteration的含义 和 batchsize的大小对训练过程的影响

【Deep Learning基础知识】深度学习中关于batch、epoch和iteration的含义 和 batchsize的大小对训练过程的影响

2)设置不同batchsize大小时,一个epoch的耗时。

【Deep Learning基础知识】深度学习中关于batch、epoch和iteration的含义 和 batchsize的大小对训练过程的影响

Epoch Time:是指一个epoch所需的所有时间,包括加载数据和计算的时间,

Epoch Computation Time:是指除去了加载数据所需的时间。

Iter Computation Time:指一次迭代需要的时间。

结论:

①:可以看出,不同batchsize下,一次迭代的耗时差别不大,这时因为一次迭代中主要的耗时是反向传播(相对于反向传播,前向仅计算输出,耗时占比很少,而反向需要计算梯度等,耗时占比很大),而反向传播的耗时取决于模型的复杂度,跟batchsize大小无关。

②:batchsize越小,一次epoch的耗时越长,是因为当batchsize小时,完成一次epoch需要的迭代次数较多,耗时也就越长。

③:前向传播的耗时取决于batchsize大小和网络复杂度;反向传播耗时仅取决于网络的复杂度,与batchsize关系不大。因为前向传播需要将每个样本进行一次前向运算,前向运算次数=batchsize数量,而反向传播中已经计算到了每个样本的loss,只需要反向求导即可,所以此时只取决于网络复杂度,与batchsize无关。

收敛速度

在衡量不同batch size的优劣这一点上,我选用衡量不同batch size在同样参数下的收敛速度快慢的方法。

下表中可以看出,在minst数据集上,从整体时间消耗上来看(考虑了加载数据所需的时间),同样的参数策略下 (lr = 0.02, momentum=0.5 ),要模型收敛到accuracy在98左右,batchsize在 6 - 60 这个量级能够花费最少的时间,而batchsize为1的时候,收敛不到98;batchsize过大的时候,因为模型收敛快慢取决于梯度方向和更新次数,所以大batch尽管梯度方向更为稳定,但要达到98的accuracy所需的更新次数并没有量级上的减少,所以也就需要花费更多的时间,当然这种情况下可以配合一些调参策略比如warmup LR,衰减LR等等之类的在一定程度上进行解决(这个先暂且按下不表),但也不会有本质上的改善。

不过单纯从计算时间上来看,大batch还是可以很明显地节约所需的计算时间的,原因前面讲过了,主要因为本次实验中纯计算时间中,反向占的时间比重远大于正向。

【Deep Learning基础知识】深度学习中关于batch、epoch和iteration的含义 和 batchsize的大小对训练过程的影响

文章后半部分参考自:微信公众号:Jerry的算法和NLP