大显存有必要吗_数据集

如图所示是本人训练yolo(通过梯度累加的方法等效batchsize得到的图)

x代表原有batch_size 的倍数。(此操作不会是显存需求增加)。

y下面的三个是giou 随着倍数的增加giou 在不断的上升,不到1轮的时候那么变化比较明显分别由于分别测试了1轮后不同初始学习率的情况基本一致没有太大波动。说明等效batchsize(原来batchsize=2)30以内基本不会对giou_loss有过多的影响。

再看上面的两条线是1轮后验证的bestmap 可以看到初始学习率也成倍数后bestmap有所下降。

上面链接总结的结论如下:

那么,这意味着什么?我们可以从这些实验中得到什么?

线性缩放规则:当 minibatch 大小乘以 k 时,将学习率乘以 k。尽管我们最初发现大批量性能更差,但我们能够通过提高学习率来缩小大部分差距。我们看到这是由于较大的批次大小应用了较小的批次更新,这是由于批次内梯度向量之间的梯度竞争。

选择合适的学习率时,较大的批量尺寸可以更快地训练,特别是在并行化时。对于大批量,我们不受 SGD 更新的顺序性质的限制,因为我们不会遇到与将许多小批量顺序加载到内存中相关的开销。我们还可以跨训练示例并行化计算。

然而,当学习率没有针对较大的批量大小向上调整时,大批量训练可能比小批量训练花费的时间更长,因为它需要更多的训练时期来收敛。因此,您需要调整学习率以实现更大批量和并行化的加速。

大批量,即使调整了学习率,在我们的实验中表现稍差,但需要更多的数据来确定更大的批量是否总体上表现更差。我们仍然观察到最小批量大小(val loss 0.343)和最大批量大小(val loss 0.352)之间的轻微性能差距。一些人认为小批量具有正则化效果,因为它们将噪声引入更新,帮助训练摆脱次优局部最小值的吸引力 。然而,这些实验的结果表明,性能差距相对较小,至少对于这个数据集。这表明,只要您为批量大小找到合适的学习率,您就可以专注于可能对性能产生更大影响的其他方面的训练。

个人觉得是否采取大的batchsize这取决于你的数据集和你的网络,如果数据比较少那么大的batchsize 是肯定的,还有就是模型大,其实还是看输入的信息量和输出的信息量的比值,比如图片分类,假如分10类 图片尺寸如果非常大,也就是信息量巨大。完全有足够的信息判断图片属于哪类。基本不需要太多的数据就可以训练出来,那么大的数据集没太大用处。此时小的batchsize是可以的。如果输入的信息量本身就小输出信息量,那么必然要大的batchsize,这时候需要大量的batchsize,比如nlp和语音识别,同时也要大的batchsize好一些,因为一个输入信息不能包含所有输出信息想要的条件信息。所以要多的batchsize,也是nlp和语音任务要使用带有记忆性的网络的根本原因。

但是这些都没有理由说大的batchsize 必须使用打的显存,当然有钱任性也不是不可以,但是使用梯度累加损失也不会很大。