一.CNN发展纵览
我们先来看一张图片:
1985年,Rumelhart和Hinton等人提出了后向传播(Back Propagation,BP)算法(也有说1986年的,指的是他们另一篇paper:Learning representations by back-propagating errors),使得神经网络的训练变得简单可行,这篇文章在Google Scholar上的引用次数达到了19000多次,目前还是比Cortes和Vapnic的Support-Vector Networks稍落后一点,不过以Deep Learning最近的发展劲头来看,超越指日可待。
几年后,LeCun利用BP算法来训练多层神经网络用于识别手写邮政编码,这个工作就是CNN的开山之作,多处用到了5*5的卷积核,但在这篇文章中LeCun只是说把5*5的相邻区域作为感受野,并未提及卷积或卷积神经网络。
1998年的LeNet5标注着CNN的真正面世,但是这个模型在后来的一段时间并未能火起来,主要原因是要求机器性能较好,而且其他的算法像SVM也能达到类似的效果甚至超过。
AlexNet是在2012年被发表的一个经典之作,并在当年取得了ImageNet最好的成绩,也是在那年之后,更多的更深的神经网络被提出,其官方提供的数据模型,他的top-1误差率为37.5%,以及top-5的误差率为17%,这是相当好的一个成绩。
2014年,VGG-Net 在ILSVRC localization and classification 两个问题上分别取得了第一名和第二名,VGG-Net不同于AlexNet的地方是:VGG-Net使用更多的层,通常有16-19层,而AlexNet只有8层。另外一个不同的地方是:VGG-Net的所有 convolutional layer 使用同样大小的 convolutional filter,大小为 3 x 3。
同年,GoogLeNet, 在2014年ILSVRC挑战赛获得冠军,将Top5 的错误率降低到6.67%. 一个22层的深度网络,论文在http://arxiv.org/pdf/1409.4842v1.pdf,题目为:Going deeper with convolutions。GoogLeNet这个名字也是挺有意思的,为了像开山鼻祖的LeNet网络致敬,他们选择了这样的名字。
下图为GooLeNet的网络结构图:
令人感兴趣的是,在GoogLeNet出来之前,主流的网络结构突破大致是网络更深(即层数增加),网络更宽(即神经元数目增多),但这样做存在一些缺点:
- 当训练集有限时,参数过多,模型会出现过拟合;
- 网络越大,计算复杂度越大,设计起来越困难;
- 当层数增多时,梯度越往后越容易消失;