计算机系统应用教程网站

网站首页 > 技术文章 正文

深度学习之重读经典(二)AlexNet 重拾经典深度阅读

btikc 2024-10-03 15:22:54 技术文章 12 ℃ 0 评论

背 景

在LeNet提出之后,卷积神经网络在计算机视觉领域中小有名气,但并未占领主导地位。这是因为LeNet仅适用于数据量小、结构简单的数据集,但是现实中的物体存在相当多的变化属性,需要通过更多的数据进行学习识别。随着互联网技术的发展以及电子设备的普及,图像数据的产生和获取更加便利,一些大规模复杂数据集应运而生(如:ImageNet),进一步推动了深度学习在各领域的发展。复杂的数据往往需要利用更深的网络来提取特征,2012年的ImageNet图像识别挑战赛中,AlexNet[1]横空出世,以显著优势赢得冠军,同年团队发表文章《ImageNet Classification with Deep Convolutional Neural Networks》,引领CNN的研究向更深层级、多通道、多参数的方向发展。


01、基本结构

AlexNet使用了8层卷积神经网络,包含5层卷积层和3层全连接层(LRN层和池化层不计)。第1、2、5个卷积层后各跟着一个核为3、步长为2的最大池化层,最后是三个全连接层。

原论文采用ImageNet数据集的子集作为训练数据,包含1000个类别。输入部分为3通道RGB图像,输入数据大小为227×227(原论文中为224×224,卷积推导后输出尺寸非55×55,故有误)。首先,进入第一个卷积层(卷积核尺寸为11×11,卷积核数量为96,步长为4),输出特征矩阵大小为[96,55,55]。经过池化操作后长宽各减半,得到维度为[96,27,27]的矩阵。然后,进入第二个卷积层(卷积核尺寸为5×5,卷积核数量为256,填充像素数为2),输出特征矩阵大小为[256,27,27],池化操作后得到维度为[256,13,13]的矩阵。接着,经过三个卷积核为3×3的卷积层,通道数分别为384,384,256,填充像素数都为1,再经过相同的池化操作,输出矩阵大小为[256,6,6]。最后,将矩阵展开顺次连接([256,6,6]->[1,256×6×6])作为全连接层的输入,三个全连接层的通道数分别为4096,4096,1000,即最终得到1000个输出,对应着样本数据中的1000个类。

由于庞大的计算量以及GPU内存限制,原论文采用2块GPU进行卷积计算,提高运算效率。AlexNet详细网络结构如图所示,上下两个部分对应两个GPU。



02、模型详解

激活函数Activation Function

激活函数[2]的作用是给神经网络引入非线性特性,常用于卷积层后。在不使用激活函数时,无论网络有多深,最终的输出都是原始输入的线性组合,这样的网络表达能力有限。而引入激活函数后输出被映射到非线性,使得深层神经网络几乎可以逼近任意函数。常用的激活函数有Sigmoid函数、Tanh函数、ReLU函数等,AlexNet首次选用ReLU作为激活函数,不同激活函数的对比如图2所示:

? Sigmoid函数将输入值映射到[0,1]之间,函数值处处可导,它的缺点是计算量大且存在梯度消失问题。

? Tanh函数与Sigmoid函数类似,输入值被映射到[-1,1]之间,改善了Sigmoid中非0均值的问题。

? ReLU函数将输入小于0的部分映射为0、大于0的部分保持不变,计算速度更快的同时有效解决了梯度消失问题。


局部响应归一化Local Response Normalization,LRN

LRN[3]的思想来源于神经生物学中“测抑制”的概念:被激活的神经元抑制相邻的神经元。LRN对局部神经元的活动创建竞争机制,使得特征矩阵中原本显著的特征更为显著,常用于激活函数后,可以增强模型的泛化能力。LRN的计算公式如下:

b是归一化后的值,a是输入值也即激活函数的输出值,N是总的通道数,k、α、β、n/2是一些自定义系数。AlexNet在第1、2个卷积层后使用LRN层进行归一化。


数据增强Data Augmentation

在计算机视觉领域,数据增强通常指的是通过一些图像处理手段增加训练的数据量,从而提高模型的泛化能力。数据增强也可以解决样本数量少的问题,常见的方法有旋转、缩放、裁剪、添加噪声、亮度对比度变换等,如图3所示。

AlexNet输入数据从256×256的原始图像中随机截取227×227的区域,允许水平翻转,即样本增加到原来的(256-227)2×2=1682倍。


丢弃法Dropout

Dropout[4]是一种正则化方法。当训练样本较少而模型参数太多时,容易产生过拟合(即在训练集上精度高而在测试集上精度低)的现象。Dropout的原理就是在每个前向传播过程中随机丢弃部分节点,如图4所示:


图中左侧为一个标准的四层神经网络,在左侧网络中应用Dropout后生成的网络示例如右图,交叉符号表示这个神经元未激活。Dropout被证实可以有效地缓解过拟合现象,一定程度上达到正则化的效果,从而增强模型的泛化能力。AlexNet在第1、2个全连接层前使用了Dropout。


03、PyTorch 实现

使用Pytorch框架来实现AlexNet模型,代码如下:

完整训练流程与实现请见:

https://github.com/PopSmartTech/deeplearning


04、总 结

AlexNet在LeNet的基础上构建更深更宽的网络,同时引入许多新技术,例如第一次使用ReLU作为激活函数、运用Dropout进行正则化、采用最大池化代替平均池化、提出了LRN层以及使用GPU进行运算加速等。AlexNet的成功证明了CNN在复杂模型下同样具备有效性,同时GPU计算可以将训练时长控制在可接受范围内,这些论点进一步推动了深度学习的发展。


参考资料

[1] Krizhevsky A, Sutskever I, Hinton G E. ImageNet Classification with Deep Convolutional Neural Networks [J]. Advances in Neural Information Processing Systems, 2012, 25(2):2012.

[2] Bubbliiiing.. 各类激活函数介绍与优缺点分析

https://blog.csdn.net/weixin_44791964/article/details/117338865?spm=1001.2014.3001.5502

[3] zhupc_. LRN

https://blog.csdn.net/u014296502/article/details/78839881

[4] Microstrong0305. 深度学习中Dropout原理解析

https://www.jianshu.com/p/73532b63068e


本文所有文字版权均属“宝略科技”,更多内容请搜索关注【宝略科技】微信公众号~

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表