论文中转 : ImageNet Classification with Deep Convolutional Neural Networks
自Le Net-5在1998年提出以后,时隔14年,AlexNet横空问世,在2012年ImageNet竞赛中以冠军的成绩笑傲群雄,也就是从那时起,更多更优秀的网络被相继提出。论文第一作者是来自多伦多大学的Alex Krizhevsky,因此网络称为Alex Net。
在论文中,作者训练了一个大而深(相比于之前)的卷积网络用于ImageNet比赛,将120万高分辨图像分为1000个类别。在测试集上,分别达到了37.5%的top-1错误率和17.0%的top-5错误率,超越了先前最好的网络。网络共有600万参数,65万个神经元,5个卷积层加3个全连接层,输出为1000类别。为了防止过拟合,作者采用了数据扩充和dropout正则法,实验结果表明此方法非常有效;为了加快训练速度,作者采用了两块并行的GPU同时对特征图进行运算。
由于采用了双GPU模式,所以结构图呈现的是上图的样子,下面引用一张博客作者 chenyuping666 文章的图片,可以详细的了解网络内部结构与实现细节。
从上图可以看到,输入为227×227×3的图像
在conv1中 ,卷积核大小为11×11,步长为4,通道数为96(每台GPU运算48个,下同),经过激活函数Relu激活后,采用最大池化(size=3×3,stride=2),标准化,输出为27×27×96。
在conv2中 ,卷积核大小为5×5,步长为1,通道数256,先对输入特征图扩展像素为31×31(pad=2),然后卷积,激活,池化(size=3×3,stride=2),标准化,输出特征图为13×13×256。
在conv3,conv4中 ,卷积核大小都为3×3,步长为1,pad=1,通道数为384,经过激活后输出特征图为13×13×384。
在conv5中 ,卷积核大小都为3×3,步长为1,通道数为256,经过激活,池化后输出特征图为6×6×256。
在fcn6,fcn7中 ,共有4096个神经元,采用了dropout技术防止过拟合。
在fcn8 ,也就是最后一层,采用softmax输出1000个类别。
相比于之前的网络,AlexNet为何能取得比较好的结果呢,从作者的论文中可以发现以下几点:
3.1 非线性激活函数Relu 在之前一般使用tanh(x)或sigmoid作为激活函数,但这些饱和的线性函数在梯度的计算上非常缓慢,并且容易产生梯度消失问题。Relu的出现使这些问题得到了有效的解决。在基于cifar-10数据集的标准四层网络测试中,采用tanh和Relu作为激活函数使error rate达到0.25所用的时间,Relu比tanh快大约6倍。
3.2 多个GPU 作者认为计算资源的大小限制了网络的大小,要想训练大的网络结构,必须拥有足够的计算资源。120万的数据集太大以至于单个GPU不足以匹配,因此作者将网络的计算任务分配到两个GPU上执行。目前GPU特别适合做并行化,因为一个GPU可以直接从另一个GPU读和写内容,而不需要经过主机内存。
3.3 局部响应归一化(LRN) 作者在文章中提出了Local Response Normalization的方法,分别将top-1和top-5错误率降低了1.4%和1.2%。作者在文中提到,如果训练样本产生一个正输入到Relu,网络只会在那个特定神经元上学习,但是引入局部响应正则化后,提高了网络的泛化能力。这种响应归一化会产生一种由某一神经元所激发的横向抑制,为由使用不同卷积核计算的神经元输出之中的“big activities”创造竞争。
3.4 重叠池化 一般的池化操作因为没有重叠,所以pool_size 和 stride是相等的。例如6×6的图像在size=2×2的池化后,输出为3×3,但是本文使用的size