Convolutional Neural Networks:第二周

1. Classic Networks

第二周的课程首先介绍了几种经典的卷积神经网络模型:

  • LeNet-5
  • AlexNet
  • VGG
1.1 LeNet-5

LeNet分为卷积层块和全连接层块两个部分。卷积层块里的基本单位是卷积层后接最大池化层:卷积层用来识别图片里的空间模式,例如线条和物体局部,之后的最大池化层则用来降低卷积层对位置的敏感性。卷积层块由两个这样的基础块构成,即两个卷积层和两个最大池化层。每个卷积层都使用5×5的窗口,且在输出上作用sigmoid激活函数来将输出非线性变换到(0,1)区间。第一个卷积层输出通道为6,第二个则增加到16,这是因为其输入高宽比之前卷积层要小,所以增加输出通道来保持相似的模型复杂度。两个最大池化层的窗口均为2×2,且步幅为2。这意味着每个作用的池化窗口都是不重叠的。(引自http://zh.gluon.ai/chapter_convolutional-neural-networks/lenet.html

LeNet交替使用卷积层和最大池化层后接全连接层来进行图片分类。

这里写图片描述

1.2 AlexNet

这里写图片描述

介绍(引自http://zh.gluon.ai/chapter_convolutional-neural-networks/alexnet.html):
2012年AlexNet ,名字来源于论文一作名字Alex Krizhevsky,横空出世,它使用8层卷积神经网络以很大的优势赢得了ImageNet 2012图像识别挑战。它首次证明了学习到的特征可以超越手工设计的特征,从而一举打破计算机视觉研究的前状。
AlextNet与LeNet的设计理念非常相似。但也有非常显著的特征。
(1) 与相对较小的LeNet相比,AlexNet包含8层变换,其中有五层卷积和两层全连接隐含层,以及一个输出层。
第一层中的卷积窗口是11×11。因为ImageNet图片高宽均比MNIST大十倍以上,对应图片的物体占用更多的像素,所以使用更大的窗口来捕获物体。第二层减少到5×5,之后全采用3×3。此外,第一,第二和第五个卷积层之后都跟了窗口为3×3步幅为2的最大池化层。另外,AlexNet使用的通道数也数十倍大于LeNet。
紧接着卷积层是两个输出大小为4096的全连接层们。这两个巨大的全连接层带来将近1GB的模型大小。由于早期GPU显存的限制,最早的AlexNet使用双数据流的设计使得一个GPU处理一半模型。幸运的是GPU内存在过去几年得到了长足的发展,除了一些特殊的结构外,我们也就不再需要这样的特别设计了。
(2) 将sigmoid激活函数改成了更加简单的relu函数f(x)=max(x,0)。它计算上更简单,同时在不同的参数初始化方法下收敛更加稳定。
(3) 通过丢弃法来控制全连接层的模型复杂度。
(4) 引入了大量的图片增广,例如翻转、裁剪和颜色变化,进一步扩大数据集来减小过拟合。

AlexNet跟LeNet类似,但使用了更多的卷积层和更大的参数空间来拟合大规模数据集ImageNet。它是浅层神经网络和深度神经网络的分界线。虽然看上去AlexNet的实现比LeNet也就就多了几行而已。但这个观念上的转变和真正跑出好实验结果,学术界整整花了20年。

1.3 VGG-16

VGG模型把所有的卷积层和池化层的大小都固定了,因此结构简单,但是参数量巨大。

介绍:(http://zh.gluon.ai/chapter_convolutional-neural-networks/vgg.html
它名字来源于论文作者所在实验室Visual Geometry Group。VGG提出了可以通过重复使用简单的基础块来构建深层模型。
VGG模型的基础组成单位是连续数个相同的使用填充1的3×3卷积层后接上一个步幅为2的2×2最大池化层。卷积层保持输入高宽,而池化层则对其减半。
VGG网络同AlexNet和LeNet一样由卷积层模块后接全连接层模块构成。卷积层模块串联数个vgg_block,其超参数由conv_arch定义,其指定每个块里卷积层个数和输出通道。全连接模块则跟AlexNet一样。
可以看到VGG模型每次将长宽减半,最后高宽变成7后进入全连接层。同时输出通道数每次都翻倍。因为每个卷积层的窗口大小一样,所以每层的模型参数大小和计算复杂度跟 高×宽×输入通道数×输出通道数 成正比。VGG这种高宽减半和通道翻倍的设计使得每个卷基层都有相同的模型参数大小和计算复杂度。
VGG通过5个可以重复使用的卷积块来构造网络。根据每块里卷积层个数和输出通道不同可以定义出不同的VGG模型。
这里写图片描述

2. ResNets

介绍:http://zh.gluon.ai/chapter_convolutional-neural-networks/resnet.html
在进行梯度反传计算时,我们从误差函数(顶部)开始,朝着输入数据方向(底部)逐层计算梯度。当我们将层串联在一起的时候,根据链式法则我们将每层的梯度乘在一起,这样经常导致梯度大小指数衰减。从而在靠近底部的层只得到很小的梯度,随之权重的更新量也变小,使得他们的收敛缓慢。
ResNet 成功增加跨层的数据线路来允许梯度可以快速的到达底部层来有效避免这一情况。这一节我们将介绍ResNet的工作原理。
这里写图片描述
ResNet的基础块叫做残差块。如下图所示,它将层A的输出在输入给层B的同时跨过B,并和B的输出相加作为下面层的输入。它可以看成是两个网络相加,一个网络只有层A,一个则有层A和B。这里层A在两个网络之间共享参数。在求梯度的时候,来自层B上层的梯度既可以通过层B也可以直接到达层A,从而使得层A可以更容易获取足够大的梯度来进行模型更新。

使用Residual block能够帮助训练非常深的模型。

2.1 Residual block

将某层的输出跨过若干层直接喂给指定层作为输入的一部分。
这里写图片描述

一般的神经网络模型随着层数到一定程度,训练误差反而会开始增大,如下图左下角所示;而ResNet能够避免该情况的产生,即层数越多,训练误差总是在下降。
这里写图片描述

2.2 Why do residual networks work?

ResNets能够保证下一层的预测效果至少不会比前几层差;而普通深度神经网络模型往往很难做到这点。
这里写图片描述

2.3 ResNet 模型

模型例子:
这里写图片描述

2.4 1x1Convolutions

1x1Convolutions将输入对象的相同位置的所有层的元素求和并乘以一个固定值。
这里写图片描述

1x1Convolutions能够在不影响高、宽的情况下有效地改变原对象的层数。
这里写图片描述

2.5 Inception Network Motivation

介绍:http://zh.gluon.ai/chapter_convolutional-neural-networks/googlenet.html
GoogLeNet中的基础卷积块叫做Inception,得名于同名电影《Inception》,寓意梦中嵌套梦。比较上一节介绍的NiN,这个基础块在结构上更加复杂。
这里写图片描述
由上图可以看出,Inception里有四个并行的线路。前三个线路里使用窗口大小分别是1×1、3×3和5×5的卷积层来抽取不同空间尺寸下的信息。其中中间两个线路会对输入先作用1×1卷积来将减小输入通道数,以此减低模型复杂度。第四条线路则是使用3×3最大池化层,后接1×1卷基层来变换通道。四条线路都使用了合适的填充来使得输入输出高宽一致。最后我们将每条线路的输出在通道维上合并在一起,输入到接下来的层中去。
Inception块中可以自定义的超参数是每个层的输出通道数,以此我们来控制模型复杂度。

  • 为什么使用Inception Network?
    Inception Network将若干种卷积层和池化层的结果合并在一起,让算法自己去挑选合适的结构。
    这里写图片描述

  • The problem of computational cost
    增加一个常规卷积层,往往会使模型的参数量变得巨大。如下:
    这里写图片描述
    而在常规卷积层前添加一层1x1Convolutions,能够有效降低参数量(从120M到12.4M)。
    这里写图片描述

2.6 Inception Network
  • Inception module
    这里写图片描述

  • Inception Network
    Inception Network 由多个Inception module组成。
    这里写图片描述

3. 应用ConvNets的建议

3.1 积极使用开源程序

因为即使是一名优秀的博士生也很难完全从头重复文献中结果,也使用开源程序将大大节约时间

3.2 迁移学习

从头训练一个模型常常耗时又费力,然而使用别人训练好的模型的权重作为你初始模型的权重,往往效果不错。
当你的训练集样本较少时,尤其应当考虑迁移学习。如下:
这里写图片描述
当训练集样本较大时,可以考虑只冻结前面若干层。如下:
这里写图片描述
当训练集样本足够多时,可以考虑重新训练所有的权重,只是将初始权重设置为已有模型的权重。如下:
这里写图片描述

3.3 Data Augmentation

当训练集样本不够时,可以通过对已有图片进行变形来增加训练集样本量。

  • Common augmentation method
    这里写图片描述

Color shifting
这里写图片描述

3.4 State of Compute Vision
  • Data vs. hand-engineering
    当样本量足够多,可以只使用简单的算法,并且不需过多的手工处理特征;当样本量较少时,往往需要更多地手工处理特征。
    吴老师认为相对于机器视觉任务的复杂度,现有的数量量还远远不够,因此对于大多数图像识别任务,仍然需要较多的hand-engineering.
    这里写图片描述

  • Use open source code
    这里写图片描述

注:如无特殊说明,以上所有图片均截选自吴恩达在Coursera开设的神经网络系列课程的讲义。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值