Set*_*sak 4 machine-learning neural-network gradient-descent torch conv-neural-network
我正在尝试调整超参数,即CNN中的批量大小.我有一台corei7,RAM 12GB的计算机,我正在训练一个带有CIFAR-10数据集的CNN网络,可以在这个博客中找到.
现在首先我已经阅读并了解了机器学习中的批量大小:
我们首先假设我们正在进行在线学习,即我们使用的小批量为1.对在线学习的明显担心是,使用仅包含一个训练示例的微型计算机将导致我们对梯度的估计出现重大错误.事实上,错误结果并非如此.原因是个别梯度估计不需要超级精确.我们所需要的只是一个足够准确的估计,我们的成本函数往往会不断下降.就好像你想要到达北极磁极一样,但每次看到它时都会有一个10-20度的离心指南针.如果你经常停下来检查指南针,并且指南针的平均方向是正确的,那么你最终会在北磁极上完好无损.
基于这个论点,听起来好像我们应该使用在线学习.事实上,情况比这更复杂.我们知道我们可以使用矩阵技术同时计算小批量中所有示例的梯度更新,而不是循环它们.根据我们的硬件和线性代数库的细节,这可以使计算(例如)100的小批量的梯度估计快得多,而不是通过分别循环100个训练样例来计算小批量梯度估计.它可能需要(比方说)只有50倍,而不是100倍.现在,起初似乎这对我们没那么大帮助.
其中总和超过了小批量的培训示例.这是对比
用于在线学习.即使只需要50倍的时间来进行小批量更新,在线学习似乎也更好,因为我们会更频繁地更新.但是,假设在小批量情况下我们将学习率提高了100倍,因此更新规则变为
这就像在线学习的单独实例一样,具有学习率?
.但它只需要做单个在线学习实例的50倍.尽管如此,使用较大的迷你投影机似乎显然有可能加快速度.
现在我尝试MNIST digit dataset
并运行一个示例程序并首先设置批量大小1
.我记下了完整数据集所需的培训时间.然后我增加了批量大小,我注意到它变得更快.
但是在使用此代码和github链接进行培训的情况下, 更改批量大小不会减少培训时间.如果我使用30或128或64,它仍保持相同.他们说他们有92%
准确性.经过两三个时代他们有得到上述40%
accuracy.But当我跑在我的电脑代码,而不改变比批量我有坏的结果后10时代像只有28%和测试精度以外的任何卡在那里,在未来epochs.Then我想,既然他们已经使用批处理大小128我需要使用那个.然后我使用相同,但它变得更糟糕只有11%后10个时期并卡在那里.这是为什么??
神经网络通过梯度下降来学习权重空间中的误差函数,该误差函数由训练示例参数化.这意味着变量是神经网络的权重.该功能是"通用的",在您使用培训示例时变得具体."正确"的方法是使用所有训练样例来制定特定功能.这称为"批量梯度下降",通常不会出于两个原因:
在机器学习问题中,您通常需要数千个培训示例.但是,当您只查看一些(例如64,128或256)示例时,错误表面可能看起来相似.
把它想象成一张照片:为了了解照片的内容,通常不需要2500x1800px的结果.256x256px图像可以让您清楚地了解照片的内容.但是,你错过了细节.
因此,想象梯度下降是在错误表面上的一个步行:你从一个点开始,你想找到最低点.为此,你走了下来.然后你再次检查你的身高,检查它向下的方向,并在那个方向上做一个"步骤"(其大小由学习率和其他几个因素决定).当您进行小批量培训而不是批量培训时,您将走在不同的错误表面上.在低分辨率的错误表面.它实际上可能会出现在"真正的"错误表面中.但总的来说,你会朝着正确的方向前进.而且你可以更快地完成单步!
现在,当你将分辨率降低(批量更小)时会发生什么?
对,你的错误表面看起来像的图像不太准确.这对你有多大影响取决于以下因素:
归档时间: |
|
查看次数: |
5477 次 |
最近记录: |