建模:把数学当工具用 —— 从托勒密的本轮到 GPT 的权重,一条四千年没断过的线
"所有模型都是错的,但有些是有用的。" —— George Box, 1976
"用四个参数我能拟合一头大象,用五个我能让它的鼻子摆动。" —— 冯·诺依曼(Dyson 转述)
"自然界这本大书是用数学语言写成的。" —— 伽利略,1623
前面几篇讲的是数学内部的事:换视角(Ch 0)、公式的直觉化石(Ch 0.5)、符号怎么读(Ch 0.6)、物理优先(Ch 0.7)、怎么把公式解压成代码(Ch 0.98 / 0.99)。
这一篇讲数学向外的那一面:当数学离开纸面、去对付一条真实的河、一颗真实的行星、一台真实的蒸汽机、一段真实的人类语言时,它叫什么名字 —— 它叫建模(modeling)。
本文要论证三句话,一句比一句更冒犯直觉:
- AI 的本质就是数学建模,没有任何新东西。Transformer 和开普勒拟合火星轨道,是同一件事的不同规模。
- 数学建模的背后是物理。不只是"物理提供了应用场景",而是AI 里几乎每一个核心构件,都能在物理里找到它的原型:loss 是能量,softmax 是玻尔兹曼分布,扩散模型是朗之万动力学,卷积是平移对称性,训练是耗散系统弛豫到基态。
- 建模就是把数学当工具用 —— 数学在这里不是要被"证明"的对象,而是被拿来削、切、量、逼近现实的一套刀具。分不清"数学作为真理"和"数学作为工具"这两种模式,是绝大多数人对 AI 又敬畏又困惑的根源。
本文的核心断言:人类历史上只发明过三种建模范式 —— 拟合派(托勒密)、机理派(牛顿)、统计学习派(现代 AI)。第三种不是对前两种的否定,而是在算力便宜、数据充裕的条件下,第一种的复活与工业化。看懂这一点,你就不会再问"大模型到底懂不懂"这种问错了层次的问题。
🧭 0.4.1 先把"建模"这个词还原成人话
学校里的"数学"是封闭的:题目给全了条件,答案唯一,对错分明。 现实里的"建模"是开放的:条件不全、数据有噪声、答案不唯一、只有"更有用"和"更没用"。
一个模型,本质上就是一句这样的话:
我不打算描述真实世界的全部。我只保留我认为重要的那几个量,假设它们之间有某种关系,然后看这个假设能不能预测我还没看过的数据。
所以建模永远是这样一个闭环,四千年没变过:
现实现象 ──①抽象──▶ 数学对象 ──②求解──▶ 数学结论
▲ (变量/方程/ │
│ 分布/网络) │
│ ③回代
└───────────────④检验/证伪───────────────────────┘
(残差、外推、新实验)
四步里,学校只教了第 ② 步(解方程),而 ①③④ —— 抽象、回代、检验 —— 恰恰是建模里全部的难度和全部的乐趣所在。
用代码把这个闭环写死,比用文字说一百遍都有用:
import torch
# ① 抽象:现象 = 自由落体。我决定只保留 (时间 t, 高度 h),忽略空气、地球自转、相对论
t = torch.tensor([0.0, 0.1, 0.2, 0.3, 0.4, 0.5])
h_obs = torch.tensor([20.00, 19.95, 19.80, 19.56, 19.21, 18.77]) # 带噪声的观测
# ② 求解:假设空间 = {h = h0 - 0.5*g*t^2},未知参数 (h0, g)
h0 = torch.tensor(1.0, requires_grad=True)
g = torch.tensor(1.0, requires_grad=True)
opt = torch.optim.Adam([h0, g], lr=0.3)
for _ in range(2000):
loss = ((h0 - 0.5 * g * t**2 - h_obs) ** 2).mean() # ← 高斯 1801 的最小二乘
opt.zero_grad(); loss.backward(); opt.step() # ← 牛顿的流数,现代化
# ③ 回代:参数有没有物理意义?
print(f"h0 = {h0.item():.2f} m, g = {g.item():.2f} m/s^2") # g ≈ 9.8 → 模型抓到了真东西
# ④ 检验:外推到没见过的 t,跟新观测比
t_new = torch.tensor([0.8, 1.0])
print(h0 - 0.5 * g * t_new**2)
请注意这段 20 行代码里同时站着四个人:牛顿(自由落体的机理)、莱布尼茨(微分)、高斯(最小二乘 + 误差假设)、柯西(梯度下降)。这就是一次完整的数学建模,而它跟你训练一个 GPT 的代码,逐行同构 —— 后面 0.4.5 节会把这个同构一条一条对上。
建模的第一性定义:建模 = 选一个假设空间 + 定一个"错得多严重"的度量 + 在假设空间里搜到最不错的那个 + 拿没见过的数据检验它。 这四件事,托勒密做过,开普勒做过,高斯做过,OpenAI 也在做。区别只在假设空间的大小从 3 个参数变成了 \(10^{12}\) 个。
🕰️ 0.4.2 建模史:四千年,三次范式
先把整条河摆出来,后面逐段展开。看年份,看那一列"为了回答什么真实问题" —— 没有一个模型是数学家闲着无聊造出来的。
| 年份 | 人 / 事件 | 现实问题 | 造出来的数学工具 | 范式 |
|---|---|---|---|---|
| 前 1800 | 巴比伦泥板 | 分地、算粮仓、放高利贷 | 二次方程、复利(指数)表 | 拟合/算法 |
| 前 250 | 阿基米德 | 王冠掺假、船会不会沉、杠杆 | 浮力定律、力矩、穷竭法 | 机理 |
| 约 150 | 托勒密《天文学大成》 | 行星为什么"逆行" | 本轮(圆周叠加)= 傅里叶级数雏形 | 拟合 |
| 263 | 刘徽注《九章算术》 | 分配粮税、测量田亩 | 消元法(比高斯早 1500 年)、割圆术 | 算法 |
| 1609 | 开普勒 | 火星轨道对不上第谷的数据 | 椭圆轨道(8 角分的残差不肯放过) | 数据驱动 |
| 1687 | 牛顿《原理》 | 苹果和月亮是不是同一回事 | 三定律 + 万有引力 → 从公理推出椭圆 | 机理 |
| 1738 | 丹尼尔·伯努利 | 水管、船体阻力 | 流体的能量守恒 | 机理 |
| 1748 | 欧拉 | 弦怎么振动、梁怎么弯、船怎么稳 | 偏微分方程成为建模的通用语言 | 机理 |
| 1801 | 高斯 | 谷神星丢了,只有 41 天观测 | 最小二乘 + 正态误差 → 算回来了 | 数据驱动 |
| 1807 | 傅里叶 | 蒸汽机金属件的热传导 | 热方程 + 三角级数(催生了整个实分析) | 机理 |
| 1822–1845 | 纳维、斯托克斯 | 水管阻力、船舶设计 | Navier–Stokes(至今没被完全解决) | 机理 |
| 1865 | 麦克斯韦 | 电和磁到底什么关系 | 四个方程 → 预言了没人见过的电磁波 | 机理(巅峰) |
| 1877 | 玻尔兹曼 | 热为什么只往一个方向流 | \(S=k\log W\):微观随机 → 宏观定律 | 统计 |
| 1900 | 巴施里耶 | 巴黎股价怎么动 | 布朗运动(比爱因斯坦早 5 年) | 统计 |
| 1918 | 诺特 | 对称性和守恒律的关系 | 诺特定理:每个连续对称 ⇒ 一个守恒量 | 元定理 |
| 1925 | 海森堡 / 薛定谔 | 原子光谱线为什么是分立的 | 矩阵力学 / 波动方程 | 机理 |
| 1940s | 布莱克特、二战运筹学 | 护航船队编多大、深水炸弹设多深 | 运筹学(OR)的诞生 | 优化 |
| 1946 | 乌拉姆、冯·诺依曼 | 中子在材料里怎么走(曼哈顿工程) | 蒙特卡洛方法 | 统计模拟 |
| 1947 | 丹齐格 | 空军后勤调度 | 单纯形法 → 线性规划 | 优化 |
| 1948 | 香农 | 电话线最多能传多少信息 | 信息论:熵 = 不确定性 | 统计 |
| 1948 | 维纳 | 高射炮怎么打提前量 | 控制论、滤波 | 反馈 |
| 1952 | 图灵 | 豹子身上的斑点怎么长出来的 | 反应扩散方程(形态发生) | 机理 |
| 1963 | 洛伦兹 | 天气能预报多久 | 混沌:模型自身的极限 | 机理(证伪) |
| 1973 | 布莱克–斯科尔斯 | 期权该值多少钱 | 把傅里叶的热方程搬进金融 | 机理(跨界) |
| 1982 | 霍普菲尔德 | 记忆怎么存在神经网络里 | 用伊辛模型(磁铁)做联想记忆 | 物理→AI |
| 1986 | 鲁梅尔哈特等 | 多层网络怎么训 | 反向传播(数学上是 1970 年 Linnainmaa 的反向模式自动微分) | 优化 |
| 2012 | AlexNet | ImageNet 分类 | GPU + 卷积 + 大数据 | 统计学习 |
| 2015 | Sohl-Dickstein 等 | 怎么生成图片 | 扩散模型:直接搬非平衡热力学 | 物理→AI |
| 2017 | Transformer | 机器翻译的长程依赖 | 注意力 = 可微的检索 = 平均场 | 统计学习 |
| 2020– | 大语言模型 | "预测下一个词" | \(10^{12}\) 参数的条件概率模型 | 统计学习(工业化) |
| 2024 | 霍普菲尔德、辛顿获物理学诺奖 | —— | 官方盖章:神经网络是统计物理 | —— |
三次范式转移,一句话各自概括:
- 托勒密范式(拟合):我不知道为什么,但我能加更多的圆,把观测拟合得越来越准。
- 牛顿范式(机理):我用三条公理,推出所有观测 —— 而且能推出还没观测到的。
- 现代范式(统计学习):我不写方程,我写一个巨大的假设空间和一个损失函数,让数据自己去挑参数。
第三种是第一种的工业化版本。 这是本文最关键的一句判断,下一节展开。
🌀 0.4.3 托勒密的本轮:人类第一个"过拟合",也是傅里叶级数的祖先
公元 150 年前后,托勒密面对一个真实且要命的问题:行星在天上有时会倒着走(逆行)。地心说下这解释不了。
他的解法极其"现代":行星在一个小圆(本轮 epicycle)上转,而这个小圆的圆心又在一个大圆(均轮)上转。 不够准?再加一层本轮。 还不够?再加。
用代码写出来,你会当场认出这是什么:
import torch
def epicycle(t, radii, freqs, phases):
"""托勒密的本轮叠加:每一层是一个匀速转动的复数向量,首尾相接。"""
z = torch.zeros_like(t, dtype=torch.cfloat)
for r, w, p in zip(radii, freqs, phases):
z = z + r * torch.exp(1j * (w * t + p)) # ← 一层本轮 = 一个复指数
return z # 实部 = 黄经,虚部 = 另一个方向
这就是傅里叶级数。 一字不差。托勒密比傅里叶早 1650 年,写下了三角级数展开的物理版本 —— 只是他以为自己在描述天体的真实运动,而傅里叶知道自己在做函数逼近。
于是历史开了一个巨大的玩笑,而这个玩笑正是今天理解 AI 的钥匙:
| 托勒密的本轮 | 现代神经网络 | |
|---|---|---|
| 假设空间 | \(N\) 层圆周运动的叠加 | \(N\) 个神经元/参数的组合 |
| 表达力 | 加够本轮,任意闭合轨道都能拟合 | 万能逼近定理:加够宽度,任意连续函数都能拟合 |
| 拟合精度 | 千年内是最准的星表 | SOTA |
| 可解释性 | 零(本轮不对应任何真实物体) | 零(第 37 层第 2048 维不对应任何概念) |
| 外推能力 | 差(长期预测崩坏) | 差(分布外泛化崩坏) |
| 被谁打败 | 开普勒的椭圆(1 个方程 vs 80 个本轮) | ? |
加更多的本轮 = 加更多的参数。 冯·诺依曼那句"四个参数拟合大象",说的就是这件事:表达力足够强的模型族,能拟合任何东西 —— 包括噪声。 这不是模型的优点,是它的危险。
但请注意另一半,这才是公平的:托勒密的模型是真管用的。航海用了一千多年。一个不解释因果、只做预测的模型,在实践上完全可以是无敌的。 这就是今天大模型的处境 —— 说它"只是统计"没错,但托勒密"只是几何",照样把船开到了美洲。
🔭 0.4.4 开普勒 vs 牛顿:数据驱动与机理驱动的第一次分工
开普勒(1609) 手上有第谷·布拉赫二十年的火星观测数据 —— 当时全世界精度最高的数据集。他用圆轨道拟合,误差 8 角分(约 1/4 个月亮直径)。
以当时的观测精度,8 角分完全可以说"够好了,收工"。开普勒拒绝了。 他写道:这 8 角分是上帝赐给我的礼物,它指向一场天文学的彻底改革。
8 角分 = 残差(residual)。 现代建模的第一条铁律 —— 认真对待残差,模型的下一次革命藏在残差里 —— 就诞生在这里。今天你训练模型时盯着 loss 曲线里那个下不去的平台,你和开普勒在做完全相同的事。
他花了六年,试遍各种曲线,最后得到椭圆。但开普勒不知道为什么是椭圆。他的三定律是从数据里拟合出来的经验律,没有机理。
牛顿(1687) 反过来:从三条运动定律 + 一条平方反比引力律出发,数学上推出轨道必须是圆锥曲线。开普勒定律从"观测总结"变成了"定理"。
代码上,这两种范式的差别是这样的(同一个现象,两套写法):
# ── 开普勒范式:数据驱动。我不知道机理,我拟合参数 ──────────
# 假设空间:椭圆 r = p / (1 + e·cos θ),未知 (p, e)
p, e = torch.tensor(1.0, requires_grad=True), torch.tensor(0.1, requires_grad=True)
for _ in range(2000):
r_pred = p / (1 + e * torch.cos(theta_obs))
loss = ((r_pred - r_obs) ** 2).mean() # 只跟"观测像不像"较劲
loss.backward(); opt.step(); opt.zero_grad()
# ── 牛顿范式:机理驱动。我写下力,让轨道自己长出来 ──────────
# 假设空间:F = -GMm/r^2,未知只有 GM 一个物理常数
def step(pos, vel, GM, dt):
acc = -GM * pos / pos.norm() ** 3 # ← 平方反比,唯一的假设
vel = vel + acc * dt
pos = pos + vel * dt
return pos, vel # 椭圆是**积分出来的**,不是拟合出来的
两者的分水岭不在精度,在外推:
| 开普勒(拟合) | 牛顿(机理) | |
|---|---|---|
| 参数个数 | 每颗行星一套 | 全宇宙共用一个 \(G\) |
| 数据需求 | 大(二十年观测) | 小(几个点定常数) |
| 换个新行星 | 要重新拟合 | 直接算 |
| 能预言未知吗 | 不能 | 能 —— 亚当斯/勒维耶 1846 用它算出了海王星的位置,然后天文台照着一看,真的在那儿 |
| 现代对应物 | 神经网络、大模型 | 物理仿真、微分方程、第一性原理 |
"能预言一个还没被观测到的东西",是机理模型的独门特权。 麦克斯韦 1865 从方程里推出电磁波并算出它的速度等于光速(于是断言"光就是电磁波"),赫兹 1887 才在实验室里造出它 —— 模型比现实早了 22 年。
至今没有任何一个大模型做到过这个级别的事。这不是贬低,是定位:统计学习擅长内插,机理模型擅长外推。混淆二者,是当下 AI 讨论里最贵的错误。
🤖 0.4.5 AI 的本质就是数学建模:逐行对照
现在把"训练一个神经网络"这件事,拆成建模的四个标准部件,并给每个部件标上它的历史发明人。
# ═══ 部件 1:假设空间 H —— "我允许世界长成什么样" ═══════════
# 历史原型:托勒密的本轮层数 / 多项式的次数 / 傅里叶级数的项数
model = torch.nn.Sequential(
torch.nn.Linear(784, 128), # ← 凯莱 1858:矩阵作为代数对象
torch.nn.ReLU(), # ← 非线性,否则整个网络塌缩成一个矩阵
torch.nn.Linear(128, 10),
)
# ═══ 部件 2:损失函数 L —— "错得多严重" ═══════════════════
# 历史原型:高斯 1801 最小二乘(= 假设误差服从正态分布下的极大似然)
# 费雪 1922 极大似然 / 香农 1948 交叉熵
loss_fn = torch.nn.CrossEntropyLoss() # = -log p(正确答案) = 香农的"意外程度"
# ═══ 部件 3:优化器 —— "怎么在 H 里找到最好的那个" ══════════
# 历史原型:牛顿-拉弗森迭代 (1669) / 柯西 1847 最速下降法
opt = torch.optim.SGD(model.parameters(), lr=0.1)
# ═══ 部件 4:检验 —— "没见过的数据上还行吗" ════════════════
# 历史原型:开普勒拿椭圆去预测下一次冲日 / 高斯拿最小二乘去预测谷神星再现的位置
for x, y in train_loader:
loss = loss_fn(model(x), y)
opt.zero_grad(); loss.backward(); opt.step() # ← 牛顿的流数 ẋ,1665
evaluate(model, test_loader) # ← 这一行才是"科学",前面都是"拟合"
四个部件,没有一个是 21 世纪发明的。 最年轻的是 1948 年的交叉熵,最老的是 1669 年的牛顿迭代。
深度学习真正新的东西只有两样,而且都不是数学:
- 自动微分的工程化(Linnainmaa 1970 提出反向模式 → 1986 反向传播普及 → 2016 PyTorch 让它变成一行
.backward())。数学上它就是链式法则,1676 年莱布尼茨就有了。新的是"任意复杂的程序都能自动求导"这个工程能力。 - 算力与数据的规模。CUDA(2007)让矩阵乘法便宜了三个数量级,互联网让文本数据便宜了六个数量级。
所以那句"AI 就是数学建模"不是修辞,是字面事实。 一个大语言模型是一个条件概率模型 \(p(\text{下一个词} \mid \text{上文})\),用极大似然拟合,用梯度下降优化,用留出集检验。每一个环节都能在 1948 年之前的数学文献里找到。
变的不是数学,是成本结构:以前"让人想出机理"比"让机器搜参数"便宜,所以牛顿范式赢;现在反过来了,所以托勒密范式复活了。这就是 Sutton 那篇《苦涩的教训》的经济学实质 —— 它不是在说"人类的知识没用",它是在说"在算力年年降价的世界里,赌算力的那一方复利更高"。
⚛️ 0.4.6 建模的背后是物理:AI 的每一个零件都能在物理里找到原型
这是本文最想让你记住的一节。人们说"深度学习是炼金术",通常是因为没看见它下面那层地基 —— 它绝大部分核心构件,是统计物理直接搬过来的。2024 年霍普菲尔德和辛顿拿的是物理学诺贝尔奖,不是巧合,是盖章。
对照表:AI 构件 ↔ 物理原型
| AI 里的东西 | 物理里的原型 | 谁、什么时候 |
|---|---|---|
| loss(损失) | 能量 / 哈密顿量 —— 系统总要往低能态滚 | 拉格朗日 1788、哈密顿 1833 |
| 梯度下降 | 耗散系统的弛豫:\(\dot{x} = -\nabla E\),就是过阻尼的牛顿第二定律 | 亚里士多德式动力学 / 柯西 1847 |
| 带动量的 SGD | 真·牛顿第二定律 \(m\ddot{x} = -\nabla E - \gamma\dot{x}\)(小球滚下山谷带摩擦) | 牛顿 1687 |
| softmax(含温度 \(T\)) | 玻尔兹曼分布 \(p_i \propto e^{-E_i/kT}\) —— 采样温度就是物理温度 | 玻尔兹曼 1877 |
| 配分函数 / 归一化项 | 配分函数 \(Z=\sum e^{-E_i/kT}\),一字不改 | 吉布斯 1902 |
| Hopfield 网络 | 伊辛模型(磁铁里自旋互相拉扯,滚向最低能量态) | 伊辛 1925、霍普菲尔德 1982 |
| 玻尔兹曼机 | 直接以玻尔兹曼命名的随机伊辛模型 | 辛顿、谢诺夫斯基 1985 |
| 扩散模型 | 非平衡热力学 + 朗之万方程:加噪 = 扩散,去噪 = 逆扩散 | 朗之万 1908、Sohl-Dickstein 2015 |
| VAE 的 ELBO | 变分自由能 \(F = E - TS\) 的最小化 | 吉布斯 / 费曼变分原理 |
| 注意力机制 | 平均场近似:每个粒子感受到的是其他所有粒子的加权平均 | 外斯 1907 平均场理论 |
| BatchNorm / LayerNorm | 量纲无关化、重整化群里的尺度变换 | 白金汉 Π 定理 1914、威尔逊 1971 |
| 卷积网络 | 平移不变性 —— 物理定律在哪儿都一样 | 诺特 1918 |
| Transformer 的置换等变 | 全同粒子的不可区分性 | 量子统计 1926 |
| 残差连接 / ResNet | 微分方程的欧拉步 \(x_{t+1}=x_t+f(x_t)\),即 Neural ODE | 欧拉 1768 |
| 正则化 / 权重衰减 | 最小作用量里的约束项 / 弹性势能 | 莫佩尔蒂 1744 |
| 早停、退火 | 模拟退火:温度慢慢降,避开局部极小 | 冶金 → Kirkpatrick 1983 |
每一行都不是比喻,是数学上的同一个式子。 你可以用代码验证最著名的那一行:
import torch
# 断言:softmax 就是玻尔兹曼分布,logits 就是负能量,采样温度就是物理温度
E = torch.tensor([0.0, 1.0, 2.5]) # 三个微观态的能量(单位 kT=1)
T = 0.7
boltzmann = torch.exp(-E / T) / torch.exp(-E / T).sum() # 玻尔兹曼 1877
softmax = torch.softmax(-E / T, dim=0) # PyTorch 2016
print(boltzmann) # tensor([0.7888, 0.1890, 0.0222])
print(softmax) # tensor([0.7888, 0.1890, 0.0222])
assert torch.allclose(boltzmann, softmax) # ← 同一个东西,隔了 139 年
你调 LLM 的
temperature=0.7时,你字面意义上是在设定一个热力学温度:\(T\to 0\) 系统冻结在基态(贪心解码,永远输出最可能的词),\(T\to\infty\) 系统完全无序(均匀随机胡说)。"温度"这个参数名不是比喻,是它的本名。
再深一层:为什么"物理能被数学建模"这件事本身成立?
这是维格纳 1960 年那篇著名论文的标题:《数学在自然科学中不合理的有效性》。他说这是"一份我们既不理解也不配得到的奇妙馈赠"。
到今天,最有解释力的回答是一个词:对称性。
诺特定理(1918):每一个连续对称性,对应一个守恒量。
- 物理定律在时间上平移不变 ⟹ 能量守恒
- 在空间上平移不变 ⟹ 动量守恒
- 在旋转下不变 ⟹ 角动量守恒
这句话把"世界为什么可建模"讲清楚了:世界之所以能被少量方程描述,是因为它高度对称、高度冗余。 如果每个时刻每个地点的规律都不同,就没有任何模型可言,也不会有科学。
而这条定理直接就是深度学习里"归纳偏置"的定义:
| 你假设的对称性 | 你得到的网络架构 |
|---|---|
| 平移等变(图像里猫在左在右都是猫) | CNN |
| 置换等变(集合里元素没有顺序) | Transformer / Deep Sets |
| 旋转等变(分子转个角度还是那个分子) | 等变图网络(AlphaFold、分子模拟) |
| 时间平移等变(规律不随时刻变) | RNN / 状态空间模型的权重共享 |
架构设计 = 声明你相信世界有哪些对称性。 这是"几何深度学习"纲领的一句话总结,也是诺特定理在 21 世纪的转世。
而最小作用量原理(莫佩尔蒂 1744、哈密顿 1833)是最后那块拼图,也是全文最漂亮的收束:自然界的一切演化,都是在让某个泛函取极值。 光走最快的路(费马),粒子走作用量最小的路(哈密顿),系统滚向自由能最低点(吉布斯)。
也就是说 —— 物理是自然在做优化,AI 是我们在做优化,用的是同一门数学(变分法)。 你写
loss.backward()的那一刻,你在做的事和一束光穿过水面时做的事,是同一件事。
📈 0.4.7 为什么建模在今天"起来了"?—— 一条七件套的历史依赖链
"AI 突然爆发"是一个错觉。真实情况是:建模需要七件工具,人类花了 2000 年才凑齐最后一件。缺任何一件,这事都发生不了。
| # | 必要条件 | 何时到位 | 缺了它会怎样 |
|---|---|---|---|
| 1 | 符号代数(能写出"任意的方程") | 韦达 1591 → 笛卡尔 1637 | 只能像花拉子米那样用整段话描述一个方程,无法处理 \(10^9\) 个参数 |
| 2 | 微积分(变化率、极值) | 牛顿/莱布尼茨 1666–1675 | 没有"沿梯度往下走"这个概念 |
| 3 | 误差理论 / 概率(数据是脏的) | 高斯 1801、拉普拉斯 1812 | 数据一有噪声模型就崩,无法处理真实世界 |
| 4 | 统计力学(大量随机个体 → 宏观规律) | 玻尔兹曼 1877、吉布斯 1902 | 没有能量/熵/配分函数这套语言,也就没有 loss |
| 5 | 可计算性 + 计算机(能真的把式子跑出来) | 图灵 1936、ENIAC 1945 | 高斯手算谷神星要几周;今天的模型手算要几亿年 |
| 6 | 自动微分(任意程序都能求导) | Linnainmaa 1970 → BP 1986 → PyTorch 2016 | 每换一个模型就要人肉推一遍梯度,迭代速度慢 1000 倍 |
| 7 | 算力 + 数据(便宜到可以浪费) | CUDA 2007、互联网语料 2010s | 有算法也训不动 —— BP 1986 年就有了,卡了 26 年 |
第 7 条是最容易被低估的。反向传播 1986 年就发表了,AlexNet 是 2012 年。 中间那 26 年缺的不是数学,是便宜的算力和数据。
这就引出建模范式转移的经济学本质:
建模的总成本 = 人想机理的成本 + 机器搜参数的成本
(随时间恒定) (每 2 年减半)
- 在 1687 年,"人想机理"是唯一可行的路(机器搜参数的成本 = ∞)→ 牛顿范式必然获胜。
- 在 2025 年,"机器搜参数"的成本掉到了地板上 → 托勒密范式(加更多本轮)必然复活。
范式转移从来不是"谁更聪明",而是"当下哪种成本更低"。 这也预言了下一步:当算力继续变便宜、而数据变稀缺时(高质量语料已接近枯竭),钟摆会往回摆一点 —— 那就是"物理信息神经网络(PINN)"、"神经算子"、"世界模型"、"AI for Science" 正在做的事:把机理(微分方程、守恒律、对称性)重新塞回损失函数里,用机理换数据。
一行代码就能看懂这个"回摆": ```python
纯统计学习:只跟数据较劲
loss = ((u_pred - u_obs) ** 2).mean()
物理信息神经网络(PINN):再加一项"你必须服从这条物理定律"
residual = du_dt - alpha * d2u_dx2 # ← 傅里叶 1807 的热方程 loss = ((u_pred - u_obs) ** 2).mean() + lam * (residual ** 2).mean() ``` 第二行就是牛顿范式和托勒密范式的握手:数据管内插,物理管外推。这大概率是下一个十年的主线。
🔨 0.4.8 "建模就是数学当工具用":两种数学模式,别搞混
这是全文的落点。数学有两种用法,它们的评价标准完全相反:
| 数学作为真理(纯数学) | 数学作为工具(建模) | |
|---|---|---|
| 问的问题 | 这是不是真的? | 这有没有用? |
| 评价标准 | 证明是否严格 | 预测是否准、决策是否变好 |
| 对近似的态度 | 近似是缺陷,要消除 | 近似是全部 —— 忽略什么才是核心技艺 |
| 对反例的态度 | 一个反例就毙掉定理 | 一个反例只是"适用范围之外" |
| 典型句式 | "\(\forall x\),……" | "在 \(x \ll 1\) 且噪声近似高斯时,……" |
| 失败的样子 | 证明有洞 | 模型在真实数据上崩了 |
| 代表人物 | 欧几里得、希尔伯特、格罗滕迪克 | 阿基米德、傅里叶、冯·诺依曼、香农 |
傅里叶是最好的例子。 1807 年他宣称"任意函数都能展成三角级数",拉格朗日当场反对,因为他的证明是错的(不严格)。但他的模型是对的 —— 热方程算出来的结果跟实验吻合。
后来发生的事最有意思:为了搞清楚"傅里叶到底在什么条件下成立",数学家被迫发明了 —— 严格的收敛概念(柯西、狄利克雷)、黎曼积分、勒贝格积分、康托尔的集合论(康托尔研究的正是三角级数的唯一性问题)。
一个"不严格但有用"的工程模型,逼出了整个 19 世纪的实分析和集合论。 这是"数学当工具用"最壮观的一次反哺:工具捅出的窟窿,成了下一代纯数学的疆域。
今天的深度学习正处在完全相同的位置:它是"不严格但极其有用"的傅里叶时刻。所谓"缺乏理论"不是耻辱,是1807 年的正常状态 —— 泛化理论、缩放律、表示学习理论,就是正在被逼出来的那个"实分析"。
建模者的六条工作守则
把上面的历史压缩成能带走的东西:
- 没有误差项的不是模型,是信仰。 高斯的伟大不在于他会解方程,而在于他显式地给误差建了模(正态分布)。任何一个模型,你都要能说出"我预期它错多少、往哪个方向错"。
- 所有模型都是错的,有些是有用的(Box)。问"这个模型对不对"是问错了;要问"在什么范围内、以多大误差、为哪个决策服务时它够用"。
- 先量纲,再数值。 白金汉 Π 定理是最便宜的查错工具:等号两边量纲不同,后面全白算。深度学习里的对应物是 shape 对不对 —— 这是 99% 的 bug 所在。
- 查极限情形。 \(t\to 0\)、\(t\to\infty\)、参数取 0、取 \(\infty\) 时,模型是否退化成一个你已知正确的简单模型?(相对论要退化回牛顿,Transformer 在序列长度 1 时要退化回 MLP。)
- 守恒量是免费的测试用例。 能量、质量、概率归一、总人数 —— 模拟跑一万步后它们还守恒吗?不守恒说明积分器或代码错了。
- 分清三个层次:描述 / 预测 / 干预。 拟合曲线是描述,测试集准确率是预测,"如果我改变 X 会怎样"是干预(因果)。相关性给不了你干预。 今天的大模型主要活在第二层,而科学和决策要的是第三层 —— 这是"AI 能不能做科学"这个问题的真正技术焦点。
以及三条戒律(用血写的)
- LTCM(1998):两个诺奖得主的对冲基金,模型假设收益率分布有薄尾。俄罗斯违约,尾部事件发生,四个月亏掉 46 亿美元。错的不是数学,是"我假设的分布"这句话被忘掉了。
- 洛伦兹(1963):三个变量的简化对流方程,初值差 \(10^{-6}\),几十步后完全发散。混沌不是模型不好,是这类系统的本性 —— 有些东西原理上就无法长期预测。 知道模型的极限在哪,是建模者的成年礼。
- 托勒密(150–1543):一个预测极准、可解释性为零的模型,可以统治一千四百年,并且在它被推翻之前,所有人都觉得它是对的。
🎨 0.4.9 配套脚本(待实现于 ch00_4_modeling/)
按本项目的规矩:每个脚本必须产出一张图,且必须从真实现象出发。
| 脚本 | 现象 → 数学 | 产出的可视化 |
|---|---|---|
ptolemy_epicycle_fourier.py |
火星逆行 → 本轮叠加 → 傅里叶级数 | 动画:\(N\) 层本轮逐步逼近任意闭合曲线,\(N\) 越大越像 |
kepler_vs_newton.py |
第谷的火星数据 → 拟合 vs 积分 | 并排:拟合椭圆的残差 vs 从 \(F=-GMm/r^2\) 积出的轨道 |
kepler_8_arcmin.py |
那 8 角分 | 残差图:圆轨道的残差有系统性结构 = 模型没抓完 |
overfit_elephant.py |
冯·诺依曼的大象 | 4 个复参数画出一头大象,5 个让鼻子摆动 —— 过拟合的视觉证明 |
softmax_is_boltzmann.py |
磁铁自旋 → 采样温度 | 温度 \(T\) 从 0 扫到 \(\infty\),玻尔兹曼分布与 softmax 曲线完全重合 |
gradient_descent_is_physics.py |
小球滚山谷 | 同一个势能面上:过阻尼(SGD) vs 带惯性(Momentum) 的轨迹对比 |
hopfield_ising.py |
磁铁退磁 → 联想记忆 | 能量地形 + 从残缺图案收敛回原图的过程 |
pinn_heat_rod.py |
傅里叶的热棒 | 纯数据拟合 vs 加了热方程残差项:外推区域的差距 |
lorenz_predictability.py |
天气 | 两条初值差 \(10^{-6}\) 的轨迹分道扬镳,画出可预测时间窗 |
modeling_loop_falling_body.py |
自由落体 | 抽象→求解→回代→检验 四步闭环的一张总图(本文 0.4.1 的代码) |
dimensional_analysis_check.py |
单摆周期 | 只靠量纲分析推出 \(T\propto\sqrt{L/g}\),不解任何方程 |
与其他章节的关系
- Chapter 0.5(
math_his_cha0_6_symbols.md之前那篇,公式即直觉的化石):本文的"物理原型表"是它的展开 —— 为什么建模里反复出现平方、\(1/r^2\)、\(\log\)、\(e^{-x}\)。 - Chapter 0.7(
ch00_7_physics_first/):物理优先。本文是它的方法论总纲 —— 0.7 讲"从现象出发学公式",本文讲"从现象出发造公式"。 - Chapter 0.96(
ch00_96_computability/):可计算性。它回答了建模的一个前置问题 —— 凭什么相信程序能模拟世界(丘奇–图灵),以及哪些东西原则上模拟不了。 - Chapter 5(傅里叶):本文 0.4.3 的本轮 = 那一章的三角级数,建议两边互相链接。
- Chapter 6(概率):高斯的误差理论、玻尔兹曼的统计力学,是本文第 3、4 件必要条件。
- Chapter 7(深度学习):本文 0.4.5 的四部件表,就是那一章"每行代码标注历史来源"的纲。
🧠 本文小结
建模就是把数学当工具用。 不是求真,是求用;不是消灭近似,是挑选近似。
AI 就是数学建模,四个部件(假设空间、损失函数、优化器、检验)没有一个是 21 世纪的发明,最年轻的也有 78 岁。变的不是数学,是成本结构:算力便宜到让托勒密的"加更多本轮"重新成为最优策略。
建模背后是物理:loss 是能量,softmax 是玻尔兹曼分布,梯度下降是耗散弛豫,架构是对称性声明,训练是自然界干了四十亿年的那件事 —— 最小化一个泛函。
而世界之所以可以被建模,是因为它对称(诺特),因为它冗余,因为同一条规律在昨天和今天、在这里和那里都成立。这才是那份"不合理的有效性"的来源。
所以:托勒密教会我们,一个不懂原理的模型可以极其好用;开普勒教会我们,残差里藏着下一场革命;牛顿教会我们,机理换来的是外推的权力;高斯教会我们,没有误差项的不是模型;傅里叶教会我们,不严格但有用的工具会逼出下一代纯数学;洛伦兹教会我们,有些东西原理上就不可预测。
这六个人的教训加起来,就是今天你坐在一块 GPU 前,该有的全部世界观。