概述
卷积神经网络(Convolutional Neural Networks, CNN)是一类包含卷积运算且具有深度结构的前馈神经网络(Feedforward Neural Networks),是深度学习(deep learning)的代表算法之一 。
对卷积神经网络的研究始于二十世纪80至90年代,时间延迟网络和LeNet-5是最早出现的卷积神经网络 ;在二十一世纪后,随着深度学习理论的提出和数值计算设备的改进,卷积神经网络得到了快速发展,并被应用于计算机视觉、自然语言处理等领域 。
卷积神经网络仿造生物的视知觉(visual perception)机制构建,可以进行监督学习和非监督学习,其隐含层内的卷积核参数共享和层间连接的稀疏性使得卷积神经网络能够以较小的计算量对格点化(grid-like topology)特征,例如像素和音频进行学习、有稳定的效果且对数据没有额外的特征工程(feature engineering)要求。
一、卷积运算
卷积运算是卷积神经网络最基本的组成部分,可用来实现边缘检测。
在图片识别中,神经网络的前几层会检测图片的边缘,后面的层可能检测到物体的部分区域,更靠后的一些层可能检测到完整的物体。其中,边缘检测可用卷积运算来实现。
要识别这样一张图片,可能要做的第一件事是检测图片中的垂直边缘——图片中的栏杆就对应垂直线,与此同时,这些行人的轮廓线某种程度上也是垂线,这些线是垂直边缘检测器的输出。同样,可能也需要检测水平边缘,比如水平的栏杆,也能被检测到。
下面以垂直边缘检测为例进行说明:
输入一个
为了
然后,将过滤器分别依次向右、向下扫描,可以得到输出矩阵各个元素的值 。以上的计算过程即为卷积运算。
如上图所示,输入图片为
不同类型的过滤器可以帮助我们检测不同的边缘线,随着深度学习的发展,为了检测出复杂图像的边缘,我们可以把这矩阵中的9个数字当成9个参数,并且在之后你可以学习使用反向传播算法,其目标就是去理解这9个参数。
将矩阵的所有数字都设置为参数,通过数据反馈,让神经网络自动去学习它们,我们会发现神经网络可以学习一些低级的特征,例如这些边缘的特征,相比这种单纯的垂直边缘和水平边缘,它可以检测出45°或70°或73°,甚至是任何角度的边缘。
二、基本操作
2.1 Padding
由前面的卷积运算可知,用一个
这样的算法有两个缺点,一是每次做卷积操作,图像就会缩小,从6×6缩小到4×4,再做几次后,图像可能会缩小到只有1×1的大小。二是如果注意角落边缘的像素(绿色阴影标记)只被一个输出所触碰或者使用;相反在中间的像素点(红色方框标记),就会有许多3×3的区域与之重叠;所以在角落或者边缘区域的像素点在输出中采用较少,这就意味着我们丢掉了图像边缘位置的许多信息。
顾名思义,padding是对输入图像进行的填充操作,可以有效解决上述问题。
在卷积操作之前,沿着图像边缘填充一层或几层0像素,上图中,p=2,表示填充了两层像素。填充后,输出矩阵的维度为:
对于选择填充多少像素,通常有Valid卷积和Same卷积两个选择:
“Valid”:不填充,即
"Same":填充后使得输出和输入大小一样,即
2.2卷积步长(Strided convolutions)
卷积补偿指的是在卷积运算中,过滤器两次扫过输入图像时的位置的距离,同padding一样为构建卷积神经网络的基本操作。
例如,用
和之前一样取左上方的
现在我们以两个步长来移动蓝框,即让过滤器跳过2个步长,左上角的点移动到其后两格的点,跳过了一个位置。然后还是将每个元素相乘并求和,得到的结果是100,作为输出矩阵的第二个元素。
以此类推,最终结果如上图所示。
在我们的这个例子里,
综上所述,如果用一个
三、推广到三维
前面所讲到的例子都是以二维灰度图像作为输入的,如果要检测RGB彩色图像的话,应该怎样进行卷积操作呢?
输入的彩色图像是
为了计算这个卷积操作的输出,我们要做的就是把这个3×3×3的过滤器放到输入图像最左上角的位置,这个3×3×3的过滤器有27个数,依次取这27个数,乘以相应的红绿蓝通道中的数字并求和,就得到了输出的第一个数字。如果要计算下一个输出,就把这个立方体滑动一个单位,再与这27个数相乘求和,就得到了下一个输出,以此类推,便是三维卷积运算的过程。
在实际应用中,如果要检测图像红色通道的边缘,则可以将过滤器的红色通道(第一层)设为
如果我们不仅仅想要检测垂直边缘,或同时检测垂直边缘和水平边缘,以及45°倾斜的边缘,和70°倾斜的边缘时,我们需要同时用多个过滤器对图像进行卷积:
第一个(黄色)
综上所述,输入一个
四、网络结构
4.1 卷积层(含线性激活层)
如图,通过两个过滤器卷积处理一个三维图像,并输出两个不同的4×4矩阵,各自形成一个卷积神经网络层。增加偏差
将输入图像看作
卷积层的符号表示(以
Input:
Output:
Each filter is:
Activations:
Weights:
Bias:
4.2 池化层
除了卷积层,卷积网络也经常使用池化层来缩减模型的大小,提高计算速度,同时提高所提取特征的鲁棒性。池化分为最大池化与平均池化:
1、最大池化(max pooling)
假如输入一个
执行过程非常简单,把
我们可以把这个
最大池化的特点:虽然含一组超参数,但并没有参数需要学习。所以,梯度下降没有什么可学的,一旦确定了和,它就是一个固定运算,梯度下降无需改变任何值。执行反向传播时,反向传播没有参数适用于最大池化。只有这些设置过的超参数,可能是手动设置的,也可能是通过交叉验证设置的。
2、平均池化(Average pooling)
这种运算顾名思义,选取的不是每个过滤器的最大值,而是平均值。上图平均池化的超级参数
3、总结
目前来说,最大池化比平均池化更常用。但也有例外,就是深度很深的神经网络,可以用平均池化来分解规模为7×7×1000的网络的表示层,在整个空间内求平均值,得到1×1×1000。
池化的超级参数包括过滤器大小
4.3 全连接层(fully connected layer)
在CNN结构中,经多个卷积层和池化层后,连接着1个或1个以上的全连接层。与MLP类似,全连接层中的每个神经元与其前一层的所有神经元进行全连接。全连接层可以整合卷积层或者池化层中具有类别区分性的局部信息。为了提升 CNN网络性能,全连接层每个神经元的激励函数一般采用ReLU函数。
最后一层全连接层的输出值被传递给一个输出,可以采用softmax逻辑回归(softmax regression)进行分类,该层也可称为 softmax层(softmax layer)。通常,CNN的全连接层与MLP 结构一样,CNN的训练算法也多采用BP算法。
五、卷积神经网络示例
例如,要利用卷积神经网络做一个动物图像的分类器,如下图:
输入RGB模式的图片,假设输入是32×32×3的矩阵,第一层使用过滤器大小为5×5,步幅是1,padding是0,过滤器个数为6,那么输出为28×28×6。将这层标记为CONV1,它用了6个过滤器,增加了偏差,应用了非线性函数,可能是ReLU非线性函数,最后输出CONV1的结果。
然后构建一个池化层,这里选用最大池化,参数
人们在计算神经网络有多少层时,通常只统计具有权重和参数的层。因为池化层没有权重和参数,只有一些超参数。这里,我们把CONV1和POOL1共同作为一个卷积,并标记为Layer1。虽然网络文章或研究报告中,也会出现卷积层和池化层各为一层的情况,这只是两种不同的标记术语。
我们再为它构建一个卷积层,过滤器大小为5×5,步幅为1,这次用10个过滤器,最后输出一个10×10×10的矩阵,标记为CONV2。
然后做最大池化,超参数
如果对Layer1应用另一个卷积层,过滤器为5×5,即
继续执行做大池化计算,参数
5×5×16矩阵包含400个元素,现在将POOL2平整化为一个大小为400的一维向量。我们可以把平整化结果想象成这样的一个神经元集合,然后利用这400个单元构建下一层。下一层含有120个单元,这就是我们第一个全连接层,标记为FC3。这400个单元与120个单元紧密相连,这就是全连接层,这是一个标准的神经网络。它的权重矩阵为
然后我们对这个120个单元再添加一个全连接层,这层更小,假设它含有84个单元,标记为FC4。将网络具体展开如下:
最后,用这84个单元填充一个softmax单元。如果我们想识别猫、狗、狮子、小鸟中狗的图像,这个softmax就会有4个输出。
从上述过程可以发现,随着神经网络深度的加深,高度和宽度通常都会减少,而通道数量会增加;激活值尺寸会逐渐变小,如果激活值尺寸下降太快,也会影响神经网络性能。
在神经网络中,另一种常见模式就是一个或多个卷积后面跟随一个池化层,然后一个或多个卷积层后面再跟一个池化层,然后是几个全连接层,最后是一个softmax。
注意,池化层和最大池化层没有参数;卷积层的参数相对较少,其实许多参数都存在于神经网络的全连接层。
六、卷积神经网络的优势
和只用全连接层相比,卷积层的两个主要优势在于参数共享和稀疏连接。
1、参数共享
观察发现,特征检测(如垂直边缘检测)如果适用于图片的某个区域,那么它也可能适用于图片的其他区域。也就是说,如果你用一个3×3的过滤器检测垂直边缘,那么图片的左上角区域,以及旁边的各个区域(左边矩阵中蓝色方框标记的部分)都可以使用这个3×3的过滤器。每个特征检测器以及输出都可以在输入图片的不同区域中使用同样的参数,以便提取垂直边缘或其它特征。它不仅适用于边缘特征这样的低阶特征,同样适用于高阶特征,例如提取脸上的眼睛,猫或者其他特征对象。
2、稀疏连接
在每一层中,每个输出值仅依赖于很少的输入特征,其他像素对输出没有任何影响。
神经网络可以通过这两种机制减少参数,以便我们用更小的训练集来训练它,从而预防过度拟合。这就是卷积或卷积网络在计算机视觉任务中表现良好的原因。
3、总结
最后,我们把这些层整合起来,看看如何训练这些网络。
比如,要构建一个猫咪检测器,有标记训练集
所以训练神经网络,就是使用梯度下降法,或其它算法,如Momentum梯度下降法,含RMSProp或其它因子的梯度下降来优化神经网络中所有参数,以减少代价函数的值。
参考
【1】吴恩达深度学习课程
【2】深度学习笔记
【3】卷积神经网络(CNN)详解 - CharlesQAQ - 博客园