卷积神经网络模型概念与理解

来源:互联网 发布:微信 请检查网络设置 编辑:程序博客网 时间:2024/06/05 19:53

博文的编写,主要参考网上资料并结合个人见解仅供学习交流使用,如有侵权请联系博主删除,原创文章转载请注明出处。

本文简单介绍 AlexNet、GoogLeNet、VGG、ResNet四个模型

AlexNet
  • AlexNet (2012 Imagenet Champion )包含了八个学习层,五个卷积层和三个全连接层
    这里写图片描述
    输入数据:227×227×3
    卷积核:11×11×3;步长:4;数量(也就是输出个数):96
    卷积后数据:55×55×96
    relu1后的数据:55×55×96
    pool1的核:3×3,步长:2
    pool1后的数据:27×27×96
    norm1:local_size=5
    最后的输出:27×27×96

    AlexNet 之所以厉害是因为

    1. 非线性激活函数ReLU:用ReLU代替了传统的Tanh或者LogisticReLU。本质上是分段线性模型,前向计算非常简单,无需指数之类操作,ReLU的偏导也很简单,反向传播梯度,无需指数或者除法之类操作。ReLU不容易发生梯度发散问题,Tanh和Logistic激活函数在两端的时候导数容易趋近于零,多级连乘后梯度更加约等于0
    2. 防止过拟合的方法:Dropout,Data augmentation
    3. Deep Learning领域应该感谢李飞飞团队搞出来如此大的标注数据集合ImageNet,大数据训练:百万级ImageNet图像数据

    最后的输出1000个全连接层是每一个神经元都代表一个类。每次卷积过后都会有一次非线性变换,非线性变换在学术界和工业界都得到了认可,通常会用到ReLU函数,训练采用Dropout来防止过拟合。batch size128训练时候批大小,batch size越大的话训练起来速度越快,GPU利用的效率越高,有一种观点认为神经网络是靠数据喂出来的,若增加训练数据,则能够提升算法的准确率,因为这样可以避免过拟合,而避免了过拟合你就可以增大你的网络结构了。当训练数据有限的时候,可以通过一些变换来从已有的训练数据集中生成一些新的数据,来扩大训练数据的batch size。1 Data Augmentation数据增强,可以参考李飞飞老师的cs231课程是最好了。常用的数据增强方法有:水平翻转 随机裁剪、平移变换 颜色、光照变。(2) Dropout方法和数据增强一样,都是防止过拟合的。Dropout应该算是AlexNet中一个很大的创新,以至于Hinton在后来很长一段时间里的Talk都拿Dropout说事,后来还出来了一些变种,比如DropConnect等。

VGG
  • VGG (2014 Imagenet Champion)
    Simonyan, Karen, and Andrew Zisserman. “Very deep convolutional networks for large-scale image recognition.” arXiv preprint arXiv:1409.1556 (2014). 这里写图片描述
    VGG16 和VGG19有13层卷积层加上3层全连接层,特点是卷积层数不断增加但是pooling层没有增加,LeNet-5每次卷积加一层pooling是因为不做pooling层的话图像维度特别大,当时的计算处理不好。现在的VGG只需要3到4层卷积层后加pooling层,主要是计算资源比之前强很多。pooling层操作会丢失图像信息,在计算资源丰富的情况下尽可能的情况下减少pooling层。神经网络的趋势会是不断增加卷积层。
    VGGNet 有 5 个卷积群,每一群内有 2~3 个卷积层,每个群连接一个 max-pooling 层来缩小图片尺寸。每个卷积群内的卷积核数量一样,越靠后的卷积群的卷积核数量越多:64 – 128 – 256 – 512 – 512。其中经常出现多个完全一样的 3x3 的卷积层堆叠在一起的情况,可以发现两个 3x3 的卷积层串联其实相当于 1 个 5x5 的卷积层,也就是说一个像素会跟周围 5x5 的像素产生关联。类似的,3 个 3x3 的卷积层串联的效果则相当于 1 个 7x7 的卷积层。为什么要堆叠卷积层而不直接用 7x7 的呢?一是因为 3 个串联的 3x3 的卷积层的参数比 1 个 7x7 的卷积层更少,二是因为 3 个 3x3 的卷积层比 1 个 7x7 的卷积层有更多的非线性变换(前者可以用三次 ReLU 激活函数,而后者只有一次),对特征的学习能力更强。VGG结构简单,同 AlexNet 结构类似,都是卷积层、池化层、全连接层的组合
    GitHub - machrisaa/tensorflow-vgg: VGG19 and VGG16 on Tensorflow

    GooLeNet
  • GooLeNet: 多维度识别
    GooLeNet: 多维度识别
    GooLeNet是2014ILSVRC冠军,top-5错误率6.7%。共9个inception模块,改变CNN原串行结构,采用并行。共22层。
    蓝色Convolution层:
    红色pooling:网络最后采用了average pooling来代替全连接层,想法来自NIN,事实证明可以将TOP1 accuracy提高0.6%。但是,实际在最后还是加了一个全连接层,主要是为了方便以后大家finetune
    黄色Softmax:为了避免梯度消失,网络额外增加了2个辅助的softmax用于向前传导梯度
    绿色:Other

    Inception 结构发展
    这里写图片描述
    GooLeNet Inception引入了一个相当重要的概念就是当前一层到下面一层 ,Convolution卷积核的大小都是(1x1, 3x3, 5x5),但Inception module是用各种各样的Convolution叠在一起得出一个输出,主要目标是找到最优的稀疏结构单元,也就是 Inception module。Inception 结构是将不同的卷积层通过并联的方式结合在一起,它主要改进了网络内部计算资源的利用率,让我们能在固定计算资源下增加神经网络深度和宽度,另外,Inception 结构还遵循了 Hebbian 原则并增加了多尺度处理。
    GooLeNet 的 Inception 对特征图进行了三种不同的卷积(1x1, 3x3, 5x5)来提取多个尺度的信息,也就是提取更多的特征。

    参考:

    1. Inception[V1]: Going Deeper with Convolutions
    2. Inception[V2]: Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift
    3. Inception[V3]:Rethinking the Inception Architecture for Computer Vision
    4. Inception[V4]:Inception-ResNet and the Impact of Residual Connections on Learning

    Inception v1 有 22 层,但只有 500w 的参数量,是 AlexNet 的 1/12。为什么要减少参数量?一是因为参数越多,需要喂给模型的数据量就越大,二是因为参数越多,耗费的计算资源就越大。InceptionNet 为什么参数少而且效果好?一是因为用平均池化层代替了最后的全连接层,二是因为上面解释的 Inception Module 的作用。

    Inception v2 学习了 VGG,用两个 3x3 的卷积替代了 5x5 的大卷积(降低参数&减少过拟合),并提出了 Batch Normalization 方法,另外根据 BN 对其他部分做了一些调整,比如增大 learning rate,加快学习衰减速度,去除 dropout 减轻L2 正则,去除 LRN,更彻底的对训练样本进行 shuffle 等等。

    Inception v3 优化了 Inception Module 的结构,同时引入了 Factorization into small convolutions 思想,把一个较大的二维卷积拆分成两个较小的一维卷积,如将 7x7 卷积拆成 1x7 卷积核 7x1 卷积,进一步节约参数减轻过拟合,此外,Inception v3 还增加了一层非线性扩展模型表达能力。

    这里写图片描述

    Inception v4 则结合了微软的 ResNet,在 TOP5 error 上反超了 ResNet 3.1%,Inception 网络就是由多个上面所说的 inception model 堆叠起来的,Inception model 之间可能再通过 max pulling 减小 feature map,论文作者提出,为了 memory efficiency,最好前几层按正常 CNN 套路来,在深层的时候使用 Inception model。
    nception 网络就是由多个上面所说的 inception model 堆叠起来的,Inception model 之间可能再通过 max pulling 减小 feature map,论文作者提出,为了 memory efficiency,最好前几层按正常 CNN 套路来,在深层的时候使用 Inception model。
    Szegedy, Christian, et al. “Going deeper with convolutions.” Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2015.I

  • ResNet: 机器超越人类识别
    Deep Residual Learning for Image Recognition
    这里写图片描述
    微软亚洲研究院MSRA何凯明团队的Residual NetworksResNet,引入了残差网络结构(residual network),通过残差网络,可以把网络层弄的很深,据说现在达到了1000多层,最终的网络分类的效果也是非常好,残差网络的基本结构如下图所示 这里写图片描述
    主要的创新在残差网络,其实这个网络的提出本质上还是要解决层次比较深的时候无法训练的问题。这种借鉴了Highway Network思想的网络相当于旁边专门开个通道使得输入可以直达输出,而优化的目标由原来的拟合输出H(x)变成输出和输入的差H(x)-x,其中H(X)是某一层原始的的期望映射输出,x是输入。
    网络层数不断增加会导致网络优化的问题,梯度消失是神经网络中一个很重要的问题,即使使用了ReLU虽然可以减少梯度消失的问题但不能解决这个问题,ResNet本质上和GooLeNet没有太大差别,ResNet的区别在与加了跳跃连接,跳跃连接不会导致梯度消失所产生的问题使网络优化变得简单,相当于网络等效变低了,有跳跃连接这层的话网络层是152/2Residual Net 核心思想是,去拟合残差函数 F (F = y - h(x)),选 h(x)=x 时效果最好。
    ResNet:Identity Mappings in Deep Residual Networks论文笔记