MENU

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

August 27, 2018 • Read: 933 • 深度学习阅读设置

由浅入深。
最近在回归深度学习的一些基础知识,希望把一些最基本的概念或者原理梳理一遍,方便自己在此后的工作和学习中对 深度学习 算法有更高层次的理解。这次介绍的是一个平时不太关注的话题,如何计算 卷积神经网络时间复杂度空间复杂度。原文链接:卷积神经网络的复杂度分析

1.时间复杂度

这里使用浮点运算次数 (FLoating-point OPerations) 来评估一个 CNN 模型的时间复杂度,其实就是模型的运算次数。

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

我们都知道完整的卷积神经网络由若干个卷积层池化层组合而成,这里计算单个卷积层所带来的时间复杂度,公式如下:

$$O(n^2 \cdot f^2 \cdot C_{in} \cdot C_{out}) \tag{1} $$

参数解析:

  • $n$: 每个卷积核输出特征图( Feature Map)的边长,$n^2$ 即特征图的面积;
  • $f$: 每个卷积核 (Kernel) 的边长,$f^2$ 即卷积核的面积;
  • $C_{in}$: 卷积层的输入通道数(上一层的输出通道);
  • $C_{out}$: 当前卷积层的输出通道数;

同时如果学习过吴恩达老师的深度学习课程的话,应该对计算卷积层输出尺寸的计算有所了解:

$$\biggl\lfloor \frac{n+2p-f}{s}+1 \biggr\rfloor \times \biggl\lfloor \frac{n+2p-f}{s}+1 \biggr\rfloor \tag{2} $$

其中:

  • $s$ 为步长
  • $p$ 为填充长度
  • $n \times n$ 为输入图片大小
  • $f \times f$ 为滤波器大小

这样也可以对公式(1)进行简化。

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

$$O(\sum_{l=1}^D n_{l}^2 \cdot f_{l}^2 \cdot C_{l-1} \cdot C_{l}) \tag{3}$$

参数解析:

  • D:表示卷积层的个数,也即网络的深度;
  • l:表示网络的第 l 层;

2. 空间复杂度

空间复杂度严格来讲包括两个部分:总参数量各层输出的特征图
计算公式如下 :

$$O(\sum_{l=1}^D f_{l}^2 \cdot C_{l-1} \cdot C_{l}+\sum_{l=1}^D n^2 \cdot C_{l}) \tag{4}$$

  • 总参数量只与卷积核的尺寸 $f$、通道数 $C$ 、层数 $D$ 相关,而与输入数据的大小无关。
  • 输出特征图的空间占用比较容易,就是其空间尺寸 $n^2$ 和通道数 C 的连乘。
  • 实际上有些层(例如 ReLU)其实是可以通过原位运算完成的,此时就不用统计输出特征图这一项了。
Last Modified: January 7, 2019
Archives Tip
QR Code for this page
Tipping QR Code