TensorFlow从1到2 | 第四章: 拆解CNN架构

上一篇 《TensorFlow从1到2 | 第三章: 深度学习革命的开端:卷积神经网络》 快速回顾了CNN的前世今生。

本篇将拆开CNN架构,一探究竟。

卷积滤波器

基于空间映射的架构

全连接网络架构存在一个“硬”伤:网络中各层神经元的一维排布方式,丢弃了图像的空间结构信息。

以MNIST识别为例,当输入一副28x28的二维图像,我们首先会把它拉平为一个长度为784的一维的向量,而后才将其连入隐藏层的每个神经元。输入图像中两个相距较近的像素位置,与两个相距较远的像素位置,对于神经元来说并没有差别。全连接网络只能靠大量训练,通过更新神经元对每个像素位置权重这种“软”方法,推断出图像的空间结构。

与全连接网络不同,CNN中的各层神经元排列都保持了二维的图像空间结构(末端的全连接层除外),如下图所示。

CNN架构
LeNet-5

这就是LeCun在1998年发表《Gradient-based learning applied to document recognition》(http://www.dengfanxin.cn/wpcontent/uploads/2016/03/1998Lecun.pdf)提出的第一个正式的卷积神经网络架构——LeNet-5,Google学术搜索显示被引用9562次,经典程度可见一斑。

以“层”作为拆解粒度的话,刨去输入层和输出层,LeNet-5共有6个隐藏层:从左到右依次是:

  • C1卷积层(Convolutional Layer);
  • S2降采样层(Sub-Sampling Layer),即池化层(Pooling Layer);
  • C3卷积层;
  • S4降采样层;
  • C5卷积层;
  • F6全连接层(Full Connected Layer);

其中,关于全连接层我们已经非常熟悉了(回顾直达TensorFlow从0到1),而其余的5层中,只有卷积层和降采样层两种类型,交替重复出现。

需要注意的是,LeNet-5是CNN的一种特化架构,在构建自己的CNN的时候完全可以自定义架构的大小和深度(卷积层和降采样层的数量)。

接下来分别去看卷积层和池化层。

卷积层

卷积层分为4个小主题来说:

  • 局部感受野;
  • 共享权重和偏置;
  • 多通道算法;
  • 滤波器的层次;

局部感受野

与全连接网络的另一个迥异是,卷积层神经元具有局部感受野,它只能“看到”一小块局部图像,如下图所示。

局部感受野-1

图中左侧是28x28的输入层,右侧是第一个隐藏层——卷积层,其中第一行第一列的神经元能够“看到”一块5x5的局部图像。

接下来看卷积层的第一行第二个神经元,5x5的“小视窗”从之前的位置,整体向右滑动了1个像素(跨距),形成了它的感受野,见下图。

局部感受野-2

依照上述这种局部映射逻辑,依次从左到右,从上到下,便构建好了卷积层与上一层输出的位置映射关系。需要注意的是,卷积网络中各层的二维结构,以及“小视窗”都是正方形的,如果输入原始数据是长方形图片,则需要进行预处理。

用N代表输入层的尺寸,F代表小视窗尺寸,stride代表跨距,那么卷积层的二维尺寸可以通过公式计算出来:

K = (N - F) / stride + 1

已上图为例,输入层的尺寸是28x28,小视窗尺寸为5x5,每次整体挪动1个像素,那么计算得出卷积层的二维尺寸是:

(28 - 5) / 1 + 1 = 24

经过卷积映射,卷积层的尺寸比输入层尺寸减小了。如果想保持卷积层尺寸不变,一个常规做法是对输入图像沿边界整圈补0。记补0的圈数为P,那么卷积层尺寸的计算公式更新为:

K = (N + 2P - F) / stride + 1

已上图为例,在做卷积映射前,对输入图像补0两圈,可以使卷积层尺寸保持与原图像不变:

(28 + 2x2 - 5) / 1 + 1 = 32

补0操作如下所示:

Pad the Boarder

归纳当前构建网络用到的超参数:

  • 输入层的尺寸,记为N;
  • 小视窗尺寸,记为F;
  • 跨距,stride;
  • 补0圈数,记为P;

共享权重和偏置

仍以前面的图[局部感受野-1]为例。

如果“小视窗”的尺寸是5x5,那么卷积层中一个神经元的连接数(即权重数)只需要25个,明显比全连接神经元少很多。不仅如此,更感意外的是,该神经元所在整个隐藏层的权重数量也只需要25个!

这是本篇提到的第3个与全连接网络的迥异之处:卷积层中的这些神经元的权重和偏置是共享的。也就是说,这些神经元其实长得一模一样的。

对此一个形象的解释是:卷积层中的这些神经元其实是在图像不同的局部区域中去“挑选”一组“必须”相同的特征。基于此理解,代表共享权重和偏置的“小视窗”,被称为Filter(滤波器)也就非常自然了。

对于卷积层位置在(j,k)的神经元,其输出表达式可以记为:

神经元输出表达式

其中:

  • σ是神经元的激活函数;
  • b是共享偏置;
  • wl,m1个5x5的共享权重;
  • ax,y是上一层位置为(x,y)的输出值;

基于位置映射规则,以及神经元共享权重和偏置,整个隐藏层的输出,可以用数学上称为卷积(Convolutional)的操作来非常简明的表示出来:

al+1 = σ(w * al + b)

其中,符号“*”就表示卷积操作,在这个解释下“小视窗”又有了一个新名字——卷积核。这就是卷积神经网络这个名字的来历。关于更多卷积的解释,可以看看知乎上的精彩讨论:卷积的物理意义是什么?(https://www.zhihu.com/question/21686447?nr=1)。

多通道卷积算法

为了解释清楚局部感受野、参数共享以及神经元输出的计算方法,在前面采用了一个极简的模型:

  • 输入图像是单通道的灰度图;
  • 卷积层的滤波器(卷积核)也只有1个;
  • 卷积层输出仍然是单通道的;

但是在实际情况中,事情要复杂的多。首先输入图像多数是多通道的(比如RGB三通道),再者卷积层做特征检测的滤波器只有1个肯定是远远不够的,我们需要大量不同的滤波器来提取各种特征,进而产生多通道的输出。概括起来,有以下三方面的扩展:

  • 多通道输入;
  • 多个多通道滤波器;
  • 多通道输出;

KEEP CALM!一张动图可以体现出以上的所有扩展:

多通道卷积

观察上图,有:

  • 输入尺寸:7x7x3;
  • 滤波器尺寸:3x3x3;
  • 滤波器数量:2;
  • 滤波器跨距:2;
  • 补0圈数:1;
  • 输出尺寸:3x3x2;

其中输入,滤波器,输出都变成了三维结构,多出的一维就是通道,Channel。3者的关归纳如下,务必牢记:

  • 输入的通道数 == 滤波器的通道数;
  • 滤波器的个数 == 输出的通道数;

这个关系可以用另一种视图辅助记忆,见下:

滤波器的层次

滤波器的层次

上一篇《TensorFlow从1到2 | 第三章: 深度学习革命的开端:卷积神经网络》,介绍了哺乳动物的视觉系统,它是分层递进的,每一级都比前一级处理更高层次的视觉概念。而据此启发设计的卷积神经网络,是如何体现分层递进的呢?

2013年Zeiler与Fergus的《Visualizing and Understanding Convolutional Networks》(https://arxiv.org/abs/1311.2901)给出了回答,他们将训练好的卷积网络的各卷积层卷积核,通过可视化手段呈现了出来。卷积神经网络果真如同生物视觉皮层那样,先从边缘检测开始,然后逐层提升检测特征的抽象层次,如下图所示:

特征检测的层次

池化层

在卷积网络架构中,一个卷积层后面,会紧跟一个池化层(Pooling Layer),它的主要作用就是降采样(Sub-Sampling),简化卷积层输出的信息。

池化层的行为比较简单,输入和输出的通道数并不发生改变,仅仅是二维尺寸的缩小,如下图:

池化

最常用的池化滤波器之一是最大值池化(Max Pooling),同卷积滤波器一样它也有自己的超参数:尺寸和跨距(stride)。以一个尺寸为2x2,跨距为2的Max Pooling为例,池化操作对输入逐通道进行操作,只保留局部感受野中的最大值形成新的输出通道,如下图所示:

最大值池化

全连接层

经历了多次的卷积和池化,网络最终提取出了原始输入的最高级特征,它是一个W x H x D的三维数据体。此时就轮到全连接网络登场了,因为做分类或者回归,是全连接网络的长项。

向全连接网络输入数据,请记得首先将三维数据拉平为一个一维向量。

为什么深度CNN可以训练

“深度网络的训练存在各种障碍与困难”,我们在2 消失的梯度中曾讨论过。可是到了CNN这里,少则不低于四层,多则上百层,深度的问题似乎自动解决了,这是为什么?如果不考虑数据量大与运算能力强,卷积神经网络从理论上是如何克服深度问题的?

遗憾的是,确切的原因并不完全清楚。我们所了解的一些不充分(必要)的原因有:

  • 网络各层参数量级的有效控制。这得益于卷积层的共享权重和偏置。以之前MNIST识别所采用的全连接网络为例,在输入长度为784,第一个隐藏层为30个神经元的情况下,就已经产生了23520个权重。而CNN的第一个隐藏层,使用32个5x5x1滤波器,权重数量仅有800个;
  • ReLU等改进方法的应用使网络计算效率更高;
  • 其他烧脑的思考留给科学家们吧;

最后值得一提的是,虽然卷积神经网络是基于生物视觉系统启发的,但是在现实应用中,它不仅能够处理二维图像数据,对于任何具有清晰网格结构的数据它都能进行学习,这种普适性使其能够脱离生物神经科学范畴,成为了一种通用的人工智能方法。

原文发布于微信公众号 - 人工智能LeadAI(atleadai)

原文发表时间:2017-10-27

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏SIGAI学习与实践平台

­­-机器学习和深度学习中值得弄清楚的一些问题 SIGAI飞跃计划答疑精华问题汇总

原创声明:本文为 SIGAI 原创文章,仅供个人学习使用,未经允许,不得转载,不能用于商业目的。

733
来自专栏CSDN技术头条

深度卷积对抗生成网络(DCGAN)

卷积神经网络在有监督学习中的各项任务上都有很好的表现,但在无监督学习领域,却比较少。本文介绍的算法将有监督学习中的CNN和无监督学习中的GAN结合到了一起。 ...

2078
来自专栏计算机视觉战队

最近流行的激活函数

最近又看了点深度学习的东西,主要看了一些关于激活函数的内容,不知道算不算新颖,但是我想把自己阅读后的分享一下,请各位给予评价与指点,谢谢! 一般激活函数有如下一...

2625
来自专栏目标检测和深度学习

重磅!卷积神经网络为什么能称霸计算机视觉领域?

772
来自专栏机器之心

这是一份优美的信息图,吴恩达点赞的deeplearning.ai课程总结

机器之心整理 参与:思源、刘晓坤 吴恩达在推特上展示了一份由 TessFerrandez 完成的深度学习专项课程信息图,这套信息图优美地记录了深度学习课程的知识...

3376
来自专栏人工智能LeadAI

学懂GAN的数学原理,让它不再神秘

知乎上有个讨论,说学数学的看不起搞深度学习的。曲直对错不论,他们看不起搞深度学习的原因很简单,因为从数学的角度看,深度学习仅仅是一个最优化问题而已。比如,被炒的...

3445
来自专栏MelonTeam专栏

【译】关于深度神经网络必须知道的一些技巧(上)

翻译自魏秀参博士的文章:Must Know Tips/Tricks in Deep Neural Networks ? | 深度神经网络,特别是卷积...

2136
来自专栏数据派THU

这份深度学习课程笔记获吴恩达点赞

来源:机器之心 通过本文用优美的信息图为大家解读深度学习课程的知识与亮点~ 吴恩达在推特上展示了一份由 TessFerrandez 完成的深度学习专项课程信息...

4597
来自专栏用户2442861的专栏

CNN神经网络的直观解释

卷积神经网络(ConvNets 或者 CNNs)属于神经网络的范畴,已经在诸如图像识别和分类的领域证明了其高效的能力。卷积神经网络可以成功识别人脸、物体和交通信...

332
来自专栏机器之心

入门 | 一文看懂卷积神经网络

27311

扫描关注云+社区