《神经网络和深度学习》系列文章四十四:介绍卷积网络

出处: Michael Nielsen的《Neural Network and Deep Learning》,本节译者:朱小虎 、张广宇。


目录

1、使用神经网络识别手写数字

2、反向传播算法是如何工作的

3、改进神经网络的学习方法

4、神经网络可以计算任何函数的可视化证明

5、为什么深度神经网络的训练是困难的

6、深度学习

  • 介绍卷积网络
  • 卷积神经网络在实际中的应用
  • 卷积网络的代码
  • 图像识别领域中的近期进展
  • 其他的深度学习模型
  • 神经网络的未来
在前面的章节中,我们教会了神经网络能够较好地识别手写数字:



我们使用了全连接的邻接关系的网络来完成这个工作。即,网络中的神经元与相邻的层上的每个神经元均连接:

特别地,对输入图像中的每个像素点,我们将其光强度作为对应输入层神经元的值。对于  像素的图像,这意味着我们的网络有)个输入神经元。我们然后训练网络的权重和偏置,使得网络输出能够——如我们希望地——正确地辨认输入图像:’0′, ‘1’, ‘2’, …, ‘8’, or ‘9’。

我们之前的网络工作得相当好:我们已经得到了超过 98的分类准确率,使用来自MNIST 手写数字数据集的训练和测试数据。但是仔细推敲,使用全连接层的网络来分类图像是很奇怪的。原因是这样的一个网络架构不考虑图像的空间结构。例如,它在完全相同的基础上去对待相距很远和彼此接近的输入像素。这样的空间结构的概念必须从训练数据中推断。但是如果我们使用一个设法利用空间结构的架构,而不是从一个白板状态的网络架构开始,会怎样?在这一节中,我会描述卷积神经网络1。这些网络使用一个特别适用于分类图像的特殊架构。使用这个架构使得卷积网络能更快训练。相应的,这帮助我们训练深度的、多层的网络,它非常擅长于分类图像。今天,深度卷积网络或者一些近似的变化形式,被用在大多数图像识别的神经网络中。

卷积神经网络采用了三种基本概念:局部感受野(local receptive fields),共享权重(shared weights),和混合(pooling)。让我们逐个看下:

局部感受野:在之前看到的全连接层的网络中,输入被描绘成纵向排列的神经元。但在一个卷积网络中,把输入看作是一个的方形排列的神经元更有帮助,其值对应于我们用作输入的 的像素光强度:

和通常一样,我们把输入像素连接到一个隐藏神经元层。但是我们不会把每个输入像素连接到每个隐藏神经元。相反,我们只是把输入图像进行小的,局部区域的连接


说的确切一点,第一个隐藏层中的每个神经元会连接到一个输入神经元的一个小区域,例如,一个的区域,对应于个输入像素。所以对于一个特定的隐藏神经元,我们可能有看起来像这样的连接:

这个输入图像的区域被称为隐藏神经元的局部感受野。它是输入像素上的一个小窗口。

每个连接学习一个权重。而隐藏神经元同时也学习一个总的偏置。你可以把这个特定的隐藏神经元看作是在学习分析它的局部感受野。

我们然后在整个输入图像上交叉移动局部感受野。对于每个局部感受野,在第一个隐藏层中有一个不同的隐藏神经元。为了正确说明,让我们从左上角开始一个局部感受野:

然后我们往右一个像素(即一个神经元)移动局部感受野,连接到第二个隐藏神经元:

如此重复,构建起第一个隐藏层。注意如果我们有一个的输入图像,的局部感受野,那么隐藏层中就会有个神经元。这是因为在抵达右边(或者底部)的输入图像之前,我们只能把局部感受野横向移动个神经元(或者往下个神经元)。

我显示的局部感受野每次移动一个像素。实际上,有时候会使用不同的跨距。例如,我可以往右(或下)移动个像素的局部感受野,这种情况下我们使用了个跨距。在这章里我们大部分时候会固定使用的跨距,但是值得知道人们有时用不同的跨距试验2。

共享权重和偏置: 我已经说过每个隐藏神经元具有一个偏置和连接到它的局部感受野的权重。我没有提及的是我们打算对隐藏神经元中的每一个使用相同的权重和偏置。换句话说,对第个隐藏神经元,输出为:

(125) 

这里是神经元的激活函数——可以是我们在前面章里使用过的S型函数。是偏置的共享值。是一个共享权重的数组。最后,我们使用来表示位置为的输入激活值。

这意味着第一个隐藏层的所有神经元检测完全相同的特征3,只是在输入图像的不同位置。要明白为什么是这个道理,把权重和偏置设想成隐藏神经元可以挑选的东西,例如,在一个特定的局部感受野的垂直边缘。这种能力在图像的其它位置也很可能是有用的。因此,在图像中应用相同的特征检测器是非常有用的。用稍微更抽象的术语,卷积网络能很好地适应图像的平移不变性:例如稍稍移动一幅猫的图像,它仍然是一幅猫的图像4。

因为这个原因,我们有时候把从输入层到隐藏层的映射称为一个特征映射。我们把定义特征映射的权重称为共享权重。我们把以这种方式定义特征映射的偏置称为共享偏置。共享权重和偏置经常被称为一个卷积核或者滤波器。在文献中,人们有时以稍微不同的方式使用这些术语,对此我不打算去严格区分;稍后我们会看一些具体的例子。

目前我描述的网络结构只能检测一种局部特征的类型。为了完成图像识别我们需要超过一个的特征映射。所以一个完整的卷积层由几个不同的特征映射组成:

在这个例子中,有3个特征映射。每个特征映射定义为一个共享权重和单个共享偏置的集合。其结果是网络能够检测3种不同的特征,每个特征都在整个图像中可检测。

为了让上面的图示简单些,我仅仅展示了个特征映射。然而,在实践中卷积网络可能使用很多(也许多得多)的特征映射。一种早期的识别 MNIST 数字的卷积网络,LeNet-5,使用个特征映射,每个关联到一个的局部感受野。所以上面的插图例子实际和 LeNet-5 很接近。而在我们在本章后面要开发的例子里,我们将使用具有20和40个特征映射的卷积层。让我们快速看下已经学到的一些特征5:

这20幅图像对应于20个不同的特征映射(或滤波器、核)。每个映射有一幅块的图像表示,对应于局部感受野中的权重。白色块意味着一个小(典型的,更小的负数)权重,所以这样的特征映射对相应的输入像素有更小的响应。更暗的块意味着一个更大的权重,所以这样的特征映射对相应的输入像素有更大的响应。非常粗略地讲,上面的图像显示了卷基层作出响应的特征类型。

所以我们能从这些特征映射中得到什么结论?很明显这里有超出了我们期望的空间结构:这些特征许多有清晰的亮和暗的子区域。这表示我们的网络实际上正在学习和空间结构相关的东西。然而,除了那个,看清这些特征检测器在学什么是很困难的。当然,我们并不是在学习(例如)Gabor 滤波器,它已经被用在很多传统的图像识别方法中。实际上,现在有许多关于通过卷积网络来更好理解特征的工作成果。如果你感兴趣,我建议从 Matthew Zeiler 和 Rob Fergus 的(2013)论文 Visualizing and Understanding Convolutional Networks开始。

共享权重和偏置的一个很大的优点是,它大大减少了参与的卷积网络的参数。对于每个特征映射我们需要个共享权重,加上一个共享偏置。所以每个特征映射需要个参数。如果我们有个特征映射,那么总共有个参数来定义卷积层。作为对比,假设我们有一个全连接的第一层,具有个输入神经元,和一个相对适中的个隐藏神经元,正如我们在本书之前的很多例子中使用的。总共有个权重,加上额外的个偏,共有个参数。换句话说,这个全连接的层有多达倍于卷基层的参数。

当然,我们不能真正做一个参数数量之间的直接比较,因为这两个模型的本质是不同的径。但是,直观地,使用卷积层的平移不变性似乎很可能减少全连接模型中达到同样性能的参数数量。反过来,这将导致更快的卷积模型的训练,并最终,将有助于我们使用卷积层建立深度网络。

顺便提一下,卷积(convolutional)这一名称源自方程(125)中的操作符有时被称为一个卷积(convolution)。稍微更精确些,人们有时把这个方程写成,其中表示出自一个特征映射的输出激活值集合,是输入激活值的集合,而被称为一个卷积操作。我们不打算深入使用卷积数学,所以你不用对此太担心。但是至少值得知道这个名称从何而来。

混合层: 除了刚刚描述的卷积层,卷积神经网络也包含混合层(pooling layers)。混合层通常紧接着在卷积层之后使用。它要做的是简化从卷积层输出的信息。

详细地说,一个混合层取得从卷积层输出的每一个特征映射6并且从它们准备一个凝缩的特征映射。例如,混合层的每个单元可能概括了前一层的一(比如)的区域。作为一个具体的例子,一个常见的混合的程序被称最大值混合(max-pooling)。在最大值混合中,一个混合单元简单地输出其输入区域的最大激活值,正如下图说明的:

注意既然从卷积层有个神经元输出,混合后我们得到个神经元。

正如上面提到的,卷积层通常包含超过一个特征映射。我们将最大值混合分别应用于每一个特征映射。所以如果有三个特征映射,组合在一起的卷积层和最大值混合层看起来像这样:

我们可以把最大值混合看作一种网络询问是否有一个给定的特征在一个图像区域中的哪个地方被发现的方式。然后它扔掉确切的位置信息。直观上,一旦一个特征被发现,它的确切位置并不如它相对于其它特征的大概位置重要。一个很大的好处是,这样可以有很多被更少地混合的特征,所以这有助于减少在以后的层所需的参数的数目。

最大值混合并不是用于混合的仅有的技术。另一个常用的方法是L2 混合(L2 pooling)。这里我们取区域中激活值的平方和的平方根,而不是最大激活值。虽然细节不同,但其直观上和最大值混合是相似的:L2 混合是一种凝缩从卷积层输出的信息的方式。在实践中,两种技术都被广泛应用。而且有时候人们使用其它混合操作的类型。如果你正在尝试优化性能,你可以使用验证数据来比较混合的不同方法,并选择一个工作得最好的。但我们不打算惦记这种细节上的优化。

综合在一起: 我们现在可以把这些思想都放在一起来构建一个完整的卷积神经网络。它和我们刚看到的架构相似,但是有额外的一层个输出神经元,对应于个可能的 MNIST 数字(’0’,’1’,’2’等):

这个网络从个输入神经元开始,这些神经元用于对 MNIST 图像的像素强度进行编码。接着的是一个卷积层,使用一个局部感受野和个特征映射。其结果是一个隐藏特征神经元层。下一步是一个最大值混合层,应用于区域,遍及个特征映射。结果是一个隐藏特征神经元层。


网络中最后连接的层是一个全连接层。更确切地说,这一层将最大值混合层的每一个神经元连接到每一个输出神经元。这个全连接结构和我们之前章节中使用的相同。然而,注意上面的图示,为了简化,我只使用了一个箭头,而不是显示所有的连接。当然,你可以很容易想象到这些连接。

这个卷积架构和之前章节中使用的架构相当不同。但是总体的描述是相似的:一个由很多简单的单元构成的网络,这些单元的行为由它们的权重和偏置确定。而总体的目标仍然是一样的:用训练数据来训练网络的权重和偏置,使得网络可以胜任分类输入数字。

特别的,正如本书中前面那样,我们将用随即梯度下降和反向传播训练我们的网络。这大部分按照前面章节中完全相同的方式来处理。然而,我们确实需要对反向传播程序做些修改。原因是我们之前的反向传播的推导是针对全连接层的网络。幸运的是,针对卷积和最大值混合层的推导是简单的。如果你想理解细节,那么我请你完成下面的问题。注意这个问题会花费些时间来完成,除非你确实已经吸收了前面的反向传播的推导(这种情况下是容易的)。

问题

卷积网络中的反向传播        在一个具有全连接层的网络中,反向传播的核心方程是(BP1)–(BP4)。假设我们有这样一个网络,它包含有一个卷积层,一个最大值混合层,和一个全连接的输出层,正如上面讨论的那样。反向传播的方程式要如何修改?

注:

1. 最初的卷积神经网络要追溯到 1970 年代。但是建立起现代卷积⽹络学科的开创性论文是一篇 1998 年的“ Gradient-based learning applied to document recognition”,作者为 Yann LeCun, Léon Bottou, Yoshua Bengio,和Patrick Haffner。 LeCun 自那以后做了一个关于卷积网络术语的有趣评论:“以类似卷积网络模型的[生物学上的]神经系统原型是非常牵强的。这正是为什么我把它们称为‘卷积网络’而不是‘卷积神经网络’,以及为什么我们称这些节点为‘单元’而不是‘神经元’”。尽管有这样的评论,卷积网络使用许多我们目前为止学习到的神经网络相同的思想:诸如反向传播,梯度下降,规范化,非线性激活函数等等。所以我们会遵循常规惯例,认为它们是神经网络的一种类型。我会交换地使用术语“卷积神经网络”和“卷积网络(行为)”。我也会交换地使用术语“[人工]神经元”和“单元”。

2. 正如在前面章节中做过的,如果我们对尝试不同跨距感兴趣,那么我们可以使用验证数据来挑选可以提供最佳性能的跨距。详细内容参见前面关于如何选择神经网络的超参数的讨论。相同的方法也可以用来选择局部感受野的大小—— 当然,对于使一个个 5 × 5 的局部感受野没有什么特别的。通常,当输入图像显著大于 28 × 28 像素的 MNIST图像时,更大的局部感受野往往是有益的。

3. 我还没有精确定义特征的概念。非正式地,把一个隐藏神经元检测的特征看作一种引起神经元激活的输入模式:例如,它可能是图像的一条边,或者一些其它的形状。

4. 实际上,对于我们已经在学习的 MNIST 数字分类问题,这些图像被置于中心,而且大小被归一化。所以 MNIST比“在自然环境中”找到的图像有更少的平移不变性。很多输入空间中的诸如边缘和角点的特征仍然可能是有用的。

5. 图示说明的特征映射来自我们最后的训练卷积网络,参见这里

6. 这里使用的术语是不严格的。特别地,我用“特征映射”表示的意思不是通过卷积层计算出的函数,而是隐藏神经元从该层输出的激活值。这种术语的轻度滥用在研究文献中是相当普遍的。

本文来源于哈工大SCIR

原文链接点击即可跳转

工程理论书籍神经网络深度学习卷积神经网络哈工大
返回顶部