深度学习理论基础

A Neural Network Playground

Batch_size

Batch_size即一次训练所选取的样本数量,来源于小批量梯度下降(Mini-batch gradient descent),梯度下降法是常用的参数更新方法,而小批量梯度下降是对于传统梯度下降法的优化。

合适的batch size范围主要和收敛速度、随机梯度噪音有关。BATCH_SIZE的大小影响训练速度和模型优化。

别太小的原因:batch size下限主要受收敛的影响。batch size太小,会来不及收敛。所以在常见的setting(~100 epochs),batch size一般不会低于16。

别太大的原因:batch size太大,memory容易不够用。其次,深度学习的优化(training loss降不下去)和泛化(generalization gap很大)都会出问题。

batch是指从总样本切分出来的样本,batch_size是每一个 batch 中的样本数,Epoch是总样本的传递次数,batch_numbers是在完成一次Epoch要处理的batch的个数。

深度学习理论基础_第1张图片


batch size 与 leraning rate对训练的影响

  • batch size越小学习率需要相应地调小。不然容易震荡,不易收敛或者收敛时间长且效果不佳;
  • batch size越大学习率需要相应地调大,能达到收敛速度快的效果。但当接近收敛时需要调小学习率,不然容易小幅度震荡(动态学习率);
  • 如果网络中没有BN(批归一化),需要送入训练前做整体归一化或者标准化或者Min-Max scaling;(也需思考,如果数据量过大,一次性不能操作该如何处理?此处暂时不展开讲此三种特征处理方式的异同,待后续写机器学习特征工程时再写。)
  • (未验证,实验也不一定就给出后面的表述)根据理论分析及之前看到的论文中有提及,并不是batch size 越大越好。因为当快收敛时,越大的batch size,损失基本变化不大,导致不能跳出局部最优,而稍小的batch size,由于每次损失有变化(也可看做batch size 带来的噪声),就有可能跳出局部最优(跳出局部最优就有进入全局最优的可能);
  • 要注意量纲的统一;(这也是为啥网络中会加入BN的原因)
  • 初始训练时可以使用稍大的学习率来训练,损失降低到一定量后使用稍小的学习率训练,基于收敛状态时使用较小学习率训练(这样的表述并非是说分三段,主要想表达动态调节,且如何根据损失降低到什么程度调整,需要根据各自项目中去设置);

适当Batch_size的优点:

  • 可以充分利用计算机的并行运算结构,提高数据处理速度;
  • 考虑了一定数量的样本数据,可以比较准确得代表梯度下降方向
  • 跑完一次 epoch(全数据集)所需的迭代次数减少,对于相同数据量的处理速度进一步加快。

Batch_size大小设置的影响:
若BATCH_SIZE=m(训练集样本数量);相当于直接抓取整个数据集,训练时间长,但梯度准确。但不适用于大样本训练,比如IMAGENET。当所有样本同时输入到网络中时,往往很难确定一个全局最优学习率使得训练效果最佳。只适用于小样本训练,但小样本训练一般会导致过拟合现象,因此不建议如此设置。

若BATCH_SIZE=1;梯度变化波动大,网络不容易收敛。每次只读取一个样本作为输入,这种方法称为随机梯度下降算法(Stochastic Gradient Descent, SGD)。这种情况下,可以充分考虑每一个样本的特殊性。但是其缺点同样非常明显:在每个训练样本上得到的目标函数值差别可能较大,因此最后通过求和或者求平均值的方法而得到的目标函数值不足以代表每个样本。也就是说,这种方法得到的模型对样本的泛化能力差。

为了对两种极端情况进行折衷处理,就有了mini batches这一概念。也就是说每次只输入一定数量的训练样本对模型进行训练,这个数量就是batch_size的大小。若BATCH_SIZE设置合适,梯度会变准确。此时再增加BATCH_SIZE大小,梯度也不会变得更准确。同时为了达到更高的训练网络精度,应该增大epoch,使训练时间变长。

batchsize的正确选择是为了在内存效率和内存容量之间寻找最佳平衡。

深度学习理论基础_第2张图片

全批次(蓝色)

如果数据集比较小,我们就采用全数据集。全数据集确定的方向能够更好的代表样本总体,从而更准确的朝向极值所在的方向。
注:对于大的数据集,我们不能使用全批次,因为会得到更差的结果。

 迷你批次(绿色)

选择一个适中的Batch_Size值。就是说我们选定一个batch的大小后,将会以batch的大小将数据输入深度学习的网络中,然后计算这个batch的所有样本的平均损失,即代价函数是所有样本的平均。

随机(Batch_Size等于1的情况)(红色)

每次修正方向以各自样本的梯度方向修正,横冲直撞各自为政,难以达到收敛。

BATCH_SIZE大小如何影响训练梯度:
梯度的方差表示为:

 m即BATCH_SIZE设置大小,即增大BATCH_SIZE的大小可以使得梯度方差的大小减小。直接使梯度更加准确。

梯度更新方法:
1.Gradient Descent(GD):用所有样本的平均梯度更新每一步。用基于整个数据库得到梯度,梯度准确,但数据量大时,计算非常耗时,同时神经网络常是非凸的,网络最终可能收敛到初始点附近的局部最优点。
2.SGD(Stochastic Gradient Descent):用每一个样本的梯度更新每一步


1.批量梯度下降(BGD):一个epoch训练所有的样本后更新一遍梯度。

2.随机梯度下降(SGD):即,每训练一个样本,更新一遍梯度。就是Batch Size=1,每次计算一个样本,梯度不准确,所以学习率要降低

3.小批量梯度下降(Mini-batch gradient descent):把总的数据分为若干批次,每个batch_size更新一遍梯度。选合适Batch Size的SGD算法,mini-batch利用噪声梯度,一定程度上缓解了GD算法直接掉进初始点附近的局部最优值。同时梯度准确了,学习率要加大

结论:根据含义可知GD的每一步的计算都大于SDG。在实际上,GD往往容易陷入局部最小值,使训练的loss达不到最小。而SDG的出现正好缓解了这一现象。

Epoch

当一个完整的数据集通过了神经网络一次并且返回了一次,这个过程称为一个 epoch。 然而,当一个epoch对于计算机太过庞大时,就需要把它分成多个小块。在不能将数据一次性通过神经网络的时候,就需要将数据集分成几个batch。一个batch中的样本总数batch_size就是一次训练所选取的样本数。

为什么使用batch_size:在没有使用Batch Size之前,这意味着网络在训练时,是一次把所有的数据(整个数据库)输入网络中,然后计算它们的梯度进行反向传播,由于在计算梯度时使用了整个数据库,所以计算得到的梯度方向更为准确在这情况下,计算得到不同梯度值差别巨大,难以使用一个全局的学习率,所以这时一般使用Rprop这种基于梯度符号的训练算法,单独进行梯度更新。

Batch_size是每次喂给模型的样本数量。

Epoch_size是训练所有样本总的次数。

iteration:迭代

迭代是重复反馈的动作,神经网络中我们希望通过迭代进行多次的训练以达到所需的目标或结果。每一次迭代得到的结果都会被作为下一次迭代的初始值。
一个迭代=一个正向通过+一个反向通过

你可能感兴趣的:(深度学习,深度学习,人工智能)