2017-05-03 475 views
2

我试图训练在 发现的模型通过https://github.com/jupiter126/Create_Speech_Dataset(约340000小型wav音频样本与成绩单)生成的数据集。

当我使用GPU训练时,训练进行得相对较快,但是我无法将batch_train_size设置为高于25而没有达到OOM。
当我用CPU训练时,训练速度慢得多,但我可以很容易地将batch_train_size设置为250(可能高达700,但尚未尝试)。

使用CPU vs GPU来训练模型 - 速度vs内存

我如何在GPU的小批量的大小限制,可能会影响培训质量,或者混淆如果提高提高划时代的数量可能会抵消这种效果......
换句话说,25个样本对10000时代或500个时代的500个样本?

GPU是带有6Gb RAM的GTX 1060,CPU是双XEON 2630l v4(1.7Ghz的2 * 10超线程核心)和128Gb RAM。

+0

你的问题是什么?批量大小如何影响性能? – dv3

+0

取决于您所说的性能: - 是的,如果您将性能视为模型的质量(语音识别错误率很低)。 - 如果您将性能视为培训所需时间,则不需要。我意识到GPU会更快,但我不知道是否小批量的训练批(由6Gb ram限制施加)不会影响输出模型的整体质量。 – user1747036

回答

1

我已经在使用卷积神经网络的项目中尝试过使用批量大小,并且发现了一些有趣的内容:批量大小是一个正规化器。

我有一个网络(在这种情况下卷积,但重点转移到您的情况),我有一个小型和大型数据集。我完成了超过20个超参数在网络中的全面超参数搜索(包括批量大小,L2正则化,丢失,卷积参数,完全连接图层中的神经元等等)。超参数搜索是在持有的验证数据集上进行判断。

当我有小数据集(数千个样本中的10个)时,超参数搜索有利于L2更多的正则化和丢失,这些值在验证集上产生更好的结果。它也倾向于较小的批量。

当我有一个大型数据集(数百万个样本)时,数据集本身足够大以避免过度拟合。超参数搜索有利于较低的L2正则化和退出(它实际上选择了98%的退出概率)。而这一次,它倾向于大批量生产。

这是出乎意料的,我还没有看到太多文献将批量大小作为正则化参数,但在这些实验中结果对我来说很清楚。

因此,直接指出,它可能会有一个小的差异,但你可以补偿其他正则化技术。通过更快地训练和测试更多的超参数组合,您将获得更多的里程,而不是关注批量大小,并牺牲您进行大量实验的能力。

0

当您有很大的批量大小时,您可以对小批量大小有更好的梯度估计,反之亦然。但是,有点嘈杂的渐变并不总是不好的。他们帮助网络摆脱(可能)糟糕的局部最小值,换句话说,它使优化者有机会探索其他局部最小值,这可能会更好。据我所知,没有愚蠢的教授方式知道最佳的批量大小。拇指规则是考虑批量大小从32到128的任何地方,但同样,这取决于应用程序,你使用的GPU数量等。

关于速度,我的猜测是GPU总是会赢得甚至如果批量大小小20倍。您可以通过简单地测量处理一定数量的样品(而不是批次)需要多少时间来计时。如果您观察到批量大小影响您的验证准确性和收敛性,那么您可能会考虑转移到CPU上。底线:做上面的测试,但是从我掌握的信息来看,我会说去GPU培训。

0

This paper研究批量大小与学习率的关系。 而不是腐烂的学习率,他们增加的批量大小相同的因素。

达到相当于测试精度相同数量的训练时期后,但用较少的参数更新,导致更大的并行性和更短的训练时间。

总之,如果您使用更大的批量大小,您可以使用更大的学习率来减少培训时间。