携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第23天,点击查看活动详情
卷积神经网络层次
一般的卷积神经网络主要的组成层级是可见层——输入层、输出层和隐藏层——卷积层、池化层、全连接层,接下来本文就将对具体的层级进行详细的介绍和分析。
作为一个简单的任务,考虑一个确定要写入的形状是 ○ 还是 × 的任务。图 4 是普通神经网络的示例。
将图像中的一个像素视为一个输入。对于 10x10 的图像,输入是大小为 100 的向量(请注意,对于 RGB 表示,这是 x3)。 在图中,圆圈的黑色部分显示为输入,但是可以看出,如果位置稍微偏移,则判断将受到很大影响。这是因为,如果位置或形状如图 5 所示略有变化,则输入信息将被识别为已移动。
但是,图中的红色方块往往是从右上方到左下方为黑色。换句话说,如果可以输入一定大小的区域而不是单个像素,则似乎可以进行更准确的确定。
CNN 意识到了这个想法。如图 6 所示,在图像上拍摄了一个称为过滤器的小区域(下图中带有红色框的 4x4 区域),并将其压缩为一个特征(卷积)。
滑动区域时重复此过程。结果是通过过滤器中的信息卷积创建的一层,即卷积层,如图 7 所示。
如果神经网络图设置为 CNN,则图像如图 8 所示:
使用该滤波器的“卷积”过程具体是“滤波器中的图像矢量”和“用于卷积的矢量”之间的乘法和内积。
在图 9 中,将 5x5x3 滤镜应用于 32x32x3 图像(32x32 RGB 图像)。
并且,如果增加过滤器的类型,则卷积层将相应增加。如图 10 所示,创建具有 6 个滤镜的 6 层。
可以说,这只是通过卷积创建“新形象”。卷积神经网络是通过将以此方式创建的卷积层与激活函数相连接而创建的卷积层,就像普通的神经网络一样(ReLU 通常用作激活函数)。
到目前为止,总结一下:
- CNN 是一种神经网络,它引入了卷积层,该卷积层在过滤器的区域上进行卷积并创建信息。
- 卷积层是通过移动和应用滤镜来创建的,并且创建的滤镜数量与滤镜的数量相同。通过重叠这些网络并将其与激活功能(ReLU 等)相连来构建网络。
- 卷积可以根据区域而不是点来提取特征,并且可以抵抗图像移动和变形。另外,可以执行除非基于诸如边缘之类的区域才知道的特征提取。
输入层
在一般的卷积神经网络中,输入层是整个神经网络的第一层。通常,输入图层中的所有图像必须具有相同的大小才能对图像进行卷积和一系列操作。输入层输入的可以是彩色图像,也可以是灰度图像。在输入图层中,图像的长度和宽度可能不尽相同,但在分类任务中,图像大小通常归一化为相同的长度和宽度。在本文中,将尺寸归一化为 227*227 像素的彩色图像作为输入来提高识别的准确率。
卷积层
卷积层(Convolutional Layer)又称之为特征提取层,它是卷积神经网络的核心,也是 CNN 区别于传统的神经网络要素之一,并且 CNN 大部分的计算都是在卷积层中完成的。在特征提取的过程中,通过使用固定的卷积核(如 3x3、5x5)对图像进行卷积运算并得到多个特征图,其中每个特征图都是由多个神经元组成的一个复合结构。
卷积操作是图像处理领域中常用的线性滤波方法。图像在经过卷积运算之后,其效果与滤波操作相似,都可以达到降噪、锐化的目的。与滤波操作不同的是,卷积运算是通过卷积核来实现的。在进行图像处理时,使用一个函数对某个像素与其周围像素之间的关系进行表示,这个函数就是我们所讲的卷积核。在卷积运算中,对某一个像素与其邻域像素进行平均操作,可以实现图像模糊降噪,对某个像素与其邻域像素进行差值操作,则可以实现图像边缘提取。在卷积神经网络中,卷积核的大小与计算量成正比例关系,这是由卷积核的特点形成的结果。所以在实际的应用中,我们一般选取比较小的卷积核,如 3x3、1x1 等,以减少计算量。
卷积层中的卷积运算一般指的是卷积核用一定的步长在输入图像上做横向和纵向操作,并与输入图像上相对应的数据进行计算,运算后得到的结果是一个新的二维的特征图。卷积运算如图 11 所示。
不同步长下的卷积运算,如图 11 所示,我们假设输入图片的大小为 5x5,卷积核的大小为 3x3,当以步长为 1 时进行卷积运算,得到的是一个 3x3 大小的图片,当以步长为 2 时进行卷积运算,则得到一个大小为 2x2 的图片。输出图片的大小与步长的关系可以由公式一下进行表示:
其中,y 表示的是卷积运算后的输出,x 表示的是卷积操作前输入图片的大小,k 表示的是卷积核的大小,stride 则是步长。
图像经过卷积运算之后,需要引入激活函数对其进行操作。引入激活函数的目的是:一方面可以避免随着卷积层数的增加网络出现梯度消失或梯度爆炸的问题;另一方面也可以加快整个网络的收敛速度,从而使网络的性能得到进一步提升。在图像分类中,图像数据分布一般可以分为线性可分和线性不可分两种情况。
针对数据线性可分的情况,如图 12 左图所示,这时直接使用线性神经网络模型对其进行分类,即可得到一个很好的分类结果。而在实际应用中,大多数情况下,我们需要分类的数据其分布情况不是一个线性可分的,而是一种线性不可分的复杂分布,如图 12 右所示。对于数据线性不可分的情况,如果我们直接使用线性网络模型对其进行分类,显然得到的效果会非常差,甚至不能对数据进行有效分类。
针对这种线性不可分的情况,通常做法是在神经元的输出后面加入一个非线性的激活函数,使输入与输出进行非线性映射,从而实现图像数据线性不可分的分类。在卷积神经网络中,我们常见的非线性激活函数有 Sigmoid 激活函数、Tanh 激活函数、ReLU 激活函数等。
池化层
在卷积神经网络中,池化层(Pooling Layer)也被称为下采样层。图像在经过卷积层之后,得到的特征一般都是维度很高的,如果将这些高维特征直接输入分类器进行分类,不仅易使网络产生过拟合现象,而且计算量大,分类效果不好。池化就是对图像某个区域的特征进行统计分析,并将统计的结果用来表示整个区域的总体特征,这种统计分析操作就是池化操作。池化的主要目的就是通过特征映射,使图像特征实现高维到低维的层次转换。另外通过引入池化操作,可以避免过拟合,也可以减少计算量,从而加快网络的训练速度。
常用池化操作有平均值池化和最大池化。平均值池化是将池化窗口中的平均值作为替代值,利用了池化窗口中所有的特征信息,能够较好的保留图像背景信息;而最大池化是将池化窗口内的最大值作为替代值,适用于稀疏的特征信息。如图 13 和图 14 分别为平均值池化和最大池化,其中原始特征图的大小为 4×4,池化窗口大小为 2×2,滑动步长为 2。
由图 13 和图 14 可知,相同尺寸的池化窗口对同一特征图进行池化后,输出相同大小的特征图。假设输入特征图的大小为 N×N,池化窗口大小为 C×C,滑动步长为 S(= C) ,则池化后特征图的大小为 (N/ C)×(N/ C) 。
全连接层
在局部感知的概念没有提出来之前,所有的前馈神经网络的连接方式都是以全连接的形式进行的。全连接层可以将卷积核和池化核得到的特征信息聚集到一起。另外全连接层还可以简化参数模型,在一定程度上减少前馈神经网络的神经元数据量和训练的参数数量。为了能使用反向传播算法来训练神经网络,全连接层要求图像有固定的输入尺寸。
由于卷积层是在全连接层的基础上发展而来的,所以全连接层也可以用特殊的卷积层来表示。在全连接层中可以认为每个神经元的感受野是整个图像,全连接层隐藏层节点数越多模型拟合能力越强,但是也会因为参数冗余带来过拟合的情况。为了解决过拟合对训练效果的影响,一般会在全连接层之间采用正则化技术,如 L1、L2 范式等操作。还可以在全连接层中随机舍去一些神经元,以此来解决训练过程中出现过拟合的情况。 全连接层与卷积层的计算方式不同,没有卷积计算那么复杂,在全连接层中直接将输入数据与向量做矩阵乘法。假设全连接层的输入为 x,输入维度为 D ,输出为 y ,输出维度为为 V ,则全连接层计算可以表示为如下,其中为 W 是 D*V 的权值矩阵。
由于卷积层中使用了权值共享、局部连接等操作成功降低了卷积层的参数数量和计算量,使得全连接层的参数数量是卷积层的好几倍。在卷积神经网络中卷积层主要是对输入的图像进行特征提取,而全连接层的主要功能是将卷积层提取到的特征信息进行整合。因此在构建卷积神经网络时,要想提高网络的特征提取能力主要对卷积层进行设计,要想降低参数量和计算量可以对全连接层进行设计。全连接的连接方式如图 15 所示。