这个最简单的卷积神经网络说到底,终究是起到一个分类器的作用
卷积层负责提取特征,采样层负责特征选择,全连接层负责分类
'这位同学,你说的简单,其实我对卷积层怎么实现特征提取完全不懂'
问的好,卷积神经网络的出现,以参数少,训练快,得分高,易迁移的特点全面碾压之前的简单神经网络
而其中的卷积层可以说是这个卷积神经网络的灵魂
我们接下来会分两节来分析,卷积层到底是怎么充当 "灵魂伴侣" 这个角色的
正常情况下,我们输入图片是 RGB 格式,也就对红 (R),绿(G),蓝(B) 三个颜色
让我们来看蓝蓝的天空
什么,你看这天空是绿的?
那这位兄弟,你该去休息休息
RGB 格式大家自己谷歌吧,这也不多说了
总的来说,也就是通过对红 (R),绿(G),蓝(B) 三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色, 这三个颜色通道叠加之后,就是我们看到的 RGB 图片了
如下图
图片来自网络,侵删
我们假设,这三个分量的 pixels 分别如下表示:
红色分量
绿色分量
蓝色分量
没错,这才是机器真正看到的东西,只能看到这些值,它看不到这个小姐姐
假设我们已经有合适的滤波器了
我们下一步干什么
没错,提取特征
上次我们讲到,卷积核(滤波器,convolution kernel)是可以用来提取特征的
图像和卷积核卷积,就可以得到特征值,就是 destination value
卷积核放在神经网络里,就代表对应的权重(weight)
卷积核和图像进行点乘(dot product), 就代表卷积核里的权重单独对相应位置的 Pixel 进行作用
这里我想强调一下点乘,虽说我们称为卷积,实际上是位置一一对应的点乘,不是真正意义的卷积
比如图像位置(1,1)乘以卷积核位置(1,1),仔细观察右上角你就会发现了
至于为什么要把点乘完所有结果加起来,实际上就是把所有作用效果叠加起来
就好比前面提到的 RGB 图片,红绿蓝分量叠加起来产生了一张真正意义的美女图
我们现在再来看这三个分量的 pixels:
红色分量
绿色分量
蓝色分量
对应的三个卷积核,里面的数字即相当于权重,卷积核里面的权值是怎么来的,后面我会在反向传播算法(backpropagation)中讲到
假设我们已经知道对应分量以及卷积核
我们知道输入,知道神经元的权值(weights)了,根据神经网络公式:
Output =
我们还需要定义 bias, 不过懒得管它了,给它设为零吧,b = 0
于是
我们发生如下过程
(诶,我为什么要说我们)
因为卷积核是 3x3 的
所以我们分别对三个分量的其中一个 3x3 的九宫格进行卷积
比如我们在分量的中间找一个 3x3 九宫格
所以,结果为:
三个卷积核的输出为什么要叠加在一起呢
W1output = 1*(-1) +1*1+1*0+0*(-1)+1*0+2*1+0*(-1)+1*1+2*(-1) =1
W2output = 2*1+2*0+1*1+1*1+0*1+0*2+0*1+0*0+1*1=5
W3output = 1*(-1)+1*(-1)+0*(-1)+0*2+0*(1)+0*2+1*0+1*1+0*1 = -1
Bias = 0
Final_output =W1output + W2output+W3output+bias= 1+5-1+0 = 5
你可以理解为三个颜色特征分量叠加成 RGB 特征分量
我们在这已经知道卷积可以提取特征
但是我们也不能随机找图像的 pixels 进行卷积吧
上一次我们讲到,我们卷积输出的特征图(feature map), 除了特征值本身外,还包含相对位置信息
比如人脸检测,眼睛,鼻子,嘴巴都是从上到下排列的
那么提取出的相应的特征值也是按照这个顺序排列的
再举个例子
我们按顺序去看这三个方块
没问题,你能看出是 "2"
这样,你就看不出是'2'啦
所以,我们卷积的方式也希望按照正确的顺序
因此
我们实现卷积运算最后的方式
就是从左到右,每隔 x 列 Pixel,向右移动一次卷积核进行卷积 (x 可以自己定义)
黄 --- 蓝 --- 紫,就是卷积核移动的顺序,这里 x =1
当已经到最右
从上到下,每隔 X 行 pixel, 向下移动一次卷积核,移动完成,再继续如上所述,从左到右进行
就这样,我们先从左到右,再从上到下,直到所有 pixels 都被卷积核过了一遍,完成输入图片的第一层卷积层的特征提取
这里的 x 我们叫作 stride, 就是步长的意思,如果我们 x = 2, 就是相当每隔两行或者两列进行卷积
好了
你有没有发现,分量的 pixel 外面还围了一圈 0,这是什么鬼
我们称之为补 0(zero padding)
因为添了一圈 0,实际上什么信息也没有添,但是
同样是 stride x=1 的情况下,补 0 比原来没有添 0 的情况下进行卷积,从左到右,从上到下都多赚了 2 次卷积,这样第一层卷积层输出的特征图(feature map)仍然为 5x5,和输入图片的大小一致
而没有添 0 的第一层卷积层输出特征图大小为 3x3
这样有什么好处呢
(1)我们获得的更多更细致的特征信息,上面那个例子我们就可以获得更多的图像边缘信息
(2)我们可以控制卷积层输出的特征图的 size,从而可以达到控制网络结构的作用,还是以上面的例子,如果没有做 zero-padding 以及第二层卷积层的卷积核仍然是 3x3, 那么第二层卷积层输出的特征图就是 1x1,CNN 的特征提取就这么结束了.
同样的情况下加了 zero-padding 的第二层卷积层输出特征图仍然为 5x5, 这样我们可以再增加一层卷积层提取更深层次的特征
最近比较忙,而且心情不好,你看我连表情包都不用了,就写这么多了吧
下一次,我将着重介绍估计困扰大家的问题:
(1)一张图片的特征千千万,卷积核也有千千万,我们是怎样来确定卷积核的数值是可以提取我们想要的特征,或者说能提取使得最后分类正确的特征呢?
(2)卷积核里面的权值是如何更新的呢?
来源: http://www.92to.com/bangong/2018/01-16/33063379.html