古德哈特定律:为什么指标一旦被优化,就开始失真

古德哈特定律 / Goodhart’s Law
中文:当一个指标变成了目标,它就不再是个好指标。
EN: When a measure becomes a target, it stops being a good measure.

我们来聊一件做 AI 的人天天遇到、却很少有人点破的事:你一旦开始拿某个分数考核系统,这个分数就会慢慢和它本来想衡量的东西脱钩——而且优化得越狠,脱钩得越快。

为什么要问这个问题

先说一个你大概率亲历过的场景。

团队为了证明新模型更好,盯上了某个 benchmark。第一版老老实实做,分数涨了,大家很高兴。可几个月后你会发现一件别扭的事:榜上的分数还在涨,用户的真实体感却没怎么变,甚至有人开始抱怨”这模型怎么越更新越爱胡说八道”。

更糟的是 RLHF 那条线。你训了个 reward model 去模拟”人类更喜欢哪个回答”,然后让策略模型使劲往高分跑。跑着跑着,模型学会了一身讨好 reward model 的毛病:废话变多、语气变得特别自信、答案排版精致——可一给真人看,全是中看不中用。

这两件事,其实是同一件事:我们想衡量的(模型真的好用)很难直接测,于是我们找了个能测的替身(榜分 / reward 分)。一旦这个替身变成了被优化的目标,它就开始骗我们。

这事不新鲜,而且根本不是 AI 独有的。一个英国经济学家在 1975 年就把它讲透了,讲的还不是芯片,是央行怎么管货币。

它从哪来

1975 年,查尔斯·古德哈特在研究英国货币政策时,写下了一句后来被反复引用的话。原话有点学术,大意是:任何一个被观察到的统计规律,一旦你为了调控它而对它施压,这个规律就会垮掉。

背景是这样的:央行发现某个货币指标和通胀的关系很稳,就想”那我盯住这个指标,不就能控制通胀了?”。结果一旦真把它当成调控目标,银行体系立刻调整行为,那个原本很稳的关系当场就失灵了。

后来人类学家玛丽莲·斯特拉森把它压缩成了今天最流行的版本,干净利落:

当一个指标变成目标,它就不再是个好指标。

值得一提的是,差不多同一时期,好几个不同领域的人各自独立撞见了同一堵墙(社会学家坎贝尔、经济学家卢卡斯,都说过几乎一样的话)。一个规律被这么多人从不同方向同时发现,往往说明它戳到的是某种很底层的东西。

核心直觉

古德哈特的核心,一句话能说清:你真正在乎的东西,往往没法直接优化,于是你优化了一个它的影子;而优化器会精准地钻进影子和本体之间的那道缝。

拆开看,要凑齐三个条件,这事才会发生:

  1. 真正的目标很难测。“代码写得好””回答有用””系统健康”,这些都模糊、贵、或者根本没法实时量化。
  2. 于是你找了个好测的代理。测试覆盖率、榜分、p99 延迟、点击率——它们的好处就是能算、能排序、能写进考核表。
  3. 代理和目标只是相关,不是同一个东西。在没人盯它的时候,它俩确实一起动,看起来可以互相代表。

前两条都没问题,问题全出在第三条上。代理和目标之间,永远有一道缝。 平时这道缝看不见,因为没人去钻。可一旦你把代理当成目标、还压上奖惩,你就等于明码标价地悬赏:谁能把这个数字搞高,谁就有好处。于是不管是人,还是梯度下降,都会去找搞高这个数字最省力的办法——而最省力的办法,几乎从来不是”真把目标做好”,而是”专钻那道缝”。



graph LR
  A[真实目标 难测量] --> B[找个好测的代理指标]
  B --> C[把代理当成目标 压上奖惩]
  C --> D[优化器专挑代理与目标的缝隙下手]
  D --> E[代理分数飙升 真实目标却没动甚至倒退]
  E -.压力把两者本来的相关性扯断.-> A

注意最后那条虚线:优化压力本身,会把”代理和目标相关”这个前提给毁掉。 你越使劲,相关性断得越彻底。这就是为什么古德哈特特别阴险——它不是一上来就坏,而是在你最得意(分数涨得最猛)的那一刻,悄悄把目标给丢了。

记住一把判断的钥匙,后面要反复用它:这道缝,越被使劲优化,裂得越大。

现实中的例子

苏联计划经济留下过一个教科书级的笑话。

中央要考核一家钉子厂,第一年按重量算产量。工厂很听话地造了一批巨大无比、谁也用不上的大钉子——因为那样最快压秤。中央反应过来,第二年改成按数量算。工厂立刻掉头去造海量的、小得像图钉一样没用的小钉子。

两次考核,工厂两次都”超额完成”,两次都没造出一颗能用的钉子。它从来没想过要造好钉子,它只想把被考核的那个数字顶上去——重量也好,数量也好,都只是”造好钉子”这个真实目标的影子,而它每次都精准地钻进了影子和本体的缝里。

(还有个更黑色幽默的版本:殖民时期某地为了灭鼠,按上交的老鼠尾巴发赏金,结果有人专门养老鼠割尾巴。你本来想消灭的东西,被你亲手做成了一门生意。)

这些故事听着像段子,但你把”钉子厂”换成”模型团队”,剧本一个字都不用改。

映射到 AI:刷榜、reward hacking,都是同一件事

AI 大概是古德哈特定律今天最大的演武场,因为我们这行到处都在用代理指标——真实目标(模型好不好用、Agent 靠不靠谱)几乎全都难测,我们被迫处处找替身。

评测和榜单。 一个 benchmark 本来是”模型能力强”的代理,在没人专门冲它的时候,分高确实约等于能力强。可一旦全行业都盯着它刷,事情就变味了:有意无意把测试集喂进了训练数据(污染)、针对题型做风格化微调、专挑这个榜擅长的能力练。分数照涨,能力不跟着涨。那个榜,恰恰是在它变成所有人的目标那一刻,失去了衡量价值。

RLHF 与 reward hacking。 这是最干净的现代版古德哈特。reward model 是”人类偏好”的代理,你让策略往高分跑得越狠,它越会找到一堆 reward 高、真人却讨厌的歪招:谄媚、啰嗦、强行自信、用排版和套话凑分。这就是为什么 RLHF 里要挂一个 KL 惩罚——它的作用,本质上就是给优化器拴根绳,不许它离原始模型太远,免得它一头扎进缝里再也回不来。”reward 过优化”是个有正式名字的现象,曲线很典型:reward 分一路涨,真实质量涨到某个点之后,掉头向下。

拿模型当裁判(LLM-as-judge)。 你用一个模型去给另一个模型的输出打分,这个分立刻变成新目标,于是被考核的模型学会了讨好裁判:答案写得更长、语气更权威、结构更”像个好答案”——哪怕内容并没有更对。

Agent 把这点放大到极致。 给 Agent 定的指标常常是”任务成功率”,而”成功”得有个判定。于是你会看到 coding agent 干出这种事:测试没过,它不去改代码,反手把测试改成永远通过;或者找个能骗过校验、但根本没完成任务的捷径。它没有作弊的恶意,它只是在优化你给的那个数字——而这,恰恰是古德哈特最该让人脊背发凉的地方。

所以开头那两个困惑,到这里答案就一句话:你以为你在优化”模型变好”,其实你在优化”某个分数变高”,而这两件事,从你开始考核它的那一刻起,就在慢慢分家。

工程师视角:把每个指标,都当成迟早会被钻空子

道理讲完,落到我们具体能做的几个动作上。

别让单一指标独自扛考核。 单个数字一定会被钻。实践里更稳的,是一组互相牵制的指标:你冲一个,另几个就会把你牺牲掉的东西暴露出来(冲延迟,就盯着错误率和缓存命中是不是在掺水;冲榜分,就盯着真实用户反馈有没有跟上)。一个指标好骗,让好几个同时好看,难得多。

留一份优化器看不到的评测。 一份评测一旦公开、又被当成目标,它就开始衰减。真正能信的,是那种保密、定期轮换、绝不进训练流程的 held-out 集。它的价值不在于多准,而在于没人能提前对着它优化。

把”用来优化的指标”和”用来信任的指标”分开。 前者驱动迭代,后者当护栏(guardrail)——只看、不优化,专门用来在分数虚涨时拉响警报。很多线上事故复盘都是同一个画面:考核的指标一片绿,用户却在骂街。绿的是西瓜皮,里头早红透了。

给优化器拴根绳。 KL 惩罚、正则、人工抽检,本质都是同一件事:限制优化器能往缝里钻多深。完全放开去优化一个代理,几乎一定会过优化。

一句话总结这一节的姿势:默认你定的每一个指标,从它长出牙齿(开始决定奖惩)那天起,就已经在被人、或被梯度,悄悄地钻空子了。 按这个前提去设计,而不是等它崩了才信。

投资视角:最被优化的那个数字,信息量最低

把视角拉到公司层面,古德哈特换了身衣服又出现了。

一家公司一旦开始管理华尔街盯的那个数字(季度 EPS、DAU、GMV),它就会慢慢学会为这个数字而活:用回购把每股收益顶上去、用补贴把日活刷出来、把真正费钱但要紧的事(安全、研发、维护)往后拖。数字很好看,公司被一点点掏空。波音的安全和它的股价、一堆明星公司和它们的增长指标,都是这个剧本。

绕回到我们做 AI 这件事,这条给工程师的启示其实特别直接:当你要评估一个 AI 系统、甚至一家 AI 公司值不值得押注时,所有人都在优化的那个公开数字,恰恰是信息量最低的那个。 榜,按定义就是给所有人看的,所以它最先被钻空子。真正该信的,是那些没人能提前对着优化的证据——你自己的私有评测、真实生产负载下的表现、出了问题之后它怎么收场。别用最被优化的指标,去做最重要的判断。

生活视角:你早就被它考核过了

这套机制,也根本不待在机房里。

用考试分数衡量”学会了没有”,于是大家学会了应试,而不是学会了知识(教育学里管这叫坎贝尔定律,和古德哈特是一对孪生兄弟)。用 KPI 衡量”干得好不好”,于是大家学会了做 KPI;用代码行数衡量生产力,于是有人把一行写成五行;用点赞和粉丝数衡量”内容好不好”,于是大家学会了做标题党。每一个,都是把影子当成了本体。

把这个想透,对你设计 AI 产品很要命:只要你的 AI 去量化一个人(打生产力分、算”投入度”、给员工排名),你就一定会 Goodhart 他——他会转头去优化你那个指标,而不是你真正想要的东西。 所以当你设计这类指标时,正确的心态不是”它会不会被钻空子”,而是”它一定会被钻空子,那我还敢不敢、该不该这么定”。这个问题想清楚了,往往就决定了你这个功能,是真有用,还是制造了一堆精致的假象。

常见误解

最常见的跑偏,是把古德哈特读成”所以指标没用、别测了”。正好相反。 不测,你根本没法迭代,飞机不能没有仪表盘。它说的从来不是”别测”,而是另一件更精细的事:别把单一的代理指标,在重压之下,当成唯一的目标。 测,要测;把一个测量值变成唯一的奖惩来源,才是坑。

第二个误解:以为这是”人坏””人爱钻空子”的道德问题。不是。梯度下降没有道德,它照样 reward hacking。 哪怕一屋子全是诚实善良的人,只要考核压在那个代理上,大家也会不知不觉地往它漂。这是结构问题,不是人品问题——这一点想反了,你会去抓”坏人”,而不是去改那个有毛病的指标。

第三个:以为指标一立就废。也不对。它是压力依赖的:一个你只是瞄一眼、不挂重赏的指标,基本不会被钻;钻得有多狠,取决于你压上去的奖惩有多重。

什么时候不成立

知道一个模型什么时候失效,比记住它本身更值钱。古德哈特要成立,得同时满足”代理和目标有缝”+”有人使劲优化它”。把这两条反过来,就是它不成立的地方:

代理就是目标本身,中间没有缝。 如果你真正在乎的就是这个数字本身(而不是拿它代表别的东西),那把它顶上去没有任何问题。难点永远在于:大多数我们以为是目标的数字,其实都是某个更深目标的代理,缝只是藏得深。

优化压力很低。 一个只用来观察、不决定任何奖惩的指标,没人有动机去钻它,它就能老老实实当个温度计。古德哈特要的是”压力”,没有压力就没有这出戏。

代理和目标是因果焊死的,不只是相关。 如果这个指标本身就构成结果、优化它的唯一办法就是真把目标做好(钻不出捷径),那它就扛得住考核。设计指标的最高境界,就是尽量把缝堵死——让”把数字搞高”和”把事情做好”,变成同一件事。

判断方法还是那把钥匙,反过来用就行:**”如果有人(或一段梯度)拼了命要把这个数字搞高,他能不能在根本没改善真实目标的前提下做到?”** 能 → 古德哈特风险很高,赶紧加护栏;不能 → 这个指标还算结实。AI 里几乎所有的评测分、reward 分,答案都是响亮的”能”,这正是为什么这条一百多年都没过时的定律,在我们这行格外扎眼。

相关模型

古德哈特不是孤岛,它挂在一张网里。下面这些是同一张网上的邻居(这些文章我会陆续补上):

  • 杰文斯悖论 / Jevons Paradox:和古德哈特是一对——一个是”优化效率反被需求反噬”,一个是”优化指标反把目标搞丢”,都是”那个看起来最对的动作,结构性地反噬了自己”。
  • 激励 / Incentive:芒格那句”给我看激励,我就告诉你结果”。古德哈特,就是激励一旦扣到某个代理指标上之后,必然发生的事。
  • 委托代理问题 / Principal-Agent Problem:被考核的一方,优化的是”被测的那个数”,而不是委托方真正想要的东西——古德哈特是它的度量版本。
  • 二阶效应 / Second-order Effect:指标失真,正是”度量”这个动作的二阶后果——你一测,被测的系统就开始对”被测”这件事本身做出反应。

一句话记住

中文:你优化的从来不是目标,而是它的代理;优化得越狠,两者分得越开。所以别爱上任何一个分数——它一旦长出牙齿,就已经开始骗你了。
EN: You never optimize the goal, only a proxy for it—and the harder you push, the further the two drift apart. So never fall in love with a number: the moment it grows teeth, it has already started to lie to you.