时间复杂度-计算量[1]
即模型的运算次数,可用 衡量,也就是浮点运算次数(FLoating-point OPerations)。
单个卷积层的时间复杂度
每个卷积层的时间复杂度由输出特征图面积 、卷积核面积
、输入通道数
和输出通道数
完全决定。其中:
-
为单个卷积核输出特征图尺寸,具体由输入矩阵尺寸
、卷积核大小
、
、
这四个参数所决定,计算公式如下:
-
为单个卷积核的边长
-
为卷积层的输入特征图(或图像)的通道数
-
为卷积层的输出通道数
卷积神经网络整体的时间复杂度
-
为整个卷积神经网络所具有的卷积层数,即网络深度
-
表示第
个卷积层
空间复杂度-访存量[1]
空间复杂度(访存量),严格来讲包括两部分:总参数量 + 各层输出特征图。
-
参数量:模型所有带参数的层的权重参数总量(即模型体积,上式第一个求和表达式)
总参数量只与卷积核的尺寸
、通道数
、层数
相关,而与输入数据的大小无关。
-
特征图:模型在实时运行过程中每层所计算出的输出特征图大小(上式第二个求和表达式)
实际上有些层(例如 ReLU)可以通过原位运算完成的,此时不需要计算输出特征图这一项。
- 理论计算值与真实的访存量可能存在较大差异,是因为这里提到的计算过程是忽略了缓存的存在的。在嵌入式场景下,大多数情况下它片上缓存是不够用,实际上是一直在读取主存的过程。对于很多利用片上缓存来进行访存量优化的方法,就不能采用这里提到的计算过程。
复杂度对模型的影响
- 时间复杂度决定了模型的训练/预测时间。如果复杂度过高,则会导致模型训练和预测耗费大量时间,既无法快速的验证想法和改善模型,也无法做到快速的预测。
- 空间复杂度决定了模型的参数数量。由于维度诅咒的限制,模型的参数越多,训练模型所需的数据量就越大,而现实生活中的数据集通常不会太大,这会导致模型的训练更容易过拟合。
- 当我们需要裁剪模型时,由于卷积核的空间尺寸通常已经很小(3x3),而网络的深度又与模型的表征能力紧密相关,不宜过多削减,因此模型裁剪通常最先下手的地方就是通道数。
-
卷积神经网络的复杂度分析 https://zhuanlan.zhihu.com/p/31575074 ↩ ↩