TensorFlow深度学习之卷积神经网络深度学习之卷积神经网络CNN
一、卷积神经网络的概述一、卷积神经网络的概述
卷积神经网络(ConvolutionalNeural Network,CNN)最初是为解决图像识别等问题设计的,CNN现在的应用已经不限于图
像和视频,也可用于时间序列信号,比如音频信号和文本数据等。CNN作为一个深度学习架构被提出的最初诉求是降低对图
像数据预处理的要求,避免复杂的特征工程。在卷积神经网络中,第一个卷积层会直接接受图像像素级的输入,每一层卷积
(滤波器)都会提取数据中最有效的特征,这种方法可以提取到图像中最基础的特征,而后再进行组合和抽象形成更高阶的特
征,因此CNN在理论上具有对图像缩放、平移和旋转的不变性。
卷积神经网络CNN的要点就是局部连接(LocalConnection)、权值共享(Weights Sharing)和池化层(Pooling)中的降采
样(Down-Sampling)。其中,局部连接和权值共享降低了参数量,使训练复杂度大大下降并减轻了过拟合。同时权值共享
还赋予了卷积网络对平移的容忍性,池化层降采样则进一步降低了输出参数量并赋予模型对轻度形变的容忍性,提高了模型的
泛化能力。可以把卷积层卷积操作理解为用少量参数在图像的多个位置上提取相似特征的过程。
卷积层的空间排列:卷积层的空间排列:上文讲解了卷积层中每个神经元与输入数据体之间的连接方式,但是尚未讨论输出数据体中神经元的数
量,以及它们的排列方式。3个超参数控制着输出数据体的尺寸:深度(深度(depth),步长(),步长(stride)和零填充()和零填充(zero-
padding)。)。首先,输出数据体的深度是一个超参数:它和使用的滤波器的数量一致,而每个滤波器在输入数据中寻找一些不
同的东西。其次,在滑动滤波器的时候,必须指定步长。有时候将输入数据体用0在边缘处进行填充是很方便的。这个零填充零填充
((zero-padding))的尺寸是一个超参数。零填充有一个良好性质,即可以控制输出数据体的空间尺寸(最常用的是用来保持
输入数据体在空间上的尺寸,这样输入和输出的宽高都相等)。输出数据体在空间上的尺寸可以通过输入数据体尺寸(W),
卷积层中神经元的感受野尺寸(F),步长(S)和零填充的数量(P)的函数来计算。(这里假设输入数组的空间形状是正方
形,即高度和宽度相等)输出数据体的空间尺寸为输出数据体的空间尺寸为(W-F +2P)/S+1,在计算上,输入数据体的长和宽按照该公式计算,深度依,在计算上,输入数据体的长和宽按照该公式计算,深度依
赖于滤波器的数量。赖于滤波器的数量。步长的限制:注意这些空间排列的超参数之间是相互限制的。举例说来,当输入尺寸W=10,不使用零填
充则P=0,滤波器尺寸F=3,这样步长S=2就行不通,结果4.5不是整数,这就是说神经元不能整齐对称地滑过输入数据体。
汇聚层使用MAX操作操作,对输入数据体的每一个深度切片独立进行操作,改变它的空间尺寸。最常见的形式是汇聚层使用尺寸
2×2的滤波器,以步长为2来对每个深度切片进行降采样,将其中75%的激活信息都丢掉。每个MAX操作是从4个数字中取最大
值(也就是在深度切片中某个2×2的区域)。深度保持不变。
二、卷积神经网络的结构二、卷积神经网络的结构
卷积神经网络通常是由三种层构成:卷积层,汇聚层(除非特别说明,一般就是最大值汇聚)和全连接层(fully-connected简
称FC)。ReLU激活函数也应该算是是一层,它逐元素地进行激活函数操作。
卷积神经网络最常见的形式就是将一些卷积层和ReLU层放在一起,其后紧跟汇聚层,然后重复如此直到图像在空间上被缩小
到一个足够小的尺寸,在某个地方过渡成成全连接层也较为常见。最后的全连接层得到输出,比如分类评分等。
最常见的卷积神经网络结构如下:
INPUT -> [[CONV -> RELU]*N ->POOL?]*M -> [FC -> RELU]*K -> FC
其中*指的是重复次数,POOL?指的是一个可选的汇聚层。其中N >=0,通常N<=3,M>=0,K>=0,通常K<3。
几个小滤波器卷积层的组合比一个大滤波器卷积层好。几个小滤波器卷积层的组合比一个大滤波器卷积层好。直观说来,最好选择带有小滤波器的卷积层组合,而不是用一个带有大
的滤波器的卷积层。前者可以表达出输入数据中更多个强力特征,使用的参数也更少。前者可以表达出输入数据中更多个强力特征,使用的参数也更少。唯一的不足是,在进行反向传播时,中
间的卷积层可能会导致占用更多的内存。
输入层输入层(包含图像的)应该能被2整除很多次。常用数字包括32(比如CIFAR-10),64,96(比如STL-10)或224(比如
ImageNet卷积神经网络),384和512。
卷积层卷积层应该使用小尺寸滤波器(比如3×3或最多5×5),使用步长S=1。还有一点非常重要,就是对输入数据进行零填充,这
样卷积层就不会改变输入数据在空间维度上的尺寸。一般对于任意F,当P=(F-1)/2的时候能保持输入尺寸。如果必须使用更大
的滤波器尺寸(比如7×7之类),通常只用在第一个面对原始图像的卷积层上。
汇聚层汇聚层负责对输入数据的空间维度进行降采样,提升了模型的畸变容忍能力。最常用的设置是用用2×2感受野的最大值汇聚,
步长为2。注意这一操作将会把输入数据中75%的激活数据丢弃(因为对宽度和高度都进行了2的降采样)。另一个不那么常
用的设置是使用3×3的感受野,步长为2。最大值汇聚的感受野尺寸很少有超过3的,因为汇聚操作过于激烈,易造成数据信息
丢失,这通常会导致算法性能变差。