暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

【CNN】认识卷积神经网络(一)

端茶送水杂货铺 2020-03-18
687


点击蓝字关注我们

应用之道

存乎一心


Fake News   


《认识卷积神经网络》系列推文将要带大家了解什么是传说中的卷积神经网络(CNN)。阅读本系列推文需要具备一定的线性代数基础、信号与系统基础并对神经网络有一定的了解,如果实在没有……那也没有关系,欢迎吃瓜群众搬起小板凳围观。

本系列推文共有三篇,主要内容分配如下:

(一)认识CNN经典结构、认识卷积

(二)介绍卷积层

(三)介绍采样层、全连接层

本系列推文参考资料如下:

(一)台大 李宏毅 《机器学习》

(二)斯坦福 李飞飞 《CS231n》

(三)斯坦福 吴恩达 《机器学习》

(四)谷歌开发者平台及其它互联网资料

本文中如有错误,欢迎大佬们指正!




前言



本文所讨论的CNN 全称 Convolutional Neural Network (卷积神经网络),这可不是上图Trump 百般刁难的那个CNN(Cable News Network)。“神经网络”这个词近些年来可谓是异常火热,它将人类处理问题的思路从机器学习推向深度学习。神经网络就像是机器的大脑,它给了机器“思考”问题的能力。


「插点题外话」专用小卡片


笔者第一次接触神经网络时还是个大二学生,那时正好在参加学校的数学建模培训。培训老师讲了非常多很有意思的仿生算法,比如群体离子算法、模拟退火算法、遗传算法等等。直到最后,老师才讲到当时建模界的新兴杀手——神经网络。而与详细介绍其它算法不同,老师并没有深究神经网络为何能如此神奇地解决应用问题,只是三缄其口的表示:“不管什么玩意儿丢进神经网络这个黑箱子,总能得到一个让你满意的模型”。正是这种「不知内因」的无力感让神经网络近些年来风光无两的同时饱受争议。本系列推文并不会详细介绍神经网络(想进一步了解的看官可参考本公众号其它推文)。


笔者只是想借此表达一个个人观点:工程实践中,「法无定法」可能是常态。执着于过于繁琐的内部细节,强赋因果未必对工程结果有很大助益。这样的观点在卷积神经网络中也有所体现:卷积神经网络内的三大模块分别是卷积层、采样层、全连接层,但在工程实际中我们会发现采样层有时并不是必须的,甚至全连接层有时也不是必须的。正是工程实践中这些灵活的变动让卷积神经网络产生了多种新的形态,如残差网络(ResNet)。至于如何做到灵活变通可能需要像本公众号常说的那样「应用之道,存乎一心」。


01

初识CNN


卷积神经网络(也称作 ConvNets 或 CNN)是神经网络的一种,它是当今大多数机器学习实践者的重要工具。卷积神经网络在图像识别和分类等领域已被证明非常有效,因此它除了能成功做到人脸识别外,还在自动驾驶汽车等前沿科技项目中有着酷炫的表现。


自动驾驶辅助视觉系统


照片秒变名画风



原始图片


艺术效果变换后


02

预备知识


认识图像


计算机所“看到”的图像可与我们眼中的五颜六图案不同。电脑处理的图片是一组由像素值组成的矩阵(正如下图的数字8)。实质上,每张图片都可以表示为由像素值组成的矩阵。



认识卷积


喜欢摄影或者用过美图秀秀的人都应该对“锐化”这个操作不陌生,比如下图左边的小狗经过锐化后变成右边的小狗,从中可以明显地发现图片变得更“清晰”了。



以上的操作动动手指就能通过手机或者计算机轻松完成,但是你有没有更深入的思考过计算机是如何做到的。上文已经提到每张图片都可以表示为由像素值组成的矩阵,计算机是如何处理这些矩阵的呢?我们先来回顾一个非常重要的数学表达式——卷积公式:



它的物理意义大概可以理解为:系统某一时刻的输出是由多个输入共同作用(叠加)的结果


图像中的卷积


在图像分析里,卷积公式中的f(x) 可以理解为原始像素点(Source Pixel),所有的原始像素点叠加起来就是原始图。g(x)可以称为作用点,所有作用点合起来我们称为卷积核(Convolution Kernel)也可以称为过滤器(Filter),卷积核上所有作用点依次作用于原始像素点后(即乘起来),线性叠加的输出结果即是最终卷积的输出,我们称之为目标像素点(Destination Pixel)。



卷积计算过程如上图所示,最左边是原始输入图像,中间3X3矩阵是卷积层过滤器,-8就是卷积的结果。以下样例将更加生动的解释图像处理中卷积的计算步骤:


样例一:卷积运算步骤


考虑现有一个像素值仅为0和1的5 × 5大小的图像(实际图像比这个复杂的多),每个方格代表一个像素,我们称之为原始图像:



另外,考虑另一个 3×3 矩阵,我们称之为过滤器(Filter)也可称为卷积核:



上述5 x 5图像和3 x 3矩阵的卷积计算过程如下图中的动画所示:



过滤器矩阵(橙色)在原始图像矩阵(绿色)上从左上角至右下角,按照每次1个像素的速率(也称为“步长”)移动。对于每个位置,计算两个矩阵相对元素的乘积并相加,并在每个位置产生一个数字。九个位置一共产生九个整数,它们最终组合成输出矩阵(粉色)。


从上面的动画可以明显看出,对于同一张输入图像,不同的过滤器矩阵将会产生不同的特征映射即表现出不同图像处理效果。例如,考虑原始图像如下图所示:



在下表中,可以看到原始图像在不同过滤器下卷积的效果。如图所示,只需在卷积运算前改变过滤器矩阵的数值就可以执行边缘检测,锐化和模糊等不同操作 。这意味着使用不同的过滤器可以检测图像的不同特征,例如边缘、 曲线等。



讲到这里,我们才简单的认识了二维卷积。卷积其实还有更多更加深入的知识,比如三维卷积(后续推文中笔者会再做介绍)。在此,仅放张三维卷积的动图给大家感受下(一10X10X10的立体与一个3X3X3的过滤器卷积输出的立体图形):



03

CNN经典框架


在这部分中我们将开始正式谈及卷积神经网络。为了能更通俗的解释卷积神经网络的结构,我们先看一个例子(这个非常棒的例子引用自知乎蒋竺波同学):


样例二:卷积神经网络结构


假设我们在一张白纸上手写数字“2”。正常情况下,我们人眼一看到这张图的全局就能立马识别出这是个数字“2”,但机器如何看到全局呢?实际上,机器就是把所有像素放进一个神经网络,让神经网络去处理这些像素。我们把这个神经网络叫做全连接层



但这种方法给人一种非常直观的感觉——暴力。抛开准确率不说,机器大概会因此得到3676672 个参数。而这仅仅是一个32X32 的图像,已经具有如此庞大的计算量。同时,由于参数过多,训练模型极其容易产生过拟合现象(Overfitting)。


事实上,人眼是有选择性的,它并不太关心上纸上的空白区域。此外,比起数字“2”中的黑色区域,人眼更关心“2”的轮廓,因为这才是大脑基于人眼判断的主要依据。其实我们在计算机中也可以这么做。我们主要提取边缘特征,而对于不重要的的区域特征尽量丢弃,这样能减少参数或者减少提参数的过程。既然如此,我们干脆在全连接层前面加一个预处理环节来丢弃不必要的数据,我们叫它采样层(又称池化层)



然后,我们把白纸上的数字“2”撕成两个部分来看:



我们发现,大脑把两张碎片组合起来仍能识别出这是个数字“2”,但如果按照下图的顺序这么排列,大脑就懵逼了:



我们可以从这个例子中发现两个现象:

  • 仅知道物体局部图片,以及局部的相对位置,只要能将它正确组合起来,也可以完成物体识别。

  • 局部与局部之间关联性并不大,即局部的变化很少影响到另外一个局部。

至此,我们还要解决两个问题:

  • 采样层的输入原始图片还没有提取图片的特征。

  • 我们目前要处理的参数仍然非常多,我们需要对原始输入进行降维或者减少参数。

这时候,卷积就派上用场了!我们知道一个3x3的原始像素经过一个3x3的卷积核后,原始像素的特征映射成一个1x1的目标像素,这相当于特征提取。于是我们在采样层前再加上一个卷积层



但是一张图片特征非常多,一个卷积层提取的特征数量有限的,并且我们如何才能知道最后采样层选出来的特征是不是重要呢?我们在此引入一个新概念--级联分类器(Cascade of Classifiers)


级联分类器的理念主要是:从一堆弱分类器里面挑出一个最符合要求的弱分类器,用着这个弱分类器保留想要的数据。然后再从剩下的弱分类器里再挑出一个最符合要求的弱分类器,对上一级保留的数据进行处理,保留下这一级想要的数据。用类似的方法,通过不断串联几个弱分类器,经过层层筛选,最后得到我们想要的数据。


我们运用类似的思想,在原有的卷积层和采样层后再级连一组卷积层和采样层,便得到了一个完整的简化版卷积神经网络:



上图简化版卷积神经网络归根结底起到一个分类器的作用:卷积层负责提取特征,采样层负责特征选择,全连接层负责分类


从上例可以看出,卷积神经网络主要由三个基本模块构成:

  • 卷积层(Convolutional Layer)

  • 采样层(Pooling Layer)

  • 全连接层(Fully-connected Layer)



上图是一个完整的经典卷积神经网络示意图,它各环节的功能已经在样例二中有所了解:

  • 第一个卷积层提取图像最初特征,输出特征图(Feature Map)。

  • 第一个采样层对最初的特征图进行特征选择,从而去除多余特征重构新的特征图。

  • 第二个卷积层是对上一层的采样层的输出特征图进行二次特征提取。

  • 第二个采样层对上层输出进行二次特征选择。

  • 全连接层根据上层得到的特征进行分类。


至此,本文仅仅是带领大家初步认识下卷积神经网络基本模块,后续推文笔者将带大家深入了解下卷积神经网络三大模块到底是如何运作又有何内涵,感谢大家的支持,我们下期再见!



应用之道

END

存乎一心


 

本文作者:Bingunner


一位头发浓郁的信息安全工程师

爱摄影/爱数码/爱跑步的经济学人死忠粉

文章转载自端茶送水杂货铺,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论