https://www.toutiao.com/a6641017865849799182/
2019-01-01 22:07:39
本系列已经经过八期,已经涉及到了矩阵运算、神经元、过拟和、激励函数、差错的反向传递等。本期将介绍卷积神经网络。这是本系列第一个介绍的神经网络框架。此神经网络框架在图片处理种表现优越,本期将介绍CNN的原理和处理方式。
如果对于神经网络比较陌生,建议先看下本系列第八期https://www.toutiao.com/i6610380967003554318/
另外,本期大部分图片来源于ujjwalkarn
相信大部分看过卷积神经网络新闻,都有看到过类似下面的图片。也可能听说过CNN有卷积层、Relu、Pooling(池化层)等等。
在开始介绍CNN 构造前,需要提出一个问题。我们看到的是CNN复杂的操作,但是CNN这么做的动机和作用是什么呢?
我们知道CNN应用场景是图片识别和处理。那么,我们都知道图片是由像素构成的。而像素点本身就是图片的特征,一张28*28的数字图片有784个像素点。在我之前的文章“机器学习的hello world”https://www.toutiao.com/i6567102109823533571/ 中只使用全链接层、只使用784个像素点本身作为特征值 就能够进行数字图片的识别。
那么为什么普通的图片不能参考数字图片识别一样处理呢? 其中一个很重要的原因在于计算成本。对于一个色彩斑斓高清的图片,其中像素点太多,从而导致计算成本及速度偏慢。
回想人类看图片,理解图片的内容的过程,其实我们是通过对主要特征的识别。如果稍微学过画画的朋友,这个很类似于素描。在画板上色之前,其实你已经能够基于素描判断出图片的内容。而上色是看起来更生动等等。
结论:首先,基于Computation Cost我们无法采用将原始每个像素点作为图片特征的处理方式;
其次,我们通过对图片和人类识别图片可以理解到,图片识别就是找到图片主要特征的过程(素描的例子)
那么,CNN最大特别的地方就是提取出一个高清图片中的有效特征。如上面哪个图原画很精致,但是提取出来的轮廓也有非常丰富的信息量。
带着目标和自己的理解学习非常重要,下面将介绍CNN整个框架。
上图的卷积神经网络框架中,包含了四个组成部分:
卷积层、ReLu、池化层是卷积神经网络的组成部分。了解每一个组成部分的结构,对于了解卷积神经网络尤为重要。
卷积层的主要目的是从输入图片中提取出特征值。并且卷积层需要保留输入图片像素原有的空间结构。将通过图片来展示卷积层是如何工作的。
每个图片可以看成一个像素值的矩阵。假设有一个5*5的图片,其像素是0或者1;
另外,我们也有一个3*3的矩阵,如下
然后,5*5的图片和3*3的矩阵的卷积如下面的Gif所示
回顾下上面的GIF操作。首先,我们将黄色的矩阵在绿色的原始图片中扫过。其扫过的每一个位子,我们可以通过矩阵相乘计算出一个值。 然后将这个值添加到一个3*3的矩阵中。我们最终形成来了一个新的粉色的矩阵。
在CNN的术语中,黄色的3*3矩阵被叫做“过滤器(filter)”或者“特征探测器(Feature Detector)”。而过滤后形成的粉色特征矩阵被叫做“卷积后特征”、“特征地图Feature Map”。从上面的GIF可以看出,黄色的矩阵(过滤器)扮演的作用是将特征从原始的绿色图片中提取出来的作用。
所以,很明显。不同类型的过滤器会产生不同的结果。举个例子,我们来看下面这个图
在下表中,我们能看到不同过滤器的影响。我们能通过改变过滤器中的数值达到不同的效果。这意味着不同的过滤器可以探测到不同的特征,如边线、曲线等等。
另一个更好的方式来理解卷积的操作是看下面的这个GIF图
一个过滤器(红色框)在输入的图片傻姑娘划过(卷积操作)从而产生了一个特征图。另一个过滤器(绿色)在同一个输入图片产生另一个特征图。
在实际操作过程中,过滤器的参数也是学习过程的一部分。越多的过滤器,我们就能够获得更多的图片特征,也就能更好的识别图片。
在卷积操作之后,一般会有一个ReLu的方程。ReLu是一个非线性方程:
如上图,ReLu会将矩阵中的每个负数的元素替换为0.使用ReLu的一个主要原因是将非线性引入到我们的框架中来,因为大部分现实数据都是非线性的。
ReLu的操作如下图所示,其是将卷积产出的图片进行再加工。
Pooling操作降低了每个特征图的纬度,但是保持了其原有最重要的信息。Pooling可以有多种类型,如取最大值、平均值、求和等
如下图所示,最大值池化,其是将2*2的小框作为一个Pool,然后取其中的最大值。然后形成一个新的矩阵。该新的矩阵比原有矩阵纬度降低很多,但是保留了原有的最大的特征。
下图展示了在ReLu之后的池化效果。
目前为止,我们已经介绍了卷积层、ReLu和池化操作。如下图我们有两组卷积操作。第二个卷积组合就接在第一个卷积操作之后。
这些层一起最终达到的目的是:提取了原始图片中的有效特征信息、引入了非线性方程、在保持信息的情况下减少了特征的纬度。
所有以上操作的最终结果将输出到一个 全联接层(Fully Connected Layer),将在下一部分讨论
如果对于基础神经网络不熟悉的朋友,可以去看下本系列的第八期和之前的文章“机器学习的Hello World”。
卷积和池化操作的输出结果代表着原图片的 “精华”特征。全联接层的目的是使用这些特征来进行图片的分类。例如,我们可以需要将图片分为四个类型
该层最终的输出结果总和是1. 这是因为使用SoftMax作为激活方程的原因。
以上基本上全部介绍了卷积神经网络的组成部分。我最初看到这个结果的时候,并不能理解他为什么要这么设计。但是,回过头来看,他们这么做都是有原因的。
首先,高清图片包含很多信息,也使得计算成本太高。无法将原始的每个像素点作为特征,随便一个480*800的图片就有384000个像素点;然后,我们就需要一种方法能够将特征值减少并且能够尽可能的保留原图片的信息;
知道了这个目标我们就能够理解卷积神经网络了,首先,卷积操作(过滤器)就是提取了原图片的基础信息(纬度同时也减少了一些);其次,池化操作更加是将2*2的小池子里面取最大值,又减少了纬度;除此之外,我们还能搞两次完整的卷积操作。
所以,这一切的一切的目的都是在尽可能保留信息的情况下,减少纬度。卷积神经网络做到了这点,这也是这个CNN牛的地方。