Answers:
在“样本大小”你在谈论被称为批量大小,。批次大小参数只是使用小批量随机梯度下降(SGD)训练神经网络时要调整的超参数之一,并且与数据有关。超参数搜索的最基本方法是对学习速率和批量大小进行网格搜索,以找到使网络收敛的对。
要了解批量大小,请务必注意批量梯度下降,在线SGD和小批量SGD之间的关系。这是小批量SGD中权重更新步骤的一般公式,它是所有三种类型的概括。[ 2 ]
请注意,对于1,损失函数不再是随机变量,也不是随机近似值。
SGD的收敛速度快于正常的“批”梯度下降,因为它在查看训练集的随机选择子集后会更新权重。令为训练集,令。批大小只是的基数:。
批梯度下降使用整个数据集的梯度更新权重;而SGD使用小批量的梯度平均值来更新权重。(如果使用平均值而不是总和,则在数据集非常大的情况下,算法无法采取太大的步长。否则,您将需要根据数据集的大小调整学习率。)此期望值SGD中使用的梯度的随机近似等于批处理梯度下降中使用的确定性梯度。。
每次我们采样并更新权重时,这都称为迷你批次。每次我们遍历整个数据集时,都将其称为epoch。
假设我们有一些数据向量,它是参数化我们的神经网络的初始权重向量和损失函数,我们试图尽量减少。如果我们有训练示例并且批量为,则可以将这些训练示例分为C个迷你批:
为简单起见,我们可以假定T被B整除。尽管并非如此,但通常并非如此,应根据其大小为每个小批量分配适当的重量。
下面给出了具有历元的SGD的迭代算法:
注意:在现实生活中,我们正在从内存中读取这些训练示例数据,并且由于缓存预取和计算机执行的其他内存操作,如果合并了内存访问(即,当您读取内存时),则算法将运行得更快为了秩序,不要随意跳来跳去。因此,大多数SGD实现都会对数据集进行混洗,然后按照读取顺序将示例加载到内存中。
上述香草(无动量)SGD的主要参数为:
我喜欢将epsilon视为从时期数到学习率的函数。此功能称为学习率计划。
如果要固定学习率,只需将epsilon定义为常数函数即可。
批次大小决定了进行权重更新之前要查看的示例数量。它越低,训练信号将越嘈杂,它越高,则计算每个步骤的梯度所花费的时间就越长。
引用文献和进一步阅读:
For simplicity we can assume that D is evenly divisible by B
。您不是说T应该被B整除吗?
B is typically chosen between 1 and a few hundreds, e.g. B = 32 is a good default value, with values above 10 taking advantage of the speed-up of matrix-matrix products over matrix-vector products.
(摘自Bengio 2012年的论文)