上一期,我们一起学习了深度学习中如何避免过拟合,
接下来我们一起学习下网红网络之卷积神经网络(CNN),我们多多交流,共同进步。本期主要内容如下:
人的视觉机制
CNN之卷积层
CNN之卷积核
特征图的叠加
小结
尽管IBM的深蓝计算机早在1996年就已经打败国际象棋世界冠军Garry Kasparov。但是相当一段时间内,计算机仍不能去识别一些简单的图片或者口语识别。那么为什么这些对于我们看似简单的任务,对于电脑就那么难呢?主要是这些认知对于人类来说,发生在认知领域内,包括视觉,听觉和大脑内的其他感知区域。当这些信号到达我们的意识层面的时候,已经被包装成了高级的特征。比如,当我们看到一只可爱的小狗的时候,我们已经不能选择不看到这个小狗,也不能不去注意它的可爱,所以当我们意识到看到这个小狗的时候,它已经被包装了。显然这不能解释我们是怎么认识小狗的。因此,对于这个问题,我们不能用主观的意识经验,而是要从感知模块出发,研究其原理,才能明白是如何认知的。
卷积神经网络受人大脑视觉皮层原理的启发而被发现,并且在上个世纪80年代用在图像识别中。由于最近几年,计算机计算能力的大幅度提升,数据量的暴增以及前几期我们学到的技术的发展。卷积神经网络在很多方面的表现已经超过了人。比方说图像搜索,自动驾驶,自动影视分类等,不仅于此,CNN已经不再限制于图像领域了,对于语音识别,自然语言处理等方面也有很优秀的变现。当然,这期,我们只关注图像方面。
一. 人的视觉机制
David H. Hubel 和Torsten Wiesel在上个世纪50年代末在猫和猴子上面做了一系列实验,在视觉皮层上方面得出了关键的结论,并在1981年获得了诺贝尔生理学奖。他们发现,视觉皮层的很多神经元都有一个小的局部感受野,也就意味着,神经元只对有限区域的感受野上的刺激物做出反应。如下图,局部感受野就是图中五个虚线的小圆圈。
不同的感受野可以重叠,他们共同铺满整个视野。并且他们发现,一些神经元仅仅对横线有反应,有一些神经元对其他方向的线条有反应。有些神经元的感受野比较大,能够整合比较低级的pattern。这个发现直接导致了一个观点,那就是高级别的神经元的刺激是源于相邻低级别神经元的反应。这种强有力的视觉构架使得能够去检测视野中的复杂的pattern。
这项视觉机制的研究在上个世纪80年代产生了感知机,后面逐渐发展成了现在的卷积神经网络。1998年Yann LeCun等的一篇介绍LeNet-5构架的论文是卷积神经网络发展中的一个里程碑。这个网络构架广泛用于手写字体识别,网络中有一些是之前学习过的,比方说全连接层,sigmoid激活函数。也有一些我们即将学到的新的构架如卷积层和池化层等。
为什么不用简单的有全连接层的dnn网络去识别图片呢?当然对于小的图片还好,但是对于稍微大一点的图片来说,这就是一个灾难。比方说对于一个100x100的图片,那么共有10000个输入,假如第一层有1000个神经元(已经被严重限制)的话,那么将会有1000万个连接。然而,这仅仅是第一层。而CNN用部分连接的方式来解决这个问题。
二. CNN之卷积层
CNN中最重要的一部分就是卷积层,第一个卷积层并不是连接输入图像的所有像素,只是与感受野中的像素相连,如下图:
接着第二个卷积层上的神经元连接第一个卷积层的一个局部区域。这种构架使得网络在第一层的时候专注于图像的低级特征,而在下一层的时候整合一些高级别的特征,依次类推。这种构架方式和人现实世界中视觉认知方式类似,所以CNN在图像识别领域表现优异。在全连接层的DNN中,连接层是由一个长条形式的神经元组成,在training的时候需要将二维图像展成一维的数据输入给网络。然而在CNN中,每一层都是二维的,所以输入输出的连接就比较方便了。
那么在卷积神经网络中,神经元是怎么连接的呢?一个在已知层的(i, j)位置上的神经元和上一层的谁相连呢?,如下:
其中f_h和f_w分别为感受野的高和宽。如下图:
正如图中所示,为了保证输入输出的大小一致,通常会在输入的边界进行0扩充。
当然也通过跳跃感受野,使得一个小的卷积层连接一个大的输入层也是可行的,如下图:
两个连续感受野的举例叫做stride,上图中,一个5x7的输入层连接了一个3x4的层。这里用了3x3的感受野,stride=2。这样的话上层的(i,j)位置的神经元是连接前一层的哪个位置呢?如下:
其中s_h和s_w分别为水平和竖直的stride。
三. CNN之卷积核
一个神经元的权重可以看做是一个感受野大小的图像,比如下图:
上图显示了两个可能的权重叫做过滤器,也称作卷积核。左边的卷积核可以看成一个竖直的线条,神经元用这些权重的时候,将会重点关注竖线条部分,如左上图得到的特征图1,对竖线条有增强作用。而右边的卷积核可以看作是横线条,重点关注横线条区域,如有上图的特征图2,对横线条有增强左右。因此一层神经元用同一个卷积核,将得到一个特征图,该特征图将增强与卷积核相似的区域。在训练的时候,CNN去寻找最有用的卷积核,并且通过不同的组合得到更复杂的pattern。
四. 特征图的叠加
目前为止,我们明白了二维图像的卷积层的原理,事实上,卷积层通常是有几个尺寸一样的特征图组合而成,因此更为精确的展示如下3D图:
在一个特征图中,所有神经元共享着相同的参数(权重和偏置项),但是不同的特征图有着不同的参数。神经元的感受野和之前的是一样的,但是它扩展到了前面层的所有特征图。简单的说,一个卷积层同时对输入应用多个卷积核。使之有能力在输入层上检测多个特征。此外,输入图像通常也是有多层组成,比如一张简单的彩色图就包括RGB三层,灰度图有一层,一些特殊图像可能会有红外紫外光等多层。注意到不同特征图的相同位置的神经元都是与上一层的相同位置的神经元相连接的。用一个公式来表示就是:
上公示中的z表示当前卷积层中的第k张特征图中的i行j列的位置的输出,f_h和f_w是为感受野的尺寸,s_w和s_h为stride的大小,f_n'为上一个卷积层的特征图的个数。x为上一个卷积层中第k'张特征图中i'行j'列位置的输出,b为当前层中特征图k的权重,w为当前层的第k张特征图的神经元与上一层中特征图k'的u行v列的位置相连的权重值。如此,我们将特征图进行叠加相连。
五. 小结
今天,我们从人类视觉的感受机制出发,一起学习了卷积层的原理,卷积核如何产生特征图的以及特征图是如何进行叠加的相关知识。学习的路上,多谢有你。
(如需更好的了解相关知识,欢迎加入智能算法社区,在“智能算法”公众号发送“社区”,即可加入算法微信群和QQ群)
领取专属 10元无门槛券
私享最新 技术干货