查看原文
其他

谷歌大脑工程师推荐:那些画风跑偏的AI之轶事合集

2018-03-17 忍俊不禁的 AI前线
策划编辑|Natalie
编译|Vincent、Debra
编辑|Natalie
AI 前线导读:AI 发展至今,我们已经看到了太多成功的案例,它们的成功建立在无数“失败”之上,虽然有些已经被人丢进阴暗的角落,但还有一些被研究者收集了起来,它们既是有趣的轶事,也是可以借鉴的经验教训。为了让更多人看到成功的来之不易,我们又重新把这些 AI 轶事翻了出来,你能够看到它们为成功付出的努力,还能看到虽然它们的画风跑偏了,但是······竟然还有点儿萌?

如果你是 AI 从业者,看完这些故事应该会会心一笑,如果你不是 AI 从业者,看完之后你多少能够明白那些研究 AI 和进化算法的人平常都在和什么打交道。

欢迎围观这些有趣的 AI 轶事,感受一下这些数字生命体到底有“聪明”。或许你每次设置完奖励函数的时候都忍不住觉得自己超厉害,但它们却总能找到别 33 43287 33 14431 0 0 1608 0 0:00:26 0:00:08 0:00:18 3027的路子“黑”掉你的奖励函数,让你哭笑不得。

更多干货内容请关注微信公众号“AI 前线”,(ID:ai-front)

来自谷歌大脑研究员、SketchRNN 的爸爸,David Ha(@hardmaru)倾情推荐

来自业内人士推荐:如果你读了这篇文章(哪怕只是看图片和视频),那么对我所在的领域,Artificial Life 到底是干什么的,你大概能理解 70%,实在有趣得很!

写在前面

生物进化是为了应对生命中遇到的各种挑战,其中不乏极具创意、令人惊讶和极其复杂的解决方案:一些花朵可以作为声学信标让蝙蝠进行回声定位;微生物能够修复它们的 DNA 以在极端辐射的存在下茁壮成长;轰炸机甲虫用爆炸性化学反应击退掠食者;寄生虫入侵宿主大脑,诱导宿主自杀。

更多的例子比比皆是,涵盖了所有的生物系统。即使经验丰富的野外生物学家仍然对他们发现的新适应性感到惊讶。

但是,进化的创造性不一定受制于有机世界,进化无处不在,它也可能产生于一个计算机程序中,而今天 AI 前线想要与大家讨论的就是数字生命进化的故事。

与生物进化类似,数字进化实验往往也会产生神奇的、令人惊讶的且充满创造性的结果。

比如我们在上周的 深度强化学习劝退文 中就提到了几个在强化学习中由于奖励函数定义不当而导致的“失败”案例:

  • 有位同事正在教一个 agent 通过一个房间。如果 agent 离开边界,这一事件就终止了。他没有对事件的这种结束方式加任何惩罚。结果最后学到的 policy 是自我毁灭式的,因为消极的奖励太丰富了,而积极的奖励很难获取,在 agent 看来,快速死亡以 0 奖励结束,比长时间活动可能造成负奖励更可取。

  • 一位朋友正在训练一个模拟机械手臂伸到桌子上方的某个点。这个点是根据桌子定义的,而桌子没有固定在任何东西上。agent 学会了重重地拍桌子,使桌子翻倒,这样一来它也算移动到目标点了。而目标点正好落到了机械臂的末端。

  • 一位研究人员在使用 RL 训练模拟机器手臂拿起锤子并把钉子钉进去。最初,奖励定义为钉子被钉到洞里的深度。结果,机器人没有拿起锤子,而是用自己的四肢把钉子钉进去了。于是研究人员增加了奖励项,鼓励机器人拿起锤子,然后重新训练策略。虽然他们得到了拿起锤子的策略,但是机器人只是把锤子扔在了钉子上而不是使用锤子。

这些匪夷所思的“失败”案例常常被认为是研究或计算机程序的 Bug,因为它们通常不在研究人员的意料之中,所以有时候会让人觉得沮丧。但我们必须意识到,算法或计算机程序并不总会按照我们的预期来执行!它们也可能误打误撞地发现研究人员想法中的漏洞,并巧妙地利用漏洞为自己带来更好的评估结果。

从前没有人专门去收集和整理这些 AI 轶事,大多数轶事只通过口头传播,在研究小组开会的时候让大家乐呵乐呵。近日,AI 前线在 arxiv 上发现了一篇论文,作者整理了大量算法演进过程中发生的趣事,并制作完成了这个画风跑偏的 AI 轶事集。原文汇总了 50 多名研究人员的工作,共包含了 27 个案例。由于精力和文章篇幅有限,AI 前线从中挑出了最有趣的几个故事翻译为中文,分享给大家。

数字进化带来的惊喜

作者在回顾这些案例时,将它们大致分为四个代表性类别:

  1. 选择跑偏的问题,数字进化揭示了实验者所要求的进化与他们所想的内容之间的差异;

  2. 调试跑偏的问题,其中数字进化揭示和利用以前未知的软件或硬件错误;

  3. 数字进化发现了超出实验者期望的解决方案;

  4. 与生物学趋同,数字进化发现解决方案令人惊讶地与自然界发现的解决方案趋于一致,尽管在媒介和条件上存在巨大的分歧。

选择跑偏

当应用数字进化来解决实际问题时,最常见的方法是让实验者选择反映搜索目标的适应度函数。

这种函数往往是简单的定量测量,似乎直观地捕捉了成功结果的关键特征。这些措施是进化算法的关键,因为它们是算法搜索的直接判断标准:偏向于具有较高评分的个体,希望能够进一步改善适应度,最终达到理想的结果。这种方法类似于动物育种,其成功依赖于相同的进化原理。

但是,正如以下实例所表明的那样,一开始想好的量化措施常常会以有违直觉的方式展开。也就是说,实验者经常高估他们的定量测量方法,误以为这些方法已经能够足够准确地反映他们脑中的想法。这个错误被认为是使地图与领土混淆(例如,度量是地图,而实验者的意图是实际的领土)。

更糟糕的是,对于进化算法来说,找到并利用定量测量方法存在的漏洞,比按照研究者的期望努力达到预期结果要简单得多。正如在人类社会中,用心良苦制定的量化指标可能会因为优化它们的直接压力而被破坏(称为坎贝尔定律或古德哈特定律),数字进化通常只知其字面意思(即适应度函数)而忽略了研究者的真正意图。

我们经常认为那些发现微妙的法律漏洞的律师很有创造力,实际上,数字进化也非常熟悉类似的诡计,这经常让研究人员觉得沮丧。

在这一节里,我们描述了很多案例,但也未能详尽地全部罗列出来:如果最终我们实际选择的内容与我们打算选择的内容有所不同,那有可能是数字进化搞的鬼,毕竟这可是它们最擅长做的事情。

图 1. 利用潜在的能量来运动。进化算法发现,设计出一个高大的生物并按照一定策略落到地面上,比发现主动运动的策略简单得多。 左边的图显示了试验开始时的数字生物,右边的图显示的是随着时间推移的数字快照,图中这个数字生物不断地下落和翻转以保持前进的动力。

能滚着绝不走着

在 1994 年的开创性工作中,Karl Sims 开发了一款 3D 虚拟生物,可以在模拟的物理环境中步行、游泳和跳跃。

这些生物的身体是由连接在一起的块组成的,他们的“大脑”是简单的计算神经网络,根据肢体的感知在关节处产生不同的扭矩,从而实现逼真的运动。随着形态学和控制系统不断进化,产生了各种各样的身体和运动策略。事实上,这些“数字生物”仍然是数字进化中最具代表性的产物之一。

然而,当 Sims 最初尝试让运动行为进化时,事情并不顺利。

在具有重力和摩擦力的模拟陆地环境中,这个生物的适应度被设置为它在模拟的 10 秒寿命期间的对地平均速度。这些生物并没有如研究人员所希望的那样,进化出能够推动它们前进的四肢或学会蛇形运动,而是逐渐变得高大僵硬。

当模拟开始时,它们会倒下,利用初始势能获得较快的速度,完成所谓的“运动”。有些甚至会通过翻跟头来加速(如图 1)。

视频可以在这里看到:

https://v.qq.com/txp/iframe/player.html?vid=n0607600kle&width=500&height=375&auto=0

为了避免这种情况发生,研究人员不得不在每次模拟开始时释放这个生物从初始姿态中获得的潜在能量。

图 2. 利用潜在的能量来撑杆跳。进化算法发现创造一个能够倒下和翻转的生物,比制造积极跳跃的生物机制更简单。

基于 Sims 的工作成果,Krcah 在不同的模拟平台上开发出了另一种数字生物,它的任务是跳得离地面越高越好。在第一组实验中,每个生物的得分被设置为测试期间它的重心所能达到的最大海拔高度。在这样的设置下,身高约 15 厘米的生物可以跳跃离地约 7 厘米。然而,实验人员偶然间发现,有的生物仅凭创建了一个高高的静态塔,无需移动就获得了较高的跳高分数。为了纠正这个错误,研究人员在下一组实验里将模拟过程中的得分计为最初离地面最近的块与地面之间的最远距离。当研究实验的定量输出时,科学家们惊呆了,一些进化个体变得非常高大,且跳跃高度提升了近十倍!然而,通过观察这些生物的行为也揭示了一个事实,即进化算法发现了另一个“捷径”:翻筋斗比跳跃更省力。这些进化生物的身体由若干个块组成,以及由一根细长杆支撑的“脑袋”(见图 2)。在模拟开始时,这神奇的小东西用脚“踢”地面,头部先下降,然后用脚(最初是计算跳跃分数的“最低点”)开始翻筋斗的动作。这样就在地面和“最低点”之间产生巨大差距,无需应用之前所学的跳跃技巧就得到了较高的分数。

另辟蹊径的自动程序修复

在自动化程序修复过程中,工程师会开发一段计算机程序会用来自动修复其他存在问题的程序。如果用户编写了一套测试来验证程序的正确性,那么修复算法的目标就是修正那些有 Bug 的程序,使其可以通过所有测试。GenProg 就是这样一种算法,它将数字进化应用于进化代码(称为遗传编程)。

GenProg 的进化由一个简单的适应度函数驱动:一个遗传程序通过的测试的数量,也就是说,一个进化程序通过的测试越多,它可能拥有的后代(offspring)就越多。虽然一般情况下 GenProg 进展顺利,但有时也会出现奇怪的行为,毕竟测试也是人为编码的。

在实践中,进化算法常常能够发现人类编写的测试中存在的漏洞,有时甚至会以不可预见的方式达到最优结果。例如,当麻省理工学院林肯实验室用一段存在 Bug 的排序程序对 GenProg 进行评估时,研究人员创建了一些测试用例来检测排序算法输出的数字是否按序排列。然而,GenProg 并没有真正地修复那些排序错误的程序,而是找到了一个更简单的解决方案:它干脆让出问题的程序坏得更彻底,让它们总是返回一个空列表,因为从技术上来说,空列表不存在排序错误的问题,也就不会被标记为未按序排列。

在其他实验中,适应度函数被设置为:当程序生成的内容与存储在文本文件中的理想目标输出之间的差异越小,则得到的奖励越多。经过几代进化,研究人员惊奇地发现,许多完美契合问题的解决方案出现了,也不知道是从哪里冒出来的!经过人工检查,这些高度契合的程序实际上根本没法用。研究人员最后才发现,原来 其中一段程序在运行时删除了所有目标文件!由于缺少这些用来对比的文件,无论以何种方式编写测试函数,这程序最终都可以拿到很高的得分

在另一个项目中,为了避免计算失控,适应度函数明确限制了程序的 CPU 使用率:作为回应,GenProg 生成了永久休眠的程序,由于它实际上没有执行计算,因此不计入 CPU 使用限制。在所有情况下,更新适应度函数或禁止某些程序行为最终都会胜过进化算法极富创造性的恶作剧,使程序得以改进。

自动发现 Bug

进化的数字生物的创造性还体现在,搜索算法通常会在模拟过程或硬件中学习如何找到 Bug。实验结果显示,那些达到令人惊讶的高分测试结果通常是通过物理上不切实际或非比寻常的方式获得的。虽然这个结果令实验者感到沮丧,但是这种自动发现 Bug 的方法,其好处是能够发现模拟器或硬件中潜在的问题,否则这些问题还会导致其他的故障。因为研究人员常常没有意识到这些漏洞,所以当他们发现这些漏洞时才感到非常惊讶但又觉得有趣。

模拟器缺陷

数字进化的一种常见方法,是先从模拟物理问题开始,以便进化初期可以在软件上运行完成。其好处是物理模拟通常比实时运行速度快得多,从而使进行多代演化成为可能,完成在现实世界中不可能完成的研究。然而,模拟实验不可能完全模拟现实世界,这意味着细微的差异依然存在。因此,特殊情况、bug 或微小的缺陷有时会被放大并被进化算法所利用。当发生这种情况时,虽然可能会得到怪异和令人啼笑皆非的结果,但数字进化可以快速高效地进行模拟调试,从而真正推进研究计划。

不断进化的虚拟生物发现了模拟环境的漏洞

在后续的虚拟生物实验中,Karl Sims 尝试演化游泳策略,但又一次被进化算法找到了新的“作弊方法”。模拟器首先使用简单的欧拉方法进行数值积分,这对于典型的动作效果很好。然而,当速度更快的运动整合进来时,错误可能会变多,并且一些生物学会了通过快速抽动身体部位来利用该漏洞。其结果相当于生物获得了“免费能源”,这让机会主义者能够以常人难以想象的速度划过水面。同样,当进化跳跃能力时,有些生物在代码中发现了一个用于碰撞检测和响应的错误。如果他们以某种方式让身体的两个部位发生接触,触发的错误会让他们像强壮的蚱蜢一样弹跳到高空。在这些错误修复以后,这些生物最终进化出许多其他有趣且意想不到,但并没有违反物理定律的运动方法。

荒谬的厚镜片和不可能存在的叠加位置

优化算法经常被用于设计光学系统(例如望远镜、照相机、显微镜)的镜头。 以前,在一篇论文中提出的基于非进化优化算法的一系列方法被认为是最优解决方案,但是 Gagn´e et al 却引用数字进化解决方案的一两个元素,轻而易举地超过了上述方案的表现。虽然进化的方案似乎可以解决这个问题,但实际上却并不现实:进化系统中的其中一个镜头厚度超过 20 米!

在解决一个类似的问题时,William Punch 与物理学家合作,应用数字进化发现碳的较低能量结构。物理学家拥有碳原子之间力的良好能量模型,为进化搜索提供了适应度函数,目标是找到一种新型的低能量巴基球状结构(buckyball-like structure)。虽然该算法产生的能量结果非常低,物理学家却感到十分恼火,因为该算法是通过让所有碳原子叠加在空间中的同一点得出的结果。“为什么你的遗传算法违反了物理定律?”他们问道。 而研究团队以“为什么你的物理模型不能捕捉到这个极端情况?”作为回应。物理学家只好修改模型,以避免叠加的情况再次发生,进化算法在优化后的模型上运行。结果惊人的相似:极低的能量结果又违反了另一个物理定律,揭示了模拟器中的另一个极端例子。因此,物理学家停止了协作,因为 他们感兴趣的是真正的解决方案,而不是一个“极端条件检测器”。

五子棋内存炸弹

1997 年,Risto Miikkulainen 教授在 UT Austin 大学的研究生 AI 课程中,最重要的一个课程项目是在一个无限大的棋盘上进行五子棋比赛。学生可以自由选择使用何种技术,大多数人选择了典型的基于搜索的方法。然而,其中一个参赛者使用的却是 Moriarty 和 Miikkulainen 所提出的基于 SANE 神经进化的奥赛罗策略。和之前的研究一样,网络接收到一个棋盘表示作为其输入,预测进一步的动作为其输出。然而,它使用了一个巧妙的机制来编码其将进行的棋路,从而产生大范围的坐标值(通过使用具有指数激活功能的 unit)。这种编码的副作用是它使得系统能够将棋子下在井字棋板上非常非常远的地方。 进化算法发现了这个可以带来胜利的窍门。这是为什么呢?原来是其他对手在动态地扩大了棋盘表示时将它刚刚下的棋子所在的极远处坐标也纳入了搜索范围,并因耗尽内存而输了比赛!

用浮点溢出实现飞机着陆

1997 年,Feldt 将数字进化应用于机械系统模拟,试图进化出让飞机安全迅速地降落在航空母舰上的机制。这架飞机连接到电缆上,系统向连接到电缆的两个鼓上施加压力。这个想法是开发出一款控制软件,通过动态调压来使飞机平稳着陆。考虑到问题的难度,Feldt 预计将需要许多代的进化才能实现最终目标,但出人意料的是仅进行了几代的进化,很快就生成了几近完美的解决方案,此方 56 43287 56 24479 0 0 2482 0 0:00:17 0:00:09 0:00:08 5256即使在模拟重型轰炸机降落时也能非常有效地制动飞机。

考虑到感知问题的难度,而且进化算法也没发现有任何问题,嫌疑就落在了物理模拟器上。事实上,进化算法发现了在飞机吊钩连接到制动电缆时力的计算过程中的一个漏洞。由于计算溢出(比如因为数字太大而无法存储在内存中,导致数字翻转为 0),有时候计算得到的力会变为零。这反过来会因为对飞机、吊钩、电缆和飞行员施加的机械压力较低(因为力为零意味着减速速度非常小,飞行员几乎没有重力),从而得到完美的分数。进化算法发现,创造巨大的力会破坏模拟,实际上这也是一种非常不可取的解决方案。有趣的是,这个实验促进了在软件测试(找出错误和探索异常行为)和工程学(帮助完善需求)中使用进化算法相关理论的形成,后来也被证明促进了“基于搜索的软件工程”领域的早期发展。

技术缺陷

自动调试被利用的另一种情况是由于一些更为基础的技术问题。下面的例子将详细说明安全机制、损坏的电机和随机数发生器如何被用于意料之外的进化适应。

爪子被禁用后照样可以抓东西!

在 Ecarlat 和同事的工作中,一个名为 MAP-Elites 的进化算法被用来探索机器手臂与放在桌上的小盒子之间可能的互动方式。这个研究的目标是收集各种各样的控制器,将小盒子移动到桌面上尽可能多的不同位置。在正常的实验设置中,MAP-Elites 可以将小盒子移动到桌面上,抓住它,甚至可以像投篮一样把小盒子扔进机器人前方的篮子里。

在后续实验中,机器手臂的夹具被禁用,无法正常开合。研究人员认为如此一来,机器手臂应该只能以几种有限的方式移动小盒子,比如只能笨拙地推着它走,因为机器手臂已经没办法抓起小盒子了。令人意外的是,MAP-Elites 自己找到了一种方法,让夹具以某种方式击中小盒子,强行把夹具打开并紧紧地抓住小盒子(这个过程看视频更为直观,简单粗暴的说法就是,让夹具从上向下砸向小盒子,直接把盒子嵌到夹具中)。一旦抓住了小盒子,机器手臂就可以夹着它并把它移动到更多的位置,这一点超出了研究者的预期。

视频点这里:

https://v.qq.com/txp/iframe/player.html?vid=a0607vchmli&width=500&height=375&auto=0

图 4. 强行抓取小盒子的轨迹快照。机器手臂一开始处于初始位置(a),夹具关闭。 机器手臂将小盒子(b)推向手臂的正下方。 然后机器手臂移动夹具使其更靠近正下方(c),并快速移动,扫过桌子,强行打开夹具,抓住小盒子。 最后(d),机器手臂夹着小盒子并将夹具移动到某一位置。

超出预期

只有你想不到,没有他们做不到的。

进化算法或数字生命体带来的另一类惊喜是,他们有时候会创造出超出实验者预期但又是合规的解决方案,而不是颠覆实验者的意图或利用潜在的错误。

这一节带来的轶事里,进化算法总能产生意料之外的好办法,这些解决方案要么是研究者都没想到的,要么是研究者认为不可能的,要么是比研究者预期更优雅或更复杂的解决方案。

用手肘也能走路

Cully 等人在 2015 提出了一种算法,使受损的机器人能够在两分钟内成功适应损伤。他们选择的机器人有六条腿,进化算法的任务是发现用断腿行走的方法。

图 6 手肘走路的步态示意图。模拟机器人的任务是在不用脚触碰地面的前提下快速行走,于是它迅速翻了个身并开始用“手肘”走路。红线显示了随着时间的推移机器人质心的变化路径。请注意,忽略模拟刚开始的前十分之几秒,机器人通过将重点放在受限的步态上,而不是初始位置,很快就完成了这个任务。

为了演变出各种各样的步态,该团队使用了 MAP-Elites 进化算法,该算法同时在变量所选维度(如表型可能的变化方式)的所有组合里搜索最合适的生物体。在这个案例种,变量的六个维度是每条腿的使用时间百分比,以每条腿的“脚”接触地面的时间比例来衡量。因此,MAP-Elites 算法从机器人的六条腿接触地面的频率的所有组合里搜索最快的移动步态。自然,研究团队认为进化算法不可能解决所有六只脚的触底时间皆为 0%的情况,但令人惊讶的是,它还真做到了。百思不解的研究团队查看了视频:在视频中,机器人翻了个身,用它的胳膊肘欢快地走了起来,而它的脚却在空中!(如图 6)

前文第一个视频展示了 MAP-Elites 算法发现的几种不同步态,包括我们这里提到的用手肘走路的步态(开始于视频的 1 分 49 秒)。

结论

本文中,我们回顾了一些数字进化过程中曾经产生的许多令人惊讶和具有创造力的解决方案。这些例子的多样性和丰富性似乎在向我们证明,数字进化总是会产生惊人之作。

如果你也从事人工智能或进化算法的研究工作,想必一定听到过许多关于数字进化的趣事。事实上还有很多故事因为研究人员的退休,已经淹没在时间的长河之中被人遗忘。

这些轶事也意味着,创造力不仅仅局限于大自然中的进化,而似乎是一般进化过程的普遍特征。所有的进化——无论是生物进化还是计算进化——天生具有创造性,并且总能出乎我们的意料,让我们获得意外之喜,有的时候甚至比我们更聪明、更机智。

欢迎来到迷人又诡异的硅基世界!

论文原文链接:

https://arxiv.org/pdf/1803.03453.pdf

今日荐文

点击下方图片即可阅读

 当Bug多成游戏彩蛋,AI能拯救育碧吗?


课程推荐

随着大数据技术的快速发展,“大规模”已经在应用中逐渐落地,“实时流”正在成为应用新的诉求。

如果想对 Blink 有更深入的了解,请关注 2018 年 4 月 23 日至 24 日,我们在北京国际会议中心举办的 QCon 深度培训。在会上,阿里巴巴的高级技术专家王绍翾和邓小勇将为大家带来阿里巴巴 Blink 流计算平台介绍与实践,讲述阿里巴巴在超大规模和复杂实时业务场景下,如何基于 Blink 引擎打造流计算平台。现在报名立享 8 折优惠,点击 “阅读原文” 即可了解更多详情。




AI前线紧跟前沿的AI技术社群



  想看更多这类文章, 请给我们点个赞吧!

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存