Perslis Defense
PERSLIS DEFENSE · 第八章 · 失败优先模型

它先失败。同样的错,它不犯第二次。

任何新系统都会出错。要紧的只有两件事:它会不会一再犯同一个错?一个糟糕的星期,会不会让它学会无视命令?VDSG——我们面向国防的系统,建立在 Peel,即失败优先模型之上——对这两个问题的回答都是“不会”。它从每一次失败中学习。它学不会绕过自己的限制。这是会积累作战经验的自主。

在游戏里,这换来了什么:一个坦克大脑,剪掉从未用过的和被证明有害的部分之后,在 80 个全新种子上得分 48,588,原生规则为 29,275(BattleZone)。学习开对学习关:每小时死亡 15 次对 80 次(Fallout)。没有神经网络,没有权重,没有训练过程,不依赖网络链路。它知道的东西写在 Peel 卡片上。它学到的东西是一张你能读懂的计数表。每一次拒绝都会引用挣得它的那些失败。

看它玩 ▸   看它学习 →   什么是失败优先模型?数学 →   阅读论文 ↗

VDSG 在受指挥的控制台上玩《DOOM》E1M1
VDSG 在录制的控制台上玩《DOOM》(1993)E1M1。规则决定,经验学习,命令只收窄。回路中没有神经网络。

“失败优先”对你意味着什么

失败优先的系统预期自己会失败,并且只从真正经历过的失败中学习。让这件事安全的,是一条老工程原则:失败时,它必须朝可控状态失败,而不是朝失控状态失败。

学习可以改变它的打法。学习不能改变它的限制。
用我们测试里的话说:它可以改写它认为什么管用,但永远不能改写它被授权做什么。

这是它的构造方式,不是安全认证,这里没有任何东西获得资质。见边界。

用大白话讲这个回路

FAIL  →  OBSERVE  →  EXPLAIN  →  BUILD RULE  →  VERIFY  →  RETRY
  1. 失败。它死了,或者挨了一下本不必挨的打。这会被记下来,而不是被平均掉。
  2. 观察。每次做决定时,它都从引擎自己的状态读取态势:生命值、谁在场、是在交火还是在对话。游戏已经给出的东西,它不去从像素里猜。
  3. 解释。它把失败算到造成失败的那个决定头上。这比听起来难。如果对话刚结束就爆发了战斗,责任归于挑起战斗的那句话,而不是它在战斗中途尝试的那次治疗。我们一开始就弄错了(见下文),结果造出了一个以同一种方式死了四十九次的驾驶员。
  4. 建立规则。只有当危害明确时,一种模式才会被禁掉。要么它每次尝试都让驾驶员送命,且至少试过两次;要么在至少四次尝试之后,连对它死亡率最宽容的估计(90% Wilson 区间的下沿)都仍然高于驾驶员的正常死亡率再加一个余量。倒霉死一次不算教训。每条规则都写明这种模式以及它背后的经验。
  5. 验证。规则只在事先设定好的限制之内起作用。它可以拿掉一个目标,或者调整剩下目标的顺序。别的什么都不能做。这条边界在论文里被表述为一个命题,并由测试钉住。
  6. 重试。下次再遇到那种情况,被禁的动作就不再可选,其余一切照常开放。如果经验把所有选项都禁了,最不坏的那个会回来——因为原地不动等死不叫适应。

它碰不到的授权链

每一个决定都走同一条授权链。学习排在最后:

what the situation offers      rules.applicable(s)
  ∩ what the manual allows       Peel cards in force
  ∩ your standing orders         "don't fire", "hold position"
  = what it may do right now     ── authority ends here ──
  → experience narrows / reorders inside it     (the learner)
  → the rules pick one goal → the actuator presses the buttons

三项测试钉住了这种分离。它们随整套测试(截至 2026-09-26 共 219 项通过)在每次改动时运行:

test_the_learner_can_never_add_a_goal
    however much experience it has, it cannot invent permission
test_the_learner_cannot_overrule_a_standing_order
    an order that narrows the set to FIGHT stays FIGHT, even after 20 deaths
test_ranking_is_a_permutation_and_nothing_more
    the learner may reorder the admissible goals, never add one

第二项测试是一个刻意的选择:人的命令高于经验,即使经验表明这条命令正在让驾驶员送命。它可以报告这条命令代价很高,但不能撤销它。

在实战中,要紧的就是这一部分。权限、命令和交战规则(ROE),由你和你的指挥链来定。地板是其中确定性的部分:它让机器守住从经授权的政策、任务规则、安全限制和适用交战规则中导出的、机器可读的限制——它学到的任何东西都不能放松这些限制。美国国防部第 3000.09 号指令要求,自主与半自主武器系统的设计必须让指挥官和操作员能够对使用武力行使“适当程度的人类判断”。我们正朝这个框架去建设。我们不声称实现了它或符合它,而且这里的一切都还没有离开仿真。

它的许可从哪里来

VDSG 不会根据自己的经验决定自己被允许做什么。许可来自一份文件。在 Fallout(1997)测试中,游戏印刷版的生存手册被编译成 2,250 张 Peel 卡片。当前态势下生效的卡片,许可驾驶员可以追求的目标,每一项许可都注明出自哪一页。Peel 与科学运行时使用的是同一种卡片格式:每一条事实都有类型、有来源,要么完整,要么空缺。

所以有两个互不相混的存储。卡片说明什么被允许,并给出来源。证据表说明哪里出过错,并给出经验。学习只写入证据表。卡片存储以只读方式打开,所以驾驶员经历的任何事情,都改变不了它被允许做什么。

结果,坏消息先说

内部测量,均在游戏中。每一行只与它自己的基线比较。
测试结果意味着什么
Freeway
与 Invaders 相同的失败记忆,没有针对单个游戏的策略
9.2 对 10.4
−12% · 3 条规则,每一条都封掉 up
当唯一的得分方式同时也是危险动作时,从失败中学习反而有害。它正确地学到 up 很危险,于是不再得分。
DOOM
先是规则,再是规则 + 记忆,32 个种子
17.9 → 20.3
配对 t = 0.78
持平,不是胜利。规则明显胜过随机操作(3.2);其上的记忆层与规则本身拉不开差距。
Space Invaders
原始像素,零模拟器内存读取
200.6 对 152.2
+32% · 第 50 局峰值 276.2
当一次失败就会结束游戏时,学到的拒绝是有帮助的。
Fallout(1997)
脚本化的 Shady Sands 场景,经由真实的决策回路驱动
只死一次
然后选择和平的台词
在修正归责之前,一次实时运行因反复回到同一个守卫面前而死了 49 次。在没有安全台词可选时,它死两次,然后不再和那个守卫说话,但继续和那个孩子说话。

Fallout 这一行来自经由真实 Session.tick() 运行的脚本化场景,而不是一场长时间的实时战役。在之后一次更长的实时测试中,学习开对学习关,同一个存档和种子,各 12 分钟:每小时死亡 15 次对 80 次。Invaders 与 Freeway 这一对才是最重要的发现,证据一章解释了为什么同一份代码在一个游戏里有帮助、在另一个游戏里却有害。

我们发现的最糟的失败,是我们自己的

Fallout 的驾驶员一次又一次走回同一个守卫面前,说同一句话,然后送命。学习是在起作用的,只是它从错误的时刻学习。守卫先结束对话,片刻之后才拔枪,所以一句话的结果被早读了一个时钟周期。“准备去见你的造物主吧”说了四次,接着是四场致命的战斗,却被记为战斗 0%。与此同时,死亡记忆只追究最后六个决定,而它们全都在战斗之中:26 次死亡被算到 HEAL 头上,而挑起这些战斗的 446 次回复一点责任都没有被算上。

归责,是从失败中学习的系统不声不响出错的地方。每一个这样的缺陷,在被发现之前都产出看似可信的结果。这是我们公开的第二个;第一个是 Atari 死亡动画缺陷。

这里面有什么是新的吗?

大部分不是新的。每一块都有出处:

我们声称的只有这一点:据我们所知,此前没有系统同时具备以下三点:(1)规则建立在它真正经历过的失败之上,每条规则都引用那些失败;(2)限制在学习之前就已根据许可文件和人的命令设定,学习可证明无法放宽它;(3)回路中任何地方都没有神经网络。如果你知道这样的系统,告诉我们,我们会在这里引用它。

我们不声称什么

看它玩 ▸   联系我们 ↗

Perslis 全站