神经网络计算复杂度与硬件算力
深度学习计算量/复杂度相关知识。 个人在此方面的知识较少,导致上周高性能计算的讲座好多都没有听懂,在此做一个学习。
一些基础概念
首先介绍一些概念:
- FLOPS:floating point operations per second 的缩写,意指每秒浮点运算次数,理解为计算速度,是衡量硬件性能的指标。(常与 FLOPs 混淆)
- FLOPs:floating point operations 的缩写,意指浮点运算数,理解为计算量,可以用来衡量算法/模型的复杂度。
- MACs:multiply–accumulate operations,意为乘加计算数,通常与 FLOPs 存在一个两倍的关系。
关于什么是浮点数可以看这篇文章【2】,个人觉得深入浅出写的比较清晰。
如何计算
其实就是计算有多少次运算,对于不同的模型结构计算数目不同。 此处不涉及具体公式,仅介绍 FLOPs 计算思路,MACs(又乘又加)的话通常为 FLOPs 的两倍左右。
- 卷积层:在卷积层参数数目的基础上乘以输出的 feature map 大小(输出的每一个 feature 都是通过一次卷积层得到的)。
- 全联接层:即为全联接层参数数目。
- 激活层:不同激活函数的计算量不同。通常来说不重点计算。
Reference
神经网络计算复杂度与硬件算力
https://blog.superui.cc/machine-learning/computational-complexity/