卷积神经网络的复杂度分析

1. 计算平台的两个指标:算力  与带宽 

  • 算力:也称为计算平台的性能上限,指的是一个计算平台倾尽全力每秒钟所能完成的浮点运算数。单位是 FLOPS or FLOP/s
  • 带宽 :也即计算平台的带宽上限,指的是一个计算平台倾尽全力每秒所能完成的内存交换量。单位是Byte/s
  • 计算强度上限  :两个指标相除即可得到计算平台的计算强度上限。它描述的是在这个计算平台上,单位内存交换最多用来进行多少次计算。单位是FLOPs/Byte

:这里所说的“内存”是广义上的内存。对于CPU计算平台而言指的就是真正的内存;而对于GPU计算平台指的则是显存。

2.模型的两个指标:计算量 与 访存量

  • 计算量:指的是输入单个样本(对于CNN而言就是一张图像),模型进行一次完整的前向传播所发生的浮点运算个数,也即模型的时间复杂度。单位是 #FLOP or FLOPs
  • 访存量:指的是输入单个样本,模型完成一次前向传播过程中所发生的内存交换总量,也即模型的空间复杂度。在理想情况下(即不考虑片上缓存),模型的访存量就是模型各层权重参数的内存占用(Kernel Mem)与每层所输出的特征图的内存占用(Output Mem)之和。单位是Byte。由于数据类型通常为float32 ,因此需要乘以四。

 

  • 模型的计算强度  :由计算量除以访存量就可以得到模型的计算强度,它表示此模型在计算过程中,每Byte内存交换到底用于进行多少次浮点运算。单位是FLOPs/Byte。可以看到,模计算强度越大,其内存使用效率越高。
  • 模型的理论性能  :我们最关心的指标,即模型在计算平台上所能达到的每秒浮点运算次数(理论值)。单位是 FLOPS or FLOP/s。下面我们即将介绍的 Roof-line Model 给出的就是计算这个指标的方法。 

3. Roof-line Model

其实 Roof-line Model 说的是很简单的一件事:模型在一个计算平台的限制下,到底能达到多快的浮点计算速度。更具体的来说,Roof-line Model 解决的,是“计算量为A且访存量为B的模型在算力为C且带宽为D的计算平台所能达到的理论性能上限E是多少”这个问题。

3.1 Roof-line 的形态

所谓“Roof-line”,指的就是由计算平台的算力和带宽上限这两个参数所决定的“屋顶”形态,如下图所示。

  • 算力决定“屋顶”的高度(绿色线段)
  • 带宽决定“房檐”的斜率(红色线段)

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

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

 

具体见:

Roofline Model与深度学习模型的性能分析 - 知乎

1. 时间复杂度

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

1.1 单个卷积层的时间复杂度

  • M每个卷积核输出特征图  的边长
  •  K每个卷积核  的边长
  •  Cin每个卷积核的通道数,也即输入通道数,也即上一层的输出通道数。
  •  Cout本卷积层具有的卷积核个数,也即输出通道数。
  • 可见,每个卷积层的时间复杂度由输出特征图面积M*M、卷积核面积K*K 、输入 Cin和输出通道数Cout完全决定。
  • 其中,输出特征图尺寸本身又由输入矩阵尺寸X 、卷积核尺寸K、Padding、  Stride这四个参数所决定,表示如下:
  • 注1:为了简化表达式中的变量个数,这里统一假设输入和卷积核的形状都是正方形。
  • 注2:严格来讲每层应该还包含 1 个 Bias 参数,这里为了简洁就省略了。

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

  

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

2. 空间复杂度

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

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

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

3. 复杂度对模型的影响

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

4. Inception 系列模型是如何优化复杂度的

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

4.1 Inception V1  中的 1x1 卷积降维同时优化时间复杂度和空间复杂度

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

  • InceptionV1 借鉴了 Network in Network 的思想,在一个 Inception Module 中构造了四个并行的不同尺寸的卷
  • 积/池化模块(上图左),有效的提升了网络的宽度。但是这么做也造成了网络的时间和空间复杂度的激增。对策就是添加 1 x 1 卷积(上图右红色模块)将输入通道数先降到一个较低的值,再进行真正的卷积。

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

参考:更详细

 卷积神经网络的复杂度分析 - 知乎

你可能感兴趣的:(DL,cnn,人工智能,神经网络)