为什么神经元或卷积的数量选择等于 2 的幂?

数据挖掘 机器学习 神经网络 信息论
2022-02-01 09:59:54

在大量致力于神经网络的作品中,作者提出了一种架构,其中每一层都是一些神经元,是 2 的幂

这种选择的理论原因(先决条件)是什么?

3个回答

深度神经网络通常在 GPU 上进行训练以加快训练时间。对网络拓扑使用二的幂遵循与在计算机游戏中对图像纹理使用二的幂相同的逻辑。

GPU 可以利用与使用 2 的幂的效率相关的优化。(见https://gamedev.stackexchange.com/questions/26187/why-are-textures-always-square-powers-of-two-what-if-they-arent

原因是基于硬件的。对于神经网络和深度学习,矩阵运算是浮点运算 (FLOP) 的主要计算和来源。CPU 中的单指令多数据 (SIMD) 操作以批量大小发生,即 2 的幂。

对于 GPU:

https://docs.nvidia.com/cuda/cuda-c-best-practices-guide/index.html

通过 CUDA 运行时 API(例如通过 cudaMalloc())分配的内存保证至少与 256 字节对齐。因此,选择合理的线程块大小,例如 warp 大小的倍数(即当前 GPU 上的 32),有助于通过正确对齐的 warp 访问内存。(例如,如果线程块大小不是 warp 大小的倍数,请考虑第二个、第三个和后续线程块访问的内存地址会发生什么情况。)

这意味着当您使用 GPU 时,任何 32 的倍数都将优化内存访问,从而优化处理速度。

如果您有兴趣,可以考虑看看:

https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/376​​31.pdf

这只是一个随意的选择。您必须选择一个数字并且数量级很重要,但不是确切的值。二次幂感觉很自然。

如果你不这么认为:在给定的架构上评估它。将神经元的数量从 2 的幂降低到更小的数量。如果时间增加,你已经证明我错了。