可视化卷积神经网络的过滤器_卷积神经网络——学习总结

50c84778f3a8121abd46dde326ac5205.png

概述

卷积神经网络(Convolutional Neural Networks, CNN)是一类包含卷积运算且具有深度结构的前馈神经网络(Feedforward Neural Networks),是深度学习(deep learning)的代表算法之一 。

对卷积神经网络的研究始于二十世纪80至90年代,时间延迟网络和LeNet-5是最早出现的卷积神经网络 ;在二十一世纪后,随着深度学习理论的提出和数值计算设备的改进,卷积神经网络得到了快速发展,并被应用于计算机视觉、自然语言处理等领域

卷积神经网络仿造生物的视知觉(visual perception)机制构建,可以进行监督学习和非监督学习,其隐含层内的卷积核参数共享和层间连接的稀疏性使得卷积神经网络能够以较小的计算量对格点化(grid-like topology)特征,例如像素和音频进行学习、有稳定的效果且对数据没有额外的特征工程(feature engineering)要求。

一、卷积运算

卷积运算是卷积神经网络最基本的组成部分,可用来实现边缘检测。

在图片识别中,神经网络的前几层会检测图片的边缘,后面的层可能检测到物体的部分区域,更靠后的一些层可能检测到完整的物体。其中,边缘检测可用卷积运算来实现。

bb10ba0ecdf9ddafec501f67fa0179a3.png
图片边缘检测

要识别这样一张图片,可能要做的第一件事是检测图片中的垂直边缘——图片中的栏杆就对应垂直线,与此同时,这些行人的轮廓线某种程度上也是垂线,这些线是垂直边缘检测器的输出。同样,可能也需要检测水平边缘,比如水平的栏杆,也能被检测到。

下面以垂直边缘检测为例进行说明:

0a70fc5779a84eb6024959e3bdc17337.png

输入一个

的灰度图像(不含RGB通道),用
的过滤器(也叫做核)进行检测,其中“*”表示卷积运算。这个卷积运算的输出将会是一个
的矩阵,可以将它看成一个
的图像。

为了

矩阵中的第一个元素,我们将
过滤器覆盖在输入图像左上角(即图中绿色方框内),然后进行元素乘法运算,然后将该矩阵每个元素相加得到输出矩阵最左上角的元素,即:

然后,将过滤器分别依次向右、向下扫描,可以得到输出矩阵各个元素的值 。以上的计算过程即为卷积运算。

bb4193b5ad3097dd7e63089fc37d9798.png
边缘检测示例

如上图所示,输入图片为

的灰度图像,且左半部分为亮部,后半部分为暗部,其中间含有一条垂直边缘线。现在,我们用
的过滤器对输入图像进行卷积操作,得到
的输出图像,且该图像中间亮,两边暗,很好地检测出了输入图像的垂直边缘。

不同类型的过滤器可以帮助我们检测不同的边缘线,随着深度学习的发展,为了检测出复杂图像的边缘,我们可以把这矩阵中的9个数字当成9个参数,并且在之后你可以学习使用反向传播算法,其目标就是去理解这9个参数。

b4bc1a940393cfc9e2793cc820cf7e58.png
Sobel filter

3305e88ac2b4b308ba1e381fc55aa047.png
Scharr filter

98fb902ffe8467fa7b885ed81a5948af.png

将矩阵的所有数字都设置为参数,通过数据反馈,让神经网络自动去学习它们,我们会发现神经网络可以学习一些低级的特征,例如这些边缘的特征,相比这种单纯的垂直边缘和水平边缘,它可以检测出45°或70°或73°,甚至是任何角度的边缘。

二、基本操作

2.1 Padding

由前面的卷积运算可知,用一个

的过滤器卷积一个
的图像,最后会得到一个
的输出矩阵。因为
过滤器在
矩阵中,只可能有
种可能的位置。由此推广,如果输入一个
的图像,用
的过滤器做卷积,那么那么,输出矩阵的维度就是

fd558ad3eb480278eb22030552ca22ff.png

这样的算法有两个缺点,一是每次做卷积操作,图像就会缩小,从6×6缩小到4×4,再做几次后,图像可能会缩小到只有1×1的大小。二是如果注意角落边缘的像素(绿色阴影标记)只被一个输出所触碰或者使用;相反在中间的像素点(红色方框标记),就会有许多3×3的区域与之重叠;所以在角落或者边缘区域的像素点在输出中采用较少,这就意味着我们丢掉了图像边缘位置的许多信息。

顾名思义,padding是对输入图像进行的填充操作,可以有效解决上述问题。

cd64451d2f736cb109207a3587a2b957.png
(图片来源于网络)

在卷积操作之前,沿着图像边缘填充一层或几层0像素,上图中,p=2,表示填充了两层像素。填充后,输出矩阵的维度为:

,这样不仅避免了图像缩小,而且削弱了角落或图像边缘的信息发挥的作用较小的这一缺点。

对于选择填充多少像素,通常有Valid卷积和Same卷积两个选择:

“Valid”:不填充,即

"Same":填充后使得输出和输入大小一样,即

(计算机视觉中,f通常为奇数)

2.2卷积步长(Strided convolutions

卷积补偿指的是在卷积运算中,过滤器两次扫过输入图像时的位置的距离,同padding一样为构建卷积神经网络的基本操作。

例如,用

的过滤器卷积
的图像,并将步幅 s 设为2:

15ffc07201c216790ccb8bf43403907a.png

和之前一样取左上方的

区域的元素的乘积再相加,最后结果为91。

d7771b51bb208085676f1136975eb959.png

现在我们以两个步长来移动蓝框,即让过滤器跳过2个步长,左上角的点移动到其后两格的点,跳过了一个位置。然后还是将每个元素相乘并求和,得到的结果是100,作为输出矩阵的第二个元素。

f7f2109b257249c7ac42cc0c50604e02.png

以此类推,最终结果如上图所示。

在我们的这个例子里,

,输出的维度为

综上所述,如果用一个

的过滤器卷积一个
的图像,padding为
,步幅为
,那么,输出矩阵为
(如果商不是整数,则
向下取整)。

三、推广到三维

前面所讲到的例子都是以二维灰度图像作为输入的,如果要检测RGB彩色图像的话,应该怎样进行卷积操作呢?

ad08a8accdcfd644e308f0e843d1bed7.png

输入的彩色图像是

,第一个6代表图像高度(Height),第二个6代表宽度(Width),3代表三个颜色通道(#channels),可以把它想象成三个
图像的堆叠。为了检测图像的边缘或者其他的特征,不能将它跟原来的3×3的过滤器做卷积,而是需要一个
三维的过滤器,它的维度是
,这样这个过滤器也有三层,对应红、绿、蓝三个通道。

50752b23fc5f9b159c70223ffeae69be.png

为了计算这个卷积操作的输出,我们要做的就是把这个3×3×3的过滤器放到输入图像最左上角的位置,这个3×3×3的过滤器有27个数,依次取这27个数,乘以相应的红绿蓝通道中的数字并求和,就得到了输出的第一个数字。如果要计算下一个输出,就把这个立方体滑动一个单位,再与这27个数相乘求和,就得到了下一个输出,以此类推,便是三维卷积运算的过程。

在实际应用中,如果要检测图像红色通道的边缘,则可以将过滤器的红色通道(第一层)设为

,而绿色和蓝色通道为
。所以,参数的选择不同,可以得到不同的特征检测器,所有的都是3×3×3的过滤器。

如果我们不仅仅想要检测垂直边缘,或同时检测垂直边缘和水平边缘,以及45°倾斜的边缘,和70°倾斜的边缘时,我们需要同时用多个过滤器对图像进行卷积:

80a9319cfe3a771605632ebb41dd13a6.png

第一个(黄色)

的过滤器可能是一个垂直边界检测器或者是学习检测其他的特征,第二个(橙色)过滤器它可以是一个水平边缘检测器。让这个
的图像分别和两个过滤器卷积,得到两个不同的
的输出。做完卷积,把两个输出堆叠在一起,可以得到一个4×4×2的输出立方体。

综上所述,输入一个

的图像,用
的过滤器卷积,
,
时,可以得到输出为
。其中
为通道数量,
是过滤器的数量,也是下一层的通道数量。

四、网络结构

4.1 卷积层(含线性激活层)

d7de416a2f3bf0fb8f066399b8ffef3d.png
单层卷积网络

如图,通过两个过滤器卷积处理一个三维图像,并输出两个不同的4×4矩阵,各自形成一个卷积神经网络层。增加偏差

(实数),通过
Python的广播机制给这16个元素都加上同一偏差。然后应用非线性激活函数 ReLU,输出结果是一个4×4矩阵。最后重复我们之前的步骤,把这两个矩阵堆叠起来,最终得到一个4×4×2的矩阵。我们通过计算,从6×6×3的输入推导出一个4×4×2矩阵,它是卷积神经网络的一层,把它映射到标准神经网络中四个卷积层中的某一层或者一个非卷积神经网络中。

将输入图像看作

,也就是
,过滤器相当于参数
,应用激活函数
ReLU之前的值类似于
,所以,前向传播的操作为:

卷积层的符号表示(以

层为例):

Input:

;

Output:

= filter size;

= padding;

= stride;

= number of filters;

Each filter is:

;

Activations:

;

Weights:

;

Bias:

4.2 池化层

除了卷积层,卷积网络也经常使用池化层来缩减模型的大小,提高计算速度,同时提高所提取特征的鲁棒性。池化分为最大池化与平均池化:

1、最大池化(max pooling)

e4600ab6cf485cd196150b4cb949d2df.png

假如输入一个

矩阵,用到的池化类型是最大池化(
max pooling),执行最大池化的树池是一个
矩阵。

执行过程非常简单,把

的输入拆分成4个不同的区域。对于
的输出,
输出的每个元素都是其对应颜色区域中的最大元素值。这就像是应用了一个规模为2的过滤器,因为我们选用的是
区域,所以步幅是2,这些就是最大池化的
超参数

我们可以把这个

区域看作是某些特征的集合,也就是神经网络中某一层的非激活值集合。数字大意味着可能探测到了某些特定的特征,左上象限具有的特征可能是一个垂直边缘,或一只眼睛。显然左上象限中存在这个特征,这个特征可能是一只猫眼探测器。然而,右上象限并不存在这个特征。
所以最大化运算的实际作用就是,如果在过滤器中提取到某个特征,那么保留其最大值。如果没有提取到这个特征,可能在右上象限中不存在这个特征,那么其中的最大值也还是很小。

最大池化的特点:虽然含一组超参数,但并没有参数需要学习。所以,梯度下降没有什么可学的,一旦确定了和,它就是一个固定运算,梯度下降无需改变任何值。执行反向传播时,反向传播没有参数适用于最大池化。只有这些设置过的超参数,可能是手动设置的,也可能是通过交叉验证设置的。

2、平均池化(Average pooling)

69385afae265ee83bbfc2294a1ce771f.png

这种运算顾名思义,选取的不是每个过滤器的最大值,而是平均值。上图平均池化的超级参数

,我们也可以选择其它超级参数。

3、总结

目前来说,最大池化比平均池化更常用。但也有例外,就是深度很深的神经网络,可以用平均池化来分解规模为7×7×1000的网络的表示层,在整个空间内求平均值,得到1×1×1000。

池化的超级参数包括过滤器大小

和步幅
,常用的参数值为
,应用频率非常高,
其效果相当于高度和宽度缩减一半。也可以根据自己意愿增加表示 padding的其他超级参数,虽然很少这么用。大部分情况下,最大池化很少用 padding。目前最常用的值是0,即
。最大池化的输入为
,假设没有
padding,则输出

4.3 全连接层(fully connected layer)

在CNN结构中,经多个卷积层和池化层后,连接着1个或1个以上的全连接层。与MLP类似,全连接层中的每个神经元与其前一层的所有神经元进行全连接。全连接层可以整合卷积层或者池化层中具有类别区分性的局部信息。为了提升 CNN网络性能,全连接层每个神经元的激励函数一般采用ReLU函数。

最后一层全连接层的输出值被传递给一个输出,可以采用softmax逻辑回归(softmax regression)进行分类,该层也可称为 softmax层(softmax layer)。通常,CNN的全连接层与MLP 结构一样,CNN的训练算法也多采用BP算法。

五、卷积神经网络示例

例如,要利用卷积神经网络做一个动物图像的分类器,如下图:

43e0aa7c8f70218141c3844fb78e5723.png
(图片来源:网络)

输入RGB模式的图片,假设输入是32×32×3的矩阵,第一层使用过滤器大小为5×5,步幅是1,padding是0,过滤器个数为6,那么输出为28×28×6。将这层标记为CONV1,它用了6个过滤器,增加了偏差,应用了非线性函数,可能是ReLU非线性函数,最后输出CONV1的结果。

然后构建一个池化层,这里选用最大池化,参数

,高度和宽度会减少一半。因此,28×28变成了14×14,通道数量保持不变,所以最终输出为14×14×6,将该输出标记为
POOL1

人们在计算神经网络有多少层时,通常只统计具有权重和参数的层。因为池化层没有权重和参数,只有一些超参数。这里,我们把CONV1和POOL1共同作为一个卷积,并标记为Layer1。虽然网络文章或研究报告中,也会出现卷积层和池化层各为一层的情况,这只是两种不同的标记术语。

我们再为它构建一个卷积层,过滤器大小为5×5,步幅为1,这次用10个过滤器,最后输出一个10×10×10的矩阵,标记为CONV2

然后做最大池化,超参数

,高度和宽度会减半,最后输出为5×5×10,标记为
POOL2,这就是神经网络的第二个卷积层,即 Layer2

如果对Layer1应用另一个卷积层,过滤器为5×5,即

,步幅是1,
padding为0,所以这里省略了,过滤器16个,所以 CONV2输出为10×10×16。

继续执行做大池化计算,参数

,高度和宽度减半,结果为5×5×16,通道数和之前一样,标记为
POOL2。这是一个卷积,即 Layer2,因为它只有一个权重集和一个卷积层 CONV2

5×5×16矩阵包含400个元素,现在将POOL2平整化为一个大小为400的一维向量。我们可以把平整化结果想象成这样的一个神经元集合,然后利用这400个单元构建下一层。下一层含有120个单元,这就是我们第一个全连接层,标记为FC3这400个单元与120个单元紧密相连,这就是全连接层,这是一个标准的神经网络。它的权重矩阵为

,维度为120×400。

然后我们对这个120个单元再添加一个全连接层,这层更小,假设它含有84个单元,标记为FC4。将网络具体展开如下:

1b16d80286b6bfe6a568a2be09b76b7c.png

最后,用这84个单元填充一个softmax单元。如果我们想识别猫、狗、狮子、小鸟中狗的图像,这个softmax就会有4个输出。

从上述过程可以发现,随着神经网络深度的加深,高度和宽度通常都会减少,而通道数量会增加;激活值尺寸会逐渐变小,如果激活值尺寸下降太快,也会影响神经网络性能。

在神经网络中,另一种常见模式就是一个或多个卷积后面跟随一个池化层,然后一个或多个卷积层后面再跟一个池化层,然后是几个全连接层,最后是一个softmax

19ba99fbb4bd88d0bf7f6bca1b959a99.png

注意,池化层和最大池化层没有参数;卷积层的参数相对较少,其实许多参数都存在于神经网络的全连接层。

六、卷积神经网络的优势

和只用全连接层相比,卷积层的两个主要优势在于参数共享和稀疏连接。

1、参数共享

观察发现,特征检测(如垂直边缘检测)如果适用于图片的某个区域,那么它也可能适用于图片的其他区域。也就是说,如果你用一个3×3的过滤器检测垂直边缘,那么图片的左上角区域,以及旁边的各个区域(左边矩阵中蓝色方框标记的部分)都可以使用这个3×3的过滤器。每个特征检测器以及输出都可以在输入图片的不同区域中使用同样的参数,以便提取垂直边缘或其它特征。它不仅适用于边缘特征这样的低阶特征,同样适用于高阶特征,例如提取脸上的眼睛,猫或者其他特征对象。

2、稀疏连接

在每一层中,每个输出值仅依赖于很少的输入特征,其他像素对输出没有任何影响。

神经网络可以通过这两种机制减少参数,以便我们用更小的训练集来训练它,从而预防过度拟合。这就是卷积或卷积网络在计算机视觉任务中表现良好的原因。

3、总结

最后,我们把这些层整合起来,看看如何训练这些网络。

比如,要构建一个猫咪检测器,有标记训练集

表示一张图片,
是二进制标记或某个重要标记。我们选定一个卷积神经网络,输入图片,增加卷积层和池化层,然后添加全连接层,最后输出
softmax,即
。卷积层和全连接层有不同的参数
和偏差
。定义损失函数:

所以训练神经网络,就是使用梯度下降法,或其它算法,如Momentum梯度下降法,含RMSProp或其它因子的梯度下降来优化神经网络中所有参数,以减少代价函数的值。

参考

【1】吴恩达深度学习课程

【2】深度学习笔记

【3】卷积神经网络(CNN)详解 - CharlesQAQ - 博客园

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值