今天我们重点介绍卷积神经网络,即CNN。
CNN架构
在图像识别领域,CNN是这样工作的:首先我们输入一张猫猫的图片,这张猫图可通过卷积层的运算,进入Max Pooling,再把输出结果作为下一个卷积层的输入,再进入Max Pooling,以此类推,这取决于你一开始设定CNN有几层。最终我们得到影像辨识的结果。。。。
Convolution
我们假定现在的input是一张6x6的图,而且这张图仅仅是黑白图,故每个像素点只用1,0即可代表。在卷积层中,其实对应的由一组filter组成,这里的filter可以类比之前讲过的全连接神经网络里的神经元。这里的filter是一个3x3的矩阵,矩阵中的每个参数是需要学习的,并不是人为设定的。
有了这样一组filter后,比如对于filter1来说,我们把它“覆盖”在那张6x6的图的左上角,这里所谓覆盖不是真的覆盖,而是将filter这个矩阵与输入的图的左上角对应的矩阵作内积,如下图所示:
比如filter1作内积的结果就是3,然后将filter1往右移动一格,具体移动的步数叫stride,是自己设定的,这里假设stride=1,也就是每次只移动一格。再作内积,然后得到-1,以此类推。。。。。每行都这么干,直到移动到右下角,这样一来,我们把每次作内积的结果再组成一个矩阵,如下图:
这个过程其实是一个矩阵压缩降维的过程,我们成功的将6x6的矩阵变成一个4x4的矩阵。filter的作用是鉴别原图中哪些地方有主对角线为1的矩阵,比如上图中框柱的2个3,表明原图的左上角和左下角是一样的。
如果我们的图不是黑白色,而是彩色的呢?那我们的输入矩阵就不再是一个二维矩阵了,每个像素点应该由RGB三原色来组成,所以输入的应该是一个立方体,或者说三维矩阵。
Convolution和Fully connected之间的关系
一句话概括:卷积其实就是全连接层中把一些边上的权重(weight)去掉的结果。
比如下图:
我们把6x6阵从左往右,从上往下,把它拉成一排,就变成了一个9输入的全连接层神经网络。
Max Pooling
这一步的操作很简单,就是将上面内积得到的4x4矩阵分成4块,如上图所示,然后每一块中的元素取平均,或者取最大,这里我们选择取最大,得到下图:
通过上面的操作,我们实际上是把一个6x6的矩阵变成了2x2的矩阵。
上面的操作可以重复很多次,得到更小的矩image。如上图所示,这个新的image我们叫做feature map,把feature map拉直,就得到flatten,拉直之后丢到全连接前馈神经网络里训练,就结束了!如下图: