联系我们
- 地 址:北京市海淀区北四环西路9号 ,主 营:人脸识别,活体检测,身份证识别,银行卡识别,名片识别,车牌识别,OCR识别等及智能识别技术。
- 电 话:13146317170 廖经理
- 传 真:
- 邮 箱:398017534@qq.com
卷积神经网络分析
卷积神经网络分析
在梳理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),提升模型的容量,打败各种大怪兽,欧耶~
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),提升模型的容量,打败各种大怪兽,欧耶~
上一条:人脸识别技术简介
下一条:全美首个人工智能AI本科专业今年开课