Deep Learning Note: 4-4 卷积神经网络:一个例子

1. 一个卷积神经网路的例子

  图 1 展示了一个用于识别手写数字的卷积神经网络。

图 1

图 1

  网络输入为 $32 \times 32 \times 3$ 的手写数字图像,第 1 个卷积层 CONV 1 使用 6 个 $5 \times 5$ 的过滤器,步长为 1,输出大小为 $28 \times 28 \times 6$,然后通过第 1 个池化层 POLL 1,数据大小降至原来的一半,即 $14 \times 14 \times 6$。之后再通过第 2 个卷积层 CONV 2 和第 2 个池化层 POLL 2,得到大小为 $5 \times 5 \times 16$ 的输出。将 POLL 2 的输出转换为一个向量,向量长度为 $5 \times 5 \times 16 = 160$,通过一个全连接层 FC 3 得到一个长度为 120 的向量。接着通过全连接层 FC 4 得到长度为 84 的向量,以此作为 Softmax 节点的输入。Softmax 节点有 10 个输出,对应数字 0 到 9。

  上面的例子中使用了全连接层,可以将全连接层看成是普通的神经网络的一层,如 FC 3 的输入为 $160 \times 1$ 的向量,输出为 $120 \times 1$ 的向量,其权重是一个 $120 \times 160$ 的矩阵。

  注意这里把卷积层和它后面的池化层合并记为 1 层网络,即 CONV 1 和 POLL 1 是这个卷积神经网络的第 1 层,CONV 2 和第 POLL 2 是这个卷积神经网络的第 2层。通常只会将带有权重的层计为神经网络的一层,卷积层有权重,而池化层没有权重,故将二者合起来作为网络的一层。

  上面的例子中,使用一个卷积层和一个池化层的组合并重复多次,最后连接几个全连接层,是卷积神经网路的典型结构。此外,使用多个卷积层接着一个池化层的组合并重复多次,再连接几个全连接层的形式也很常见。一般来说,随着层数的深入,每一层的激活值的长度和宽度逐渐缩小,深度(通道数)逐渐增大。

  将例子中各层的激活值数量整理如下:

激活值大小 激活值数量
输出层 (32, 32, 3) 3072
CONV 1 (f =5, s=1) (28, 28, 6) 4704
POLL 1 (14, 14, 6) 1176
CONV 2 (f =5, s=1) (10, 10, 16) 1600
POLL 2 (5, 5, 16) 400
FC3 (120, 1) 120
FC4 (84, 1) 84
Softmax (10, 1) 10

  可以看出,随着网络层数的增加,激活值数量以适当的速度逐渐减小,很多网络都具有类似的形式。如果激活值数量减小速度过快,会影响网络的更能。

2. 使用卷积的原因

  与普通的全连接层相比,卷积层有两大优势:参数共享和稀疏连接。

  以图 1 中例子的 CONV 1 层为例,该层输入为 $32 \times 32 \times 3$ 的图像,输出大小为 $28 \times 28 \times 6$。如果要使用全连接层来替代这个卷积层,则这个全连接层有 $32 \times 32 \times 3 = 3072$ 个输入,有 $28 \times 28 \times 6 = 4704$ 个输出,则这一层的权重参数是一个 $4704 \times 3072$ 的矩阵,共有约 1445 万个参数,数量巨大。这还是在 $32 \times 32 \times 3$ 的小图像上的结果,如果网络的输入图像更大,比如 $1000 \times 100 \times 3$,则会无法训练如此众多的参数。而对于图 1 中所示的神经网络,只需 6 个 $5 \times 5$ 的过滤器(以及偏置参数)就完成了计算。

  卷积网络参数很少的原因之一是参数共享,对于一个特征检测器来说,它通常可以应用于图像的各个部分,即在图像各处使用相同的参数检测同一个特征。例如对于一个垂直边缘检测器,它可以检测图像中任意位置的垂直边缘,只需要一组过滤器的参数就可以完成对整个图像的检测。
  
  卷积网络参数很少的另一个原因是稀疏连接,即每一层的每一个输出值只与一小部分输入有关。例如在卷积层中使用 $f \times f$ 的过滤器,则每个卷积结果都只与该层输入的 $f \times f$ 个值有关,因此卷积层输出的每个激活值也只与该层的 $f \times f$ 个输入有关。

  卷积网络善于捕捉平移不变性(Translation Invariance),例如对于图片中的猫,将猫平移一段距离,它仍是一只猫。卷积网络将同一个过滤器应用于图片各处,有利于发现图片不同位置的同一个特征。