【零基础深度学习教程第五课:卷积神经网络 (下)】

一、三维卷积

1.1 三维卷积案例

1.1.1 卷积过程概述

一张彩色图像是以三维矩阵的形式存储在计算机中的,假设对一张彩色图像进行卷积操作,那么就涉及到三维卷积。要对一个三维矩阵进行卷积操作,那么所使用的过滤器(卷积核)也是三维的(卷积核的每一维对应红绿蓝三个通道)。假设某张彩色图像的维度为 6×6×3(第一个6为高、第二个6为宽、第三个3为通道数),使用 3×3×3(第一个3为高、第二个3为宽、第三个3为通道数)的过滤器进行卷积,卷积将会得到一张4×4的二维图像:

在这里插入图片描述
注:三维图像长和宽与过滤器的长和宽可以自由选择,但是两者的通道数必须相同

1.1.2 卷积计算描述

为了描述方便,现将 3×3×3 的过滤器(卷积核)视作于一个三维立方体:

  • 第一步:将过滤器立方体放在左上角位置

在这里插入图片描述
这个过滤器立方体有 3×3×3 = 27个数,用这 27 个数依此与彩色图像中红蓝绿三通道相对应的的数相乘后再相加,然后就得到了4×4矩阵中的第一个数字。

  • 第二步:以此类推,后面的步骤就与二维卷积同理,直至得到4×4矩阵。

1.2 三维卷积检测边缘

1.2.1 情况一

假设只想检测这张彩色图像中红色通道的垂直边缘,那么可以将这个三维过滤器的第一个通道设置为:

在这里插入图片描述

而绿色通道与蓝色通道全设为0:
在这里插入图片描述

将这三个通道叠加在一起组成一个3×3×3的过滤器,该过滤器只能检测红色通道中的垂直边缘。

1.2.2 情况二

假设你想检测整张图片的垂直边缘,那么就将这个3×3×3过滤器的每个通道都设置为:

在这里插入图片描述

将三个上面的矩阵叠加在一起形成的过滤器,就是一个边缘检测器。通过过滤器中不同参数的选择可以得到不同的特征检测器。

1.3 同时检测多种边缘

假设现在想同时检测图像中的垂直边缘、水平边缘、70°倾斜边缘、45°倾斜边缘…换句话说,想同时使用多个过滤器怎么办?假设现在想同时检测一张彩色图像的水平边缘和垂直边缘:

  • 第一步:用一个 3×3×3 的过滤器检测水平边缘,得到一张 4×4 的输出图片

在这里插入图片描述

  • 第二步:又用一个 3×3×3 的过滤器检测垂直边缘,又得到一张 4×4 的输出图片

在这里插入图片描述

  • 第三步:将两个 4×4 矩阵进行叠加,得到一个4×4×2的输出立方体

在这里插入图片描述
综上,输入一个 6×6×3 的彩色图像三维矩阵,经过卷积层中的两个过滤器的卷积,得到一个 4×4×2 的输出立方体。本例中仅仅是检测彩色图像中垂直边缘和水平边缘两个特征,利用上述方法还可以检测图像中成千上万个特征,最后得到的输出矩阵的维度取决于检测的特征数(比如本例中检测两个特征,那么输出矩阵就是三维的)。

1.4 公式总结

假设卷积步长为1padding为0,输入一个 n × n × nc 的彩色图像三维矩阵(nc 为通道数),然后用 mf × f × nc 的过滤器进行卷积,最后会得到 (n-f+1) × (n-f+1) × m维度的输出矩阵。
注:三维矩阵中的通道数(channel)又可以叫三维矩阵的 “深度”,计算机视觉相关文献中的通道数与深度其实是一个意思,不要混淆。

二、单层卷积网络

2.1 过程说明

如今已经学习了利用卷积操作同时检测图像的水平与垂直边缘,如下图:
在这里插入图片描述
现将上述过程融合进一个卷积神经网络中(该过程其实可以看作卷积神经网络的第一层),下面将第一层中发生的运算进行说明(为了方便说明,我会给矩阵编号):

  • 第一步:在输出的两个 4×4 的一号矩阵后面加上一个偏置 b,通过广播机制实现 b 与 4×4 矩阵之间相加,得到两个新的二号矩阵
  • 第二步:将这两个新的二号矩阵作为ReLU函数的输入,通过ReLU函数的非线性运算得到另一个4*4的三号矩阵
    在这里插入图片描述
  • 第三步:将这两个新的4×4的三号矩阵堆叠起来得到一个4×4×2的三维矩阵。至此,一个6×6×3的三维矩阵经过一系列的运算得到了一个4×4×2的三维矩阵,以上过程就是卷积神经网络中的第一层。

2.2 与标准神经网络对比

在之前学习过的标准神经网络中第一层发生的计算为:接收输入特征x,通过线性运算得到z[1]:z[1] = w[1]x+b[1](x也可写作a[0]),然后将z[1]作为激活函数g(x)的输入,计算得到激活值a[1]:g(z[1]) = a[1]。现将上述过程映射到卷积神经网络的第一层中:

  • 而在卷积神经网络的第一层中,所谓的a[0](也就是x)其实就是输入的彩色图像,例如之前的6×6×3 的三维矩阵;
  • 过滤器相当于之前的w[1],只不过在常规神经网络中 w[1] 与 a[0] 之间做的是乘法,而卷积神经网络中的 w[1] 与 a[0] 之间做的是卷积(无论是常规神经网络中的乘法,还是卷积网络中的卷积,都是线性运算);
  • 通过卷积后得到的一号矩阵与偏置b相加后得到的二号矩阵相当于z[1]
  • 将z[1] (二号矩阵)放入激活函数中进行计算,将计算出的三号矩阵进行叠加形成最后的a[1]

在这里插入图片描述
以上就是卷积神经网络第一层中,输入的 a[0] 经过一系列运算得到 a[1] 的过程!

2.3 卷积神经网络避免过拟合原理

在上述例子中使用了两个过滤器,对图像中的两个特征进行了提取。同理我们还可以使用更多的过滤器对图像中更多的特征进行提取。
现假设用十个过滤器对输入图像的十个特征进行提取,已知一个过滤器含 3×3×3=27 个参数,再加上一个偏置项b,相当于一个过滤器含有 28 个参数,那么十个过滤器就含 280 个参数,也就是说卷积神经网络的第一层中含有 280 个参数。
卷积神经网络之所以能处理大数据的原因就在于:无论输入图像有多大,第一层的参数始终是280个,参数的数量不受输入数据大小影像(对于后面其他层也是一样),卷积神经网络所具有的这个特征被称为“避免过拟合”

2.4 卷积神经网络标记说明

2.4.1 卷积神经网络第 l 层中的各个标记

  • f[l] 来表示第 l 层过滤器的长或宽(因为过滤器的长肯定等于宽);
  • p[l] 来表示第 l 层的padding,padding可以指定为Valid型或Same型;
  • s[l] 来表示第 l 层的卷积步长;
  • nc[l] 来表示第 l 层所使用的过滤器数量;
  • a[l] 来表示第 l 层的输出的激活值;
    注:一般用 nH[l] 来表示第l层的输出图片的长; nW[l] 来表示第l层的输出图片的宽。

2.4.2 一些值的计算

  • l 层的输入图片的大小为:nH[l-1] × nW[l-1] × nc[l-1]
  • l 层的输出图片的大小为:nH[l] × nW[l] × nc[l]
  • l 层中过滤器的大小为:f[l] × f[l] × nc[l-1] (因为该层过滤器的深度与该层输入矩阵的深度必须匹配,所以为nc[l-1]);
  • l 层的权重参数数量为:f[l] × f[l] × nc[l-1] × nc[l]
  • l 层的偏置参数数量为:nc[l]
  • l 层的总参数数量为:f[l] × f[l] × nc[l-1] × nc[l] + nc[l](即权重参数数量加偏置参数数量);

三、简单卷积网络示例

3.1 案例演示

需求:对一张 39×39×3 的彩色图片进行分类或识别。过程如下:

3.1.1 第一卷积层

  • 输入a[0]:39×39×3的图片(即nH[0] = nW[0] = 39,nc[0] = 3);
  • 设第一卷积层采用10个3×3×3过滤器进行卷积,即f[1]=3;
  • 设卷积步长s[1]=1,padding为p[1]=0;
  • 经过卷积的图片加上偏置放入激活函数计算得到输出a[1]:37×37×10的图片(即nH[1] = nW[1] = 39,nc[1] = 3);

在这里插入图片描述

3.1.2 第二层卷积

  • 输入a[1]:37×37×10的图片
  • 设第二卷积层采用 20 个 5×5×10 过滤器进行卷积,即f[2]=5;
  • 设卷积步长s[2]=2,padding为p[2]=0;
  • 经过卷积的图片加上偏置放入激活函数计算得到 输出a[2]:17×17×20 的图片(即nH[2] = nW[2] = 17,nc[2] = 20);

在这里插入图片描述

3.1.3 第三层卷积

  • 输入a[2]:17×17×20的图片
  • 设第三卷积层采用 40 个 5×5×20 过滤器进行卷积,即f[3]=5;
  • 设卷积步长 s[3]=2,padding为 p[3]=0;
  • 经过卷积的图片加上偏置放入激活函数计算得到输出a[3]:7×7×40的图片(即nH[3] = nW[3] = 7,nc[3] =40);

在这里插入图片描述
至此,对一张 39×39×3 的图片的卷积操作就做完了(卷积层一般就分为三层卷积),经过卷积层,原图成为了 7×7×40 的三维矩阵,相当于提取了 7×7×40=1960 个特征。将卷积层中的三层卷积概括如下:

在这里插入图片描述
将提取到的这1960个特征展开成1960个特征单元,将这1960个特征输入进逻辑回归单元或sotfmax回归单元进行分类预测(这里暂不添加全连接层),得到最终的预测结果:
在这里插入图片描述

3.2 过程总结

以上就是一个简单的卷积神经网络对图片进行分类的过程。对于卷积神经网络来说,一般输入的图片长和宽比较大、深度比较小(例如 39×39×3),而随着网络深度的加深,图片长和宽逐渐减小、深度逐渐增大(例如 7×7×40),其实在所有卷积神经网络内部的卷积层基本数都是上面这种变化趋势。使用卷积神经网络进行分类还会涉及到很多超参数的选择,后续课程将对超参数的选择提供一些建议。
可以发现:卷积层的作用就是对分类对象进行特征提取,特征提取之后的步骤与之前学习的标准神经网络无异,所以卷积神经网络与传统机器学习模型或标准神经网络的区别就在于,卷积神经网络的输入直接是分类对象而不是其特征,特征提取步骤是在模型内部自动完成的;而传统机器学习模型与标准神经网络的输入是经过人工特征提取后的特征

3.3 标准卷积网络构成

一个标准的卷积神经网络一般由三层结构构成,分别是:卷积层(CONV)、池化层(POOL)、全连接层(FC)。虽然仅用卷积层也可以构造出很好的神经网络,但是大部分神经网络架构师都会加上池化层和全连接层。

四、池化

卷积神经网络中除了卷积层还有池化层,它能起到缩减输入图片规模,提高计算速度、提高所提取特征的鲁棒性等作用。池化操作分为最大池化平均池化两类。

4.1 最大池化(max pooling)

输入一张 4×4 的灰度图像,希望使用最大池化操作提取该图像特征:
在这里插入图片描述

  • 第一步:将目标矩阵拆分成不同区域 (假设池化过滤器为 2×2)

在这里插入图片描述

  • 第二步:使用一个2×2(即f=2)的过滤器,设池化步长为2(即s=2)。第一步将这个过滤器对目标矩阵中的紫色区域进行池化操作,其实就是选出区域中的最大元素值9:

在这里插入图片描述

  • 剩下的步骤以此类推,依此选出四个区域的最大元素值,再组成2×2的矩阵即可:

在这里插入图片描述
注:池化操作中的超参数仅有 f、s,而且这两个参数不需要学习,意味着这两个参数一旦确定,就不会改变。以上就是池化的全部过程,其实可以将输入矩阵看作是某张图片经过卷积层提取得到的特征矩阵(也许紫色区域就是检测人脸照片中的眼睛部分)。最大池化操作的功能就是将每一个象限内提取到的某个特征,保留在最大池化操作的输出矩阵中。

4.2 最大池化案例演示

输入一个 5×5 的矩阵,使用 f=3 的过滤器,在池化步长 s=1 的情况对其进行最大池化操作:
在这里插入图片描述

  • 第一步:找到第一个区域中的最大元素值9

在这里插入图片描述

  • 第二步:找到第二个区域中的最大元素值9

在这里插入图片描述

  • 剩下的步骤以此类推,最终得到 3×3 的输出矩阵:

在这里插入图片描述
以上就是对一个二维输入矩阵进行最大池化操作的演示。

4.3 平均池化

另一种不常用的池化操作为:平均池化。顾名思义,平均池化与最大池化的唯一区别就是过滤器提取的不是区域最大值,而是区域平均值,例如选取 f=2 的过滤器,池化步长 s=2,对下面这个矩阵进行平均池化操作:
在这里插入图片描述
注:在卷积神经网络中最大池化比平均池化更为常见。

4.4 总结

池化的超级参数包括过滤器大小f和池化步长 s(注意这两个操作无需改变)。常用的参数组合为 f=2、s=2,其效果相当于高度和宽度缩减一半。也可以根据需求选择padding,一般情况下 p=0。在 p=0 的情况下,当池化层输入矩阵大小为 nH × nW × nc 时,输出矩阵的大小将为:

在这里插入图片描述
由公式可知,池化操作不会改变矩阵的深度。

五、全连接层

其实所谓的全连接层可看作之前学习的标准神经网络,下面通过一个例子进行介绍。输入一个三维矩阵,经过卷积层和池化层的操作之后会得到一个输出矩阵(假输出矩阵大小为 7×7×40),此时将这个输出矩阵展开成 1960 个特征单元,作为全连接层的输入:

  • 第一步:将这1960个输入矩阵与第一层全连接层进行全连接
    在这里插入图片描述
  • 第二步:将全连接层1与连接层2进行全连接

在这里插入图片描述

  • 第三步:同理

在这里插入图片描述

  • 第四步:将全连接层3与一个回归单元连接(逻辑回归或softmax回归),计算得到输出

在这里插入图片描述
以上就是经过卷积与池化操作后的特征矩阵通过全连接层得到最终预测结果的全部过程,其中全连接层的数量可以手动设定(本例中设置了三层全连接层)。其实上面这个过程,跟之前学习的标准神经网络分类过程完全相同!

六、标准卷积神经网络

6.1 案例演示

一个标准的卷积神经网络包含:卷积层、池化层、全连接层。下面通过一个例子演示标准CNN流程。
需求:利用卷积神经网络对一张 32×32×3 的彩色图片实现特征提取与分类。

  • 第一步:第一层中使用6个553的过滤器进行卷积,步长s=1、padding=0。输出为一个28286的矩阵(计算过程省略),将这一层标记为CONV1。
    在这里插入图片描述

  • 第二步:在CONV1之后构建一个池化层。使用最大池化,参数设置为f=2、s=2、p=0,将这一层标记为POOL1。
    在这里插入图片描述
    注:一般将卷积层与池化层组成的整体看作卷积神经网络中的一层,如下所示
    在这里插入图片描述

  • 第三步:在layer1后面构建零一个“卷积+池化”的组合作为layer2
    在这里插入图片描述

  • 将经过了layer1和layer2两层卷积和池化操作后得到的5510矩阵展开成一个400*1的一维向量,将这个向量与一个含有120个单元的全连接层进行全连接,将这一层称为FC3。
    在这里插入图片描述

  • 按照全连接步骤,依此在后面再连接一个含84个单元的全连接层FC4,在FC4之后连接一个回归单元进行最终分类,得到输出。
    在这里插入图片描述

  • 随着神经网络深度的加深,矩阵的高度和宽度会逐渐减小,深度会逐渐增加。上面例子中的卷积神经网络构成很典型(一个卷积层搭配一个池化层),另一种常见的模式为多个卷积层搭配一个池化层。至此,一个完整的标准卷积神经网络预测过程就告一段落!

6.2 过程分析

以下是关于上述卷积神经网络中涉及的各层激活值形状、大小与超参数数量的一个汇总表。

在这里插入图片描述
由表可知:

  • 池化层都没有参数,因为池化层里面的f和s是一个固定的值不会改变;
  • 卷积层参数相对较少,全连接层参数较多;
  • 随着网络的加深,激活值(也就是输出矩阵)在逐渐变小;

七、CNN 的优势与成本函数

7.1 CNN 的两大优势

7.1.1 参数共享

假设用了 6 个 5×5 的过滤器卷积一张 32×32×3 的图片,输出矩阵大小为 28×28×6。假如构建一个全连神经网络,其中一层含有 32×32×3=3072 个单元,下一层含有 28×28×6 = 4704 个单元,两层中的每个神经元彼此相连,计算其权重矩阵,W等于 4074×3072 ≈ 1400 万,所以要训练的参数很多。所谓参数共享,就是在 CNN 中,特征检测过滤器如果适用于图片的某个区域,那么它也能适用于图片的其他区域。也就是说每个特征检测器以及输出都可以在输入图片的不同区域中使用同样的参数,以便提取特征(不仅适用于边缘特征这样的低阶特征,同样适用于高阶特征),这样就大大减少了参数量。例如现在使用卷积网络,每个过滤器都是 5×5,一个过滤器有 25 个参数,再加上偏差参数,那么每个过滤器就有 26 个参数,一共有 6 个过滤器,所以参数共计 156 个,参数数量相较于不适用卷积情况下的1400 万个参数少了很多。

7.1.2 局部连接

举个例子:
在这里插入图片描述
输出矩阵中的30(用绿色框出来的这个数)是过滤器在输入图像中进行卷积计算得来的, 它只依赖于这个 3×3 的输入的单元格(用绿色框出来的这部分),右边这个输出单元(元素 30 )仅与 36 个输入特征中 9 个相连接,而且其它像素值都不会对输出产生任影响,这就是局部连接的概念。卷积神经网络正是通过上述两种机制来减少参数,从而避免过拟合

7.2 CNN 的成本函数

最后把这些层整合起来,看看如何训练卷积网络。比如要构建一个猫咪检测器,有下面这个标记训练集:x 表示一张输入图片,y^ 是输出的预测值。选定一个卷积神经网络输入图片,增加卷积层、池化层和全连接层,最后输出 y^。卷积层和全连接层有不同的参数 w 和偏差 b,随机初始化参数 wb,成本函数 J 等于神经网络对整个训练集的预测损失总和再除以 m
在这里插入图片描述
所以训练神经网络,就可以利用梯度下降法(或 Momentum 梯度下降法、含 RMSProp 或其它因子的梯度下降)来优化神经网络中所有参数,以减少成本函数J的值。通过上述操作就可以构建一个高效的猫咪检测器或其它检测器。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值