4.2 AlexNet
在上节中我们介绍了第一个成功付诸实践的CNN产品——LeNet5。2012年AlexNet[2]在ImageNet上的分类准确率(Top-5)以高于第二名11个百分点的成绩摘得桂冠。这一成绩无疑给当时的学术界和产业界带来了巨大的冲击,关于神经网络的研究也从此步入了大众的视野。本节就来对AlexNet做简单介绍。
AlextNet网络结构如图4-3所示。
图4-3 AlexNet网络结构[2]
AlexNet共分为八层,分别是五个卷积层以及三个全连接层。
第一层为卷积层,输入为224×224×3的图像,使用了96个11×11的卷积核,步幅(Stride)设置为4,不做填充(Padding),因此第一层输出的特征图大小为54×54。
AlexNet采用ReLU(修正线性单元,Rectified Linear Unit)作为激活函数,关于ReLU函数稍后会给出详细的讨论。第一个卷积层输出的特征图还要经过一次局部响应归一化(LRN,Local Response Nomalization),一次最大池化(MaxPooling),所以最终特征图的大小为27×27。由于LRN在目前的研究中基本上不再使用,因此稍后只给出简单的介绍。
第二个卷积层采用了256个5×5的卷积核,步幅设置为1,填充为2,使用ReLU作为激活函数,然后进行LRN,输出的特征图大小为27×27,最后进行最大池化,输出特征图大小为13×13。
第三个卷积层采用了384个3×3的卷积核,步幅为1,填充为1,第三层没有做LRN和池化操作,特征图大小为13×13。
第四个卷积层采用了384个3×3的卷积核,步幅为1,填充为1,与第三层一样没有做LRN和池化操作,输出特征图大小为13×13。
第五个卷积层采用了256个3×3的卷积核,步幅为1,填充为1,然后进行最大池化操作,输出的特征图大小为6×6。
第六、七、八个卷积层是全连接层,每一层的神经元的个数为4096,最终输出Softmax为1000维张量(ImageNet的类别数为1000),全连接层中使用了ReLU和Dropout。
以上便是AlexNet的整体结构。AlexNet共计有6×107个参数和65000个神经元,如此庞大的参数量对于当时的硬件设备来说无疑是一个巨大的挑战。所以AlexNet采用两块GPU进行训练,将网络一分为二。以第二个卷积层为例,第二个卷积层一共有256个卷积核,AlexNet将其中的128个放在一块GPU上训练,另外的128个放在另一块GPU训练,这样就相当于减少了训练的内存量,也就产生了图中的两条支路。
下面介绍几个其他需要关注的地方。首先是激活函数。在早期,神经元一般采用Sigmoid函数或Tanh作为激活函数。然而这些函数在求梯度时较慢,并且Sigmoid的函数最大梯度为0.25,在进行反向传播的过程中还存在着梯度消失的问题。ReLU的梯度为1,这无论对计算还是传递来说都十分简便。其次是通过观察可以发现ReLU函数在小于0的部分的响应为0,这就增加了网络的稀疏性,相当于进行了正则化的操作,降低了网络发生过拟合的风险。
下面简单介绍一下LRN。在神经网络中,为了使网络有处理非线性模式的能力,我们引入了激活函数来做非线性的映射,和这些传统的激活函数的值域都是有确定范围的,但是ReLU激活函数却没有固定范围,所以要对ReLU得到的结果进行归一化,这就是LRN。LRN的具体计算见式(4-2)[2]。
代表的是ReLU在第i个卷积核的(x,y)位置的输出,n表示的是邻居个数,N表示卷积核的总数量。α,β,k,n为一些超参数。在生物神经元中有一种名为侧抑制(Lateral Inhibition)的现象,即当一个神经元周围的神经元激活值较大时,当前神经元的激活值会变小,LRN主要就是为了来完成这一点。这里简要解释一下这个式子的含义。
如图4-4所示,图中黄色位置代表着第i个特征图的(x,y)处的像素,即公式中的。如果要对这个位置进行归一化,就需要获取相邻特征图同样位置的像素值,即图中蓝色的位置,即公式中的。
图4-4 LRN
AlexNet使用的另一项技术便是随机失活(Dropout)。所谓随机失活就是使得神经元以某一概率响应为0,从而增加了网络的稀疏性,减少神经元对某一特征的依赖程度,如图4-5所示,图中橙色神经元响应被抑制变为失活状态。
图4-5 随机失活
由于神经元会以一定的概率失去响应,使得输出结果不完全依赖于某一个或某些神经元(特征),从而降低了过拟合的风险。
还有一个小技术便是重叠最大池化,一般在进行池化操作时,步幅与池化窗口的大小是相同的,这时池化窗口不会产生重叠,当步幅小于池化窗口时就会产生重叠,称为重叠池化。实验证明,重叠池化窗口能够分别将Top-1和Top-5的错误率分别降低0.4%、0.3%。