4.1 简易卷积
卷积就是通过用一个过滤器去和一个图像做卷积运算(对应像素相乘最后九个数值相加为一个数值,然后移动一个位置),然后得到一个新的图像,这里面能显示出原图像色彩变化的边缘。
边缘检测可以是纵向的横向的或者其他角度的(取决于过滤器的形态),过滤器一般为奇数,可以是3*3,5*5,7*7等,大多数时候使用3*3。过滤器里面的数字也不用这么规整,卷积的各种论文中尝试过各种奇奇怪怪的数字组合。当然这九个数字也可以被当作参数来学习。
Padding就是在原图像外面加一层像素,使得3*3的过滤器去卷积的时候,得到的图像还是原图像大小,不至于缩小,具体有计算公式。
卷积步长就是过滤器一次移动的距离,以上默认为1,也可以为其他数字,这时输出图像的维度有一个复杂的计算公式,而且还需要涉及到向下取整,因为步长不为1的时候,极有可能在卷积的时候不是刚刚好,这个时候当过滤器一步迈出去之后如果迈到了图像的外面,则放弃这一次运算,这是惯例。
之前看的一层的都是灰度图像,正常的RGB图象是三层(一般称为三个通道),这个时候过滤器也需要三层,这三层不能分开看,应当看成一个立方体整体,然后放到图像上,将立方体的27个参数对应相乘加起来,填入输出图像的位置,所以输出图像只有一层。当然吐过你不止有一个过滤器,要识别很多不同的东西,那么增加过滤器就会增加最后输出的层数,导致最后的输出图像也是很多层。
这是一个单层的卷积神经网络,我们用了两个过滤器(两个过滤器分别提取不同特征,例如水平边缘和垂直边缘),经过卷积运算后得到两个4x4矩阵,将这两个矩阵分别进行非线性函数激活再加一个常数项,最后合在一起变成一个4x4x2的结果。类比于之前的神经网络,两个过滤器可以看作是两个神经单元,也就是看作两套参数去处理输入(这里的理解我不确定是否正确)。这一步就可以完整的理解为左下角的式子,也就是神经网络的一步操作。
简单卷积网络示意:
现在顺一遍简单卷积网络以及标记法。输入图像为一张39x39的图片,图片的信道数量为3。箭头下的f是过滤器的大小,s是步长,p是padding,最后一个是10个过滤器。根据公式计算出下一层的长和宽,信道数量是10(取决于过滤器个数),以此类推。可以看出当步长大于1的时候,后面的输出单层大小衰减的非常快,一般高度和宽度都会随着网络深度加深而逐渐减小,而随着网络加深,信道数量往往会增加。最后得到了7x7x40=1960个特征。可以将其展开为1960个单元,平滑处理后输出一个向量,然后再将其输入到一个激活函数中,至于是什么样的函数,完全取决于我们想从图片中识别出有没有猫,还是k种不同对象中的一种。
池化层:
最大池化即将输入分成一个一个小格,取每格中最大的数字组成输出。你可以把输入理解为某一个特征的集合(有可能上一步进行的是这个特征的过滤器的卷积),那么左上角的区域最大值为9可能有一个猫眼,而其他格子里没有。注意,如果步长为1,那么那个9可能会出现在好几个格子里,即输出的左上角有一片格子都是9,这也是正常的。最后,输入的每个信道都单独进行最大池化运算,所以输入和输出的信道数量保持一致。
还有一个不太常用的平均池化,顾名思义取方格内的平均值。
最大池化一般不会用padding,池化过程中没有需要进行学习的参数,只需手动的提前设置好格子大小和步长的超参即可。
卷积神经网络示例
如图,我们把第一个卷积层和后面的一个池化层合在一起成为一层,因为池化层没有参数权重,我们一般认为它属于第一个卷积层。但也有把池化层单独称为一层,只是标记方法不同。
像这样一个或几个卷积层后面跟一个最大池化,几个这样的层后面再跟着全连接层,最后加一个softmax,这样的模式很常见。超参数一般也不建议修改,应该多查阅文献看看别人都如何设置超参数的,直接使用即可。
观察上面的表格会发现,池化层没有参数,卷积层参数也不多,大部分参数都集中在全连接层。第二列数据是激活值的数量,也就是输出的值的数量,是逐渐减少的,最后提取出特征,这个数量下降的太快也会损害性能。
为什么卷积?
和只用全连接层相比,卷积层的两个主要优势在于参数共享和稀疏连接。
图中如果用全连接的方式处理这两个层,那么需要3072x4704个参数,但卷积只需要156个。第一是因为参数共享,例如你用一个垂直边缘检测的过滤器,那么这张图片无论多大,都可以在任何角落使用这个过滤器。第二个是因为稀疏连接,也就是如果过滤器是九个格子,那么输出层的一个数只与前一层的九个数有连接,其他都不影响。