高性能计算学习笔记(2)卷积神经网络复杂度分析

时间复杂度-计算量[1]

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

单个卷积层的时间复杂度
Time \sim O(M^2·K^2·C_{in}·C_{out})
每个卷积层的时间复杂度由输出特征图面积 M^2 、卷积核面积K^2 、输入通道数C_{in} 和输出通道数C_{out} 完全决定。其中:

  • M 为单个卷积核输出特征图尺寸,具体由输入矩阵尺寸X 、卷积核大小 KPaddingStride 这四个参数所决定,计算公式如下:
    M = (X-K+2*Padding)/Stride + 1
  • K 为单个卷积核的边长
  • C_{in} 为卷积层的输入特征图(或图像)的通道数
  • C_{out} 为卷积层的输出通道数

卷积神经网络整体的时间复杂度
Time \sim O(\sum_{l=1}^D M_l^2 · K_l^2 · C_{l-1} · C_l)

  • D 为整个卷积神经网络所具有的卷积层数,即网络深度
  • l 表示第 l 个卷积层

空间复杂度-访存量[1]

空间复杂度(访存量),严格来讲包括两部分:总参数量 + 各层输出特征图。
Space \sim O(\sum_{l=1}^{D} K_l^2·C_{l-1}·C_l + \sum_{l=1}^{D}M^2·C_l)

  • 参数量:模型所有带参数的层的权重参数总量(即模型体积,上式第一个求和表达式)

    总参数量只与卷积核的尺寸K、通道数C、层数D 相关,而与输入数据的大小无关

  • 特征图:模型在实时运行过程中每层所计算出的输出特征图大小(上式第二个求和表达式)

    实际上有些层(例如 ReLU)可以通过原位运算完成的,此时不需要计算输出特征图这一项。

  • 理论计算值与真实的访存量可能存在较大差异,是因为这里提到的计算过程是忽略了缓存的存在的。在嵌入式场景下,大多数情况下它片上缓存是不够用,实际上是一直在读取主存的过程。对于很多利用片上缓存来进行访存量优化的方法,就不能采用这里提到的计算过程。

复杂度对模型的影响

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

  1. 卷积神经网络的复杂度分析 https://zhuanlan.zhihu.com/p/31575074

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容