常见CNN模型 之AlexNet网络

常见CNN模型 之AlexNet网络_第1张图片

论文出处《 ImageNet Classification with Deep Convolutional Neural Networks 》

AlexNet网络在2012年内的ImageNet比赛中脱颖而出,性能大幅超越传统基于SVM等算法。其作者是多伦多大学的Alex Krizhevsky,因此网络命名为AlexNet网络。当然站在现在看AlexNet网络,它的很多trick也被运用广泛,但毕竟在当年还没有框架的年代能达到一定的效果,也是非常的不容易。

【网络结构】

常见CNN模型 之AlexNet网络_第2张图片

图1 AlexNet网络结构图

上图分为上下两个部分,每个部分对应两个GPU,为了完全利用两块GPU来提高运算的效率,单个GPU对应的网络在结构上差异不是很大,因此简化为单GPU上有网络总层数为8层,5个卷积层,3个全连接层。

**第一层:**输入为 224×224×3 的图像,经过图像预处理为 227×227×3 的图像,卷积核的数量为96,论文中两片GPU分别计算48个核; 卷积核的大小为 11×11×3 ; stride = 4, stride表示的是步长, pad = 0, 表示不扩充边缘。则卷积过后得到96幅图像大小为55×*55图像,卷积后图像大小计算公式见下。然后进行 (Local Response Normalized), 最后进行池化操作(Max Pool),pool_size = (3, 3), stride = 2, pad = 0 ,池化后有96幅图像大小为27×27;
卷 积 后 图 像 大 小 : N = ( W − F + 2 P ) / S + 1 池 化 后 图 像 大 小 : N = ( W − F ) / S + 1 卷积后图像大小:N = (W − F + 2P )/S+1 \\ 池化后图像大小:N = (W - F)/ S + 1 N=(WF+2P)/S+1N=WF/S+1
常见CNN模型 之AlexNet网络_第3张图片

第二层:**输入上一层的feature map,经过卷积操作,卷积的个数为256个,论文中的两个GPU分别有128个卷积核。卷积核的大小为:5×5×48; pad = 2, stride = 1; 然后做局部归一化, 最后进行池化操作, pool_size = (3, 3), stride = 2;

**第三层:**输入第二层的feature map,卷积操作:卷积核个数为384, kernel_size = (3×3×256 3 \times 3 \times 2563×3×256), padding = 1, 第三层无LRN和Pool;

**第四层:**输入第三层的feature map,卷积操作卷积核个数为384, kernel_size = (3×3), padding = 1,无LRN和Pool;

**第五层:**输入第四层的feature map,卷积核个数为256, kernel_size = (3×3), padding = 1。然后直接进行max_pooling, pool_size = (3, 3), stride = 2;

**第六层:**全连接层,每一层神经元个数为4096,全连接层中使用了RELU和Dropout。

**第七层:**全连接层,每一层神经元个数为4096,全连接层中使用了RELU和Dropout。

**第八层:**全连接层,每一层神经元个数为4096,全连接层中使用了RELU和Dropout。

最终输出softmax为1000,因为ImageNet这个比赛的分类个数为1000。

【特点一:ReLU Nonlinearity(Rectified Linear Unit)】

使用ReLU激活函数,因为tanh等激活函数都存在一定的饱和问题,越到两边越平缓,这样梯度值逐渐趋于0。使用ReLU激活函数存在以下几点优势:

1、收敛速度更快,作者通过对比tanh激活函数在典型的四层网络的数据集CIFAR-10s实验中,得到0.25错误率时的对比曲线图。这主要是由于ReLU激活函数简化了计算过程,其没有负载的指数函数,使得计算成本降低。

常见CNN模型 之AlexNet网络_第4张图片

2、ReLU是单边的,这更加符合生物神经元的实际,更符合生物生物神经元的特征

【特点二:Local Response Normalization(局部响应归一化)】

因为用到了ReLu激活函数,其值域没有区间,需要对ReLU得到的结果进行一个归一化,归一化公式见下。针对公式形象理解见下图,图中每个矩形表一个卷积核最终生成的feature map,而且所有的像素都已经通过ReLU激活函数进行操作,接下来需要对其进行局部响应归一化操作,如图绿色箭头指向待归一化的某个像素,其位于第i个kernel对应的feature map,其坐标位置为(x,y),蓝色箭头则是其周围的邻居kernel对应的feature map。归一化就是需要把这些邻居的对应(x,y)的像素值平方和相加,然后乘一个系数α再加上一个常数k,然后β次幂。文中关于系数的具体取值在验证集中得到。

b ( x , y ) i = a ( x , y ) i ( k + α ∑ j = max ⁡ ( 0 , i − n / 2 ) min ⁡ ( N − 1. i + n / 2 ) ( a ( x , y ) j ) 2 ) β , α = 1 0 − 4 , β = 0.75 , k = 2 , n = 5 b_{(x,y)}^i = \frac{{a_{(x,y)}^i}}{{(k + \alpha \sum\limits_{j = \max (0,i - n/2)}^{\min (N - 1.i + n/2)} {{{(a_{(x,y)}^j)}^2}} )^\beta }},\alpha=10^{-4},\beta=0.75,k=2,n=5 b(x,y)i=(k+αj=max(0,in/2)min(N1.i+n/2)(a(x,y)j)2)βa(x,y)iα=104,β=0.75,k=2,n=5

常见CNN模型 之AlexNet网络_第5张图片

【特征三:Overlapping Pooling(覆盖的池化操作)】

**不覆盖池化操作:**一般池化层没有重叠区域(pool_size = stride),比如一个 8×8 的图像,池化层的尺寸是2×2,那么经过池化后的操作得到的图像是 4×4 大小;

**覆盖池化操作:**池化层有重叠区域(pool_size > stride ),论文中提到覆盖的池化操作一方面降低了错误率,同时更不容易过拟合。

【特征四:Droupout】

全连接层运用Dropout,每个节点都有50%输出激活值或者为0

【总结】

针对论文中的AlexNet,具体工程中针对AlexNet也有很多其它的版本,比如很多的实际运用中舍去局部响应归一化的方法,整个网络大大简单了,现在运用比较广泛的是BatchNormalization技术 。

[参考文献]
深入理解AlexNet网络:https://blog.csdn.net/luoluonuoyasuolong/article/details/81750190

AlexNet网络详解及各层作用:https://blog.csdn.net/Rasin_Wu/article/details/80017920

你可能感兴趣的