我从某个地方读到,如果你选择的批量大小是2,那么训练会更快。这个规则是什么?这适用于其他应用吗?你能提供参考文件吗?
答案 0 :(得分:3)
从算法上讲,使用较大的迷你批次可以减少随机梯度更新的方差(通过获取小批量中梯度的平均值),这反过来又可以让你采取更大的步长,这意味着优化算法将加快进度。
然而,在目标中达到一定精度的完成工作量(根据梯度计算的数量)将是相同的:如果小批量大小为n,则更新方向的方差将减小通过因子n,理论上允许您采用n倍大的步长,这样一步就可以使您获得与n个步骤的SGD大致相同的精度,且小批量为1。
至于tensorFlow,我没有发现你的肯定证据,而且这个问题已经在github上关闭了:https://github.com/tensorflow/tensorflow/issues/4132
请注意,将图像调整为2的幂是有意义的(因为池化通常在2X2窗口中完成),但这完全是另一回事。
答案 1 :(得分:1)
我也听说过这个。这是一篇关于CIFAR-10培训的白皮书,其中一些英特尔研究人员声称:
通常,如果批量大小为2的幂,则处理器的性能会更好。
然而,由于作者不提供任何培训持续时间数据,目前尚不清楚其优势有多大:/
答案 2 :(得分:1)
该概念来自将计算(
C
)对齐到物理上 GPU的处理器(PP
。
由于PP的数量通常是2的幂,因此使用C
而不是2的幂将导致性能下降。
您可以看到C
到PP
上的映射,就像一堆大小为PP
的切片一样。
假设您有16个PP
。
您可以在它们上映射16 C
:1 C
被映射到1 PP
。
您可以在它们上映射32 C
:2个16 C
的切片,1 PP
将负责2 C
。
这是由于GPU使用了SIMD范式。这通常称为数据并行性:所有PP
都在同一时间执行相同的操作,但是对不同的数据进行了