Peter Norvig是享誉世界的计算机科学家和人工智能专家,目前任职于 Google 担任研究总监。他是 AAAI 和 ACM的会员,是业界内经典书籍《人工智能:一种现代方法》的作者之一。
问:Peter Norvig 究竟在谷歌做什么?
答:在谷歌总是会有新东西,这是一件很棒的事;你不能真正固守一套例行流程。每周都会有新东西,是我们对这个快节奏世界的回应;每年,我的角色都有变化。开展的新项目会随着我的工作角色而变化。向我汇报的人已经从两人变成了两百人,这意味着,有时候我对自己参与过的每一个项目都有非常清晰的技术洞察,而且有时候我有更高层次的看法,而且我必须相信我的团队能做正确的事情。在这些情况下,我的工作角色更像是一个沟通中介和媒人——试图解释公司取向何方,一个特定项目如何发挥作用,以及将项目团队介绍给合适的合作者、生产者和消费者,但是,如何实现他们的目标的细节,则由该团队自己解决。我不编写最后用在谷歌上的代码,但是,如果我有一个想法,我可以使用内部工具编写代码进行实验,看看这个想法是否值得进一步仔细研究。我还做代码审查,这既能让我看到更多该团队正在生产的代码,也是因为总得有人去做这件事。
而且总会有会议、邮件和文档的待办事项要处理。谷歌的官僚作风比我曾工作过的任何地方都少,但总有一些是不可避免的。我会花一些时间参加会议、与大学和客户进行交谈,以及参加 Quora 。
问:在你的一生中,哪些人工智能演化方式,是你未曾料到的?
答:1980 年,当我开始进入这一领域时,人工智能的意思是:一个研究生用宣言式的语言写下一些事实,然后鼓捣事实和推理机制,直到他在经过精心挑选的一些样本上取得好的结果,然后再写一篇关于它的论文。
尽管直到我博士毕业,我都接受了这一框架并在其中开展研究,但我看到了这种方法中存在的三个问题:
写下事实这个过程太慢了;
我们没办法处理例外的事实,或模糊性;
这个流程是不科学的——即使我们能让它在经过选择的样本上发挥作用,但在其它样本上,它能达到多好的表现呢?
人工智能领域整体的发展已经为这三个问题提供了答案:
我们依赖机器学习而不是研究生的鲜血、汗水和泪水;
我们使用概率推理而非布尔逻辑;
我们要求科学严谨;我们有了训练数据和测试数据的概念,而且我们也有比赛,根据标准问题比较不同系统。
1950年,阿兰·图灵写道:「我们只能看到很近的未来,但我们可以看到这里还有很多需要做的事。」自 1950 年以来,我们已经得到了很大的发展,做了很多事,但图灵的话仍然是对的。
问:你怎么看待深度学习?
答:我清楚地记得 80 年代初的那天,当时, Geoff Hinton 来到伯克利发表演讲,介绍了他的玻尔兹曼机研究。在我看来那是一个了不起的愿景——他抛弃了有关符号主义人工智能(symbolic AI)强大又有用的一切,作为回报,他得到了一种机制,该机制提供了三种让人兴奋的新事物(对我而言):就给大脑建模来说( in terms of a model of the brain),具有认知合理性;可以从经验(而不是手动编程)中学习的模型;连续而非布尔式的表征,从而规避了一些传统符号专家系统的脆性(brittleness)问题。
事实证明,那个时代的玻尔兹曼机并不能很好地按比例扩展,而其它由 Hinton、LeCun、Bengio、Olshausen、Osindero、Sutskever、Courville、吴恩达和其他人设计的架构能做到这一点。是什么造成了这种差异?因为一次一层的训练技术?ReLU 激活函数?其它更多数据的可用性?能带来更快训练的 GPU 集群?我不能肯定说是哪个,而且我也希望继续分析能让我们对此有更好的了解。不过,我可以说,在语音识别、计算机视觉物体识别、围棋和其它领域,这种差异是非常巨大的:使用深度学习时,错误率下降了,而且过去几年中,所有这些领域都已经经历了根本转变:基本上所有团队都已经选择了深度学习,就是因为它有效。
许多问题依然存在。在计算机视觉中,深度网络究竟是如何运作的?我们只瞥见了一点诱人的东西:我们可以确定一个层次上的线条识别器,然后,比如说,更高一层的眼睛和鼻子识别器,之后再是位于其上的脸识别器,最后是整个人的识别器。但在其它领域,要理解网络的工作方式就困难得多。这是不是因为我们没有正确的分析和可视化工具,还是说那种表征实际上并不一致?
当存在大量数据时,深度学习可以在很多应用上都取得良好的效果,但如果是一次性或零次性的学习呢——这种情况下,有必要将其他领域的知识转移到这个领域吗?或者说,使其他领域的知识使用当前领域?深度网络会形成哪些类型的抽象,而我们又能怎样推理这些抽象并将它们结合起来?网络可以被对抗性输入欺骗;我们该如何防御,以及它们代表着是一种根本性缺陷还是一种无关痛痒的小伎俩?
我们该如何应对一个领域中的结构?我们有时间递归网络(recurrent network)来处理时间,有结构递归网络(recursive networks)处理嵌套结构,但要说这些是否已经足够,还为时尚早。
所以,我对深度学习感到兴奋,因为许多存在已久的领域也对其感到兴奋。而且,我也有兴趣了解更多,因为还有很多仍待解决的问题,而这些问题的答案不仅能让我们更了解深度学习,还可能帮助我们理解一般意义上的学习、推理和表征。
问:谷歌要变成一家「人工智能优先(AI-first)」的公司,意味着什么?
答:「传统的」谷歌是一个信息检索公司。「现代的」谷歌,不仅以建议相关信息为基础,还有通知(informing)和助理功能(assissting)。通知,是指需要时,我们给你(你所需的)信息。比如,Google Now 告诉你赴约时间到了。助理,会帮助你采取行动——计划一次行程、预定;任何可以通过互联网实现的事情,谷歌都可以协助你去实现。使用信息搜索,查全率(recall)和精确度超过80%性就很不错了——并非每一个建议就必须完美,因为用户可以自行忽视不好的搜索结果。但是,助理功能就难得多了。你不可能使用一个预订错误率在20%的服务,即使错误率2%,你也不会使用。因此,助理功能必须精确地多,因此,也要更加智能,更能留意到使用情形。这就是我们所说的「人工智能优先」的意思。
问:未来十年,对于那些没有学过人工智能或者机器学习的软件工程师来说,还有没有他们的用武之地?还是说,每个人都必须学习这些内容?
答:机器学习将成为(可能已经成为)软件工程重要的一部分,因此,每个人都必须了解它适合用在哪里。但是,比如,数据库管理或者用户界面设计,并不需要每一位工程师都擅长机器学习——和其他机器学习专家一起工作,这种方式也是可以接受的。但是,对机器学习了解越多,你就越容易搭建出解决方案。
我也认为,对于机器学习专家和软件工程师来说,一起为机器学习系统的软件开发找到最好的实践,这很重要。目前,我们有一个软件测试制度(a software testing regime),你可以调用诸如assertTrue 或 assertEquals 这样的办法来定义单元测试。我们也需要新的测试过程,包括运行试验,分析结果,比较今天和过去的结果,找到趋势,判定这种趋势是不是一个随机变化或数据的非平稳性(non-stationarity of the data)等等。对于软件工程师和机器学习人员来说,这是一片伟大的研究领域,可以一起工作,创造新的、更好的东西。
问:你是如何开始自己职业生涯的?
答:我很幸运,进入了一个高中(Newton,Mass),在这个高中,我学习了计算机编程和语言学。这些课程让我萌生了将这些东西放在一起的兴趣,不过,在高中,我还做不到这些,我觉得可以留给大学,后来,我在大学申请主修数学。当时,我所在的大学没有正规的计算机科学主修课目,我就开始学习数学,而且很快发现我不善于证明(proof),更擅长编程中的探究性思维(exploratory thinking )。
大学毕业后,我当了两年程序猿,但仍继续思考那些想法,后来去读研究生,继续研究它们(在大学呆了四年,我才厌倦大学,不过,工作两年,我就厌恶工作了,因此,那时我想,或许我更喜欢学校)。研究生生涯让我准备好了迎接学术生涯,这很棒,但是,我又开始对现在所谓的「大数据」(那时还没有这个名字)萌生兴趣,我意识到,在产业领域工作更容易搞到我所需要的数据,因此,我放弃了大学职位。每走一步,我都感觉自己很幸运,可以和牛人共事并接受新的挑战。
问:谷歌「没有更好的算法,只有更多的数据」,这是真的吗?
答:我引述过 Michele Banko 和 Eric Brill 的一篇论文,当时他们在微软研究院,论文调查了用于词义消歧的算法,结果显示,改善算法的,不是从一个算法转到另一个算法,而是增加训练数据量。我说过,有些问题类似这种情况,有些并非如此。你可以将这篇论文叫做「大数据」的胜利,但是,请注意,在这个领域中,仅需十亿个语词组成的训练集,算法性能表现就会像渐近线那样渐进——而这个训练集大小,正好是在手提电脑和计算机的容量范围内,而不是数据中心的规模程度。因此,如果你碰巧没有一个可以利用的数据中心,别担心,你仍然比上一代人强,你的方法的计算能力更强,也拥有更多的数据,而且还有很多可加利用的新发现。
因此,的确如此,有很多适合你的任务的高质量的数据,会有帮助。但是,真正困难的是深入研究如何搭建新型学习系统,还有困难的工程问题:如何让系统在产品中运行良好。那才是绝大多数机器学习成功背后的驱动力。正如 Pat Winson 说过的,「人工智能就像提子干面包上的提子干,」人工智能是让产品与众不同、让消费者兴奋不已的部分,但是,提子干面包的绝大部分还是面包,而且,绝大多数人工智能软件,就是好的旧式软件工程以及产品研发。
问:深度学习大获成功之后,符号主义人工智能(symbolic AI)的方法仍有其价值吗?
答:答案是肯定的。我们已经围绕符号人工智能开发出了许多强有力的机制:逻辑推理、约束满足(constraint satisfaction)、规划(planning)、自然语言处理、甚至是概率推断。使用这些新的算法,我们解决问题的速度比原来提高了几个数量级。如果现在就放弃未免为时过早。我认为,未来比较有趣的研究领域是回到这些方法本身,观察当非原子符号取代原子符号后会发生什么,例如, word2vec 等机制所使用的嵌入词向量(word embedding)方法。举个例子,假设以下逻辑「事实」:
人能讲话
不是人的生物不能讲话
看起来像人的动画角色能讲话
鱼能游泳
鱼不是人,而是动物
尼莫(Nemo)是一个像人的动画角色
尼莫是一条鱼
问题:
尼莫会讲话吗?
尼莫会游泳吗?
在这种情况下,逻辑在表达和推理上存在两个很大的问题。第一,这些事实是有例外情况的,但逻辑无法枚举所有例外,但也无法告诉你这些事实是不严密的。第二,当事实自相矛盾的时候,原有的逻辑将无法维持,比如,在这个例子中,你会发现尼莫既可以会讲话也可以不会讲话。或许,我们能够使用嵌入词向量的方法来解决这个问题,或许我们还需要嵌入演绎推理?不学习为「若有 A 则 B,给定 A,那么B(If A and A implies B, then B)」设立的抽象规则,能否学会什么时候适合使用这条规则,什么时候不适合?我认为,这是一个非常好的研究方向。
另一个要点:很多符号人工智能方法其实就是很好的计算机科学算法而已。例如,搜索,无论 A* 算法 还是蚁群优化算法或其他什么算法,一直是非常关键的算法,将会一直非常有用。甚至是之前基于深度学习的 AlphaGo ,也包含一个搜索组件。
问:为什么 Common Lisp 没有解决一切?哪里出错了?
答:我认为,事实上 Common Lisp 解决了许多问题。如果回到 1981 年,Lisp 是非常与众不同的,因为它拥有许多 C 语言使用者所不熟悉的特点:
垃圾回收
丰富的对象组类型和功能
拥有多重继承性和泛型函数的强大对象系统
强大的异常处理机制
用于定义测试用例的子语言(好吧,这不是自带的,但我认为很有必要安装一个)
互动型的读取—求值—输出循环
灵活的、渐进式的开发过程
对于运行时对象和函数的内省
一个能够让你定义领域特定语言的宏系统
现在,除了宏以外的大部分特性,都已经被广泛应用到了其它语言中。所以,这些 Lisp 所创造的概念是十分有价值的,但是, Common Lisp 的具体实现方法却并不是这么一回事——这可能是因为作为一个十分古老的语言,CL 有许多奇怪的遗留问题;也许有些人就是十分讨厌括号。
至于宏,我自然也希望它们能够继续占有一席之地,但问题是,用户在使用宏的同时也是在改变这个语言。许多开发团队,特别是大型开发团队,更愿意选择比较稳定的语言。我认为,最好使用指南来定义不同宏的最佳应用方式来解决这个问题,而不是干脆全扔掉不要(或者像 C 语言一样,只保留数量极其有限的宏)。
问:如何训练自己从软件工程领域转向人工智能领域?
答:不要把它想成是一个转变——把它想成一个附加的技能就好了。人工智能领域的主要部分就是构建系统,而你已经在这么做了。不论软件开发还是人工智能,处理复杂性,选择正确的抽象化表达,设计程序,实现和测试循环等等,都是十分必要的环节。一个流传很久的说法是,当一项人工智能技术成功后,它就不再被称作人工智能,而仅仅是一种软件罢了。人工智能领域的人总是说,这种观点让他们永远无法成功,但这恰恰说明,你要做的仅仅是在已知的知识上加入新的概念和技术而已。
问:在 NASA 工作的经历与在谷歌的经历,有什么不同?有何文化上的差异?
答:NASA 和谷歌有许多共同点:他们都是一群对自己工作充满投入热情的人们,他们都在各自领域最前沿进行创造。因此,某个特定项目的文化,经常是相似的。
但是,也有一些不同。NASA 的 Gene Kranz 有一句名言:「失败不在选项里。」NASA 处理的往往是几亿美元的大项目,一个小失误就能够让一切付诸东流,所以,人们的态度总是极端地谨慎。而在谷歌,人们相信的是 Adam Savage 的观点(Jeff Dean也曾这么说过):「失败总是会发生的。」谷歌能够接受一台电脑会崩溃 ,并设计网络系统进行修复。有时,系统会在用户发现问题之前就已经将其解决,有时问题会在短时间内被修复,然后用户们会收到开发团队的道歉信。而 NASA 很少会这么做。
部分由于不同的失败风险,部分由于航天硬件的巨大成本,部分由于政府企业与私有企业的不同,相对而言,谷歌更容易开发并发展新的项目。
问:我是名研究生,上过人工智能课程,这门课使用的参考书是 AIMA(Artificial Intelligence: A Modern Approach)。 我可以为人工智能领域的编程项目做些什么呢?
答:这个问题正逢其时:我正在为下一版的 AIMA 写 code。在 https://github.com/aimacode,你可以找到 Java, Python, 和 Javascript 方面的子项目;我们也一直在寻找好的投稿者。除了提供书中所有算法的实现机制,我们也希望提供培训教材和练习,github 上也有很多其他人工智能项目;绝大多数都希望有一个有用可靠的投稿者。
问:在精通掌握某一门课程上,像可汗学院、Udacity 这样的在线资源会不会减少人们花费的时间,而不是常说的花费「10 年」?
答:精通可能需要 10 年,或者说是 10,000 小时。而且花费的时间肯定会因任务、个人、训练方法不同。真正的精通不是那么容易。像可汗学院、Udancity 这样提供一项训练技术让你一直专研这个主题直到掌握它。相比于传统的学校,即使测试时得到了「C」级成绩,你也不会返回来学习直到掌握它,你会继续下个主题,因为学校每个人都是这样。
在线资源也不是万能药,因为想要精通需要努力,努力又需要积极性。而积极性会因为人际关系(比如同学关系)得到增强,这种人际关系在在线学习中难以存在。所以这个方向是正确的,但我们需要在社群组织、积极性方面做更多努力,在个人需求的定制训练上我们要做更多努力,在实践的审慎程度和效率上做更多努力。我认为网络在通往精通的道路上不会减少过多时间,但却为更多学习达到精通程度增加了机会。
问:产业中的机器学习研究与学术界有什么不同?
答:我想在哪里做研究并不非常重要,我在教育、公司、政府类机构都做过,并从每个地方都学到了很多东西。
好的研究环境应当有好的同事和有趣的问题值得你投入时间,这可能会是产业内、学术界、政府、非盈利、或者志愿开源机构。在一些领域,产业中可能会有更多资源(人力、计算、数据),但如今,有开放可用的数据,一个小团队、一台笔记本、或者一些便宜的 GPU 集群,租用或开发一个云计算服务,就可以做很多事。
问:Peter Norvig 计划在 Udacity 上做更多课程吗?
答:我希望我能做更多的在线课程材料;可能是一整套课程,可能只是一部分。现在,Stuart Russell 和我正在努力完成我们的人工智能教科书的第四版本,它会加入线上特色。如果有时间,我想要在 Udacity 或另一家提供商上做更多事,但现在线上确实已经有很多非常好的材料了。
问:Peter Norvig 如何平衡开发新特性和维持旧特性?
答:尽最大的努力做到最好,并且注意事态变化,这样你才能提升。
我发现的总是出现的一件事是:团队里的一位新雇员说:「我们为什么不做 X」,而一位老职员回答,「我们三年前试过 X,但不管用。」于是就出现了一个难题:你是会接受老员工的思想?还是视情况变化,觉得是时候重新回到 X?可能我们有了新数据、新技术、或者这个新员工可能有不同的方法、或者尽管 X 之前不管用但时代变化了 X 可以起作用了。我无法告诉你如何回答这类问题;你需要权衡所有的条件,并与其他类似的问题做下对比。
问:如果让你重新教授「计算机程序设计」(Udacity),你会做哪些改变?
答:我想这门课程进行的挺好,得到的反馈(数量与质量)大部分也很好。我想要增加更多的编程和技术样例;我也想修改存在的一些错误(大部分是由于进度太快而没有时间测试每一件事);还有就是希望系统能更具互动性:学生能得到更多反馈,而不只是告知学生「你的程序是错误的」,接下来就是能依照学生的进度给学生反馈;我认为正则表达和语言这部分对一些学生而言节奏太快;我想要增加一些材料,提高学生学习速度,并且提供更多的、带有新想法的练习。
问:会有一种新的人工智能出现吗?如研究某一领域事物的变革速度的现代方法。
答:是的,现在正在做这方面的工作......但至少一年内它不会出现。