写在正文前:卷积神经网络早有耳闻,但是本次的任务我觉得是我到现在为止最难理解的,这3天的时间我觉得仅仅能够看个皮毛,很多内部的东西都没搞懂。
卷积神经网络
图像识别中的卷积神经网络
- 图像识别问题:输入一张图片,将这张图片表示成里面的像素,也就是很长很长的向量,然后输出这种图片的类型。
根据神经网络的特性,我们期待说每一层都在做一种分类,比如说第一层的神经元完成最简单的分类工作,比如有没有颜色,有没有黄色,有没有斜条纹,第二层的工作比第一层复杂一些,然后依次第三层要更复杂,最后逐步输出结果。 如果我们依然用着之前的完全连接前馈网络来做影像处理,我们会需要太多的参数,举例来说,一张100 * 100的彩色图(已经很小了),最终需要30000 * 10000的参数去描写它,这样太多了,我们需要一些我们自己的知识去简化结构,于是CNN出世,所以根据上述分析,我们知道,CNN是比一般的DNN要简单(我觉得这种简单是最后的结构上展现出来的简单,需要花更多的心思去设计架构)的,是一种将全连接简化的结构。
图像识别问题的特点
为什么图像识别问题(本文引用课程上的小鸟图片例)可以用比较少的参数呢,因为其满足以下的三个特点:
特征区域小
根据之前的描述,有些神经元要做的事侦测有没有一种特征存在,而其实大部分的特征比整张图片要小很多,所以我们并不需要给它看整张图片,只要看图片的一小部分。 举例来说有一种神经元的工作就是也要侦测有没有鸟嘴的存在,很显然他只需要看一小块区域判断这是不是一个鸟嘴就可以,不需要看整张图。所以,每一个神经元连接到每一个小块的区域就好,不需要连接到整张完整的图。 其实这里我自己有个疑问,就是机器怎么确定说这个位置就有鸟嘴或者不是鸟嘴呢,这里其实学到后来在滤波器的工作方式中我自己就明白了为什么。
特征位置不影响识别
第二个意思是说:同样的特征在图像里面,可能会出现在图像不同的部分,但是代表的是同样的含义,它们有同样的形状,可以用同样的神经元,同样的参数就可以把特征侦测出来。 继续用鸟的图像举例:我们并不需要两组参数去专门政策鸟嘴是在上面还是在中间,直接用同一个神经元来干就可以。 其实在这里,我能隐隐约约感觉到卷积的方法应该是去除了图像中的位置信息的,想到之前学的向量做内积的方式,其实就能做到这一点,卷积应该也用到了这种思想。
下采样(二次抽样)
这里的内容即是说将一个图像抽去一部分行列的像素内容,其实也不会对我们的识别结果造成很大的影响,这里其实有点借鉴人的行为的意思,将一张完整的图像有规律的去除一些内容,这样也就减少了需要的参数。
CNN的架构
我们基于以上的三个特征,设计出了CNN的架构。
- Convolution 卷积
它能处理一些,区域小和特征位置不同的问题。 - Max Pooling 最大池化
它能帮助我们完成下采样的工作。 我们的内积和最大池化可以多次循环然后flatten,最后再把结过丢到一般的全连接前馈神经网络中,然后得到结果。 这就是整个CNN的整个架构,下面我们分层详细讲讲CNN的架构。
Convolution 卷积层
假设现在我们的network的input是一张6 * 6的图像,如果是黑白的,一个像素就只需要用一个数据去描述它。
解决特征区域小
卷积层里面,我们由一组过滤器(实质上是一组矩阵,假设本问题是3*3的矩阵),这组过滤器里面的参数是要学习出来的,并不需要人来设计,它再本质上一定就是神经网络中的一些参数。 从这里我们能够看出,过滤器一次看的内容并不是整张图片,这显然就解决了图像识别问题中特征区域小的问题。
解决特征位置不影响识别
过滤器的运作方式是将自身与6 * 6的图像来做内积,来最终得到一个值,3 * 3的过滤器显然要在6 * 6的图像上移动几次,这样可以覆盖掉所有图像内容,本次移动步长设置为1,可以得到一个4 * 4的矩阵。 这里我们能够看出,如果有着相同的特征,那么通过过滤器能在最后的4 * 4矩阵中得到相同的结果,那么这里就解决了特征位置的不影响识别的问题,你这一特征无论在哪里都能得到相同的结果。
过滤器
在一个卷积层中,里面有很多的滤波器,每个滤波器想要识别的特征不一样,但是工作的方法一样,将所有滤波器内积完得到的合在一起称为特征图,有几个滤波器,特征图就能有几层。
卷积法与全连法的关系
卷积法显然是一种对全连的一种简化,它实质上就是全连法拿掉一些权重的方法,老师给出的例子很形象: 如果是全连法,那么对于第一层,就要连接所有的输入,而采用滤波器之后,实质上仅连接了部分的输入,这里我们也能看出,滤波矩阵中的数实质上就是一些权重,是最后学习出来的值。 第二步是将滤波矩阵按照步长移动,当我们在做卷积时,实质上运用了相同的权重,我们叫分享权重,这样我们又做到了共用参数。 这里其实我的想法是:既然是过滤,目的就是找到想过滤出来的特征,每个过滤器一样,这一点应该确实需要保证。
Max pooling 最大池化层
这一层就是对应图像识别的二次抽样不影响结果的特点。 本层的任务就是根据每个过滤器得到的矩阵结果再分组,分组之后算出内部元素的平均或者最大,简单来说就是4个值变成一个值,这样就相当于有规律的减少了图像的内容。 做完一次卷积和最大池化后,一个6 * 6的图像变成了一个2 * 2的图像,这个2 * 2的图像的深度就代表我有几个滤波器,一个滤波器就能得到一个频道。
Flatten 压平层
这一层就是将特征图拉直,然后丢到全连接前馈网络中,然后就能得到结果。
CNN的工作原理
我自己学习深度学习以来,就觉得这是一个黑盒子,不大喜欢这种方法,这次老师也针对我这种人分析了CNN的工作方式。 此部分内容我花了很长时间还是理解不能,所以这部分总结放在日后补充。
CNN的其它应用
我们知道图像识别问题的3个特征,那么其它满足这三个特点的方法,显然也能运用CNN的方法来解决,这里仅列举,有待后续展开:
- 围棋
α
g
o
\alpha go
αgo
- 文本识别
- 语音识别
|