一、结构概述
卷积神经网络机构基于一个假设——输入数据是图像。所以这种特有属性,使得前向传播函数实现起来更高效,并且大幅度降低了网络中参数的数量。
在神经网络中:输入是一个向量,然后每个隐层由若干的神经元组成,每个神经元都与前一层中的所有神经元连接。常规的神经网络对于大尺寸图像效果不尽人意,因为在全连接下, 权重和偏差参数会变得很多,导致网络过拟合等问题。
与常规神经网络不同,卷积神经网络的各层中的神经元是3维排列的:宽度、高度、和深度。
左图是一个3层的神经网络,右边是一个卷积神经网络,图例中网络将它的神经元都排列成3个维度,卷积神经网络的每一层都将3D输入数据变化为神经元3D的激活数据输出。粉红色的输入层装的是图像,所以它的宽度和高度就是图像的宽度和高度,深度3代表了R.G,B三种颜色通道。
二、卷积网络各种层
卷积神经网络主要由三种类型的层构成:卷积层,汇聚(Pooling)层,和全连接层
网络结构例子:用于CIFAR-10图像数据分类的卷积神经网络的结构可以是【输入层-卷积层-ReLU层-汇聚层-全连接层】
- 输入[32*32*3]的原始图像
- 卷积层中,神经元与输入层中的一个局部区域相连,每个神经元都计算自己与输入层相连的小区域与自己的权重的卷积,如果我们使用12个滤波器(也叫作核),得到的输出数据体的维度就是[32*32*12]
- ReLU层将会逐个元素地进行激活函数操作,比如使用以0位阈值的max(0,x)作为激活函数,该层对数据尺寸没有改变。
- 汇聚层在空间维度(宽度和高度)上进行降采样(down sampling)操作,数据尺寸变为[16*16*12](2*2的池化操作)
- 全连接层将会计算分类评分,数据尺寸变为[1*1*10],其中10个数字就是对应CIFAR-10中10个类别的分类评分值。该层与常规神经网络一样
- 输出数据体的深度即为滤波器的数量,而每个滤波器在输入数据中寻找一些不同的特征,我们将这些沿着深度方向排列,感受野相同的的神经元集合成为深度列(depth column),也有人使用纤维(fiber)来称呼它们
- 其次,在滑动滤波器时,必须指定步长。当步长为1时,滤波器每次移动一个像素,以此类推,这个操作会使得输出数据体在空间上变小
- 零填充是一个超参数,零填充有一个良好的性质就是可以控制输出数据体的空间尺寸(最常用就是用来保持输入数据体在空间上的尺寸,这样输入和输出的宽高都相等)
- 使得网络更深,提取到跨通道特征的aggregation
- 降维
- 增加更多的非线性变化(eg.ReLU)
- 取代fc层
1.普通汇聚
除了最大汇聚,还有平均汇聚(average pooling)或L-2范式汇聚。实践证明,最大汇聚的效果比平均汇聚好。
2.反向传播
max(x,y)函数的反向传播可以理解为梯度只沿最大的数回传。因此,在前向传播经过汇聚层时,通常会把池中最大元素的索引记录下来(有时这个也叫做switches)这样在反向传播时梯度的路由就很高效。
五、全连接层
在全连接层,神经元对于前一层中的所有激活数据是全部链接的,它们的激活可以先用矩阵乘法,再加上偏差,同常规神经网络。
全连接层和卷积层之间唯一的不同就是卷积层中的神经元只与输入数据中的一个局部区域连接,并且在卷积列中的神经元共享参数。然而在两类层中,神经元都是计算点积,所以两者相互转化是可能的。
在两种变换中,将全连接层转化为卷积层在实际运用中更加有用。假设一个卷积神经网络的输入是224*224*3的图像,一系列的卷积层和汇聚层将图像数据变为尺寸为7*7*512的激活数据体。AlexNet使用了两个尺寸为4096的全连接层,最后一个有1000个神经元的全连接层用于计算分类评分。我们可以将这3个全连接层中的任意一个转化为卷积层:
- 针对第一个连接区域是[7x7x512]的全连接层,令其滤波器尺寸为,这样输出数据体就为[1x1x4096]了。
- 针对第二个全连接层,令其滤波器尺寸为,这样输出数据体为[1x1x4096]。
- 对最后一个全连接层也做类似的,令其,最终输出为[1x1x1000]
INPUT -> [[CONV -> RELU]*N -> POOL?]*M -> [FC -> RELU]*K -> FC
注意:几个小滤波器卷积层的组合比一个大滤波器卷积层好:假设一层一层地重叠了3*3的卷积层,在这个排列下,第一个卷积层中的每个神经元都对输入数据体有一个3*3的视野。第二个卷积层 的神经元对第一个卷积层有一个3*3的视野,也就是对输入数据体有一个5*5的视野,同样,第三个卷积层的神经元对输入数据体就有7*7的视野。但如果直接使用一个单独的7*7的感受野的卷积层,那么所有神经元的感受野也是7*7。但是有一些缺点,首先多个卷积层与非线性的激活层交替的结构,比单一卷积层的结构更能提取出深层的更好的特征,其次,假设所有的数据有C个通道,那么单独7*7卷积层将含有C*(7*7*C)=49C^2个参数,而3个3*3的卷积层仅有3*(C*(3*3*C))=27C^2个参数。
2.层的尺寸设置规律
- 输入层:应该能被2整除
- 卷积层:应该使用小尺寸滤波器,使用步长为1,还有要对输入数据进行零填充。如果必须使用更大的滤波器尺寸,通常只用在第一个面对原始图像的卷积层上。
- 汇聚层:2*2的感受野,步长为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月发表。