1909 年,莱特兄弟通过纯粹的工程方法首次把飞机送上了天,但彼时的他们并不了解其中的原理。如今,经过几十年的发展,飞机的性能较之当年已然不可同日而语。究其原因,主要在于上世纪四五十年代,人们在空气动力学方向取得了重大进展,能够在理论上理解飞机飞行的原理,从而更好地改进飞机设计。而机器学习理论的研究也与之类似,目的都是希望能在未来设计出更好的机器学习方法,使其性能更好,效率更高。
比之人工智能领域亦然,倘若理论层面持续空白,势头正劲的所谓风口行业又能走多远?
为了探寻当前人工智能算法存在的可解释性缺失、大数据依赖、模型场景化问题的答案,寻找机器学习的更多可能,“智源论坛(第5期)——机器学习”系列报告于 7 月 4 日如约而至。
智源研究项目经理 程斌
上午 9:30,本次论坛在“机器学习”方向智源研究项目经理,360 集团人工智能研究院技术总监程斌的主持下正式开始。北京大学信息学院智能科学系教授王立威、北京旷视科技首席科学家孙剑分别分享了其在这一领域的研究经验。
1
王立威:从经验性的积累到理论空白的弥补
国家自然科学基金优秀青年基金获得者,“教育部新世纪优秀人才支持计划”获得者,北京大学信息学院智能科学系的王立威针对深度学习的优化及神经网络带来了题为《Some recent advances in machine learning theory》的主题报告,分享了机器学习理论方面的一些新进展。
北京大学信息学院智能科学系教授 王立威
事实上,我们近年来讨论的机器学习乃至广义上的人工智能都多为深度学习,是基于 Yoshua Bengio、Geoffrey Hinton 和 Yann LeCun 几位专家长期研究而取得的突破。然而若站在一个相对冷静客观的角度对近来的深度学习成果加以分析,我们不难发现,眼下我们所掌握的更多是经验性的积累,而对于其理论和理解则可谓缺乏甚至是空白。
深度学习的全局最优点
在训练神经网络的过程中,我们往往是从一个随机的初始点出发,用一阶优化方法随机梯度下降,即可找到一个近似全局最优的点——训练错误可以接近于零。关于这个问题,最核心的一点就是过参数化,下面将围绕一些有趣的过参数化理论性质展开分享。
迄今为止,机器学习已经发展了三四十年,之前提出了很多模型,比如线性模型、Boosting等,但至少在图像、语音等方面,神经网络更具优势。从理论层面来看,神经网络可以表示丰富的函数,具有很强的逼近能力。这其中包括Universal Approximation Theorem,即任意给定一个符合一定条件的函数,就一定可以找到一个神经网络,能够非常精确地近似于这个函数。论简而言之,神经网络可以表示任何函数。而早在1989年,就已经有人通过对非常浅层的神经网络进行理解得到了这样一个结论。2017年,我们认识到非常深的神经网络同样有这种逼近的能力。所以从表示上来看,神经网络是一个具有很强大表示能力的模型。
如上图所示,右侧图像是我们在思考神经网络训练做类似优化问题时的自然反映。从Optimization角度来看,神经网络的优化是一个高度非凸的问题,图上有坑坑洼洼的结构,每个坑里面都是一个局部的最优点。针对这样一个高度非凸的问题,从一个随机点出发,沿着梯度下降的方向,很容易就走到一个局部最优点。这是过去经典的非凸优化理论所经常提及的,除非问题本身具有很强的特殊性。
以上是我们对该问题给出的“理所应当”的理解,但实际却并非如此——在深度学习训练这个非凸优化问题里,从一个随机的初始点出发用随机梯度下降经常可以找到全局最优点,这不免令人困惑。
回顾学者们过去曾得出的一些结论,其中就包括对于线性神经网络的研究。众所周知,神经网络具有逐层结构,而且每层有一个非线性变换,例如最早用 Sigmoid,再到现在的 Relu,但是如果把非线性变换去掉,简化成一个线性网络,即每层不存在非线性,本质上就等价于一个单层网络。在这种情况下,可以证明所有局部最优点即为全局最优点。但这样的结论与真实的神经网络差距很大,不过也算是一个启发,提示我们可以考虑神经网络的一些特殊性,思考对于真正的非线性神经网络而言,其局部最优点和全局最优点之间是否也存在某种等价关系。
除此之外,我们还可以通过某些特殊的假设,比如只考虑单层网络,同样也可以证明即使单层网络存在非线性,也仍然可以用梯度下降法找到全局最优点。但此处指的是只有一层的网络,而我们今天面对的是动辄几十、几百层的网络。简而言之,对于一个很正常的非线性深度神经网络而言,只要满足如下两个条件,再利用一阶优化方法,如梯度下降、随机梯度下降,就一定能以极快的速度找到全局最优点。此处的收敛速度是所谓的线性收敛速度,只消对数步的迭代就能找到全局最优点:
① 网络足够宽,即每一层 Neural 的个数足够大,详见下图公式;
② 网络权重的初始化是通过今天非常常用的高斯随机初始化(Gaussian Random Initialization)。
总而言之,一是网络足够宽,二是用高斯随机初始化,在这两个假设条件下只要从随机初始化点出发,用一阶梯度下降的方法就可以在非常快的迭代步数之内找到全局最优点。这个结论能够使我们理解实验中观测到的很多现象,其中我们关注的核心就是为什么能找到全局最优点——深度神经网络充分宽以后,就相当于一个非常特殊的过参数化(Over-Parameterization)模型,利用到了神经网络的一些特殊性质,和过去的模型有很大差异。
以上结论研究的是所谓的全连接网络,若是研究如今更常用的 ResNet,对于假设的限制就会弱一些,例如网络不需要那么宽,而网络的收敛速度也会更快。简言之,理论上 ResNet 是一个更好的结构。值得一提的是,几乎在同一时间,包括微软研究院朱泽园与 CMU 李远志的合作团队以及 UCLA 的顾全全教授团队在内的另外几个机器学习研究组也得到了与王立威团队非常近似的结论。
如今,这一方向的研究工作在除却理论的整个机器学习界都得到了比较广泛的关注——希望通过比较宽的网络,来探讨神经网络的部分性质。
二阶优化方法——GGN
随着理论研究的推进,我们也迎来了新问题——这些研究可以为机器学习、深度学习的算法提供什么帮助,又能否帮助我们设计出更好的算法?着眼理论分析的细节,我们会惊讶地发现:网络从 input 到 output 是一个函数,当网络充分宽时,网络的输出其实还依赖于该网络的参数,那么网络的输出对于网络的参数而言,其在局部是近似线性的,这一点与过去的认知有很大差异——过去认为网络的输出对于参数一定是高度非线性、高度非凸的。但此前的理论证明,网络充分宽后,网络的输出对于网络的参数在局部内是高度线性的,且这个局部不仅包含了高斯随机初始的点,还包含全局最优点。正是因为这样的性质,用一阶优化方法可以在很短时间内找到全局最优的点,从而利用这个观察设计新的算法。
今天大家常用的算法是Stochastic Gradient Descent(SGD),其已然是今天深度学习的标准算法。我们用任何一个今天开源的代码或者从库里调用,配备的都会是一阶优化方法。但根据上面的结论,我们不难发现,更好的方法是二阶优化方法。一阶优化方法只利用了函数的一阶导数信息,而二阶优化方法则在一阶导数外,还用到了一些二阶导数信息。以高斯牛顿法这一二阶方法为例,其特点在于,特别适用于函数特别接近于线性的情况,这种情况下它的收敛速度,也就是迭代的轮数会非常少。
如前所述,当深度神经网络充分宽时,输出对参数是非常接近线性的,这与高斯牛顿法非常吻合。而既然如此,包括高斯牛顿法在内的所有二阶优化方法在今天的深度学习中为什么又无人选用?究其原因,在于实际应用中存在的困难——虽然其迭代数很少,但每一步迭代时二阶方法所需的计算量却又远远大于一阶方法,这也是该问题的核心原因。除此之外,类似在过参数化时二阶信息矩阵不可逆等问题也不容忽视。因此,我们在过去综合种种因素,惯于将二阶优化方法排除至选项之外。
在这样的背景下,王立威及其团队对此展开研究,在已知二阶方法迭代轮数优势的情况下(特别在深度神经网络较宽时,高斯牛顿法的迭代轮数较之一阶方法优势更甚),面对上文提到的诸多问题,证明存在一个定理。据该定理所述,在矩阵不可逆时,可以找到一个伪逆,并且该伪逆可以通过极小的计算代价实现。
从理论上可以证明,其所提出的 Gram 高斯牛顿方法(Gram-Gauss-Newton ,GGN))具有非常好的性质,其一,是该方法的二次收敛速度极快,为双对数,迭代轮数非常少;其二,是可以用求伪逆的办法证明每一步的迭代计算量,相比于 SGD 只有非常小的 overlap。故而从理论上看,用 GGN 比 SGD 明显具有更大优势。
下图所呈现的为部分实验效果,图中红线是新方法的收敛速度,左图横轴代表时间,右图横轴是 Epoch,另外两条线都是 SGD 加相应的一些其他技术,所以可以看到该方法在收敛速度方面占据了很大的优势。
总结
我们先是通过一个纯粹的理论分析,证明了当网络充分宽的时候,如果用现在的高斯初始化,整个优化展现出一个和我们的过去所认知极为不同的场景——在局部近似线性,且可以在局部找到一个全局最优点。从这一理论结果出发,王立威及其团队设计了一个二阶优化方法——GGN。也许有一天大家再用深度学习去训练深度神经网络时,SGD 将不再是一个标配的优化方法,GGN 这样的二阶优化方法可能有机会取而代之。
Transformer 结构
在深度学习和机器学习中,Transformer 结构可谓是又一个热门话题。Attention Transformer 这类结构在很多问题,特别是机器翻译上取得了非常好的效果。事实上,过去大家用的可能都是 LSTM 这样的一些结构,但随着 Transformer 的出现,也都逐渐成为历史了。
研究 Transformer,本质上还要理解深度神经网络,深度神经网络为什么是一个好的结构?从数学层面来看,深度神经网络从某种程度上可以看作在解常微分方程,其为常微分方程数值解的一个 solver。近一两年来,这一观点已经成为机器学习理论里大家非常看重的一个方法。NIPS 2018 的 Best Paper 就花落这样一篇论文——从解常微分方程的角度去看深度神经网络。
谈及常微分方程,自然会想到 ResNet,它是一个非常典型的常微分方程数值解的方法。换言之,ResNet 和解常微分方程数值解法存在一个非常明确的对应关系。ResNet 比较简单,但是 Transformer 却是一个较为复杂的网络结构,其主要包含两个部分,分别是 Multi-Head Self Attention 结构和 FFN 结构,这两部分组成一个 block,而这个 block 就是这种迭代,衔接下去。所以我们要从解常微分方程数值解的角度去理解这样一种很复杂的网络结构,从而帮助我们设计出更好的网络结构。Multi-Head Self Attention 实际上是一种不同 Neural 之间有互相连接、互相作用的结构;而 FFN 这部分则是每一个 Neural 自己作用,互相之间没有作用。
既然要从解常微分方程的角度来看 Transformer,首先要考虑多粒子的动态系统(Multi-particle Dynamic System),这是在物理中非常常见的一种动态系统。这种动态系统的常微分方程,叫做对流扩散方程(Convection-diffusion Equation),对流扩散方程是微分方程中最最常见的一类方程。多粒子动态系统中的对流方程如图所示,比如粒子的位置对时间的导数是两个函数的和,第一个函数是 F,第二个函数是 G, F 函数是 N 个粒子共同作用的一个函数,是 N 元函数,而后面的 G 是对每个粒子的单独作用。这与 Transformer 结构中的 Multi-Head Self Attention 与 FFN 形成了一种很自然的契合,因此我们可以用这种多粒子的对流扩散方程来解释 Transformer结构的含义。
当然,仅仅从这个角度去理解 Transformer 的含义并非我们的最终目的,我们想要的是从这个理解角度出发,探索设计出更好的网络结构。Transformer 的结构实际上对应着对流扩散方程的某一种数值解法——Lie-Trotter splitting scheme,这是一种很常见的常微分方程数值解。众所周知,微分方程要数值解就要将其离散化,这就是一种离散化的方法。如果把 Lie-Trotter splitting scheme 对应到现在的 Transformer 结构上,也会是一个很自然的对应。
但在常微分方程数值解领域里,对此早已有非常深入的研究,且相关研究早已有上百年的历史,而 Lie-Trotter splitting scheme 事实上是一种早已被淘汰掉的数值解法。相较而言,Strang splitting 是一种比较好的数值解。Lie splitting 是一阶的近似方法,而 Strang splitting 是一种二阶的近似方法。在实际中去解常微分方程的时候, 比起无人问津的 Lie splitting,用到的都是 Strang splitting。
这些理论分析的意义就在于如果把 Strang splitting 这种常微分方程的数值解法对应回某一种神经网络的话,这个网络应该如下图所示:
如前所述,传统网络由两部分组成,第一部分是 Multi-Head Self Attention,第二部分是 FFN。但若用新的数值解则如右侧所示,表示原本 FFN 的部分首先应该在最底层做半步?半部,接下来再放 Multi-Head Self Attention 模块,而后再放半步 FFN 模块——一种三明治结构,这样对应的是 Strang splitting 数值解的方程。
这相当于从理论上启发我们设计新的结构,而这种新的 Transformer 结构叫马卡龙,它的效果比过去传统的两层 Transformer 能提高约 1 个百分点。而 Google 最近提出的新结构 BERT 则消耗了海量的数据、非常多的 GPU 以及训练时间才使原本的 Transformer 性能有所提高。如果在训练数据相同的情况下,二者的性能更是基本相同,但是 Google 的工作训练实验一次需要花费电费 25 万美元。而马卡龙则在“人力”思考的基础上,用数学的方法设计出了一个更好的网络。
总结
上述工作也属于一种理论上的方法,从纯粹的数学角度出发,将 Deep Neural Networks 看作一种 Ordinary Differential Equation 的 Numerical solver。我们通过找常微分方程更好的数值解的方法,将其对应回一种更好的网络结构。这种新的 Transformer 结构的性能较之传统有了显著提升。
近一两年来,特别是以谷歌为代表的一些企业在大力推动所谓的 AutoML,倡导不再去设计网络,即减少人在设计网络这个环节里面的比重,希望用纯 Learning 的方法来找出一些网络的结构。但是我们在这里面给大家提供了一个新的途径——仍然是人设计的方法,但不是纯粹凭经验设计,而是将网络结构和一些数学问题等同起来,例如此前谈到的把网络结构和微分方程数值解等同起来——我们通过利用过去几百年来积累的强大的数学工具,去设计这种更好的网络。这也是一个我们很有必要去探讨的途径。
PGD-based Adversarial training算法
关于神经网络,有一张我们常见的图:
左边猪的图像加一点非常小的noise (noisy image),但将此处的noise乘以0.005后再进行叠加,从而得到右图,人眼无法判断出左右两张图的区别,但是Neural network可以识别出左图为“猪”,同时却又得出右图跟“猪”毫无关联的结论,这是眼下深度学习遇到的一个很大的困难。
对于这个问题,今天大量的研究都是所谓的 attack 和 defense,用到了诸如 Algorithm training 等各种方法,试图增强深度学习网路的鲁棒性,但是效果比较差。更有甚者,虽然在这个方向已经有很多机器学习工作者开始展开理论研究,但不幸的是,直到今天大量的理论研究给出的都是负面的结果,例如《Adversarially Robust Generalization Requires More Data》,这是去年NIPS上发表的一篇很有代表性的论文,它证明了如果想要使神经网络对于对抗样本是 robust,那么必须要有非常多的 training data,即如果想要达到正常的 accuracy,所需要的训练数据量可能要有一个指数的增长。
我们首先要从理论上分析,诚如研究结论所示,要想得到一个对对抗样本 robust 的 Classifier,确实需要更多的 data,但是我们证明了只需要更多的 unlabeled data,不需要更多的 labled data。
事实上,今天数据之所以不容易获取,主要是因为对数据做标注的代价很高。如果是不需要标注的数据,那资源可谓极其丰富。所以如果能用少量的标注数据加上大量的无标注数据,就可以做到对于对抗样本是 robust,这项工作就是极具吸引力的。
而所谓“对对抗样本 robust”,指的是对于一张正常图片(原始图片),如果在其周围邻域里任意找一张图片的话,这两张图片的 label 应该是相同的。关于这一点,我们其实根本不需要知道此处的 label 是什么,这就是我们核心的想法。
基于这一想法,我们可以建立一套完整的理论,当目标是让 robust accuracy 达到最高,就可以通过数学定义去定义 robust accuracy。同时还可以从理论上证明 test data 上的 robust accuracy 可以完全学习里面一些理论的分析。
Robust error 可以分成两项,一项和我们传统的正常 learning error 完全相同;另一项是前面的第一项,可视作一种 consistence,即一张原始图片与其邻域内看起来非常像的图片,它们的 label 应是相同的,可以用大量的 unlabled data 来进行训练。
基于上面的分析,可以设计一个新的算法,叫做 PGD-based Adversarial training。这个算法在正常的 training 基础上增加一些 unlabeled data,而后在优化的时候,不仅计算正常的分类 error,还把 unlabeled data 周边邻域里的图像标签是否一致也记作另一组 error,连同此前的 consistence error,一起去做 training。
总结
如果想得到一个对对抗样本 robust 的分类器(Classifier),并不像很多之前的工作一样必须要很多 labeled data,实际上我们可以凭借少量 labeled data,再加上足够多的 unlabeled data 来解决——unlabel data 的获取当然要比 labeled data 容易很多。
2
孙剑:几乎与人工智能相伴而生,计算机视觉的应用场景广度不容小觑
北京旷视科技首席科学家,西安交通大学人工智能学院院长孙剑围绕《云、端、芯上的视觉计算》这一主题展开了分享,在介绍其团队在该领域所做的工作之外,还站在应用层面进行了简单的分析。
北京旷视科技首席科学家 孙剑
长期以来,计算机视觉当属 AI 领域的一大支柱,与之并立的还有 Speech 和 NLP,以及一些通用的人工智能研究。所谓计算机视觉,其核心就是在回答一个问题——机器如何才能读懂照片或视频?与此同时,我们还一直在思考的是,作为一个初创公司或企业,基于当前的现状又能做些什么?
事实上,人们对于计算机视觉的研究早在人工智能萌芽的约 5 至 8 年后遍开始了。其中的代表人物就包括人工智能的奠基者之一——Marvin Minsky。面对复杂的人工智能研究,他在某个夏天决定先找一些简单的问题来着手切入,于是便带上几个新招的暑期实习生开始动手了。他计划在一个机械臂上装入摄像头,同时在另一边摆上几个积木,任务是让机械臂将积木摆成其“看”到的人摆出样子。这项看似简单的研究在实操过程中却困难重重,面对超出想象的难度等级,Minsky 也在几年后放弃了这个方向。但作为几乎与人工智能相伴而生的研究课题,计算机视觉于智能领域的意义自然非凡,倘若再扩展到应用层面来看,其用途更是不容小觑。
现如今,我们周边环绕着大量各种各样的 camera,因此于计算机视觉的应用而言,如何才能读懂所有摄像头的 input?这些摄像头就相当于我们的眼睛,而计算机视觉就是需要读懂这些眼睛的大脑。除此之外,我们要求的输出内容不仅是简单的意思翻译,可能还需要了解图像、文字等更多信息,例如某样东西在哪里,是什么样的场景,场景里都有谁,他们的动作又是什么……因此,不光输入的场景多种多样,对输出的信息也有诸多要求。如此一来,需要应用到计算机视觉的场景也会很多,这也就解释了今天国内外计算机视觉相关的公司不仅数量大而且体量还不小的原因。
计算机视觉包含较多应用,在研究方面一般会归结成几个核心的问题,包括分类、检测、分割,分别是对一张图的整体、一张图的不同区域和一张图的每个像素做语义识别。另外如果输入的是视频,我们还需要利用时间顺序及密度等因素做出更高效的识别。其中最核心的是分类问题,因为它是后面三个任务的核心和基础。而这些问题的最大难度就在于如何研究表示照片在图像中的存储形式,以及存储之后又该如何操作这个图像的表示。David Marr 便是其间的研究代表人物之一。
David Marr 在其 80 年代的著作《视觉》一书中提出了计算机视觉的几层构架,描述了视觉的抽象过程,提出对于输入图应该先检测边缘,形成 2.5 D sketch,然后再恢复 3D。但 MIT 教授 Marvin Minsky 在谈及他的这一构想时表示,这个理论很好,但是忽略了核心问题的研究——如何表述一张图像。
计算机视觉的早期图像表示模型是 Part-based,比如人体可以分解成头、胳膊、腿;人脸可以分解成眉毛、眼睛、鼻子,这样就可以通过 Part 这种组合式的方法表示物体。如果一个物体有结构,这种组合式方法很合适,但很多自然场景的物体没有这么强的结构就不合适了。
此后流行的方法是 Feature-Based 方式,这类表示的方法可能抽出几百上千的 Feature,最后变成非常高的向量,这个向量最后寻找其特征的表示。此方法是在深度学习之前统治图象识别领域的方法,其不但可以用作图象,对特殊的物体及人脸识别也较为有效。它最早用在 Surface 人脸的功能上,其特性是可以对图象做一些不同的变化,但是同时也有两大缺点:第一,这个方法整体上是从输入向量到另外高维向量的非线性变换,这个向量的变换次数是有限的,如果真正算它的非线性变换至多有三、四次,性能不会提高;第二,其中大多数参数是人工设计的,包括 Feature,但人设计复杂系统的能力是有限的。
今天的主流方法是深度神经网络,这两个特性就被改变了,整个非线性变换非常长,可以做非常多次,所以系统的表示能力非常强;第二是所有的参数联合训练。这两点让深度神经网络真正能够取得非常好的效果,也包括当时我们在微软提出的 152 层的残差网络 ResNet,第一次在 ImageNet 上超过了人的性能。
至于 ResNet 为什么能够工作的问题,至今也没有一个明确答案,这个过程中当然有过很多解释。其中,最直观的解释是说当你的非线性变换层数非常多,相邻两层变换的差别就非常小,与其直接学习这个映射,不如学习映射的变化,这样的方式就让整个学习过程,特别是训练优化过程变得更容易。
除此之外,还有一个解释来自《Deep Residual Learning For Image Recognition》这篇论文(Kaiming He,Xiangyu Zhang,Shaoqing Ren,Jian Sun. Deep Residual Learning For Image Recognition. CVPR 2016.)的第二作者张祥雨,他认为 ResNet 的整个学习过程是一个由浅到深的动态过程,在训练初期等效训练一个浅层网络,在训练后期等效训练一个深层网络。
论文第一作者何恺明有另外一个更“科学”的解释,他认为整个训练过程相当于深度学习的梯度下降过程中,最为困难的梯度消失问题被 ResNet 解决了,该解释也发表在 ECCV 2016 的一篇论文(Kaiming He, Xiangyu Zhang, Shaoqing Ren, and Jian Sun. Identity Mapping in Deep Residual Networks. ECCV 2016.)中,并在该论文中第一次训练了一个 1001 层的神经网络。
还有一些同行提出的解释。一种是把 ResNet 和 RNN 关联起来,认为如果有 Weight Share, ResNet 可以看作是一种 RNN。还有一种解释把 ResNet 看成是指数多个不同深度网络的集成。用“集成”这个词其实有些问题,因为一般我们做集成算法不联合训练,但这里面整个 ResNet 里指数多个网络是联合训练的,所以很难定义它是不是集成。
孙剑博士在分享过程中还特别提到了其个人比较认同的一种解释——Iterative Refinement,认为网络初期的层学习表示,后期很多层不断迭代和 Refine 这个表示。这跟人理解看图识字很相似,一个不容易理解的东西你要看一会,基于当前一些已看内容的理解,反复看才能看懂。
还有从优化观点的解释,如果不用 ResNet 这种构造,系统的损失函数会非常坑坑洼洼和高低不平,所以很难优化。我们知道整个网络训练是非凸的优化问题,如果是这种不光滑的损失函数,训练很难跳出局部极小;如果使用 ResNet,就可以比较容易抵达一个很好的局部极小。最近研究表明,局部极小区域的面积和平坦性和一个方法的推广能力非常强相关。
由是观之,深度学习从完全不 work 或是不能呈现,发展到今天所有人都可以非常高效、精确地呈现结果,实际上经历了很多这样的过程。其间当然还涉及诸多计算、数据,以及一些细节上的问题,像是初始化方法的使用也不容忽视。因为对于一个非常复杂的边缘系统而言,一个有效的初始化可谓不可或缺。此外还有非线性单元的问题,我们之前惯用Sigmoid非线性单元,但这个单元对收敛性是有障碍的,因此在实际中常用的都是一种叫做分段线性的非线性化单元,这种方式可以让整个收敛非常流畅——这些都是“细节”。我们都说网络结构让ResNet对优化更友好,但它并没有解决一个真正的深度学习系统可能会撞上的其他问题,例如网络的表示能力问题、推广能力问题等。因此,正是因为有这些前人做了各种各样大大小小的详细改进,才使得我们今天的深度学习一步步成长为一个相当强大的有监督的学习工具。
多层 ResNet 学习高度非线性映射的能力非常强。2017年年底,ResNet 成功应用于 DeepMind 的 AlphaGo Zero 系统中,从而使整个系统得到了简化,用一个40 或 80 层的网络就可以学到从棋盘图像到落子位置这样一个高度复杂的映射。在实际应用中,随着网络与数据越来越大,会逐渐呈现出这样一种特性:在一定问题上以及特定领域中,深度学习在很多场景下超过了人的能力,例如一些图像识别、人脸识别任务。从学术上来说,这也让研究员的工作实现了转变,他们越来越多地从以前设计 Feature 直接转变到了设计网络的结构。
2012 年开始有各种各样的神经网络结构出现。如果从计算平台的角度看这些工作,大概可以分成三类:第一类是在“云”上,像 GoogleNet、ResNet,其目标是向着最高精度方向走,有 GPU、TPU 可以训练非常大的模型,来探知我们的认知边界;第二类平台是在“端”上,特别是一些嵌入式设备,这些设备上的计算能力,内存访问都有限制,但很多真实的场景就是如此,那你怎么去做这上面的研究工作呢?谷歌在去年提出 MobileNet 运行在移动端设备上,旷视科技提出了 ShuffleNet,其目标是在一个给定计算量的设备上得到最好的效果。
一个网络的最基本结构是多个 3×3 的卷积,ResNet 加了一个跳转连接,我们在 ResNet 中还引入一个 Bottleneck 结构,先做 1×1,再做 3×3,再回到 1×1,这样可以提高卷积的效率。
2017 年有一项工作叫 ResNeXt,它在 3x3 的基础上引入分组卷积的方法,可以很好地提高卷积的有效性;谷歌的 MobileNet 是一个 3x3 分层卷积的方式,每个层各卷各的,这种方式非常有效,特别是在低端设备上。ShuffleNet 结合分组卷积和分层卷积的思想,对 1×1 Conv 分组;但是如果只分组的话,组间的信息不会交换,这样会影响特征学习,因此我们通过引入 Shuffle 操作,让不同分组的信息更好地交换,然后做 3×3 的分层卷积,再回到 1×1 分组卷积,这就是 ShuffleNet 的核心思想。和其它方法相比,在相同的精度下,ShuffleNet 在真实设备上的速度要比 AlexNet 快 20 倍左右。
我们还需要将神经网络运行在芯片上,这不光对网络结构设计有要求,还要对网络内部精度的表示做限制,现在最流行的方法是做低精度化,比如 BNN 和 XNOR Net,还有旷视科技提出的 DorefaNet。低精度方法是指神经网络的权重或激活值用低精度表示,比如 1 位,2 位,4 位。如果可以用低精度表示两个向量,那么卷积计算就可以通过芯片上非常简单的位运算完成计算。
上述分类问题网络设计需要考虑不同的平台,其它问题多是以分类为基础,比如检测,上图是检测最近几年的发展路程,它们都是先应用基础分类网络,然后构建不同的物体检测框架。
今年,旷视科技与北京智源研究院联合推出了 Objects365,该数据集包含 365 类,远超 COCO 的 80 多类,并包含 60 余万张照片,以及超 1000 万个物体框,是目前最大的物体检测数据集。
最后,除了算法的演进,也要关注如何利用今天快速增长的计算能力。眼下,我们的计算力增速已远超波尔定律,而计算能力快速增长的原因则在于计算结构的转变,即可以将所有计算都换成神经网络向量和矩阵的计算,这些计算最大的好处是能够突破带宽瓶颈,把所有数据同时拉进来进行计算后再传回去,远超现在的传统 CPU 体系结构构架,所以增长非常快,这也将会是一个快速发展的趋势。
(部分图片和内容来源于网络)
BAAI 北京智源人工智能研究院
众所周知,深度学习离不开样本。如果要用深度学习去学习一个目标分类器,就需要特别多的样本。以识别清华的“清”为例,常规操作是要收集关于“清”这个字的不同字体、倾斜和旋转情况,以及不同的噪声、背景、阴影——各种各样的字都要去学习才能得到很好的分类器。而样本多了,问题也就简单了。
我们早在 2013 年便做过类似的工作,彼时深度学习刚在视觉研究领域得到认可不久,又恰逢团队于 2012 年接到了国家自然科学基金委员会一个关于交通标识识别的项目,其初衷是想支持一些团队的无人车研究工作。虽然车在机械层面的自动控制等问题的研究从 2008 年起的两三年内就陆续有了成果,但基金委方面认为还需要打造一个交通标识识别系统,让车辆在行进过程中“知道”道路前方有什么样的标识。
当时用深度学习方法去研发交通标识识别系统的效果不错,单张图像识别率约为 99.5%。如下图右侧所示,我们在汽车的挡风玻璃上安装了摄像头,类似于现在的行车记录仪。但从车的角度来说却完全不能满足要求,因为这意味着一千张图像里就会有四五张分错。在一秒钟 24 张图像,一小时 3600 秒的实际情况面前,这样的误差显然不容忽视。
前面说的是“单张图片”的情况,但若是在视频流过来之时,远处的标识就会随着走近逐渐变得很大很清晰,所以连续的一张一个交通标识会在视频里出现很多次,信息关联后错误率也不会太大,所以在参与“智能车未来挑战赛”时候的效果就非常好。然而由于这部分工作实际上和一些地图应用的功能重合了,所以基金委真正需要的是地图导航应用不能告诉我们的信息,特别是红绿灯。因此我们改道研究针对路上标识的识别,达到了 99.49% 的识别率。
到这一步问题似乎已经解决了,然事实并非如此——标注数据依旧是负担大压力重,彼时没有公司支持的我们,只能在基金委的资金支持下自己想办法获取数据并标注,为此耗费了很长一段时间。
近年来,机器学习领域一直不乏数据标注方面的研究,下图是在 12306 网站购买火车票的体验,其进入页面后用户验证的过程就是在做图像标注,这个方法叫 Crowdsourcing(众包)。而机器学习领域大约在九、十年就有类似的研究,即在众包的形式下如何做机器学习。
这也是一个大家长期以来持续关注的难题,一方面是因为这个过程可能会有噪声;另一方面是获取数据本身就很难。以交通标识的识别为例,需要对每一张交通标识的各种表现进行收集,但像是“连续急转弯标识”这样的图像在数据里出现的次数特别少,数据获取也就相对比较困难——现实确乎给当前的我们提出了诸多难题。
为了应对这些问题,在机器学习方面还有一项较早的研究工作——半监督学习,其大约在 1998 年走入研究人员的视野,关注度也自此不断上涨,并一直持续到 2010 年前后,其间各种各样的半监督学习类工作迭出。
何为半监督学习?做机器学习时,如果有大量监督样本无疑能学得很好,但数据标注又很困难;非监督学习用到了很多未标注数据,我们学到的又不一定正确。而所谓半监督学习就是采此二者之长,运用一部分标注好的样本和大量没有标注的样本,一部分有监督一部无监督。
如下所示,左上角的图是由各个样本点构成的,而该图即是他们之间的关系,所有黑色的点之间是没有标注的。当给定一个蓝色样本和红色样本时,凭借其标签沿着该图进行传播,最后到右下角,就可以给定所有样本标签,这就是半监督学习的一个例子。
运用这个方法时会有这样的情况:构造一个目标函数,并通过不断迭代的方法给出一个解,最后这个解会收敛,收敛结果是上图中的最底下一行。这是我们团队早期在 2009 年左右的一项工作,借此我们了解到半监督学习一定会收敛,同时还分析了它和已有的流形学习之间存在的关系。
半监督学习方法可以用于任何地方,与应用无关,但在视觉领域里半监督学习有一个特别好的应用,即交互式的图像分割。而图像分割工作又实属相当困难,在计算机视觉领域历经 40 余载研究但仍突破不大。
分割之难,在于对同一个图像而言,人与人之间的需求不尽相同,根本不可能给出一个满足所有人要求的统一算法。当然从机器学习的角度来看,这就是聚类问题,但非监督学习永远无法保证其正确性,所以用上监督学习就能做得非常完美。
图像分割的工作可以用下图来进行说明,假设需要将图中雕塑从图像分形里抠出来,看似比较困难,但在半监督情况下可以实现——在中间一排,用鼠标左键划线,告诉计算机这是想要的地方;用右键划蓝线,告诉计算机这是不想要的地方,然后进行分割。从机器学习的角度看这属于半监督学习,从视觉的角度看这是交互,交互是图像分割。
再如右图所示,如果只需要保留前面的南瓜,而不要背景的南瓜,非监督学习就可以把这项工作做得非常完美。同理,非监督学习进行图像分割也适用于困难颇多的医学图像领域。
在此基础上,图像分割在视觉领域中还有很多有趣的应用,例如要把两朵玫瑰进行分割并且改变其中一朵玫瑰的颜色,或是把草地上的动物抹掉进行背景填充,这都属于半监督学习的范畴。
下面一个问题是多示例学习,其研究的问题如下图所示:假如要进行人脸检测,已知左边图像上有人脸,右边那张图像没有人脸,在这种情况下能否做好人脸检测呢?我们通常的做法是画出人脸的框架,并抠出来进行训练。但是这样做存在一定的难度,因为至少不同人脸框架的大小位置是不一样的,“人脸”本身就没有一个明确和清晰的唯一定义。
对此我们有一个思路,就是给机器一个很弱的标签,即整张图像有人脸,但不告知具体位置,同时告知右边图像没有人脸。在这种情况下能不能做机器学习,这是我们关心的问题。人们称之为“多示例学习”,其含义是其中有很多例子,已知有的是人脸,有的不是,同时还有很多图像中一个人脸都没有,能否在这样的条件下做学习?
类似的,假设我们有几个包,每个包里面有一个样本,现已知这里面每一个都含有我们要的样本,但下面还有一个包不是我要的样本,能不能根据已有信息把我要的样本找出来?这有点像做游戏,这样的问题有一个经典解法,即默认当我们把所有样本收集起来时,其在特征空间里会聚集在某些地方,密度最高的那些区域通常是我们要学的概念,在这个假设基础上就可以做学习。这个例子的本质是先建立一个目标函数,然后再对它进行求解。
我们也做过一些多事例学习的工作,但现在很多人谈及深度学习就认为一定要把样本十分精准地标出来,其实不必如此。我们前三年还有一项工作工作,是对叶片上的病虫害进行监测,只要一批数据有病虫害,另一批没有病虫害,就可以据此找到病虫害区域,这就是用好多示例学习思想的一个实际案例,而且有趣的是,这一方法相当于成功跳过了最困难的数据标注环节。
另一个与数据标注有关的问题叫 Active learning,其思路类似于给学生上课时不要按部就班地从头至尾一点点讲解,最好是先讲一个大概,然后询问学生没有听懂的地方,再就没听懂的地方细说。对应到 Active learning 中来看,就是当我们只有少量样本的时候,可以训练一个分类器,那么为了得到更多的标注样本,从而使得这个分类器性能更好,我们应该标注哪些样本?
如上图所示,毫无疑问在整个图像中再给更多左下角和右上角的样本其实意义不大,都能猜到那个地方不是×就是⚪,而且信息很充足。其实最容易出错的地方是在分界线附近,这个方法告诉我们,如果要标样本,在分界线附近的那些地方是最有价值的,只消标少量样本就可以达到很高的学习准确率。该办法经证明可以迅速缩小解空间,继而很快集中到所要的那个解,且在解空间上每标一个样本,就相当于对整个解空间做划分。Active learning 实际上与学习范式有关,其与学习模型和学习方法相结合,是减少标注样本的一个高效方法。
除此之外,还有 Multi-Label Learning。以下图为例,对于其中这张图像我们会有一个标注,这张标注可能是关于城市的,可能是汽车、楼房,也可能是道路、人、树。这些标签之间彼此关联(如下图右侧关系树所示),一张图像会用不同的标签,而我们则应充分利用这些标签之间的关系,从而使我们的预测结果更为准确——这就是“多标签学习”。
另一项值得一提的工作叫 Co-Training,也颇有意义,其来源于 1998 年发布的一篇论文。彼时,一位 CMU 的老师发表提出要将教师网页和学生网页进行分类,这确乎可行,毕竟前者关心的是科研、经费、学生培养、上课等,而后者关心的则是课题、选课,游戏、电影等——二者的关注点不同。
既然任务可行,我们又该如何处理?
首先,我们可以考虑设计一个分类器,这个分类器仅根据内容进行分类,例如课程介绍、基金申请介绍、项目介绍,从中找出关键词做分类,以内容为重;另一个重要的分类指标是 link,即老师和学生关心的网页不同——学生可能会指向一些游戏,老师则可能会指向一些像是基金委、科技部这类的网站,所以也可以根据 link 来分类。但是 link 和内容之间孰重孰轻也不易权衡,因此很难放在一个空间里设计分类器。
因此,就需将其分为两部分:先用内容设计一个分类器 C1,再用 link 设计一个分类器 C2。设计好后标一些样本,并用这些样本来训练第一个分类器,得到结果后用同样的样本去训练第二个分类器,就得到了两个分类器。此时还有很多没有标注的数据,用第一个分类器试一下这些没有标的网页,明确是“学生”还是“老师”,再转而用这些确认的数据训练 C2。同样也可以交换次序,先由 C2 确认然后再训练 C1——如此轮换操作,得以提升整个分类器 C1 和 C2 的性能。这项工作获得了 ICML 2008 的十年最佳论文奖,影响力不容小觑,也因其思路简单,颇受人们喜欢。
此外,机器学习里还有一些其他的方法和工作,涉及到如何在有限样本的情况下提升学习的准确性,例如稀疏学习(Sparse Learning)、Low Rank 以及 Transfer Learning。其中,稀疏学习的思路是考虑到一些稀疏的特性,把一些稀疏优化的技术用到学习里,稀疏学习其实不只是用在机器学习里去减少标注量、提高准确率,还可以用在别的地方。
2010 年前后,我们做了一项名为“图像分离”的工作,即“混叠图像分离”。如下所示,左边一列有三张图像,现将这几张图像混叠成中间第二列的三张图像,混叠的意思就是指两个图像的纯粹相加。当然,混叠时这几张图像之间会有位置上的差异,或者说混叠的系数不一样,也可能会有位置的不同,以及一些平移等变化。
当初我们的设想是希望在只有中间这一列图像的情况下,能够得到左边这一列图像。这个问题在图像里难度非常高,人类能隐隐约约能感觉到一点不同图像的信息,却解决不了分离任务,于是我们就用到了稀疏性——考虑一个物体虽然在整个图像上到处都是,但是其边缘是很稀疏的,这是非常重要的信息,我们通过边缘的稀疏性去计算物体之间的关系,最后右边一列是我们反解出来的图像,和左边一列达成了非常好的对应。当然,混叠图像分离通常无法保证图像质量,但正确分离后能看出图像的大概即可。
这个问题还不止于此,原则上,一张图像混叠的图像要多,否则可提供信息很少。换言之,可以混叠四五张图像,一般混叠图像越多恢复出来的可能性越大。除此之外,我们还可以通过这个方法来做欠定,即用四张图像混叠成两张图像,只有中间两张图像就可以把这四张图像也恢复出来。当然,中间图像越少,恢复出来的质量就会越没那么好,如下所示,底层图像的质量和最上排仍存在一定差距。
在利用了稀疏特性后,会发现如果有类似下图树木花草这样的纹理图像,很难看到如汽车、飞机等物体图像那样的清晰边缘,还能否进行分离?答案是肯定的——我们对稀疏性要求没有那么高,如第一行两张图像混叠成第二行,最后我们把它分离成底部一行,仍然可以分离得很好。
早前所有人做这个工作都是在合成问题上展开,也就是指给定上面两张清晰的图像,进行人为的混合,混合以后再把它分离出来。其原因有二,一是我们知道标准答案,清楚两张原始图像是什么样的;二是我们在混合时严格按照模型操作,比如线性叠加,而且难度已经足够了,所以没有人做真实图像测试。
那么真实图像的操作又当如何?于是我们创造了这样的数据:
假设我们面对一面玻璃,玻璃另一边有一个张贴画,我们在这里拍那个张贴画,所以拍的时候(如上左图),我们既可以看到张贴画的图案,同时也可以看到拍摄人自己的反光,所以这是一个很真实的图像,我们得到两张图像之后可以做分离。中间那一列用经典的方法做就完全做不到,用我们的方法就可以把这两张图像分离开,这是我们第一次在真实图像上尝试。
这个现象其实在另外一个情况下也有可能出现,就是在电影电视中,一个镜头的淡出另外一个镜头的淡入,此二者也会混叠,这样的一些图像也可以用稀疏的方式进行分离,但这里并不是为了提高我们分类的准确性。
以上就是在深度学习之前,机器学习对小样本问题做的事。进入深入学习以后,又出现了一些新办法。起初在 2013-2015 那几年,大家都热血沸腾地去办数据标注公司,结果发现难度很大,因此该领域近年来以另外一种形式出现——叫做 Few-shot Learning。它提出了一个比较有意思的范式,该范式告诉我们,以下图为例,前三行可以收集到大量的类别,比如对各种各样的树木、植物进行分类,但有时我们发现在某些类别我们只能得到有限的三五张图像,比如左下角这三类。而一个非常实际的问题在于,以后见到这三五类图像的时候我们能否识别好。
针对这一问题,近几年有一些典型的工作:第一类是通过样本的生成完成工作,其做法是一些图像经过卷积神经网络后,到了特征空间,同时在特征空间做一些扰动,加一些噪声,生成各种各样的图像,使它的泛化性能更好;另外一类工作是当只有左下角那几张图像时,给每一张图像算一个圆心,即做一个平均,算完圆心以后如果新来一个样本 X,可以计算 X 领域内这三个圆形样本之间的距离,它与谁的距离近就分成哪一类,通过求解对新的 query 进行分类。该方法的好处在于适用于只有一个样本的场景,即所谓的 One-shot Learning。但是其效果也比较受限,因为它利用的信息太少,所以效果没那么好;还有一类方法叫“元学习”,其思路是将每一个分类项目当成不同的任务,同时研究这些分类任务之间的共同点,并希望通过这些学到的共同点在以后遇见新问题时,能够根据少量的样本做调整,从而实现对新的类别进行分类的目的——这便是眼下主流的三类思路,以下为详解:
DualTriNet 实际上是对数据很少的类别做 feature-levelaugmentation,它由 EncoderTriNet 和 DecoderTriNet 组成,如上图所示。Encoder 的输入为 ResNet 关于一张输入图像的各层特征图,输出为该图像对应的语义向量,通过对该语义向量进行增广之后(增广的手段包括对语义向量加随机高斯噪声等),便形成了新的语义向量,该语义向量被认为是属于同类的其他图像的语义向量。通过 Decoder 网络对增广的语义向量进行反解码,形成各层的特征图,最后用原特征图和增广得到的特征图对 ResNet 进行充分训练。由于可以无限增广,所以可以达到增加训练数据量的效果。
但是,在语义空间的构造过程中,这个算法需要用到额外的媒介信息,比如类别层面的 word2vec 或 attributevector 信息,以此来构建任务类别(包括训练类和测试类)之间新的语义关系,从而来指导语义向量的解码过程。
本质上来说,基于数据增广的 few-shotlearning 方法并没有摆脱基于大量数据的学习框架,且增广得到的特征或数据并不能完全拟合真实数据的分布。
Prototypicalnets 的主要思路是为每一类生成一个原型表征,这个表征可以通过对该类仅有的几个样本的 embedding 进行平均而得到,如果每一类只有一个训练样本,那该仅有的单样本的 embedding 自然就是该类的原型表征。
对于测试样本,会计算该测试样本的 embedding 与每类原型表征点的距离,然后用 softmax 形式形成类别预测的概率分布,进而进行训练或预测。
embedding 的生成过程通过一个 CNN 实现,整个网络的训练也借鉴了 matchingnetwork 提出的 episodictraining 策略。
该方法的问题在于:embeddings 之间距离度量的选择会很大程度地影响算法性能,另外,当任务类别数量增加或单类样本增加时,不同类之间的 prototyperepresentation 区分度会有所降低,这种在 embedding 空间的最近邻分类策略将难以应付。
MAML 算法是一种经典的基于元学习思路去解决 few-shotlearning 任务的算法。将每个 few-shotlearning 任务视为一个 task,那么 MAML 的思路是学一个兼顾众多独立 task 的模型参数初始值,以期能在新的 task 的几个样本上只需经过数步的 fine-tune 操作就能使模型在该任务上达到较好的泛化性能(如左上图,三个方向代表三个不同的 few-shotlearningtasks)。
本质上,MAML 是寻找到了一些对 task 化敏感的参数,使得当梯度方向改变时,小的参数变动能够带来较大的损失函数变化,从这一点上增强模型对诸多小样本学习 tasks 的平均泛化能力。
《崛起的超级智能》一书主要阐述当今天人类为人工智能的春天到来而兴奋,为人工智能是否超越人类而恐慌的时候,一个更为庞大、远超人类预期的智能形态正在崛起,种种迹象表明50年来,互联网正在从网状结构进化成为类脑模型,数十亿人类智慧与数百亿机器智能通过互联网大脑结构,正在形成自然界前所未有的超级智能形式。这个新的超级智能的崛起正在对人类的科技,产业、经济,军事,国家竞争产生重要而深远的影响。
作者:刘锋 推荐专家:张亚勤、刘慈欣、周鸿祎、王飞跃、约翰、翰兹
未来智能实验室是人工智能学家与科学院相关机构联合成立的人工智能,互联网和脑科学交叉研究机构。
未来智能实验室的主要工作包括:建立AI智能系统智商评测体系,开展世界人工智能智商评测;开展互联网(城市)云脑研究计划,构建互联网(城市)云脑技术和企业图谱,为提升企业,行业与城市的智能水平服务。
如果您对实验室的研究感兴趣,欢迎加入未来智能实验室线上平台。扫描以下二维码或点击本文左下角“阅读原文”