本文主要是介绍【卷积神经网络发展历程】从LeNet、AlexNet到ResNet、SENet,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
经典的LeNet诞生于1998年。然而之后CNN的锋芒开始被SVM等手工设计的特征盖过。随着ReLU和dropout的提出,以及GPU和大数据带来的历史机遇,CNN在2012年迎来了历史突破–AlexNet,从此CNN呈现爆炸式发展。
从此,Deep Learning一发不可收拾,ILSVRC每年都不断被Deep Learning刷榜,如图1所示,随着模型变得越来越深,Top-5的错误率也越来越低,目前降到了2.25%附近(2017,SENet),而在同样的ImageNet数据集合上,人眼的辨识错误率大概在5.1%,也就是目前的Deep Learning模型的识别能力已经超过了人眼。而下图中的这些模型,也是Deep Learning视觉发展的里程碑式代表。
CNN主要的经典结构包括:LeNet、AlexNet、ZFNet、VGG、NIN、GoogleNet、ResNet、SENet等,其发展过程如下图所示。(下图来自刘昕博士《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的开山之作,多处用到了5*5的卷积核,但在这篇文章中LeCun只是说把5*5的相邻区域作为感受野,并未提及卷积或卷积神经网络(1986年)。
1.开山鼻祖:LeNet5
LeNet是卷积神经网络的祖师爷LeCun在1998年提出,用于解决手写数字识别的视觉任务。自那时起,CNN的最基本的架构就定下来了:卷积层、池化层、全连接层。如今各大深度学习框架中所使用的LeNet都是简化改进过的LeNet-5(-5表示具有5个层),和原始的LeNet有些许不同,比如把激活函数改为了现在很常用的ReLu。
1998年的LeNet5[4]标注着CNN的真正面世,但是这个模型在后来的一段时间并未能火起来,主要原因是费机器(计算跟不上),而且其他的算法(SVM)也能达到类似的效果甚至超过。但是LeNet最大的贡献是:定义了CNN的基本结构,是CNN的鼻祖。
1. LeNet的结构:
LeNet5包含Input、卷积层1、池化层1、卷积层2、池化层2、全连接层、输出层。
INPUT: [28x28x1] weights: 0
CONV5-32: [28x28x32] weights: (5*5*1+1)*32
POOL2: [14x14x32] weights: 2*2*1
CONV5-64: [14x14x64] weights: (5*5*32+1)*64
POOL2: [7x7x64] weights: 2*2*1
FC: [1x1x1024] weights: (7*7*64+1)*1024
FC: [1x1x10] weights: (1*1*512+1)*10
2.LeNet的特点
LeNet5当时的特性有如下几点:
- 每个卷积层包含三个部分:卷积、池化和非线性激活函数
- 使用卷积提取空间特征(起初被称为感受野,未提“卷积”二字)
- 降采样(Subsample)的平均池化层(Average Pooling)
- 双曲正切(Tanh)的激活函数
- MLP作为最后的分类器
- 层与层之间的稀疏连接减少计算复杂性
3.LeNet的突出贡献
LeNet定义了CNN的基本结构,是CNN的鼻祖。
这篇关于【卷积神经网络发展历程】从LeNet、AlexNet到ResNet、SENet的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!