1. GoogLeNet
GoogLeNet提出于2014年,在当年的ILSVRC(ImageNet Large Scale Visual Recognition Challenge)图像分类竞赛上夺得冠军。这个网络使用了Inception模块,Inception模块与全连接层相比拥有了更高的效率,模块内不含全连接层并且参数的数量是AlexNet的十二分之一,整个网络是由一个一个的Inception模块堆叠起来的。
在自己设计网络结构时我们需要考虑设定的卷积核的大小的问题,GoogLeNet的Inception模块就给我们提供了一种解决方案:分别使用不同尺度的卷积核进行卷积,再将这些卷积核堆叠起来传输到下一层。正是使用了不同尺度的卷积核,对原图上的特征无论大小都能捕捉到。原始版本的Inception模块中使用了5×5、3×3、1×1三个大小的卷积核做卷积处理和一个3×3的最大池化处理,将这四个特征图叠在一起作为一层的输出。
原始版本的Inception模块
但在原始版本的Inception模块中,由于使用了多尺度的并行卷积,经过一层Inception模块后输出的厚度是四个部分卷积核之和,比如:输入是28×28×256,三个尺度5×5、3×3、1×1的卷积操作分别含有96、192、128个卷积核,池化的输出为28×28×256,将这四个输出堆叠起来输出就变为28×28×(128+192+96+256)=28×28×672。通过Inception模块后输出厚度大幅度增加,计算量也会暴增。
为了解决这一问题引入了1×1卷积来进行降维。在原始的5×5和3×3卷积后使用32个1×1的卷积核进行卷积则输出都为28×28×32;在池化操作前也使用32个1×1的 卷积核进行卷积再进行池化操作,池化的输出为28×28×32最后堆叠起来的输出就变为28×28×(128+32+32+32)=28×28×224。引入了1×1卷积后明显降低了输出的厚度减少了大量的参数,加深了模型的深度提高了非线性表示能力,同时也实现了特征图跨通道的信息交融。
引入了1×1卷积的Inception模块
在GoogLeNet的最后并没使用全连接层,而是使用了Global Average Pooling(GAP),GAP就是将输入的每一个通道分别取平均值来代表该通道,避免了将特征图拉平成一个长向量,有效减少参数数量。
2. ResNet
2015年何恺明团队提出了深度残差网络ResNet,在当年的ILSVRC比赛中以巨大的优势夺得了冠军。ResNet在图像分类、目标定位、目标检测项目中都取得了第一名,top5错误率也首次超越人类水平。
在深度学习中神经网络并不是越深越好,这是因为随着网络深度的增加会带来梯度消失现象使网络退化。ResNet就提出了一种想法:希望在加深神经网络之后网络的效果至少不会降低不会发生退化。因此ResNet提出了残差模块,将输入数据经过卷积处理之后与原始的数据相加。如果卷积操作没有学习到任何特征,输入与输出就相同,这样就保证了网络输出的效果不会比输入差。如果卷积操作能学习到微小的特征,对网络进行微小的优化,在加深网络的过程中就能得到不断地优化以量变带来质变,最终的网络就能有不错的效果。
在线性回归问题中,预测直线上点与真实测试集上点的纵坐标之差就是残差。ResNet中残差模块就是利用残差来优化预测器的边界。由于深度残差网络中使输入可以跨层传递跳跃链接,深度残差网络就不会出现梯度消失现象,ResNet就能使用更深的模型来训练神经网络。
整个网络由若干残差模块堆叠而成。在各个残差模块中并没有池化层,而是采用了步长为2的3×3卷积来实现下采样。在整个而网络中只采用了一个1000分类的全连接层,在全连接层前使用了GAP来降低参数量使得整个网络计算效率较高。