吴恩达.深度学习系列-C4卷积神经网络-W2深度卷积模型案例


(本笔记部分内容直接引用redstone的笔记http://redstonewill.com/1240/。原文整理的非常好,引入并添加我自己的理解。省了不少事儿啊。)

  • 吴恩达.深度学习系列-C4卷积神经网络-W2深度卷积模型案例

    • 学习目标
    • 1.为何关注经典案例
    • 2.经典网络模型
    • 3.ResNets
    • 4.ResNets工作原理
    • 5.1×1卷积,Networks in Networks
    • 6.设计Inception网络的动机
    • 7.Inception Network
    • 8.Using Open-Source Implementation
    • 9.Transfer Learning
    • 10.Data Augmentation
    • 11.State of Computer Vision
    • 12.练习题
    • 13.编程题
      • 13.1.Keras-Tutorial-HappyHouse

学习目标

  • Understand multiple foundational papers of convolutional neural networks
  • Analyze the dimensionality reduction of a volume in a very deep network
  • Understand and Implement a Residual network
    Build a deep neural network using Keras
  • Implement a skip-connection in your network
  • Clone a repository from github and use transfer learning

1.为何关注经典案例

  • LeNet-5
  • AlexNet
  • VGG
  • ResNet (152 layers)
    以上被认为是现代计算机视觉的基石。阅读经典对理论实践都十分有意义。

2.经典网络模型

LeNet-5
LeNet-5模型是Yann LeCun教授于1998年提出来的,它是第一个成功应用于数字识别问题的卷积神经网络,并商业应用于全美邮政系统的邮政编码识别。
在MNIST数据中,它的准确率达到大约99.2%。典型的LeNet-5结构包含CONV layer,POOL layer和FC layer,顺序一般是CONV layer->POOL layer->CONV layer->POOL layer->FC layer->FC layer->OUTPUT layer,即y^y^\hat y。下图所示的是一个数字识别的LeNet-5的模型结构:

该LeNet模型总共包含了大约6万个参数。而现在在网络经常有上亿的参数。值得一提的是,当时Yann LeCun提出的LeNet-5模型池化层使用的是average pool,而且各层激活函数一般是Sigmoid和tanh。现在,我们可以根据需要,做出改进,使用max pool、激活函数ReLU、padding=“same”、softmax等后来出现的技术。
paper:Yann LeCun——Gradient-Based Learning Applied to Document Recognition
因为时间久远,论文涉及很多过去的技术,可能阅读起来比较难懂。可能关注论文第二,第三部分更简单些。

AlexNet
AlexNet模型是由Alex Krizhevsky、Ilya Sutskever和Geoffrey Hinton共同提出的,让整个计算机视觉社区开始认识到深度学习的成功。其结构如下所示:

AlexNet模型与LeNet-5模型类似,只是要复杂一些,总共包含了大约6千万个参数。AlexNet已经开始使用激活函数ReLU。原作者还提到了一种优化技巧,叫做Local Response Normalization(LRN)。 而在实际应用中,LRN的效果并不突出。

paper:Krizhevsky2012 ImageNet Classification with Deep Convolutional Neural
论文描述的方法为了将运算分担到多个gpu上,阐述比较复杂,现在基本无需这样。

VGG-16
VGG-16模型更加复杂一些,一般情况下,其CONV layer和POOL layer设置如下:
- CONV = 3×3 filters, s = 1, same
- MAX-POOL = 2×2, s = 2

VGG-16结构如下所示:

VGG-16的参数多达1亿3千万。网络在每次卷积时都对filter翻倍,而在池化时都将图像大小缩小1/4,这个规则保留至今。由于VGG-Nets具备良好的泛化性能,其在Imagenet 数据集上的预训练模型(pre-trained model)被广泛应用于除最常用
的特征抽取(feature extractor)外的诸多问题:如物体候选框(object proposal)生成、细粒度图像定位与检索(fine-grained object localization and image retrieval)、图像协同定位(co-localization) 等。

paper:Very deep convolutional networks for large-scale image recognition

3.ResNets

问题提出
理论和实验已经表明,神经网络的深度(depth)和宽度(width)是表征网络复杂度的两个核心因素,不过深度相比宽度在增加网络的复杂性方面更加有效,这也正是为何VGG网络想方设法增加网络深度的一个原因。

然而,随着深度的增加,训练会变得愈加困难。这主要因为在基于随机梯度下降的网络训练过程中,误差信号的多层反向传播非常容易引发梯度“弥散”(梯度过小会使回传的训练误差极其微弱)或者“爆炸”(梯度过大会导致模型训练出现“NaN”)现象。目前,一些特殊的权重初始化策略以及批规范化(batch normalization)策略等方法使这个问题得到极大的改善——网络可以正常训练了!但是,实际情形仍不容乐观。

当深度网络收敛时,另外的问题又随之而来:随着继续增加网络的深度,训练数据的训练误差没有降低反而升高。这一观察与直觉极其不符,因为如果一个浅层神经网络可以被训练优化求解到某一个很好的解,那么它对应的深层网络至少也可以,而不是更差。这一现象在一段时间内困扰着更深层卷积神经网络的设计、训练和应用。

解决的方法之一是人为地让神经网络某些层跳过下一层神经元的连接,隔层相连,弱化每层之间的强联系。这种神经网络被称为Residual Networks(ResNets)。

Residual Networks由许多隔层相连的神经元子模块组成,我们称之为Residual block。单个Residual block的结构如下图所示:

上图中红色部分就是skip connection,直接建立a[l]a[l]a[l] 与 a[l+2]a[l+2]a[l+2]之间的隔层联系。相应的表达式如下:
z[l+1]=W[l+1]a[l]+b[l+1]z[l+1]=W[l+1]a[l]+b[l+1]z^{[l+1]}=W^{[l+1]}a^{[l]}+b^{[l+1]}
a[l+1]=g(z[l+1])a[l+1]=g(z[l+1])a^{[l+1]}=g(z^{[l+1]})
z[l+2]=W[l+2]a[l+1]+b[l+2]z[l+2]=W[l+2]a[l+1]+b[l+2]z^{[l+2]}=W^{[l+2]}a^{[l+1]}+b^{[l+2]}
a[l+2]=g(z[l+2]+a[l])a[l+2]=g(z[l+2]+a[l])a^{[l+2]}=g(z^{[l+2]}+a^{[l]})

a[l]a[l]a^{[l]}直接隔层与下一层的线性输出相连,与z[l+2]z[l+2]z^{[l+2]}共同通过激活函数(ReLU)输出a[l+2]a[l+2]a^{[l+2]}。
该模型由Kaiming He, Xiangyu Zhang, Shaoqing Ren和Jian Sun共同提出。由多个Residual block组成的神经网络就是Residual Network。实验表明,这种模型结构对于训练非常深的神经网络,效果很好。另外,为了便于区分,我们把非Residual Networks称为Plain Network。

Residual Network的结构如上图所示。
与Plain Network相比,Residual Network能够训练更深层的神经网络,有效避免发生发生梯度消失和梯度爆炸。从下面两张图的对比中可以看出,随着神经网络层数增加,Plain Network实际性能会变差,training error甚至会变大。然而,Residual Network的训练效果却很好,training error一直呈下降趋势。

4.ResNets工作原理

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

如上图所示,输入x经过很多层神经网络后输出a[l]a[l]a^{[l]},a[l]a[l]a^{[l]}经过一个Residual block输出a[l+2]a[l+2]a^{[l+2]}。a[l+2]a[l+2]a^{[l+2]}的表达式为:
a[l+2]=g(z[l+2]+a[l])=g(W[l+2]a[l+1]+b[l+2]+a[l])a[l+2]=g(z[l+2]+a[l])=g(W[l+2]a[l+1]+b[l+2]+a[l])a^{[l+2]}=g(z^{[l+2]}+a^{[l]})=g(W^{[l+2]}a^{[l+1]}+b^{[l+2]}+a^{[l]})

输入x经过Big NN后,若W[l+2]≈0,b[l+2]≈0W[l+2]≈0,b[l+2]≈0W^{[l+2]}≈0,b^{[l+2]}≈0,则有:
a[l+2]=g(a[l])=ReLU(a[l])=a[l]    when a[l]≥0a[l+2]=g(a[l])=ReLU(a[l])=a[l]whena[l]≥0a^{[l+2]}=g(a^{[l]})=ReLU(a^{[l]})=a^{[l]}\ \ \ \ when\ a^{[l]}≥0

可以看出,即使发生了梯度消失,W[l+2]≈0,b[l+2]≈0W[l+2]≈0,b[l+2]≈0W^{[l+2]}≈0,b^{[l+2]}≈0,也能直接建立a[l+2]a[l+2]a^{[l+2]}与a[l]a[l]a^{[l]}的线性关系,且a[l+2]=a[l]a[l+2]=a[l]a^{[l+2]}=a^{[l]},这其实就是identity function。

a[l]a[l]a^{[l]}直接连到a[l+2]a[l+2]a^{[l+2]},从效果来说,相当于直接忽略了a[l]a[l]a^{[l]}之后的这两层神经层。这样,看似很深的神经网络,其实由于许多Residual blocks的存在,弱化削减了某些神经层之间的联系,实现隔层线性传递,而不是一味追求非线性关系,模型本身也就能“容忍”更深层的神经网络了。而且从性能上来说,这两层额外的Residual blocks也不会降低Big NN的性能。
当然,如果Residual blocks确实能训练得到非线性关系,那么也会忽略short cut,跟Plain Network起到同样的效果。
有一点需要注意的是,如果Residual blocks中a[l]a[l]a^{[l]}和a[l+2]a[l+2]a^{[l+2]}的维度不同,通常可以引入矩阵WsWsW_s,与a[l]a[l]a^{[l]}相乘,使得]Ws∗a[l]]Ws∗a[l]]W_s*a^{[l]}的维度与a[l+2]a[l+2]a^{[l+2]}一致。参数矩阵WsWsW_s有来两种方法得到:一种是将WsWsW_s作为学习参数,通过模型训练得到;另一种是固定WsWsW_s值(类似单位矩阵),不需要训练,WsWsW_s与a[l]a[l]a^{[l]}的乘积仅仅使得a[l]a[l]a^{[l]}截断或者补零。这两种方法都可行。

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

ResNets同类型层之间,例如CONV layers,大多使用same类型,保持维度相同。如果是不同类型层之间的连接,例如CONV layer与POOL layer之间,如果维度不同,则引入矩阵WsWsW_s。

paper:deep residual networks for image recognition​

5.1×1卷积,Networks in Networks

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

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

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

6.设计Inception网络的动机

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

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

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

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

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

7.Inception Network

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

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

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

8.Using Open-Source Implementation

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

9.Transfer Learning

有关Transfer Learning的相关内容,我们在 Coursera吴恩达《构建机器学习项目》课程笔记(2)– 机器学习策略(下)中已经详细介绍过,这里就不再赘述了。

10.Data Augmentation

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

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

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

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

11.State of Computer Vision

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

值得一提的是hand-engineering是一项非常重要也比较困难的工作。很多时候,hand-engineering对模型训练效果影响很大,特别是在数据量不多的情况下。
在模型研究或者竞赛方面,有一些方法能够有助于提升神经网络模型的性能:
- 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

12.练习题

Suppose you have an input volume of dimension 64x64x16. How many parameters would a single 1x1 convolutional filter have (including the bias)?
答:17。仔细想想一个3*3的convolution filter,参数是9+1=10。一层要有一个filter,一个filter有一个bias。1x1的filter对应16个通道,将有16个bias。

Which ones of the following statements on Residual Networks are true? (Check all that apply.)
【x】The skip-connections compute a complex non-linear function of the input to pass to a deeper layer in the network.
【x】A ResNet with L layers would have on the order of L2L2L^2 skip connections in total.
【√】Using a skip-connection helps the gradient to backpropagate and thus helps you to train deeper networks
【√】The skip-connection makes it easy for the network to learn an identity mapping between the input and the output within the ResNet block.

13.编程题

13.1.Keras-Tutorial-HappyHouse

What we would like you to remember from this assignment:
- Keras is a tool we recommend for rapid prototyping. It allows you to quickly try out different model architectures. Are there any applications of deep learning to your daily life that you’d like to implement using Keras?
- Remember how to code a model in Keras and the four steps leading to the evaluation of your model on the test set. Create->Compile->Fit/Train->Evaluate/Test.
Keras建模流程:Create->Compile->Fit/Train->Evaluate/Test

吴恩达.深度学习系列-C4卷积神经网络-W2深度卷积模型案例相关推荐

  1. 吴恩达deeplearning.ai系列课程笔记+编程作业(15)序列模型(Sequence Models)-第三周 序列模型和注意力机制

    第五门课 序列模型(Sequence Models) 第三周 序列模型和注意力机制(Sequence models & Attention mechanism) 文章目录 第五门课 序列模型( ...

  2. 吴恩达deeplearning.ai系列课程笔记+编程作业(14)序列模型(Sequence Models)-第二周 自然语言处理与词嵌入

    第五门课 序列模型(Sequence Models) 第二周 自然语言处理与词嵌入(Natural Language Processing and Word Embeddings) 文章目录 第五门课 ...

  3. 吴恩达deeplearning.ai系列课程笔记+编程作业(13)序列模型(Sequence Models)-第一周 循环序列模型(Recurrent Neural Networks)

    第五门课 序列模型(Sequence Models) 第一周 循环序列模型(Recurrent Neural Networks) 文章目录 第五门课 序列模型(Sequence Models) 第一周 ...

  4. 深度学习吴恩达老师(一):神经网络和深度学习(Neural Networks and Deep Learning):内容整理 + 习题分享

  5. 吴恩达deeplearning.ai系列课程笔记+编程作业(11)第四课 卷积神经网络-第二周 深度卷积网络:实例探究(Deep convolutional models: case studies)

    第四门课 卷积神经网络(Convolutional Neural Networks) 第二周 深度卷积网络:实例探究(Deep convolutional models: case studies) ...

  6. 吴恩达deeplearning.ai系列课程笔记+编程作业(6)第二课 改善深层神经网络-第二周:优化算法 (Optimization algorithms)

    第二门课 改善深层神经网络:超参数调试.正则化以及优化(Improving Deep Neural Networks:Hyperparameter tuning, Regularization and ...

  7. 吴恩达老师DeepLearning系列课程最详细学习笔记之4—为什么深度学习会兴起?

    教程是本人学习吴恩达老师DeepLearing系列课程中整理的最为详细的学习笔记.学习视频主要来自B站[双语字幕]吴恩达深度学习deeplearning.ai_哔哩哔哩_bilibili?,以及Dee ...

  8. 吴恩达老师DeepLearning系列课程最详细学习笔记之23—Jupyter Ipython笔记本的快速指南

    教程是本人学习吴恩达老师DeepLearing系列课程中整理的最为详细的学习笔记.学习视频主要来自B站[双语字幕]吴恩达深度学习deeplearning.ai_哔哩哔哩_bilibili?,以及Dee ...

  9. P3 吴恩达推荐笔记:22张图总结深度学习全部知识

    吴恩达推荐笔记:22张图总结深度学习全部知识 本文简要的解释了深度学习中的基本概念,包括监督学习.逻辑回归.正则化等等. 并且,在了解了一些基本概念后,本文还对目标检测.人脸识别.自然语言处理进行了简 ...

最新文章

  1. 如何定制一款12306抢票浏览器——完结篇
  2. 模4余1的素数一定能表示为两正整数的平方和
  3. 收藏 | 2020年腾讯技术工程十大热门文章
  4. 数字42 它的C++二进制代码为 00101010
  5. git 强制将本地代码更新仓库里面的代码
  6. 霆智服务器安装步骤_阿里云服务器安装MySql数据库详细步骤
  7. send/receive h264/aac file/data by rtp/rtsp over udp/tcp
  8. BPM 與 SOA的演進與展望(下)
  9. php 公众号授权登录,微信公众号授权登录
  10. phython学习第二天
  11. java缓存框架zookepper_Zookeeper分布式开源框架
  12. C# 微信JS-SDK之config接口注入权限验证invalid signature签名错误
  13. CentOS7“ 趣味”命令 牛说:火车在天上飞 ,我吹的。
  14. 显卡测试软件毛毛虫,ATI Radeon Xpress200M与Intel GMA950谁强些?
  15. php框架 猪婆,猪婆塘_三湖文学社_新高淳论坛 - Powered by Discuz!
  16. SOS:硬盘数据丢失怎么办?
  17. 一键卸载oracle11,Oracle11完全卸载
  18. 第十三届蓝桥杯大赛软件赛省赛(C/C++ 大学B组)
  19. potainer 日志_【转】专治脑壳疼 | 横扫七大烦恼!日志数据分析还可以这样做!...
  20. 在php中加css_如何使用php脚本给html中引用的js和css路径打上版本号

热门文章

  1. mysql 生成随机(数字、英文字符、汉字函数)
  2. Bulma CSS - 入门
  3. 京东撸货核心法则,6个步骤很详细,拿走不谢!
  4. 文史上最骚的编程语言来了!大四学生发明言文编程语言!秀的我头皮发麻
  5. vue-video-player 更改视频源
  6. matlab中元器件三相lc filter滤波器,三相PWM逆变器输出LC滤波器设计方法.pdf
  7. lc滤波器是利用电感的感抗_LC滤波器原理
  8. 领课教育系统 - 开源的微服务分布式在线教育系统
  9. java代码实现查询分页
  10. Elasticsearch与Solr