7

可能是关于最小批处理的 ANN 101 问题。谷歌似乎没有答案。在这里搜索也没有产生任何结果。我的猜测是某处有一本书说,“这样做!” 我只是没读过那本书。

我正在用 Python 编写一个神经网络(语言并不重要)。我正在尝试添加小批量更新而不是完整批量。是否有必要为每个时期选择一次观察?小批量将是数据值 1:10、11:20、21:30 等,以便使用所有观察值,并且它们都使用一次。

或者根据概率从训练数据集中随机选择小批量是否正确?结果是每个观察在任何给定的时期都可以使用一次、多次或根本不使用。对于每个 epoch 的 20 个 mini-batch,每个数据元素将有 5% 的机会被选择用于任何给定的 mini-batch。小批量将随机选择且大小随机,但每 20 个数据点中大约有 1 个数据点将包含在 20 个小批量的每一个中,不能保证选择。

4

2 回答 2

7

关于小批量训练的一些提示:

在每个时代之前洗牌你的样本

原因与您在在线训练中打乱样本的原因相同:否则网络可能会简单地记住您提供样本的顺序。

为每个批次和每个时期使用固定的批次大小

可能还有一个统计原因,但它简化了实现,因为它使您能够使用矩阵乘法的快速实现来进行计算。(例如 BLAS)

使您的学习率适应批量大小

对于较大的批次,您必须使用较小的学习率,否则 ANN 往往会收敛到次优最小值。我总是将我的学习率按 1/sqrt(n) 缩放,其中 n 是批量大小。请注意,这只是实验的经验值。

于 2012-12-10T23:15:52.780 回答
2

你的第一个猜测是正确的。只需先随机化您的数据集。然后(比如说)20 个小批量。使用:1-20,然后是 21-40,等等……所以,你所有的数据集都将被使用。

Ben不要说数据集只使用一次。您通常需要在所有数据集上执行多个 epoch 才能让您的网络正确学习。

小批量主要用于加速学习过程。

于 2012-12-09T02:34:52.210 回答