卷积神经网络直观解释

卷积神经网络直观解释
==================




----------


什么是卷积神经网络?
-------------




在模式识别的传统模型中,利用手工设计的特征提取器从输入中提取相关信息,消除无关变量。一个可训练的分类器然后将得到的特征向量分为不同的类。在这种框架中,利用标准的、全相连多层网络作为分类器。
卷积神经网络 **(Convolutional Neural Networks)** 作为神经网络的一个分支,在处理目标检测和图像分类的问题上被证实了具有更加优秀的效果。WHATS MORE,相比于传统模型,卷积神经网络在人脸、物体、交通标示等检测上都取得了突破性的进展。


![Figure 1 ](https://i.imgur.com/4IJbEol.jpg "optional title")




> -  如上图所示,卷积神经网络可以识别出区域并且可以判别区域内物体属于哪类标签的能力,例如 **'bridge'**,**'railway'** 和 **tennis**。而下图则给我们展示了卷积网络在模式识别上的能力和方式。而最新的进展已经将神经网络和知识语义相结合,把神经网络推向了更高的 一个层次。






![enter image description here](https://i.imgur.com/MXPQeWn.jpg)




可见,卷积神经网络作为机器学习的一个重要工具,如何学习和理解并灵活运用是所有深度学习工作者需要掌握的一项技能。本篇文章的主要目的是揭示卷积神经网络内在机理并以直观的语言来解释。




_____________
The LeNet Architecture (1990s) 
--------
[LeNet][1] 作为最早的卷积神经网络之一,推动了深度学习领域的发展。这一开创性的工作是由 [Yann LeCun][2] 于1988年提出的,在最初的时候,[LeNet][1] 网络结构还只是用于特征识别任务例如阅读邮政编码、数字等等。




下面,我们将对 [LeNet][1] 这一结构建立一个初步的认识,了解它是如何学会识别一张图片的。虽然在此之后有许多新的结构提出,但是无一例外的都是学习了 [LeNet][1] 的主要概念和方法,所以我们有必要对它有个清晰直观的了解。


![](https://i.imgur.com/qBnTp4P.jpg)




图3所示的卷积神经网络和最开始的LeNet的结构类似,它将一张图片作为输入,输出的是4个类别:dog,cat,boat和bird。(最初时的LeNet网络主要用于字符识别任务)。在上面的途中,在接收到一个船的图像后,网络正确的给船分配了0.94的概率,显而易见的是输出层的概率之和为1。


从上面的过程我们可以得出卷积神经网络的4个基本步骤:


 >1. 卷积(Convolution)
 >2. 非线性(ReLU)
 >3. 亚采样(Pooling)
 >4. 分类判别(Fully Connected Layer)


这些操作是每个卷积神经网络的基本构建模块,接下来我们将试图理解每一个操作背后的意义。




_____________
卷积:特征的提取 
--------




卷积神经网络的**卷积**二字正是从卷积算子而来,而卷积的主要目的是从输入的图像中进行特征提取。卷积通过对输入数据的一部分输入变幻,来维持图像像素之间空间上的关系,进而得到图像的特征。在这里我们不对卷积过多的进行数学细节上的讨论,而是把关注点放在卷积是如何作用于图像上的。


`考虑一个5x5的图像,对图像进行二值化后得到下列5x5的矩阵`




![enter image description here](https://i.imgur.com/b7J4xZS.jpg)


`同样我们取一个3X3大小的矩阵作为我们的“卷积核”`


![enter image description here](https://i.imgur.com/fnVtYWG.jpg)


`现在可以看到一个3x3的卷积核是如何作用在一个5x5大小的图像上并产生结果`


![enter image description here](https://i.imgur.com/ZSatG38.jpg)


让我们来看看上面的计算是如何进行的。我们每次将橙色矩阵在我们的原始图像滑动一个像素的位置,移动的距离也叫“Stride”。我们将对应矩阵的元素进行相乘在相加,得到的最终的整数作为输出矩阵的元素(粉红色)。


在卷积神经网络术语中,我们把这个3x3的矩阵称为“过滤器”、“卷积核”或者“特征提取器”。而通过“卷积核”与原图像进行卷积而产生的矩阵叫做“特征图”或者“卷积特征”。在这里,我们需要理解的是“卷积核”是作为对原图像进行特征提取的一个重要手段。


>显而易见的是,不同的滤波器对于相同的图像进行卷积,会产生不同的特征图。我们以下面一张图像作为例子


![enter image description here](https://i.imgur.com/oWTqFul.jpg)




>在下面的表格中,我们可以看到不同的滤波器对上述图像的卷积影响。如图所示,我们可以通过改变卷积核的值完成诸如边缘检测,锐化等操作。这意味着不同的卷积核能够提取到不同的图像信息,例如边缘,曲线等等。


![enter image description here](https://i.imgur.com/y58E4GI.jpg)




在实际运用中,一个神经网路将在训练的过程中学习这些滤波器等值(虽然我们仍然要制定参数,比如滤波器的数量,大小,网络等架构等等)。但有一点我们可以预见的是,更多的滤波器会使我们获得更多的特征图,同时也意味着对图像更多的信息的提取。


特征图的大小是由以下三个参数决定的:


> - Depth:深度对应于我们卷积运算的过滤器的数量。在下图中,我们使用了三个不同的滤波器对原始图像进行卷积,从而产生了三个不同的特征映射。你可以把这三个特征映射为堆叠的二维矩阵,所以特征映射的“深度”是三。
> - Stride: 步长是我们每次滑动过滤器时跨过的像素个数。当步长为1时,我们每次滑动跨过一个像素。同理,当步长为2的时候,我们每次跳过两个像素,这样产生的特征图像就会变小。
> - Zero-padding: 有时,把输入矩阵周围的边界增添一层0元素是有好处的,方便从初始位置以步长为单位可以刚好滑倒末尾位置,通俗地讲就是为了总长能被步长整除。
___________
激活函数:ReLU 
------------
在之前的卷积网络操作过程中可以看到一个重要的操作就是ReLu(Rectified Linear Unit),这是一个非线性的激活函数。与传统线性激活函数相比,非线性的ReLU对中央区域信号增益较大,对两侧区域的信号增益小,在信号的特征空间映射上有很好的效果。非线性的映射有:Sigmoid、Tanh、ReLU、Leaky ReLU、ELU、Maxout等,大多数用的是ReLU。ReLU收敛快(比sigmoid函数至少提高6倍),求梯度简单,但是较脆弱,它的图像如下: 


![enter image description here](https://i.imgur.com/Y5qvTgT.jpg)


ReLu是一个应用于每个元素的操作,它将所有负值元素置零。ReLu的目的是卷积操作具有一定的非线性性。应为现实世界中绝大多数的数据是非线性的,而卷积操作是一种线形的操作,所以我们考虑引入非线性函数ReLu


我们从下面一张图来具体看一下ReLu这个函数是如何作用在一张图上的。左边是一张输入的特征图像,右边是使用ReLu操作后得到的特征图像。


![enter image description here](https://i.imgur.com/nIOV9t9.jpg)


____________
增强不变性:Pooling 
-------


Partial Pooling也叫做采样或者下采样,池化层夹在连续的卷积层中间,用于压缩数据和参数的量,能够有效的减少每个特征映射的**维度**但是保留最重要的信息。采样一般可以分为以下几个类型:**Max** ,**Aveage** ,**Sum** 等类型。


就Max Pooling来说,我们定义了一个空间领域(例如,一个2x2的窗口),并从窗口提取最大的元素作为该窗口的特征与三俗。当然,出了采用最大的元素,我们也可以采取平均采样或者对窗口所有元素求和进行采样。在实践中,Max Pooling是较为常用的手段。


图10显示了Max Pooling采样对特征图像进行操作的过程,空间领域取一个2x2的窗口。我们通过滑动窗口进行采样,并取每个窗口内4个元素的最大值作为输出元素,这有效的减少了特征图的维度。


![enter image description here](https://i.imgur.com/N7mzqBC.jpg)


图12显示了采样过程对图9产生的特征图像作用后的效果


![enter image description here](https://i.imgur.com/N7mzqBC.jpg)


采样(Pooling)的功能就是逐步减少输入图像的空间尺寸,具体来说:
> - 使输入的特征尺寸更小更容易操作
> - 减少网络参数和计算操作,以此来控制[过拟合][4]
> - 使网络具有一定的旋转、扭曲、平移不变性。(应为我们才采用了在pooling的时候取的是Max value或者Everage value,所以轻微的扭曲不会影响最终结果的输出)
> - 不论目标对象在哪里我们都可以检测到目标


___________
Story so far 
---------
![enter image description here](https://i.imgur.com/jH6S5Ea.jpg)




到目前为止,我们已经看到了如何卷积,ReLu,和采样。重要的是要了解这些都是卷积神经网络的基本构建模块。如图13所示,我么有两层卷积,ReLu,和采样。第一卷积层通过对原始图像进行卷积得到6个特征图像,然后ReLu对这6个图像分别进行一次激活操作,然后再对6个图像分别进行一次Max采样。同理,第二个卷积操作的输入是第一个采样后的输出。


卷积,ReLu,和采样层,通过这几个层的复用,对原图像进行提取信息,并且降低特征维数。第二个Pooling层的输出是作为下一个全联接层的输入,接下来我们将讨论全联接层的工作。
__________
全联接层:FC 
---------


全连接层(Fully Connected)是一种传统的多层感知器,使用softmax作为输出的激活函数。“完全连接”这个术语意味着上一层的每一个神经元都连接到下一层的每一个神经元。


卷积层和采样层的输出代表着输入图像高层次的特征。全连接层的目的是使用这些特征作为分类的依据,在此基础上对输入图像进行判别。例如,我们假定图像的分类任务有4个可能的输出,如图14所示。


![enter image description here](https://i.imgur.com/bcxdUEz.jpg)




一个很直观的思路是,把卷积层和采样层后得到的特征进行组合,添加一个全联接层能够有效利用提取的局部信息,可以说是以一个更加“全局”的视角去看待问题。


> 全连接层的输出概率的总和为1,这是通过使用**Softmax**作为的全联接层输出的激活函数。










----------




综合 
-------------------


正如之前我们所说的,卷积+采样的作用是提取**图像特征**,全连接层的作用则是作为一个**分类器** ,我们把之前的几个概念综合起来,就可以得到一个最初始的卷积神经网络。




![enter image description here](https://i.imgur.com/IwCUCJs.jpg)


我们把卷积神经网络的整体训练过程总结如下:




> **Note:**


> - **Step 1** : 初始化所有的卷积核参数和权重
> - **Step 2** : 将图像输入网络,通过正向传播步骤(卷积,ReLu,采样,全连接等操作),得到每个分类的概率输出
> - **Step 3** : 计算输出层的总误差  $$ Total Error = ∑  ½ (target probability – output probability) ²$$
> - **Step 4** : 使用反向传播算法计算误差的梯度值,然后使用梯度下降的方法去更新所有卷积核的权重和参数值,以减小最终输出的总误差的值
> - **Step 5** : 对所有输入图像重复步骤2-4




通过以上步骤去训练卷积神经网络,这意味着所有的参数和权重已经经过“优化,以最适合训练集的分类。当一个新的图像输入到网络时,网络通过正向传播步骤输出一个概率值(如果我们的数据集足够大),则我们能够通过训练的网络获得一个准确的分类。


----------




直观理解 
-------------


总的来说,更多的卷积层,就能提供更复杂更全面的图像特征。例如,在图像分类的过程中,第一层卷积层会从原图像检测边缘,然后在第二层的时候使用边缘检测来检测物体的形状,更深的层此会使用这些形状来获取更高层的特征信息。如下图所示,当然这里只是为了说明这个概念,现实生活中的卷积核提取到的特征可能是难以理解的。


![enter image description here](https://i.imgur.com/P120xmq.jpg)




Adam Harley开发了一个基于卷积神经网络的手写数字[MNIST][4]的可视化网页,从中我们可以更直观的感受神经网络具体工作流程。我么将看到卷积神经网络是如何对一个手写**数字8**进行操作的。




![enter image description here](https://i.imgur.com/QXEkURj.jpg)




输入图像是一张32x32的图像。第一层卷积层由6个5x5的卷积核组成(步长为1),如图所看到的,6个卷积核对图像做卷积操作后得到一个深度为6的特征图像。


第一层卷积层后紧跟真的是一层采样层。采样层由一个2x2的max采样层组成,该层对卷积层的6个特征图分别进行pooling操作。Pooling层的到的特征图的每个元素都是之前4x4矩阵中的最大值。


![enter image description here](https://i.imgur.com/0fGw8La.jpg)


在第一层Pooling后紧接的是由16个5x5的卷积核组成的卷积层。再对得到的特征图进行一次max pooling,这与之前的操作是类似的。然后是3个全联接层。一共有:


> - 第一层FC一共有120个神经元
> - 第二层FC一共有100个神经元
> - 第三层,也是输出层一共有10个神经元分别对应着10个数字


注意在图中,输出层中的10个节点每个都与第二层FC的100个节点完全链接。此外,输出层唯一明亮的节点对应于“8”,意味着网络正确的分类我们的手写数字。


![enter image description here](https://i.imgur.com/ImAosC1.jpg)




----------




其它的卷积神经网络 
-------------






> - **LeNet (1990s)**: Already covered in this article.
1990s to 2012: In the years from late 1990s to early 2010s convolutional neural network were in incubation. As more and more data and computing power became available, tasks that convolutional neural networks could tackle became more and more interesting.
> - **AlexNet (2012)** – In 2012, Alex Krizhevsky (and others) released AlexNet which was a deeper and much wider version of the LeNet and won by a large margin the difficult ImageNet Large Scale Visual Recognition Challenge (ILSVRC) in 2012. It was a significant breakthrough with respect to the previous approaches and the current widespread application of CNNs can be attributed to this work.
> - **ZF Net (2013)** – The ILSVRC 2013 winner was a Convolutional Network from Matthew Zeiler and Rob Fergus. It became known as the ZFNet (short for Zeiler & Fergus Net). It was an improvement on AlexNet by tweaking the architecture hyperparameters.
> - **GoogLeNet (2014)** – The ILSVRC 2014 winner was a Convolutional Network from Szegedy et al. from Google. Its main contribution was the development of an Inception Module that dramatically reduced the number of parameters in the network (4M, compared to AlexNet with 60M).
> - **VGGNet (2014)** – The runner-up in ILSVRC 2014 was the network that became known as the VGGNet. Its main contribution was in showing that the depth of the network (number of layers) is a critical component for good performance.
> - **ResNets (2015)** – Residual Network developed by Kaiming He (and others) was the winner of ILSVRC 2015. ResNets are currently by far state of the art Convolutional Neural Network models and are the default choice for using ConvNets in practice (as of May 2016).




  [1]: http://math.stackexchange.com/
  [2]: http://daringfireball.net/projects/markdown/syntax "Markdown"
  [3]: https://github.com/jmcmanus/pagedown-extra "Pagedown Extra"
  [4]: http://meta.math.stackexchange.com/questions/5020/mathjax-basic-tutorial-and-quick-reference
  [5]: https://code.google.com/p/google-code-prettify/
  [6]: http://highlightjs.org/
  [7]: http://bramp.github.io/js-sequence-diagrams/
  [8]: http://adrai.github.io/flowchart.js/

你可能感兴趣的:(卷积神经网络直观解释)