乐趣区

关于深度学习:深度学习教程-经典CNN网络实例详解

  • 作者:韩信子 @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.1×1 卷积

在 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 序列模型和注意力机制

退出移动版