卷积神经网络的发展历史如上所示,在AlexNet进入大众的视野之后,卷积神经网络的作用与实用性得到了广泛的认可,由此,对于卷积神经网络的优化进入了快速发展的阶段,经典的里程碑式的优化思想大致归为四大类:
表现为在卷积神经网络的网络结构方面,在网络结构上增加卷积激活层,使得网络结构越变越深,深层次的网络在训练学习的过程中所考虑的因素就会更多,理论上会更加准确,但是网络的深度要与实际问题相关,在实践中折衷选取,过深过浅都不利于问题的解决。
表现为在一个卷积块中对特征提取的方式做出改变(也即变更传统卷积层的结构以获取更多的滤波作用),一般处于对feature map的尺度以及优化计算量的考量。
同样利用CNN,但是设计网络的目标从分类的任务变更为了检测任务,检测任务不仅需要对图片中的区域进行特征提取、对结果进行分类,还要通过相关性的信息将目标框框出。
丰富网络处理某一层输入或者输出的功能,此处的功能单元指传统卷积(Conv)、激活以及全连接、分类器之外的新增功能模块,例如LSTM增加的遗忘门,能够考虑历史数据,增加神经网络的功能。
卷积神经网络(CNN)在发展历程中Inception的出现是具有里程碑式的意义的。此前,主流CNN的优化方式几乎都是堆叠卷积层,致使卷积层数量越来越多,网络深度越来越深,以这种方式优化效果。
以上提到的方式带来了一定的问题:
将网络“深度”转换为“宽度”
在同一层级使用多个尺度的滤波器,将增加深度的思想转换到增加卷积层的宽度上,多尺度的考虑图像信息。
使用卷积核的计算特性优化参数量
作者采用增加 1 × 1 1\times 1 1×1卷积的方式限制输入的通道数量。
三通道卷积过程
要点: 输入的通道数要与卷积核的通道数相同,输出的通道数等于卷积核的个数
1 × 1 1\times 1 1×1卷积的优化
考虑下列场景计算
计算方式以及公式推导请参照笔者之前的文章CV学习笔记-卷积神经网络,在此不再赘述。
输入为 28 × 28 × 192 28\times 28\times 192 28×28×192,通过 32 32 32个 5 × 5 5\times 5 5×5的卷积核在same的填补和步长模式下,参数量为
5 × 5 × 192 × 32 = 153600 5\times 5\times 192 \times32=153600 5×5×192×32=153600
用 1 × 1 1\times 1 1×1的卷积优化计算的场景如下:
输入为 28 × 28 × 192 28\times 28\times 192 28×28×192的feature map,经过16个 1 × 1 1\times1 1×1卷积得到输出为 28 × 28 × 16 28 \times 28\times 16 28×28×16,再通过32个 5 × 5 5\times 5 5×5的卷积核得到输出为 28 × 28 × 32 28\times 28 \times 32 28×28×32的feature map,可以看出最后的输出尺寸与优化前是一致的,参数量为:
( 1 × 1 × 192 ) + ( 5 × 5 × 16 ) = 592 (1\times 1\times 192)+(5\times 5 \times 16)=592 (1×1×192)+(5×5×16)=592
可以看出在优化后,保持输出与输入尺寸不变的情况下,参数量大大减少。
1 × 1 1\times 1 1×1卷积在Inception中的主要作用
网络结构如下:
要点
优化1:增加BatchNormalization,也即常说的BN
在卷积层后假如BN层,BN层依照下列公式进行标准化:
x ^ ( k ) = x k − E [ x k ] V a r [ x ( k ) ] \hat{x}^{(k)}=\frac{x^{k}-E[x^{k}]}{\sqrt{Var[x^{(k)}]}} x^(k)=Var[x(k)]xk−E[xk]
能够保证所有的输出在0~1之间
保证数据服从于标准正态分布,也即均值为0、标准差为1的正态分布 N ( 0 , 1 ) N(0,1) N(0,1),使其落入激活函数的敏感区域,避免梯度消失,防止网络陷入饱和
提高泛化能力与学习速度,能够设置较大的初始学习率,减少了对参数初始化的依赖
减少dropout的使用,降低L2正则约束参数
正则化参考
实际的卷积过程中,并不是每个神经元都进行了BN,而是使用了类似共享权值的策略,把一整张feature map当作了一个神经元处理
对于每个feature map都只有一对可学习的参数 γ \gamma γ、 β \beta β,BN的过程相当于求取所有样本所对应的一个特征图的所有神经元的平均值、方差,然后对这个特征图神经元做归一化。
y i ← γ x i ^ + β = B N γ , β ( x i ) y_i\leftarrow \gamma \hat{x_i}+\beta=BN_{\gamma,\beta}(x_i) yi←γxi^+β=BNγ,β(xi)
优化2:使用2个连续的 3 × 3 3\times 3 3×3卷积层(步长为1)组成的结构代替 5 × 5 5\times 5 5×5卷积层
通过计算,连续的2个 3 × 3 3\times 3 3×3的卷积与一个 5 × 5 5\times 5 5×5的卷积得到的输出尺寸是一致的,但是 5 × 5 5\times 5 5×5的卷积核参数与 3 × 3 3\times 3 3×3的参数量之比为 25 9 = 2.78 \frac{25}{9}=2.78 925=2.78,在feature map比较大时差异尤为明显。
优化3:使用 1 × n 1\times n 1×n与 n × 1 n\times 1 n×1的连续卷积代替 n × n n\times n n×n的卷积核尺寸
这种处理方式为使用非对称卷积核进行不对称分解,其存在:
InceptionV2网络结构图
InceptionV3网络结构图
InceptionV3整合了V2中的所有优化手段,同时还使用了 7 × 7 7\times 7 7×7卷积
设计思想
Inception V4的论文中没有公式,都是网络结构的展示,Inception V4中基本的Inception Module还是沿袭的InceptionV2和InceptionV3的结构,只是做了统一化标准化改进,并且使用了更多的Inception Module,其实验效果表现良好。
Inception V4的网络结构图
作者在论文中,也提到了与ResNet的结合,总结如下:
Residual Connection
ResNet的作者认为残差连接为深度神经网络的标准,而作者认为残差连接并非深度神经网络必须的,残差连接可以提高网络的训练速度
Residual Inception Block
1 × 1 1\times 1 1×1的卷积核有妙用,可以做非线性映射,且拥有极小的参数量,卷积核小到一步一步卷全图,在残差Inception块中有的地方 1 × 1 1\times 1 1×1卷积之后并没有激活,主要是在做维度对齐,保证Concat
Scaling of the Residual
当滤波器的数量超过1000个时候,网络会出现“坏死”的情况,在平均池化前都会变成0,此时降低学习率、增加BN层都没有用,这时候在激活函数之前缩小残差可以保持稳定。
网络精度提高的原因
残差连接只能加速网络收敛,真正提高网络精度还是“更大规模的网络”
此处总结借鉴了inception-v1,v2,v3,v4----论文笔记_ Meng的博客-CSDN博客_inception论文