Loading [MathJax]/jax/output/HTML-CSS/jax.js

Deep Learning Note: 4-3 卷积神经网络:基本结构

1. RGB 图像上的卷积

  前文中展示了灰阶图像上的卷积,对于 RGB 图像,它有三个颜色通道,此时需要使用三个过滤器进行卷积,如图 1 所示:

图 1

图 1

  使用 ×× 的方式表示图像的大小,在图 1 中,一个 6×6×3 的图像与一个 3×3×3 的过滤器相卷积,可以将 3×3×3 的过滤器想象成一个立方体,如图 2 所示,放置在原图像上,分别计算各个通道的卷积,得到 3×3×3=27 个值,对这些值求和,得到一个位置上的卷积。

图 2

图 2

  然后就像计算单通道图像的卷积那样,在原图像上移动过滤器,计算各个位置的卷积,最后结果的大小为 4×4×1

  通过使用具有 3 个通道的过滤器,可以单独检测原图像中的每一个通道。例如想要检测图像中的红色垂直边缘,则可以使用如下的过滤器(FilterRFilterGFilterB 分别代表 RGB 三个通道):

FilterR=[101101101]FilterG=[000000000]FilterB=[000000000]

  又如,只是想检测垂直边缘而不关心颜色,则可以使用:

FilterR=[101101101]FilterG=[101101101]FilterB=[101101101]

  在计算机视觉领域中,图像和过滤器通常会具有不同的高度和宽度,但会具有相同的通道数,即便不关心某些通道,也会使用三个通道的过滤器。
  
  如果想要同时检测多个特征,可以同时使用多个过滤器。如检测一个 6×6×3 的图像中的水平边缘和垂直边缘,则使用这个 6×6×3 的图像与两个 3×3×3 的过滤器相卷积,将两个过滤器卷积结果叠加起来。结果的大小为 4×4×2

  一般地,将一个 n×n×nc 的图像与 ncf×f×nc 的过滤器卷积,结果的大小为:

(nf+1)×(nf+1)×nc

  通过上面的方式,不仅能一次性计算多个通道的卷积,还能同时使用多个过滤器检测多个特征。

2. 一层卷积网络

  一层卷积神经网络如图 3 所示。

图 3

图 3

  图 3 中,图像与两个过滤器卷积后,得到两个 4×4 的矩阵,之后分别加上偏置 b1 / b2,并通过激活函数,得到两个 4×4 的矩阵,最终结果的大小为 4×4×2。注意这里的偏置 b 是一个实数,相当于让 4×4 矩阵中的每一个元素都加上相同的偏置。

  假设某层网络使用了 10 个 3×3×3 的过滤器,对于每个过滤器,其中有 27 个参数,再加上偏置,共有 28 个参数。10 个过滤器共有 28 * 10 = 280 个参数。值得注意的是,无论输入图像本身有多大,该层网络的参数数量始终为 280 个,这也是卷积神经网络更不容易过拟合的原因,只要习得了这 10 个过滤器,则可以将它们于任意大小的图像。

  下面整理一下在卷积神经网络中各参数的表示方法。如果神经网络中的第 l 层是一个卷积层,则:

  • 使用 n[l]Hn[l]H 分别表示输出的激活值的高度和宽度;
  • 使用 f[l] 表示过滤器大小(边长);
  • 使用 p[l] 表示 Padding(填充);
  • 使用 s[l] 表示 Stride(步长);
  • 使用 n[l]c 表示过滤器数量,每个过滤器的大小为 f[l]×f[l]×n[l1]c,注意第 l 层过滤器的通道数应等于第 l1 层输出的通道数;
  • 使用 a[l] 表示激活值,其大小为 n[l]H×n[l]W×n[l]c;如果使用向量化或小批量梯度下降等方式一次处理 m 个样本,则激活值 A[l] 的大小为 m×n[l]H×n[l]W×n[l]c
  • 使用 W[l] 表示权重,其大小为 f[l]×f[l]×n[l1]c×n[l]c,即 n[l]c 个过滤器的大小;
  • 使用 b[l] 表示权重,其大小为 n[l]c,或者表示为 1×1×1×n[l]c,每个通道使用一个偏置。

  第 l 层网络的输入的大小为 n[l1]H×n[l1]W×n[l1]c,这里 n[l1]Hn[l1]W 分别为第 l1 层输出的高度和宽度,n[l1]c 为第 l1 层输出的通道数。

  第 l 层网络的输出的大小为 n[l]H×n[l]W×n[l]c,其中:

n[l]H=n[l1]H+2p[l]f[l]s[l]+1

n[l]W=n[l1]W+2p[l]f[l]s[l]+1

3. 一个简单的卷积网络

  图 4 展示了一个简单的卷积网络的结构。

图 4

图 4

  网络的输入为 39×39×3 的图像,其中:

  • 第 1 层使用 10 个 3×3 的过滤器,Stride 为 1,Padding 为 0,输出激活值 a[1] 的大小为 37×37×10
  • 第 2 层使用 20 个 5×5 的过滤器,Stride 为 2,Padding 为 0,输出激活值 a[2] 的大小为 17×17×20
  • 第 3 层使用 40 个 5×5 的过滤器,Stride 为 2,Padding 为 0,输出激活值 a[3] 的大小为 7×7×40
  • 最后将 a[3] 转换为一个向量,向量长度为 7×7×40=1960,通过逻辑回归或 Softmax 单元输出预测 ˆy

  上面的网络中,只使用了卷积层。在典型的卷积神经网络中,通常包含三种层:

  • 卷积层(Convolutional Layer,简写为 Conv)
  • 池化层(Polling Layer,简写为 Pool)
  • 全连接层(Fully Connected Layer,简写为 FC)

4. 池化层

  池化(Polling)层可以降低输入的尺寸,由此加快计算速度,还可以提高特征检测的健壮性。

  池化的方式有多种,其中一种是最大池化(Max Polling),即将输入数据划分为若干个区域,取每个区域的最大值。举例来说,对于如图 5 左边的 4×4 的输入数据,进行最大池化的一种方式是将其划分为 4 个 2×2 的区域,取各个区域的最大值,得到一个 2×2 的矩阵,如图 5 右边所示,即为最大池化的结果。

图 5

图 5

  上面例子中,相当于在原图像上使用了一个大小为 2×2 的、Stride 为 2 的过滤器,这里过滤器的大小和 Stride 是最大池化的超参数。

  在卷积层的输出中,如果某个地方的值非常大,则说明在该处发现了该卷积层所检测的特征。最大池化通过提取各区域中最大的值,将各区域中被检测出的特征保留了下来。假设图 5 左边的数据是某层卷积网络的输出,左上角的紫色区域中,最大值为 9,说明在该处检测出了特征,通过最大池化,紫色区域中只有 9 保留了下来。

  最大池化的输出与输入数据具有相同的通道数,如果输入数据有多个通道,则在各个通道上分别进行最大池化。例如输入数据大小为 5×5×2,使用 3×3 的过滤器,Stride 为 1,则输出大小为 3×3×2

  还有一种池化方式称为平均池化(Average Polling),它与最大池化的区别是,平均池化计算各区域的平均值,而不是最大值,如图 6 所示。

图 6

图 6

  最大池化使用得更加频繁,平均池化的一个用途是在非常深的网络中用于缩小数据的尺寸,如将 7×7×1000 的数据缩小为 1×1×1000

  综上所述,池化涉及的超参数有:

  • f:过滤器尺寸
  • s:Stride
  • 使用最大池化还是平均池化

  其中 fs 最常见的取值是 f=2s=2,即将输入缩小到原来的一半。进行池化时通常不会使用 Padding,因此很少将 Padding 也作为池化的超参数。池化没有需要学习的参数。

  对于大小为 nH×nW×nc 的输入,池化的输出为:

nHfs+1×nWfs+1×nc