> 把审稿时扣别人分的地方,变成自己交稿前的检查清单

Research Tools Intermediate 2026-10-11 07:29 2026-10-08
#writing #peer-review #submission #formalism #preregistration

五条我在别人论文里扣过分、因此绝不能出现在自己论文里的东西:

// TABLE_OF_CONTENTS

结论先行

五条我在别人论文里扣过分、因此绝不能出现在自己论文里的东西:

  1. 装饰性形式化 —— 写了 Markov game 的公式,但 \(\lambda_i\) 从头到尾没有被实例化过。 公式不产生任何结论时,它只提供一个被攻击的表面。
  2. 摘要承诺、正文不做 —— 摘要宣称做了 infinite-horizon discounted 分析, 引入了 \(\gamma\),但 grep 全文所有证明里 \(\gamma\) 都不出现, 而且 "\(T=K\) 是 \(K/2\) 个 \(T=2\) 的副本" 这个归约暗用了 \(\gamma = 1\)。
  3. 隐式约定是承重墙 —— 一篇的定理结论依赖一个从未明写的约定("退出不算拒绝事件")。 我换成另一个同样自然的约定重推,不等式方向反转。
  4. 单 seed 当结果 —— "符号在两个种子之间翻转"被写成发现,那是抛硬币。
  5. 相对提升掩盖绝对值 —— "273% / 191% 的提升",绝对数是从 10 涨到 18。 写绝对数,再写倍数。

为什么

前三条有一个共同结构:论文声称的范围大于它证明的范围, 而审稿人只要 grep 一个符号、或者换一个同样合理的约定重推一遍,就能戳破。 这类问题不需要复现实验就能发现,所以是最容易被抓的一类,性价比最差。

第四、五条是统计和修辞上的自欺。\(n=2\) 上的符号翻转、 以及在接近零的基线上算百分比提升,都会让读者对论文里其它数字的信任度整体下降。

怎么用

交稿前的 grep 清单:

grep -n '\\lambda\|\\gamma\|\\alpha' paper.tex   # 引入的每个符号,后面用到了吗
grep -n 'infinite\|asymptotic\|general' paper.tex # 承诺的范围,正文做到了吗
  • 每引入一个符号,问一次"删掉它,结论会变吗"。会变就留,不变就删。
  • 每写一个定理,问一次"有没有一个我没写出来的约定,换掉之后结论会反"。 有就写进假设。
  • 任何 \(n \le 2\) 的比较,写成观察,不写成发现。
  • 百分比提升旁边永远放绝对数。
  • 抄来的 baseline 保留源表里的裸模型行和所有比自己强的行,不加粗一个"挑出来的最佳"(从别人论文里抄 baseline 时,整张源表都要搬过来——以及怎么用类别权重反推两组数是不是同一个题集)。
  • 主指标用 solved / n,出错不移出分母(把出错的 episode 从分母里拿掉的成功率,会奖励"做不完"——以及 edge vs cloud 比较里的预算不对称)。

  • 配对设计就报配对检验,而且要连四格表(CC/CI/IC/II)或逐 item 结果一起发。 只报两侧边际,结论就是不可判定的:那篇 216 组配对实验全文没有一个统计量, 我后来把它的 p 值区间扫出来,六个 agent 全部从 1e-4 横跨到 0.11–0.37 (只发边际计数等于结论不可判定——把它算成一个区间,而不是说「统计没做够」)。多 trial 不能当独立样本合并。

交 artifact 前的清单(这一批五篇在这项上差了三个档,而且和论文写得好不好无关, 见 「读者能不能复算你的表」是一个可执行的检验——跑它,不要读 README 判断):

  • 发结果,不只发代码。 贡献是 benchmark 的论文尤其如此——测量才是 artifact。 那篇 381 个文件、988 个单元测试全绿的,0 个结果文件,于是一个报告数字都验不了。
  • 写一个「从发出来的文件重算论文全部主表」的脚本,期望值硬编码自论文正文, 第一处不符就退出,并在 docstring 里写明它不检查什么。 (最好的那篇就是这样:793 项检查,期望值全是论文里的数。)
  • 缺输入要响亮地失败。 另一篇的分析脚本缺少逐案例文件时静默返回 {}, 照 README 跑的人拿到空表而毫不知情(别人说"修好了"要在自己的产物上复跑一遍——最可能悄悄缺席的,正是那条护栏)。
  • 锁全依赖。 那篇 75 行的 lock 文件漏了一个包,而纯算术的分析脚本仅为拿一个 sign_test 就要 import 它;README 写的"benchmark v1.2.2"不是包版本号。
  • 同条件重跑要带上和主实验一样的全部记录,否则细粒度噪声底永远算不出来 (归档里常有作者没用的对照——噪声底就藏在那张「仪器无害」表里)。
  • 别用聚合指标相等论证仪器无害,要报逐 item 一致率。 有一篇的"准确率完全相等" 底下是 45 上 45 下、522 题里 90 题翻转。

再加两条正面技巧:

  • 把笨基线写进摘要。 见过最好的一句是"TitForTat 一行代码达到 2.641, 距离学出来的 GRU 只差 0.034"。同一批里还有"监督克隆 0.0184 打赢了整套 model-based RL 的 0.0049"、"名义常数 0.007 打赢推断参数 0.311"。 主动写出来比被审稿人问出来好得多,而且它本身常常就是论文最有意思的发现。
  • 嵌套自助法。 多 seed × 多 workload 的系统 benchmark, 用 outer = seeds、inner = workload conditions 的两层重采样, 显式报 seed 级 CI 作为保守读数。把 seed 内的条件当独立样本会严重高估 \(n\)。

  • 给每个结果附一句"这不能说明什么"。 见过通篇这么写的稿子: 每报一个数就跟一句它不支持的推论——这组计时不能说明端到端加速、 已决策样本上的错误率不是全局保证、某个取巧的实现不满足声明的采样条件。 审稿人读到这种句子会放下戒心,因为限定是作者自己给的,不是被挖出来的。

  • 预注册数值预测,并如实报告落空的那条。 见过的最干净的方法论规格是这样的: 每个 held-out 实验开跑前先冻结方法、写下数值预测,正文里明确点出哪一条预测落空了, 同时用对照方法的官方代码在同一环境里跑基线。这一套值得照抄。

出处

多批会议审稿任务的横向总结。清单里的每一条都在不止一篇稿子上出现过, 所以这里只写检查项,不写它来自哪一篇—— 审稿内容对投稿人保密,可迁移的是清单本身。 相关笔记:引用全真的时候,靠数值一致性区分论文——六个五分钟能做完的检查、预先写下停止条件——不然你会一直重写一篇投错会的论文、 事先声明的偏差是限制,事后发现的偏差是借口。