测品娱乐
您的当前位置:首页关于深度学习中的batch_size

关于深度学习中的batch_size

来源:测品娱乐
关于深度学习中的batch_size

5.4.1 关于深度学习中的batch_size

举个例⼦:

例如,假设您有1050个训练样本,并且您希望设置batch_size等于100.该算法从训练数据集中获取前100个样本(从第1到第100个)并训练⽹络。接下来,它需要第⼆个100个样本(从第101到第200)并再次训练⽹络。我们可以继续执⾏此过程,直到我们通过⽹络传播所有样本。最后⼀组样本可能会出现问题。在我们的例⼦中,我们使⽤了1050,它不能被100整除,没有余数。最简单的解决⽅案是获取最终的50个样本并训练⽹络。最终⽬的:

通过⼀批⼜⼀批的样本去优化参数

使⽤批量⼤⼩的优点<所有样本的数量:

它需要更少的内存。由于您使⽤较少的样本训练⽹络,因此整体训练过程需要较少的内存。如果您⽆法将整个数据集放⼊机器的内存中,那么这⼀点尤为重要。

通常,⽹络通过⼩批量训练更快。那是因为我们在每次传播后更新权重。在我们的例⼦中,我们已经传播了11批(其中10个有100个样本,1个有50个样本),在每个批次之后我们更新了⽹络的参数。如果我们在传播过程中使⽤了所有样本,我们只会对⽹络参数进⾏1次更新。使⽤批量⼤⼩的缺点<所有样本的数量:

批次越⼩,梯度的估计就越不准确。在下图中,您可以看到⼩批量渐变(绿⾊)的⽅向与完整批次渐变(蓝⾊)的⽅向相⽐波动更⼤。

batch_size可以理解为批处理参数,它的极限值为训练集样本总数,当数据量⽐较少时,可以将batch_size值设置为全数据集(Full batchcearning)。

实际上,在深度学习中所涉及到的数据都是⽐较多的,⼀般都采⽤⼩批量数据处理原则。⼩批量训练⽹络的优点:

相对海量的的数据集和内存容量,⼩批量处理需要更少的内存就可以训练⽹络。

通常⼩批量训练⽹络速度更快,例如我们将⼀个⼤样本分成11⼩样本(每个样本100个数据),采⽤⼩批量训练⽹络时,每次传播后更新权重,就传播了11批,在每批次后我们均更新了⽹络的(权重)参数;如果在传播过程中使⽤了⼀个⼤样本,我们只会对训练⽹络的权重参数进⾏1次更新。

全数据集确定的⽅向能够更好地代表样本总体,从⽽能够更准确地朝着极值所在的⽅向;但是不同权值的梯度值差别较⼤,因此选取⼀个全局的学习率很困难。⼩批量训练⽹络的缺点:

批次越⼩,梯度的估值就越不准确,在下图中,我们可以看到,与完整批次渐变(蓝⾊)⽅向相⽐,⼩批量渐变(绿⾊)的⽅向波动更⼤。

极端特例batch_size = 1,也成为在线学习(online learning);线性神经元在均⽅误差代价函数的错误⾯是⼀个抛物⾯,横截⾯是椭圆,对于多层神经元、⾮线性⽹络,在局部依然近似是抛物⾯,使⽤online learning,每次修正⽅向以各⾃样本的梯度⽅向修正,这就造成了波动较⼤,难以达到收敛效果。如下图所⽰

stochastic(红⾊)表⽰在线学习,batch_size = 1;mini_batch(绿⾊)表⽰批梯度下降法,batch_size = 100;batch(蓝⾊)表⽰全数据集梯度下降法,batch_size = 1100;

从图上可以发现,batch_szie=1 较 batch_size=100 的波动性更⼤。

设置mini_batch⼤⼩是⼀种艺术,太⼩时可能会使学习过于随机,虽然训练速率很快,但会收敛到不可靠的模型;mini_batch过⼩时,⽹络训练需要很长时间,更重要的是它不适合记忆。

如何选择合适的batch_size值:

采⽤批梯度下降法mini batch learning时,如果数据集⾜够充分,⽤⼀半(甚⾄少的多)的数据训练算出来的梯度与全数据集训练fullbatch learning出来的梯度⼏乎⼀样。

在合理的范围内,增⼤batch_size可以提⾼内存利⽤率,⼤矩阵乘法的并⾏化效率提⾼;跑完⼀次epoch(全数据集)所需的迭代次数减少,对于相同数据量的处理速度进⼀步加快;在适当的范围内,batch_size越⼤,其确定的下降⽅向越准,引起训练波动越⼩。注意,当batch_size增⼤到⼀定程度,其确定的下降⽅向基本不会变化。

batch_size值增⼤到超过合理范围时,和全数据训练full batch learning就会表现出相近的症候;内存容量占有率增加,跑完⼀次epoch(全数据集)所需的迭代次数减少,达到相同的精度所耗损的时间增加,从⽽对参数的修正也就显得更加缓慢。调节 Batch_Size 对训练效果影响到底如何?

这⾥跑⼀个 LeNet 在 MNIST 数据集上的效果。MNIST 是⼀个⼿写体标准库

运⾏结果如上图所⽰,其中绝对时间做了标准化处理。运⾏结果与上⽂分析相印证:

batch_size 太⼩,算法在 200 epoches 内不收敛。随着 batch_size 增⼤,处理相同数据量的速度越快。

随着 batch_size 增⼤,达到相同精度所需要的 epoch 数量越来越多。

由于上述两种因素的⽭盾,batch_size 增⼤到某个时候,达到时间上的最优。

由于最终收敛精度会陷⼊不同的局部极值,因此batch_size 增⼤到某些时候,达到最终收敛精度上的最优。

因篇幅问题不能全部显示,请点此查看更多更全内容