AI Feynman:从数据中发现物理方程
符号回归与 AI Feynman:让机器像物理学家一样发现方程
你是否想过,如果给机器一堆实验数据,它能不能自己总结出物理定律?符号回归正是这样一种技术,它从数据中搜索既能精确拟合又足够简洁的数学公式。而 AI Feynman 则更进一步——它像一位天才物理学家那样,利用对称性、量纲分析和神经网络,从海量候选公式中快速锁定隐藏的物理方程。本教程将带你从零了解符号回归,并掌握 AI Feynman 的核心思想与实际用法。
什么是符号回归?
传统回归方法(如线性回归、多项式拟合)需要你提前指定模型形式,比如 y = a*x + b。符号回归完全不同:它连公式的结构也一并寻找。给定输入变量 x₁, x₂, ... 和输出 y,符号回归会生成诸如 y = sin(x₁) + log(x₂²) 这样的表达式,并优化其中的常数。
这一过程通常基于 遗传编程:程序随机生成大量数学表达式,通过变异、交叉、选择等进化操作,逐步逼近最佳公式。但传统符号回归在面对高维数据时,搜索空间爆炸式增长,很难找到既准确又简洁的方程。
AI Feynman 的诞生
2020 年,麻省理工学院的 Silviu-Marian Udrescu 和 Max Tegmark 在《Science Advances》上发表了 AI Feynman。它的名字致敬了物理学家理查德·费曼,目标是自动从数据中发现物理定律——而且要求发现的方程具备人类可理解的简洁性。
AI Feynman 之所以强大,是因为它融合了多种策略,大幅缩小搜索范围:
- 量纲分析 – 强制公式满足物理量纲一致性。
- 对称性检测 – 发现数据中的平移、缩放等不变性。
- 神经网络预训练 – 用神经网络拟合数据,再将其分解为成分函数(如多项式、三角函数等)。
- 模块化递归搜索 – 如果整体公式太复杂,先把问题拆分成子问题,分别求解后再组合。
这些技巧让 AI Feynman 能够从 100 个经典物理方程的数据集中,以极高准确率重新发现它们,包括万有引力定律、爱因斯坦质能方程等。
核心原理拆解
1. 维度分析与无量纲化
物理方程中,等号两边的量纲必须一致。例如距离 d = v*t 中,速度×时间给出长度,合理。如果算法随机拼接 d = v + t,量纲错误,直接淘汰。AI Feynman 自动识别每个变量的量纲(长度、时间、质量等),并在搜索时只保留量纲正确的表达式,避免大量无意义组合。
2. 对称性发现
很多物理系统存在缩放对称性。比如,行星周期与轨道半长轴的关系(开普勒第三定律)对于距离单位的缩放保持不变。AI Feynman 会检测数据中是否存在尺度变换 x → λx 下输出按照已知规律变化的特性。一旦确定对称性,可显著约束方程的可能形式。
3. 神经网络“分而治之”
这是 AI Feynman 最巧妙的部分。对于复杂数据,它先用一个全连接神经网络训练,得到高精度黑箱模型。然后通过观察神经网络的激活模式或采用自解释方法,将复杂的拟合曲面近似分解为若干简单函数的总和或乘积。例如,神经网络可能暗示数据符合 y = f₁(x₁) * f₂(x₂),其中 f₁ 像是正弦函数,f₂ 像是多项式。于是符号回归只需在极小的候选函数集中搜索即可。
4. 递归问题分解
如果直接搜索整个表达式太困难,AI Feynman 会尝试将数据分割:比如某些变量只影响一个子项。通过计算变量间的互信息,系统判断是否可以拆解为 y = g(x₁) + h(x₂, x₃) 这样的形式。然后对 g 和 h 分别进行符号回归,最后组合。这种递归策略让搜索复杂度从指数级降为多项式级。
AI Feynman 2.0 的改进
2021 年,团队发布了 AI Feynman 2.0。它在以下方面做了提升:
- 更通用的神经网络解析器:能够处理任意多个变量的任意连接方式。
- 更丰富的函数库:支持根号、绝对值、指数、对数、双曲函数等。
- 更稳健的对称性识别:对噪声数据的鲁棒性更强。
- 开源实现:提供 Python 代码,普通电脑即可运行。
五分钟上手实战
我们可以通过 Udrescu 等人提供的开源代码来体验 AI Feynman。以下基于原版 AI Feynman 的 Python 示例(简化版流程)。
步骤一:安装依赖
git clone https://github.com/SJ001/AI-Feynman.git
cd AI-Feynman
pip install -r requirements.txt
步骤二:准备数据
创建一个 CSV 文件,包含输入和输出列。例如,我们要发现 y = x₁² + sin(x₂)。生成数据:
import numpy as np
import pandas as pd
np.random.seed(0)
x1 = np.random.uniform(0.1, 5, 100)
x2 = np.random.uniform(0.1, 5, 100)
y = x1**2 + np.sin(x2)
df = pd.DataFrame({'x1': x1, 'x2': x2, 'y': y})
df.to_csv('test_data.csv', index=False)
步骤三:运行符号回归
调用 AI Feynman 的核心函数(实际 API 可能因版本而异,此处展示概念):
from aifeynman import AIFeynmanRegressor
reg = AIFeynmanRegressor(
max_time=60, # 最大搜索时间(秒)
complexity_penalty=0.001 # 复杂度惩罚,鼓励简洁公式
)
reg.fit(df[['x1', 'x2']], df['y'])
print("发现的方程:", reg.best_eq)
大约几秒到几分钟后,程序会输出类似 x1**2 + sin(x2) 的表达式。如果一次未成功,可以调整超参数或增加时间。
限制与适用场景
AI Feynman 不是万能魔法棒。你需要清楚它的边界:
- 变量数量:原始论文测试最多约 10 个变量。变量更多时,即使采用分解技巧,搜索仍会变慢。
- 噪声水平:对低噪声数据表现极好,但高噪声(超过 10%)会导致符号恢复困难。可先进行降噪预处理。
- 函数形式:所发现的方程由预先定义的基本函数组合而成。如果真实方程含有特殊函数(如贝塞尔函数),且未包含在库中,AI Feynman 只能给出近似。
- 数据量需求:通常需要至少几百个数据点,以支持神经网络训练和对称性检测。
尽管如此,对于物理、工程、化学等领域中中等维度、低噪声、由已知基本函数构成的系统,AI Feynman 是强大的发现工具。
与传统符号回归方法的对比
| 特性 | 传统遗传编程 | AI Feynman |
|---|---|---|
| 维度处理 | 维度灾难,>5 维极慢 | 利用分解,可处理更高维 |
| 物理先验 | 无 | 内置量纲分析与对称性 |
| 神经网络辅助 | 无 | 用网络引导分解 |
| 结果的物理可解释性 | 常出现复杂无意义公式 | 高度简洁,符合物理直觉 |
| 运行速度 | 慢(纯进化搜索) | 快(多阶段剪枝) |
进阶学习资源
- 原始论文:Udrescu & Tegmark, “AI Feynman: A physics-inspired method for symbolic regression”, Science Advances (2020).
- 2.0 论文:Udrescu et al., “AI Feynman 2.0: Pareto-optimal symbolic regression exploiting graph modularity”, NeurIPS (2021).
- 开源仓库:github.com/SJ001/AI-Feynman (包含 100 个物理方程数据集)
- 其他符号回归库:
gplearn(基于遗传编程)、PySR(高性能多节点并行)、Operon(C++ 实现,速度快)。
如果你希望自己实现轻量级符号回归,可以先用 gplearn 感受进化算法如何搜索公式,再尝试将量纲约束等机制加入,逐步向 AI Feynman 的思想靠拢。
总结
符号回归是让机器学习“发明”数学公式的迷人领域,AI Feynman 通过注入物理学家式的洞察——关注量纲、对称性和模块化分解——成功地将这一技术推向实用。无论是重新发现教科书上的定律,还是分析你手中的实验数据,它都能给出简洁而深刻的物理方程。现在,克隆一份代码,让你的数据讲述自己的故事吧。