我正在尝试调整CNN中的超级参数,即批量大小。我有一台corei7,RAM 12GB的计算机,我正在训练一个带有CIFAR-10数据集的CNN网络,可以在这个blog。
现在首先我已经阅读并了解了机器学习中的批量大小:
我们首先假设我们正在进行在线学习,即我们正在进行 使用小批量的1.对在线学习的明显担心 是使用只包含一次培训的小型客舱 例子会导致我们对梯度的估计出现重大误差。 事实上,错误结果并非如此。该 原因是个人梯度估计不需要 superaccurate。我们所需要的只是一个足够准确的估计值 成本函数趋于持续下降。就像你在尝试一样 到了北磁极,但是有一个不稳定的指南针 每次看它都要10-20度。只要你停下来 经常检查罗盘,罗盘方向正确 平均而言,你最终只会在北磁极上 细点。
基于这个论点,听起来好像我们应该在线使用 学习。事实上,情况变得更加复杂 我们知道我们可以使用矩阵技术来计算梯度 同时更新小批量中的所有示例,而不是 循环遍历它们。取决于我们的硬件和线性的细节 代数库这可以使计算速度快得多 (例如)大小为100的小批量的梯度估计 比通过循环计算小批量梯度估计 100个培训示例分开。它可能只需要50次 很长,而不是100倍。现在,好像开始似乎 这对我们没有多大帮助。
其中总和超过了小批量的培训示例。这是 与进行在线学习。 即使只需要50倍的时间来进行miniatch更新,它也是如此 在线学习似乎更好,因为我们会 更频繁地更新。但是,假设在 minibatch案例我们将学习率提高了100倍,所以 更新规则变为
这就像在线学习的单独实例一样 学习率为η
。但它只需要花费50倍的时间 在线学习的单一实例。不过,它看起来很明显 使用较大的小批量可能会加快速度。
现在我尝试使用MNIST digit dataset
并运行示例程序并首先设置批量大小1
。我记下了完整数据集所需的培训时间。然后我增加了批量大小和我注意到它变得更快。
但是如果使用此code和github link进行培训,则批量大小不会减少培训时间。如果我使用30或128或64,则保持相同。他们说他们得到{{精确度。经过两三个时代,他们的准确度已超过92%
。但是当我在计算机中运行代码而不改变批量大小以外的任何东西时,我在10个时代之后的结果变得更糟,只有28%和测试准确性在下一个时期停留在那里。然后我想,因为他们使用的批量大小为128我需要使用它。然后我使用相同但更糟糕的是在10个纪元后只留下11%并且卡在那里。 >为什么会这样?
答案 0 :(得分:5)
神经网络通过梯度下降来学习权重空间中的误差函数,该函数由训练样例进行参数化。这意味着变量是神经网络的权重。该功能是"泛型"并在使用培训示例时变得具体。 "正确"方法是使用所有训练样例来制定特定的功能。这被称为"批量梯度下降"并且通常不会出于两个原因:
在机器学习问题中,您通常会有数千个培训示例。但是,当您只查看一些(例如64,128或256)示例时,错误表面看起来可能类似。
将其视为照片:为了了解照片的内容,您通常不需要2500x1800px的结果。 256x256px图像可以让您清楚地了解照片的内容。但是,你错过了细节。
因此想象一下梯度下降是错误表面上的一个步行:你从一个点开始,你想找到最低点。为此,你走了下来。然后你再次检查你的身高,检查它向下的方向并做出一个步骤" (其大小由学习率和其他几个因素决定)朝这个方向。当您进行小批量培训而不是批量培训时,您将走在不同的错误表面上。在低分辨率的错误表面。它实际上可能会出现在"真实的"错误表面。但总的来说,你会朝着正确的方向前进。而且你可以更快地完成单个步骤!
现在,当您将分辨率降低(批量较小)时会发生什么?
对,你的错误表面看起来像的图像不太准确。这对你有多大影响取决于以下因素:
答案 1 :(得分:2)
我想补充一下这里已经说过的更大的批量并不总是有利于推广。我自己看过这些案例,批量大小的增加会影响验证的准确性,特别是对于使用CIFAR-10数据集的CNN而言。
来自"On Large-Batch Training for Deep Learning: Generalization Gap and Sharp Minima":
随机梯度下降(SGD)方法及其变体是 许多深度学习任务的首选算法。这些方法 以小批量方式运作,其中一部分是训练 数据,比如32-512个数据点,被采样以计算近似值 到了渐变。 在实践中已经观察到使用时 较大的批次,模型的质量有所下降,如 通过其推广能力来衡量。我们调查原因 大批量制度中的这种泛化下降并呈现 支持大批量方法观点的数字证据 倾向于收敛于训练和测试的尖锐最小化 功能 - 众所周知,尖锐的最小值导致更差 概括。相比之下,小批量方法始终如一地融合 平坦的最小化器,我们的实验支持一个普遍的观点 这是由于梯度估计中的固有噪声。我们 讨论了几种尝试帮助大批量方法的策略 消除这种泛化差距。
底线:您应该调整批量大小,就像any other hyperparameter一样,以找到最佳值。
答案 2 :(得分:0)
2018 opinion retweeted by Yann LeCun是论文Revisiting Small Batch Training For Deep Neural Networks, Dominic Masters and Carlo Luschi,表明一个好的通用最大批处理大小是:
32
与学习率的选择相互作用。
2016年早些时候的论文On Large-batch Training For Deep Learning: Generalization Gap And Sharp Minima给出了不使用大批量的一些原因,我很难解释一下,因为大批量可能会卡在局部(“尖锐”)最小值中,小批量则不会。