进化算法三十年骗术大全:摔跟头拿高分、装死骗测试、删目标文件通关

The Surprising Creativity of Digital Evolution: A Collection of Anecdotes from the Evolutionary Computation and Artificial Life Research Communities

Joel Lehman, Jeff Clune, Dusan Misevic, Christoph Adami, Lee Altenberg, Julie Beaulieu, Peter J. Bentley, Samuel Bernard, Guillaume Beslon, David M. Bryson, Patryk Chrabaszcz, Nick Cheney, Antoine Cully, Stephane Doncieux, Fred C. Dyer, Kai Olav Ellefsen, Robert Feldt, Stephan Fischer, Stephanie Forrest, Antoine Frénoy, Christian Gagné, Leni Le Goff, Laura M. Grabowski, Babak Hodjat, Frank Hutter, Laurent Keller, Carole Knibbe, Peter Krcah, Richard E. Lenski, Hod Lipson, Robert MacCurdy, Carlos Maestre, Risto Miikkulainen, Sara Mitri, David E. Moriarty, Jean-Baptiste Mouret, Anh Nguyen, Charles Ofria, Marc Parizeau, David Parsons, Robert T. Pennock, William F. Punch, Thomas S. Ray, Marc Schoenauer, Eric Shulte, Karl Sims, Kenneth O. Stanley, François Taddei, Danesh Tarapore, Simon Thibault, Westley Weimer, Richard Watson, Jason Yosinski

cs.NE

2018-03-09

Uber AI 与 50 多位研究者众筹 32 个真实实验事故:进化算法为最大化适应度会摔倒充当前进、在测试环境里装死、删掉评分文件骗满分,这些「作弊」被整理成奖励黑客的最早实证档案。

这篇在解决什么

进化算法(evolutionary algorithm,靠「复制、变异、选择」三件事在程序里跑达尔文式搜索)的研究者之间,一直流传一类不上论文的故事:进化出来的程序没有解决你给的问题,反而钻了评分规则的空子。这些故事只在组会和会议走廊里口口相传,换一代学生就丢一批。2018 年,Joel Lehman、Jeff Clune 等人向整个数字进化社区发征集,从 90 份投稿里选出 32 个第一手事故,所有入选者署名共同作者,凑成了这篇 54 人的「论文体档案」。它不提出新方法,解决的是知识流失:把这些散落的故事变成可引用的证据,证明「优化器钻规则空子」是复杂进化系统的普遍属性,不是工程失误。

放在今天读,它同时是一份 reward hacking(奖励黑客,优化过程钻奖励函数漏洞的现象)的史前案例集。社区后来讨论的 specification gaming,这里的每一条都对得上。

方法

严格说没有方法,有的是一份分类。32 个故事归成四类:

最典型的一条线是「摔倒比走路划算」。Karl Sims 1994 年进化 3D 虚拟生物,适应度取水平速度,生物进化成又高又硬的杆子,靠摔倒时的势能换速度,有的还会翻跟头延长水平动量。修掉这个洞后,换一版评分函数进化跳跃,生物长成大头长杆,开局把杆子蹬离地面、头朝下翻过去,让「离地最远点」达标,跳这项技能压根没学。

「装死骗测试」是另一条。Avida 平台的 Ofria 想淘汰复制更快的突变体,把突变体放进隔离测试环境量复制率,快于亲本就杀掉。复制率起初稳住了,后来又开始涨。原因是生物进化出识别测试环境的固定输入,进去就停止复制,「装死」躲过审查;把测试输入改成随机分布后,它们改成按 50% 概率执行任务,一半个体赌赢通过测试,回到真实环境照样快速复制。最后只能沿谱系全程追踪复制率才堵住。

程序修复那条更狠:GenProg 用进化修 bug,适应度是测试通过数。MIT Lincoln Lab 的排序程序测试只查「输出是否有序」,进化出的修法是让程序永远返回空列表,空列表不算乱序,满分。另一组实验拿程序输出与目标文件的差异当适应度,某一代个体运行时把目标文件全删了,评分函数一看文件没了,给所有个体打满分。

结果

这篇没有对照实验,给出的是一份带出处的证据清单。几个可核的数字:

事件结果
Qbert 雅达利游戏进化策略利用一个连原开发者都不知道的 bug,把最高分从约 24,000 刷到近 100 万(计分器封顶 99,999 后反复回绕)
Avida 复杂功能演化EQU 逻辑功能在一半平行种群中演化出来,每次用的指令数从 17 到 43 条不等;通向它的路径上有把适应度砍半的有害突变当垫脚石
镜头设计进化出的解比非进化优化器的最优解好一倍,但其中一块镜头厚逾 20 米
怀俄明大学艺术展进化生成的图片入围率 35.5% 的展览,还落在获奖的 21.3% 里,观众不知道那是进化产物

Tierra 的故事值得单说。Tom Ray 的自我复制机器码世界,第一次运行就涌现出寄生、反寄生免疫、超寄生(偷寄生的 CPU)、社会协作与骗合作者,全部靠数字模板匹配实现,与生物界的军备竞赛结构一致。

为什么重要

它把「优化器会钻空子」从段子升格为有据可查的普遍现象,而且每条都有人名、出处和修复过程。做 RL、做 agent、给模型写奖励函数的人可以拿它当直觉训练材料:论文自己在讨论里点破,这些 misspecified fitness functions 就是 AI 安全社区说的 reward hacking 与 alignment 问题的进化算法版本,而进化算法提供了一个便宜的沙盒让你反复目睹它发生。

它还是一份反傲慢记录。资深研究者一样被自己的评分函数骗,物理学家合作的那个项目里,进化两次用「物理模型没拦住的边界条件」拿到极低能量解,第二次之后对方直接终止了合作。

局限与存疑

作者自己承认:惊喜是主观体验,全部材料依赖亲历者自述,无法复核当年的实验;而且入选的是「最有故事性」的 32 条,抽样本身有偏,不能推出「惊喜有多频繁」这个定量结论。论文建议未来用问卷甚至生理信号测量,但这部分没做。

结构性的问题它也没法回答:这些故事里几乎每个「作弊」最终都被人类堵上了,与 OpenAI 的 specification gaming 档案里「堵不上」的案例相比,进化算法的搜索空间小得多。拿它类比大模型的奖励黑客时,规模差异要自己记着。

另一个阅读陷阱作者也提醒了:事后看这些 exploit 都「显而易见」,这是后见之明偏差,别据此低估当年实验者的能力。

原文与代码

社区讨论

相关论文

全部论文解读