一、AlexNet
共有5层卷积,3层全连接。
相比于传统的CNN,重要的改动有:
1. 数据增强:图像裁剪(crop),水平翻转;颜色、光照变换(使用PCA对每个像素点RGB分别加一个数)。
2. Dropout:以一定概率使神经元的输出为0,减少过拟合。
3. ReLU:方便计算,求导容易,使网络变得稀疏(类似L1正则),能够更快的学习。
4. Local Response Normalization:局部响应归一化,利用临近的数据做归一化。贡献了1.2%的Top-5正确率。
5. Overlapping Pooling:即Pooling的步长比Pooling Kernel小。贡献了0.3%的Top-5正确率。
6. 多GPU学习。
二、VGGNet
在ILSVRC上定位方面获得第一名,分类获得第二名(第一被GoogLeNet拿去了)。
为了解决初始化(权重初始化)等问题,VGG采用的是一种Pre-training的方式,这种方式在经典的神经网络中经常见得到,就是先训练一部分小网络,然后再确保这部分网络稳定之后,再在这基础上逐渐加深。上表从左到右体现的就是这个过程,并且当网络处于D阶段的时候,效果是最优的,因此D阶段的网络也就是最后的VGGNet啦!
相比于AlexNet最大的改进是用小size的Filter代替大size的Filter。两个3*3的卷积核代替5*5的卷积核,三个3*3代替7*7。多个小尺度的卷积核比大尺度的卷积核非线性更强,同时参数减少,不容易过拟合。
三、GoogLeNet
该模型的创新在于Inception,这是一种网中网的结构,即原来的结点也是一个网络。Inception一直在不断发展,目前已经V2、V3、V4了。Inception的结构中1*1卷积主要用来降维。用了Inception之后整个网络结构的宽度和深度都可扩大,能够带来2-3倍的性能提升。
对Inception的结构做以下说明:
1. 采用不同大小的卷积核意味着不同大小的感受野,最后拼接意味着不同尺度特征的融合。
2. 之所以卷积核大小采用1、3和5,主要是为了方便对齐。设定卷积步长stride=1后,只要分别设定pad=0、1、2,那么卷积后便可以得到相同维度的特征,然后这些特征就可以直接拼接在一起了。
3 . 文章说很多地方都表明pooling挺有效,所以Inception里面也嵌入了。
4 .网络越到后面,特征越抽象,而且每个特征所涉及的感受野也更大了,因此随着层数的增加,3x3和5x5卷积的比例也要增加。
5. 使用5x5的卷积核仍然会带来巨大的计算量。为此,文章借鉴NIN,采用1x1卷积核来进行降维。 例如:假定上一层的输出为100x100x128,经过具有256个5x5卷积核的卷积层处理之后(stride=1,pad=2),输出数据为100x100x256,其中,卷积层的参数为128x5x5x256。假如上一层输出先经过具有32个1x1卷积核的卷积层,再经过具有256个5x5卷积核的卷积层,那么最终的输出数据仍为为100x100x256,但卷积层参数量已经减少为128x1x1x32 + 32x5x5x256,大约减少了4倍。
此外,该模型最后采用了average pooling来代替全连接层。但是,实际在最后还是加了一个全连接层,主要是为了方便以后大家finetune。
四、ResNet
五、ResNeXt
右侧结构很像Inception,而Inception网络的一个动机就是通过稀疏连接近似成large and dense layers。但是Inception中的参数在新数据集上泛化性能不是特别好,会有一堆超参数需要设计。
而ResNeXt将Inception和ResNet很好的结合,跟同期的Inception-ResNet不同,ResNeXt在每个path都采用相同的设计(相同的参数),泛化性能很好。