Deep Learning回顾#之LeNet、AlexNet、GoogLeNet、VGG、ResNet
CNN的发展史
上一篇回顾讲的是2006年Hinton他们的Science Paper,当时提到,2006年虽然Deep Learning的概念被提出来了,但是学术界的大家还是表示不服。当时有流传的段子是Hinton的学生在台上讲paper时,台下的机器学习大牛们不屑一顾,质问你们的东西有理论推导吗?有数学基础吗?搞得过SVM之类吗?回头来看,就算是真的,大牛们也确实不算无理取闹,是骡子是马拉出来遛遛,不要光提个概念。
时间终于到了2012年,Hinton的学生Alex Krizhevsky在寝室用GPU死磕了一个Deep Learning模型,一举摘下了视觉领域竞赛ILSVRC 2012的桂冠,在百万量级的ImageNet数据集合上,效果大幅度超过传统的方法,从传统的70%多提升到80%多。个人觉得,当时最符合Hinton他们心境的歌非《我不做大哥好多年》莫属。
这个Deep Learning模型就是后来大名鼎鼎的AlexNet模型。这从天而降的AlexNet为何能耐如此之大?有三个很重要的原因:
- 大量数据,Deep Learning领域应该感谢李飞飞团队搞出来如此大的标注数据集合ImageNet;
- GPU,这种高度并行的计算神器确实助了洪荒之力,没有神器在手,Alex估计不敢搞太复杂的模型;
- 算法的改进,包括网络变深、数据增强、ReLU、Dropout等,这个后面后详细介绍。
从此,Deep Learning一发不可收拾,ILSVRC每年都不断被Deep Learning刷榜,如图1所示,随着模型变得越来越深,Top-5的错误率也越来越低,目前降到了3.5%附近,而在同样的ImageNet数据集合上,人眼的辨识错误率大概在5.1%,也就是目前的Deep Learning模型的识别能力已经超过了人眼。而图1中的这些模型,也是Deep Learning视觉发展的里程碑式代表。
图1. ILSVRC历年的Top-5错误率
在仔细分析图1中各模型结构之前我们先需要了解一下深度学习三驾马车之一————LeCun的LeNet网络结构。为何要提LeCun和LeNet,因为现在视觉上这些神器都是基于卷积神经网络(CNN)的,而LeCun是CNN的祖师爷,LeNet是LeCun打造的CNN经典之作。
LeNet以其作者名字LeCun命名,这种命名方式类似的还有AlexNet,后来又出现了以机构命名的网络结构GoogLeNet、VGG,以核心算法命名的ResNet。LeNet有时也被称作LeNet5或者LeNet-5,其中的5代表五层模型。不过别急,LeNet之前其实还有一个更古老的CNN模型。
最古老的CNN模型
1985年,Rumelhart和Hinton等人提出了后向传播(Back Propagation,BP)算法 [1] (也有说1986年的,指的是他们另一篇paper:Learning representations by back-propagating errors),使得神经网络的训练变得简单可行,这篇文章在Google Scholar上的引用次数达到了19000多次,目前还是比Cortes和Vapnic的Support-Vector Networks稍落后一点,不过以Deep Learning最近的发展劲头来看,超越指日可待。
几年后,LeCun利用BP算法来训练多层神经网络用于识别手写邮政编码 [2] ,这个工作就是CNN的开山之作,如图2所示,多处用到了5*5的卷积核,但在这篇文章中LeCun只是说把5*5的相邻区域作为感受野,并未提及卷积或卷积神经网络。
图2. 最古老的CNN网络结构图
LeNet
1998年的LeNet5 [4] 标注着CNN的真正面世,但是这个模型在后来的一段时间并未能火起来,主要原因是费机器(当时苦逼的没有GPU啊),而且其他的算法(SVM,老实说是你干的吧?)也能达到类似的效果甚至超过。
图3. LeNet网络结构
初学者也可以参考一下Caffe中的配置文件:
https://github.com/BVLC/caffe/blob/master/examples/mnist/lenet.prototxt
AlexNet、VGG、GoogLeNet、ResNet对比
LeNet主要是用于识别10个手写数字的,当然,只要稍加改造也能用在ImageNet数据集上,但效果较差。而本文要介绍的后续模型都是ILSVRC竞赛历年的佼佼者,这里具体比较AlexNet、VGG、GoogLeNet、ResNet四个模型。如表1所示。
模型名 | AlexNet | VGG | GoogLeNet | ResNet |
---|---|---|---|---|
初入江湖 | 2012 | 2014 | 2014 | 2015 |
层数 | 8 | 19 | 22 | 152 |
Top-5错误 | 16.4% | 7.3% | 6.7% | 3.57% |
Data Augmentation | + | + | + | + |
Inception(NIN) | – | – | + | – |
卷积层数 | 5 | 16 | 21 | 151 |
卷积核大小 | 11,5,3 | 3 | 7,1,3,5 | 7,1,3,5 |
全连接层数 | 3 | 3 | 1 | 1 |
全连接层大小 | 4096,4096,1000 | 4096,4096,1000 | 1000 | 1000 |
Dropout | + | + | + | + |
Local Response Normalization | + | – | + | – |
Batch Normalization | – | – | – | + |
表1 AlexNet、VGG、GoogLeNet、ResNet对比
AlexNet
接下里直接上图即可,AlexNet结构图如下:
图4. AlexNet网络结构
换个视角:
图5. AlexNet网络结构精简版
AlexNet相比传统的CNN(比如LeNet)有哪些重要改动呢:
(1) Data Augmentation
数据增强,这个参考李飞飞老师的cs231课程是最好了。常用的数据增强方法有:
- 水平翻转
- 随机裁剪、平移变换
- 颜色、光照变换
(2) Dropout
Dropout方法和数据增强一样,都是防止过拟合的。Dropout应该算是AlexNet中一个很大的创新,以至于Hinton在后来很长一段时间里的Talk都拿Dropout说事,后来还出来了一些变种,比如Dropout Connection等。
(3) ReLU激活函数
用ReLU代替了传统的Tanh或者Logistic。好处有:
- ReLU本质上是分段线性模型,前向计算非常简单,无需指数之类操作;
- ReLU的偏导也很简单,反向传播梯度,无需指数或者除法之类操作;
- ReLU不容易发生梯度发散问题,Tanh和Logistic激活函数在两端的时候导数容易趋近于零,多级连乘后梯度更加约等于0;
- ReLU关闭了右边,从而会使得很多的隐层输出为0,即网络变得稀疏,起到了类似L1的正则化作用,可以在一定程度上缓解过拟合。
当然,ReLU也是有缺点的,比如左边全部关了很容易导致某些隐藏节点永无翻身之日,所以后来又出现pReLU、random ReLU等改进,而且ReLU会很容易改变数据的分布,因此ReLU后加Batch Normalization也是常用的改进的方法。
(4) Local Response Normalization
Local Response Normalization要硬翻译的话是局部响应归一化,简称LRN,实际就是利用临近的数据做归一化。这个策略贡献了1.2%的Top-5错误率。
(5) Overlapping Pooling
Overlapping的意思是有重叠,即Pooling的步长比Pooling Kernel的对应边要小。这个策略贡献了0.3%的Top-5错误率。
(6) 多GPU并行
这个不多说,比一臂之力还大的洪荒之力。
VGG
VGG结构图
图6. VGG系列网络结构
换个视角看看VGG-19:
图7. VGG-19网络结构精简版
VGG很好地继承了AlexNet的衣钵,一个字:深,两个字:更深。
GoogLeNet
图8. GoogLeNet网络结构
GoogLeNet依然是:没有最深,只有更深。
主要的创新在于他的Inception,这是一种网中网(Network In Network)的结构,即原来的结点也是一个网络。Inception一直在不断发展,目前已经V2、V3、V4了,感兴趣的同学可以查阅相关资料。Inception的结构如图9所示,其中1*1卷积主要用来降维,用了Inception之后整个网络结构的宽度和深度都可扩大,能够带来2-3倍的性能提升。
图9. Inception结构
ResNet
网络结构如图10所示。
图10. ResNet网络结构
ResNet依然是:没有最深,只有更深(152层)。听说目前层数已突破一千。
主要的创新在残差网络,如图11所示,其实这个网络的提出本质上还是要解决层次比较深的时候无法训练的问题。这种借鉴了Highway Network思想的网络相当于旁边专门开个通道使得输入可以直达输出,而优化的目标由原来的拟合输出H(x)变成输出和输入的差H(x)-x,其中H(X)是某一层原始的的期望映射输出,x是输入。
图11. ResNet网络结构
总结
Deep Learning一路走来,大家也慢慢意识到模型本身结构是Deep Learning研究的重中之重,而本文回顾的LeNet、AlexNet、GoogLeNet、VGG、ResNet又是经典中的经典。
随着2012年AlexNet的一举成名,CNN成了计算机视觉应用中的不二选择。目前,CNN又有了很多其他花样,比如R-CNN系列,详情敬请期待我爱机器学习网站(52ml.net)的#Deep Learning回顾#下一期。
本文只是简单回顾,疏漏之处敬请谅解,感兴趣的可以加QQ群一起学习:564533376
[参考文献]
[1] DE Rumelhart, GE Hinton, RJ Williams, Learning internal representations by error propagation. 1985 – DTIC Document.
[2] Y. LeCun , B. Boser , J. S. Denker , D. Henderson , R. E. Howard , W. Hubbard and L. D. Jackel, “Backpropagation applied to handwritten zip code recognition”, Neural Computation, vol. 1, no. 4, pp. 541-551, 1989.
[3] Kaiming He, Deep Residual Learning, http://image-net.org/challenges/talks/ilsvrc2015_deep_residual_learning_kaiminghe.pdf
[4] Y. LeCun, L. Bottou, Y. Bengio, and P. Haffner. Gradient-based learning applied to document recognition. Proceedings of the IEEE, 86(11):2278–2324, 1998.
[5] A. Krizhevsky, I. Sutskever, and G. Hinton. Imagenet classification with deep convolutional neural networks. In Advances in Neural Information Processing Systems 25, pages 1106–1114, 2012.
[6] Christian Szegedy, Wei Liu, Yangqing Jia, Pierre Sermanet, Scott E. Reed, Dragomir Anguelov, Dumitru Erhan, Vincent Vanhoucke, Andrew Rabinovich: Going deeper with convolutions. CVPR 2015: 1-9
[7] Karen Simonyan, Andrew Zisserman: Very Deep Convolutional Networks for Large-Scale Image Recognition. CoRR abs/1409.1556 (2014)
[8] Kaiming He, Xiangyu Zhang, Shaoqing Ren, and Jian Sun. Deep Residual Learning for Image Recognition. IEEE Conference on Computer Vision and Pattern Recognition (CVPR), 2016
[9]一些对应的caffe实现或预训练好的模型: https://github.com/BVLC/caffe https://github.com/BVLC/caffe/wiki/Model-Zoo
Deep Learning回顾#之LeNet、AlexNet、GoogLeNet、VGG、ResNet相关推荐
- Deep Learning回顾之LeNet、AlexNet、GoogLeNet、VGG、ResNet
from:#Deep Learning回顾#之LeNet.AlexNet.GoogLeNet.VGG.ResNet CNN的发展史 上一篇回顾讲的是2006年Hinton他们的Science Pape ...
- 【深度学习】MLP/LeNet/AlexNet/GoogLeNet/ResNet在三个不同数据集上的分类效果实践
本文是深度学习课程的实验报告 使用了MLP/LeNet/AlexNet/GoogLeNet/ResNet五个深度神经网络模型结构和MNIST.Fashion MNIST.HWDB1三个不同的数据集,所 ...
- 图像分类经典神经网络大总结(AlexNet、VGG 、GoogLeNet 、ResNet、 DenseNet、SENet、ResNeXt )
前言 在CNN网络结构的演化上,出现过许多优秀的CNN网络,CNN的经典结构始于1998年的LeNet,成于2012年历史性的AlexNet,从此盛于图像相关领域. 发展历史:Lenet --> ...
- 综述:从LeNet 到 GoogLeNet:卷积神经网络的进化
综述:从LeNet 到 GoogLeNet:卷积神经网络的进化 XB D., xingbod@gmail.com 前言 深度学习的兴起使卷积神经网络在计算机视觉方面大放异彩,本文将按时间和创新点顺序介 ...
- 一文读懂LeNet、AlexNet、VGG、GoogleNet、ResNet到底是什么?
READING is better than SEX 文章目录 READING is better than SEX 什么是CNN? LeNet AlexNet VGG GoogLeNet ResNe ...
- [深度学习-总结]Deep learning中8大模型介绍与比较(LeNet5,AlexNet,VGG,Inception,MobileNets,ResNet,DenseNet,Senet)
深度学习 9中模型介绍与比较 0. CNN 结构演化 1. LeNet5 2. AlexNet 3. VGG 为什么使用2个3x3卷积核可以来代替5*5卷积核 4. 1*1卷积 5. Inceptio ...
- Pytorch之CNN:基于Pytorch框架实现经典卷积神经网络的算法(LeNet、AlexNet、VGG、NIN、GoogleNet、ResNet)——从代码认知CNN经典架构
Pytorch之CNN:基于Pytorch框架实现经典卷积神经网络的算法(LeNet.AlexNet.VGG.NIN.GoogleNet.ResNet)--从代码认知CNN经典架构 目录 CNN经典算 ...
- 计算机视觉:基于眼疾分类数据集iChallenge-PM图像分类经典模型剖析(LeNet,AlexNet,VGG,GoogLeNet,ResNet)
计算机视觉:图像分类经典模型 LeNet AlexNet VGG GoogLeNet ResNet 图像分类是根据图像的语义信息对不同类别图像进行区分,是计算机视觉的核心,是物体检测.图像分割.物体跟 ...
- 《动手学深度学习》(四) -- LeNet、AlexNet、VGG、NiN、GoogLeNet、ResNet、DenseNet 实现
上一小节学习了卷积神经网络的卷积层和池化层的实现,趁热打铁继续学习现代卷积神经网络的搭建,欢迎小伙伴们一起学习和交流~ 为了能够应⽤softmax回归和多层感知机,我们⾸先将每个⼤小为28×2828 ...
最新文章
- 最大字段和 冲出暴力枚举
- 赛题解析 | 初赛赛道一:实现一个分布式统计和过滤的链路追踪
- [Python人工智能] 三.TensorFlow基础之Session、变量、传入值和激励函数
- php和python-一个身居中国的法国程序员谈Python与PHP
- 35岁是青春的后期你最好把下面十件事做好
- SnapGene 4.3.6 for win —— 医学生的救星
- ubuntu 安装万能五笔
- 非谓语动词: 不定式, 动名词, 现在分词, 过去分词
- 老师用计算机教我们画画拼音,《汉语拼音13 ang eng ing ong》第三课时教学设计...
- byte(字节)根据长度转成kb(千字节)和mb(兆字节)
- 计算机 打印机型号编码不可用,win10系统查看打印机属性中描述不可用的解决方法...
- win10虚拟机管理服务器,如何使用微软的虚拟机管理器来管理Hyper-V虚拟机
- 【贪玩巴斯】数字信号处理Digital Signal Processing(DSP)——第三节「离散时间 系统 详解」2021-09-29
- ceph-deploy源码分析(三)——mon模块 转
- android 循环录像功能吗,行车记录仪到底要不要循环录像
- 让JAVA活起来----很欣赏(JMF媒体框架)
- 远程锁定计算机,利用Microsoft帐户来远程退出并锁定你的Windows 10电脑
- 产品经理面试攻略------简历篇
- Android手游SDK那点事(二)SDK项目结构设计(初版,废弃)
- 三年海外软件项目的经历
热门文章
- 【c语言】蓝桥杯2020校内模拟赛c组
- LuckyFrame V2.7.2 Beta 发布,一站式自动化测试平台
- oracle ocp题库变化,052最新考试题及答案整理-30
- 3星|《终身成长》:成长型思维让人进步,固定型思维让人固步自封。有新意的励志书,但有锤子模式的嫌疑。...
- A标签中通过href和onclick传递的this对象实现思路
- ”计算机操作系统“学习笔记1
- J2EE 13规范(4)-JSP
- backgroundworker控件的使用(线程传值)
- 提升用户体验的根本是内容
- 活动目录实战之一 windows 2008 r2 安装域中第一台域控制器