← 返回

X 轴 · 世界暂住中 · 长文

我怎么看一个 model

我开始梳理自己学过的东西,model 是第一个话题。数学、法律和机器学习里的 model 很不一样,我用同一组 5 个问题去看它们:目的、取舍、假设、复杂度、纠错。

先交代一下,我为什么开始写这个。

最近我在重新整理自己学过的东西,想把专业内容往上抬一个维度,梳理一遍。起因是一个我一直很尊重的人给过我一个建议:学习就像收集苹果。 攒到一定数量之后,要把苹果分别放进不同的框里。有了框,点才开始连成线。

这篇是我最近做这个尝试的成果,也是我梳理方法论的第一个话题:model。

我本科念的是数学和法学,后来读了 machine learning。三个专业里都有「model」这个词,意思却差得挺远:数学里是一组假设加推导,法律里是一套事先拟定的规则,machine learning 里是一个从数据里学出来的函数。我把这三个地方的「苹果」放进了同一个框,框的名字是:看任何一个 model 时,我会问的 5 个问题。 这篇更像是给未来的自己留的一套 way of thinking,下次还能照着再走一遍。

先上框架:

序 关键词 要问什么
1️⃣ 目的 它是为了什么而存在的?
2️⃣ 取舍 它扔掉了什么?扔得碍不碍事?
3️⃣ 假设 它站在什么前提上?谁选的?
4️⃣ 复杂度 它画得多细?这个细度有证据吗?
5️⃣ 纠错 它错了的时候,谁发现,怎么改?

这个顺序不是随便排的,它是一条链:目的决定取舍,取舍里最要紧的部分是假设,假设站稳了才谈得到画多细,最后兜底的是纠错。前四问都是在备料,第 5 问才是总开关。

先把一件事分清楚:model 不是世界的描述,是世界的「代替」

很多争论其实就卡在这里。不过我们没必要陷进学术定义的争论。

我现在给 model 的定义很朴素:为了某个目的,用一个更简单、能上手操作的东西,去代替一个太复杂、没法完全把握的东西。

两个关键词,「代替」和「目的」。

「代替」意味着它一定不完整。刘易斯·卡罗尔在 1893 年的小说《Sylvie and Bruno Concluded》里,让一个叫 Mein Herr 的人物讲过一个段子:他们国家真的做了一张比例尺「一英里对一英里」的地图。可惜没法用,农民反对,说它会盖住整个国家、挡住阳光。所以现在他们直接拿国家本身当地图,他还说效果差不多一样好。

博尔赫斯在 1946 年写过更短的一版,说的是同一件事:完美的地图没用。

Alfred Korzybski 在 1931 年说的那句「地图不是疆域」,后半句常被忘掉:地图之所以有用,是因为它的结构和疆域相似。是相似,不是相同。

这就带来一个推论:问「这个 model 对不对」是个坏问题,它一定不对。 值得问的是,它在什么目的下够用,错在哪儿,错了怎么办。后面这 5 个问题,就是把这句话拆开。

1️⃣ 目的:它是为了什么而存在的?

一句话结论:同一个 model,换个目的或场景,好坏就可能反过来。

牛顿力学早被证明是错的,可造桥、算刹车距离,它一直够用。换成 GPS,卫星上的钟如果不做相对论修正,定位误差会一天天攒起来。同一个 model,一个目的下是好工具,换个目的就是事故。

地图也一样。墨卡托投影保住了角度,航海的人沿着直线走就行;代价是高纬度的面积被撑大,格陵兰看起来跟非洲差不多大。航海家不在乎面积,上地理课的人很在乎。

我自己工作里就碰到过一个例子:**「用户流转地图」**这个 model。它在中国的媒体流量投放体系下很好用,换到欧洲,却行不通了。model 还是那个 model,目的看上去也没变,变的是它背后的场景。具体为什么,我之后会在 Selected Work 里专门讲这个 model 的实践,这里先留个钩子。

machine learning 里,「目的」通常落在两个具体的东西上:loss function 和评估指标。你优化什么,模型就变成什么。目的没说清楚,等于把选择权交给了默认设置。

👉 人话版准则

  • 用之前先写一句话:「我拿它来做什么决定?」写不出来,就先别评估它。
  • 同一个 model 换了用途或换了市场,就当成一个新 model。所以我需要一套方法:在新环境、新事情里,找到能重复使用的规律。什么都还不知道的时候,就用最简单有效的那套,把这 5 个问题重新过一遍。

2️⃣ 取舍:它扔掉了什么?扔得碍不碍事?

一句话结论:有用,不是错得少,而是错的地方不碍事。

统计学家 George Box 那句「所有模型都是错的,但有些是有用的」,很多人只记住了一半。他在 1976 年先说了前半句,十一年后才和合作者补上后半句。我更在意的是他当年顺手给的两条建议:

  1. 别指望靠堆细节造出「正确」的 model,越堆越复杂,也不会变对。
  2. 要选择性地担心:外面有老虎的时候,就别盯着老鼠了。

顺便说一句,这句话常被拿来当借口:反正都是错的,我糙一点也无所谓。他的意思恰恰相反。他要你先搞清楚老虎在哪儿。

三个领域「扔东西」的方式不一样,区别主要在扔了什么有没有被说出来:

领域 做法
数学 有意识地去掉,并且把假设公开列出来。理想气体、无摩擦斜面,没有一个在现实里存在,但每一个都明说了「我扔掉了什么」。(至少在原则上是这样,现实里也有没说出口的隐含假设。)
法律 用「拟制」。明知不是真的,为了让制度转起来,也这么认。最大的例子是公司:公司当然不是人,法律却让它像人一样签合同、有财产、会被起诉。
machine learning 不一定要像世界。Leo Breiman 在 2001 年把统计建模分成「两种文化」:一派相信数据背后有可以写出来的生成机制,用「假设对不对」检验;另一派把机制当黑箱,只问预测准不准。后一派的「错」更彻底,它从一开始就没打算像世界。

machine learning 还多了一层:它不是照着世界画的,而是照着训练数据画的,而训练数据本身就是世界的一张地图。测试集上表现好,只能说明它在「长得像训练数据」的地方好用。用户行为变了、市场规则变了、传感器换了,路换了,地图没换,这叫分布漂移(distribution shift)。它不会犹豫,会很自信地把你指向一条已经不存在的路。

👉 人话版准则

  • 给每个 model 列一张「被扔掉的东西」清单。写不出来,说明你还没看懂它。
  • 逐条问:这条扔掉的东西,在我的使用场景里会不会变重要?

3️⃣ 假设:它站在什么前提上?谁选的?

一句话结论:假设不是缺陷,是启动条件。真正危险的,是没人看得见的假设。

先看数学。欧几里得几何里有条平行公设,又长又绕,看着一点都不像「显然成立的公理」。很长时间里,不断有人想证明它能从别的公理推出来,没人成功。到 19 世纪,罗巴切夫斯基、鲍耶和黎曼干脆不证了,直接换掉它,得到同样自洽的新几何。黎曼那套后来成了广义相对论的语言。

所以公理不是被证明为真的东西,是被选来出发的东西。在一个公理系统里,你推不翻公理,推翻了就已经在另一个系统里。想换,只能整体换。

法律处理假设的方式不一样,叫推定:事实不清楚的时候,先按某种方式认定,同时规定好,谁有责任拿出证据把它推翻。(下面的法律例子,都以中国的司法实践为背景。)

两个例子:

  • 无罪推定:既然审判一定会出错,就先说好,宁可放过一个有罪的人,也别冤枉一个无罪的人。它本质上是在分配犯错的代价。
  • 宣告死亡:一个人长期下落不明,法院可以推定他已死亡;他一旦出现,宣告就可以撤销,婚姻、收养、财产怎么善后,条文里都写好了。

注意推定和前面说的拟制是两种东西:推定允许被反证,拟制不允许。没有人能在法庭上「证明公司其实不是人」,因为这个设定本来就不是为了描述世界。

machine learning 里的假设有两类:

  • 先验(prior):看数据之前的信念,随数据更新。
  • 归纳偏置(inductive bias):直接长在模型结构里。比如卷积神经网络默认,图里一块局部图案不管出现在哪个位置,意思都差不多。

David Wolpert 在 1996 年的「没有免费午餐」定理,大意是:如果对问题什么假设都不做,所有学习算法的平均表现一样。没有假设,就没有泛化。这差不多是休谟「归纳问题」的数学版本。(严格讲定理有前提,这里只取它的意思。)

把三种处理假设的方式放在一起:

方式 特点
公理 摆在桌面上,不能在系统内推翻,只能整体替换。
推定 可以被推翻,而且提前规定了谁举证、凭什么推翻。
归纳偏置 常常藏在架构和数据选择里,通常没有人是它的「举证责任人」。

一条没人看得见、也没人有责任质疑的假设,其实就是一条隐形的公理。

👉 人话版准则

  • 把假设写成清单,每一条后面标两样:谁选的,以及什么证据出现时我会推翻它。
  • 写不出第二项的假设,当成隐形公理处理:在汇报里明说出来。

4️⃣ 复杂度:它画得多细?这个细度有证据吗?

一句话结论:奥卡姆剃刀不是「简单的更真」,是「别为没必要的复杂度付钱」。

这一节我只写和 model 直接相关的这一面。奥卡姆剃刀本身值得单独聊,我之后会单开一篇。

「如无必要,勿增实体。」这句话归在 14 世纪的奥卡姆的威廉名下,据说研究者其实没能在他的著作里找到原话。更常见的是,大家把它误会成「简单的解释更可能是对的」。剃刀没这么说,它只说:复杂度要付费,每多一分都该拿出理由。

数学和统计给了这件事一套定量语言,就是偏差-方差权衡:

预测误差 ≈ 偏差² + 方差 + 噪声

模型太简单,偏差大,抓不住规律(欠拟合);太复杂,方差大,把噪声也当规律背下来(过拟合)。最好的模型在中间。这就是教科书里那条经典的 U 形曲线:横轴是模型复杂度,训练误差一路往下,测试误差先降后升。

经典 U 形曲线与双下降曲线示意图

📈 图注 / 出处:上图是为本文新画的示意图(曲线为概念示意,非实验数据,不是转载)。概念出处:Belkin, Hsu, Ma & Mandal (2019), Reconciling modern machine-learning practice and the classical bias–variance trade-off, PNAS 116(32),Figure 1(a) 是经典 U 形风险曲线,Figure 1(b) 是双下降曲线。全文:https://arxiv.org/abs/1812.11118

教科书版本:Hastie, Tibshirani & Friedman, The Elements of Statistical Learning(第 2 版)第 2 章「Model Selection and the Bias–Variance Tradeoff」一节中的 test / training error vs. model complexity 图。

然后深度学习来拆台。很多神经网络的参数比训练样本还多,能把训练数据背得一个不剩,按教科书该过拟合得一塌糊涂,可在新数据上表现得相当不错。Belkin 等人把这个现象画成了「双下降」曲线:模型变大,测试误差先降后升,大到刚好能拟合全部训练数据时升到顶,然后又降了。教科书那条 U 形,只是故事的前半段。

这推翻了剃刀吗?我的看法是没有。一种解释是:在一大堆都能完美拟合训练数据的解里,训练过程偏爱更「平滑」的那个。剃刀还在,只是「简单」的意思变了,从「零件少」变成了「形状简」。

法律界早就在另一个地方为同一个问题吵过架,叫规则 vs 标准(Louis Kaplow)。「限速 120」是规则:事前写死,制定时费力,之后每个司机、每个法官用起来都便宜。「以安全速度行驶」是标准:写起来省事,但每次适用都要有人花力气判断。规则的代价是不贴合个案:大雾天开 110 未必安全,空旷高速开 125 未必危险。他的结论是:常发生、情形相似的事,适合写成规则;少见、各不相同的事,适合用标准。

三个领域看同一件事,我得到的是一个判断公式。选简单,是一种押注:押世界的结构不比你的 model 复杂。 押得值不值,看三个条件:

  1. 数据 / 案例有多少:越多,越撑得起复杂的 model。
  2. 情形有多同质:越同质,越适合用简单的规则。
  3. 押错了谁买单:代价越大,越要给复杂度和简单性各自找证据。

👉 人话版准则

  • 每增加一分复杂度,都要有证据:验证集上的提升、一个具体的失败案例,二选一。
  • 「更复杂所以更好」和「更简单所以更稳」,都不是证据。

5️⃣ 纠错:它错了的时候,谁发现,怎么改?

一句话结论:一个好 model 不只要有用,还要提前想好自己错了怎么办。

前四问备完料,现在回到总开关。

三个领域对这个问题的回答,差得很远:

领域 做法
数学 摆出假设,让你知道它在哪里错。纠错的办法是换一个 model,由同行检验。
法律 把「如果我错了」直接写进条文。宣告死亡就是个好例子:撤销条件、婚姻怎么办、被收养的孩子怎么办、被继承走的财产怎么办,都提前规定了。
machine learning 往往什么都不说。多数 model 上线之后,是靠监控指标报警,才知道地图和路已经对不上。

把「纠错」拆开,其实是三件事:

  1. 错在哪里能被说出来:假设有没有公开,被扔掉的东西有没有记录。
  2. 谁来发现:同行评审,当事人申请,还是监控报警。
  3. 怎么改,代价谁担:换 model、撤销判决,还是重新训练。

这三件事,在 Agent 上看得特别清楚。

一个 Agent 的核心是 LLM:它能拆任务、调工具、写结果。LLM 当然会错,所以真正决定这个 Agent 能不能落地的,是包在 model 外面的那一层 harness(可以理解成给 Agent 系的安全带)。它回答的恰好是上面三个问题:

要回答的问题 harness 怎么做
错在哪里能被说出来 每一步调用和决策都留 trace / 日志,出了问题能回放,不用靠猜。
谁来发现 持续的 eval、监控告警、关键步骤的 human-in-the-loop(该由人拍板的地方,必须有人拍板)。
怎么改 权限边界(它能调什么、不能调什么)、回滚机制,以及改 prompt、改工具、重新评估的流程。

没有 harness 的 Agent,是「没人负责纠错」最典型的样子:它错了,没人知道,也没人有权停下它。有 harness 的 Agent,是把第 5 问提前做完了。同一个 LLM,有没有 harness,基本就是 demo 和 production 的差别。

说实话,我现在评价一个 model 或 Agent,会优先看这三件事有没有被设计过,其次才看准不准。准确率可以靠运气,纠错机制不行。

👉 人话版准则

  • 上线前写一页「认错协议」:监控哪几个指标、漂移到什么程度触发重训、谁拍板、出了问题谁善后。
  • 对 Agent,这页协议就是 harness 的设计清单。写不出来的,先别当成「已经做完」。

回头看一眼:5 个问题怎么连起来

序 关键词 一句话
1️⃣ 目的 为什么而画。
2️⃣ 取舍 扔了什么,碍不碍事。
3️⃣ 假设 站在哪块地上,谁选的,谁能推翻。
4️⃣ 复杂度 画多细,证据在哪。
5️⃣ 纠错 错了谁发现,怎么改。

拿到任何一个 model、一份报告、一个结论,不用急着问「对不对」,它一定不对。把这 5 个问题过一遍,大部分坑能提前看到。

最后留一个我自己还没想明白的:model 到底是拿来讲道理的,还是拿来下注的? 解释世界和预测世界,常常混着用,但可能是两件事,它们对「错」的容忍度完全不同。这个留给下一篇。

作者提示:个人观点,仅供参考


延伸阅读

  • George Box,《Science and Statistics》(1976)
  • Alfred Korzybski,《Science and Sanity》(1933)
  • Lewis Carroll,《Sylvie and Bruno Concluded》(1893),第 11 章「The Man in the Moon」
  • Leo Breiman,《Statistical Modeling: The Two Cultures》(2001)
  • David Wolpert,《The Lack of A Priori Distinctions Between Learning Algorithms》(1996)
  • Mikhail Belkin, Daniel Hsu, Siyuan Ma, Soumik Mandal,《Reconciling modern machine-learning practice and the classical bias–variance trade-off》(PNAS 2019)
  • Louis Kaplow,《Rules Versus Standards》(1992)
  • 《民法典》第 46–53 条(宣告失踪与宣告死亡)