网站首页 > 技术文章 正文
背 景
在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
本文所有文字版权均属“宝略科技”,更多内容请搜索关注【宝略科技】微信公众号~
猜你喜欢
- 2024-10-03 Inception系列之Inception_v2 inception v2
- 2024-10-03 谷歌力作:神经网络训练中的Batch依赖性很烦?那就消了它
- 2024-10-03 Java树结构 Java树结构数据导出easyexcel
- 2024-10-03 「干货」泌尿外科腹腔镜手术入路,齐了
- 2024-10-03 泌尿外科腹腔镜手术入路,全在这了
- 2024-10-03 机器不学习:深度卷积模型 不要再问1x1卷积核的问题啦
- 2024-10-03 归一化方法总结 归一化bn
- 2024-10-03 RSTP和STP的状态角色一览 rstp相比stp的优点
- 2024-10-03 深度学习之重读经典(三)VGGNet 重读经典的意义
- 2024-10-03 深度学习笔记:AlexNet alexnet卷积神经网络
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)