文章目录

  • 1.经典的CNN
  • LeNet-5:
  • AlexNet
  • VGG-16
  • 2.ResNets
  • Residual block残差块
  • Residual Network残差网络
  • 3.ResNet表现好的原因
  • 4. 1x1卷积
  • 1x1卷积
  • 1x1卷积应用
  • 5. Inception Network
  • Inception Network Motivation
  • Inception Network的计算成本问题
  • Inception Network
  • 6.迁移学习
  • 7.数据扩充
  • 8. 计算机视觉现状


1.经典的CNN

LeNet、AlexNet、VGGNet是三种非常经典的神经网络模型

LeNet-5:

它是第一个成功应用于数字识别问题的卷积神经网络。
LeNet-5主要是针对灰色图像设计的,所以其输入较小。

典型的LeNet-5结构包含CONV layer,POOL layer和FC layer,顺序一般是CONV layer->POOL layer->CONV layer->POOL layer->FC layer->FC layer->OUTPUT layer

吴恩达 深度学习 资料 吴恩达deeplearning 笔记_Network


该LeNet模型总共包含了大约6万个参数。值得一提的是,当时Yann LeCun提出的LeNet-5模型池化层使用的是average pool,而且各层激活函数一般是Sigmoid和tanh。现在,我们可以根据需要,做出改进,使用max pool和激活函数ReLU。

在LetNet中,存在的经典模式:

  • 随着网络的深度增加,图像的大小在缩小,与此同时,通道的数量却在增加;
  • 每个卷积层后面接一个池化层。

AlexNet

AlexNet直接对彩色的大图片进行处理,其结构如下:

吴恩达 深度学习 资料 吴恩达deeplearning 笔记_吴恩达 深度学习 资料_02

AlexNet特性:

  • 与LeNet相似,但网络结构更大,参数更多,大约6千万个参数,表现更加出色;
  • 使用了Relu;
  • 使用了多个GPUs;
  • LRN(后来发现用处不大,丢弃了)

VGG-16

VGG-16模型更加复杂一些,一般情况下,其CONV layer和POOL layer设置如下:

  • CONV = 3 x 3 filters, s = 1, same
  • MAX-POOL = 2 x 2, s = 2

结构如图所示:

吴恩达 深度学习 资料 吴恩达deeplearning 笔记_Network_03


VGG-16的参数多达1亿3千万。

2.ResNets

我们知道,如果神经网络层数越多,网络越深,源于梯度消失(Vanishing)和梯度爆炸( exploding)的影响,整个模型难以训练成功。
解决的方法之一是人为地让神经网络某些层跳过下一层神经元的连接,隔层相连,弱化每层之间的强联系。
这种神经网络被称为Residual Networks(ResNets)。

ResNet是由残差块所构建。

Residual block残差块

下面是一个普通的神经网络块的传输:

吴恩达 深度学习 资料 吴恩达deeplearning 笔记_吴恩达 深度学习 资料_04


其前向传播的计算步骤为:

  • Linear : 吴恩达 深度学习 资料 吴恩达deeplearning 笔记_卷积_05
  • Relu : 吴恩达 深度学习 资料 吴恩达deeplearning 笔记_Network_06
  • Linear : 吴恩达 深度学习 资料 吴恩达deeplearning 笔记_Network_07
  • Relu : 吴恩达 深度学习 资料 吴恩达deeplearning 笔记_吴恩达 深度学习 资料_08

而ResNet块则将其传播过程增加了一个从 吴恩达 深度学习 资料 吴恩达deeplearning 笔记_Network_09 直接到 吴恩达 深度学习 资料 吴恩达deeplearning 笔记_Network_10 的连接,将其称之为“short cut”或者“skip connection”:

吴恩达 深度学习 资料 吴恩达deeplearning 笔记_吴恩达 深度学习 资料_11


也就是前向传播公式的最后一个步骤变为:吴恩达 深度学习 资料 吴恩达deeplearning 笔记_吴恩达 深度学习 资料_12增加“short cut”或者“skip connection”后,成为Residual blockh的网络结构如图所示:

吴恩达 深度学习 资料 吴恩达deeplearning 笔记_Network_13


这里是连接在Relu激活函数之前,吴恩达 深度学习 资料 吴恩达deeplearning 笔记_Network_09 直接隔层与下一层的线性输出相连,与吴恩达 深度学习 资料 吴恩达deeplearning 笔记_Network_10 共同通过激活函数ReLU输出吴恩达 深度学习 资料 吴恩达deeplearning 笔记_吴恩达 深度学习 资料_16

Residual Network残差网络

由多个Residual block组成的神经网络就是Residual Network,结构如图所示:

吴恩达 深度学习 资料 吴恩达deeplearning 笔记_吴恩达 深度学习 资料_17


实验表明,这种模型结构对于训练非常深的神经网络,效果很好。另外,为了便于区分,我们把非Residual Networks称为Plain Network。与Plain Network相比,Residual Network能够训练更深层的神经网络,有效避免发生发生梯度消失和梯度爆炸。

没有“short cut”的普通神经网络和ResNet的误差曲线:

吴恩达 深度学习 资料 吴恩达deeplearning 笔记_神经网络_18

从对比中可以看出,随着神经网络层数增加,Plain Network实际性能会变差,training error甚至会变大;

然而,Residual Network的训练效果却很好,training error一直呈下降趋势。

3.ResNet表现好的原因

下面用个例子来解释为什么ResNets能够训练更深层的神经网络。

吴恩达 深度学习 资料 吴恩达deeplearning 笔记_卷积_19


如上图所示,输入x2经过很多层神经网络后输出 吴恩达 深度学习 资料 吴恩达deeplearning 笔记_Network_09吴恩达 深度学习 资料 吴恩达deeplearning 笔记_Network_09 经过一个Residual block输出 吴恩达 深度学习 资料 吴恩达deeplearning 笔记_吴恩达 深度学习 资料_16

吴恩达 深度学习 资料 吴恩达deeplearning 笔记_吴恩达 深度学习 资料_16 的表达式为:

吴恩达 深度学习 资料 吴恩达deeplearning 笔记_Network_24

如果使用L2正则化或者权重衰减,会压缩W和b的值,若吴恩达 深度学习 资料 吴恩达deeplearning 笔记_Network_25吴恩达 深度学习 资料 吴恩达deeplearning 笔记_卷积_26 同时为 0 , 那么上式就变成:

吴恩达 深度学习 资料 吴恩达deeplearning 笔记_神经网络_27

可以看出,即使发生了梯度消失,也能直接建立吴恩达 深度学习 资料 吴恩达deeplearning 笔记_Network_09吴恩达 深度学习 资料 吴恩达deeplearning 笔记_吴恩达 深度学习 资料_16的线性关系,且吴恩达 深度学习 资料 吴恩达deeplearning 笔记_Network_30,这就是identity function。所以从上面的结果我们可以看出,对于残差块来学习上面这个恒等函数是很容易的。所以在增加了残差块后更深的网络的性能也并不逊色于没有增加残差块简单的网络。所以尽管增加了网络的深度,但是并不会影响网络的性能。同时如果增加的网络结构能够学习到一些有用的信息,那么就会提升网络的性能。

由于吴恩达 深度学习 资料 吴恩达deeplearning 笔记_Network_09吴恩达 深度学习 资料 吴恩达deeplearning 笔记_吴恩达 深度学习 资料_16的维度不同,ResNet在设计中使用了很多相同的卷积,使得它们维度相同。

CNN中ResNets的结构:

吴恩达 深度学习 资料 吴恩达deeplearning 笔记_卷积_33

4. 1x1卷积

1x1卷积

  • 1x1 Convolutions,也称Networks in Networks是一种新的CNN结构。这种结构的特点是filter的维度为1x1。对于单个filter,1x1的维度,意味着卷积操作等同于乘积操作。
  • 在二维上的卷积相当于图片的每个元素和一个卷积核数字相乘。
  • 但是在三维上,与 1×1×nC 卷积核进行卷积,相当于三维图像上的 1×1×nC 的切片,也就是 nC 个点乘以卷积数值权重,通过Relu函数后,输出对应的结果。而不同的卷积核则相当于不同的隐层神经元结点与切片上的点进行一一连接。

所以 1×1 卷积核相当于对一个切片上的 nC 个单元都应用了一个全连接的神经网络。

吴恩达 深度学习 资料 吴恩达deeplearning 笔记_卷积_34


最终三维的图形应用 1×1 卷积得到一个相同长宽但第三维度变为filter个数的图片。

1x1卷积应用

  • 维度压缩:使用目标维度的1×1的卷积核个数。
  • 增加非线性:保持与原维度相同的1×1的卷积核个数。

1x1 Convolutions用来缩减输入图片的通道数目方法如下:

吴恩达 深度学习 资料 吴恩达deeplearning 笔记_吴恩达 深度学习 资料_35

5. Inception Network

Inception Network Motivation

Inception Network 的作用就是使我们无需去考虑在构建深度卷积神经网络时,使用多大的卷积核以及是否添加池化层等问题。Inception Network在单层网络上可以使用多个不同尺寸的filters,进行same convolutions,把各filter下得到的输出拼接起来。
除此之外,还可以将CONV layer与POOL layer混合,同时实现各种效果。但是要注意使用same pool。

Inception结构:

吴恩达 深度学习 资料 吴恩达deeplearning 笔记_卷积_36


Inception Network使用不同尺寸的filters并将CONV和POOL混合起来,将所有功能输出组合拼接,再由神经网络本身去学习参数并选择最好的模块。

在上面的Inception结构中,应用了不同的卷积核,以及带padding的池化层。在保持输入图片大小不变(因为使用的是same 卷积)的情况下,通过不同运算结果的叠加,增加了通道的数量。

Inception Network的计算成本问题

Inception Network在提升性能的同时,会带来计算量大的问题。例如下面这个例子:

吴恩达 深度学习 资料 吴恩达deeplearning 笔记_Network_37


此CONV layer需要的计算成本为:

  • 5x5卷积层计算成本 :5 x 5 x 192
  • same层计算成本: 28 x 28 x 32
  • 总的计算成本:28 x 28 x 32 x 5 x 5 x 192=120M

可以看出CONV这一层的计算量是很大的。

为此,我们可以引入1x1 Convolutions来减少其计算量,结构如下图所示:

吴恩达 深度学习 资料 吴恩达deeplearning 笔记_神经网络_38


通常我们把该1x1 Convolution称为“瓶颈层”(bottleneck layer)。引入bottleneck layer之后,总共需要的计算量为:

  • 1x1 卷积层计算成本:28 x 28 x 16 x 1 x 1 x 192 = 2.4M
  • 5x5卷积层计算成本:28 x 28 x 32 x 5 x 5 x 16=10.4M
  • 总的计算成本:2.4M + 10.0M = 12.4M

明显地,虽然多引入了 1x1 卷积层,但是总共的计算量减少了近90%,效果还是非常明显的。
由此可见,1x1 卷积层还可以有效减少CONV layer的计算量。

只要合理地设置“bottleneck layer”,既可以显著减小上层的规模,同时又能降低计算成本,从而不会影响网络的性能。

Inception Network

前面使用1x1 Convolution来减少Inception Network计算量大的问题。

引入1x1 Convolution后的Inception module如下图所示:

吴恩达 深度学习 资料 吴恩达deeplearning 笔记_神经网络_39


Inception Network:多个Inception 模块的堆叠构成Inception Network,下面是GoogleNet的结构:

吴恩达 深度学习 资料 吴恩达deeplearning 笔记_吴恩达 深度学习 资料_40


上述Inception Network除了由许多Inception modules组成之外,值得一提的是网络中间隐藏层也可以作为输出层Softmax,有利于防止发生过拟合。

6.迁移学习

什么是迁移学习?

  • 迁移学习是一种技术,在该技术中,可以使用在某个任务上训练的模型基于其学习(权重)对另一个任务进行预测。

为什么使用迁移学习?

  • 无需从一开始就训练模型,而是可以通过下载已训练的神经网络的权重来实现更快的进度。

迁移学习的应用场合主要包括三点:

  • Task A and B have the same input x.
  • You have a lot more data for Task A than Task B.
  • Low level features from A could be helpful for learning B

对于小数据集

  • 只有少量的数据集,对于从头开始训练一个深度网络结构是远远不够的。但是我们可以应用迁移学习,应用其他研究者建立的模型和参数,用少量的数据仅训练最后自定义的softmax网络。从而能够在小数据集上达到很好的效果。

对于大数据集

  • 随着数据集的增加,我们需要“ freeze”的层数越来越少。最后如果我们有十分庞大的数据集,那么我们可以训练网络模型的所有参数,将其他研究者训练的模型参数作为参数的初始化来替代随机初始化,来加速我们模型的训练。

7.数据扩充

与其他机器学习问题相比,在计算机视觉领域当下最主要的问题是没有办法得到充足的数据。所以在我们训练计算机数据模型的时候,数据的扩充就是会非常有用。

常用的数据扩充方法:

  • 镜像翻转(Mirroring)
  • 随机剪裁(Random Cropping)
  • 色彩转换(Color shifting)

8. 计算机视觉现状

神经网络需要数据,不同的网络模型所需的数据量是不同的。Object dection,Image recognition,Speech recognition所需的数据量依次增加。

一般来说,如果data较少,那么就需要更多的hand-engineering,对已有data进行处理,比如上一节介绍的data augmentation。模型算法也会相对要复杂一些。如果data很多,可以构建深层神经网络,不需要太多的hand-engineering,模型算法也就相对简单一些。

吴恩达 深度学习 资料 吴恩达deeplearning 笔记_Network_41


在模型研究或者竞赛方面,有一些方法能够有助于提升神经网络模型的性能:

Ensembling: Train several networks independently and average their outputs.

Multi-crop at test time: Run classifier on multiple versions of test images and average results.