1. 符号回归中的“复杂度”与“可解释性”:一个经常被默认、却并不稳固的等号
符号回归大家都耳熟能详了:它不仅要拟合数据,还要吐出一个人可以读、可以想、甚至可以进一步拿去推导的方程。也正因为这个承诺,复杂度(complexity)几乎成了这个领域最常见的第二目标。除了拟合误差,我们通常还会最小化树大小、节点数、运算符数量、带权运算符数量,或者干脆做一个 accuracy-complexity 的 Pareto front。这个做法并不奇怪,因为表达式短一些、浅一些、少几层嵌套,通常确实更容易看。
但这里有一个默认前提:复杂度可以作为可解释性的代理。 根据Occam’s Razor原则,这个前提大多数时候是成立的,但并不严格。一个式子更短,不等于它更容易被人理解;一个式子包含更少的节点,也不意味着它更接近人类科学建模时偏好的形式。尤其在物理问题里,这个落差其实非常明显。一个包含少量三角、指数或嵌套分式的表达式,树长可能不大,但读起来可能非常拧;反过来,一个稍长的多项式、无量纲组合或者分层展开式,虽然节点更多,却往往更符合人的推理习惯。
因此,我觉得符号回归里“复杂度”这个概念可以分成三层来看。
第一层是纯语法复杂度。这类定义最常见,也最便宜。树大小、节点数、operator count 都属于这一类。它们的优点非常明显:稳定、通用、实现简单、适合直接放到搜索过程中做 regularization 或 Pareto optimization。SRBench 一类工作最终采用的也是这种偏统一、偏工程的复杂度指标,因为它足够可复现,方便跨算法比较。
第二层是轻语义复杂度。这类做法承认不同算子带给人的负担并不一样,因此尝试给函数符号加权。例如加减乘除、幂、log、exp、三角函数并不等权。Kommenda 等人的工作就明确讨论过:单纯的 size-related complexity 只描述表达式树的形状,而不能反映表达式内部运算的“认知难度”,所以可以加入对函数符号的语义区分。PSE 这篇工作在实现中采用的,也正是这种精神:表面上说是“operator 数量的 proxy”,实际代码里却已经是带权运算符复杂度了。
第三层才是我真正关心的:人类可解释性本身。 这件事并不是一个纯语法对象。人类在看一个公式时,会自然地受到许多因素影响:它是否容易心算或局部模拟,它是否可以分解成几个彼此可命名的块,它是否包含过多非算术操作,它是否反复嵌套某类函数,它是否和该领域常见的理论结构相似。换句话说,人类并不是在“数节点”,而是在“读结构”。
Virgolin 等人 2020 年的一篇工作,正是试图解决这个问题。他们没有再假设“size 越小越可解释”,而是反过来问:能不能直接从人的反馈里学一个 interpretability proxy? 他们设计了一个关于数学公式的问卷,围绕 simulatability 和 decomposability 两种常见的 proxy of human interpretability 收集数据,再用学习到的模型去估计一个公式的人类可解释性,并把这个模型嵌回多目标遗传编程中。这个思路在我看来很重要,因为它至少说明了一件事:在符号回归里,我们其实不必把“复杂度”永远当成不可动摇的手工先验;它完全可以是一个被学习的偏好函数。
所以,我们接下来要考虑的就不再是“什么复杂度定义最合理”,而是:人到底偏好什么样的公式?这个偏好能否被学习并在搜索中施加?
从这个角度看,树大小、运算符数量、带权复杂度,都更像是一种廉价的、静态的、预先写死的 proxy。它们的价值在于便宜,不在于真实。它们可以作为起点,但未必适合作为终点。
2. RLHF
在LLM的Post-training领域,经常用到一种名为RLHF(Reinforcement Learning from Human Feedback,基于人类反馈的强化学习)的微调技术。
在强化学习的传统设定里,我们默认任务目标已经被清晰地写成了奖励函数。可现实里恰恰有很多目标不是这样。
早在2017年,Christiano 等人指出:许多任务的目标复杂、含糊、难以精确定义,手写 reward 往往会造成“奖励函数被优化了,但真正想要的行为没有出现”。于是他们不再要求人直接写出 reward,而是让人去比较两段行为片段哪个更符合偏好,再用这些比较数据训练 reward model,最后让策略去优化这个 learned reward。
这个框架后来在大语言模型里被真正普及开来。InstructGPT 那篇工作给出了一条现在大家都很熟悉的流程:先做监督微调(SFT),拿到一个基本会“按要求回答”的初始策略;然后让标注者对多个回答做排序,训练一个 reward model;最后再用 PPO 之类的 RL 方法去优化语言模型,使它更符合人类偏好。这里最重要的思想是:当目标无法被显式写出时,可以先收集偏好,再学习奖励,再优化策略。
这不正是我们想要的吗?这套思想在符号回归里同样适用:我们不必把“可解释性”这个目标硬塞进一个手写的复杂度函数里,而是可以直接从人对候选公式的偏好中学一个 interpretability reward model,再让符号生成器去优化这个 learned reward。
3. 从 Virgolin 的 proxy 出发:能不能用 RLHF 去约束符号回归中的可解释性?
3.1 为什么这个方向是自然的
先看 Virgolin 的工作到底做了什么。它其实已经完成了 RLHF 思路中最关键的一半:从人类反馈学习一个偏好代理。 只不过它当时并不是沿着“alignment”这套叙事来讲,而是沿着“interpretable symbolic regression”去讲。它的核心逻辑是:
- 让人对公式的可解释性相关属性作出反馈;
- 用这些反馈拟合一个可解释性 proxy;
- 把这个 proxy 嵌入搜索过程,替代简单的 size minimization。
这和 RLHF 的结构已经非常相似了。差别主要在于:
- Virgolin 的 proxy 更像一个静态评估器,主要作为多目标优化中的第二目标;
- RLHF 则更强调“偏好—奖励—策略更新”的闭环,把 learned preference 直接用于改变生成分布。
能否把 Virgolin 那种静态 proxy,升级为一个真正参与公式生成过程的偏好学习框架?
3.1 一个可能的总体框架
第一层:先把问题表述成 preference learning,而不是 complexity engineering
这一步最重要。我们不再手写一个固定复杂度函数,而是让标注者在同一任务、相近精度的前提下,对两个候选公式回答一个更自然的问题:
- 哪个更容易理解?
- 哪个更像你愿意写进论文的最终公式?
- 哪个更容易手工推演、讲给别人听、或者映射到已有理论?
这里一定要强调“在相近精度下”进行比较,否则人会被拟合误差主导,偏好数据会退化成“谁更准就选谁”。换句话说,我们要学的是在 accuracy 已经基本过关之后,人对公式结构的偏好。
这一步甚至不一定要求标注者给分数。我反而觉得 pairwise preference 更可靠,因为“7 分和 8 分的差别是什么”很难说清,但“这两个里面哪个更顺眼”通常容易得多。
第二层:学一个 task-conditioned 的 interpretability model
我不太赞成只输入公式本身。因为公式是否好理解,经常是任务相关的。
举个简单例子:
- 在控制、流体、传热里,无量纲群往往很自然;
- 在某些经验建模问题里,分段、饱和、阈值结构可能更符合人的先验;
- 在基础物理里,某些三角或指数形式并不难懂,甚至比高阶多项式更自然。
所以,一个更合理的偏好模型,输入不该只有 expression tree,还应包括任务上下文,例如变量名、量纲、物理语义标签、是否已经无量纲化、误差水平、甚至候选公式所在的 Pareto 邻域。也就是说,我们要学的可能不是单纯的 $p(\text{interpretable}\mid f)$,而是 $p(\text{preferred}\mid f, \mathcal{T})$。
这一步其实比“复杂度定义”前进了一大步:复杂度通常是假设全任务共享一套静态标尺,而偏好模型允许不同任务、不同学科对“好公式”的判断不同。
第三层:再决定如何把偏好注入生成器
这时就出现三条路线。
第一条,最像经典 RLHF。训练一个 reward model,分数反映公式在当前任务下的可解释性偏好,然后把公式生成器当成 policy 去优化。生成器可以是序列模型、树生成模型、MCTS、遗传编程,甚至某种 grammar-guided sampler。只要它能产出候选公式,并支持基于 reward 改变采样分布,就能接进去。
第二条,更像 DPO。直接对同一任务下的好/坏公式对进行优化,让生成器提高偏好公式的概率,降低不被偏好的公式概率,而不显式训练 reward model。这个方案对深度生成式符号回归尤其合适,因为它更像“语言模型偏好对齐”的公式版。
第三条,更像 RLAIF。先写一套比较明确的“公式宪法”,再让辅助模型或规则系统产生部分比较信号。例如:
- 避免连续三层以上非算术操作嵌套;
- 优先选择可以拆成少量物理可命名模块的公式;
- 在物理问题中优先保留量纲齐次或无量纲结构;
- 对相同精度下的候选式,优先选择在局部极限下行为更可解释的表达;
- 对可以符号化简到相同形式的候选,不奖励纯表面差异。
这类方案的价值在于,它能显著降低人工标注成本,把少量高质量专家反馈扩展成较大规模的伪偏好数据。
3.3 这个方向真正难的地方在哪里
我觉得可行性是有的,但困难也很真实,而且并不只是“算力够不够”这么简单。
难点一:可解释性不是绝对属性,而是关系属性
一个公式的“好不好懂”往往取决于对谁而言、在什么任务里、和什么候选相比。对于熟悉傅里叶分析的人,正弦项不一定难;对于做热工关联式的人,某些经验指数关系反而很自然;而对另一类研究者,同样的形式可能完全陌生。
这意味着我们最好学的是偏好分布,而不是一个试图放之四海而皆准的“绝对解释性分数”。如果做得更进一步,甚至可以考虑 personalized interpretability,也就是根据不同用户群体学习不同偏好模型。
难点二:公式有等价性,偏好数据会被表示法污染
数学表达式的一个麻烦在于,不同写法可能是同一个式子。比如因式分解前后、常数吸收前后、对数幂变换前后,表面长度和结构差别很大,但数学上几乎等价。如果不做 canonicalization 或符号化简,偏好学习很容易学到“排版习惯”而不是“结构偏好”。
因此,这类系统必须把等价类处理当成核心基础设施,而不是后处理小修小补。至少要尽可能做符号化简、常数标准化、树结构规范化,最好还能对“可被局部代换解释为同一结构”的公式做聚类。
难点三:人类反馈很贵,而且专家反馈更贵
这也是为什么我不认为“完整人工 RLHF”会是第一步的最佳选择。符号回归的可解释性判断,经常需要一定数学或领域背景,不像一般文本偏好那样可以大规模众包。因此,更现实的路线可能是:
- 先用 Virgolin 一类问卷数据或小规模专家数据得到第一版 proxy;
- 再用主动学习,只对 reward model 最不确定的候选对请求人工比较;
- 同时引入 constitution/rule-based feedback 扩充数据;
- 最后只在关键任务上让专家做高价值校正。
难点四:偏好约束可能和精度、发现真规律的目标发生冲突
这是我觉得最需要警惕的一点。物理规律并不保证总是“人类第一眼觉得最顺眼”的。过强的可解释性偏好,可能会把搜索推向过度简单、过度教科书式的区域,反而错过真实但稍显复杂的结构。
所以更合理的方式可能是:
- 仍然保留 accuracy 或 evidence 作为硬约束或主目标;
- 把可解释性当作在近似等精度模型之间做选择的偏好;
- 用 KL 约束、Pareto front 或 constrained optimization 防止生成器为了迎合偏好而牺牲太多真实性。
4. 参考
- Paul F. Christiano, Jan Leike, Tom B. Brown, Miljan Martic, Shane Legg, Dario Amodei. Deep Reinforcement Learning from Human Preferences. NeurIPS 2017.
- Long Ouyang, Jeff Wu, Xu Jiang, et al. Training Language Models to Follow Instructions with Human Feedback. NeurIPS 2022.
- Rafael Rafailov, Archit Sharma, Eric Mitchell, Stefano Ermon, Christopher D. Manning, Chelsea Finn. Direct Preference Optimization: Your Language Model is Secretly a Reward Model. NeurIPS 2023.
- Yuntao Bai, Saurav Kadavath, Sandipan Kundu, et al. Constitutional AI: Harmlessness from AI Feedback. 2022.
- Marco Virgolin, Andrea De Lorenzo, Eric Medvet, Francesca Randone. Learning a Formula of Interpretability to Learn Interpretable Formulas. PPSN 2020.
- Michael Kommenda, Andreas Beham, Michael Affenzeller, Gabriel Kronberger. Complexity Measures for Multi-objective Symbolic Regression. 2021.
- William La Cava, Patryk Orzechowski, Bogdan Burlacu, et al. Contemporary Symbolic Regression Methods and their Relative Performance. 2021.
