市场上绝大部分的软件里都或多或少有 Bug,但是这里面 99% 的 bug 都不会给你的人身造成危险。然而,随着自动驾驶汽车时代即将到来,驱动它们的人工智能软件一旦因为 Bug 而做出一个错误的决定,那么其后果很有可能就是致命的。因此,美国哥伦比亚大学( )和理海大学( )的研究人员开发出了一款可以系统地找出深度学习算法 Bug 的方法,希望以此大幅度提高这种驱动自动驾驶汽车的技术的安全性。
这个名叫 的技术是由理海大学计算机科学系的曹寅志副教授主导开发的。它可以使用三个以上的神经网络去相互参照,相互检查。通过 ,研究人员在两个目标之间实现了优化的平衡:最大化神经网络中神经元的激发,以及在不同的神经网络之间产生最多有冲突的判断。在默认大多数神经网络会做出正确的决定的这个前提下, 可以自动按照当前场景下“多数派”给出的判断,来重新训练提出异议的“少数派”神经网络。
对于这个手段,曹教授表示说:“这是一种用差别来测试的框架。它可以在自动驾驶系统和其他类似的神经网络系统中找出上千个错误。”
介于他们出色的研究成果,曹教授的团队在上周末于上海举行的第 26 届操作系统原理大会 (2017 on ,简称 SOSP) 上赢得了最佳论文奖。而他们的获奖也仿佛是一个信号,表示人工智能界已经开始逐渐意识到了 这种能够调试人工智能系统的工具的重要性。
通常,深度学习算法在处理过海量的由人类标记过的数据后,就能够“学会”数据所指定的任务。而这正是现代面部识别技术可以以 90% 多的准确度识别照片中的人脸,或者机器翻译技术可以正确的做出中英翻译背后的原因。不过,在这种应用中,偶尔出现个识别错误的脸,或者翻译错误的词也无所谓。
图 | 这张来自 的一个例子向我们显示,在稍微暗一点的右图中,英伟达的 DAVE-2 自动驾驶汽车软件会让汽车撞上护栏。
但是,当这种软件被用来驱动一辆重达数吨的汽车高速飞驰时,偶尔出错的后果就会严重无数倍了。自动驾驶汽车 AI 的一个小小的错误,很有可能就是汽车撞墙、撞车甚至撞人的结局。政府管理机关肯定会要求自动驾驶汽车技术达到一定的安全级别,但是随机测试数据集中的数据很难概括所有现实中都可能遇到的情况。这意味着,那些被漏下的“极罕见”情况就可能导致 AI 软件做出致命的判断。
“I think this push and AI kind of fits in with AI”,says Suman Jana, an of at in New York City.”, and all have to be a lot in these can start with human or start on roads.”
“我认为,这个往安全可靠的人工智能发展的趋势与‘可解释的’人工智能系统是相契合的”,哥伦比亚大学计算机科学系副教授 Suman Jana 说道,“在机器学习系统可以与人类一起工作,或者在马路上乱跑之前,它们的透明度、解释性以及可靠性都需要实现大幅度的提高。”
曹教授和 Jana 教授都有软件安全和调试背景。对他们来说,就算一个软件的 99% 都没有问题,如果黑客能够利用它那唯一的一个 Bug,这个系统就是有弱点的。因此,与许多认为“错误就是训练过程的一部分”的机器学习研究人员相比他们要严谨的多。而这或许也是他们能够开发出全面调试人工智能系统的原因。
在 出现之前,调试自动驾驶汽车中的神经网络是个十分繁杂的过程,需要依赖人工调试和随机测试。比如有一种随机测试手段就需要研究人员手动创造所有的测试图像,然后把它们一张张输入到神经网络里,直到引发一个错误的判断。还有一种名叫“对抗测试”的手段,可以利用软件对图像进行细微的改变,自动创造出一系列稍微不同的测试图像,直到有一张图像引发错误的判断。
也是自动生成测试图像,但是其目的却是做出能让三个以上的神经网络做出有冲突的判断。比如 就会调整一张图像的曝光度,让两个神经网络成功的识别出其中的汽车,但是另外一个神经网络把它识别为脸。
的另一个目标就是在测试中激发更多神经元和神经通道,最大化对神经元的覆盖。曹教授表示,这种对神经元的覆盖是借鉴软件测试中“代码覆盖率”(Code )。 可以激发神经网络中 100% 的神经元,比目前所使用的随机和对抗性测试方式平均多出 30%。
在对 15 个最先进的神经网络用 5 个不同的公开数据及进行测试后, 在这些深度学习系统中发现了数千个前所未见的错误。这些数据集的应用场景包括自动驾驶 AI,对线上图片进行自动识别,以及对伪装成正常软件的恶意软件进行自动辨别。
Jana 教授表示,虽然 无法保证能把所有的 Bug 都找出来,但是它测试大型神经网络的成绩远超目前现有的手段。而斯坦福大学则有一队研究人员开发出了一种可以保证一小组神经元没有任何错误的手段。这两种手段都不全面,却都代表了通往无 Bug 的人工智能系统的未来。