360副总裁颜水成博士:技术与产品并重,1×1卷积让深度学习更出彩
7 月 7 日,由中国计算机学会(CCF)主办,雷锋网与香港中文大学(深圳)承办的CCF-GAIR 2017全球人工智能与机器人峰会在深圳大中华喜来登酒店如期开幕。奇虎360副总裁、首席科学家、IEEE Fellow、IAPR Fellow颜水成博士带来了主题为《深度学习:精度极限VS用户体验》的演讲。这是大会首日最后一场演讲。
作为360 人工智能研究院院长,颜水成博士曾在新加坡国立大学领导机器学习与计算机视觉实验室,他的主要研究领域是计算机视觉、机器学习与多媒体分析,其团队提出的“Network in Network” 对深度学习产生了很大的推动力。
以下内容由雷锋网整理自颜水成教授的报告,有删减:
这次我希望对过去5年我在学术和工业界对深度学习的一些观察进行简单介绍。深度学习的研究有两种不同的目标,一个目标是追求精度的极限,另一种是追求产品的体验极限,我将从这两方面来进行介绍。然后我将围绕1×1卷积及相关分析,来思考如何设计更好的网络,分别追求精度极限和体验极限。
学术界的人工智能\深度学习
在学术界研究深度学习,一般是针对一个具体的问题去探索新的算法。我们可以去设计更好的模型结构,用更多的模型去融合,另一方面,我们也会思考用更好的训练平台和更多的资源实现分布式多机多卡的训练。也会思考利用海量的数据,通过预测学习的方式先预先训练模型,然后利用有标注数据训练好模型之后,又可以利用baby-learning或增强学习等后处理的方式进一步增强模型的性能。
工业界的人工智能\深度学习
在工业界不再只是追求纯粹的算法,一定要思考产品和应用的场景。人工智能本身不是一个产品,它必须跟具体的场景相结合才有它内在的价值。最好的做法是算法和数据形成一个闭环,先训练出初始的模型,然后再到具体的应用场景中去挖掘模型失效的数据,用这些数据进一步提升模型的精度,然后再把模型应用到场景中,不断地迭代,最终达到最好的体验。另外算法科学家和产品工程师必须相互协作,才能让不完美的算法有机会产生完美的用户体验。
算法科学家和产品工程师相互合作的例子
有一个很明显的例子就是萌脸算法。之前有很多团队思考通过人脸分析,把人脸进行替换,但是这个模式没有成功,因为算法不完美,会产生抖动等问题。但是如果只是把一个花环、帽子或项链挂在人的头上,即使有抖动,用户的体验还是非常不错的。这个就是工程师和科学家完美合作的结果。
在工业界如果要思考产品,一是要考虑应用场景能否满足高频刚需,二是要思考技术是否成熟,三是要思考技术是否能形成壁垒。如果没有技术壁垒,你今天做出一个产品,不久之后更大的公司可能会很快做出类似产品,你的生存空间就不存在了。
深度学习研发的目标之一:精度极限
把这些观察放在一起,我们就会发现深度学习的研发有两个不同的目标,第一个目标是学术界在驱动,如果用四元分析的方法,即用场景、算法、计算和数据分析的方法来看,场景和数据是固定的,在不考虑计算资源限制的情况下,去追求算法最优能达到的上限。在这种假设下很多算法没法商业化,因为没有思考在真实应用场景下资源消耗是什么样的。
深度学习研发的目标之二:产品体验
另外一方面是追求产品的体验,这是由业界在驱动的。同样用四元分析的方法,这时候场景和计算已经固定。例如要做陪护机器人,其应用场景和它能提供的计算能力是固定的,这时候唯一的做法就是把算法和数据形成闭环,在迭代中去产生最好的体验。这时候不仅仅只是算法的设计,有很多方面都需要思考,比如说数据的清洗\标注、模型速度、各种微创新等等。
深度学习两种研究目标的对比
第一种研究更多的是用脑,第二种研究更多的是用心,它们俩是相辅相成的。比如说在追求精度极限的时候,一些前沿的成果会激发去设计一些新颖的产品,同时,在追求产品体验的时候,也会提炼出很多核心的问题,然后送到学术界中做深入的研究。这两种目标都非常重要,很多公司这两种目标都在追求,因此建立了自己的AI lab,一方面去瞄准前沿研究,为未来打下基础,另一方面追求产品体验,保证产品能在当前的场景落地。
两种目标结合的实例
一个具体的例子是物体的分割。在2016年,大家都觉得分类和检测已经可以在工业界中很好地使用,但是从来没有人觉得物体分割已经到了可以使用的阶段。我的研究组以前就做了很多人体分割的工作,任务是给定一个图象,输出每个像素具体是什么东西,我们花了两年的时间把它的性能从44%提升到了86%。同时领域内有很多分割算法取得了很好的成果,去年年底工业界开始思考,确实有很多的应用场景可以受益于这种分割的技术,于是很多人开始思考怎么样去对模型进行加速,保证在一些限定的场景下的性能能满足产品化的需求。
从今年开始,比如美图秀秀和Snapchat把人的头发和脸分割出来,可以产生很好的头发美化的效果,360和其他一些公司则提供人体分割的技术,可以把人实时从自拍的视频里面分割出来,叠加到动态的场景,产生很多好玩、好看的效果。这是一个典型的因为追求精度极限达到一定程度时,就激发了新的产品形态的创新。
下面我将围绕1×1卷积来做一个深度学习研究的漫谈。我将仔细分析1×1卷积是什么、1×1卷积在不同的模型里面能带来什么有价值的分析结果,以及1×1卷积可以帮助产生哪些更新的模型结构来进一步提升视觉分析的性能。这些工作一部分在追求精度极限,另一部分在追求体验极限。
1×1卷积
最早的1×1卷积是我的学生LIN Min博士在Network in Network里面提出来的,当时觉得纯粹的内积不能很好地模拟人的神经元的复杂工作方式,卷积可以用更复杂的微型网络结构来替代,当这种复杂的结构是多层感知机的时候,对应的后面的操作就是1×1卷积。
当1×1卷积跟3×3、5×5卷积叠加在一起,就会产生更复杂的抽象过程。当时的一个好处就是这个模型的参数可以降到传统模型的十分之一甚至更少,这样就为我们把深度学习往端上迁移提供了可能性,同时当时这个模型也在ImageNet 2014比赛的物体检测任务中取得了最好的性能。之后1x1卷积逐步成为各种后续经典深度学习模型的标准组件之一,比如说GoogleNet, ResNet, ResNext等。
用1×1卷积分析传统网络的内在机理
基于1x1卷积的张量逼近分析可以很好地解释当前各种流行网络结构,如GoogleNet、ResNet、 ResNext,里面局部微观结构的内在合理性。
比如要在一个固定的位置,把一个256个feature maps卷积的空间域是3×3的数据块,卷积完以后变成仍然是256个feature maps。这样需要的参数是256×256×3×3这样一个四阶的Tensor,它的参数量实在太大了。
学术界的一种研究是把一个高阶的Tensor用一些小size的Tensor,通过从不同维度做乘积的方式升维到原来size的Tensor。你可以用一个Tensor,也可以用多个Tensor相加的形式来拟合原来的Tensor。
具体到我们这个问题,如下图,对应的C的部分就等价于从256个feature maps降到更少量的feature maps,G相当于在更少量的feature maps的基础上做3×3的卷积,D等价于把更少量的feature maps升维到更多的feature maps,C和D则对应到1×1卷积。
有了这种理解之后,ResNet的经典版本则对应于用一个low-complexity的Tensor来拟合,ResNext则对应于用多个low-complexity的Tensor来拟合。同时把多层的卷积Tensors放在一起做low-complexity tensor逼近,我们可以得到一个cross-layer信息共享的网络,可以减少参数个数,从而提升模型推广性能。基于这种简单的扩展,只需要一个50层的ResNet网络的参数数目,就能达到一个200层的ResNet网络所能具备的分类性能。
用1×1卷积分析ResNet和Densely Connected Network
下面我们用1×1卷积来分析ResNet和Densely Connected Network (DenseNet)。ResNet是在当前feature maps的基础上,做1×1卷积、3×3卷积、再1x1卷积,或者运行其它微观结构,把出来的结果跟现有的结果相加。DenseNet是前面每一层卷积的结果都要放到后面的层去,跟它拼接起来。假设给定的feature map在不同层做1×1卷积的参数是一样的,你会发现DenseNet和ResNet是等价的,差别是在于一个是事后计算1×1卷积,一个是事先计算1×1卷积。
这两种网络的内在目标完全不一样。从局部来看,ResNet更多是希望对特征进行改进,DenseNet则更多探索新的特征来补充已有的特征。一种自然的想法是把这两种特征的优势都利用起来,我们设计了一个网络结果,通过微观结构把这两种网络揉和在一起,最后出来的特征,一部分去改进已有的特征,一部分作为新特征的探索。很有趣的事情是,虽然ResNet是DenseNet的特例,新提出的网络结构是一种新的结构,无法再直接解释成DenseNet。
这个网络结构我们叫Dual-path Network, 实现的时候只需在现有的网络结构里加入拼接和分割的操作就可以得到新的模型结构。这种模型结构看似简单,效果非常明显。
在Object Detection任务上,从ResNet到ResNeXt能升3.7个点的话,在DPN上可以提升达到6.1个点;在Object Segmentation任务上,从ResNet到ResNeXt能升0.5个点的话,在DPN上能提升达到1.7个点。
当前在学术界已经验证的最好的单模型精度的网络的单模型错误率是4.25%,在DPN上如果我们用131层的网络,它的错误率能降到4.16%,同时可以保证这个网络的训练和测试时间都比前者要快很多。同时,如果把很多的模型做融合,在ImageNet上的错误率就可以从最好的2.99%降到2.74%。在ImageNet的Object Localization任务上效果也非常明显,只需要用三个模型的融合,就可以从去年的最好模型(6个模型)得到的结果7.58% 降到6.03%。
360的相关产品
在360,追求精度极限的应用主要是放在云端,比如说360小水滴里面的人脸认证,我们在保持1%的FAR的情况下,把它的TPR从77%升到98%。虽然只是98%,但在这种监控场景下,你可能会碰到不同光照、姿势、尺度的图象,分类的难度是非常大的,它与在银行里面用户配合的场景下做人脸识别的差别非常大。
另一方面,360有很多智能硬件。智能硬件的特点是在固定应用场景和计算资源受限的情况下,希望把人工智能的技术应用到具体场景里面,这时候在比较低端的芯片上,让深度学习能够发挥最好的效能就变得非常重要。所以我们也一直在思考,有哪些方法可以从算法的角度把计算的复杂度降低下来。我们其中一个工作是用1×1卷积,希望能实现更复杂的网络结构,但是计算复杂度反而会进一步降低。这个属于追求用户体验的例子。
利用1×1卷积实现:更复杂的网络结构、但更低的计算复杂度
通过对每一个卷积操作附加一个1x1卷积操作然后再点乘,虽然模型变复杂了,但可以大幅减少前向传播的计算量。
它的思路非常简单。举个例子,任何一个卷积,在ReLU完了之后,很多时候你会发现大概有40%或者更多的位置上它的输出是0。如果这个位置输出是0,它原来的值是什么就不那么重要了。进一步思考,有没有可能用更少的computational cost把这些为0的位置快速估计出来,这样具体的卷积就不用计算了。如果我们有40%的位置是0,上面有40%的计算量就可以忽略,下面因为是1×1卷积,它的计算量只有大概1/9甚至更少,这样你就用1/9的时间节省了40%的计算量,所以它是非常值得的。另外一方面,从理论上来说,这种网络结构可以保障潜在的最好分类性能不会降低。
我们在不同的数据库、不同的模型上做了测试,一般情况下都能提升20%到40%的速度,这在追求产品体验极限上非常重要。
例如你希望做一个普通老百姓愿意接受的后装ADAS,要做车辆检测,或者在手机APP上,要做实时的人体抠像,动态叠加到背景中,这时候降低能耗是非常重要的。用芯片来降低能耗成本会贵一些,从深度学习研发的角度来说,如果能从算法维度上降低它的功耗,价值将非常大。
最后我用这张图做一个简单的总结。深度学习的研发有两个非常不一样的目标,一种是追求算法的精度极限,一种是追求产品的体验极限。它们的差别是一个专注在用脑,一个是专注在用心,同时它们也是相辅相成、相互促进的。
雷锋网 (公众号:雷锋网) 整理。
。