1.1卷积神经网络的发展历史
1940年神经网络的概念被提出,1960年感知机的概念被提出,但一直没得到实践应用,直到1989年用于手写字符识别的LeNet模型被LeCun等人提出,该模型在部分领域受到广泛应用,但在此之后神经网络的发展再次陷入瓶颈。直到2006年的深度自动编码网络被Hinton等人提出,随之的一种深度神经网络的训练策略推动了非监督学习的发展。2010年之后由于硬件资源的巨大进步,GPU之类的计算设备大大加快了神经网络的计算速度,训练和推理速度被大大缩短;公开数据集不断扩充,大规模公开数据集的使用使得深度神经网络的训练不易出现过拟合问题,这也推动了网络的研究发展。综上两方面的主要原因,深度神经网络几十年来的寒冬被打破,得到巨大的突破,受到广大科研人员的关注。2011年语音识别领域的突破——基于深度神经网络的语音识别技术被微软提出,2012年第一个在ImageNet竞赛上利用深度学习获得冠军、为后续网络模型研究带来显著影响的卷积神经网络AlexNet被提出,2013年之后VGG、GoogLeNet、ResNet等经典模型不断被提出,网络越来越深越来越宽。
1.2卷积神经网络的核心概念
1.2.1 卷积层
在卷积神经网络中卷积层被大量使用,卷积层是用来提取图像特征的,其中卷积层的输入数据被称为输入特征图,而卷积层的输出数据被称为输出特征图。卷积层对输入数据进行的处理被叫做卷积运算(实际上是互相关运算,但由于权重都是学出来的,所以无论使用卷积运算还是互相关运算都不影响输出结果),其中实现卷积运算的一个重要工具就是滤波器。以图1为例,图一中的输入数据是一个三维特征图(CxHxW),其中通道数C为2,特征图的高为3,宽为3,无填充,滤波器移动步幅为1。其中填充是指在输入特征图的高和宽周围再增加数据,一般为0,从而使原特征图的高、宽增加以至于滤波器对原特征图的边缘数据的采用增多以免丢掉图像边缘位置的许多信息,同时可以调整输出大小,避免每做一次卷积操作图像高宽大幅度缩小以至于网络无法过深的缺点;步幅是指滤波器在输入特征图上移动的间隔。图一中滤波器大小为2x2x2,2x2窗口大小以间隔1在输入特征图上上下滑动,将各个位置上的滤波器元素和输入的对应元素相乘,然后再求和,最后将结果保存到输出特征图的对应位置,将如此操作在滤波器滑到的输入特征图的各个位置都重复一遍,最终得到一个2x2的输出特征图(这里滤波器只有1个,故输出特征图只有1个通道)。
图1 含两个通道的三维卷积运算
具体的计算过程可以表示为:
(1)
其中K表示N个3维滤波器(dxdxC),dxd表示滤波器窗口大小,C表示输入通道数,N表示滤波器个数,也是输出通道数;I是指输入特征图(HxWxC);O代表输出特征图(H’x W’x N);式子(1)中的卷积运算假定无填充,步幅为1,忽略偏置。
卷积层的两个主要优势在于参数共享和稀疏连接,滤波器可以共用于图片的各个区域,同时输入特征图与输出特征图之间不是密集连接的而是通过卷积窗口稀疏连接的,卷积神经网络通过这两种机制来减少参数,以便我们用更小的训练集来训练它,同时可以预防过拟合。
1.2.2池化层
我们可以观察到在卷积层后面常常会跟着一个池化层,它的目的是为了缓解卷积层对位置的敏感性。池化是缩小高、宽方向的运算,它也有一个窗口,一般默认无填充,步幅大小为窗口大小。池化层可以分为最大池化(MaxPooling)、平均池化(AveragePooling)等,其中最常用的就是最大池化。以图2为例,输入是一个二维3x3特征图,池化窗口为2x2,此处在特征图上以步幅1滑动窗口,在特征图的每个窗口位置2x2取该区域的最大值输出到输出特征图的对应位置得到最终的输出特征图(2x2)。而对于平均池化层则是取该区域的平均值作为输出元素。
池化层有三个特征:第一,池化层无要学习的参数;第二,池化前后输入特征图和输出特征图的通道数始终一致,即通道数不变;第三,对微小的位置变化具有鲁棒性[9],即输入特征图的数据发生微小变化,输出特征图的数据有可能不变。
图2 窗口大小为2x2的最大池化运算
1.2.3全连接层
全连接层是不同于卷积层,它的输入和输出之间是密集连接的,由此产生巨大数量的权重。我们设某一全连接层的权重为W(hxd,h表示下层神经元数量,d表示上层神经元数量),输入特征矩阵为X(dxb,b表示批量大小),输出矩阵为Z(hxb),则全连接层的核心计算公式(忽略偏置)为:
(2)
一般卷积神经网络采用全连接层作为最后的分类器,目前经典的网络全连接层数量较少,一般1~3个,有的网络甚至无全连接层,用了全局平均池化代替了它,一个原因就是全连接层带来的巨大参数负担。
1.2.4激活函数
我们目前常用的激活函数是ReLu函数(又称线性修正单元),但也有Sigmoid函数、Tanh函数等可选用于适合的模型。激活函数的目的是为了引入非线性变换,增加网络的非线性。
1.3经典模型
卷积神经网络的经典模型有LeNet、AlexNet、VGG、NiN、GoogLeNet、ResNet、DenseNet等,我们就挑选两个经典模型AlexNet和ResNet来简述一下,其余的在此不再赘述。
1.3.1AlexNet
我们前面提到AlexNet是第一个在ImageNet竞赛上利用深度学习取得冠军的卷积神经网络。该模型由5个卷积层和2个全连接隐藏层以及1个全连接输出层组成。由于ImageNet数据集的图片普遍比MNist数据集的大,为了捕获到合适的特征,AlexNet的第一层使用了11x11大小的滤波器窗口,之后的第二层卷积层由于图片大小的减小,使用了5x5的滤波器窗口,而之后的第三、四、五层则全用了3x3的窗口大小。还有该模型相比于LeNet使用了ReLU激活函数使模型训练更简单,一定程度避免了梯度消失。另外在第一、二、五卷积层后面使用了步幅为2、窗口大小为3x3的最大池化层来缓解卷积层对位置的敏感性,同时在全连接层使用了丢弃法(Dropout层)来减少过拟合。并且模型训练使用了GPU,由于资源受限而参数过多,将其参数分在多个GPU上并行运算,但现在我们大可不必。还有AlexNet训练使用了图像增广操作进一步增加数据数量,提高准确率,减少过拟合。
1.3.2ResNet
ResNet模型在ImageNet竞赛中得到的精度首次超过人类的能力。它通过跨层连接操作克服了深度模型训练过程梯度消失的问题,使得网络可以不断地加深,同时精度还不错。ResNet的核心部件也就是创新之处就是残差块,每个残差块引入了跨层连接模块(包括恒等连接等),该模块学习残差映射(即W(x)=H(x)-F(x)),并不是直接学习残差块主模块的函数F(x)。ResNet的残差块如下图3所示:
图3 ResNet的残差块
ResNet模型使用大量小滤波器如1x1、3x3等来代替大滤波器从而减少参数数量,还在卷积层大量使用批量归一化层来稳定深度神经网络中间的输出值,从而使深层网络训练更容易,加快训练且取得搞更高的精度。
参考资料:
[1]斋藤康毅.深度学习入门——基于Python的理论与实现
[2]飞桨领航团图像分类零基础训练营:https://aistudio.baidu.com/aistudio/course/introduce/11939?directly=1&shared=1
[3]动手学深度学习(Pytorch版)
[4]纪荣嵘,林绍辉,晁飞,吴永坚,黄飞跃. 深度神经网络压缩与加速综述[J]. 计算机研究与发展, 2018, 55(9): 1871-1888.