在 tensorflow 上使用批量大小 'powers of 2' 会更快吗?
Is using batch size as 'powers of 2' faster on tensorflow?
我从某处了解到,如果您选择的批量大小是 2 的幂,训练速度会更快。这条规则是什么?这适用于其他应用程序吗?能否提供参考论文?
从算法上讲,使用较大的 mini-batches 可以减少随机梯度更新的方差(通过取 mini-batch 中梯度的平均值),这反过来又可以让你采取更大的步骤-大小,这意味着优化算法将取得更快的进展。
然而,在 objective 中达到一定精度所完成的工作量(根据梯度计算的数量)将是相同的:对于 n 的小批量大小,方差为更新方向将减少 n 倍,因此该理论允许您采用 n 倍大的步长,因此单步将带您大致达到与使用小批量的 SGD n 步相同的精度大小 1.
关于 tensorFlow,我没有找到你肯定的证据,它是一个已在 github 关闭的问题:https://github.com/tensorflow/tensorflow/issues/4132
请注意,将图像大小调整为 2 的幂是有意义的(因为池化通常在 2X2 windows 中完成),但这完全是另一回事。
我也听说过。这是一份关于 CIFAR-10 训练的白皮书,其中一些英特尔研究人员提出了这样的声明:
In general, the performance of processors is better if the batch size is a power of 2.
然而,尚不清楚优势有多大,因为作者没有提供任何训练持续时间数据:/
The notion comes from aligning computations (C
) onto the physical
processors (PP
) of the GPU.
由于PP的数量通常是2的幂,使用不同于2的幂的C
会导致性能不佳。
您可以看到 C
到 PP
的映射是一堆大小为 PP
的切片。
假设您有 16 PP
。
您可以在它们上映射 16 C
:1 C
映射到 1 PP
。
您可以在它们上映射 32 C
:2 片 16 C
,1 PP
将负责 2 C
.
这是由于 GPU 使用的 SIMD 范例。这通常称为数据并行性:所有 PP
同时在不同的数据上做同样的事情。
我从某处了解到,如果您选择的批量大小是 2 的幂,训练速度会更快。这条规则是什么?这适用于其他应用程序吗?能否提供参考论文?
从算法上讲,使用较大的 mini-batches 可以减少随机梯度更新的方差(通过取 mini-batch 中梯度的平均值),这反过来又可以让你采取更大的步骤-大小,这意味着优化算法将取得更快的进展。
然而,在 objective 中达到一定精度所完成的工作量(根据梯度计算的数量)将是相同的:对于 n 的小批量大小,方差为更新方向将减少 n 倍,因此该理论允许您采用 n 倍大的步长,因此单步将带您大致达到与使用小批量的 SGD n 步相同的精度大小 1.
关于 tensorFlow,我没有找到你肯定的证据,它是一个已在 github 关闭的问题:https://github.com/tensorflow/tensorflow/issues/4132
请注意,将图像大小调整为 2 的幂是有意义的(因为池化通常在 2X2 windows 中完成),但这完全是另一回事。
我也听说过。这是一份关于 CIFAR-10 训练的白皮书,其中一些英特尔研究人员提出了这样的声明:
In general, the performance of processors is better if the batch size is a power of 2.
然而,尚不清楚优势有多大,因为作者没有提供任何训练持续时间数据:/
The notion comes from aligning computations (
C
) onto the physical processors (PP
) of the GPU.
由于PP的数量通常是2的幂,使用不同于2的幂的C
会导致性能不佳。
您可以看到 C
到 PP
的映射是一堆大小为 PP
的切片。
假设您有 16 PP
。
您可以在它们上映射 16 C
:1 C
映射到 1 PP
。
您可以在它们上映射 32 C
:2 片 16 C
,1 PP
将负责 2 C
.
这是由于 GPU 使用的 SIMD 范例。这通常称为数据并行性:所有 PP
同时在不同的数据上做同样的事情。