1. 引言
1962 年,加拿大神经科学家Hubel 和 Wiesel通过研究猫的视觉神经,首次提出神经元感受野这一概念。
20 世纪 80年代,日本科学家 Kunihiko Fukushima在论文中介绍了神经认知网络模型,该模型可以看作是卷积神经网络的初期结构。
20 世纪 90 年代,Yann LeCun 等人提出 LeNet 模型,并成功应用于美国的邮政系统,用来识别手写邮政编码,首次实现了卷积神经网络的商业应用。
2012 年,Geoffrey E. Hinton 等人提出 AlexNet,该模型获得了计算机视觉领域 ImageNet 图像分类竞赛冠军。
2015 年,何凯明等人将参数化修正线性单元(PReLU)激活函数应用于卷积神经网络,第一次在 ImageNet 数据集上使神经网络的预测错误率低于人类预测错误率。
随着残差网络(ResNet)、稠密连接网络(DenseNet)以及使用神经结构搜索框架得到的 NASNet 等一系列新型卷积神经网络模型的提出,卷积神经网络的表达能力不断提高,应用领域越来越广泛。
卷积神经网络是各个领域的研究热点,尤其是图像分类,自然语言处理,语音分析等领域,它所拥有的权值共享结构极大地减少了权值的数量,从而使得模型在复杂度方面大大地降低,尤其是在处理多维图像时,避免了繁琐的特征处理及重建过程。
2. 卷积神经网络的基本结构
卷积神经网络通常包括输入层、卷积层、激活层、池化层、全连接层和输出层 6 种层次结构。
- 其中输入层、卷积层、激活层和输出层通常是一个卷积神经网络所必须具备的结构;
- 其他的层次结构,比如池化层、全连接层、归一化层、转置卷积层等可以根据具体问题的不同需求进行选择。
2.1 输入层
输入层用于获取卷积神经网络的输入数据,其本身的特征被保留,在处理图像的卷积神经网络中,输入层将图像数据转换成矩阵像素数据输入到神经网络中,该矩阵中前两个参数代表输入图像的长和宽,第三个参数为深度代表图像输入的通道数。
输入层的作用是对输入的图像进行一些前期的处理操作,包括:
- 归一化:将输入的图像映射到如正态分布等类似确定的区间,可以更加有效的利用输入的特征,方便找到模型训练的最优解,同时在模型进行训练时,可以减少训练时间,加快速度并提高准确率。
- 去均值:将输入图片的每一个维度都进行一定的处理,以 0 为中心,防止梯度消散以及过拟合的现象。
- 当训练样本数量较少时,在训练过程中,输入层还可以对输入数据进行一些在线的数据增强,比如对图像数据而言,可以对图像旋转不同的角度、按不同比例对图像进行缩放、改变图像对比度等,以增加样本的多样性,使卷积神经网络学习到更加丰富的特征。
2.2 卷积层
卷积层是在原始的输入上进行特征的提取,是网络中最重要的部分,通过卷积核与输入图像的像素做卷积计算,进而得到新的特征映射矩阵,同时,图像像素之间的关系依旧保留下来。
对于一张陌生的图片,卷积神经网络没办法准确的找到该图片的特征与原图的对应部分,所以针对原图中的每一个位置,他都进行一定的操作,这个被处理的特征相当于一个过滤器。这个用来进行特征匹配的操作称之为卷积操作。
卷积运算输出的结果被称为特征图。
输入图片大小为 5×5,卷积核大小为 3×3,步长 stride 为 1:
特征映射的大小主要由以下三个变量控制:
- 深度:深度为使用的卷积核的个数。输入的图片经过了n个大小不同的过滤器得到了n张不同的特征图。
- 步幅:步幅(stride)是卷积核在输入图像上移动一次所需的步数,步幅是我们在输入矩阵上移动一次过滤器矩阵的距离。当 stride 为 1 时,移动一步。stride 越大,输出的特征映射图越小。
- 填充值:填充值主要用来处理矩阵的边界信息,主要有两种方式,SAME 和VALID。
2.3 激活层
卷积运算是一种线性运算,线性运算层堆叠形成的模型只能进行线性映射,这样的堆叠可以等效退化为一层神经网络,不能用来表示复杂函数。激活层通过使用激活函数对数据做非线性变换,使卷积神经网络拥有较强的非线性表达能力。
激活层可供选用的激活函数有许多:
- S 形(Sigmoid)函数
- 双曲正切(tanh)函数
- 修正线性单元(Rectified Linear Units,ReLU)函数
- 裂缝修正线性单元(Leaky_ReLU)函数
- 参数化修正线性单元(Parametric Re LU,PReLU)函数
2.4 池化层
池化层执行一种数字图像邻域运算,对于输入数据某个位置,使用其邻域内数值的某种统计特性代替该位置的数值并输出。
常用的有最大池化和平均池化。
- 最大池化:使用邻域内的最大数值替换该位置的数值;
- 平均池化:使用邻域内数值的统计平均值替换该位置的数值。
池化层特点:
- 特征不变性,池化相当于对图像进行放大缩小操作,假设原图是一只猫,那么不管我们对该图放大一倍或是缩小一倍,都能够看出这张图片是一只猫,其重要的特征仍在,含有该张图像的主要特征,这就是我们平时所了解到的尺度不变性,丢失掉的特征对原图不会造成影响。
- 特征降维,当我们对一张图片进行处理时,图像尺寸越大,参数量就越多,导致网络的计算量增大。但是对于该张图片,有很多的信息是冗余的,对于我们的网络没有太大的用处,因此我们可以通过降维提取其中重要的特征,减少卷积神经网络计算量。
- 在一定程度上避免过拟合。
2.5 全连接层
全连接层,也被称为密集连接层,同层的神经元之间没有连接,相邻层的神经元间为全连接。
在卷积神经网络中的全连接层可以看作分类器,“全连接”意味着前一层中的每个神经元都连接到下一层的每个神经元。全连接层的目的是利用这些基于训练数据集得到的特征,将输入图像分为不同的类。全连接层可以简单的学习这些非线性组合的特征。
全连接层仍然是对数据做线性变换,所以仍需要在全连接层后面添加激活函数,使全连接层拥有非线性表达能力。
2.6 输出层
输出层用于输出经卷积神经网络计算得到的数值。
对于不同的问题,输出的形式也不同。
- 对于分类问题,输出层输出的是一个概率分布,这个概率分布通过对数值应用Softmax 函数得到,表示不同类别对应的概率。
- 对于回归问题,输出层输出经卷积神经网络由输入数据计算得到数值。
- 对于图像生成、图像分割等要求输出图像的问题,输出层输出的是表示图像的数值矩阵。
3. 卷积神经网络特点
3.1 局部连接
基于人类先局部再全局的认知模式,可以了解到,图像中的相邻像素之间相关性较强,且像素之间距离较远时,往往联系不是很紧密,所以,我们对神经元进行局部感知,然后将其综合便得到了全局信息。这种模式被称作局部感受野。
卷积网络第 x 层的隐层单元只与其前一层即第 x-1 层的输入有局部连接。也就说,假设第 x-1 层为输入层,第 x 层能接受宽度为 3 的区域,也就是第 x 层的每个单元只能与其前一层相邻的 3 个神经元有连接,第 x+1 层也是遵循这样的规则。
由图可以知道,虽然第 x+1 层只能接收到第 x 层宽度为 3 的区域,但针对第 x-1 层,它可以接受宽度为 5 的区域,将这样的结构不断进行堆叠,便可得到全局的信息。
3.2 权重共享
权值共享是卷积神经网络中最具特色的优势,它可以减少网络在训练过程中的参数量,减少模型的计算量。
其原理是,该层中的每一个像素点的值都是由上一层中对应的
m×m 区域的像素值与同一大小的卷积核相乘,再加偏置之后经过激活函数而得到。因此,网络的参数量与输入的图片尺寸没有任何关系。同一大小的卷积核只能提取到一张特征图,因此为了得到更多的特征表示,需要使用不同大小的卷积核进行处理。
3.3 下采样
Pooling 层可以对图片进行压缩从而使得压缩后的图像在质量方面优于原图,同时可以降低特征维度并保留有用信息,网络模型的参数数量得到了进一步的减少,过拟合的情况也有所缓解。当输入图片的领域像素值产生了一些微小的位移时,下采样层可保持输出不变,增强网络模型的鲁棒性。