• 问答
  • 技术
  • 实践
  • 资源
卷积神经网络的复杂度分析
技术讨论

来源:机器学习笔记 - 知乎专栏
作者:Michael Yuan


在梳理CNN经典模型的过程中,我理解到其实经典模型演进中的很多创新点都与改善模型计算复杂度紧密相关,因此今天就让我们对卷积神经网络的复杂度分析简单总结一下下。

1.时间复杂度

即模型的运算次数,可用 FLOPs 衡量。

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

file

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

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

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

file

file神经网络所具有的卷积层数,也即网络的深度
file神经网络第file 个卷积层
file神经网络第file个卷积层的输出通道数file,也即该层的卷积核个数。
对于第file个卷积层而言,其输入通道数file就是第 (l - 1) 个卷积层的输出通道数。

可见,CNN整体的时间复杂度并不神秘,只是所有卷积层的时间复杂度累加而已。
简而言之,层内连乘,层间累加。

示例:用 Numpy 手动简单实现二维卷积

假设 Stride = 1, Padding = 0, img 和 kernel 都是 np.ndarray.

file

2. 空间复杂度

空间复杂度即模型的参数数量,体现为模型本身的体积。

file
可见,网络的空间复杂度只与卷积核的尺寸 K 、通道数 C 、网络的深度 D 相关。而与输入数据的大小无关
当我们需要裁剪模型时,由于卷积核的尺寸通常已经很小,而网络的深度又与模型的能力紧密相关,不宜过多削减,因此模型裁剪通常最先下手的地方就是通道数。

3. 复杂度对模型的影响

时间复杂度决定了模型的训练/预测时间。如果复杂度过高,则会导致模型训练和预测耗费大量时间,既无法快速的验证想法和改善模型,也无法做到快速的预测。
空间复杂度决定了模型的参数数量。由于维度诅咒的限制,模型的参数越多,训练模型所需的数据量就越大,而现实生活中的数据集通常不会太大,这会导致模型的训练更容易过拟合。

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

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

4.1 InceptionV1中的 1×1 卷积降维

file
InceptionV1 借鉴了 Network in Network 的思想,在一个 Inception Module 中构造了四个并行的不同尺寸的卷积/池化模块(上图左),有效的提升了网络的宽度。但是这么做也造成了网络的时间和空间复杂度的激增。对策就是添加 1 x 1 卷积(上图右红色模块)将输入通道数先降到一个较低的值,再进行真正的卷积。
以 InceptionV1 论文中的 (3b) 模块为例,输入尺寸为 28×28×256,1×1 卷积核128个,3×3 卷积核192个,5×5 卷积核96个,卷积核一律采用Same Padding确保输出不改变尺寸。
在3×3 卷积分支上加入64个 1×1 卷积前后的时间复杂度对比如下式:
file

同理,在 5×5 卷积分支上加入 64 个 1×1 卷积前后的时间复杂度对比如下式:

file
可见,使用1×1卷积降维可以降低时间复杂度8倍以上。该层完整的运算量可以在论文中查到,为300M,即file
另外在空间复杂度上,虽然降维引入了三组 1×1 卷积核的参数,但新增参数量仅占整体的 5%,影响并不大。

4.2 InceptionV1 中使用 GAP 代替 Flatten

全连接层可以视为一种特殊的卷积层,其卷积核尺寸 K 与输入矩阵尺寸 X 一模一样。每个卷积核的输出特征图是一个标量点,即 M=1 。复杂度分析如下:
file

可见,与真正的卷积层不同,全连接层的空间复杂度与输入数据的尺寸密切相关。因此如果输入图像尺寸越大,模型的体积也就会越大,这显然是不可接受的。例如早期的VGG系列模型,其 90% 的参数都耗费在全连接层上。
InceptionV1 中使用的全局最大池化 GAP 改善了这个问题。由于每个卷积核输出的特征图在经过全局最大池化后都会直接精炼成一个标量点,因此全连接层的复杂度不再与输入图像尺寸有关,运算量和参数数量都得以大规模削减。复杂度分析如下:

file

4.3 InceptionV2 中使用两个 3×3 卷积级联替代 5×5 卷积分支

file

根据上面提到的二维卷积输入输出尺寸关系公式,可知:对于同一个输入尺寸,单个 5×5 卷积的输出与两个 3×3 卷积级联输出的尺寸完全一样,即感受野相同。
同样根据上面提到的复杂度分析公式,可知:这种替换能够非常有效的降低时间和空间复杂度。我们可以把辛辛苦苦省出来的这些复杂度用来提升模型的深度和宽度,使得我们的模型能够在复杂度不变的前提下,具有更大的容量,爽爽的。
同样以 InceptionV1 里的 (3b) 模块为例,替换前后的 5×5 卷积分支复杂度如下:

file

4.4 InceptionV3 中使用 N×1 与 1×N 卷积级联替代 N×N 卷积

file

InceptionV3 中提出了卷积的 Factorization,在确保感受野不变的前提下进一步简化。
复杂度的改善同理可得,不再赘述。

4.5 Xception 中使用 Depth-wise Separable Convolution

file

我们之前讨论的都是标准卷积运算,每个卷积核都对输入的所有通道进行卷积。
Xception 模型挑战了这个思维定势,它让每个卷积核只负责输入的某一个通道,这就是所谓的 Depth-wise Separable Convolution。
从输入通道的视角看,标准卷积中每个输入通道都会被所有卷积核蹂躏一遍,而 Xception 中每个输入通道只会被对应的一个卷积核扫描,降低了模型的冗余度。
标准卷积与可分离卷积的时间复杂度对比:可以看到本质上是把连乘转化成为相加。

file

5.总结

通过上面的推导和经典模型的案例分析,我们可以清楚的看到其实很多创新点都是围绕模型复杂度的优化展开的,其基本逻辑就是乘变加。模型的优化换来了更少的运算次数和更少的参数数量,一方面促使我们能够构建更轻更快的模型(例如MobileNet),一方面促使我们能够构建更深更宽的网络(例如Xception),提升模型的容量,打败各种大怪兽,欧耶~

file


推荐文章
Deep Image Prior:深度卷积网络先天就理解自然图像
【论文】修改一个像素,就能让神经网络识别图像出错
浙江大学CSPS最佳论文:使用卷积神经网络的多普勒雷达手势识别
file
△ 扫一扫关注 极市平台
每天推送最新CV干货

  • 0
  • 0
  • 2670
收藏
暂无评论
Admin
大咖

极市平台 ·

  • 13,462

    关注
  • 1,047

    获赞
  • 132

    精选文章
近期动态
  • 极市社区管理员,分享计算机视觉各个方向视觉干货,欢迎关注
文章专栏
  • 极市平台
作者文章
更多
  • 【华为】诺亚方舟 AI Theory Lab,招实习生 / 暑期实习 (base:香港 / 深圳)
    291
  • 【商汤科技】多模态组招校招生和实习生数名(base:上海、北京任选)
    349
  • 【深圳极视角科技 | 实习生】前端开发工程师、测试工程师(急招)
    226
  • 【字节跳动 | 内推】招聘平台治理算法工程师多名(北京、上海、新加坡)
    97
  • CV 知识库-新版极市社区上线啦(4.25-4.30)!开发者福利同步跟上~ 精选
    687