资讯专栏INFORMATION COLUMN

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

tracy / 3584人阅读

摘要:同样以里的模块为例,替换前后的卷积分支复杂度如下中使用与卷积级联替代卷积中提出了卷积的,在确保感受野不变的前提下进一步简化。

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

1.时间复杂度

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

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

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

2. 空间复杂度

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

可见,网络的空间复杂度只与卷积核的尺寸 K 、通道数 C 、网络的深度 D 相关。而与输入数据的大小无关。

当我们需要裁剪模型时,由于卷积核的尺寸通常已经很小,而网络的深度又与模型的能力紧密相关,不宜过多削减,因此模型裁剪通常最先下手的地方就是通道数。

3. 复杂度对模型的影响

时间复杂度决定了模型的训练/预测时间。如果复杂度过高,则会导致模型训练和预测耗费大量时间,既无法快速的验证想法和改善模型,也无法做到快速的预测。

空间复杂度决定了模型的参数数量。由于维度诅咒的限制,模型的参数越多,训练模型所需的数据量就越大,而现实生活中的数据集通常不会太大,这会导致模型的训练更容易过拟合。

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

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

4.1 InceptionV1中的 1×1 卷积降维

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确保输出不改变尺寸。

可见,与真正的卷积层不同,全连接层的空间复杂度与输入数据的尺寸密切相关。因此如果输入图像尺寸越大,模型的体积也就会越大,这显然是不可接受的。例如早期的VGG系列模型,其 90% 的参数都耗费在全连接层上。

InceptionV1 中使用的全局较大池化 GAP 改善了这个问题。由于每个卷积核输出的特征图在经过全局较大池化后都会直接精炼成一个标量点,因此全连接层的复杂度不再与输入图像尺寸有关,运算量和参数数量都得以大规模削减。复杂度分析如下:

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

根据上面提到的二维卷积输入输出尺寸关系公式,可知:对于同一个输入尺寸,单个 5×5 卷积的输出与两个 3×3 卷积级联输出的尺寸完全一样,即感受野相同。

同样根据上面提到的复杂度分析公式,可知:这种替换能够非常有效的降低时间和空间复杂度。我们可以把辛辛苦苦省出来的这些复杂度用来提升模型的深度和宽度,使得我们的模型能够在复杂度不变的前提下,具有更大的容量,爽爽的。

同样以 InceptionV1 里的 (3b) 模块为例,替换前后的 5×5 卷积分支复杂度如下:

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

InceptionV3 中提出了卷积的 Factorization,在确保感受野不变的前提下进一步简化。

复杂度的改善同理可得,不再赘述。

4.5 Xception 中使用 Depth-wise Separable Convolution

我们之前讨论的都是标准卷积运算,每个卷积核都对输入的所有通道进行卷积。

Xception 模型挑战了这个思维定势,它让每个卷积核只负责输入的某一个通道,这就是所谓的 Depth-wise Separable Convolution。

从输入通道的视角看,标准卷积中每个输入通道都会被所有卷积核蹂躏一遍,而 Xception 中每个输入通道只会被对应的一个卷积核扫描,降低了模型的冗余度。

标准卷积与可分离卷积的时间复杂度对比:可以看到本质上是把连乘转化成为相加。

5.总结

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

欢迎加入本站公开兴趣群

商业智能与数据分析群

兴趣范围包括各种让数据产生价值的办法,实际应用案例分享与讨论,分析工具,ETL工具,数据仓库,数据挖掘工具,报表系统等全方位知识

QQ群:81035754

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/4681.html

相关文章

  • 深度卷积神经网络演化历史及结构改进脉络-40页长文全面解读

    早期成果卷积神经网络是各种深度神经网络中应用最广泛的一种,在机器视觉的很多问题上都取得了当前较好的效果,另外它在自然语言处理,计算机图形学等领域也有成功的应用。第一个真正意义上的卷积神经网络由LeCun在1989年提出[1],后来进行了改进,它被用于手写字符的识别,是当前各种深度卷积神经网络的鼻祖。接下来我们介绍LeCun在早期提出的3种卷积网络结构。 文献[1]的网络由卷积层和全连接层构成,网络...

    xiaodao 评论0 收藏0
  • 卷积神经网络工作原理直观解释

    摘要:其实我们在做线性回归也好,分类逻辑斯蒂回归也好,本质上来讲,就是把数据进行映射,要么映射到一个多个离散的标签上,或者是连续的空间里面,一般简单的数据而言,我们很好拟合,只要线性变化一下,然后学习出较好的就可以了,但是对于一些比较复杂的数据怎 其实我们在做线性回归也好,分类(逻辑斯蒂回归)也好,本质上来讲,就是把数据进行映射,要么映射到一个多个离散的标签上,或者是连续的空间里面,一般简单的数据...

    cheukyin 评论0 收藏0
  • 卷积神经网络工作原理直观解释

    摘要:其实我们在做线性回归也好,分类逻辑斯蒂回归也好,本质上来讲,就是把数据进行映射,要么映射到一个多个离散的标签上,或者是连续的空间里面,一般简单的数据而言,我们很好拟合,只要线性变化一下,然后学习出较好的就可以了,但是对于一些比较复杂的数据怎 其实我们在做线性回归也好,分类(逻辑斯蒂回归)也好,本质上来讲,就是把数据进行映射,要么映射到一个多个离散的标签上,或者是连续的空间里面,一般简单的数据...

    hiyayiji 评论0 收藏0
  • 如何从信号分析角度理解卷积神经网络复杂机制?

    摘要:随着复杂和高效的神经网络架构的出现,卷积神经网络的性能已经优于传统的数字图像处理方法,如和。子网络由多个卷积层组成,而子网络由几个完全连接层组成。结论总而言之,模型用信号分析的角度为我们剖析了卷积神经网络。 随着复杂和高效的神经网络架构的出现,卷积神经网络(CNN)的性能已经优于传统的数字图像处理方法,如 SIFT 和 SURF。在计算机视觉领域,学者们开始将研究重点转移到 CNN,并相信 ...

    Aomine 评论0 收藏0
  • 基于卷积神经网络奶牛个体身份识别

    摘要:将躯干图像灰度化后经插值运算和归一化变换为大小的矩阵,作为结构的卷积神经网络的输入进行个体识别。卷积神经网络构建为减少数据量并保证输入图像的细节信息,将奶牛躯干图像灰度化后通过插值计算变化为的图像,并除以归一化后作为输入数据。 最近看了一个有趣的人工智能应用,给大家分享一下~这是一个人工智能与农业的结合,在农业中我们经常需要给个体动物做标记,目的是对奶牛做身份识别,然后可以对动物做养殖和繁殖...

    MyFaith 评论0 收藏0

发表评论

0条评论

tracy

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<