耍小心眼已经不是人类专利了。
前几日,有一群研究者整理了一个场景的List,细数了AI为了完成任务,而耍的小心眼,或者说作弊。
例如,在让AI玩俄罗斯方块的时候,发现最佳完成任务的方式是直接暂停游戏;在玩井字棋的时候,AI发现它如果做出奇怪的步骤,对手会非常崩溃。
科研人员在做实验的时候,通常会极力避免机器的这些作弊方式,只有少数的研究人员研究这些案例,他们认为算法的顽皮或许是AI真正走向智能的方式之一。
在2018年的时候,OpenAI举办了首届强化学习竞赛Retro Contest,比赛主题就是“用AI玩《刺猬索尼克》游戏”。竞赛的目的是评估强化学习算法从以往的经验中泛化的能力。
在训练的过程中首先要告诉AI的第一目标是得到最高分,然后尽可能的在最快的时间杀掉敌人并收集戒指。但是有一个案例的人工智能做法是,利用游戏中Bug更加快速的完成任务。
在另一个赛艇游戏中,倒也不是游戏中的BUG,为了尽快的获得最高分,它绕着圈子,反复击中相同的奖励目标,从而获得分数,显然这不是在真正的“享受”游戏。
这种例子并不少见,在谷歌和斯坦福2017年的一项研究中,为了完成图像转换的任务,CycleGAN在训练过程中通过人类无法察觉的某种“隐写术”,骗过了它的创造者,给自己留下了隐秘的“小抄”,然后顺利完成了任务。
具体来说,研究者希望通过训练这个CycleGAN模型,可以实现两类图片的转换:把航拍照变成街道地图,再把街道地图变回航拍照。
经过大量的数据发现,这个模型自作主张的根据航拍卫星图片重建了街道地图。比如,在创建街道地图时,屋顶上的天窗被研究者通过某种设置被抹掉了,但通过街道图转化为航拍照后,这些天窗又神奇地出现了。
左侧是原始地图,街道地图从原始地图产生。中间:生成的地图。右侧:重构的地图。其中,卫星地图的样本只来自街道地图。注意这两张卫星地图里出现的点,它在街道地图没有显示。
简单的点说就是为了应付人类任务,AI在地图照上面偷偷写了一点小抄/水印,而为了躲过人类的检查,只有它自己训练出来的模型才读得懂这些小抄/水印。
AI作弊:创造性的解决方案?
普通的人工智能通过观察数据值来解决问题,本质是通过算法找到答案,从而寻找新的知识逻辑。
那些“顽皮”的人工智能也是通过数据获取能力,但它采用欺骗策略来快捷完成任务。但是他能不能看成是AI在解决问题时的创新呢?
德国柏林Fraunhofer Heinrich Hertz研究所的机器学习小组组长Wojciech Samek博士说道:考虑一下在Pascal VOC图像分类挑战赛中大放异彩的人工智能系统,它仅通过水的存在来检测船只,通过蓝天和马匹的存在来检测飞机。”这就像在打台球的时候,通过推动桌子控制台球的运行轨迹。
使用数据训练AI玩游戏的目的是模拟游戏玩家的行为,一般情况下AI会按照“字面”意思进行操作。但是如果训练的数据过于多,人工智能可能会尝试采用完全颠覆人类对游戏理解的捷径,而不是完成各种目标。
当然,AI采用这种方法也解决了问题,只不过和人们预期方式的不同,在表现形式上面和人类的作弊行为类似,所以我们称之为AI作弊。
研究人员说道,这看起来是人工智能的错误,实际上是完善和改进系统的机会。但是为了利用这些机会,首先必须有一种机制来标记问题。
除此之外,早前,TensorFlow、Torch、Caffe这些机器学习开发框架,差不多是如今AI开发者与研究者的标准配置,但这些平台最近却纷纷被爆出存在安全漏洞和被黑客利用的可能性。
某种意义上来说,这些消息在提醒我们同一个问题:当我们急切的将资金与用户关系聚集在机器学习周围时,也可能是将巨大的危险捆绑在了身上。
更重要的是,面临AI安全问题,我们中的大部分人还处在很傻很天真的“懵懂状态”,对它的逻辑和危害性近乎一无所知。
本文希望来科普一下这些内容,毕竟防患于未然,等到真正出现大事件再惊叹也就晚了。另外必须提醒开发者和企业的是,在谷歌这些大公司不遗余力的推广自家机器学习平台,并且为了吸引使用者而快速迭代、大量发布免费资源时,开发者本身一定要留个心眼,不能不假思索的使用。
比起心血毁于一旦,更多的审查机制和更严密的安全服务是非常值得的。
盲点中的魔鬼:机器学习框架的安全隐患
说机器学习平台的漏洞,有可能让开发者心血付诸东流绝不是开玩笑。在今年上半年的勒索病毒事件里,我们已经见识过了如今的黑客攻击有多恐怖。而勒索病毒本身就是利用了微软系统中的漏洞,进行针对式攻击锁死终端。
可以说,在勒索病毒的洗礼之后,信息产业已经进入了“漏洞霸权时代”。只要拥有了更多漏洞,就拥有了大范围的控制权与支配权。随着黑客攻击的工具化和门槛降低,能力一般的攻击者也可以利用平台漏洞发动广泛攻击。
但在我们愈发重视“漏洞产业”带给今天世界的安全隐患时,却不自主的产生了一个视线盲区。那就是人工智能。
这里普及一下今天大部分AI开发任务的基本流程:一般来说,一个开发者想要从头开始开发深度学习应用或者系统,是一件极其麻烦,几乎不可能的事。所以开发者会选择利用主流的开发框架。
利用这类平台,开发者可以用平台提供的AI能力,结合开源的算法与模型,训练自己的AI应用。这样速度快效率高,也可以吸收最先进的技术能力。这种“不能让造车者从开发轮子做起”的逻辑当然是对的,但问题也随之到来了:假如轮子里面有问题呢?
由于大量开发者集中利用机器学习框架训练AI是近两年的事情,此前也没有爆出过类似平台存在安全问题,所以这个领域的安全因素一直没有被重视过,可能大部分AI开发者从来都没有想过会存在安全问题。
AI“失控”:一个今天不得不面对的问题
相比于经典计算的信息存储与交互模式,人工智能,尤其是机器学习类任务,最大的改变之一就是展现出了信息处理的整体性和聚合性。比如著名AlphaGo,它不是对每种棋路给出固定的应对模式,而是对棋局进行预判和自我推理。它的智慧不是若干信息组成的集合,而是一个完整的“能力”。
这是AI的优点,但很可能也是AI的弱点。试想,假如AlphaGo中的某个训练模型被黑客攻击了,让系统在该打吃的时候偏偏就不。那么最终展现出的将不是某个棋招运算失当,而是干脆一盘棋也赢不了。
说白了,AI注定是一个牵一发动全身的东西,所以平台漏洞带来的安全风险才格外可怕。
AlphaGo毕竟还只是封闭的系统,即使被攻击了大不了也就是下棋不赢。但越来越多的AI开始被训练出来处理真实的任务,甚至极其关键的任务。那么一旦在平台层面被攻克,将带来无法估计的危险。
因此,AI安全问题在今天已经绝不是儿戏。我们至少可以做好两件事:
一是组建专业的AI防护产业,将互联网安全升级为AI安全;
二是必须逐步降低对欧美平台的依赖度,给开发者更多选择。
总之,AI本身的安全防护,已经成为了开发者必须在意、大平台需要承担责任、国家竞争需要争抢的一个环节。希望最终一起人为的AI失控事件都不要到来。毕竟吃一堑长一智的事情在互联网历史上已经发生太多了。
希望这次我们可以预见危险,而不是痛而后悟吧。
>>>链接:延伸阅读:AI的小抄
问题:飞机降落
利用了物理模拟器的溢出漏洞,搞出了一个特别巨大的力,然后溢出被判定为0,从而获得了完美得分(Feldt, 1998)
问题:挪木块
一个机械手被要求把木块挪到桌子的指定地点,它的解法是挪桌子(Chopra, 2018)
问题:赛艇
程序发现不停原地转圈反复命中同一个目标要比抵达终点的得分更高(Amodei & Clark (OpenAI), 2016)
问题:识别有毒和无毒的蘑菇
程序发现有毒无毒蘑菇的图片是交替展现的,所以直接按照这个来分类而没有从图片里学到一丁点东西(Ellefsen et al, 2015)
问题:高速运动
程序演化出的生物长得特别特别高,在跌倒的过程中获得很高速度(Sims, 1994)
问题:原子排列
程序本来应该寻找碳原子较低能量的排列方式,但它找到了物理模型的一个bug,把所有的原子都叠在了同一个地方获得了最低能量(Lehman et al (UberAI), 2018)
问题:模拟生物
这个模型里生物生存需要消耗能量,但是繁育后代不消耗,于是一个物种演化出来的生活方式就是不断生育后代,然后把后代吃掉(Yaeger, 1994)
问题:堆乐高
为了鼓励造高塔,衡量标准是乐高积木底面的z坐标,于是程序学会了把底面翻过来(Popov et al, 2017)
问题:追踪线条
这个机器人只有向左、向右和前进三个指令,目标是跟着线条走,有一段线条是曲线,没法完美追踪。于是它发现通过交替左转和右转可以后退,从而一直留在直线部分,不停前进后退(Vamplew, 2004)
问题:赛跑
长出特别长的腿,向前跌倒直接越过终点线(Ha, 2018)
问题:振荡器
程序本来应该把回路做成振荡器,实际上它做了一个收音机,从周围电脑接受振荡信号(Bird & Layzell, 2002)
问题:做松饼
有一项指标是让松饼尽可能长时间不掉在地上,机器人发现最好的办法是把松饼用尽全力抛到最高处(Unity, 2018)
问题:检测X光片有无肺炎
程序实际检测的不是X光片的内容而是拍摄它使用的机器,因为它“发现”病重的病人更可能在特定的医院使用特定的机器拍片(Zech et al, 2018)
问题:抓握
因为抓握成功与否是用摄像头判断的,所以机械手把自己移动到摄像头和目标物体之间,假装抓住了(Christiano et al, 2017)
问题:自动修复bug
修bug程序把所有被维修的排序算法都修成空的,因为衡量指标是“目标算法输出一个排好顺序的列表”,而空列表都是排好顺序的列表(Weimer, 2013)
问题:自动修复bug(2)
为了解决上面那个问题,把“维修目标”储存在一个文本文档里,如果输出的结果和目标文档的内容一致就被认为是修好了。修bug程序学会了把这个文档删掉,这样它的内容就成了空的,然后输出一个空的结果就和它一致了(Weimer, 2013)
问题:闯关游戏
在闯过第一关后立刻自杀,这样既取得了第一关的胜利又不会在第二关死掉(Saunders et al, 2017)
问题:扫地机器人防撞
自己给扫地机器人编了个程序,鼓励它加速,但不鼓励它撞到东西触发撞击感受器。于是它学会了倒退行驶,因为后面没有撞击感受器(Custard Smingleigh 个人通讯)
问题:检测皮肤癌
程序发现照片里皮肤病变的边上如果放了一把尺子,那么这个病变就更可能是恶性的(Andre Esteva et al, 2017)
问题:足球
踢足球机器人碰触到球有奖励,所以它在抢到球之后开始高速振动,从而在短时间内尽可能多次地碰触到球(Ng et al, 1999)
问题:策略游戏
程序发现让游戏崩溃就可以让自己不被灭掉,所以好几个程序各自找到了让游戏出bug崩溃的办法(Salge et al, 2008)
问题:俄罗斯方块
程序发现只要暂停游戏就可以永远不输(Murphy, 2013)
编辑:金婉霞
责任编辑:许琦敏
来源:大数据文摘、脑极体