MIT(麻省理工学院)和IBM(国际商业机器公司)研究人员搭建的框架能找到并修复使自动编程工具容易受到攻击的薄弱点。其中一个工具(图示)在程序员写代码的同时浏览并提出建议。本图中,该工具从Python的NumPy库的数千个选项中选出最适合当前情况的函数。(图片来源:Shashank Srikant)
无论一个公司的业务领域是什么,软件在从管理库存到与客户沟通中,都扮演着越来越关键的角色。因此,软件开发员的需求比以往任何时候都要大,这推动了一些花费时间的简单任务的自动化。
如Eclipse和Visual Studio一类的生产力工具会提供一小段代码,这些代码使开发人员在编程时可以轻松地投入到他们的工作中。这些自动功能由复杂的语言模型提供支持,这些语言模型在吸收了成千上万的示例后学会了读写计算机代码。但是就像其他在没有指令的情况下在大型数据集上进行训练的深度学习模型一样,为代码处理而设计的语言模型也存在固有漏洞。
“除非你非常小心,否则黑客可以通过巧妙地操纵这些模型的输入让它们预测任何东西。”麻省理工学院电气工程和计算机科学系的研究生Shashank Srikant说,“我们正努力研究和防止这样的事发生。”
在一篇新论文中,Srikant和MIT-IBM Watson AI实验室推出了一种自动方法,可以发现代码处理模型中的弱点,然后重新训练它们以使其更能抵御攻击。这是麻省理工学院的研究员Una-May O'Reilly和IBM的研究员Sijia Liu所做的更广泛努力的一部分,以利用AI来使自动化编程工具更智能、更安全。该团队将在下月的国际学习表征会议(International Conference on Learning Representations)上展示其成果。
人工智能、机器学习、深度学习 (图片来源:Wikipedia)
能够为自己编程的机器曾经让人感觉像是科幻小说。但是计算机能力指数式的增长、自然语言处理的进步,还有互联网上大量免费代码的出现让自动化成为可能,至少是在软件设计方面。
在GitHub和其他程序共享网站上,代码处理模型可以学习生成程序,就像其他语言模型可以学习写新故事或者诗歌一样。这让它们可以充当智能助手,预测软件开发员接下来会做什么,然后提供帮助。它们可能会提供适合当前任务的程序,或者生成程序摘要,以描述程序如何运作。代码处理模型还能通过训练寻找和修复错误。但是,尽管有提高生产力和软件质量的潜力,它们还可能产生研究人员正刚刚开始研究的安全风险。
Srikant和他的同事发现,仅仅通过重命名变量、插入伪造的打印输出语句,或者是将其他修饰操作加入模型要处理的程序中,就可能轻易欺骗代码处理模型。这些经过细微处理的程序能正常运行,但是会导致模型处理方式错误,返回错误的决定。
这种错误会对各种代码处理软件造成严重的影响。一个恶意程序监测模型可能会被欺骗,把一个恶意程序判断为良性。一个代码处理模型可能会被欺骗以致提供错误的或者是恶意的建议。在这两种情况下,病毒都可能逃过毫无戒心的程序员。一个类似的问题困扰着计算机视觉模型:麻省理工学院的其他研究表明,修改输入图片的几个关键的像素,就可能让模型把猪当成飞机,把乌龟当成步枪。
就像那些最棒的语言模型一样,代码处理模型也有一个关键的缺陷。它们是单词和句子之间统计关系方面的专家,但是仅仅大致了解它们的真实含义。举例来说,OpenAI的GPT-3模型写出的诗句既有意味深长的,也有荒谬不堪的,但是只有人类才能区分这一点。
深度学习——图片识别 (图片来源:Wikipedia)
代码处理模型与此并无区别。“如果它们真的能学习程序中的内在含义,那欺骗它们会十分困难,”Srikant说,“但是实际上并不是这样。目前它们很容易被欺骗。”
在本文中,研究人员提出一个框架,该框架能自动改变程序,以发现处理程序的模型中薄弱的环节。它解决了包含两个部分的优化问题:框架中的算法能分辨程序哪部分加入或替换文本会导致最大的错误,还能分辨哪种编辑对程序造成最大威胁。
研究人员表示,这个框架仅揭示了一些模型的脆弱性。在对程序做出一个简单的编辑后,他们的文本摘要模型失败率达三分之一。他们还报告说,当程序做出五处编辑后,模型失败次数超过一半。另一方面,他们说明了模型有能力从错误中学习,并在学习过程中获得对程序更深的理解。
“我们用于攻击模型并针对那些特定漏洞进行再训练的框架可能会帮助代码处理模型更好地了解程序的意图。”该研究的共同资深作者Liu说,“这是一个有待探索、令人兴奋的方向。”
在深度学习的大背景下,仍然存在着一个更大的问题:这些深度学习模型黑盒到底在学习什么?“它们会像人类一样分析代码吗?如果不是这样,我们怎样让它们做到?”O'Reilly说,“这是我们面临的巨大挑战。”
作者:Kim Martineau
翻译:王嘉钰
审校:汪茹
引进来源:麻省理工学院