前记:20世纪60年代,Hubel和Wiesel在研究猫脑皮层中用于局部敏感和方向选择的神经元时,发现其独特的网络结构可以有效地降低反馈神经网络的复杂性,继而提出了卷积神经网络(Convolutional Neural Networks-简称CNN)。现在,CNN已经成为众多科学领域的研究热点之一,特别是在模式分类领域,由于避免了对图像复杂的前期预处理操作,可以直接输入原始图像,因而得到了更为广泛的应用。
卷积神经网络(CNNs / ConvNets):
卷积神经网络和之前学的普通神经网络很相似:它们都是由神经元组成和具有学习能力的权重和偏差。每个神经元给与输入数据,进行内积运算及激活函数运算等;整个网络同样有一个可导的评分函数,输入是原始的图像像素,输出是不同类别的评分;在最后一层(全连接层),有一个损失函数(比如 SVM 或 Softmax),之前介绍的神经网络的各种技巧仍旧适用于卷积神经网络。
所不同的是,卷积神经网络的输入数据是图像,所以它具备一些特有的性质,使得前向传播函数的实现更加高效,并且大幅度降低神经网络中的参数数量。
卷积神经网络结构:
(3)输出表达和神经元的多维排列。卷积后的输出若用图2的排列方式则丢失了平面结构信息,卷积神经输入是图像,所以可以采用矩阵方式排列,见下图3;图像可以是彩色三维图像,所以与常规神经网络不同,卷积神经网络的各层神经元也可以3维排列:宽度、高度和深度(这里的深度是指激活数据的第三个维度,而不是网络的深度,网络的深度是指网络的层数),见下图4。
对同一图片,经过两个(红色、绿色)不同的filters扫描后,得到不同特点的Feature Maps。此时卷积层的输出是和输入一样多depths的长方。如下图6所示,当增加一个filter(紫色)后,就新得到一个Feature Map。 将不同filters卷积得到的Feature Maps按顺序堆叠后,就得到了一个卷积层的最终输出。
构建网络的层:
- 输入[32x32x3]大小的图像原始像素值,其中:32*32为图像宽高,3个颜色通道。
- 卷积层中,神经元与输入层中的一个局部区域相连,每个神经元都计算与输入层相连的区域与权重的内积。卷积层计算出所有神经元的输出。如果使用12个滤波器,得到的输出数据维度为[32x32x12]。
- ReLU层将每个元素送入激活函数,比如将
作为激活函数。该层不改变数据尺寸,还是[32x32x12]。 - 汇聚层在在空间维度(宽度和高度)上进行降采样操作,数据尺寸变为[16x16x12]。
- 全连接层计算分类评分,数据尺寸变为[1x1x10],其中10表示CIFAR-10中10个类别的分类评分值。
(一)卷积层
(2)在滑动滤波器的时候,必须指定步长。步长为1表示滤波器每次移动1个像素,步长为2则滤波器滑动时每次移动2个像素。这会让输出数据体在空间上变小。
(3)零填充。零填充可以控制输出数据体的空间尺寸(保持输入数据体和输出有相同的尺寸)。
(二)汇聚层
- 接受尺寸为:输入数据; 的
- 有两个超参数:空间大小 、步长 ;
- 输出数据尺寸为: ,其中:
- 对输入数据进行固定函数计算,所以该层没有引入参数;
- 在汇聚层中一般不使用零填充。
(三)归一化层
(四)全连接层
卷积神经网络的结构:
ps:几个小滤波器卷积层的组合比一个大滤波器卷积层效果要好。几个小滤波器卷积层的组合方式可以从输入数据中提取出更多,更强的特征,同事使用更少的参数;缺点是在进行反向传播时,中间的卷积层可能会占用更多的内存。
层的尺寸设置规律:
(1)输入层尺寸应能被2多次整除,即2的n次幂,例如:32(CIFAR-10),64,96(STL-10),224(ImageNet),384和512。(2)卷积层应使用小尺寸滤波器(比如3x3,最多5x5),步长S=1。还有就是对输入数据进行零填充,这样卷积层就不会改变输入数据在的尺寸。如果必须使用更大的滤波器尺寸(比如7x7等),通常只用面对原始图像的第一个卷积层上。
(3)汇聚层对输入数据进行空间上的降采样。最常用的设置是2x2感受野(F=2)的最大值汇聚,步长为2(S=2)。不常用的设置有使用3x3的感受野,步长为2。最大值汇聚的感受野尺寸很少超过3,因为尺寸过大会使得汇聚操作过于激烈,造成数据信息丢失严重,从而导致算法性能变差。
卷积神经网络领域中比较有名的几种结构:
- LeNet: 第一个成功的卷积神经网络应用,最著名是被应用在识别数字和邮政编码等的LeNet结构。
- AlexNet:AlexNet卷积神经网络在计算机视觉领域中受到欢迎,2012年AlexNet在ImageNet ILSVRC 竞赛中夺冠,并且性能远超第二名。其结构和LeNet类似,但是比之更深,更大,并使用层叠的卷积层来获取特征(之前通常只用一个卷积层,在其后跟着一个汇聚层)。
- ZF Net:它在ILSVRC 2013比赛中夺冠,它被称为 ZFNet。它对AlexNet的改良操作是:增加中间卷积层的尺寸,让第一层的步长和滤波器尺寸更小。
- GoogLeNet:它由谷歌的Szeged等实现,在ILSVRC 2014夺冠。它主要的贡献是实现了一个奠基模块,显著地减少了网络中参数的数量(AlexNet有60M,该网络只有4M)。
- VGGNet:ILSVRC 2014的第二名是Karen Simonyan和 Andrew Zisserman实现的VGGNet,它展示出网络深度是算法优良性能的关键。他们最好的网络包含16个卷积层/全连接层,从头到尾全部使用的是3x3的卷积和2x2的汇聚。
- ResNet:残差网络(Residual Network)是ILSVRC2015的胜利者,作者何恺明等人(视频,PPT)。它使用了特殊的跳跃链接,大量使用了批量归一化(batch normalization)。何开明等后来对原始结构做过一些优化,参看论文Identity Mappings in Deep Residual Networks。
后记:感觉CNN这块知识点挺多的,cs231n也只是尽量讲解了重要的概念点,后面再认真看下参考6。
参考:
http://cs231n.github.io/convolutional-networks/
https://zhuanlan.zhihu.com/p/22038289?refer=intelligentunit