经典卷积神经网络模型

来源:互联网 发布:java第三方服务器ftp 编辑:程序博客网 时间:2024/04/18 19:49

1.AlexNet


       AlexNet模型是通过2个GPU同时运行,该模型包括:5个卷积层,3个全连接层。其中,在第1、2卷积层后有LRN层(Local Response Normalization,局部响应归一化),在LRN层和第5卷积层后有最大池化层。
       AlexNet相对于之前模型(LeNet)的改进:
       1)使用ReLU函数替代了Sigmoid函数作为神经元的激活函数,减缓了梯度弥散的问题。
       2)使用两个GPU进行并行运算,加速模型的训练周期。
       3)加入LRN层,增加模型泛化能力(似乎在后面的发展中证明LRN没什么作用,于是又基本不用了)
       4)使得池化层的size大于strides,造成赤化重叠。
       5)数据增强。取图片四个角和中心部位的部分图片作为新的训练集,或者改变图片RGB通道强度(intensities of the RGB channels)。这样训练集中的一张图片就可以变为多张图片,增加模型的泛化能力,减少过拟合。
       6)加入Dropout。模型中的一些神经元在训练阶段有概率的失效,也即是输出为0,不再参与前向和后向传播,但是在测试阶段中每个神经元都输出,不过会将输出乘以0.5。
参考文献:ImageNet Classification with Deep Convolutional Neural Networks

2.VGGNet


        VGGNet主要解决了CNN中的深度问题。相比较之前的卷积网络使用的11x11,7x7的卷积核,VGGNet使用多层更小的卷积核来替代。例如用两层卷积核为3x3的卷积层来替代一层卷积核为5x5的卷积层,用三层卷积核为3x3的卷积层来替代一层卷积核为7x7的卷积层,这样网络就会变深。之所以这样做是因为:
  • 增加层数后可以增加模型非线性,使得决策函数更加有识别能力。
  • 减少参数数量
        模型初始化方法:上图展示了VGGNet中有多种模型,网络层数由11层逐渐发展到19层。但在深层网络中参数初始化值的选定很重要,因为深层网络的梯度很不稳定,糟糕的模型初始化会使得模型效果不好。因此,VGGNet的发明者们先用较浅的网络模型(11层,随机初始化)进行训练(浅网络随机初始化不易出问题),得到稳定的参数,再将这些参数直接赋予更深网络模型作为初始值(主要赋给前四层卷积层和后三层全连接层,中间层随机初始化)。
文献链接:Very Deep Convolutional Networks for Large-scale Image Recognition

3.InceptionNet

      InceptionNet其实是一个统称,主要包括VI,V2,V3,V4四代模型。
  • Inception V1:用到了Network in Network思想,构建出Inception模块。
         
        我们知道,一个滤波器只能提取一类特征。而Inception V1模块中对同一输入进行四种不同的卷积变换,相当于在一层中获得不同的特征,从而使得每个模块输出的结果中包含更多的feature,增加了网络对不同尺度的适应性。模块中大量使用了1x1卷积,是因为1x1卷积可以用很小的计算量增加一层特征变换和非线性化。
        Inception V1也用到了数据增强,主要步骤是:将原始图片缩放成256,288,320和352四种尺寸,并分别从左,中,右(或上,中,下)各取一张图片,再从这些取出的图片的四个角和中心部分取出224x224的部分,并将其分别翻转再得到其镜像,且将原始图片缩放到224x224,得到新的图片及其镜像。这样一张原始图片就可以得到3x4x6x2=144张新的图片,降低模型过拟合问题。
  • Inception V2:提出了Batch Normalization方法,对每一层的激活函数的输入进行normalization处理。
  • Inception V3:引入Factorization into small convolutions的思想,将3x3卷积拆成了1x3和3x1卷积,减少了参数数量,增加了一层非线性扩展模型表达能力。
  • Inception V4:在V3的基础上结合了ResNet。
参考文献:  Inception V1-->Going Deeper With Convolutions
                  Inception V2-->Batch Normalization:Accelerating Deep Network Training by Reducing Internal Covariate Shift

4.ResNet

        ResNet模型主要解决的是深层神经网络模型中出现的degradation,即随着层数的加深,模型准确率反而下降了。解决方法是引进了残差学习模块(residual learning)。


                                                                   
        与一般的神经网络不同的是,残差模块中添加了一条shortcut connection,直接将输入x与模块的输出F(x)相加。ResNet直接将输入信息传给输出,一定程度上保护了信息的完整性,同时简化了学习目标和难度。
        当F(x)和x维度不同时,主要有两种解决方法:1.对x进行填0操作,这种方法不额外增加参数 2.对x进行一个线性映射,即x-->Wx,这种方法增加了模型复杂度,但是在性能上稍微有所改善。
        残差学习模块还有三层的结构(也称Bottleneck Residual Unit):

                                                                           
        其中,1x1卷积层的作用是先降维后升维,使得中间的3x3卷积层的输入和输出的维度较小。三层残差学习模块主要用在Deep Bottleneck Architectures中,这种瓶颈设计主要是从实际节约的角度考虑,在性能上相差不大。
参考文献:Deep Residual Learning for Image Recognition
        
         残差模块可表示为:y=h(x)+F(x,w)
                                           x=f(y)
         当模块中的shortcut为恒等映射,即h(x)=x,此时网络模型更加容易训练,且错误率也是最低的。
                                    
             
      而当模块中BN+ReLU在weight层前面时,模型的错误率也是最低的。


       因此,可得结论:shortcut为恒等映射以及BN,激活函数在weight层前面对于模型中信息的传播很重要,可提高模型训练效率和降低错误率。即可对ResNet单元做以下处理:
                                                  
参考文献:Identity Mappings in Deep Residual Networks
原创粉丝点击