You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

62 lines
7.7 KiB
Markdown

2 years ago
# 122 | 计算机视觉领域的深度学习模型VGG & GoogleNet
在上第一期的分享中我们通过一篇经典论文讲了AlexNet这个模型。可以说这篇文章是深度学习在计算机视觉领域发挥作用的奠基之作。
AlexNet在2012年发表之后研究界对这个模型做了很多改进工作使得这个模型得到了不断优化特别是在ImageNet上的表现获得了显著提升。今天我们就来看看针对AlexNet模型的两个重要改进分别是VGG和GoogleNet。
## VGG网络
我们要分享的第一篇论文题目是《用于大规模图像识别的深度卷积网络》Very Deep Convolutional Networks for Large-Scale Image Recognition\[1\]。这篇文章的作者都来自于英国牛津大学的“视觉几何实验室”Visual Geometry Group简称VGG所以文章提出的模型也被叫作 **VGG网络**。到目前为止这篇论文的引用次数已经多达1万4千次。
首先,我们简单来了解一下这篇论文的作者。
第一作者叫卡伦·西蒙彦Karen Simonyan发表论文的时候他在牛津大学计算机系攻读博士学位。之后西蒙彦加入了谷歌在DeepMind任职继续从事深度学习的研究。
第二作者叫安德鲁·兹泽曼Andrew Zisserman是牛津大学计算机系的教授也是计算机视觉领域的学术权威。他曾经三次被授予计算机视觉最高荣誉“马尔奖”Marr Prize
这篇论文的主要贡献是什么呢?一个重要贡献就是研究**如何把之前的模型例如AlexNet加深层次从而能够拥有更好的模型泛化能力最终实现更小的分类错误率**。
为了更好地理解这篇文章的贡献我们来回忆一下AlexNet的架构。AlexNet拥有8层神经网络分别是5层卷积层和3层全联通层。AlexNet之所以能够有效地进行训练是因为这个模型利用了“线性整流函数”ReLu、数据增强Data Augmentation以及Dropout等手段。这些方法让AlexNet能够达到8层。
但是学术界一直以来都认为从理论上看神经网络应该是层数越多泛化能力越好。而且在理论上一个8层的神经网络完全可以加到18层或者80层。但是在现实中梯度消失和过拟合等情况让加深神经网络变得非常困难。在这篇论文中VGG网络就尝试从AlexNet出发看能否加入更多的神经网络层数来达到更好的模型效果。
那VGG是怎么做到加深神经网络层数的呢总体来说VGG对卷积层的“过滤器”Filter进行了更改达到了19层的网络结构。从结果上看和AlexNet相比VGG在ImageNet上的错误率要降低差不多一半。可以说**这是第一个真正意义上达到了“深层”的网络结构**。
VGG在“过滤器”上着手更改那么具体的改变细节究竟有哪些呢简单来说就是在卷积层中仅仅使用“3\*3”的“接受域”Receptive Field使得每一层都非常小。我们可以从整个形象上来理解认为这是一组非常“瘦”的网络架构。在卷积层之后是三层全联通层以及最后一层进行分类任务的层。一个细节是VGG放弃了我们之前介绍的AlexNet中引入的一个叫“局部响应归一化”Local Response Normalization的技术原因是这个技巧并没有真正带来模型效果的提升。
VGG架构在训练上的一个要点是先从一个小的结构开始我们可以理解为首先训练一个AlexNet然后利用训练的结果来初始化更深结构的网络。作者们发现采用这种“**初始训练**”Pre-Training的办法要比完全从随机状态初始化模型训练得更加稳定。
## GoogleNet
我们要分享的第二篇论文题目是《更深层的卷积》Going deeper with convolutions\[2\]。因为这篇论文的作者基本都来自于谷歌,所以文章提出的模型有时候又被叫作 **GoogleNet**。这篇论文拥有8千多次的引用数。
GoogleNet不仅和VGG一样在把架构做“深”上下文章而且在模型的效率上比AlexNet更加优秀。作者们利用了比AlexNet少12倍的参数在更深的架构上达到了更好的效果。
**GoogleNet创新的重点是在网络架构上**。和AlexNet以及VGG都不同的是GoogleNet的作者们认为更加合适的网络架构不是简单地把相同的卷积层叠加起来然后再把相同的全联通层叠加。如果我们需要更深的架构必须从原理上对网络架构有一个不同的理解。作者们认为网络结构必须走向“稀疏化”Sparsity才能够达到更深层次、更高效的目的。
那么能否直接用稀疏结构来进行网络的架构呢过去的经验表明这条路并不那么直观。第一直接利用稀疏的结构所表达的网络结构效果并不好第二这样做就无法利用现代的硬件特别是GPU的加速功能。现代的GPU之所以能够高效地处理视觉以及其他一系列类似的问题主要的原因就是**快速的紧密矩阵运算**。所以,直接使用稀疏结构有一定的挑战。
这篇论文的核心思想就是希望**用一组“局部的”Local紧密结构来逼近理想中的最优的稀疏化结构**,从而能够在计算上达到高效率,同时在理论思想上,能够利用稀疏化结构来达到更深的网络架构。
这种局部模块被作者们称作是**Inception模块**。什么意思呢传统上卷积层都是直接叠加起来的。而这篇论文提出的Inception模块其实就是让卷积层能够在水平方向上排列起来然后整个模块再进行垂直方向的叠加。至于水平方向排列多少个卷积层垂直方向排列多少Inception模块都是采用经验试错的方式来进行实验的。
这篇论文最终提出的GoogleNet有22层网络结构。如果把所有的平行结构都算上的话整个网络超过了100层。为了能够在这么深的结构上训练模型作者们还采用了一种方法那就是在中间的一些层次中**插入分类器**。相比之下,我们之前遇到过的网络结构都是在最后一层才有一个分类器。分类器层的特点就是最终的标签信息会在这里被利用,也就是说,分类的准确性,或者说是图片中物体究竟是什么,都会被这个标签信息所涵盖。在中间层加入分类器,其实就是希望标签信息能够正确引导中间层的目标,并且能够让梯度依然有效经过。
在实验中GoogleNet模型可以说是达到了非常好的效果。在2014年的ImageNet竞赛中GoogleNet和VGG分列比赛的第一名和第二名。两个模型之间的差距仅有不到1个百分点。
## 小结
今天我为你讲了两篇基于深度学习的经典论文讨论了两个模型VGG和GoogleNet。这两个模型在AlexNet的基础上做了不少的革新。
一起回顾一下要点第一VGG模型对卷积层的“过滤器”进行了更改实现了19层的网络结构可以说是第一个真正意义上达到了“深层”的网络结构第二GoogleNet模型的创新是在网络架构上利用稀疏化结构达到了更深的网络架构。
最后给你留一个思考题总结和比较VGG和GoogleNet这两个模型我们看到了深度模型研发的一个什么趋势
欢迎你给我留言,我们一起讨论。
**参考文献**
1. K. Simonyan, A. Zisserman. **Very Deep Convolutional Networks for Large-Scale Image Recognition**. International Conference on Learning Representations, 2015.
2. C. Szegedy et al. **Going deeper with convolutions**. IEEE Conference on Computer Vision and Pattern Recognition (CVPR), Boston, MA, pp. 1-9, 2015.