吴恩达 deeplearning.ai课程-卷积神经网络 (2)深度卷积模型-实例探究

参考来源:

https://blog.csdn.net/red_stone1/article/details/78769236

https://blog.csdn.net/koala_tree/article/details/78531398

有关CNN典型架构的发展:

https://blog.csdn.net/kangroger/article/details/56522132#googlenet

https://blog.csdn.net/darkprince120/article/details/53024714

https://blog.csdn.net/qianqing13579/article/details/71076261

讲述了CNN的几种典型架构,并给出了网络训练的学习方案。(下图为参考博客qianqing13579

吴恩达 deeplearning.ai课程-卷积神经网络 (2)深度卷积模型-实例探究_第1张图片

1. Why look at case studies

典型的CNN模型包括:

  • LeNet-5

  • AlexNet

  • VGG

除了这些性能良好的CNN模型之外,我们还会介绍Residual Network(ResNet)。其特点是可以构建很深很深的神经网络(目前最深的好像有152层)。

另外,还会介绍Inception Neural Network。接下来,我们将一一讲解。

2. Classic Networks

LeNet-5模型
吴恩达 deeplearning.ai课程-卷积神经网络 (2)深度卷积模型-实例探究_第2张图片

吴恩达 deeplearning.ai课程-卷积神经网络 (2)深度卷积模型-实例探究_第3张图片

(1)LeNet-5主要针对灰度图像设计,所以其输入较小,为32*32*1

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

(3)在LetNet中存在的经典模式:

  • 随着网络深度增加,图像的大小(nH,nW)在缩小,而通道的数量(nC)却在增加;
  • 通常一个或多个卷积层后面接一个池化层;
AlexNet模型

由Alex Krizhevsky、Ilya Sutskever和Geoffrey Hinton共同提出,直接对彩色的大图片进行处理,其结构如下所示:

吴恩达 deeplearning.ai课程-卷积神经网络 (2)深度卷积模型-实例探究_第4张图片

AlexNet中存在的经典模式:

  • 与LeNet-5模型相似,但AlexNet网络结构更大,参数更多(共包含了约6千万个参数),表现更加出色;
  • 使用了Relu激活函数;
  • 使用了多个GPUs平行处理;
  • 优化技巧:局部响应归一化层-Local Response Normalization(LRN)(实际应用中,LRN的效果并不突出丢弃)
VGG-16模型

VGG-16模型包含16个conv与pool层,专注于构建卷积层,没有大量的超参数。

一般情况下,其CONV layer和POOL layer设置如下:

  • CONV = 3x3 filters, s = 1, same

  • MAX-POOL = 2x2, s = 2

结构如下所示:

吴恩达 deeplearning.ai课程-卷积神经网络 (2)深度卷积模型-实例探究_第5张图片

优点:简化了神经网络结构,使网络结构更加规整;

缺点:需要训练的特征数量大,(VGG-16的参数多达1亿3千万);

特点:每一步过滤器的数量都翻倍,可以明显看到随网络深度增加,图像缩小与信道数量的增加。

3. ResNets

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

Residual Networks由许多隔层相连的神经元子模块组成,称之为Residual block。

Residual block

吴恩达 deeplearning.ai课程-卷积神经网络 (2)深度卷积模型-实例探究_第6张图片

上图中红色部分就是skip connection“short cut”而ResNet块将信息流的传播过程增加了一个a[l]直接到z[l+2]的连接。

a[l]直接隔层与下一层的线性输出后,非线性Relu激活函数前相连,与z[l+2]共同通过激活函数(ReLU)输出a[l+2]

吴恩达 deeplearning.ai课程-卷积神经网络 (2)深度卷积模型-实例探究_第7张图片

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

吴恩达 deeplearning.ai课程-卷积神经网络 (2)深度卷积模型-实例探究_第8张图片

Residual Network

该模型由Kaiming He, Xiangyu Zhang, Shaoqing Ren和Jian Sun共同提出。由多个Residual block组成的神经网络就是Residual Network。实验表明这种模型结构对于训练非常深的神经网络效果很好。另外为便于区分,我们把非Residual Networks称为Plain Network。


Residual Network的结构

从下面两张图的对比中可以看出:

  • 随着神经网络层数增加,Plain Network实际性能会变差,training error甚至会变大。
  • 与Plain Network相比,Residual Network能够训练更深层的神经网络,有助于解决梯度消失和梯度爆炸问题
  • Residual Network保证了网络的良好性能,即使网络再深,训练误差都会随着网络层数的加深一直呈下降趋势。

吴恩达 deeplearning.ai课程-卷积神经网络 (2)深度卷积模型-实例探究_第9张图片

4.ResNet表现好的原因

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


吴恩达 deeplearning.ai课程-卷积神经网络 (2)深度卷积模型-实例探究_第10张图片

吴恩达 deeplearning.ai课程-卷积神经网络 (2)深度卷积模型-实例探究_第11张图片

吴恩达 deeplearning.ai课程-卷积神经网络 (2)深度卷积模型-实例探究_第12张图片

下图所示的是CNN中ResNets的结构:

吴恩达 deeplearning.ai课程-卷积神经网络 (2)深度卷积模型-实例探究_第13张图片

残差网络作用:残差块学习恒等函数非常容易,能确定网络性能不会影响,甚至可以提高效率。

5. Networks in Networks and 1x1 Convolutions

Min Lin, Qiang Chen等人提出了一种新的CNN结构,即1x1 Convolutions,也称Networks in Networks。这种结构的特点是滤波器算子filter的维度为1x1。对于单个filter,1x1的维度,意味着卷积操作等同于乘积操作。

吴恩达 deeplearning.ai课程-卷积神经网络 (2)深度卷积模型-实例探究_第14张图片

那么,对于多个filters,1x1 Convolutions的作用实际上类似全连接层的神经网络结构。效果等同于Plain Network中到的过程。这点还是比较好理解的。

吴恩达 deeplearning.ai课程-卷积神经网络 (2)深度卷积模型-实例探究_第15张图片

1*1卷积:遍历36个单元格,计算左图32个数字与过滤器32个元素的乘积,然后用RELU非线性函数。用36个数字乘以输入层上1*1切片,得到一个输出。32个单元格都应用了一个全连接网络,全连接的作用是输入32个单元与过滤器数量,在36个单元上重复。

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

注:立体三维过滤器一次卷积输出的是一张二维图片,故有多少个过滤器就有多少个输出通道。

吴恩达 deeplearning.ai课程-卷积神经网络 (2)深度卷积模型-实例探究_第16张图片

使用32个filter,每个filter尺寸1*1*192,结果使信道数量压缩。

1*1的卷积核得到一个相同长宽但第三维度变成卷积核个数的图片。

1x1卷积应用:

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

6. Inception Network Motivation

之前我们介绍的CNN单层的滤波算子filter尺寸是固定的,1x1或者3x3等。而Inception Network在单层网络上可以使用多个不同尺寸的filters,进行same convolutions,把各filter下得到的输出拼接起来。除此之外,还可以将CONV layer与POOL layer混合,同时实现各种效果。但是要注意使用same pool。

吴恩达 deeplearning.ai课程-卷积神经网络 (2)深度卷积模型-实例探究_第17张图片

Inception Network由Christian Szegedy, Wei Liu等人提出。与其它只选择单一尺寸和功能的filter不同,Inception Network使用不同尺寸的filters并将CONV和POOL混合起来,将所有功能输出组合拼接,再由神经网络本身去学习参数并选择最好的模块。

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

吴恩达 deeplearning.ai课程-卷积神经网络 (2)深度卷积模型-实例探究_第18张图片

此CONV layer需要的计算量为:28x28x32x5x5x192=120M,其中m表示百万单位。可以看出但这一层的计算量都是很大的。为此,我们可以引入1x1 Convolutions来减少其计算量,结构如下图所示:

注:计算量的公式=输出值的个数*每个数字需执行的乘法运算;

      输出:28*28*32;

      每个输出值执行的乘积运算:5*5*192;

吴恩达 deeplearning.ai课程-卷积神经网络 (2)深度卷积模型-实例探究_第19张图片

通常我们把该1x1 Convolution称为“瓶颈层”(bottleneck layer)。引入bottleneck layer之后,总共需要的计算量为:28x28x16x192+28x28x32x5x5x16=12.4m。明显地,虽然多引入了1x1 Convolution层,但是总共的计算量减少了近90%,效果还是非常明显的。由此可见,1x1 Convolutions还可以有效减少CONV layer的计算量。

1×11×1卷积核作为bottleneck layer”的过渡层能够有效减小卷积神经网的计算成本事实证明,只要合理地设置“bottleneck layer”,既可以显著减小上层的规模,同时又能降低计算成本,从而不会影响网络的性能。

7.Inception Network

上一节我们使用1x1 Convolution来减少Inception Network计算量大的问题。引入1x1 Convolution后的Inception module如下图所示:

吴恩达 deeplearning.ai课程-卷积神经网络 (2)深度卷积模型-实例探究_第20张图片

多个Inception modules组成Inception Network,效果如下图所示:

吴恩达 deeplearning.ai课程-卷积神经网络 (2)深度卷积模型-实例探究_第21张图片

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

inception network作用:代替人工确定卷积层中的滤波器类型,或确定是否需要创建卷积层或池化层。由网络自行确定这些参数,可以给网络添加这些参数的所有可能值,然后把这些输出连接起来,让网络自己学习需要什么参数,采用哪些过滤器组合。

8. Using Open-Source Implementation

本节主要介绍GitHub的使用,GitHub是一个面向开源及私有软件项目的托管平台,上面包含有许多优秀的CNN开源项目。关于GitHub具体内容不再介绍,有兴趣的小伙伴自行查阅。

选择一个喜欢的架构,寻找其开源实现(github),并使用网络进行迁移学习。

9. Transfer Learning

小数据集:

如今在深度学习领域,许多研究者都会将他们的工作共享到网络上。在我们实施自己的工作的时候,比如说做某种物体的识别分类,但是只有少量的数据集,对于从头开始训练一个深度网络结构是远远不够的。

但是我们可以应用迁移学习,应用其他研究者建立的模型和参数,用少量的数据仅训练最后自定义的softmax网络。从而能够在小数据集上达到很好的效果。

技巧:

  • 训练softmax的有关权重参数,其余的权重冻结;
  • 将前面的层冻结(freeze),相当于一个固定函数,不需要改变,不需要训练。
吴恩达 deeplearning.ai课程-卷积神经网络 (2)深度卷积模型-实例探究_第22张图片

大数据集:

如果我们在自己的问题上也拥有大量的数据集,我们可以多训练后面的几层。总之随着数据集的增加,我们需要“ freeze”的越来越少。最后如果我们有十分庞大的数据集,那么我们可以训练网络模型的所有参数,将其他研究者训练的模型参数作为参数的初始化来替代随机初始化,来加速我们模型的训练。

吴恩达 deeplearning.ai课程-卷积神经网络 (2)深度卷积模型-实例探究_第23张图片
取输入图像x,然后把它映射到这层的激活函数,能加速训练的技巧。如果先计算这一层的特征或激活值,然后把他们存到硬盘中,用这个固定函数可计算X的某个特征向量,这样训练的就是一个很浅的softmax模型。用这个特征向量做预测。
预计算的优点:提前计算训练集所有样本的激活值,在此之上训练softmax分类器,存储到硬盘。不需每次遍历训练集,再重新计算激活值。

总体来说,迁移学习的应用场合主要包括三点:

  • 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

10. Data Augmentation

数据扩充的方法:

  • 镜像翻转(Mirroring);
  • 随机剪裁(Random Cropping);
  • 旋转(rotation);
  • 剪切(shearing);
  • 局部弯曲(local warping);
  • 色彩转换(Color shifting): 
    为图片的RGB三个色彩通道进行增减值,如(R:+20,G:-20,B:+20);PCA颜色增强:对图片的主色的变化较大,图片的次色变化较小,使总体的颜色保持一致。

常用的Data Augmentation方法是对已有的样本集进行Mirroring和Random Cropping。

吴恩达 deeplearning.ai课程-卷积神经网络 (2)深度卷积模型-实例探究_第24张图片

另一种Data Augmentation的方法是color shifting。color shifting就是对图片的RGB通道数值进行随意增加或者减少,改变图片色调。

吴恩达 deeplearning.ai课程-卷积神经网络 (2)深度卷积模型-实例探究_第25张图片

除了随意改变RGB通道数值外,还可以更有针对性地对图片的RGB通道进行PCA color augmentation,也就是对图片颜色进行主成分分析,对主要的通道颜色进行增加或减少,可以采用高斯扰动做法。这样也能增加有效的样本数量。具体的PCA color augmentation做法可以查阅AlexNet的相关论文。

最后提一下,在构建大型神经网络的时候,data augmentation和training可以由两个不同的线程来进行。

11. State of Computer Vision计算机视觉现状

计算机视觉是在试图学习一个非常复杂的功能,经常没有足够的数据来做更大的data满足我们的需要,所以计算机视觉更多的依赖于手工工程,这也是计算机相当复杂的网络架构的原因,因为在缺乏更多的数据情况下,获得良好的表现方式还是花更多的时间进行架构设计。


在有大量数据的时候,我们更倾向于使用简单的算法和更少的手工工程。因为此时有大量的数据,我们不需要为这个问题来精心设计特征,我们使用一个大的网络结果或者更简单的模型就能够解决。

相反,在有少量数据的时候,我们从事更多的是手工工程。因为数据量太少,较大的网络结构或者模型很难从这些少量的数据中获取足够的特征,而手工工程实际上是获得良好表现的最佳方式。

值得一提的是hand-engineering是一项非常重要也比较困难的工作。很多时候,hand-engineering对模型训练效果影响很大,特别是在数据量不多的情况下,这就需要用到transfer learning。

hand-engineering source of knowledge:

  • labeled data(标记数据)x,y;
  • hand engineered features/network architecture/ other components;

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

  • 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.

  • 将数据扩展应用到测试图像的形式

这里写图片描述

但是由于这两种方法计算成本较大,一般不适用于实际项目开发。

要灵活使用开源代码:

  • Use archittectures of networks published in the literature

  • Use open source implementations if possible(学习速率衰减、超参数)

  • Use pretrained models and fine-tune on your dataset(预先训练模型,微调)


你可能感兴趣的:(深度学习-吴恩达课程笔记)