上一期,我们得出了一个结构 这个最简单的卷积神经网络说到底,终究是起到一个分类器的作用 卷积层负责提取特征,采样层负责特征选择,全连接层负责分类 ‘这位同学,你说的简单,其实我对卷积层怎么实现特征提取完全不懂’ 问的好,卷积神经网络的出现,以参数少,训练快,得分高,易迁移的特点全面碾压之前的简单神经网络 而其中的卷积层可以说是这个卷积神经网络的灵魂 我们接下来会分两节来分析,卷积层到底是怎么充当“灵魂伴侣”这个角色的 正常情况下,我们输入图片是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)卷积核里面的权值是如何更新的呢? |
|