神经网络的复杂度分析

本博客主要转载于如下链接:
https://zhuanlan.zhihu.com/p/31575074 卷积神经网络的复杂度分析
http://www.360doc.com/content/17/0719/14/10408243_672570496.shtml vgg16参数量与计算量

首先分析vgg:
网络图

vgg16详细参数

将所有的memory加起来:大约就是24M,卷积的时候是float32格式,所以,要乘以4bytes.将所有的parameters:即weights加起来,大约是138M floats。

把参数量的最后的三个全连接层相加除以总参数量:(102760448+16777216+4096000)/138342976 = 0.8937
可以看出:vgg16的约90%的参数量都在最后的三个全连接层。

卷积神经网络的复杂度分析--时间与空间

1.时间复杂度

即模型的运算次数,可用 [公式] 衡量,也就是浮点运算次数(FLoating-point OPerations)。
1.1 单个卷积层的时间复杂度

M:每个卷积核输出特征图(feature map)的边长
K:每个卷积核Kernel的边长
C_in每个卷积核的通道数,也即输入通道数,也即上一层的输出通道数。
C_out本卷积层具有的卷积核个数,也即输出通道数。

2.空间复杂度

3.复杂度对模型的影响

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

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

通过五个小例子说明模型的演进过程中是如何优化复杂度的。
4.1 InceptionV1中的1*1卷积降维同时优化时间复杂度和空间复杂度



4.2 InceptionV1中使用GAP(Global Average Pooling)代替Flatten。






5. 总结
通过上面的推导和经典模型的案例分析,我们可以清楚的看到其实很多创新点都是围绕模型复杂度的优化展开的,其基本逻辑就是乘变加。模型的优化换来了更少的运算次数和更少的参数数量,一方面促使我们能够构建更轻更快的模型(例如MobileNet),一方面促使我们能够构建更深更宽的网络(例如Xception),提升模型的容量,打败各种大怪兽,欧耶~
参考论文
1.《Convolutional Neural Networks at Constrained Time Cost》Kaiming He, Jian Sun
https://arxiv.org/abs/1412.1710
2.《Going Deeper with Convolutions》
https://arxiv.org/abs/1409.4842
3.《Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift》
https://arxiv.org/abs/1502.03167
4.《Rethinking the Inception Architecture for Computer Vision》
https://arxiv.org/abs/1512.00567
5.《Xception: Deep Learning with Depthwise Separable Convolutions》
https://arxiv.org/abs/1610.02357

原文地址:https://www.cnblogs.com/yanghailin/p/12720596.html