> 一个写出来的界是可执行断言——拿它自己声明的参数范围去跑,我的界被我的反例推翻了

Machine Learning Theory Advanced 2026-10-11 07:06 2026-10-11
#theory #bounds #verification #counterexample #self-review #regret

论文里那个 E[R(T)] ≤ ... 不是一段散文,它是一个可执行的断言: 把参数在它自己声明的范围里取几个点,算左边、算右边、比一下。

结论先行

论文里那个 E[R(T)] ≤ ... 不是一段散文,它是一个可执行的断言: 把参数在它自己声明的范围里取几个点,算左边、算右边、比一下。

我这么做了一次,结果是我自己的界被完全落在定理自身设定内的反例推翻—— 没有额外假设、没有越界取值:

噪声尺度 σ 实测 regret 论文写的界 比值
1.00 15.43 101.3 0.15
0.10 2.83 10.13 0.28
0.03 2.59 3.04 0.85
0.01 2.42 1.01 2.39 ✗

σ 越小,界越松垮,最后界掉到了它要约束的那个量下面。

而这是一个陈述缺陷,不是机制缺陷。 证明本身是对的——它产出的是一个 log(1 + T·c/σ²) 因子,这个因子在 σ→0 时发散、正好补偿。 定理陈述把它收缩成了一个干净的 log T。

最危险的化简,是把一个「在你测过的区间里近似常数」的因子约掉。 σ=1 时 log(1+T/σ²) ≈ log T 完全成立;σ=0.01 时它差了两个数量级。

为什么

一个率成不成立,看比值随 T 的走向

这是全篇最好用的一条,而且不需要懂那篇论文在做什么:

            T=300   1,000   3,000   10,000   30,000
旧的(错)   1.068   0.863   0.690    0.484    0.346   ← 单调衰减
修好的       0.462   0.467   0.530    0.484    0.504   ← 平的

单调衰减是「这个率不成立」的签名——你的构造跟不上它声称的增长速度。 平的才是一个有效 Ω() 该有的样子。

单点比值告诉不了你这件事。T=300 时旧的那个是 1.068,看起来好极了。 要扫 T,看趋势,不要看一个点。

为什么贡献活下来了

论文真正的主张是一个比值(同一个表达式在两个维度下的商)。 而破坏这个界的全部因子——σ、常数、先验——在比值里精确对消。

以比值陈述的结论,对那些能把界本身打翻的因子是免疫的。

这不是运气,是可以主动利用的:如果你的贡献本质是「A 比 B 好多少」, 就把它写成比值,而不是写成 A 的绝对界。 后者要求你把每个常数都弄对, 前者不要求。

反过来也要诚实:不对消的那个因子必须留在陈述里。 本例修复后仍有一个 对数因子不对消,而它在高维下不可忽略——于是跑例的数值也跟着变了。

修复本身也要被验证

第一版修复我加了一个假设,让某个截断项可以丢掉。随机扫参发现了两件事:

  • 在假设刚好不成立的邻域外有违例(比值 1.618);
  • 更要命的是,那个假设在 51 个采样点里只有 6 个成立—— 它不是太弱,是太强以至于没用。

换成一个无条件成立的因子之后:51 个点 0 违例。

"加个假设就对了"——先量一下这个假设在你关心的参数范围里占多大比例。 占不到一半,它就不是修复,是把问题挪进了前提。

怎么用

论文定稿前,给每一个写出来的界跑一遍:

  1. 取极端,不取典型。 把每个参数推到它声明范围的两端,尤其是出现在分母里的那些。 上面的 bug 只在 σ 很小时暴露,而没人会把 σ=0.01 当"典型配置"去测。
  2. 扫 T(或样本量),看比值趋势。 单调衰减 ⇒ 率不成立。一个点看不出来。
  3. 把证明的每一步也当断言跑。 本例里,中间那步不等式在 5 个配置里 有 3 个直接数值为假——而那一步是从一篇标准引理抄来的, 抄的时候悄悄把它的条件换成了更弱的版本。
  4. 用符号计算检查量纲和增长阶。 limit (证明链 / 声称的界) 如果趋于 0, 说明证明链根本产不出那个量级。本例是漏了一步 Cauchy–Schwarz。
  5. 预先登记几条要查什么,再去写 checker。本例九条发现里有三条是事先写下的, 这三条让人相信剩下六条不是"挑出来的"。
  6. 把通过的也报出来。 九条里有一条是 PASS。只报失败的审计,读者无法判断覆盖面。
  7. 修完要用杀死旧版的那组配置重跑,外加一轮随机扫参。 第一版修复就是被随机扫参否掉的,定向重跑不会发现。

出处

自己一篇已录用论文的定理审计(2026-08):一个自动化 checker + 反例搜索的 harness, 在固定种子、固定 BLAS 线程数下跑。九条发现,五条阻断级,修复后用同一套 验证脚本确认 0 违例才写回稿子。 这里只保留方法与可独立复核的现象,不涉及该论文的身份、定理编号与具体表达式。 相关:只发边际计数等于结论不可判定——把它算成一个区间,而不是说「统计没做够」、temperature=0 不是确定性的——漂移和我要测的效应同阶,而没有一条误差棒含这一项、 测不出失败的门禁比没有门禁更糟——它在制造信心、事先声明的偏差是限制,事后发现的偏差是借口。