理论与实践中的CNN模型结构,如何引领深度学习热潮

简介: 深度学习是指多层神经网络上运用各种机器学习算法解决图像,文本等各种问题的算法集合。卷积神经网络(CNN)是深度学习框架中的一个重要算法,本文介绍了CNN主流模型结构的演进过程,从一切的开始LeNet,到王者归来AlexNet,再到如今的CNN模型引领深度学习热潮。
摘要: 深度学习是指多层神经网络上运用各种机器学习算法解决图像,文本等各种问题的算法集合。卷积神经网络(CNN)是深度学习框架中的一个重要算法,本文介绍了CNN主流模型结构的演进过程,从一切的开始LeNet,到王者归来AlexNet,再到如今的CNN模型引领深度学习热潮。本文也将带领大家了解探讨当下与CNN模型相关的工业实践。

演讲嘉宾简介:
周国睿(花名:逐水),毕业于北京邮电大学模式识别实验室,目前是阿里妈妈事业部算法专家,服务阿里妈妈精准定向广告的排序相关业务;致力于深度学习在广告排序的应用和研究,涉及模型结构设计、模型压缩、深度学习框架开发,相关工作发表于AAAI等会议中。
以下内容根据演讲嘉宾视频分享以及PPT整理而成。
本次的分享主要围绕以下三个方面:
1.CNN Architectures 演进过程
2.网络从浅至深的思考
3.工业界的选择

一、CNN Architectures 演进过程
熟悉技术的发展历史,能帮助大家掌握当下的技术,同时也能对未来的技术更富想象力。接下来,为大家分享CNN-based model主流模型结构的演进过程。
下图中横轴表示时间线,纵轴表示模型的深度(即神经网络的层数)。用最简单的视角概括图中CN的发展就是,层数愈来愈深了。下面,为大家简单介绍图中涉及的模型。
cba648cfc699fc4d680b44411ea879921a72f718
c36517c0eba5f26f3a051a52b9451b43db568257
 
   上图为LeNet的网络结构,虽然该模型层数较浅,但是麻雀虽小,五脏俱全。模型中包含的卷积网络,降采样,全连接网络等,这些都是现代CNN网络的基本组件。LeNet依靠多个领域相关的filter, 采用单filter参数共享(即参数复用,降采样),以此保障一定程度的平移,形变扭曲的不变性。LeNet试图通过这种模型结构,让模型自己提取输入信号中特征的关系。
  2012年,AlexNet 在当年的ImageNet数据集的分类竞赛中,取得了第一名,而且在性能方面远超过当年的第二名,使得深度学习再一次获得人们的关注,回到了历史的舞台。下图为AlexNet的模型结构,AlexNet成功的原因有以下两点:
 718b8a655c226949a9fc7c2e8669fb935ab6d1d9
1. ReLU激活函数
首先,常用的激活函数Sigmoid,在输入非常大时,神经元的梯度是接近于0的,存在饱和现象。而Alex采用的ReLU激活函数在输入信号小于0时,输出都为0,在输入信号大于0时,输出等于输入,一定程度上降低了过拟合,梯度爆炸的风险,减少了反向传播的计算量。
2. Heavy Data augmentation,Dropout
  AlexNet在训练时,对于256*256的图片进行随机提取其中224*224的图片,然后允许水平翻转,相当于将样本扩大到了((256-224)^2)*2=2048倍。在测试时,固定了五个位置,即左上、右上、左下、右下、中间,对这几个位置提取五个224*224的图片,然后翻转,共10个图片,之后对结果求平均作为最后的预测目标。以上的技术极大的增强了模型的泛化能力。另外,AlexNet对图像的RGB空间做PCA,然后对主成分做一个(0, 0.1)的高斯扰动,使得错误率又下降了1%。AlexNet也采用了Dropout的技术,它做的就是以0.5的概率,将每个隐层神经元的输出设置为零。
AlexNet相对于LeNet,虽然看起来只是增加了计算量,层数变深了,但是提出AlexNet的作者依靠对CV领域相关技术的长时间积累,做了很多细节工作,将许多技术综合起来才取得了这一突破性的成果。AlexNet的提出是一个新时代开始的标志,非常值得我们尊敬。
  VGGNet 探索了卷积神经网络的深度与其性能之间的关系,通过反复堆叠3*3的小型卷积核,VGGNet 成功地构筑了16~19层深的卷积神经网络,在训练时,VGGNet输入是大小为224*224的RGB图像,预处理只有在训练集中的每个像素上减去RGB的均值。
VGGNet选择3*3滤波器尺寸的原因如下:
1. 这是能捕捉到各个方向(即上下,左右,中间)的最小尺寸;
2. 如下图所示从感知视野的角度,一个5*5可以用两个3*3来近似代替,一个7*7可以用三个3*3的卷积核来代替;
 3e4f2248ac68c474ffd186f935701a7ab33f50e6
3. 对于3个3*3的卷积核,通道数为C,则参数为3×(3×3×C×C)=27C^2,而一个7*7的卷积核,通道数也为C,则参数为7×7×C×C=49C^2,不仅增强了模型的泛化能力,而且还减少了参数。
  VGGNet性能相对于AlexNet提升了,但是VGGNet在模型接近输入的前几层,需要大量的内存。同时,VGGNet,AlexNet两者模型在最后几层的全连接上,需要的参数非常多,计算量也非常大。
  在GoogleNet出现之前,CV领域常用的模型如果通过粗暴地扩充层数或者增加神经元的个数,以此加深模型的层数,这是很浪费计算机资源的,并且由于模型是串联的,所以会直接增加计算代价,同时并不能保证这些计算都是必要的。GoogleNet的模型结构与之前提出的模型结构不一样,GoogLeNet采用了模块化的结构,方便增添和修改;模型移除了全连接,减少了大量的参数;为了让梯度更好的回传,模型额外的增加了两个辅助的分类器的loss。
下面具体介绍GoogleNet模型中Inception模块的设计。如下图所示,Inception模块由滤波器和几个采样器并联组成,简单的说就是共享输入,连接合并输出。这个设计的假设是基于底层的相关性高的单元,通常会聚集在图像的局部区域,所以使用尺寸为1*1的滤波器,同时为了保证信号的接收范围,模块之后使用更大尺寸的卷积学习即可。另外,网络越到后面,特征越抽象,而且每个特征所涉及的信号视野也更大了,因此随着层数的增加,3*3和5*5卷积的比例也要增加。
fbbb6a069c4eac1d7762daa32a7d5a8b8dc20183

 
上图的Inception模块,如果使用5*5的卷积核仍然会带来巨大的计算量,因此GoogleNet的作者采用1*1卷积核来进行降维,降低输入维度的信号。改进后的Inception模块如下图所示,Inception技术既能保持网络结构的稀疏性,又能利用密集矩阵的高计算性能。
5b46ce5bdba3f17a333da763950400917697d1eb
 
ResNet提出的动机是“退化”问题的发现,即当模型的层次加深时,错误率却提高了,如下图所示。但是模型的深度加深,学习能力增强,因此更深的模型不应当产生比它更浅的模型更高的错误率。而这个“退化”问题产生的原因归结于优化难题。
 e78168ba687910b621461ab68377c0d4f97e452e
  ResNet的作者提出了一个残差结构,如下图所示。结构增加一个identity mapping(恒等映射),将原始所需要学的函数H(x)转换成F(x)+x,这样的结构让模型有了一个显式的F(x)+x的计算逻辑,模型的学习难度大幅度下降。ResNet依靠这个技术极大的扩展了模型的深度,ResNet作者发明的残差网络,将之前的GoogleNet和VggNet等不到40层的网络直接提升到151层甚至到201层,也让模型性能获得了极大提高,这是模型结构上的突破性贡献。
  4026d24d2bd099fc047fb134306916cbb8e6dd20
二、网络从浅至深的思考
为什么更深的网络性能会更好呢?在这个问题上,人们已经做了很多研究。最早在1989年,George Cybenko提出了如下的理论:一个神经网络的层数可以很浅,只要在有足够多的隐层结点的前提下,这个神经网络就具有拟合任何函数的能力。但是,较浅的神经网络在大多数情况下,它的表现都是弱于深的神经网络,原因在于,浅的神经网络虽然存在一个拟合特定函数的解,但是求解的过程可能是很困难的,简单的梯度优化算法可能无法找到函数的解。此外,在2013年,Eigen等人提出在CNN-based的模型中,通过叠加模型的层数,就能提高模型的计算能力。在一篇论文《SNN-MIMIC:Do Deep Nets Really Need to be Deep?》中,作者用真正的实验数据证明了浅的神经网络有能力和深的神经网络学习到一样的函数。SNN-MMIC的作者尝试让浅层网络模拟深度网络的表现,下图为SNN-MIMIC使用的Teacher-Student学习框架。Teacher是一个更深的网络,Student是一个更浅但可能更宽的网络,先训练好Teacher直至收敛之后,用Teacher的输出结果作为Soft Target,并用这个Soft Target监督Student。通过这样的训练框架,SNN-MIMIC的作者成功证明在实际情况下,是有方法使浅层网络达到和更深的网络差不多的性能。SNN-MIMIC的作者也解释了在下图训练框架中,浅层模型模拟深层模型相较于单独训练浅层模型,训练性能来的好的原因。原因总结如下:
1. 假设训练样本中的label是错的(例如将猫标注成了狗),在这种情况下,如果用label进行训练,预测会显示这是一条狗,因此带来噪声,误导模型的训练。但是Teacher的预测结果,会得到这是一条狗或者一只猫,输出可能和label相反,让Teacher的预测结果监督Student的训练,会将错误的那部分信息抹掉。这种假设在作者的实验环境中是不存在的,但至少这种假设在现实生活中是存在的。
2. Teacher网络更深,通过浅层网络模拟深层网络,可以解决Student不能解决的更难的问题。
3. Soft target本身更容易学习,拟合平滑的波相对于拟合尖锐的波更简单。
 0acdb80a281dc48ed88ad927b87548246998ab8f
  增加模型的深度提高了模型的性能,但是,更深的网络在gradient-based训练方法下,更难训练(FIT-Nets的提出早于ResNet)。FIT-Nets作者的目标是通过更浅的网络(即student)指导更深的网络(即teacher),以此训练一个比Teacher性能更好的网络。Teacher中间隐层的信息叫做hints,框架通过将Teacher与Student中间的隐层降到同一个维度,以此对Student的信息重构出Teacher的表达。
 
三、工业界的选择
  下面介绍工业界对神经网络的应用。模型的精度与响应延迟存在一个天然的tradeoff,模型越复杂,精度可能越高,但响应时间越长。虽然这两者是相互矛盾的,但是幸运的是,工业界可以用离线训练的复杂化换取更高效的模型精度,也就是说把离线训练过程做的复杂,而在线的时候保证inference的高效同时提升模型的精度。解决上述问题的思路可以分为两种,一种是硬性的压缩(hard compress),比如说mobilenet直接减少了卷积的计算,把模型结构变得更简单,直接降低了计算复杂度。另一种是soft tradeoff,离线的时候利用训练出来的复杂模型辅助简单模型的学习,提升简单模型的精度,在线的时候只需要使用简单模型,例如SNN-MIMIC,Knowledge Distillation,FitNet,Rocket Launching等。这两种思路就体现了离线时训练复杂化,在线时就可以使用更高效,精度也能得到保证的模型这样的一个过程。
  下面介绍一下演讲者周国睿他们团队在这方面的工作,即Rocket Launching。训练框架如下图所示,Rocket Launching算法也属于Teacher-student算法的范畴,算法训练一个Teacher及Student网络,Teacher网络辅助Student网络的学习,虽然训练的网络更浅,但是性能更高,inference速度快,因此可以满足上线的需要。
 b4744b22c2454f2ebe532f7aa373c5118a180e20
不同于之前的算法,周国睿团队认为模型可以拆解为输入的表达层和最后的决策层,通过参数共享更直接地将Teacher学习到的信息传递给Student。此外,之前Teacher-Student的训练框架先是固定Teacher,之后使用Teacher输出结果指导Student的学习,不同于以往Teacher-Student训练框架,Rocket Launching让Teacher网络与Student网络同时学习,最后Student网络不仅能学习到Teacher拟合的结果,还能学习到整个Teacher收敛过程中的路径。同时,Rocket Launching对Teacher网络独有的参数做一个Gradient Block,让Teacher网络的学习不受Student网络和它共同学习的影响。Rocket Launching训练的过程类似于火箭的发射,卫星与推进器组合起来才称为火箭,使用Teacher网络与Student网络一起学习(类似于卫星与推进器一起发射),最后在线时只需要使用Student网络(类似于推进器将卫星送上天),因此周国睿团队将训练框架称为Rocket Launching。
周国睿团队在公开数据集CIFAR-10,CIFAR-100等上,将Rocket Launching模型与属于Teacher-Student范畴的方法进行对比,效果取得了明显的提高。同时,周国睿团队还做了非常仔细的Ablation Study,以此验证之前提到的三个改进点(即协同训练,参数共享,Gradient Block) 都提高了模型的训练效果。此外,周国睿团队将Rocket Launching中协同训练方法与KD结合,结果显示结合了KD后,Rocket Launching 模型取得了进一步提高。使用Rocket Launching后,使在线的计算量减少了8倍,性能也没有发生损耗。

本文由云栖志愿小组沈金凤整理,编辑百见

相关文章
|
5天前
|
机器学习/深度学习 人工智能 TensorFlow
人工智能浪潮下的自我修养:从Python编程入门到深度学习实践
【10月更文挑战第39天】本文旨在为初学者提供一条清晰的道路,从Python基础语法的掌握到深度学习领域的探索。我们将通过简明扼要的语言和实际代码示例,引导读者逐步构建起对人工智能技术的理解和应用能力。文章不仅涵盖Python编程的基础,还将深入探讨深度学习的核心概念、工具和实战技巧,帮助读者在AI的浪潮中找到自己的位置。
|
5天前
|
机器学习/深度学习 数据采集 TensorFlow
使用Python实现智能食品市场预测的深度学习模型
使用Python实现智能食品市场预测的深度学习模型
31 5
|
6天前
|
机器学习/深度学习 数据采集 自然语言处理
深入浅出深度学习:从理论到实践
【10月更文挑战第38天】本文旨在通过浅显易懂的语言和直观的代码示例,带领读者探索深度学习的奥秘。我们将从深度学习的基本概念出发,逐步深入到模型构建、训练以及应用实例,让初学者也能轻松入门。文章不仅介绍了深度学习的原理,还提供了实战操作指南,帮助读者在实践中加深理解。无论你是编程新手还是有一定基础的学习者,都能在这篇文章中找到有价值的内容。让我们一起开启深度学习之旅吧!
|
5天前
|
机器学习/深度学习 人工智能 自然语言处理
探索深度学习中的Transformer模型
探索深度学习中的Transformer模型
12 1
|
7天前
|
机器学习/深度学习 算法 开发者
探索深度学习中的优化器选择对模型性能的影响
在深度学习领域,优化器的选择对于模型训练的效果具有决定性作用。本文通过对比分析不同优化器的工作原理及其在实际应用中的表现,探讨了如何根据具体任务选择合适的优化器以提高模型性能。文章首先概述了几种常见的优化算法,包括梯度下降法、随机梯度下降法(SGD)、动量法、AdaGrad、RMSProp和Adam等;然后,通过实验验证了这些优化器在不同数据集上训练神经网络时的效率与准确性差异;最后,提出了一些基于经验的规则帮助开发者更好地做出选择。
|
6天前
|
机器学习/深度学习 算法 数据可视化
使用Python实现深度学习模型:智能食品配送优化
使用Python实现深度学习模型:智能食品配送优化
22 2
|
5天前
|
机器学习/深度学习 人工智能 算法
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
手写数字识别系统,使用Python作为主要开发语言,基于深度学习TensorFlow框架,搭建卷积神经网络算法。并通过对数据集进行训练,最后得到一个识别精度较高的模型。并基于Flask框架,开发网页端操作平台,实现用户上传一张图片识别其名称。
21 0
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
|
5天前
|
机器学习/深度学习 人工智能 算法
基于深度学习的【蔬菜识别】系统实现~Python+人工智能+TensorFlow+算法模型
蔬菜识别系统,本系统使用Python作为主要编程语言,通过收集了8种常见的蔬菜图像数据集('土豆', '大白菜', '大葱', '莲藕', '菠菜', '西红柿', '韭菜', '黄瓜'),然后基于TensorFlow搭建卷积神经网络算法模型,通过多轮迭代训练最后得到一个识别精度较高的模型文件。在使用Django开发web网页端操作界面,实现用户上传一张蔬菜图片识别其名称。
25 0
基于深度学习的【蔬菜识别】系统实现~Python+人工智能+TensorFlow+算法模型
|
8天前
|
机器学习/深度学习 数据采集 TensorFlow
使用Python实现智能食品储存管理的深度学习模型
使用Python实现智能食品储存管理的深度学习模型
23 2
|
8天前
|
机器学习/深度学习 自然语言处理 语音技术
深度学习的奇妙之旅:从理论到实践
【10月更文挑战第36天】在本文中,我们将一起探索深度学习的神秘世界。我们将首先了解深度学习的基本概念和原理,然后通过一个简单的Python代码示例,学习如何使用深度学习库Keras进行图像分类。无论你是深度学习的初学者,还是有一定基础的学习者,都可以从这篇文章中获得新的知识和启示。

热门文章

最新文章