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 年先说了前半句,十一年后才和合作者补上后半句。我更在意的是他当年顺手给的两条建议:
- 别指望靠堆细节造出「正确」的 model,越堆越复杂,也不会变对。
- 要选择性地担心:外面有老虎的时候,就别盯着老鼠了。
顺便说一句,这句话常被拿来当借口:反正都是错的,我糙一点也无所谓。他的意思恰恰相反。他要你先搞清楚老虎在哪儿。
三个领域「扔东西」的方式不一样,区别主要在扔了什么有没有被说出来:
| 领域 | 做法 |
|---|---|
| 数学 | 有意识地去掉,并且把假设公开列出来。理想气体、无摩擦斜面,没有一个在现实里存在,但每一个都明说了「我扔掉了什么」。(至少在原则上是这样,现实里也有没说出口的隐含假设。) |
| 法律 | 用「拟制」。明知不是真的,为了让制度转起来,也这么认。最大的例子是公司:公司当然不是人,法律却让它像人一样签合同、有财产、会被起诉。 |
| machine learning | 不一定要像世界。Leo Breiman 在 2001 年把统计建模分成「两种文化」:一派相信数据背后有可以写出来的生成机制,用「假设对不对」检验;另一派把机制当黑箱,只问预测准不准。后一派的「错」更彻底,它从一开始就没打算像世界。 |
machine learning 还多了一层:它不是照着世界画的,而是照着训练数据画的,而训练数据本身就是世界的一张地图。测试集上表现好,只能说明它在「长得像训练数据」的地方好用。用户行为变了、市场规则变了、传感器换了,路换了,地图没换,这叫分布漂移(distribution shift)。它不会犹豫,会很自信地把你指向一条已经不存在的路。
👉 人话版准则
- 给每个 model 列一张「被扔掉的东西」清单。写不出来,说明你还没看懂它。
- 逐条问:这条扔掉的东西,在我的使用场景里会不会变重要?
3️⃣ 假设:它站在什么前提上?谁选的?
一句话结论:假设不是缺陷,是启动条件。真正危险的,是没人看得见的假设。
先看数学。欧几里得几何里有条平行公设,又长又绕,看着一点都不像「显然成立的公理」。很长时间里,不断有人想证明它能从别的公理推出来,没人成功。到 19 世纪,罗巴切夫斯基、鲍耶和黎曼干脆不证了,直接换掉它,得到同样自洽的新几何。黎曼那套后来成了广义相对论的语言。
所以公理不是被证明为真的东西,是被选来出发的东西。在一个公理系统里,你推不翻公理,推翻了就已经在另一个系统里。想换,只能整体换。
法律处理假设的方式不一样,叫推定:事实不清楚的时候,先按某种方式认定,同时规定好,谁有责任拿出证据把它推翻。(下面的法律例子,都以中国的司法实践为背景。)
两个例子:
- 无罪推定:既然审判一定会出错,就先说好,宁可放过一个有罪的人,也别冤枉一个无罪的人。它本质上是在分配犯错的代价。
- 宣告死亡:一个人长期下落不明,法院可以推定他已死亡;他一旦出现,宣告就可以撤销,婚姻、收养、财产怎么善后,条文里都写好了。
注意推定和前面说的拟制是两种东西:推定允许被反证,拟制不允许。没有人能在法庭上「证明公司其实不是人」,因为这个设定本来就不是为了描述世界。
machine learning 里的假设有两类:
- 先验(prior):看数据之前的信念,随数据更新。
- 归纳偏置(inductive bias):直接长在模型结构里。比如卷积神经网络默认,图里一块局部图案不管出现在哪个位置,意思都差不多。
David Wolpert 在 1996 年的「没有免费午餐」定理,大意是:如果对问题什么假设都不做,所有学习算法的平均表现一样。没有假设,就没有泛化。这差不多是休谟「归纳问题」的数学版本。(严格讲定理有前提,这里只取它的意思。)
把三种处理假设的方式放在一起:
| 方式 | 特点 |
|---|---|
| 公理 | 摆在桌面上,不能在系统内推翻,只能整体替换。 |
| 推定 | 可以被推翻,而且提前规定了谁举证、凭什么推翻。 |
| 归纳偏置 | 常常藏在架构和数据选择里,通常没有人是它的「举证责任人」。 |
一条没人看得见、也没人有责任质疑的假设,其实就是一条隐形的公理。
👉 人话版准则
- 把假设写成清单,每一条后面标两样:谁选的,以及什么证据出现时我会推翻它。
- 写不出第二项的假设,当成隐形公理处理:在汇报里明说出来。
4️⃣ 复杂度:它画得多细?这个细度有证据吗?
一句话结论:奥卡姆剃刀不是「简单的更真」,是「别为没必要的复杂度付钱」。
这一节我只写和 model 直接相关的这一面。奥卡姆剃刀本身值得单独聊,我之后会单开一篇。
「如无必要,勿增实体。」这句话归在 14 世纪的奥卡姆的威廉名下,据说研究者其实没能在他的著作里找到原话。更常见的是,大家把它误会成「简单的解释更可能是对的」。剃刀没这么说,它只说:复杂度要付费,每多一分都该拿出理由。
数学和统计给了这件事一套定量语言,就是偏差-方差权衡:
预测误差 ≈ 偏差² + 方差 + 噪声
模型太简单,偏差大,抓不住规律(欠拟合);太复杂,方差大,把噪声也当规律背下来(过拟合)。最好的模型在中间。这就是教科书里那条经典的 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 复杂。 押得值不值,看三个条件:
- 数据 / 案例有多少:越多,越撑得起复杂的 model。
- 情形有多同质:越同质,越适合用简单的规则。
- 押错了谁买单:代价越大,越要给复杂度和简单性各自找证据。
👉 人话版准则
- 每增加一分复杂度,都要有证据:验证集上的提升、一个具体的失败案例,二选一。
- 「更复杂所以更好」和「更简单所以更稳」,都不是证据。
5️⃣ 纠错:它错了的时候,谁发现,怎么改?
一句话结论:一个好 model 不只要有用,还要提前想好自己错了怎么办。
前四问备完料,现在回到总开关。
三个领域对这个问题的回答,差得很远:
| 领域 | 做法 |
|---|---|
| 数学 | 摆出假设,让你知道它在哪里错。纠错的办法是换一个 model,由同行检验。 |
| 法律 | 把「如果我错了」直接写进条文。宣告死亡就是个好例子:撤销条件、婚姻怎么办、被收养的孩子怎么办、被继承走的财产怎么办,都提前规定了。 |
| machine learning | 往往什么都不说。多数 model 上线之后,是靠监控指标报警,才知道地图和路已经对不上。 |
把「纠错」拆开,其实是三件事:
- 错在哪里能被说出来:假设有没有公开,被扔掉的东西有没有记录。
- 谁来发现:同行评审,当事人申请,还是监控报警。
- 怎么改,代价谁担:换 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 条(宣告失踪与宣告死亡)