深度学习----经典卷积网络总结(1)

卷积网络总结(1)


在进行详细介绍之前先上个图:

下面图片参照:http://blog.csdn.net/cyh_24/article/details/51440344

这张图很好的说明了卷积网络的大致发展脉络,接下来我们对这些网络进行介绍,除此之外我们还将对DenseNet和EfficientNet进行介绍(其中一些缓解过拟合的操作,如Dropout、LRN等我们会再写一篇博客中进行总结介绍)

 

1、1998年LeNet-5

LeNet-5网络广泛用于手写字体识别(MNIST),它的结构比较简单,如下:

该网络内部的一些操作与当前使用的大部分网络存在不小的差别。第一点,由于该结构的卷积层没有padding操作,所以卷积层也会导致其分辨率的下降;第二点,池化操作稍微复杂一点,该池化在计算完输入的平均值之后,还会再乘以一个可学习的系数另外再加上一个可学习的偏置项;第三点,C3卷积层中的大部分神经元并不是与S2层的6张图都相连,而是只与其中的三张或四张特征图相连;第四点,一般的输出层都是计算输入和权重的相乘,而该网络的输出却是输入和权重之间欧式距离的平方,每一个输出衡量了图像属于某一类具体数字的程度。

2、2012年AlexNet(参数量大大增加)

        跟LeNet-5网络有些相似,但是更大更深一些。该网络的一大特色就是直接的将卷积层堆叠到一起,而不是卷积层之后跟着池化层。结构如下:

        为了降低过拟合的风险,它用到了两种正则化技术:dropout和数据增强(通过随机平移,翻转以及改变光照等技术进行)。除此之外,在C1和C3的ReLU层后作者还是用了“局部响应归一化”,增加了模型的泛化能力

扫描二维码关注公众号,回复: 10719159 查看本文章

3、2014年VGGNet

        VGG16相比AlexNet的一个改进是采用连续的几个3x3的卷积核代替AlexNet中的较大卷积核(11x11,7x7,5x5)。对于给定的感受野(与输出有关的输入图片的局部大小),采用堆积的小卷积核是优于采用大的卷积核,因为多层非线性层可以增加网络深度来保证学习更复杂的模式,而且代价还比较小(参数更少)。

        VGG16包含了16个隐藏层(13个卷积层和3个全连接层);VGG19包含了19个隐藏层(16个卷积层和3个全连接层)。

        VGG网络的结构非常一致,该网络中的所有卷积层的过滤器大小都是 3 × 3,Stride 都是 1,Padding 都是 same,而池化层过滤器的大小全为 2 × 2,Stride 全为 2。结构如下:   

4、2014年GoogLeNet(因为结构复杂所以不如VGG常用)

(1)Inception Module

        GoogLeNet网络中有很大一部分的子网络是由如下图的Inception Module组成,我们来看一下下面的这个Inception Module:

其中表示“3x3+1(S)”表示该层的卷积核大小为3x3,stride为1,S means SAME padding。从上面的网络可以看出,首先输入信号被copy并输入到四个不同的层中,所有的卷积层都用ReLU激活函数。注意到上面的卷积层用的分别用1x1, 3x3, 5x5的卷积核,这样有助于捕捉到不同尺度的pattern。还有每个层都用了SAME padding,这就意味着,输入图像的宽高和输出的宽高是一致的,这就能够使得最终的Depth Concat能够实现(不同size的图像无法叠加)。

对于使用1x1的卷积核有两个目的:

       首先就是降维,这些层的作用是使得输出的深度比输入的低,所以又称为瓶颈层,这样就达到一个降维的目的。这个效果在3x3和5x5的卷积层之前就特别有效,大大降低了训练权重的数量。

      还有就是每一对([1x1,3x3]和[1x1,5x5])的卷积层,像一个强大的卷积层,能够捕获更为复杂的pattern.事实上确实如此,一个单层的卷积层就像是一个简单的线性分类器滑过图像,而该组合相当于是两层神经网络滑过图像。

(2)GoogLeNet

它的网络结构如下(该网络也使用了局部响应归一化):

在九个inception结构后用了一个均值池化层,并且VALID padding。输出图像的size为1x1,这种策略称为全局均值池化。该策略能够很好的强迫之前的层输出更为有效的特征,因为其他特征将会被均值被过滤掉。这样就使得后面的全连接层比较少,没有必要像AlexNet那样有好几个全连接层。最后,一个Dropout正则化,一个全连接层和softmax激活函数来获取输出结果。

       至于inception v2、v3、v4等皆是在inception基础进行修改(降低参数量、计算量),在此不再详述。

5、2015年ResNet

(1)残差学习

         ResNet提出了一种减轻网络训练负担的残差学习框架,这种网络比以前使用过的网络本质上层次更深(一般来说网络越深,学习能力越强)。通过使用残差模块解决了“网络过深会导致梯度消失”的大麻烦。主要创新点是skip connections或者叫shortcut connections: 就是将输入到网络中的信号也加到它的输出中去。

         当我们训练一个网络的时候,我们的目标就是找到一个模型目标函数h(x),使得h(x)能最大程度的匹配输入数据和label之间的映射。但是如果将输入x直接添加到输出中(增加一个skip connection),这样的话,我们的目标函数h(x)就可以转换成f(x)=h(x)-x,这个就叫做残差学习,如下图:

        当我们初始化一个一般的网络参数的时候,权重接近于0,所以网络的输出也接近0,如果增加一个skip connection 的话,那么网络的输出将会是输入的一个copy,换句话说,它首先对恒等方程建模,如果目标函数接近恒等函数的话(通常情况下是这样),那么网络训练将会加快。

      当然,如果,我们增加很多skip connections,当网络的一些层还没有开始学习的时候,网络其实已经略有成效了。由于skip connections的存在,信号能很容易的通过整个网络。深度残差网络可以看做是由一堆残差块组合而成的,每一个残差块是由一个小网络加上一个skip connection 组成。下图是一般的深度网络和深度残差网络的比较:

左图为一般深度网络,右图为深度残差网络。红色的X表示接近初始状态的一些层,可以看出,在一般深度网络中,一旦出现一个层的接近初始状态的话,那么后面的层都将会处于初始状态,而在深度残差网络中,由于skip connections的存在,一些层接近初始状态并不会影响后面的层。

(2)残差网络

         其结构如下图:

            

        网络的开始和结尾都很像GoogLeNet(除了dropout层),并且在中间有一堆的残差块,每一个残差块都由两层卷积神经网络组成,如上图,卷积层中用3x3的卷积核,stride为1,padding模式为SAME来保证输出图像的尺寸一致,在每个卷积层后面都会有一个Batch Normalization正则化 和ReLU激活层。

       实际中,考虑计算的成本,对残差块做了计算优化,即将两个3x3的卷积层替换为1x1 + 3x3 + 1x1。同时中间3x3的卷积层首先在一个降维1x1卷积层下减少了计算,然后在另一个1x1的卷积层下做了还原,既保持了精度又减少了计算量,所以可以拓展成更深的模型。

       注意到在每隔几个残差块,特征图的数量都会翻倍,同时特征图的宽高会减半(stride=2),那么问题来了,由于特征图的shape不同,我们就不能将残差块的输入直接加到残差块的输出上了(上图中红色虚箭头所示),该怎么解决呢?

      为了解决这个问题,我们得将这个加载到残差块输出的输入稍微通过一个1x1的卷积层(stride=2)修改一下shape,来保证输入和输出的尺寸一致。这样就可以直接叠加到残差块的输出上了。如下图:

比较经典的残差网络包括ResNet-34、ResNet-152等。

后面的DenseNet和EfficientNet我们会在下一篇文章中进行介绍。

参考文章:

1、https://zhuanlan.zhihu.com/p/41423739

2、智能算法公众号,深度三人行系列文章

发布了15 篇原创文章 · 获赞 0 · 访问量 185

猜你喜欢

转载自blog.csdn.net/qq_37705280/article/details/105420434