← 专著首页目录专著栏目

第六编 三条款

第五十九章 预注册方法学:冻结什么、何时冻结、怎样防作弊


整桩两千年的悬案,就是被”倾向于支持”这种措辞维持下来的。

这句话不是感慨。两侧都拥有大量真实的材料,两侧都从材料中读出了倾向,而倾向从不与倾向正面冲突——它们可以在同一批数据上共存几十年。要让这桩案子走出这个循环,需要的不是更多材料,是一套使说法受约束的制度。本章写这套制度。

一、冻结什么

冻结清单共五项。它们的共同特征是:每一项都是一个可以在看到读数之后被调整、并且调整之后读数会改变的选择。

其一,结果距离 d 的完整定义。 包括对齐算法(或所用度量的不变性说明)、表征相似度度量、层的选取规则、分布外探针集合的全部条目。探针必须逐条列出,不能只说”若干条分布外探针”。

其二,噪声基线的定义。 用什么作为”同一条路径内的正常波动”,怎么测,取多少对。

其三,衰减律的拟合族与模型选择准则,以及 κ 的置信区间算法。 拟合族是一个极强的自由参数,第五十四章第三节已经说明它会直接改变外推出来的截距。

其四,条款二的语料统计量清单与回归设定。 哪些统计量进入回归、以什么形式进入、可解释方差怎么算。

其五,条款三的性质 Q 清单、检测方法、比例阈值 q 与 q′、预算 B。 包括”总体性能相当”的区间定义与”始终不出现”的观察窗口。

五项之外还有一条总则:凡是执行中发现需要修改的,只能作为下一跑的新冻结项,不能追溯修改本跑。 本跑的读数按原定义报告,哪怕原定义已被证明有问题——这一点在下面第四节会有一个真实的例子。

二、何时冻结,以及怎样证明冻结在先

冻结的时间点是:在接触任何读数之前。

“任何读数”包括预跑、试跑、调试时顺手看到的中间结果。这条线要划得比直觉严格,因为污染不需要作弊就会发生:一次调试中扫到的数字,足以让人在后续的选择中无意识地偏向某一侧。

证明冻结在先的办法是公开摘要值。把冻结文件与探针集各自算出摘要值,连同预注册文本一起公开,然后执行。首跑采用了这个办法:探针集共 112 条,摘要值的前十六位是 e3b9d8a2795cceee,在执行之前冻结,此后未改。第六十章会把首跑的预注册全文连同这个值一起摆出来。

这套办法能证明的事情非常有限,必须说清它的边界:

它能证明的:文件在执行之前就是那个样子;探针没有在看到读数之后被增删。

它不能证明的:文件写得对;探针选得好;判据本身没有系统性偏向。

边界的后半截不是无关紧要的技术细节。它是本章第四节的全部内容。

三、三条防作弊纪律

其一,先写判负再看数据。 四条败绩条件在首跑之前公开,位置在第五十八章。这条纪律防的是事后构造一组自己恰好没有触发的条件。

其二,报告不利读数,且与有利读数同等篇幅。 任何一条被判负、或任何一个通道给出不利方向的读数,都必须与通过的部分同等分量地写出,不得降格为脚注、附录或”另有待论”。

这一条在首跑中经受了一次实测。表征通道给出的是通过方向的读数,行为通道给出的是判负方向的读数。若只报前者,这一跑看上去是一次漂亮的通过;若只报后者,它是一次清楚的败绩。两种写法都能成文,两种都是作弊。 本书两个通道并排写,篇幅相当,从第六十二章与第六十三章各一章可以看出这条纪律在版面上的落实。

其三,不以趋势代极限。 若拟合不能把 κ 与噪声基线分开,或规模点不足以支持外推,结论写”未能分辨”,不写”倾向于支持”。

第三条最重要,也最容易被规避——因为”倾向于支持”这句话从来不是谎言,它通常是对图形的准确描述。它的问题在于它把一个未完成的判决说成了一个已完成的方向。本书对它的处理是取消这个措辞本身:在本书中,条款的结论只有三种取值——通过、判负、未能分辨。没有第四种。

四、还有一处:清单的完备性本身不可冻结

上面五项冻结的是”每一项里写了什么”。它没有冻结、也无法冻结的是:这张清单是不是齐的。

首跑给了一个例子。预注册里冻结了距离的定义、层的选取、探针的条目、噪声基线的定义,唯独没有规定”两个通道的读数在合成之后是否可以用于判决”——因为写的时候默认了合成是一个技术细节。执行之后才发现,那个默认的权重足以替作者做出裁决。这一条后来补进了第五十五章,成为第四条硬规定,但它是被读数逼出来的,不是被清单想出来的。

这件事没有一般的解法。一份冻结清单的完备性,只能由执行来检验;而执行一次只能检验一次。能做的只有两件:

其一,每跑完一次,把”本跑发现清单里缺了什么”作为一个独立的产出项记录下来,与读数同等分量。本编的第六十五章与第五十五章第四节就是这样产生的。

其二,承认由此推出的一条限制——单次预注册跑不构成判决,无论执行得多干净。判决需要一个序列,其中至少有一次的清单已经经受过前一次执行的修订。

五、首跑对冻结项清单的一处修订

这一节是本章最有价值的部分,因为它记录的是这套制度的一次失效。

首跑的冻结项第二条——噪声基线——写的是”同一训练轨迹内相邻检查点之间的距离”。这个选择在预注册时的理由是它偏保守:同一轨迹内相邻两步的差异应当远小于不同路径之间的差异,用它作分母,得到的比值会偏小,不利于本书。理由本身没有错。

执行之后暴露出一件预注册没有预见的事:这条基线跨规模不可比。

在三个较小的规模上,这个基线稳定在 0.0134、0.0129、0.0109;到最大规模跳到 0.0306,接近三倍。而归一化后的比值在最大规模处从 40.4 掉到 13.4——主要不是分子变了,是分母变了:分子只从 0.441 降到 0.411。

原因不难理解,只是此前没有想到:同一轨迹内相邻检查点之间的距离,测到的是训练在该规模、该时刻的推进速率,而这个速率本身随规模变化。它不是一把跨规模恒定的尺子,它是一把自己会伸缩的尺子。

后果是明确的:首跑的归一化曲线不能作为规模趋势的证据。各规模内部”路径间远大于路径内”这一条比较仍然有效,但跨规模的那条趋势线作废。

修法(下一跑必须执行):噪声基线改用同种子、同数据次序、仅由数值非确定性造成的重训;或改用同一轨迹内多对等距检查点的距离分布的下界估计。二者都不依赖训练的瞬时推进速率。

按本章第一节的总则,这个修订不追溯。首跑的读数仍按原定义报告,同时在正文中标明该定义的缺陷。第六十五章专章处理这件事的执行层细节,包括完整的数字与下一跑的改法。

六、这套制度挡不住的那一类错误

由上一节可以直接得到本章的结语,它同时是本编留给全书的最实在的一件东西:

预注册保护的是”事后不许改判据”,它不保护”事前把判据写错”。

这两类错误的性质完全不同。第一类是意志问题,制度可以挡;第二类是知识问题,制度挡不住——在执行之前,没有人知道那条基线会跨规模伸缩,包括写下它的人。冻结把一个错误的定义同样牢固地冻在了里面,而且冻得越牢,它在整跑中造成的偏差就越一致。

这不是取消预注册的理由。相反,正因为有预注册,这个错误才被发现得如此清楚:定义被写死了,执行时才能看出它在不同规模上给出了互不相称的值;若定义是随手取的、每个规模各调一次,这个问题会被平滑掉,永远不会浮出来。冻结的价值之一,恰恰是把自己的错误暴露成一个可见的形状。

但它确实意味着一件事:单次预注册跑不构成判决,无论它执行得多干净。判决需要的是若干次跑,其中至少有一次的判据已经经受过前一次跑的修订。首跑是这个序列的第一项,它的产物不是读数,是一份修订清单。

第七编写的就是这件事的全部细节——预注册全文、材料、两个通道的读数、为什么”未能分辨”是一个结论、那处方法论缺陷的执行层记录,以及一条不能当结论的探索性读数。


《可判性的到来——发现还是发生?》· 王德生 著 · 德麦国际专著第 124 号 · ISBN 979-8-90690-092-0