深度学习篇之tensorflow(3) —架构介绍篇一

简介

卷积神经网络常常又称为ConvNets、CNNs,在过去几年中,计算机视觉的研究聚焦于卷积神经网络,并在图像分类、回归等任务中取得了同一时代的最好性能。研究卷积神经网络的发展历史,有助于我们理解以下两个问题。第一个问题,卷积神经网络的各层到底学习了什么,各个卷积核学到了什么样的特征?第二个问题,从卷积神经网络架构设计角度来说,卷积神经网络应该如何设计(应该有几层,每层有几个过滤器,池化策略、激活函数该如何选择等)才能取得最好的性能,为什么这样选择,理论的依据是什么?

理解了以上问题,不仅能让我们从科学的角度理解神经网络,还能让我们从理论的高度设计卷积神经网络。
与此同时,卷积神经网络极为依赖海量的样本数据和大量的训练,并且卷积神经网络的架构设计对性能影响十分巨大,因此从技术上深入理解卷积神经网络,能让我们在设计卷积神经网络时,减少对数据规模的依赖,从而达到减少模型参数规模和减少计算量的目的,提高模型的训练速度和性能。

多层架构

在多层架构在计算机视觉领域广泛应用之前,计算机视觉识别系统都是通过两个相互独立,又相互补充的步骤来完成的。第一步,对输入数据进行转换。一般是通过人工设计的转换操作,例如,卷积的参数、偏置项等。转换的目的是从原始的图像或视频中抽取局部的或抽象的特征,以便于能够应用于第二个步骤的分类。第二步,应用分类算法(例如,支持向量机, Support Vector Machines)对第一个步骤中得到的输入信号进行分类预测。实际上,无论是哪个分类算法,都会受到第一个步骤的严重影响,因为第一个步骤提取到的特征决定了分类预测的准确程度。

多层架构给计算机视觉带来了全新的视角,在多层架构中,“学习”应用在分类中,分类所需要的输入转换操作直接从数据中学习得到。这种方式的学习一般称为表征学习,当这种表征学习使用深度的多层网络结构实现时,也称为深度学习。

广义地说,深层(多层)神经网络架构可以理解成自动编码机,主要由两个部分组成。第一部分,编码转换部分,负责从输入数据中提取特征向量。第二部分,解码映射部分,将从输入数据中提取到的特征向量,映射回输入数据空间,重建输入数据。编码转换阶段的参数是可以学习的,以重建的输入数据与原始数据的误差最小为目标,通过学习,得到编码转换所需要的参数。

如图所示,多层神经网络架构可以看作自动编码机,从输入层开始,是一个自动编码阶段,用于从输入数据中提取特征(有用的信息),形成特征向量(也称为特征图谱),之后通过解码操作,完成从特征向量到输入空间的映射。实际上,所有典型的深层神经网络结构都可以看作自动编码机的架构。

在这里插入图片描述

卷积神经网络

卷积神经网络就是自动编码机,通常情况下,位于卷积神经网络前部的卷积层用于编码(特征提取);位于后部的全连接层(包括Softmax层)用于解码。卷积神经网络特别适用于计算机视觉的神经网络,它在计算机视觉领域的成功可以归结为以下两个原因。

第一个原因,卷积神经网络充分利用了图像数据所包含的两维空间信息。实际上,对于图像来说,相邻像素之间通常都是高度相关的。正因如此,卷积神经网络避免了全连接神经网络的一对一的全连接方式,采用了局部分组连接的方式。与此同时,通过参数共享和跨通道卷积的方式,与全连接神经网络相比,卷积神经网络能大幅度地减少参数数量(自然而然的,也减少了样本数据的需求和对计算能力的需求)。

第二个原因,卷积神经网络引入了池化操作。通过池化操作,卷积神经网络具备了一定程度的“平移不变形”,也就是说,即使输入特征的相对位置有少许变化,卷积神经网络依然能够很好地识别出来,并不会因此受到干扰。同时,随着网络架构的层越来越深,池化操作使得网络能够逐渐增大在输入数据中的“感受野”,当然图像的分辨率也会相应地降低。

通过卷积——池化——再卷积——再池化的反复操作,神经网络中前面的层能够提取到图像原始的、局部的特征,然后经过池化操作完成扩大视野,神经网络后面的层能够提取到图像抽象钩、全局的特征,从而能够很精准地完成图像识别。

LeNet简介

1998年,由Y.LeCun、L. Bottou、Y. Bengio和P. Haffner等人发表了一种基于梯度下降的文档识别方法,应用于手写数字识别,取得了非常好的效果,这就是后来非常经典的LeNet。LeNet网络架构总共有5个版本,分别是LeNet-1到LeNet-5。

LeNet-5由4层网络层组成

  1. 卷积层(简单神经细胞)
  2. 激活层:LetNet中采用sigmod或tanh等非线性转换函数,对抽取的特征进行转换,本质是将低维空间线性不可分的问题映射到高维空间,从而使得模型变得线性可分,提高了模型的表达能力(分类能力)。
  3. 归一化层:后面,研究表明贡献不大,最近归一化层已经逐渐废弃了。
  4. 池化层。

LeNet相比较其之前的神经网络架构的关键创新在于将误差方向传播算法应用到模型训练过程中,极大地提高了模型的训练效率。LeNet是卷积神经网络的鼻祖

AlexNet

AlexNet 在卷积神经网络中具有重要的历史意义,它奠定了卷积神经网络在计算机视觉领域的王者地位。

AlexNet 的几项创新:

  1. 采用ReLU作为激活函数,一方面是模拟生物神经元的激活方式,另一方面避免sigmod和tanh等激活函数容易导致梯度消失和梯度爆炸的问题;
  2. 采用Dropout正则化方式,这是模拟了生物大脑活动时,只有部分神经元激活的现象,提高了模型的健壮性;
  3. 采用样本数据扩充技术,通过对原始图像的水平翻转、镜像、随机剪切等操作,极大地扩充了样本数据,针对图像识别的特点提高了模型的适应能力。
  4. 采用了GPU来加速卷积神经网络的计算,从此以后,GPU成为深度学习的标准配置。

AlexNet 采用了8层网络结构,之后各种卷积神经网络的层数虽然很深,但是可以按照8个构建层(每个构建层包含多个卷积层或池化层等)来看待,这也是AlexNet影响力的重要体现。

CGGNet

VGGNet是由牛津大学计算机视觉组和Google DeepMind设计的,探索了卷积神经网络的深度对图像识别准确率的影响。通过不断地堆叠卷积层最终使得卷积神经网络的层深达到16~19层,同时采用较小的3×3过滤器(卷积核)的办法使得VGGNet的识别准确率超过了之前最优的卷积神经网络,并且在2014年的lmageNet图像识别挑战赛中,取得了图像定位的第一名、图像分类的第二名。

主要特点:

  1. VGGNet 采用卷积层堆叠的方式来增加网络的深度,同时,针对卷积层堆叠可能导致的参数过多的问题,VGG采用更小的卷积核避免了参数过多,更多的卷积层堆叠也避免了小卷积核容易导致的感受野较小的问题。
  2. 引入动量的感念,通过比较本次梯度的方向与上一次梯度方向是否一致,在本次的梯度之上叠加或减去上一次梯度与动量的乘积,能够加速模型的拟合速度,采用动量的概念对学习率进行调整已经成为深度学习的标配。

较小的过滤器

  1. 为什么可以采用较小的过滤器?

    因为通过过滤器堆叠,较小的过滤器同样可以实现较大的感受野。如两个33的过滤器可以实现55的感觉野。较大的感觉野可以通过较小的过滤器堆叠来实现,并且较小的过滤器堆叠,不但不会降低模型的准确率,相反还能够提高模型识别的准确率。

  2. 采用较小过滤器的好处?
    1. 第一个好处是引入了更多的非线性转换函数---- 激活函数。非线性转换函数(激活函数),使得输出的数据更加离散化、数据更加容易被分类,这有助于我们实现目标----图像分类的完成。
    2. 第二个好处是减少了参数数量。这个是VGGNet的最主要的贡献。

其他技巧和贡献

  1. 验证了更深的网络带来更高的准确率,归一化层对准确率的提高没有帮助,更深的网络比更宽的网络架构更好。

  2. 学习率设置技巧:

    1. 第一个,引入了动量的概念。基本原理还是采用随机梯度下降法,只不过在每一次梯度更新的时候,将本次梯度方向与上一次梯度方向进行比较,如果方向一致,说明距离最优解还比较远,在本次的梯度上加上上一次的梯度与动量的乘积,参数调整速度会更快。在VGGNet中,动量设置为0.9。如果本次的梯度方向与上一次梯度方向不一致的话,说明参数已经“越过”最优解,在本次梯度上减去上一次的梯度与动量的乘积,参数调整的幅度会变小。动量能够让模型更快速地拟合,提高训练速度。
    2. 第二个,根据模型在验证集上的准确率变化幅度降低,动态地降低学习率。如果模型在验证集上的准确率不再提高(或者准确率提高程度低于设定的阈值),那么将学习率降低到原来的1/10。这样学习率变得更小,模型的准确率波动会更小,更能接近最优解。
      通过这些设置学习率的技巧,VGGNet实现了更快速地拟合,同时更接近最优解。
  3. 初始化参数技巧:初始化参数设置对模型最终准确率非常重要,如果初始化不好,在深层网络中,由于梯度不稳定,模型有可能无法收敛。VGGNet 首先训练一个容易训练的网络A,网络A的初始化参数采用随机数填充 ,将模型A训练好后,在训练更深的模型时,将模型A已经训练好的参数当作初始化参数复制到新的模型上。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇

)">
下一篇>>