《深度学习》 读书笔记 09

摘要

《深度学习》第九章介绍了卷积神经网络。

基本概念

首先回答什么是卷积神经网络。卷积神经网络是指至少在网络的一层中使用卷积运算来代替一般矩阵乘法运算的神经网络。
卷积神经网络是神经科学的原理影响深度学习的典型代表。

此前在《数字图像处理》的第三章已经简单了解过卷积的概念。

其次回答为什么要用卷积。卷积运算通过三个重要的思想来帮助改进机器学习系统:
稀疏交互(sparse interactions):传统的神经网络使用全连接来建立输入与输出的关系,这意味着如果输入的维度很大时,会导致参数规模也很大。稀疏交互(稀疏权重)可以显著的降低参数规模。
参数共享(parameter sharing):在卷积神经网络中,卷积核会作用在输入的每个位置上,也就是说卷积核的参数是共享的。
等变表示(equivariant representations):令$g$是输入的任意平移函数,那么卷积函数对于g具有等变性。

卷积神经网络的卷积层基本结构如下图所示,大致有三级:

在Convolution Stage,并行地进行多个卷积运算来产生一组线性激活函数。
在Detector Stage,非线性的激活函数如(ReLU)作用在每一个线性输出上。
在pooling stage,通过池化函数来更进一步地调整卷积级的输出。

卷积函数可以看作为一种特征学习器。
探测函数可以看作为一种特征激活器。
池化函数使用某一位置的相邻输出的总体特征来代替网络在该位置的输出。它的作用是逐渐降低数据体的空间尺寸,这样的话就能减少网络中参数的数量,使得计算资源耗费变少,也能有效控制过拟合,还能起到保证少量平移不变性,处理不同大小的输入等。

从概率学的角度来讲,卷积与池化作为一种无限强的先验,这个先验要求卷积层包含局部连接关系并且对平移具有等变性,只有当先验的假设合理且正确时才有用。当一项任务涉及到要对输入中相隔较远的信息进行合并时,那么卷积所需要的先验可能就不正确的。

卷积核

每个卷积核涉及到空间尺寸问题,卷积核只与输入数据的局部区域连接,该连接的空间大小叫做感受野(receptive field)。其次卷积核第三个维度的大小始终与输入图像的通道数相同。
每个卷积层涉还及到3个超参数:
深度(depth):深度指的是卷积核的数目。单个卷积核只能提取一种类型的特征,多个卷积核能够提取多种类型的特征。有时候也称为滤波器数目。输入数据与卷积核进行卷积得到的输出数据称为深度切片。深度切片数与卷积核数目相同。
步长(stride):步长指在输出的每个方向上进行s个像素的下采样(downsampling)。
零填充(zero padding):零填充涉及三种不同方式。
第一种是不使用零填充,并且卷积核只允许访问那些图像中能够完全包含整个核的位置,称为有效(valid)卷积,这使得输出像素的表示非常有效,但是会导致输出的大小在每一层都会缩减。如果输入的图像宽度是$m$,核的宽度是$k$,那么输出的宽度就会变成$(m-k+1)$。
第二种是使用零填充来保持输入和输出具有相同的大小,称为相同(same)卷积,此时零填充的数目是$\dfrac{k-1}{2}$。相同卷积可能会导致边界像素存在一定程度的欠表示。
第三种是进行足够多的零填充,使得每个像素在每个方向上恰好被方位了$k^3$,此时零填充的数目是$(k-1)$,最终输出的图像的宽度为$(m+k-1)$,称为全(full)卷积。

输入数据的尺寸为:$W_1 \times H_1 \times D_1$
卷积层4个超参数:卷积核数目$K$,感受野尺寸为$F$,步长为$S$,零填充为$P$
输出数据体的空间尺寸为:$W_2 \times H_2 \times D_2$
$W_2 = (\dfrac{W_1-F+2P}{S}+1)$
$H_2 = (\dfrac{H_1-F+2P}{S}+1)$
$D_2 = K$

池化层

通常,在连续的卷积层之间会周期性地插入一个汇聚层。它的作用是逐渐降低数据体的空间尺寸,这样的话就能减少网络中参数的数量,使得计算资源耗费变少,也能有效控制过拟合。汇聚层使用MAX操作,对输入数据体的每一个深度切片独立进行操作,改变它的空间尺寸。最常见的形式是汇聚层使用尺寸2x2的滤波器,以步长为2来对每个深度切片进行降采样,将其中75%的激活信息都丢掉。每个MAX操作是从4个数字中取最大值
输入数据的尺寸为:$W_1 \times H_1 \times D_1$
池化层2个超参数:空间尺寸为$F$,步长为$S$
输出数据体的空间尺寸为:$W_2 \times H_2 \times D_2$
$W_2 = (\dfrac{W_1-F}{S}+1)$
$H_2 = (\dfrac{H_1-F}{S}+1)$
$D_2 = D_1$

超参数

输入层应该能被2整除很多次。常用数字包括32(比如CIFAR-10),64,96(比如STL-10)或224(比如ImageNet卷积神经网络),384和512。
卷积层应该使用小尺寸滤波器(比如3x3或最多5x5),使用步长$S=1$。还有一点非常重要,就是对输入数据进行零填充,这样卷积层就不会改变输入数据在空间维度上的尺寸。比如,当$F=3$,那就使用$P=1$来保持输入尺寸。当$F=5$,就用$P=2$,一般对于任意$F$,当$P=(F-1)/2$的时候能保持输入尺寸。如果必须使用更大的滤波器尺寸(比如7x7之类),通常只用在第一个面对原始图像的卷积层上。
池化层负责对输入数据的空间维度进行降采样。最常用的设置是用用2x2感受野(即F=2)的最大值汇聚,步长为2(S=2)。注意这一操作将会把输入数据中75%的激活数据丢弃(因为对宽度和高度都进行了2的降采样)。另一个不那么常用的设置是使用3x3的感受野,步长为2。最大值汇聚的感受野尺寸很少有超过3的,因为汇聚操作过于激烈,易造成数据信息丢失,这通常会导致算法性能变差。

案例学习

下面是卷积神经网络领域中比较有名的几种结构:

LeNet: 第一个成功的卷积神经网络应用,是Yann LeCun在上世纪90年代实现的。当然,最著名还是被应用在识别数字和邮政编码等的LeNet结构。

AlexNet:AlexNet卷积神经网络在计算机视觉领域中受到欢迎,它由Alex Krizhevsky,Ilya Sutskever和Geoff Hinton实现。AlexNet在2012年的ImageNet ILSVRC 竞赛中夺冠,性能远远超出第二名(16%的top5错误率,第二名是26%的top5错误率)。这个网络的结构和LeNet非常类似,但是更深更大,并且使用了层叠的卷积层来获取特征(之前通常是只用一个卷积层并且在其后马上跟着一个汇聚层)。

ZF Net:Matthew Zeiler和Rob Fergus发明的网络在ILSVRC 2013比赛中夺冠,它被称为 ZFNet(Zeiler & Fergus Net的简称)。它通过修改结构中的超参数来实现对AlexNet的改良,具体说来就是增加了中间卷积层的尺寸,让第一层的步长和滤波器尺寸更小。

GoogLeNet:ILSVRC 2014的胜利者是谷歌的Szeged等实现的卷积神经网络。它主要的贡献就是实现了一个奠基模块,它能够显著地减少网络中参数的数量(AlexNet中有60M,该网络中只有4M)。还有,这个论文中没有使用卷积神经网络顶部使用全连接层,而是使用了一个平均汇聚,把大量不是很重要的参数都去除掉了。GooLeNet还有几种改进的版本,最新的一个是Inception-v4。

VGGNet:ILSVRC 2014的第二名是Karen Simonyan和 Andrew Zisserman实现的卷积神经网络,现在称其为VGGNet。它主要的贡献是展示出网络的深度是算法优良性能的关键部分。他们最好的网络包含了16个卷积/全连接层。网络的结构非常一致,从头到尾全部使用的是3x3的卷积和2x2的汇聚。他们的预训练模型是可以在网络上获得并在Caffe中使用的。VGGNet不好的一点是它耗费更多计算资源,并且使用了更多的参数,导致更多的内存占用(140M)。其中绝大多数的参数都是来自于第一个全连接层。后来发现这些全连接层即使被去除,对于性能也没有什么影响,这样就显著降低了参数数量。

ResNet:残差网络(Residual Network)是ILSVRC2015的胜利者,由何恺明等实现。它使用了特殊的跳跃链接,大量使用了批量归一化(batch normalization)。这个结构同样在最后没有使用全连接层。读者可以查看何恺明的的演讲(视频,PPT),以及一些使用Torch重现网络的实验。ResNet当前最好的卷积神经网络模型(2016年五月)。何开明等最近的工作是对原始结构做一些优化,可以看论文Identity Mappings in Deep Residual Networks,2016年3月发表。

参考文献

《深度学习》第九章
CS231n课程笔记翻译:卷积神经网络笔记