17

我从某个地方读到,如果您选择一个 2 次方的批大小,训练会更快。这是什么规则?这适用于其他应用程序吗?可以提供参考论文吗?

4

3 回答 3

13

这个概念来自于将计算 ( ) 对齐到GPUC的物理处理器 ( ) 上。PP

由于PP 的数量通常是 2 的幂,因此使用与 2C的幂不同的数量会导致性能不佳。

您可以看到 到 的映射CPP一堆大小为 的切片PP。假设你有 16 PP。您可以C在它们上映射 16:1C映射到 1 PP。你可以在它们上映射 32 C:2 片 16,1CPP负责 2 C

这是由于 GPU 使用的SIMD范例。这通常被称为数据并行:所有人PP在同一时间做同样的事情,但在不同的数据上。

于 2019-02-01T18:47:15.660 回答
11

从算法上讲,使用更大的 mini-batch 可以减少随机梯度更新的方差(通过取 mini-batch 中梯度的平均值),这反过来又可以让您采用更大的步长,这意味着优化算法将使进度更快。

然而,在目标中达到一定精度所完成的工作量(就梯度计算的数量而言)将是相同的:在小批量大小为 n 的情况下,更新方向的方差将减少一个因子n,因此该理论允许您采用 n 倍大的步长,因此单步将带您达到与小批量为 1 的 SGD 的 n 步大致相同的精度。

至于 tensorFlow,我没有发现你肯定的证据,这是一个已经在 github 上关闭的问题:https ://github.com/tensorflow/tensorflow/issues/4132

请注意,将图像大小调整为 2 的幂是有意义的(因为池化通常在 2X2 窗口中完成),但这完全是另一回事。

于 2017-06-11T12:43:34.977 回答
1

我也听说过这个。这是一份关于 CIFAR-10 培训的白皮书,一些英特尔研究人员在该白皮书中做出了这样的声明:

一般来说,如果批量大小是 2 的幂,处理器的性能会更好。

(参见:https ://software.intel.com/en-us/articles/cifar-10-classification-using-intel-optimization-for-tensorflow 。)

然而,由于作者没有提供任何训练持续时间数据,目前还不清楚优势有多大:/

于 2018-01-28T22:49:48.157 回答