摘要:本文总结了AlexNet的技术要点,详细剖析了AlexNet神经网络每一层的输入输出等,并将caffe中AlexNet网络的对应部署列了出来。

1.AlexNet的技术要点

(1)双GPU并行计算:该网络采用了两块GPU计算,将卷积核分成两部分分别在GPU上运行。

 (2)ReLU激活函数:LeNet采用的是sigmoid激活函数,因sigmoid函数在饱和阶段  (函数两端)导数趋近于0,故在反向计算梯度时会使得计算得到的梯度趋近于0,造成梯度消失。AlexNet则采用的是ReLU( Rectified  Linear Units)激活函数,这就解决了梯度消失的困扰(在输入大于0时,梯度为1),并且也符合人类神经元的特性(在输入小于0时,梯度为0,即参数不会变,称为神经元的单边抑制)。目前大部分激活函数都会采用ReLU函数。

注:  ReLu:f(x)= max(0,x)            Sigmoid: f(x) =  f(x) = (1 + e −x ) −1

(3) 局部响应归一化(Local Response Normalization,LRN):在神经网络中,我们用激活函数将神经元的输出做一个非线性映射,但是tanh和sigmoid这些传统的激活函数的值域都是有范围的,但是ReLU激活函数得到的值域没有一个区间,所以要对ReLU得到的结果进行归一化。注:现在LRN已不常用了

 

(4)重叠池化( Overlapping Pooling):卷积核在遍历图像进行池化时,步长小于卷积核尺寸造成对重叠部分的重复池化。在caffe中重叠池化的一个例子如下:

跑神经网络模型时显存和内存的关系 神经网络 gpu_caffe

(5)dropout :在全连接层随机丢弃一定比例(一般是0.5)神经元,每次只训练50%的参数。最后该全连接层每一个参数都得到训练,在测试时随机抽出50%的参数去预测。dropout是正则化的一种方式,可以有效避免过拟合。在caffe中dropout的一个例子如下:

跑神经网络模型时显存和内存的关系 神经网络 gpu_caffe_02

(6)数据增强(data augmentation):神经网络过拟合的表现为在训练集上准确率很高,而在测试集上准确率很低。过拟合一般是由两个方面造成的,一是数据不够多,二是神经网络的拟合能力太强。所以通过已有的数据,经过一些变换处理,使其在像素层面上不同,而在宏观上不变(即数据的标签不变),通过这样数据增强的处理可以有效减弱过拟合。

2.AlexNet详解:(共8层,五层卷积层,三层全连接层)

跑神经网络模型时显存和内存的关系 神经网络 gpu_卷积神经网络_03

(1)输入:输入为227*227*3(有RGB 3个通道,每个通道为227*227大小)

跑神经网络模型时显存和内存的关系 神经网络 gpu_卷积核_04

 (2)第一层:输入为227*227*3的大小,由96个11*11*3的卷积核进行卷积,步长为4,(227-11)/4+1=55,所以经过卷积操作后结果为55*55*96.由于采用两块GPU计算,卷积核分两部分进行卷积,所以每一层结果为55*55*48。经过ReLU操作后LRN,其大小不会变。大小为55*55*48的特征图经过max pooling,pooling卷积核大小为3*3,步长为2,输出为(55-3)/2+1=27。所以第一层最后输出为27*27*48(每一层,共两层)。

跑神经网络模型时显存和内存的关系 神经网络 gpu_跑神经网络模型时显存和内存的关系_05

(3)第二层:输入为27*27*48(每一层,共两层),经过补边操作(每边加两个像素),后经过256个5*5*48的卷积核,步长为1,(27+2*2-5)/1+1=27,所以经过补边、卷积操作后大小为27*27*128。同样,经过ReLU操作后LRN,其大小不会变。大小为27*27*128的特征图经过max pooling,pooling卷积核大小为3*3,步长为2,输出为(27-3)/2+1=13.所以第二层最后输出为13*13*128(每一层,共两层)。

 

(4)第三层:输入为13*13*128(每一层,共两层),经过补边操作(每边加一个像素),后经过384个3*3*128的卷积核,步长为1,(13+2*1-3)/1+1=13,所以经过补边、卷积操作后大小为13*13*192(每一层,共两层),最后经过ReLU大小不变。

 

(5)第四层:输入为13*13*192(每一层,共两层),经过补边操作(每边加一个像素),后经过384个3*3*192的卷积核,步长为1,(13+2*1-3)/1+1=13,所以经过补边、卷积操作后大小为13*13*192(每一层,共两层),最后经过ReLU大小不变。

 

(6)第五层:输入为13*13*192(每一层,共两层),经过补边操作(每边加一个像素),后经过256个3*3*192的卷积核,步长为1,(13+2*1-3)/1+1=13,所以经过补边、卷积操作后大小为13*13*128(每一层,共两层),然后经过ReLU大小不变。最后经过max pooling,pooling大小为3*3,步长为2,(13-3)/2+1=6,所以最后输出为6*6*128(每一层,共两层).

 

(7)第六层:输入为6*6*128(每一层,共两层),总的尺寸为6*6*256.用4096个6*6*256卷积核进行卷积,结果为4096个1*1的特征图,每一层为2048个1*1的特征图,即每一层为2048维向量。然后经过ReLU和dropout。所以该层最终结果为4096个数据。

跑神经网络模型时显存和内存的关系 神经网络 gpu_caffe_06

(8)第七层:第6层输出的4096个数据与第7层的4096个神经元进行全连接,然后经由ReLU和Dropout进行处理后生成4096个数据。

跑神经网络模型时显存和内存的关系 神经网络 gpu_卷积核_07

(9)第八层:第7层输入的4096个数据与第8层的1000个神经元进行全连接。最后经softmax输出每个类型的概率。

跑神经网络模型时显存和内存的关系 神经网络 gpu_卷积核_08