卷积层可以说是卷积神经网络最重要的一个部分,也是“卷积神经网络”名称的由来。卷积操作其实就是为了实现3.2.1节中所提到的局部连接和权重共享,如图3.7所示,用类似全连接神经网络的结构实例来理解卷积。
图3.7 一维卷积示例
对于16×16的输入图像来讲,假设使用全连接网络来进行处理,则隐藏层中每一个神经元需要与图像中的每一个像素点进行连接,因此每一个神经元就需要256个参数。而如果使用卷积神经网络进行处理,卷积核的大小设为2×1,一个卷积核就相当于是一个神经元,那么每一个神经元只需要与两个输入信号相连,意味着每个神经元只需要更新两个参数,这就是局部连接。再利用权重共享的思想,将这一隐藏层中每个神经元的两个权重参数都设置为相同的值,那么整个这一层所有的神经元模型是一样的,一个隐藏层就只需要更新两个参数。而这一个隐藏层的计算就可以看作是只有一个神经元从上到下、从左到右在输入图像上进行滚动,每次滚动与两个输入信号进行连接计算。在图3.7中,第一个隐藏层中的神经元先与 x 1 、 x 2 进行一次计算,将计算结果传至下一层,然后再以相同的模型参数与 x 2 、 x 3 进行计算并将结果传至下一层,以此类推,用同一个神经元将输入信号滚动遍历一遍,这就是一次卷积计算。
图3.7所示例子实际上是一种一维卷积,在图像处理领域,常用的是二维卷积,例如图像处理中的平滑、锐化等都采用了二维卷积操作。无论是一维卷积还是二维卷积,本质上来讲都可以看作是以卷积核为滑动窗口不断在输入图像上进行滚动。
卷积是数学分析中的一种积分变换的方法,在图像处理中采用的是卷积的离散形式。卷积神经网络中卷积层的实现方式实际上是数学中定义的互相关(cross-correlation)运算。二维卷积计算方式示例如图3.8所示。
图3.8 二维卷积示例
假设输入特征图层大小为6×6,卷积核大小为3×3。卷积核(kernel)也叫滤波器(filter),假设卷积核的宽和高分别为 w 和 h ,则称为 w × h 卷积。图3.8中所示卷积核大小为3×3,即为3×3卷积。计算时先从输入特征图层的左上角取与卷积核对应的3×3大小的区域,与卷积核按照对应位置进行各元素先相乘再累加
得到的结果就是对应输出图层中左上角位置的值,然后将卷积核看作是一个滑动窗口,从左到右、从上往下每次滑动一格,就可以得到输出特征图层的所有值。这里卷积核的滑动距离取决于卷积步长(stride)的大小。一张6×6大小的输入图层经过3×3大小的卷积核以stride=1、padding=0的卷积步长进行卷积计算后得到一张4×4大小的特征图层。特征图层参数量变化的计算公式为
式中, c 为输出特征图层大小; r 为输入特征图层大小; k 为卷积核大小; p 为填充大小padding; s 为卷积步长stride。在卷积神经网络的构建设计中,每一层卷积层可以包含多个卷积核,每一个卷积核最终卷积计算输出结果可以看作为提取出了输入图层的一种特征,因此,一个卷积层就可以提取多个特征。
相较于全连接神经网络中以单层感知器为基础的计算,卷积是一种全新的计算方式,但是实际上也是与神经网络结构密切相关的。如图3.9所示,左侧为卷积计算过程,右侧为局部连接与权重共享结构。假设输入特征图层为3×3,输入信号从左到右从上到下依次为1、2、3、4、5、6、7、8、9,对应右侧神经网络中的9个输入信号;假设卷积核大小为2×2,含有4个权重参数分别为 w 1 、 w 2 、 w 3 、 w 4 ,对应右侧神经网络中隐藏层的神经元。比如卷积核与输入特征图层左上角2×2大小区域进行卷积连接,也就是右侧1、2、4、5输入信号与第一个神经元进行连接。左侧卷积核进行滚动计算对应右侧不同神经元与不同输入特征信号之间进行连接,只不过隐藏层中所有神经元的权重参数是相同的。至此,卷积与神经网络中的局部连接、权重共享便一一对应起来了。
图3.9 卷积与神经网络结构对应关系
如图3.9所示,从输入特征图层经过2×2卷积计算到特征图只需要学习卷积核中的4个卷积参数,假设换成全连接神经网络,9个输入信号、4个神经元,则需要更新36个参数,很明显卷积大大减少了神经网络模型需要学习更新的参数量,实际上仅仅只是减少参数量还没有完全体现出卷积操作的优势所在。而经过卷积操作之后,参数量固然大大降低,但是这也意味着整个模型所能模拟的函数空间也相应变小,可以选择与真实函数模型进行对比的函数也就变少了,那么怎样才能使得卷积网络的模型不会过于简洁以致无法完全模拟真实函数模型?
从另一个角度来讲,一个卷积核实际上仅仅相当于提取了输入特征图层中的一个特征,但是一个图层显然不止一个特征,那么如何利用卷积核来提取到更多的特征呢?一个很明显的解决办法就是使用多个卷积核进行计算,也就是多核卷积。
如图3.10所示,在实际应用中,可以通过使用多个卷积核对输入特征图层同时进行卷积运算达到提取其中多个特征甚至提取出更复杂特征的目的。例如,对于图中3×3的输入特征图层,如果想要提取出图层中的3个特征,那么卷积层就需要设置3个卷积核,如果3个卷积核的大小都为2×2,卷积步长(stride)都为1,那么总共需要学习更新4×3=12个参数,可以获得3个包含着对应特征信息的大小为4×4的特征图,这就是多核卷积。
图3.10 多核卷积
此时,经过卷积层的多核卷积可以得到多个特征图,那下一层卷积层如何对这多个特征图进行计算呢?又或者,使用卷积神经网络进行图像处理,而现在大多数图像都是彩色图像,也就是大多数都是RGB三通道图像,每一层图像都对应一个特征图,此时又该如何使用卷积来处理多通道图像呢?
既然输入特征图层可以有多个通道,那么卷积核能不能也有多个通道呢?答案显然是可以的,假设经过图3.10的卷积计算得到了3个3×3的特征图,此时可以将其看作是一个具有三个通道的特征图,大小为3×3×3。此时,假设有3个二维卷积核,每个卷积核的大小都为2×2,这3个卷积核也可以看作是一个具有3个通道的卷积核,卷积核的大小就变为了3×2×2,也就是由3个二维卷积核变成了一个三维立方体形式的卷积核,也称为卷积核立方体。
如图3.11所示,每一个通道的二维卷积核对应一个通道的特征图,计算方式与多核卷积的计算方式一样,首先每个通道的卷积核分别与对应通道特征图进行卷积计算,最后再将多个通道的卷积计算结果累加得到最终输出特征图,式(3.3)为特征图中 h 1 的计算公式,用同样的方法可以求出特征图中其他三个元素的值。
在实际应用中,输入图像一般都是多通道图像,例如RGB三通道或者HSV通道,因此需要使用多通道卷积;而一张图像不可能只有一个特征,一般都需要尽可能多且完整地提取出图像中的特征,因此也需要使用多核卷积。综上,在实际卷积神经网络应用中,常常多通道卷积与多核卷积共同进行,也被称为多通道多核卷积,如图3.12所示。
图3.11 多通道卷积
图3.12 多通道多核卷积