若人工智能研发是登山,我们都经历了什么

若人工智能研发是登山,我们都经历了什么

  欢迎关注“创事记”的微信订阅号:sinachuangshiji

  创事记注:该文是卡内基梅隆大学计算机学院教授刑波在未来论坛上的演讲实录,创事记略有删减。

  文/刑波

  大概在200年左右以前,1930年8月28日,在美国巴尔的摩曾经举办过一场很有意思的比赛,在那场比赛中出现了前所未有的情况,就是机器和动物站在同一个起跑线上。一边是火车,当时蒸汽机时代第一个皇冠上的明珠;旁边是一辆马车。当时就有人打赌,这个蒸汽机的怪物不可能超过马车,因为马车我们已经用了几千年,感觉很好使,坐着也很舒服。当然结果是可想而知的,蒸汽机远远超过了马车的速度,于是就引起民众的恐慌,他们会觉着这个钢铁的怪物会不会碾压我们的庄园,碾压原野和景观。现在我们把坐火车已经当成很平常的事情了,他们的忧虑显然是没有什么道理的。

  在上个星期,大家大概也经历了同样的一场震荡,谷歌的AlphaGO和韩国围棋选手李世石进行了“人机大赛”,结果以大比分取胜,这在公众舆论界形成一次惊恐或者说是恐慌。我看到的一个情况就是:人工智能从教科书里面或公司高度机密的研发部门的一个高度专业工作,变成受到公众和舆论巨大关注的题目。我本来想讲一些技术上的工作,但是这次,我不得不承担这么一个义务来解释一些误解,同时有一些事情也要以正视听,把人工智能和人类影响、关系,给大家讲一下个人的看法。

  30多年前的时候我还是一个小学生的时候,我第一次从一个叫“未来世界”的科幻电影中接触到人工智能。

  电影的主要思想是,人工智能最终会毁灭人类生存的社会和文明。这就提出来一个问题:到底亚里士多德的观点,还是这个电影提出来的观点是一个更科学的见解?是一个更可行的、未来的人工智能的方向?或者它是不是正在被人工智能的工程师和学者们实践,这是大家都关心的问题。

  所以,我要简单的回顾一下人工智能起点。人工智能起源于人们对于智能机器的梦想, 在古代的时候,人们都很希望能出现一种聪明的机器。亚里士多德曾经说过,如果一个机器自己能干很多有用的事,岂不是可以让人类解放出来,我们可以不用奴 仆,不用工匠,就能做成很多事情。他的观点是相当乐观、积极的,他希望机器能够完成人类的一些功能。沿着这个道路,古代的工程师用齿轮、发条等做过看似有 点像机器人的设备,他们可以经过特殊的编程方式,让它们来执行一些任务,这是古代很常见的对人工智能的愿景。

  人工智能正式成为一门显性的、严格的、系统的、可实现的科学和工程的一个领域,得益于上个世纪逻辑科学、计算机科学、信息论、控制论很多学科的发展的交汇。它基于一个很基本的假设,认为人的思维活动是可以用机械的方式替代和完成。其实机械推理这个学科在中国的古代、印度古代,甚至西方都有很多人涉及。到比较近的年代里,德国的数学家莱布尼茨、法国的数学家笛卡尔,他们都曾经尝试过把人类的思维活动用一种像数学或者几何这样严格的科学体系来描述。到上个世纪初,英国哲学家罗素曾经写过一本很有名的著作《数学原理》,在这本书里,他对数学的基本原则做了形式化的描述,而且他的工作后来甚至被进一步推广。希尔伯特曾向数学家们提出一个挑战,说能不能把所有数学知识都用一种形式方法、形式逻辑进行描述,这个问题后来也被解决。后期哥德尔、图灵、邱琪的工作都是向人们展示,实际上你可以用一种简单的只会做二元运算的机器来模拟所有的数学逻辑的证明,这是很强大的推理,由于这一切工作推动导致计算机新的工具发明。我们就会问,随着计算机的发明,到底将导致什么样的人工智能呢?一种预见是它可以产生功能性的人工智能,帮助人做很多人不愿意做或者做的不太好事。同时,也有这么一种可能性,它也许会无限接近人的思维方式,甚至是感情活动,以致于最终代替人。这为我们人工智能研究提供了很有意思的问题。

  在以后人工智能发展里面,有很多故事,令我想起我年轻的时候一段很难忘的经历,这里我穿插讲一下。在我大学三年级的时候很喜欢运动,而且热衷于冒险,所以那时候我心里面有一个梦想,我希望能够成立一个登山队,到西藏爬一座从来没有被征服过的处女峰;这座山找到了,就是在长江源头唐古拉山的主峰,叫格拉丹东,我想踏上这个山顶。

  当然人工智能先贤们的梦想比我远大多了,图灵也是一位运动员,他是伦敦奥运会马拉松比赛的亚军,他当时提出一个大胆的见解,就是“图灵机”的概念。他认为有可能制造这么一台机器,通过某一种电子媒介或其他的媒介跟人进行交流。如果人在跟这台机器交流过程中并不能判断它到底是不是人的话,我们也许就可以下结论说这个机器获得了跟人一样的智能。

  这个概念极大影响了人工智能对于功能的定义,在这个途径上卡耐基梅隆大学两位科学家,阿兰纽维尔和赫伯特西蒙做出了前期的工作叫做“逻辑理论家”。它可以把罗素这本《数学原理》中前52道定理中的38道做了自己的证明,而且它有些证明,甚至比人类证明更精巧。这使得科学家产生了相当乐观的情绪。比如西蒙就宣称也许十年之内,机器就可以获得和人类平均智能一样的高度,这是当时的很好的愿景。

  这一批人找到共同的语言以后,整整60年以前,在美国达特茅斯大学开了一次会,希望通过交流来确定人工智能作为一门科学的任务和整个的路径。同时他们也宣称,他们认为学习以及人类智能的任何一个其他特征都可以被精准的描述,一旦精准描述成立以后,我们就可以用机器来模拟它和实现它。我们普遍认为这个会议标志着人工智能正式诞生。

  当然,我们的登山队也在某一个时刻诞生了,他们就是一群志同道合的人,就像开那个会一样,我们聚到一起,组成的队伍进行了很多训练。我们把这件事看得很神圣、也很严肃,我们经过疯狂训练以后也匆匆忙忙的上路了。我们上路的时候,你可以看到用的是非常原始的手段,跟现在登山队很高大上的越野旅行很不一样。我们到青藏公路拦截运输货物的卡车,坐在车斗上,然后到了某一个地方,换上马匹就开始向高原进发。我当时担任登山队的副队长,也担任前锋,也就是开路的,同时因为我也比较爱吃,所以他们也认命我为厨师帮全队去做饭,所以这里有一张我做饭的照片。当时形式非常乐观,大家都憧憬有一天站在山脚下开始我们的登山旅程。同样乐观的气氛也在人工智能早期诞生后的那几年里面弥漫着整个学界。不光是逻辑科学家的发明震撼了当时的很多学者,同时有很多其他的新的发明,比如说我们有一种学习方法叫“增强学习”的雏形,就是贝尔曼公式,也是在那个时候发现的。增强学习就是现在在谷歌AlphaGO算法里面一个核心的思想内容。还有一个现在大家听到的深度学习的模型,它的雏形叫做感知器,也是那个年代被发明的。不光在方法论上有了很多新的进展,而且很多科学家甚至造出了一些聪明的机器,比如说有一台机器可以做应用题,另外机器可以实现简单人机对话,当时弥漫着非常乐观的气氛,认为以这样的速度往前发展的话,也许人工智能在不久的将来,真的就可以代替人类。做出这样预测的人包括多位非常有智慧的、非常聪明的科学家,不只是一个文科生、一个媒体的意向,它实际上是有一定科学根据的。

  但是,毫无疑问这个前途并不是那么顺利,像我们登山一样,我们上了高原以后很快就遇到很多困难。比如,我们马上就遇到自然屏障,像大河、沼泽地,我们得想办法去穿越,而我们随身携带的工具是非常简陋的,资源是很缺少的。我们甚至还走丢了几次,有几位队员就迷路了,所以不得不停下来等他们,去找他们。我们的给养相当的匮乏,粮食也不够,马匹也不够,所以很多东西都要自己来背。同样比较悲惨的场景其实也发生在人工智能研究里面,我们管它叫做“第一次人工智能的冬天”。怎么回事呢?终于有一天人们发现逻辑证明器、感知器、增强学习、证应用题的各种各样的东西只不过是玩具而已,它们只能做很简单的、非常专门很窄的任务,稍微超出它们所预期的范围以后就没有办法对付。这体现了两个方面局限:一方面就是当时人工智能所运用的数学模型和数学手段被发现是有理论缺陷的,比如:马文。明斯基在他的书中讨论了感知器在模式识别里面的局限。另一个局限是出现在算法上,我的导师之一理查德。卡普和他的同事库克曾经发现了在很多的计算问题里面都有一个计算复杂度的瓶颈,它使得很多计算任务是以指数级来增加复杂度 (即著名的所谓NP问题)。所以,在有限的计算资源下,你实际上是不可能完成所给予的计算任务。这些缺陷,使得人工智能在很早期发展过程中遇到难以克服的瓶颈,不可能去实现一开始所保证的目标,比如接近人类甚至超过人类,所以第一次冬天很快到来了。

  当然,这一批天才并没有泄气,他们还是继续往前艰苦行进。经过寒冬以后还是重整旗鼓做了一些新的工作。一个标志性事件就是,大概在80年代卡耐基梅隆大学制造了一个叫“专家系统”的东西,是给一个叫DEC的公司制造的,在当时,这是一个巨大的成功。这个“专家系统”帮助这个公司每年都可以节约4000万美元左右的费用,它可能在决策方面提供更有价值的内容。同时受到这种成功的鼓励,很多国家包括日本、美国都再次投入了很多资金,开发所谓第五代计算机,他们管它叫做人工智能计算机。我们在显性层面也看到可以和人类下象棋高度智能的机器,在数学工具和模型方面也有了接近于我们现在所使用工具的发明,比如说多层神经网络、霍普菲尔德网络都是在那个时候产生的。同时也有一批人员从事算法研究,比如说现在常听到的反向传播算法也是那个时候发明的。那个时候通过一些很艰苦的尝试,还是有了不少相当令人印象深刻的成果,比如说自动识别信封上邮政编码,就是通过很精妙的人工神经网络来做到实现,精度达到99%以上,已经超过普通人可以达到的水平。乐观形式又一次产生,你可以想象,大家对于这种方面的工作还是觉得人工智能还是有戏的。

  很不幸的是寒冬又一次来了,这一次是由于公众和政府兴趣的转移,甚至包括一些竞争对手的出现。比如说像苹果公司、IBM开始推广台式机,计算机开始走入个人家庭,不是大机房设备,费用远远低于专家系统所使用的机器。专家系统被发现是相当古老陈旧,非常不方便的这么一种设备,非常难以维护,成本非常高,而且不容易延展到新的任务上去,所以经过了一段时间的使用以后,大家的热情开始冷却,政府经费开始下降,所以寒冬又一次来临了。你可以想象,这种情况是很严重的局面。当时我在读研究生的时候,都不太好意思跟人说是学人工智能的,那时候这个词不是一个好看鲜亮的词。由于这些严重的困境,人们开始思考人工智能到底往何处走?应该怎么来做这个东西?一个很自然的问题就是我们要实现什么样的人工智能?什么叫智能?这个问题我们一直没有严肃的回答过,但我想,在有限的资源下要做最有用的事,所以不妨做个严肃的回答。毫无疑问,有两种可能性:一种是向人学习、向生物学习、向自然学习,用一种仿生的反向工程的手段制造跟人脑结构原理尽可能相像的机器。比如达芬奇曾做过尝试,他造了一个仿生鸟非常的精巧,也可以做一些动作,这个途径最后发觉是非常困难的,首先我们对生物原理并不了解,对工作机理也不清楚,而且技术上也非常复杂,甚至不可能。这种工艺性、机械性的制造通常没有一个严格透明的数学模型的辅助,使它变得非常难以分析,所以对它的成功和失败很难做出定量而且是准确的预测。另一种方法,像我们做飞机的方法,从非常虚的水平里面(比如)从人的、动物界获得一些启发,但是把它做足够的简化,可以使得我们能够部署简单明确的数学模型,和强大的计算引擎。这样既可以使用简单数学模型来对系统做出一定的分析,能够把失败、成功或者是改变这些结果的因素产生比较明确的因果连接,使得优化的途径变得比较容易;另一方面,也可以直接利用人类工程领域的很多成果,比如电子计算机,使用一种类似暴力堆砌、资源堆砌的手段,使比赛变得不对称,实现弯道超车式的效果,在一种不同路径上超过人的方法,这是人们开始思考的一个问题。

  我又得拉回到我们爬山,我们也在思考,我们要把任务完成,我们给自己设定很难的目标,经过几个星期艰苦跋涉,终于到达了山脚下。这个山脚就是在格拉丹东这个冰川的正前方。然而要实现登顶,我们必须考虑采用何种路径,我们决定从冰川的左沿踏上雪线,我们感觉我们找到了一个比较靠谱的道路。

  大概在同一个年代,人工智能整个研究也开始重新确定自己的方向。我们也是做了一个选择,就是我们要做一个实用型、功能型的人工智能,因为这样至少我们知道我们在做什么,而且我们对结果会有一个比较严格的判断,而且我们能搞到经费,这样的话我们能施展一些功能。这就导致了一个新的人工智能的路径。由于这么一种对于人工智能任务的明确和简化,带来了一次新的繁荣,比如说数学工具上找到很多新的方法,包括原来已经存在于数学或者其他学科的文献中的方法,他们被重新发掘出来,或者重新发明出来用到计算机或者人工智能研究中。比较显著的几个成果就是像最近获得图灵奖的科学家Pearl的图模型、Stephen Boyd《Convex Optimization》(凸优化)这本书、Hinton的深度神经网络,这都是当时,大概15-20年前左右的时候,重新被提出来让大家开始研究。另一方面,由于这些数学模型对自然世界的简化,它有非常明确清晰的数理逻辑,所以使理论分析和证明变得可能,所以我们开始可以去分析到底需要多少数据、计算量才能够获得我们所预期的结果,这样的理论洞见对开发系统是非常有帮助。第三方面,我个人认为更重要的,我们终于把人工智能跟人类其他工程技术方面上的成就做了很紧密的连接,摩尔定律的实现使得计算能力越来越强大,这些强大的计算能力很少被使用在人工智能以前早期应用中。现在由于我们把人工智能定义为一个数学上的解题过程,这样我们就可以把很多计算能力转移过来提高人工智能的效果。

  由于这么一系列的突破,人工智能又产生了一个新的繁荣期,产生很多惊人的突破。早期的结果包括1997年的时候IBM深蓝和卡斯帕罗夫这场非常吸引人眼球的象棋大赛,也是机器人获胜。当然最近我们看到类似的结果在围棋中产生。甚至人们认为在更加通用型的功能中,比如在回答智力竞赛或是识别图片的比赛中,机器也可以达到或者超过人类的标准。机器人也因此有了很大的进步,这个视频展示了早期自动驾驶车的原型,而这是一个把人工智能原理用在设计中的一个机器狗。我要解释一下这个机器狗和玩具狗有什么不一样的地方?这是一条真正人工智能的狗,它走路的步态、自我稳定性等等不是我们用编程方法给它写出来,比如你看到坡就往上爬,被踢倒后爬起来,我们不是具体写出控制指令。实际上我们写的程序是一套学习算法,让这些算法在模拟器上不断的走路、开车,让它们自己学到一种策略来完成不同环境,状态下的行动,这是人工智能和以前控制论最核心不同地方。

  这些突破使得人们又变得很乐观的起来,这也是一个幸运的时代,我个人职业生涯也在这个时候跟人工智能产生交集。我从清华大学毕业以后,就进入到RUTGERS和Berkeley做了研究生,然后在十二年前到卡耐基梅隆大学成为一名人工智能的教授,卡耐基梅隆大学是人工智能比较重要的基地,很多原创性成果从那儿出来,所以我当时是非常兴奋。我过去后成立了一个比较强大的小组,试图在人工智能各个方面都产生突破,包括理论,算法,和各种各样的应用。

  在这样的背景下,我们有理由对以后前景又产生乐观的情绪,就是人工智能真的有希望接近人类了吗?事实上我们又遇到了困难,爬山的时候也遇到了困难,那边人工智能领域也有同样的困难。困难在哪儿呢?

  我再讲一个故事,在2011年,我迎来了做教授以后的第一次学术休假,在美国教授大概每六年可以做一次学术休假。当时选择去了一个很年轻的公司,就是这个Facebook公司,现在已经是个很著名的全球公司,但那个时候它只是一个500人的公司,在斯坦福大学校旁边的一个小仓库里搭起了他们的实验室。他们雄心非常大,希望为上亿用户提供服务,把他们连接起来;他们也希望能够运用人工智能来帮他们投放有价值的广告,增加公司的收入;他们设立的目标,认为在不久的将来把用户从1亿增长到10亿,当然现在他们已经达到这个目标。我们的任务是帮助他们实现这么一个愿景,当时我是Facebook第一个访问教授,感觉压力特别大。其中一个任务就是通过社交网络里面(用户)跟别人连接的方式,把他们投射到一个社交空间中,这样可以做一个社群的检测。把他们来分组、特征化。这个任务实际上在统计学里、在人工智能里并不是很陌生的任务,比如说在这个任务2011年以前,我们曾经对此发表一个工作叫做混合成员随机区块模型,工作的第一作者现在是哈佛大学统计系的一位教授,也是我原来在CMU的学生。但这个工作有一个问题,它的计算复杂度是平方型的,也就是当你的人从10个人增加到100个人的时候,你的计算量就会增加到1万,再平方一次,那这样的话就会产生瓶颈。当你网络特别大的时候,其实还不用太大,比如1万人的话,我们就没有办法去克服计算的障碍,这是当时让我们头大的问题。但是我们作为人工智能学者、应用数学家还是很兴奋,我们不怕这个东西,我们很擅长研究算法、模型、特征,看看能不能做加速。实际上我们也的确做了很好的工作,比如我们把社交网络抽取比“边”更强大的特征叫做“三角特征”,我们把模型也做了升级,从混合区块模型到混合三角模型。在算法上也做了一两次非常显著的革新。从蒙特卡罗算法和随机变分算法,每一次突破都产生良好的效果,这个曲线代表复杂度在不断下降,以致于我们可以在比较大的网络里面,产生了实际上的结果,而且比原来结果在速度上提升两到三个数量级。

  到了我工作快结束的时候,我们都可以给老板做一个如下的展示:这是一个全球电影明星的网络,大概100万人左右,我们可以做实时的展示,让你看到人是怎么在模型驱动下,不断开始在社交空间找自己的朋友,落入不同的社交群,这个是可以通过计算实现的;而且它的速度从学术意义上讲还是很说得过去,100万的网络,几亿条边,500多亿特征数,用十核单机在40分钟里实现这样的模拟,后来进一步提升到6分钟。这在学术上是一个惊人的成果,我们用这个方法发了若干篇很有意思的文章。但是我们实际上的任务不是如此,我们的任务不是100万个用户,而是1亿个用户或者是大于1亿个用户,这里还是差了两个数量级,当然我们也有理由说我们的确还有潜力,因为我们只用一台笔记本电脑。但是在Facebook机房里躺着1000台Hadoop机器,可以运转分布式程序;所以我们做了一个简单的计算,任务大了100倍,但是资源大了1000倍,也许我可以在原来6分钟基础上继续减,可以在0.6分钟把这个问题搞定。这是当时的愿景,我们写了Hadoop程序,把我们的算法做了并行化。可惜最后的结果非常不理想,我们等了一个多星期还是没有得到结果,而不是0.6分钟。

  实际上我们看到情况是在算法的运转过程中,因为它是一个迭代的算法,在每一次迭代里面,好像接近结束进入下一个迭代时,总会说我们完成90%、99%,每次都是有1%的东西没有完成,拖一两个星期。这里面就产生了本质性的问题,好像并行运算不是我们理想中这么简单倍增的结果,而是有它内在的复杂性,显然我们还不知道,到底发生什么事情呢?原来这样的事情发生了。当你把大任务分割在不同机器上让它们分开跑,又同时在共同执行同一个全局任务的时候,它们是需要做这样一件事情的:首先,它们各自得做自己局部的运算,但是它们因为是在完成一个共同的任务,它们需要做一个握手,能够达成一致性,所以需要来一次通讯,那么这个通讯是必须发生在每台机器把它们的子任务完成以后才能通讯。所以每次我们都可以想象需要有一个等待的时间,让所有机器都完成它们的任务。当然在一个大的集群里面,总有拖后腿慢慢做这个事情,不是它不愿意做,而是在实际的计算机环境里,总还有其他用户,别人也在跑程序,或者是机房里的温度不均匀。反正机器搞得不一样,而且每次还不是同一台机器不一样,同一台机器慢,把它拿掉就可行了,用剩下快的机器。而它是随机性的不一样,现在这台机器快,过一会儿那台机器快。所以,最后每一次迭代循环的时间都是由最慢机器决定的,这就产生了Hadoop这种模式下并行计算机的瓶颈,你很难实现把它加速。这个困难相当严重,以致于到我当时做访问教授结束的时候还是没有解决,所以我当时觉得非常的尴尬,卡耐基梅隆大学人工智能教授搞不定1000台机器,也没有产生什么功能,当时走的时候还是比较沮丧的。

  我们在爬山也有类似沮丧的时候,比如说我们遇到很多冰裂缝,爬不过去。我们也遇到了暴风雪甚至雪崩,后来在山上也迷了路,各种各样的挫折使得我们目标离我们好像更加遥远了。

  这个时候可能开始重新思考到底我们目标是什么?我们到底需要什么来达成这样一个目标?从人工智能角度来讲,我们需要完成大型的任务,而且我们需要用一个严格的数学上圆满的或者严格的方法来实现这么一个目标。到底我们需要什么呢?很显然,从刚才的例子来看,光是有一个好的模型或者好的算法显然是不够的,我们还需要对于人工智能计算部分的强力的引擎支持,而且这个引擎支持有可能跟原来不一样,因为千台计算机装了Hadoop以后实际上已经是一个过去被认为很有效的引擎,它曾经很好的支持了Facebook当时其他的业务,比如说搜索业务或者存储业务。为什么人工智能业务不能被好好的支持?原因是因为人工智能计算有它的独特性,它是一种原来我们不常用的方法,它是用迭代的、反复读取数据和刷新模型的方法来实现解决方案的。由于任务更新,我们就要问,是不是引擎也需要同样的更新?如果看看飞机的发展过程,你就会发现这实际上是一个Commonsense(常识),大家都会觉得这是有必要的,从最原始的达芬奇设计的飞机,到后来的螺旋桨飞机,喷气式飞机,它每一代的设计都伴随着它引擎的变化,好的模型设计其实是不够的,必须要有助推器把它驱动起来,我想这就是当时人工智能发展中遇到的一个瓶颈,大部分理论科学家,甚至算法专家对搞引擎这种脏活兴趣不大甚至完全不懂,所以他们把自己关在理论和算法的象牙塔里面找出貌似前进的很好的感觉,到真正战场就出现这么一个问题。

  所以我们意识到这个问题以后,我们就想是不是把引擎这个事情好好看一看。计算引擎的起点当然是从冯。诺依曼一开始的计算框架作为原点,他当时设计了这么一个模型,包括中央处理器、记忆存储器、输入和输出,通过一个抽象把软件和硬件之间实现简洁的桥接,以致于编程员不用对每一个晶体管和电子管做显性的、局部的编程。从这个地方发展到60年代就已经有人看到它的局限,因为它是单机,当你有大的任务或者对速度有更高要求的时候,你需要让很多台机器一起跑甚至是一起执行同一个任务的,这块我们已经有了早期的原形设计。但是有一个瓶颈,它的使用性是非常差的,因为你在编辑并行程序的时候掌控几十台甚至上百台机器,这本身就有技术上的困难,就像一个指挥官,让你指挥1000人,每个人单独通信的话这个指挥难度是何其之大,所以需要一个新的桥接模型,来使机群展现出简单的应用界面,这就是后来莱斯利。瓦利恩特做出的一个主要贡献。他发明了一个新的桥接模型叫BSP(整体同步并行)模型。在这种模型下,他做了一个非常简单的抽象,把计算和通讯分割成了两个不重合的项,在某一个项里只做所有的计算,在另一个项里只做通信,这就是我们刚才看到的Hadoop的模型,它让各种机器执行子任务,都完成了以后,来进入下一个阶段,来通讯来握手,达成一个一致性。Hadoop是这个思路的优秀代表,它产生了很大影响,甚至到现在都是主流的运算平台,它对支持传统计算程序像数据库、键值搜索、简单的统计数据的归纳都是相当有效的。当然,最近还有一个新的突破,SPARK,它也用了一个BSP的桥接模型。但它的区别是在Hadoop里面我们是用硬盘作为记忆单元,而在这块我们是用内存作为记忆单元,但它们的通信原理实际上是一样的。

  但是我们刚才也看到,人工智能在这样一个框架底下好像没有被搞定,为什么呢?因为人工智能运算跟刚才讲到传统计算很不一样,它的任务是解决一个数学优化方程,而且实现的方法不是基于解析解,而是用了一种类似于渐进迭代方式,自动收敛,迭代次数和每次迭代的效率和整个数学方程难度有关系。在大数据和复杂任务情况下,这个任务产生的挑战是很显著的,比如,当我们数据非常大的时候,在每一次计算更新的时候,都要把大数据刷一遍,刷几千遍是何其难的事情。如果我们致力于大型高参数模型,比如说有几十亿参数的深度学习模型,那则意味着每一个迭代都要把所有的参数也都刷新一遍,这也是很难的任务,当然数据和模型同时都大这个任务就变得更难。所以我们必须走一个并行路线,但是我们现有并行方法好像不太灵光。因为在进行程序并行的时候首先要关注的问题就是它的一致性,就是说我们每一次子任务群彼此是一致,而不是产生相悖的局部结果,以致于导致整个全局结果的错误和实验失败。刚才我讲的BSP通信协议先计算再通信,再计算再通信,实际上是实现一致性基本保障之一。通常理论科学家和算法科学家,是假设这种协议或这种通讯的代价是零代价;我们不去考虑它,就想喝水一样,我们不觉着那是事儿,算法数学上优异就行。但很遗憾的是当我们进入工程界以后,就像在座的京东各位工程师和技术人员肯定有这个体会,实际系统不是一个零代价的通讯,它有各种各样的问题使你机群不和谐、不同步,那个时候你要么花很多时间去做等待,等待它的一致,等待它算对。或者有些缺乏良好数学严密性的操作员会选择放弃同步,让机群在异步情况下自由迭代,就好像车间里的各条传送带速度各异,这最后有可能使一个程序处在算法发散或者失败的风险下。

  到底怎么办?我们怎么能够从这种失败的经验中找到一个更加快速,但同时又数学上正确的方法来运行一个并行人工智能程序?这就把我们拉回到离开Facebook以后回到卡耐基梅隆大学进行的一系列新的思考。我们发现人工智能运算和传统计算非常不一样,传统计算由一堆指令集构成,你要执行各种各样的指令,执行这个程序的目的就是为了执行这个程序本身,以达到一个功能,而且中间是绝对不能出错的。就像搭房子你要是把哪一块砖放错了,你一定得重新放,否则整个东西都会垮下来。这是传统计算任务经典的特征,而且所有现有操作系统实际上都是围绕着这个目的来做的很多优化,包括容错性和通讯有效性都是如此。人工智能运算跟这个很不一样,虽然很多人在一开始的时候并没有意识到。因为人工智能也是一个程序,好象也是一堆指令集,但是这里执行指令集只是一个过程而不是目的,它目的是为了解一个优化方程,就像爬座山一样,目的是爬到山顶;你固然可以沿着它给你设置好的路径一步一步爬,但是如果你哪一步走歪了,就像这个图中的小伙子喝了酒脚步不太稳定,开始歪七走八,但只要他大致靠谱,知道目标且能判断好坏,他还是可以爬到达山顶,只不过是稍微慢了一点,但是总比每次走错了以后再走回原点重新爬要快很多。这就体现了人工智能作为一个迭代渐进算法跟传统的一次性的扫描算法所不一样的地方。因为这样一种认知,我们终于迎来了新的理论突破,在2012年的时候,我还有几位同事设计一种叫做参数服务器新型的系统模型,我们设计它的新的理论基础,给出了严格的数学证明,同时也搭出了框架原型。在这个框架底下,核心的概念就是人工智能计算任务不再像传统并行任务,比如像飞机表演队一样,每一个飞机的飞行精准到位非常重要,需要不惜代价保住每一步的准确— 这样做会有很昂贵的代价。在我们参数服务器框架底下,我们更把一个并行人工智能程序当成是一个在执行救火任务的机群,它的任务为了扑灭火,编队飞行去达到火场只是一个手段,编队飞行很好,但也不用不惜代价的保持飞行姿态的完美,你到了目的地,把灭火剂扔掉,再很有效的飞回去补充,再返回参与下一轮灭火,直至熄灭,这个是最主要的一个目标。所以,这两个是不一样的。而且在扑火机群需要以整个机群作为整体单位给上级简单的指挥界面,使得负责人可以说你去哪儿灭火、去哪儿取水,而不是说每一台机器、每一架飞机走哪、走几分钟、什么时候走。这个细节的掌控应该是在飞行中这些飞行员和他们的大队长来负责协调,而不是总司令提出的协调。这是一个对人工智能比较新的一种看法。也就是说小的错误是可以容纳的,但总体的目标是不可改变的。

  基于这样一个目标我们就设计了一个新的桥接模型,叫做有限异步模型,在这个有限异步模型下,它大致就是把整个机群的行为比喻成为一个实战型的职业军人团,他们服从中央指挥,但每个连队、每个人都有一定的局限性自由度,不能完全乱打,但是还有一定自由度,目的是共同打赢这个仗。

  对比来说,传统整体并行模型更像是仪仗队或者飞行表演队的活动,需要很精准的协调,他们目的更像是为了展示,他们更适合于阅兵。还有一种就是异步并行,每个机器能够各自为政,在我看来,这更像游击队员的战斗,大部分不能协调高效的完成一个共同的目标。这三种模型实际上体现了不同的内部的设计原理和对任务的定义,我们用有限异步并行的桥接原理去构架了参数服务器的编程界面,它拥有一个共享内存大规模编程界面,使并行程序的编写容易度,运行速度和精度都有巨大的提高。这个系统并不是为某一个特定人工智能计算来设计的,比如说深度学习。它更像是平台通用模型,它设计考虑整个人工智能程序家族的普遍共享的一些特征,给他们提供比较优质的通讯上的服务,所以在我们软件包里面包括不同其他的算法。最后这个系统也有非常灵活的容错或者通讯管理的机制,所以使得随机的资源空档或者小错误也会获得关注,最后的结果是整个系统的工效获得巨大的提升。

  我们还实现了另外一个突破,就是当训练巨大模型的时候,到底应该怎么办 (前面的参数服务器主要适用于分布式的大“数据”问题,而非大“模型”问题)?模型很大的时候大家可以想到,我们也得分步,这次分不是数据,而是把模型分到各处去。这个时候每个机器就获得一个子任务,这个子任务跟其他子任务实际是有更紧密的数学关联,他们必须得做动态分割和通讯,只有一致了以后,才能保证整体训练任务不失败。这个时候需要有一个协调装置,像拉小提琴家的十个手指一样,虽然是在那很快速的运动,但是它们是在执行同一个乐谱,是有目标的在运动。为此,我们就设计了这样一个系统,叫做一个动态的调度器。它可以实时来监控子模型或者子任务之间的一致性,保证数学上是正确而不是衰减的。这样的结果有一个比较深刻在数学上和功效上质量保障。

  这个图里面讲的是我们如果只是为了快,没有把子任务做好,最后会造成更多次迭代才能达到收敛的结果,这是很多在工业界实现模型并行的程序所遭受到的损失,而且在实验的汇报里并没有被别人关注,但是我们发现经过刚才协调器处理以后这样一个问题就被清除了,而且我们还有一些其他的技术,比如包括自适应负载均衡技术,使得每个模型之间弹性的对于资源的要求可以得到及时的满足。最后的结果又是一个数量级的倍增,它不仅使得大型的人工智能程序可以在很细颗粒度下做一个正确性的保障,而且,有时候会实现一些令我们很吃惊的结果。比如在这个收敛曲线的展示中,你会发觉有时候由于这么一种加速,会使收敛曲线突然从缓慢路径跳到很快途径实现加速的收敛,这是传统的通过完全同步运行来实现的程序所无法达到的效果。

  由于这一系列的成果,我们感觉是在一个正确的路上在走,我们的确跟这个目标开始接近了,我们爬山的活动也类似经历这样一个过程,我们开始向峰顶接近。

  我们的登山活动还是有一个光荣的名字的 —— 清华大学登山队就是从我们那次活动开始成立,我们很自豪,能把自己的小小梦想跟一个很响亮的名字联系在一起。在这个活动中我们也遇到很多缘分,比如我们曾经在路上不期而遇很多朋友,包括这位相片中的台湾探险家,都是在爬山的时候认识的。有时候不期而遇、没有事先计划的好事,也会对研究或对我们的活动产生一些很正面的影响,这件事情就发生在我们系统命名上面。任何好的系统都需要比较有意思的名字,我们这里面也遇到一些问题,这个系统工程量很大,也很复杂,到了需要在2013年的年底做第一次开源发布的时候,我们突然发现还没有起好名字,大家也都想不出来一个很好的名字,我就在那花了几个星期,还是想不出一个满意的名字。通常在计算机业界里面,名字都比较无趣。Hadoop是什么吗?它就是工程师的儿子玩的那个大象,捡了个名字就用上了。我感觉还是希望有一个更隽永、更有意思的名字。有一天我从办公室开车回家,经过高地公园桥,这是我家到办公室的必经之路,我还在想这个事,我突然就想到,我们的调度器简称是Strads,是意大利传奇的“斯特拉迪瓦里”小提琴的简称。所以我突然跳到这样一个思路,我不是用小提琴来构思协调的形态吗?小提琴显然是很美好的乐器,令我联想到一首音乐,就是我非常喜欢听的这一首音乐。(梅纽因的演奏透出背景) 我不知道大家听这首音乐有没有一种感觉,是不是有音符,旋律,循环渐进向你扑来的感觉;我当时就感觉到我这个系统能够把机器学习跑成这么一个节奏,又优美又正确,还能让人兴奋,那是一个非常好的效果。这个曲子名叫《无穷动》(Moto Perpetuo, or Perpetuum Mobile),是帕格尼尼给小提琴创作的一个难度非常高,但又是一个非常技巧性和优美的作品,也是我很喜欢的一个作品,所以我就取了它一个字头,把它叫做Petuum,这就是名字的由来。

  我们由于各种各样的机缘、努力、运气,在学术上和我们个人的活动上,都达到了一定的高度。比如我们已经爬到了一个相当高的山脊,我们也看到了不可思议的美景,这种景象和飞机上看到还是不太一样的。我们看到了更多的山峰,我们的课题也在不断的生出新的枝叶来,比如我们后来关注集群上面不应该跑一项任务,应该跑多项任务。多项任务的时候,你就会遇到资源调配的问题,到底每项任务应该占用多少资源?是应该动态调控还是静态调控?在一个交响乐队里面,一个主旋律是不会在一个人手里面的,它会在不同的人中间传过去,做不同的展示和放大,或者是变奏,这也是体现我们系统应有的风格,所以我们就开发了一个面向多任务的灵活的资源配置系统。同时我们还是关注到解决办法的部署,希望整个人工智能解决程序是能够被装在一个容器里面拿来拿去在不同硬件环境下或者配置环境下运行自如,这也是我们所说分布式容器技术。就像玩音乐的时候不能带着乐队走,只能带着唱片走一样,这也是我们整个系统中用的即插即用的设计思路。最后我们希望整个系统是轻量级的解决方法,而不是一个几百万行程序,把内存占的满满的解决方法。所以,我们还有很多设计使整个平台加上上面的软件都变得轻便可用,而且可以调试,易于维护的解决方法。所以这些不同角度的设计就成就了最后一个最佳的解决方案。它就是我们现在所打造的这个Petuum数据中心操作系统。这就像一个交响乐队,它可以用来演奏不同的音乐,可以是可以有不同的组合,大也可以,小也可以。而且可以根据指挥的需要演奏出不同的风格,一个好的操作系统应该有这样一种特征,能够实现灵活的功能。

  我们用Petuum最后还是回到了原点——当时在Facebook不太成功的经历,我们还没有把这个问题忘掉,所以我们最后还是把数据通过合作继续用了新的办法来做了一个重新的演算。这次我们有了一个突破,1亿个节点的网络,只用了5台Petuum的机器可以在37小时之间计算完成,得到一个非常有意思的社交群可视化结果。但是如果用1000台Hadoop机器,基本上需要跑400个小时,当然我们没有跑完,我们只是预期它跑400个小时,实际上可能比这个还要长。这还是一个比较成功的经历。

  这个系统处在多次发布中,我们有规律的发布开源展示,包括平台、工具库,工具库有不同的、常用的大型人工智能的软件,包括深度学习、主题模型,推荐模型等。

  这就是我讲座的一个尾声,让我解释一下登山为什么会放在这儿?我觉得它跟我从事的事业还有很多相同之处的。人工智能算法本身这个计算任务像登山,它是有明确的目标的,可以用数学描述的目标,它本身有弹性、容错性、随机性。如果你能够很好使用这些特征和机会的话,你就可以获得事半功倍的结果。人工智能领域的发展也像登山,它有各种各样的起伏,有各种各样的思路的跳跃和重新的定位,一个好的解决方法,通常对于任务目标、数学模型、计算引擎有比较全面精确掌控和实现才能达到目的。而如果你对它设置一个像类似科幻不切实际的目标,或者是一个模糊的路径、错误的定位,都会导致挫折,就会像人工智能的前几次冬天一样。从我角度,大家固然会说冬天和夏天是一个不可逆转的潮流,那我还是希望至少在我有生之年,我不希望再看到一个冬天,能够把人工智的辉煌继续下去。这就是我今天讲演的全部,但不是最后一章。

  这里有一个小小的后记:我发觉人生很有意思,你做的每一件是好像最后的结果都是有一个两面的反映,有些人会喜欢,有些人会不喜欢。比如说像人工智能,我们有很多人对它的结果很兴奋,有些人又相当恐惧的。像我登山的结果也有类似的状况。从西藏爬完山回来以后到清华大学我们面对了非常出乎意料的反应,大学官方不太赞成我们的举动,认为我们违反了规则,由于种种原因我们每个人都得到的了一个处分,我本人的考研资格都失去了。当然这也没有太大影响,索幸就出国深造去了。有时候你做成一件事以后,外界反映的确有出乎意料的一些结果,比如最近我从我的同事那儿得到了这些东西,有各种各样的人机大赛的看法,甚至包括机器人是不是要统治地球?人类会不会沦为寄生者?诸如此类,让人感到恐惧的评论。我不知道这个东西怎么理解,我还是引用我一个好朋友加上同事(目前是Facebook人工智能实验室主任) Yann Lecun的预言。他的预测是,“有些人是因为对人工智能的原理不理解而导致,有些人是为了个人名望而宣扬人工智能威胁论,有些人则是为了商业的利益推动人工智能威胁论。”所以,各位在读这些东西的时候,还是应该把这么一个背景给考虑进去,不要被这些观点去随便的误导,它们有一定的道理,但是还可以看一看其他的观点,这块可以分享一下我的观点,我认为人工智能和人类对决不是什么大的了不起的事,人类和机器对决自古就有,还在发生,这几张图大家看到,马车被火车战胜以后,固然有人惊呼,但是世界运转如故。大概在同一个时代有人发明了照相机,当时有人惊恐,照相机来了以后画家就失业了,但是现在画家还是活的好好的,甚至新的艺术形式也被创造出来了。人机大赛放在这么一个背景下,它只不过是我们在技术上的里程碑,展示了人类智慧的力量和功能,我们可以以欢迎的心态接受它。当然我们的确是对它的功能的边界有一些憧憬,但是它到底会不会强到把我们给干掉的地步,我想这也是不必担心的。如这张图展示,人工智能和自然智能或者是人类智能其实走的路是非常不一样的。人类智能定义实际上不是单一的,它是一个泛化的、比较模糊、非常难以衡量的功能,比如说某一个人会笑,某一个人会哭,谁笑的好,谁哭的好这是很主观的事情。而人工智能所集中的东西是单一的、明确的、可评测的功能,比如说下围棋、下象棋、搜索。人类智能使用的数学模型(如果有的话)未知,具有无限潜能;而人工智能使用显性,简化的数学模型,可以获得理论、实际的边界,而人类的潜能,还没有看到它的边界。在两者实现方式上你会发觉也很不一样。在硬件上人类智能用的是生物组织和器官,软件上的方式可能用到了类似皮茨-麦卡洛二元神经网络,但实际上远远更复杂;而人工智能使用的电子设备、暴力计算,搜索, 优化,随机模型的方法,它有它的优势、也有它的劣势。我个人观点只要是在有限,透明规则、特定任务下,机器超过人的水平是时间问题,绝对是会超过的,没有什么好担心的,而且是好事,因为它可以帮人类实现很多有价值的功能,成为人类的好助手,降低我们生活的成本,提高我们的效率。

  但人工智能是代替人吗?对我个人来说,这是天方夜谭。我想分享一段很喜欢的钢琴曲,表演者是一个很著名的钢琴家叫弗拉基米尔·霍洛维茨,是上个世纪最伟大的钢琴家之一。他在俄国十月革命以后就离开了俄国,离开了苏联,到的西方,大概70年以后,他90岁的时候,终于有机会回到他的故土,在莫斯科举办了一场音乐会。他弹了这么一首曲子,这首曲子的名字大家可能都知道,是舒曼创作的《童年回忆》,非常简单,连我的儿子都会弹。没有什么技术难度。所以机器人是绝对可以胜任的。但是我不知道大家在听这个音乐的时候,会不会产生一种,人弹和机器弹完全不一样的感觉,一种宁静,深沉,直达心脾,催人泪下的感动。人在很多方面,实际上跟机器是很不一样的。我们的工程能力连造一个细菌用生物学角度讲都没法造出来,更不要说去实现人的思维和头脑,所以说从技术的可能性上来讲,还有很大的距离。而且人的头脑有很多独特的功能,比如创造性思维、感情、常识、美感,这都是人工智能途径或者方法无法企及的。特别是当音乐进行某一个时刻,你可以看到,它能够直接去接触到人的心理,这个我们人工智能不知道怎么去用数学公式定义这么一个程度。

  大家在听机器人弹琴能不能被弹哭,我自己还有待观察,但这个曲子,这个表演,绝对可以达到这么一个境界,我们历史上的伟人孔子、拿破仑、贝多芬、梅纽因、托尔斯泰,巴兰钦、普列赛斯卡娅,爱因斯坦,你觉着他们会被机器代替吗?

你可能也喜欢 ...

发表评论