卷积神经网络复杂度分析

FLOPS:floating point operations per second的缩写,意指每秒浮点运算次数,理解为计算速度。是一个衡量硬件性能的指标。

FLOPs:floating point operations的缩写(s表复数),意指浮点运算数,理解为计算量。可以用来衡量算法/模型的复杂度。

假设采用滑动窗实现卷积且忽略非线性计算开销,则卷积核的FLOPs

\textup{FLOPs}=2HW(C_{in}K^{2}+1)C_{out}

其中,HWC_{in}分别为输入特征图(就是输入图片了)的高度、宽度和通道数,K为核宽度,C_{out}为输出通道数。

全连接层网络FLOPs为

\textup{FLOPs}=(2I-1)O

其中,I为输入维数,O为输出维数。

 

个人学习后,认为卷积层的FLOPs为:FLOPs=Cin*k*k*Cout*Hout*Wout*Batchsize

如果再加上偏置的话,还需要加上Batchsize*Cout*Hout*Wout


一、时间复杂度

即模型的运算次数,可用FLOPs衡量,也就是浮点运算次数(FLoating-point OPerations)。

1、单个卷积层的时间复杂度

  • 每个卷积核输出特征图(Feature map)的边长
  • 每个卷积核(kernel)的边长
  • 每个卷积核的通道数,也即输入通道数,也即上一层的输出通道数。
  • 本卷积层具有的卷积核个数,也即输出通道数。
  • 可见,每个卷积层的时间复杂度由输出特征图面积 、卷积核面积 、输入 和输出通道数 完全决定。
  • 其中,输出特征图尺寸本身又由输入矩阵尺寸 、卷积核尺寸 、、 这四个参数所决定,表示如下:

  • 注1:为了简化表达式中的变量个数,这里统一假设输入和卷积核的形状都是正方形。
  • 注2:严格来讲每层应该还包含 1 个 参数,这里为了简洁就省略了。

2、卷积神经网络整体的时间复杂度

  • 神经网络所具有的卷积层数,也即网络的深度
  • 神经网络第 个卷积层
  • 神经网络第 个卷积层的输出通道数 ,也即该层的卷积核个数。
  • 对于第 个卷积层而言,其输入通道数 就是第 个卷积层的输出通道数。
  • 可见,CNN整体的时间复杂度只是所有卷积层的时间复杂度累加而已。
  • 简而言之,层内连乘,层间累加。

二、空间复杂度

空间复杂度(访存量),严格来讲包括两部分:总参数量 + 各层输出特征图。

  • 参数量:模型所有带参数的层的权重参数总量(即模型体积,下式第一个求和表达式)
  • 特征图:模型在实时运行过程中每层所计算出的输出特征图大小(下式第二个求和表达式)

  • 总参数量只与卷积核的尺寸 、通道数 、层数 相关,而与输入数据的大小无关
  • 输出特征图的空间占用比较容易,就是其空间尺寸 和通道数 的连乘。
  • 注:实际上有些层(例如 ReLU)其实是可以通过原位运算完成的,此时就不用统计输出特征图这一项了。

三、复杂度对模型的影响

  • 时间复杂度决定了模型的训练/预测时间。如果复杂度过高,则会导致模型训练和预测耗费大量时间,既无法快速的验证想法和改善模型,也无法做到快速的预测。
  • 空间复杂度决定了模型的参数数量。由于维度诅咒的限制,模型的参数越多,训练模型所需的数据量就越大,而现实生活中的数据集通常不会太大,这会导致模型的训练更容易过拟合。
  • 当我们需要裁剪模型时,由于卷积核的空间尺寸通常已经很小(3x3),而网络的深度又与模型的表征能力紧密相关,不宜过多削减,因此模型裁剪通常最先下手的地方就是通道数。

四、举例——Inception 系列模型是如何优化复杂度的

通过五个小例子说明模型的演进过程中是如何优化复杂度的。

1、InceptionV1中的1×1卷积降维同时优化时间复杂度和空间复杂度

 

卷积神经网络复杂度分析_第1张图片

 

讲噶赶紧临时

你可能感兴趣的:(深度学习)