谷歌研究主管、知名人工智能专家Peter Norvig在MIT的EmTech Digital,探讨机器学习的挑战。
谷歌研究(Google Research)主管、知名人工智能专家Peter Norvig最近在出席MIT的EmTech Digital大会时,发表了一些与主流人工智能和机器学习不同的观点。他将机器学习和传统软件编程进行了比较,强调我们所设计的机器学习,在系统调试和验证上存在全新挑战。
传统软件编程使用的是基于布尔数学体系的逻辑,按照这种逻辑,可以测试确认软件是否符合其设计初衷,在过去的几十年里,人们正是利用这一逻辑构建了各种软件调试工具和方法。
相比之下,机器学习更像是一个黑盒子编程方法,计算机程序自己有数据,自己可以生成概率逻辑,和基于传统布尔数学逻辑的“true&false”测试调试方法来验证系统完成不同。
图片来源:NetworkWorld
对比传统编程,Norvig归纳总结了机器学习验证的情形:
“现在的问题是,能够扩展应用到整个人工智能行业的机器学习验证方法,仍未成型。我们已经在这方面做了很多努力,投入了时间;对于如何使之奏效,我们也有了一点眉目,但是,相比于普通软件开发和验证数十年的经验,机器学习调试明显还没有达到预期。”
如果调试机器学习如此困难,为什么还要使用它呢?尽管机器学习验证目前存在局限性,但是它在开发速度上依然具有一定优势。针对某些特定问题,比如语音识别或图像分类,复杂系统解决方案可以比传统编程方法快一倍、两倍、甚至三倍。举个例子,芯片制造商Nvidia公司工程师对一款自动驾驶汽车原型编写了100小时的训练数据程序。应用机器学习生产力对程序员来说极具吸引力,他们需要使用它,要求全新的验证方法。
事实上,调试机器学习的出发点就是要区分相关问题固有的风险和危害,以及来自于问题发解决方案的技术的风险和危害。只有后者,也就是技术解决方案内部固有的风险和危害能够被控制。
非定常性条件影响了传统编程和机器学习。所谓非定常性,就是指随着时间的过去,条件发生了变化,一开始,在相同条件下设计的系统非常有效,但慢慢地开始逐渐表现不佳。在传统编程中,当要发布一个开发新程序时,一般会先使用可验证的调试流程进行测试和验证,之后才会正式发布。
但在机器学习中,似乎遗失了这种验证,因为机器学习并不适合传统编程技术那套步进式的流程:开发、测试、最后发布。在机器学习里,会不断生成数据,然后同时再被机器学习系统不断获取,机器学习系统会进行再编程,继而导致那种步进式方法不能实行。
针对机器学习验证问题,Norvig解释了自己的想法。传统测试套件认定是基于“true”、“false”、以及“equal”这些条件判断,而机器学习的测试认定则应该是根据评估测验,比如今天的试验结果90%不错,并且和昨天测试运行的结果一致。
除了验证的问题很麻烦以外,验证机器学习系统产品所依据的事实很有可能是未知的,或者是主观性很强的。设想一下,例如我们设计一个机器学习系统来判断下图的这条裙子是金色搭配白色的,还是蓝色和黑色的,这问题连人类之间都没法达成一致。
图片来源:CBS News
Norvig解释说:“对于一些问题,我们根本不知道正确答案是什么。因此,你又怎么可能训练一个机器学习算法判断某些根本没有答案的问题呢?”在Norvig看来,让机器学习寻求正确答案,只能依靠一种无偏见的方法,比如引入“陪审团”机制。人类生成数据去训练机器学习,然而人类本身就是具有偏见的,因此即便是在这种模式下,机器学习依然会存在一定偏见。要想匹配机器学习系统是否符合它们的设计初衷,评估的方法必须要能够识别并摈除偏见。
传统软件是模块化的,每个模块的输入和输出都是独立的,因此很容易识别出哪个模块是bug。然而在机器学习中,尽管系统是利用数据进行开发的,但在系统内部,任何bug都能会被复制,最终导致“牵一发而动全身”。虽然我们可以使用一些技巧去理解机器学习内部有错误,也有再训练机器学习系统的方法,但目前还没有办法能解决其中任何一个独立问题。
在Norvig看来,解决机器学习debug问题需要一个更好的工具集,而整个工具集需要向前发展、更新。