• 作者:韩信子@ShowMeAI
  • 教程地址:http://www.showmeai.tech/tutorials/35
  • 本文地址:http://www.showmeai.tech/article-detail/222
  • 申明:版权所有,转载请分割平台与作者并注明出处

珍藏ShowMeAI查看更多精彩内容


本系列为吴恩达老师《深度学习专项课程(Deep Learning Specialization)》学习与总结整顿所得,对应的课程视频能够在这里查看。

引言

在ShowMeAI前一篇文章 卷积神经网络解读 中咱们对以下内容进行了介绍:

  • 卷积计算、填充
  • 卷积神经网络单层构造
  • 池化层构造
  • 卷积神经网络典型构造
  • CNN特点与劣势

本篇内容ShowMeAI开展介绍和总结几个有名的典型CNN案例。这些CNN是最典型和无效的构造,吴恩达老师心愿通过对具体CNN模型案例的剖析解说,帮忙咱们了解CNN并训练理论的模型。

本篇波及到的经典CNN模型包含:

  • LeNet-5
  • AlexNet
  • VGG
  • ResNet(Residual Network,残差网络)
  • Inception Neural Network

1.经典卷积网络

1.1 LeNet-5

手写字体辨认模型LeNet5由Yann LeCun传授于90年代提出来,是最早的卷积神经网络之一。它是第一个胜利利用于数字辨认问题的卷积神经网络。在MNIST数据中,它的准确率达到大概99.2%

LeNet5通过奇妙的设计,利用卷积、参数共享、池化等操作提取特色,防止了大量的计算成本,最初再应用全连贯神经网络进行分类辨认,这个网络也是最近大量神经网络架构的终点

  • LeNet-5针对灰度图像而训练,因而输出图片维度为\( (32,32,1)\) (留神其中通道数为1)。
  • 该模型总共蕴含了约6万个参数,远少于规范神经网络所需。
  • 典型的LeNet-5构造蕴含卷积层(CONV layer),池化层(POOL layer)和全连贯层(FC layer),排列程序个别为CONV layer \( \Longrightarrow\) POOL layer \( \Longrightarrow\) CONV layer \( \Longrightarrow\) POOL layer \( \Longrightarrow\) FC layer \( \Longrightarrow\) FC layer \( \Longrightarrow\) OUTPUT layer。一个或多个卷积层前面跟着一个池化层的模式至今仍非常罕用。
  • 当LeNet-5模型被提出时,其池化层应用的是均匀池化,而且各层激活函数个别选用Sigmoid和tanh。当初咱们更多的会应用最大池化并选用ReLU作为激活函数。
相干论文:LeCun et.al., 1998. Gradient-based learning applied to document recognition。吴恩达老师倡议精读第二段,泛读第三段。

1.2 AlexNet

AlexNet由Alex Krizhevsky于2012年提出,夺得2012年ILSVRC较量的冠军,top5预测的错误率为16.4%,远超第一名

AlexNet采纳8层的神经网络,5个卷积层和3个全连贯层(3个卷积层前面加了最大池化层),蕴含6亿3000万个链接,6000万个参数和65万个神经元。具体的网络结构如下图:

模型构造解析:

  • 卷积层 \( \Longrightarrow\) (最大)池化层 \( \Longrightarrow\) 全连贯层的构造。
  • AlexNet模型与LeNet-5模型相似,然而更简单,蕴含约6000万个参数。另外,AlexNet模型应用了ReLU函数。
  • 当用于训练图像和数据集时,AlexNet可能解决十分类似的根本结构模块,这些模块往往蕴含大量的暗藏单元或数据。
相干论文:Krizhevsky et al.,2012. ImageNet classification with deep convolutional neural networks。这是一篇易于了解并且影响微小的论文,计算机视觉群体自此开始器重深度学习。

1.3 VGG

VGG是Oxford的Visual Geometry Group的组提出的CNN神经网络。该网络是在ILSVRC 2014上的相干工作,次要工作是证实了减少网络的深度可能在肯定水平上影响网络最终的性能。在提出后的几年内,大家广泛应用其作为典型CNN构造。

  • VGG又称VGG-16网络,「16」指网络中蕴含16个卷积层和全连贯层。
  • 超参数较少,只须要专一于构建卷积层。
  • 构造不简单且规整,在每一组卷积层进行滤波器翻倍操作。
  • VGG须要训练的特色数量微小,蕴含多达约1.38亿个参数。
相干论文:Simonvan & Zisserman 2015. Very deep convolutional networks for large-scale image recognition。

2.残差网络 ResNets

2.1 Residual Network构造

下面提到的VGG网络在过后曾经是重叠档次构建CNN比拟极限的深度了,随着神经网络层数变多和网络变深,会带来重大的梯度隐没和梯度爆炸问题(参考ShowMeAI文章 深度学习的实用层面 对于梯度隐没和梯度爆炸的解说),整个模型难以训练胜利。

在网络结构层面,一种解决办法是人为地让神经网络某些层跳过下一层神经元的连贯,隔层相连,弱化每层之间的强分割。这种神经网络被称为Residual Networks(ResNets)残差网络。

上图的构造被称为残差块(Residual block)。通过捷径(Short cut,或者称跳接/Skip connections)能够将\( a^{[l]}\) 增加到第二个ReLU过程中,间接建设\( a^{[l]}\) 与\( a^{[l+2]}\) 之间的隔层分割。表达式如下:

$$z^{[l+1]} = W^{[l+1]}a^{[l]} + b^{[l+1]}$$

$$a^{[l+1]} = g(z^{[l+1]})$$

$$z^{[l+2]} = W^{[l+2]}a^{[l+1]} + b^{[l+2]}$$

$$a^{[l+2]} = g(z^{[l+2]} + a^{[l]})$$

构建一个残差网络就是将许多残差块沉积在一起,造成一个深度网络。

为了便于辨别,在 ResNets 的论文 He et al., 2015. Deep residual networks for image recognition 中,非残差网络被称为一般直连网络(Plain Network)。将它变为残差网络的办法是加上所有的跳远连贯。

实践上,随着网络深度的减少,模型学习能力变强,成果应该晋升。但实际上,如下图所示,一个一般直连网络,随着神经网络层数减少,训练谬误会先先缩小后增多。但应用跳接的残差网络,随着网络变深,训练集误差继续出现降落趋势。

[外链图片转存失败,源站可能有防盗链机制,倡议将图片保留下来间接上传(img-aNBHgLIA-1649925808194)(http://image.showmeai.tech/de...)]

残差网络有助于解决梯度隐没和梯度爆炸问题,使得在训练更深的网络的同时,又能保障良好的性能。

2.2 残差网络无效的起因

上面咱们借助1个例子来解释为什么ResNets无效,为什么它能撑持训练更深的神经网络。

如图所示,假如输出\( x\) 通过很多层神经网络(上图的big NN)后输入\( a^{[l]}\) ,\( a^{[l]}\) 通过一个Residual block输入\( 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]})$$

输出\( x\) 通过Big NN后,若\( W^{[l+2]}\approx0\) ,\( b^{[l+2]}\approx0\) ,则有:

$$a^{[l+2]}=g(a^{[l]})=ReLU(a^{[l]})=a^{[l]}, when a^{[l]}\geq0$$

上述计算公式表明,即便产生了梯度隐没\( (W^{[l+2]}\approx0\) ,\( b^{[l+2]}\approx0)\) ,也能间接建设\( a^{[l+2]}\) 与\( a^{[l]}\) 的线性关系(此时\( a^{[l+2]}=a^{[l]}\) ,就是identity function)。

\( a^{[l]}\) 间接连到\( a^{[l+2]}\) ,从成果来说,相当于间接疏忽了\( a^{[l]}\) 之后的这两层神经层。很深的神经网络,因为许多Residual blocks的存在,弱化削减了某些神经层之间的分割,实现隔层线性传递,而不是一味谋求非线性关系,模型自身也就能「容忍」更深层的神经网络了。而且从性能上来说,这两层额定的Residual blocks也不会升高Big NN的性能。

当然,没有产生梯度隐没时,Residual blocks会疏忽short cut,能训练失去跟Plain Network起到同样成果的非线性关系。

留神,如果Residual blocks中\( a^{[l]}\) 和\( a^{[l+2]}\) 的维度不同,通常能够引入矩阵\( W_s\) ,与\( a^{[l]}\) 相乘,使得\( W_s*a^{[l]}\) 的维度与\( a^{[l+2]}\) 统一。参数矩阵\( W_s\) 有来两种办法失去:

  • ① 将\( W_s\) 作为学习参数,通过模型训练失去
  • ② 固定\( W_s\) 值(相似单位矩阵),不须要训练,\( W_s\) 与\( a^{[l]}\) 的乘积仅仅使得\( a^{[l]}\) 截断或者补零

上述两种办法都可行。

下图所示的是CNN中ResNets的构造比照一般直连网络和VGG19:

3.1x1卷积

在CNN中有一种当初宽泛应用的CNN构造:\( 1 \times 1\) Convolution(\( 1 \times 1\) 卷积,也称Networks in Networks)。它指滤波器的尺寸为1。当通道数为1时,\( 1 \times 1\) 卷积意味着卷积操作等同于乘积操作。

而当通道数更多时,\( 1 \times 1\) 卷积的作用实际上相似全连贯层的神经网络构造,从而对数据进行升降维度(取决于滤波器个数)。

池化能压缩数据的高度(\( n_H\) )及宽度(\( n_W\) ),而\( 1 \times 1\) 卷积能压缩数据的通道数(\( n_C\) )。在如下图所示的例子中,用32个大小为\( 1 \times 1 \times 192\) 的滤波器进行卷积,就能使原先数据蕴含的192个通道压缩为32个。如下动图演示了\( 1 \times 1\) 卷积的计算:

4.Inception网络

上面介绍一下Inception网络,它是CNN分类器发展史上一个重要的里程碑。

在Google提出Inception之前,大部分风行CNN仅仅是把卷积层重叠得越来越多,使网络越来越深,以此心愿可能失去更好的性能。

大家察看咱们之前介绍到的CNN典型构造,都是只抉择繁多尺寸和类型的滤波器。而Inception网络的作用即是代替人工来确定卷积层中的滤波器尺寸与类型,或者确定是否须要创立卷积层或池化层。

如上图所示,Inception网络选用不同尺寸的滤波器进行Same 卷积,并将卷积和池化失去的输入组合拼接起来,最终让网络本人去学习须要的参数和采纳的滤波器组合。

相干论文:Szegedy et al., 2014, Going Deeper with Convolutions

4.1 计算成本问题

在晋升性能的同时,Inception网络有着较大的计算成本。如下图的例子:

图中有\( 32\) 个滤波器,每个滤波器的大小为\( 5 \times 5 \times 192\) 。输入大小为\( 28 \times 28 \times 32\) ,总共须要计算失去\( 28 \times 28 \times 32\) 个后果数,对于每个数,要执行\( 5 \times 5 \times 192\) 次乘法运算。加法运算次数与乘法运算次数近似相等。因而,这一层的计算量能够近似为\( 28 \times 28 \times 32 \times 5 \times 5 \times 192=1.2\) 亿。

Inception引入了\( 1 \times 1\) 卷积来缩小计算量问题:

如上图所示,咱们先应用\( 1 \times 1\) 卷积把输出数据从192个通道缩小到16个通道,再对这个较小层运行\( 5 \times 5\) 卷积,失去最终输入。这种改良形式的计算量为\( 28 \times 28 \times 192 \times 16 + 28 \times 28 \times 32 \times 5 \times 5 \times 15=1.24\) 千万,缩小了约90%。

这里的\( 1 \times 1\) 的卷积层通常被称作瓶颈层(Bottleneck layer)。借助在网络中正当设计瓶颈层,能够在放弃网络性能的前提下显著放大计算规模。

4.2 残缺的Inception网络

引入\( 1 \times 1\) 卷积后的Inception模块如上所示。留神,为了将所有的输入组合起来,红色的池化层应用Same类型的填充(padding)来池化使得输入的宽高不变,通道数也不变。

多个Inception模块组成一个残缺的Inception网络(被称为GoogLeNet,以向LeNet致敬),如下图所示:

留神,在上图中,Inception网络除了有许多Inception模块(图上红框框出)之外,网络两头暗藏层也能够作为输入层Softmax(图中彩色圈圈出),有利于避免产生过拟合。

通过研究者们的一直倒退,Inception模型的V2、V3、V4以及引入残差网络的版本被提出,这些变体都基于Inception V1版本的根底思维上。

5.应用开源的实现计划

很多神经网络结构复杂,且有很多粗疏的设计和调整,训练过程也蕴含十分多tricks,很难仅通过浏览论文来重现别人的成绩。想要搭建一个同样的神经网络,查看开源的实现计划会快很多。

6.迁徙学习

在ShowMeAI的前序文章 AI利用实际策略(下) 中咱们提到过迁徙学习。计算机视觉是一个常常用到迁徙学习的畛域。在搭建计算机视觉的利用时,相比于从头训练权重,下载他人曾经训练好的网络结构的权重,用其做预训练模型,而后转换到本人感兴趣的工作上,有助于减速开发。

对于相似后面提到的VGG/ResNet/Inception等训练好的卷积神经网络,能够解冻住所有层,只训练针对当前任务增加的Softmax分类层参数即可。大多数深度学习框架都容许用户指定是否训练特定层的权重。

解冻的层因为不须要扭转和训练,能够看作一个固定函数。能够将这个固定函数存入硬盘,以便后续应用,而不用每次再应用训练集进行训练了。

吴恩达老师指出,上述的做法实用于小数据集场景,如果你有一个更大的数据集,应该解冻更少的层,而后训练前面的层。越多的数据意味着解冻越少的层,训练更多的层。如果有一个极大的数据集,你能够将开源的网络和它的权重整个当作初始化(代替随机初始化),而后训练整个网络。

7.数据扩增

计算机视觉畛域的利用都须要大量的数据。当数据不够时,数据扩增(Data Augmentation)能够帮忙咱们构建更多的数据样本。

罕用的数据扩增包含镜像翻转、随机裁剪、色调转换等。如下图为镜像和随机裁剪失去新的图片。

色调转换是对图片的RGB通道数值进行随便减少或者缩小,扭转图片色调。另外,PCA色彩加强指更有针对性地对图片的RGB通道进行主成分剖析(Principles Components Analysis,PCA),对次要的通道色彩进行减少或缩小,能够采纳高斯扰动做法来减少无效的样本数量。具体的PCA色彩加强做法能够查阅AlexNet的相干论文或者开源代码。
下图为应用color shifting色调转换进行data augmentation的示例。

在构建大型神经网络的时候,为了晋升效率,咱们能够应用两个或多个不同的线程并行来实现数据扩增和模型训练。

8.计算机视觉现状

深度学习须要大量数据,不同的神经网络模型所需的数据量是不同的。指标检测、图像识别、语音辨认所需的数据量顺次减少。一般来说,如果数据较少,那么就须要对已有数据做更多的手工工程(hand-engineering),比方上一节介绍的数据扩增操作。模型算法也须要特地设计,会绝对要简单一些。

如果数据很多,能够构建深层神经网络,不须要太多的手工工程,模型算法也就绝对简略一些。

手工工程(Hand-engineering,又称hacks)指精心设计的个性、网络体系结构或是零碎的其余组件。手工工程是一项十分重要也比拟艰难的工作。在数据量不多的状况下,手工工程是取得良好体现的最佳形式。正因为数据量不能满足需要,历史上计算机视觉畛域更多地依赖于手工工程。近几年数据量急剧减少,因而手工工程量大幅缩小。

除此之外,在模型钻研或者比赛方面,有一些办法可能有助于晋升神经网络模型的性能:

  • 集成(Ensembling):独立地训练几个神经网络,并均匀输入它们的输入。
  • 测试阶段数据扩增(Multi-crop at test time):将数据扩增利用到测试集,对后果进行均匀。

然而理论工业利用我的项目会思考性能效率,上述技巧办法计算和内存老本较大,个别很少应用。

参考资料

  • LeCun et.al., 1998. Gradient-based learning applied to document recognition
  • Krizhevsky et al.,2012. ImageNet classification with deep convolutional neural networks
  • Simonvan & Zisserman 2015. Very deep convolutional networks for large-scale image recognition
  • He et al., 2015. Deep residual networks for image recognition
  • Szegedy et al., 2014, Going Deeper with Convolutions

ShowMeAI系列教程举荐

  • 图解Python编程:从入门到精通系列教程
  • 图解数据分析:从入门到精通系列教程
  • 图解AI数学根底:从入门到精通系列教程
  • 图解大数据技术:从入门到精通系列教程
  • 图解机器学习算法:从入门到精通系列教程
  • 机器学习实战:手把手教你玩转机器学习系列
  • 深度学习教程 | 吴恩达专项课程 · 全套笔记解读

举荐文章

  • 深度学习教程 | 深度学习概论
  • 深度学习教程 | 神经网络根底
  • 深度学习教程 | 浅层神经网络
  • 深度学习教程 | 深层神经网络
  • 深度学习教程 | 深度学习的实用层面
  • 深度学习教程 | 神经网络优化算法
  • 深度学习教程 | 网络优化:超参数调优、正则化、批归一化和程序框架
  • 深度学习教程 | AI利用实际策略(上)
  • 深度学习教程 | AI利用实际策略(下)
  • 深度学习教程 | 卷积神经网络解读
  • 深度学习教程 | 经典CNN网络实例详解
  • 深度学习教程 | CNN利用:指标检测
  • 深度学习教程 | CNN利用:人脸识别和神经格调转换
  • 深度学习教程 | 序列模型与RNN网络
  • 深度学习教程 | 自然语言解决与词嵌入
  • 深度学习教程 | Seq2seq序列模型和注意力机制