专栏名称: 雷峰网
中国智能硬件第一媒体
目录
相关文章推荐
新浪科技  ·  【#未来4个月无法定节假日#】#国庆逢中秋合 ... ·  11 小时前  
新浪科技  ·  【#多家车企反对内卷式恶性竞争# ... ·  2 天前  
51好读  ›  专栏  ›  雷峰网

独家|入职9月,旷视孙剑106分钟讲述CV创业科研的5大区别(附ppt)

雷峰网  · 公众号  · 科技媒体  · 2017-04-13 08:39

正文

请到「今天看啥」查看全文


2015年,微软提出了ResNet,进一步将深度从20多层推进到152层。ResNet的关键思想是引入了一个跳层的技术,理论上叫“残差学习”的概念。我们可以将神经网络理解成嵌套很多层的映射,从输入到输出,如果直接映射很难的话,有可能残差学习会更容易。残差学习的意思是只学输出相对输入的变化,而不是直接学习输入本身。

举个例子,如果一张图像有些噪点,你想学习一张没有噪点的照片,那你可能只需要学习怎样去掉噪点就行了,而不需要去学习怎样重构一张自然的照片。

残差学习的设计结构和以前网络比起来非常简单,只是加了一些跳层链接。

这个网络为什么能训练好?这个是我们官方的解释,比较直观。如果从前向角度看,在训练过程中有一个动态的特性,整个训练系统是由浅到深的。在训练的初期,可以认为我们是在训练一个浅层的网络,后期是深层网络。

目前神经网络采用反向传播算法,梯度反传过程中幅度会逐层衰减。如果网络浅还好,如果很深的话会衰减到非常小,最后相当于反向传播,就传播不到前面去了,导致训练困难。在新的Design of ResNet里面,大家可以看我们的论文,大概意思就是反向传播的梯度会从最后结果一层直接回馈到很多中间层去。而这个幅度都是不小的。所以从这个意义上来说是绕开了以前梯度消失的问题。

这个工作为什么会有这么大的意义?原因是当做到20层后,就很难再做下去;当再加层的时候,训练将变得非常困难。加完以后训练错误和测试错误都会增加,这其实是个非常大的优化问题,ResNet就试图解决这个优化的问题。

方法有两种:

  • 第一种方法寻找是不同于随机梯度下降的新方法,这个可以行的通,但是非常困难。神经网络发展这么多年,最有效的还是随机梯度下降法,原因未知。

  • 第二个方法,如果能够从新定义这个问题,重新修改数学的formulation的话,就会使解决问题变得容易。学解线性系统的时候我们知道,有一种方法叫做preconditioning,要解方程时,左右两边乘另外一个矩阵,乘完以后整个系统的解其实是不变的,但是这样以后去做优化就会变得容易很多。通过类比以后,残差学习的reformulation,可以让优化过程变得更容易,这个也是引入残差学习最大的意义。

ResNet优化的结果是到今天为止不管设计多少层的网络,只要显存装的下,只要能训练起来,这些都没有任何问题。这就破除了深度学习历史上的一个魔咒:深到一定程度就训练不了了。在深度学习的发展过程中,在一定阶段是没有人相信会有这么深的训练系统。

如果考虑非线性系统的话,这么多的参数,这么高的非线性,怎么能给他训练好呢?现在实践做到了,但理论研究很不完善,因为它是一个高度的非线性系统,缺少有效的分析工具,大多数好的分析工具都是分析线性系统的。

以上是ResNet的基本原理。

ResNet设计

下一步旷视(Face++)要做的就是如何将ResNet 怎么设计的更好,其中一个方向是要有更高的精度,但是在实际的工程应用中有个很大的问题:就是它的计算量是非常大的。如果你用参加ImageNet得冠军的那个Model来去做实际应用的话是非常不现实的。

大家可以看一下这个图,x轴是不同的网络,y轴上每个bar上的数字是每个网络的计算量,单位是GFLOPs。可以看到虽然error下降了,但是计算量却在不停的上升。

虽然结果做的很好,但是计算量非常的大。比如说一个好的网络可以到十几到二十几的GFLOPs,但是在实际应用中,我们常用的手机或者嵌入式设备,能承担的GFLOPs可能在0.01,也就是说你需要做一个百分之一或者千分之一计算复杂度的Model,才可以在实际的系统用,所以这是一个很大的挑战。

目前旷视(Face++)与研究领域在不同的方向探索后找到了一个解决方案,大致有三类方式可以解决这个问题:设计一个更好的网络,或者简化网络,再或者对于如何表述网络内部的值可以做一些研究。

第一,如何更好的设计这个网络?这里列了一些最近比较流行的网络设计。整体网络的结构还是ResNet的设计,但是每一层怎么设计,每一层怎么设计最经济,所以这是一个非常重要的问题。

第二,在简化网络方面,我们可以做结构的Pruning,这里我大概分了一共有3种方法。

  • 第一种方法叫做稀疏连接,本来一个网络里有很多连接的。然后基本思想是去除不重要的连接,让这个连接变稀疏了。但是这个方法的问题就是它可以减少网络的模型大小,但是不一定能够减少网络的运行时间;

  • 第二种就是tensor分解的方法,就是把一个卷积网络通过tensor分解,用它的低值特性做逼近;

  • 第三种是channel pruning,是我们最近做的一种比较有趣的方法,就是训练好一个网络后,简单粗暴的把一些channel 去掉。

其中这个tensor分解的方法,基本思想是a是原来网络设计的卷积过程,然后怎么能够将它通过一个低值分解的方式,拆成中间的channel filter数目比较小的b。


第三,就是我们在旷视(Face++)做的非常多的Low-bit的表示。这张图大概描述了一下什么是卷积,卷积就是输入一个三维的feature map,拿另外一个卷积核在上面卷,feature map标准的话都是float表示的,卷积核其实也是一个三维的矩阵,它也是float表示的。Low-bit的表示方法就是不要用这些float的方式来表示,而是用一些低精度的表示,比如8位或者更加极端的两位来表示。

大家可以看到这是之前的两篇比较著名的工作。一个是Binary connect,他的思想是把这个weight都变成01,这也是很夸张的一个想法。下面是更进一步的工作,它是将feature和weight全变成01,这样的好处是叫XNOR-Net,好处是卷积神经网络里的矩阵层,可以变成一个bitcount的指令,就可以完成它想要完成的计算,这个是在硬件中很有效的一个方法,也是Low-bit网络非常吸引人的地方。优点在于:1.内存可以降得非常多;2.潜在的加速比非常大。

这个(Low-bit)Reoresentation是我们旷视(Face++)研究员做的,它除了能量化weight或feature,还可以量化gridient,就是在反向回传的过程中,gridient标准其实也是float的,他的意义是如果你想做并行训练,主要问题是通讯的overfit非常大,也需要传gridient,或者你想把训练放在FPGA或者芯片上来做的话,这样如果你能做weight或feature,gridient的话,你就可以做这样的训练。

所以我们推荐了一个设置就是weight用01表示,activation用两位表示,gridient用4位表示。所以我们同事将它取名为DOReFa-Net。

这个图表是最近的一个类似的工作,比较了一下DOReFa-Net和他们的Net的性能差别。

人脸识别的进展

嵌入式的设备是比较小的,比如FPGA,但是其实是可以做很大的空间的,下面是人脸检测在FPGA上的一个实时演示,这是我们实时抓屏下来的。它不带任何Tracking,用一个便宜的FPGA就可以做到这样的30帧或60帧的人脸检测和跟踪的效果。这是非常重要的,尤其是在实际应用中。说到人脸和图像分类,最重要的就是人脸识别,这个我自己也做了非常多的时间。旷视(Face++)一开始就是以人脸识别为主的。

当然思路有两类,一个是把它当做分类来做,每个人都有多张照片,你将它们分成一类,这样非常简单。

另外一类是叫测度学习的方法,学习一个feature,来自同一个人的不同照片距离比较近,不同的人的照片距离比较远。

两种方式都很好,而且还可以结合。那现在人脸识别的进展是什么样子的呢?

这个是2013年的进展。2013年有个评测人脸识别的face benchmark,我和我们的同事做了一个Hi-dim LBP的工作,曾经是最好的。

如果和人的性能比较,在这个数据库上比起来还是不够好的。当时不管我们怎么设计这个feature,不管怎么用线性的学习方法,也就到这个地步了。但是随着深度学习的出现,其中一个代表性的工作是facebook 的deep face,第一次用深度学习的方法把结果做到了很接近人类的性能。

然后过了一段时间之后,包括旷视(Face++)在内,我们的研究很快就超过了人类的性能。大家也许会好奇是不是真的超过了人类的性能?今天媒体动不动就宣布机器在这个项目上超过人类了,在那个任务上超过人类了。那是不是这样呢?从学术上来说,在这个benchmark上是超过人类了。但是在应用上,到底有没有超过人类呢?

这里是我们做的人脸识别的应用。有两个大的应用,一个是做1:1的验证,其中一个验证就是提供在线身份验证,和你的身份证照片比对。我们现在已经为上亿人提供了人脸身份认证的服务。另外一个人脸识别的应用是,在数据库中对人脸进行搜索。可以说在很多人脸识别的应用上都已经超过了人类,但并不是全方面超过。

物体检测的进展

第二个我们关心的就是物体检测。简单来说就是你不但需要知道图像里都有哪些东西,还要知道物体在哪里。这是一些目前走在前沿的方法,最重要的方法是Region-CNN,我们叫R-CNN,这个方法很简单,就是把一个区域抠出来,对每个区域做分类。







请到「今天看啥」查看全文