docs: 保障的定义借用控制变量与重构两个现成概念说明

用户 2026-10-01:保留"保障"一词。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-01 22:34:44 -04:00
parent 5e4f8c2d1e
commit 141494f414
+154 -89
View File
@@ -17,11 +17,13 @@
3. **弄清每次成功是哪一部分起了作用**,并把这个认识带进下一轮。
每一轮研究交出三样东西:
- 更好的代码;
- 按因子的知识:被采纳改法里,信息价值认为值得测的因子"关掉它少多少分"的实测;
- 能度量的认识收窄:信念本和比特。
方法有三层,三层都要保住:
- 正向找改法、反向查原因的闭环;
- 信息度量:范围、信念本、比特、信息价值;
- 以因子为单位做消融、记录知识。
@@ -42,6 +44,7 @@
2. **保障**:它对分数而言只是一次"重构",让代码更稳,但在任何一格里都不改变评测打出来的分数。说得更具体些:凡是评测本来会收下的运行,带不带它,交出的答案都一样,差别在 ε 以内。只有在评测本来不会收的情形下,它才动手,比如程序崩溃、算出 NaN、交出不合法的答案。动手时只做三件事之一:把答案修到刚好合法、退回基线的做法、直接报错,不另交一个能拿分的新答案。完整版本和每一格消融都带着全部保障,所以这一条在每一格里都要成立。
- 做不到这一条的是因子,拿不准的也算因子。算成因子只多花一格消融,看得见;算成保障,它的效果就永远测不到。
- 名字叫"保护"、实际在改分的,是因子。
- 保障在实验设计里相当于**控制变量**:每一格都带着它,从不关掉。但它比控制变量多一个要求:对评测本来会收下的运行,它像一次**重构**一样不改变结果,只在评测本来不收的情形下才动手。
3. **连带变化**:它是改动造成的后果,不是人写进去的改动,例如用时变长 30%。它不算因子,由程序对每次运行统一记录资源用量。
4. **因子**:以上三种都不是,而且单独放到基线上也说得通的改动。例如换优化器和换学习率调度器,是两个因子。
@@ -66,6 +69,7 @@
**测哪几格**:被采纳改法的每个因子都列一格,但不是每格都测。程序用"信息价值减机会成本"挑出值得测的格马上测;没挑中的格记"没测"并写明原因,以后也不补。
**比特、世界比特、惊讶**:
- 把分数按固定宽度切成小格。合并分布在这些小格上有多拿不准,就是这次运行揭晓的**世界比特**。评测是确定的,结果一出来就没有不确定了。
- 合并分布给实测所在那一小格的把握记作 p,**惊讶** = −log₂ p。
- 世界比特和惊讶都只记账,不参与任何决定。
@@ -81,6 +85,7 @@
**入口**:第零轮里研究者为自己选的起点,回答的是"从哪里开始看",不是结论。
**原始提案、冻结协议**:
- **原始提案**是研究者交上来、还没被挑刺的版本。
- 挑刺和回应之后,程序把"原始提案 + 回应里改过的地方"合成最终版本并锁死,这就是**冻结协议**。之后谁都不能改它,实验员照它实现。
@@ -94,31 +99,36 @@
## 三、角色与分工
| 角色 | 人数 | 工具 | 做什么 |
|---|---|---|---|
| 研究者 | N(可配置) | 只读工具、提交工具、私人笔记 | 写入口、提案、预测、挑刺、回应、解释、收尾 |
| 实验员 | 按任务派 | 完整的文件与 shell 权限 | 按冻结协议实现、做轻量检查、按核验意见修复、实现消融格 |
| 核验员 | 按任务派 | 只读工具、提交工具 | 逐项核对实现是否落实了冻结协议 |
| 程序(宿主) | — | — | 推进阶段、保管冻结记录与评测文件、启动正式运行、从原始产物独立算分、执行全部数学规则、记账、现算信念本 |
| Jev 判别 | — | — | 回答封闭问题,例如两条提案是不是同一个改法、一处实现改动有没有某种性质;程序根据回答合并、退回或拒收 |
| 角色 | 人数 | 工具 | 做什么 |
| ------ | ------ | --------------- | --------------------------------------------------- |
| 研究者 | N(可配置) | 只读工具、提交工具、私人笔记 | 写入口、提案、预测、挑刺、回应、解释、收尾 |
| 实验员 | 按任务派 | 完整的文件与 shell 权限 | 按冻结协议实现、做轻量检查、按核验意见修复、实现消融格 |
| 核验员 | 按任务派 | 只读工具、提交工具 | 逐项核对实现是否落实了冻结协议 |
| 程序(宿主) | — | — | 推进阶段、保管冻结记录与评测文件、启动正式运行、从原始产物独立算分、执行全部数学规则、记账、现算信念本 |
| Jev 判别 | — | — | 回答封闭问题,例如两条提案是不是同一个改法、一处实现改动有没有某种性质;程序根据回答合并、退回或拒收 |
研究者之间互相独立。三个角色各有自己的角色提示词。
角色之间默认互信:研究者负责提出方案和指标定义,实验员负责按冻结协议正确实现,程序不逐行复核模型的工作成果。这是分工,不是安全边界。
**谁在什么时候能看到什么**
- 同一阶段的提交,要等全部应交者交齐才公开。公开之前,本轮还没公开的提案、范围和入口,别人通过正常材料和查询接口都拿不到。
- 作者自评从交上来那一刻起就封存。在第一次预测、挑刺、回应、第二次预测这几个阶段,它都不给任何人看。
- 第一次预测只有本人看得到,之后各阶段也不给别人看,只进导出。〔自定〕
- 信念本只写已经公开的记录。
**给研究者的材料顺序**:每次叫起一位研究者,第一条消息依次是:
1. **任务说明**:这一步做什么,交给谁读。
2. **你自己的**:你认领的入口、你的私人笔记全文、你自己的候选的运行与消融结果、实验员对你的候选的提醒、答案路径。
3. **公共材料**:任务与本轮情况、基线、研究记录、信念本、上一轮收尾、挑刺与回应、指标清单等。正式证据一样不少;第 2 部分已经给过的内容,这里只写一句指引。
4. **现在交什么**。
**私人笔记**:用来记你自己的判断,尤其是这几样:
- 你和别人看法不同的地方;
- 你押的是什么、为什么押它;
- 什么证据会让你改主意;
@@ -141,14 +151,17 @@
第零轮放在基线之后、第 1 轮之前。它不跑正式实验,不扣运行次数,信念本也不变。整轮可以关掉;讨论次数可配置为 1 或 2 次,现行值是 2。
| 步 | 谁做 | 能看到什么 | 交什么 |
|---|---|---|---|
| 0.1 闭门写入口 | 每位研究者各自同时写 | 任务说明、基线代码、基线分数;看不到别人的入口 | 2–3 个入口 |
| 0.2 讨论(1–2 次) | 每位研究者,每次各自同时交 | 全部入口(标明作者)、之前各次的讨论 | 一段讨论正文;可以整份替换自己的入口清单 |
| 0.3 认领 | 每位研究者各自同时交 | 最终的入口与全部讨论 | 一串志愿,至少排 min(N, 入口总数) 个,可以排别人的入口 |
| 0.4 分配 | 程序 | — | 每人分到一个入口,记进账本 |
| 步 | 谁做 | 能看到什么 | 交什么 |
| ------------- | ------------- | ----------------------- | -------------------------------- |
| 0.1 闭门写入口 | 每位研究者各自同时写 | 任务说明、基线代码、基线分数;看不到别人的入口 | 2–3 个入口 |
| 0.2 讨论(1–2 次) | 每位研究者,每次各自同时交 | 全部入口(标明作者)、之前各次的讨论 | 一段讨论正文;可以整份替换自己的入口清单 |
| 0.3 认领 | 每位研究者各自同时交 | 最终的入口与全部讨论 | 一串志愿,至少排 min(N, 入口总数) 个,可以排别人的入口 |
| 0.4 分配 | 程序 | — | 每人分到一个入口,记进账本 |
**一个入口写三样**:
- 名称:离开清单单独看也读得懂;
- 从哪里开始看:先读哪段代码、先问哪个问题、先质疑哪个设定。只写起点,不写"应该改成什么、能到多少分";
- 为什么值得有人去走。
@@ -156,6 +169,7 @@
入口之间尽量不重叠,想不出第三个就交两个。讨论的目标是分工,不是达成共识:指出哪些入口其实是同一条路,哪条路没人站但值得走,自己想走哪条。
**分配规则**:按志愿一轮一轮分。
1. 第 k 轮里,还没分到入口的人看自己的第 k 志愿。这个入口还空着、而且只有他一个人选,就分给他。
2. 几个人同时选了同一个空着的入口时,如果入口的作者在其中,分给作者;否则分给研究者编号最小的人。没分到的人进入下一轮。
3. 志愿用完还没分到的人,按编号从小到大,各拿剩下的入口里编号最小的一个。
@@ -164,6 +178,7 @@
分配只读账本里的志愿和入口,所以重算结果相同。N = 1 时不讨论,直接把第一志愿分给他。
**之后怎么用**:
- 第 1 轮提案的材料,最前面放"你认领的入口"。提案不必只围着它转。
- 第 2 轮起,入口仍放在"你自己的"那一节,标注"第 1 轮的起点;之后是否沿用由你定"。
- 第零轮结束后,它的全部记录对所有研究者公开,并进导出。
@@ -171,12 +186,14 @@
### 4.3 第 r 轮
**① 开轮(程序)**
- 本轮所有任务的材料里都放入信念本。
- 冻结本轮名单和提案上限 M。这两样如果要调整,下一轮才生效。
- 上一轮没跑、而且基线没变的候选,自动留在本轮候选池里。它们沿用原来的冻结协议和回应,不重新挑刺、不重新回应,只重新做第二次预测。作者自评继续封存,作者也不用重新给。留池候选不占作者本轮的提案名额,候选池不设上限。
- 基线变了的旧候选离开候选池,只在信念本里列出名字,可以重新提出。
**② 提案(每位研究者,各自独立)**
- 每人交 1 至 M 条合格提案,每条按因子写,格式见第五部分。
- 正文里不写自己估的分数或提升量,那属于作者自评,要封存。可以引用已经测到的分数,并写明出自哪次运行。
- 文献结论和别人报告的数值只能当起点,要说明与本任务的区别。
@@ -185,17 +202,20 @@
- 交不出合格提案时,在回复里写清卡在哪里,不凑数。这按内部错误处理:研究停下,写明原因。
**③ 判重与合并(程序与 Jev)**
- Jev 判断新提案之间、新提案与留池候选之间是不是同一个改法。
- 判为同一改法的几条新提案合成一个候选,所有作者都保留作者关系,由其中编号最小的作者在回应阶段写成一份冻结协议(见 ⑥ 的"统一")。
- 与留池候选重复的新提案,并进那个留池候选。〔自定〕
**④ 第一次预测(每位研究者,各自独立)**
- 每人对本轮每个新候选交三个数。材料是原始提案;合并而成的候选,把几份原始提案都给出来。看不到作者自评,也看不到别人的预测。
- 留池候选没有新的原始提案,不做第一次预测。〔自定〕
- 交完即冻结。
- 第一次预测不参与选批,只用来和第二次预测对比,看挑刺与回应有没有让大家估得更准。
**⑤ 挑刺(每位研究者)**
- 可以针对整条提案,也可以针对其中某个因子。
- 可以挑的内容:
- 混杂因素;
@@ -207,21 +227,25 @@
- 没有对照代码或已测运行核实过的判断,要写成"(推测)",并写出依据。
**⑥ 回应与统一(提案作者)**
- **回应**:逐条答复挑刺,只交改动了的部分,并给出实现条款。作者自评不能改;作者看完挑刺后怎么想,由他在第二次预测里自己交的范围来体现。
- **统一**:合并而成的候选,由编号最小的作者写成一份完整的冻结协议。它仍然按因子写,因子数上限照样适用;要逐条写明每份原提案在哪里体现,不能在原提案和挑刺之外加新改动。
- Jev 检查冻结条款有没有改动评测、有没有自相矛盾,有问题就退回。
- 回应阶段关闭时,协议冻结。冻结协议包括:因子清单、保障清单、协议正文、因子之间的关系、指标、实现条款。
**⑦ 第二次预测(每位研究者,各自独立)**
- 每人对候选池里每个候选交三个数,包括自己的候选和留池候选。
- 材料:冻结协议、挑刺与回应,以及自己第一次给这个候选的三个数。看不到别人第一次的数,也看不到作者自评。
- 材料里标了"(推测)"的判断,要当作别人的猜想,不当作证据。
- 收齐 N 人后冻结。选批只用第二次预测。
**⑧ 选批(程序)**
- 合并第二次预测,筛出能进候选池的候选,按批内最好期望选出本批,写一条选批记录(见 6.4)。
**⑨ 实现与核验(实验员、核验员)**
- 每个入选的候选,由实验员从本批基线出发,按冻结协议实现。
- 实现过程中只做规模和次数受限的轻量检查,不运行正式规模的求解。
- 实验员要交三样东西:
@@ -233,6 +257,7 @@
- 核验员只交逐项结果:每条实现条款、每个因子、每条保障,找没找到、在哪里;没有归属的改动,逐条判断是否越界。只要有一项"没落实"或者判为越界,程序就判不通过,退回实验员修复。修复次数有上限,可配置。
**⑩ 正式运行(程序)**
- 先预留运行名额和计算额度,确认进程已经启动后,才扣一次运行次数。
- 运行结束后,程序做这几件事:
- 用任务的独立校验器,从原始产物判分;需要时先做合法化;
@@ -244,19 +269,23 @@
**⑪ 整批公开与两本账(程序)**
本批全部跑完后,结果整批公开。程序记两本账:
- **分数账**:每个候选的实测分数,以及目前手里最好的分数;
- **信息账**:每次运行的世界比特、惊讶,以及每个人的范围落在哪一段(见 6.9)。
**⑫ 采纳(程序)**
- 只看正向运行的实测分数。最好的有效候选比当前基线高出采纳线以上,就成为新基线;否则保留原基线。
- 被采纳的改法如果只有 1 个因子,正向运行本身就是这个因子的实测,不做消融,直接跳到 ⑱。
- 没有采纳任何候选时,也跳到 ⑱。
**⑬ 列消融格(程序)**
- 对被采纳改法的每个因子,各列一格"只关掉它":从完整代码出发,把这个因子换回关掉时的做法,其余因子、配套设定、保障都照完整版本保留。关掉时的做法写在提案里;提案没写,就回到基线在这件事上的做法。
- 只做"从完整版本关掉一个因子"这一个方向,不做"从基线只加一个因子"。
**⑭ 解释(每位研究者,各自独立)**
- 材料包括:信念本、本轮各候选的代码与分数、被采纳改法的因子清单、各次运行的产物、实验员的提醒、答案路径。
- 每条解释交两部分:
- 一段文字:机制是什么、哪个因子在出力、什么情况下不成立、因子之间在效果上怎么互相依赖,以及结论覆盖哪些设定、没覆盖哪些;
@@ -267,11 +296,13 @@
- 收齐 N 人后冻结。冻结必须早于任何一格消融的启动,这样这些范围才算事前预测。
**⑮ 定测哪几格(程序)**
- 推算方向收益,对每一种测格组合,算信息价值和机会成本,选出要测的组合,马上测。
- 没选中的格记"没测",写明原因,以后不补。
- 写一条决定记录,附上全部数字(见 6.7)。
**⑯ 消融的实现、核验与运行**
- 实验员从完整代码出发,按因子位置表把指定的因子换回关掉时的做法,保障照留。
- 指标代码照完整代码保留;被关掉的因子本身测不到的量,写 null。
- 代码真的跑不起来时,实验员从两种做法里选一种:
@@ -282,6 +313,7 @@
- 完整代码和基线的分数,直接取本批已有的运行结果,不重跑。
**⑰ 结算(程序)**
- 对每一格算撑几成,判配合关系标签;每条解释在每一格上判确认或否定;标出"现有测法分不开"的情况;记世界比特和惊讶(见 6.6)。
- **检查"消融中发现"**:如果某一格的有效分数比当前基线(也就是刚被采纳的完整代码)高出采纳线以上,这一格的代码直接成为下一轮的基线,采纳记录的来源写"消融中发现"。
- 几格都过线时,取分数最高的;分数相同时,取因子编号小的。
@@ -291,6 +323,7 @@
- 定下押的因子(见 6.8),写进信念本。
**⑱ 信念本更新与收尾(每位研究者)**
- 本轮的全部结果在同一个事务里算完并公开。下一阶段的材料据此现算出新的信念本。
- 每位研究者写一段收尾:什么被支持了、什么被挑战了、下一步想在哪个因子上继续。把结论推广出去时,要写清它覆盖哪些设定。收尾正文原样放进下一轮的提案材料,所有人都能读到。
- 本轮结束时:
@@ -308,42 +341,48 @@
## 五、每种提交
总原则:
- **结构化字段只放最少的内容**:程序要拿来计算或对号的,做成结构化字段;其余写成带小标题的正文。程序不拆分正文,也不检查正文是否齐全,原样转给下一步。
- **结构化字段只放最少的内容**:程序要拿来计算或对号的,做成结构化字段;其余写成带小标题的markdown正文。程序不拆分正文,也不检查markdown正文是否齐全,原样转给下一步。
- **每样都有出口**,出口写进字段说明,例如"只有一个因子就写一个"、"不适用:原因"、"没有:为什么"。只存不读的栏目、程序自己推得出的栏目,都不设。
- **阶段公开前,本人可以替换自己刚交的提交**。替换时要指明替换的是哪一份;后续的决定和记账只用最后一版。账本按版本号区分各版,导出里写替换次数。实现和核验阶段不能替换。
- **提交回执**会回显"收到正文 N 字,结尾是:……",模型据此能看出自己交的东西有没有被截断。
| 提交 | 结构化字段 | 正文 | 程序怎么用 |
|---|---|---|---|
| 入口(0.1、0.2) | 编号、名称 | 从哪里开始看、为什么值得走 | 编号用于认领与分配 |
| 讨论(0.2) | 可选:替换后的入口清单 | 讨论正文 | 转给下一次讨论与认领 |
| 志愿(0.3) | 入口编号的有序列表 | — | 分配 |
| 提案 | 因子清单:每个因子的编号、名称、做法、关键设定(决定效果的设定值,没有写"无")、关掉时换成什么(可省)、延续(信念本里的因子编号,或空)。保障清单:每条一个短名。指标登记。作者自评的三个数 | 每个因子为什么可能有效;每条保障做什么、属于拦 / 补 / 改哪一种、自检时怎么想的;协议(不许改什么、随机性怎么处理、何时停、什么样的运行不算数);因子之间的关系 | 数因子个数、列消融格、信念本按因子归并;保障短名用来对号;作者自评封存 |
| 第一次预测 | 本轮每个新候选的三个数 | 理由 | 和第二次预测对比、信息账 |
| 挑刺 | 针对谁(整条提案,或某个因子编号) | 挑刺内容 | 回应时逐条对号 |
| 回应 / 统一 | 逐条答复(挑刺编号 + 答复);改动了的字段;实现条款 | 答复正文 | 覆盖提案的对应部分后冻结;实现条款供核验逐条对号 |
| 第二次预测 | 候选池里每个候选的三个数 | 理由 | 合并、选批、信息账 |
| 实现 / 修复 | 代码;因子位置表与保障位置表;`concerns` | 实现说明 | 列出没有归属的改动交给核验员;`concerns` 转给研究者 |
| 核验 | 逐项结果(条款、因子、保障:找没找到、在哪里);没有归属的改动逐条判断是否越界 | 说明 | 推出通过与否 |
| 消融实现 / 核验 | 代码;需要一起关的因子;`concerns`;核验的逐项结果 | — | 这一格的正式运行 |
| 解释 | 每一格的三个数 | 机制等文字 | 信息价值、确认 / 否定、信息账 |
| 收尾 | — | 什么被支持、什么被挑战、下一步在哪个因子上继续 | 进下一轮的提案材料 |
| 提交 | 结构化字段 | 正文 | 程序怎么用 |
| ----------- | ----------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ----------------------------------- |
| 入口(0.1、0.2) | 编号、名称 | 从哪里开始看、为什么值得走 | 编号用于认领与分配 |
| 讨论(0.2) | 可选:替换后的入口清单 | 讨论正文 | 转给下一次讨论与认领 |
| 志愿(0.3) | 入口编号的有序列表 | — | 分配 |
| 提案 | 因子清单:每个因子的编号、名称、做法、关键设定(决定效果的设定值,没有写"无")、关掉时换成什么(可省)、延续(信念本里的因子编号,或空)。保障清单:每条一个短名。指标登记。作者自评的三个数 | 每个因子为什么可能有效;每条保障做什么、属于拦 / 补 / 改哪一种、自检时怎么想的;协议(不许改什么、随机性怎么处理、何时停、什么样的运行不算数);因子之间的关系 | 数因子个数、列消融格、信念本按因子归并;保障短名用来对号;作者自评封存 |
| 第一次预测 | 本轮每个新候选的三个数 | 理由 | 和第二次预测对比、信息账 |
| 挑刺 | 针对谁(整条提案,或某个因子编号) | 挑刺内容 | 回应时逐条对号 |
| 回应 / 统一 | 逐条答复(挑刺编号 + 答复);改动了的字段;实现条款 | 答复正文 | 覆盖提案的对应部分后冻结;实现条款供核验逐条对号 |
| 第二次预测 | 候选池里每个候选的三个数 | 理由 | 合并、选批、信息账 |
| 实现 / 修复 | 代码;因子位置表与保障位置表;`concerns` | 实现说明 | 列出没有归属的改动交给核验员;`concerns` 转给研究者 |
| 核验 | 逐项结果(条款、因子、保障:找没找到、在哪里);没有归属的改动逐条判断是否越界 | 说明 | 推出通过与否 |
| 消融实现 / 核验 | 代码;需要一起关的因子;`concerns`;核验的逐项结果 | — | 这一格的正式运行 |
| 解释 | 每一格的三个数 | 机制等文字 | 信息价值、确认 / 否定、信息账 |
| 收尾 | — | 什么被支持、什么被挑战、下一步在哪个因子上继续 | 进下一轮的提案材料 |
**三个数**:必须满足 q₁ ≤ q₅ ≤ q₉,否则退回;三个数可以相等。没有"不知道"这个选项,拿不准就把一成和九成拉开。
**保障的自检:拦、补、改三问**。先说清这条保障做的是哪一种动作,再回答对应的问题。这些问题用来引导思考,不要求按表格交答案。
| 动作 | 自检问题 | 回答是下面这样,它就是因子 |
|---|---|---|
| 拦:把某些候选、起点或结果挡掉不用 | 挡掉的东西里,有没有评测本来会收下的?比评测更严的检查、在修正之前就做的检查,都算 | 有 |
| 补:出事时另交一个东西 | 补上的东西自己能拿多少分?它是不是只是基线的做法、修到合法的原答案,或者报错? | 补的是新做法,或者分数接近正常水平 |
| 改:把答案或中间量改一点 | 对一次本来正常的运行,它把最终分数改了多少?只在出事时改,还是每一步都在改? | 改动 ≥ ε,或者每一步都在改 |
| 动作 | 自检问题 | 回答是下面这样,它就是因子 |
| ----------------- | ----------------------------------------- | ----------------- |
| 拦:把某些候选、起点或结果挡掉不用 | 挡掉的东西里,有没有评测本来会收下的?比评测更严的检查、在修正之前就做的检查,都算 | 有 |
| 补:出事时另交一个东西 | 补上的东西自己能拿多少分?它是不是只是基线的做法、修到合法的原答案,或者报错? | 补的是新做法,或者分数接近正常水平 |
| 改:把答案或中间量改一点 | 对一次本来正常的运行,它把最终分数改了多少?只在出事时改,还是每一步都在改? | 改动 ≥ ε,或者每一步都在改 |
每条保障还要回答最后一问:关掉任何一个因子以后,这条保障会不会从"很少用到"变成"一定用到"?会的话,就针对那一格把上面的问题再答一遍。
**延续**只用于同一个想法的新版本,比如换了设定、换了基线。受它启发想出来的新想法不算延续。同一份提案里,两个因子不能延续同一个因子,违反就退回。
**指标**
- 最终指标由任务规定,宿主独立计算。
- 常规辅助指标由程序统一采集。
- 假设专用指标由研究者自己定义,执行前在协议里登记,不限定只能从内置清单里选,由候选代码写出。每个假设专用指标要选定"测不到时怎么办":
@@ -353,6 +392,7 @@
- 消融格里,假设专用指标缺失一律只记缺失,不作废这一格。
**答案路径**:候选在写最终指标的同一个文件里,多写两个保留键:
- `answer-path`:最终答案出自哪里,取值是 `main`、某个因子编号或某条保障的短名;
- `safeguard-triggers`:每条保障这次动手了几次。
@@ -380,9 +420,9 @@
### 6.3 开放预留与合并
- **正向**:在同一次选批里,取所有人对所有候选的折线(含尾巴)的最低点 L 和最高点 U,令 W = U − L,开放预留 U(x) 在 [L − W/2, U + W/2] 上均匀铺开。
- **正向**:在同一次选批里,取所有人对所有候选的折线(含尾巴)的最低点 L 和最高点 U,令 W = U − L,开放预留 U(x) 在 \[L − W/2, U + W/2\] 上均匀铺开。
- **消融**:每一格单独定 L 和 U,因为关掉不同的因子,分数可能差得很远。
- **合并**:F(x) = (1 − λ) × [F₁(x) + … + F_N(x)] ÷ N + λ × U(x),λ 是方法参数,现行值 0.10。
- **合并**:F(x) = (1 − λ) × \[F₁(x) + … + F\_N(x)\] ÷ N + λ × U(x),λ 是方法参数,现行值 0.10。
- 各人等权,不按以往战绩加权,也不往两头推。
- 同一个人交了几条解释时,他的那一份权重在这几条之间平分。
@@ -392,20 +432,20 @@
- **批量**:k = min(每批上限, 本轮可用于正向的运行次数)。本轮可用次数见第七部分。候选池里的候选不足 k 个时全部跑,空出来的名额留给以后。
- **批内最好期望**:
V(S) = ∫_b^∞ [1 − ∏_{c∈S} F_c(t)] dt
V(S) = ∫*b^∞ \[1 − ∏*{c∈S} F\_c(t)\] dt
候选之间按互不相关计算,低于 b 的部分按 0 算。列出候选池里所有 k 个候选的组合,取 V 最大的那个组合。V 完全相等时按候选编号定,这样恢复时能算出同一个结果。
- **不另加"不确定奖励"**:两个平均涨幅相同的候选,放在一起有多大价值,取决于它们能不能互补地往高处冲。
示例:X 有一半机会涨 0、一半机会涨 0.02;Y 一定涨 0.01。只跑 X 或只跑 Y,批内最好期望都是 0.010;两个一起跑是 0.015。
- **分数尺读数**(只记录):E[max(0, max_{c∈池} X_c − b)] − V(S*),S* 是选中的组合。它表示"按现有看法挑,比什么都知道时平均少拿多少分"。
- **分数尺读数**(只记录):E\[max(0, max\_{c∈池} X\_c − b)\] − V(S\*),S\* 是选中的组合。它表示"按现有看法挑,比什么都知道时平均少拿多少分"。
- **选批记录**写入:各候选的合并范围、是否入池、各组合的 V、选中的组合、分数尺读数,以及所用的选批规则和种子。
### 6.5 采纳线
设当前基线分数为 B,已知最好为 K*。
设当前基线分数为 B,已知最好为 K\*。
- 有已知最好:采纳线 = min(ε, (K* − B) ÷ 4);结果低于 ε/100 时取 ε/100,B 已经超过 K* 时也取 ε/100。
- 有已知最好:采纳线 = min(ε, (K\* − B) ÷ 4);结果低于 ε/100 时取 ε/100,B 已经超过 K\* 时也取 ε/100。
- 没有已知最好:采纳线 = ε。
采纳只看实测分数。
@@ -418,22 +458,25 @@
撑几成只用最终指标计算。
**配合关系标签**:相对交互量 i = Σ_p 撑(p) − 1。只用"只关一个因子"、而且有有效分数的格。按下表从上往下判,命中第一条即停:
**配合关系标签**:相对交互量 i = Σ\_p 撑(p) − 1。只用"只关一个因子"、而且有有效分数的格。按下表从上往下判,命中第一条即停:
| 条件 | 标签 | 给下一轮的话 |
| ------------------ | ------------------- | ----------------------- |
| 任一有效格的撑几成 &lt; 0 | "有因子关掉反而更好,不贴标签" | — |
| 有因子没有这样的有效格 | "不全,不贴标签"(不拿剩下的因子凑) | — |
| 每个因子的撑几成都 &gt; 0.9 | 缺一不可 | 要当成一个整体来改 |
| i &gt; 0.2 | 互补 | 改其中一个时要顾及其余的 |
| i &lt; −0.2 | 替代 | 几个因子在做同一件事,想想它们合起来做到了什么 |
| 其余 | 各管各 | 可以分头优化 |
| 条件 | 标签 | 给下一轮的话 |
|---|---|---|
| 任一有效格的撑几成 &lt; 0 | "有因子关掉反而更好,不贴标签" | — |
| 有因子没有这样的有效格 | "不全,不贴标签"(不拿剩下的因子凑) | — |
| 每个因子的撑几成都 &gt; 0.9 | 缺一不可 | 要当成一个整体来改 |
| i &gt; 0.2 | 互补 | 改其中一个时要顾及其余的 |
| i &lt; −0.2 | 替代 | 几个因子在做同一件事,想想它们合起来做到了什么 |
| 其余 | 各管各 | 可以分头优化 |
界限 ±0.2 和 0.9 是固定常数。原始分数永远和标签一起保存。总提升很小时,这些比例几乎都是噪声,所以信念本会如实写出总提升有多大。
示例:基线 1.00,完整 1.50,G = 0.50。关掉 p1 得 1.45,撑 0.10;关掉 p2 得 1.10,撑 0.80。i = −0.10,标签是"各管各"。
**确认与否定**:每条解释在每个有效格上,实测落在它自己的 [q₁, q₉] 里面(含两端)记确认,落在外面记否定。〔自定:含两端〕
- 各格各判,不归一,不分功劳。
- 确认与否定只是这一格上事前预测的记录,不代表机制为真的概率,也不代表研究者的信誉。
- 只用解释冻结之后的运行来记账。每次消融单独判,不跨轮累计。
@@ -442,13 +485,15 @@
**一格的几种结局**:
| 结局 | 情形 | 解释在这一格 | 撑几成 |
|---|---|---|---|
| 有效分数 | 跑完、有分数(含合法化后的分数) | 判确认 / 否定;记世界比特与惊讶 | 按公式算 |
| 证据不足 | 启动了(扣了次数),但跑崩、超时、没有产物、修不了,或判为违规 | 不判,不记账 | "证据不足:原因" |
| 没测 | 信息价值减成本没选中,或者剩余次数不够 | 不判 | "没测:原因(附净值)" |
| 跑不起来 | 实验员交了"跑不起来",也没给一起关的方案;不启动,不扣次数 | 不判 | "跑不起来:原因" |
| 一起关 | 关 p 时代码跑不起来,实际和 q 一起关了 | 记"证据不足(测的是 p + q 一起关)" | 记在"p + q 一起"名下,不算成 p 的;q 有自己的格时照常测 |
| 结局 | 情形 | 解释在这一格 | 撑几成 |
| ---- | ------------------------------- | ---------------------- | ---------------------------------- |
| 有效分数 | 跑完、有分数(含合法化后的分数) | 判确认 / 否定;记世界比特与惊讶 | 按公式算 |
| 证据不足 | 启动了(扣了次数),但跑崩、超时、没有产物、修不了,或判为违规 | 不判,不记账 | "证据不足:原因" |
| 没测 | 信息价值减成本没选中,或者剩余次数不够 | 不判 | "没测:原因(附净值)" |
| 跑不起来 | 实验员交了"跑不起来",也没给一起关的方案;不启动,不扣次数 | 不判 | "跑不起来:原因" |
| 一起关 | 关 p 时代码跑不起来,实际和 q 一起关了 | 记"证据不足(测的是 p + q 一起关)" | 记在"p + q 一起"名下,不算成 p 的;q 有自己的格时照常测 |
- 后四种结局都不进标签的求和。
- "一起关"是对称的:关 p 要连 q 一起关,关 q 也要连 p 一起关,这是同一种设置。已经有结果就直接沿用,不重跑,不重复扣次数,也不重复记账。
@@ -459,11 +504,12 @@
收益_p(x) = h × [f(完整) − x] ÷ G
h 是剩余空间:有已知最好时 h = max(K* − f(完整), ε/100);没有已知最好时 h = 1。h 只改变刻度,不改变测不测。
h 是剩余空间:有已知最好时 h = max(K\* − f(完整), ε/100);没有已知最好时 h = 1。h 只改变刻度,不改变测不测。
这个比例量的是 p **已经拿到**的分数,不是它还能再拿多少,所以只适合用来排序,直接当收益用会估高。信息价值和机会成本用的是同一个数,只要各因子估高的倍数相同,结论就不受影响。
**成分与权重**:
- 每条解释算一个成分,开放预留也算一个成分。
- 起始权重:所有解释合起来占 0.9,研究者之间等权,同一个人的几条解释平分他那一份;开放预留占 0.1。
- 每个成分对每一格都有一个分布:解释用它自己的三个数补上尾巴后的折线,开放预留用这一格的均匀分布。
@@ -480,17 +526,19 @@ VOI(S) = E_{S 的结果}[ max_p E(收益_p | S 的结果) ] − max_p E(收益_p
- 只测一部分格时,每格在自己的开放预留范围内按折点切段,每段再等分成 s 份,对测到的格的全部小段组合求和。测 k 格时,每格的小段数 m 满足 m^k ≤ 4,000,000,s = min(20, ⌊m ÷ 段数⌋);段数超过 m 时,改为把这一格等宽切成 m 份。
**价值减成本**:
- 价值(S) = u × m′ × VOI(S)。
- u 是"测出的知识会被用上的概率",方法参数,现行值 0.5。
- m′ 是这份知识以后还能用几次的折算:m′ = 1 + r + r² + …,一共 R̂ 项,衰减 r 是方法参数,现行值 0.5。
- R̂ 是测完 S 之后估计还能开几轮:R̂ = ⌈(余额 − |S|) ÷ 每批上限⌉。〔自定:按运行次数估算剩余轮数〕余额全部用在消融上时 R̂ = 0,m′ = 0。
- 成本(S) = 2ĝ₀ × [(K + |S|) ÷ (K + |S| + 1) − K ÷ (K + 1)]。
- K 是每批上限;ĝ₀ = max_p E(收益_p),即按现在的看法押的那个因子的期望收益。
- 成本(S) = 2ĝ₀ × \[(K + |S|) ÷ (K + |S| + 1) − K ÷ (K + 1)\]。
- K 是每批上限;ĝ₀ = max\_p E(收益\_p),即按现在的看法押的那个因子的期望收益。
- 这个式子假设下一轮每个候选的涨幅在 0 到 2ĝ₀ 之间均匀分布。
- 运行次数是唯一的预算,每花一次在消融上,就少一次跑正向候选的机会,所以成本总是要算。
- 净值(S) = 价值(S) − 成本(S)。
**选格**:
1. 只考虑格数不超过"余额 − 1"的非空组合,至少留 1 次给下一轮正向。余额为 0 或 1 时不做消融。
2. 在这些组合里,取净值最大、并且净值 &gt; 1e-12 的组合。净值相差不到 1e-12 的视为相同,先取格数少的,再按因子编号从小到大比。所有组合的净值都不大于 1e-12 时,一格都不测。
3. 没选中的格记"没测":组合里放不下的写"剩余次数不够",其余写"信息价值不足以抵过成本",都附上它所在组合的净值。没测的格以后不补。
@@ -510,8 +558,8 @@ VOI(S) = E_{S 的结果}[ max_p E(收益_p | S 的结果) ] − max_p E(收益_p
### 6.9 比特、惊讶、核对范围准不准
- **格宽** Δ = ε/100,是一把固定的尺子,不随规则或其他配置变。填圆的 Δ = 0.0001。正向和消融格都从本批基线 b 起切,第 j 小格是 [b + jΔ, b + (j+1)Δ)。
- **世界比特** = −Σ_j p_j log₂ p_j,p_j 是合并分布落在第 j 小格的把握。正向用候选的合并分布,消融格用 6.3 的成分混合。
- **格宽** Δ = ε/100,是一把固定的尺子,不随规则或其他配置变。填圆的 Δ = 0.0001。正向和消融格都从本批基线 b 起切,第 j 小格是 \[b + jΔ, b + (j+1)Δ)。
- **世界比特** = −Σ\_j p\_j log₂ p\_j,p\_j 是合并分布落在第 j 小格的把握。正向用候选的合并分布,消融格用 6.3 的成分混合。
- **惊讶** = −log₂ p,p 是实测所在那一小格的事前把握。事前把握为 0 时,记"事前把握为 0,惊讶算不出",不拿 0 或无穷大顶替。
- **分歧量**(只记录)= 合并分布的世界比特 − 各人世界比特的平均值。
- 只对有效分数记比特和惊讶。世界比特、惊讶、分歧量、分数尺读数和战绩都用第二次预测来算。
@@ -540,19 +588,21 @@ VOI(S) = E_{S 的结果}[ max_p E(收益_p | S 的结果) ] − max_p E(收益_p
### 6.11 常数与参数
| 名称 | 现行值 | 能否改 |
|---|---|---|
| 研究者人数 N、每人提案上限 M、因子数上限、每批上限、运行次数 | 见配置(因子数上限现行值 3) | 可配置 |
| 精度 ε、已知最好 | 任务配置(填圆:0.01、2.635983) | 任务配置 |
| 开放预留 λ | 0.10 | 方法参数 |
| u、衰减 r | 0.5、0.5 | 方法参数 |
| 第零轮讨论次数 | 2 | 可配置(1 或 2) |
| 采纳线上限 | ε | 跟随 ε |
| 采纳线下限、剩余空间下限、比特格宽 Δ | ε/100 | 跟随 ε |
| 尾巴宽度、三个数对应的把握 | 同侧的半宽;一成 / 一半 / 九成 | 固定 |
| 标签界限 | ±0.2、0.9 | 固定 |
| 净值容差 | 1e-12 | 固定 |
| 部分格积分的规模 | m^k ≤ 4,000,000,s ≤ 20 | 固定 |
| 名称 | 现行值 | 能否改 |
| -------------------------------- | ---------------------- | ---------- |
| 研究者人数 N、每人提案上限 M、因子数上限、每批上限、运行次数 | 见配置(因子数上限现行值 3) | 可配置 |
| 精度 ε、已知最好 | 任务配置(填圆:0.01、2.635983) | 任务配置 |
| 开放预留 λ | 0.10 | 方法参数 |
| u、衰减 r | 0.5、0.5 | 方法参数 |
| 第零轮讨论次数 | 2 | 可配置(1 或 2) |
| 采纳线上限 | ε | 跟随 ε |
| 采纳线下限、剩余空间下限、比特格宽 Δ | ε/100 | 跟随 ε |
| 尾巴宽度、三个数对应的把握 | 同侧的半宽;一成 / 一半 / 九成 | 固定 |
| 标签界限 | ±0.2、0.9 | 固定 |
| 净值容差 | 1e-12 | 固定 |
| 部分格积分的规模 | m^k ≤ 4,000,000,s ≤ 20 | 固定 |
方法参数只在做方法实验时才改,配置对话不会问。研究开始时,全部取值冻结进账本。
@@ -561,11 +611,13 @@ VOI(S) = E_{S 的结果}[ max_p E(收益_p | S 的结果) ] − max_p E(收益_p
## 七、预算与扣次
**预算**
- 正式运行次数和计算时间(填圆按 CPU 秒计)都事先定死,不能因为结果不好临时扩大。运行次数是唯一决定研究长度的上限,不设轮数上限。
- 模型调用不设上限,用量照实记录;拿不到用量时记"未知",不记 0。
- 程序记录整个环境的用量:正式运行和实验员会话的 CPU 时间、GPU 时间、内存、墙钟时间,以及模型调用量。这些只记录,不作为限制。
**什么时候扣次数**
- 基线、正向候选、消融格,都按实际启动计入。
- 启动前先预留一次名额和最大计算额度,确认进程已经启动,才扣一次。
- 启动后失败、超时、被取消,照样计数。
@@ -575,6 +627,7 @@ VOI(S) = E_{S 的结果}[ max_p E(收益_p | S 的结果) ] − max_p E(收益_p
- 轻量检查有次数和时长上限(见配置),只能用来检查语法、接口和极小的样例。正式规模的求解,哪怕叫"调试",也是正式运行,不能借轻量检查绕开预算。
**什么时候开下一轮**
- 余额至少还有 1 次,就开下一轮;余额为 0,研究结束。不设轮数上限。
- 本轮正向的批量 k = min(每批上限, 余额)。
- 消融最多测"余额 − 1"格,保证下一轮至少还能跑 1 次正向(见 6.7)。
@@ -582,27 +635,31 @@ VOI(S) = E_{S 的结果}[ max_p E(收益_p | S 的结果) ] − max_p E(收益_p
**示例**(推演,不是真实运行):运行次数 13,每批上限 2。消融选哪几格是假设的。
| 时点 | 用掉 | 余额 | 发生什么 |
|---|---:|---:|---|
| 基线 | 1 | 12 | |
| 第 1 轮正向 | 2 | 10 | 采纳一个 3 因子改法 |
| 第 1 轮消融 | 2 | 8 | 假设信息价值减成本选中 2 格;第 3 格记"没测" |
| 第 2 轮正向 | 2 | 6 | 没有采纳 |
| 第 3 轮正向 | 2 | 4 | 采纳一个 2 因子改法 |
| 第 3 轮消融 | 0 | 4 | 假设大家都押同一个因子,信息价值为 0,两格都记"没测" |
| 第 4 轮正向 | 2 | 2 | 没有采纳 |
| 第 5 轮正向 | 2 | 0 | 余额用完,研究结束 |
| 时点 | 用掉 | 余额 | 发生什么 |
| ------- | ---: | ---: | ---------------------------- |
| 基线 | 1 | 12 | |
| 第 1 轮正向 | 2 | 10 | 采纳一个 3 因子改法 |
| 第 1 轮消融 | 2 | 8 | 假设信息价值减成本选中 2 格;第 3 格记"没测" |
| 第 2 轮正向 | 2 | 6 | 没有采纳 |
| 第 3 轮正向 | 2 | 4 | 采纳一个 2 因子改法 |
| 第 3 轮消融 | 0 | 4 | 假设大家都押同一个因子,信息价值为 0,两格都记"没测" |
| 第 4 轮正向 | 2 | 2 | 没有采纳 |
| 第 5 轮正向 | 2 | 0 | 余额用完,研究结束 |
---
## 八、违规与公平比较
**公平比较靠事先定死的条件**
- 单次运行的时限和核数由任务规定(填圆:120 秒、1 核)。这是所有候选共用的比较条件,不是用来防作弊的。容器限 1 核,并且让程序看到的核数也是 1,否则候选会照常开多个进程,去抢那 1 个核。
- 同一批候选从同一份基线出发。
- 每次运行记录 CPU 秒、墙钟时间、峰值内存。材料里同时写"是基线的几倍"和"占单次时限的几成"。
**合法化**(只在任务能写出修法时才做)
1. 校验器按容差 0 判断原产物。
2. 不合法时,按题目里写死的、只会让分数变差的规则,把产物修到合法,再判分。
- 填圆的规则是只缩小参与违反的圆,不挪圆心:每个圆的半径减去它参与的最大违反量(重叠或出界,取较大的那个);仍不合法,就再减一个最小浮点单位;半径减成负数时取 0。
@@ -612,6 +669,7 @@ VOI(S) = E_{S 的结果}[ max_p E(收益_p | S 的结果) ] − max_p E(收益_p
5. 跑崩、超时、没有产物、修不了的运行,照样扣次数,记为失败。正向运行出现这种情况不能被采纳;消融格记"证据不足"。
**防作弊靠结构,不靠审查**
- 评测程序和评测文件由宿主保管,实验员改不到;程序会检查有没有改了不许改的文件。
- 宿主从原始产物重新计算最终指标,不采信候选自报的成绩。
- 用硬规则校验文件、格式和合法性。
@@ -620,11 +678,13 @@ VOI(S) = E_{S 的结果}[ max_p E(收益_p | S 的结果) ] − max_p E(收益_p
**违规怎么处理**
| 情况 | 处理 |
|---|---|
| 能确认的违规(由硬规则或宿主重算判出) | 这次运行不进记账,次数照扣,写一条记录,研究继续。正向运行不能被采纳;消融格记"证据不足:违规(原因)",不记比特 |
| 只是模型怀疑的 | 记下来,在导出里列出,不暂停 |
| 宿主自己说不清的,比如这次运行到底启动了没有 | 停下,等用户核对 |
| 情况 | 处理 |
| ---------------------- | --------------------------------------------------------- |
| 能确认的违规(由硬规则或宿主重算判出) | 这次运行不进记账,次数照扣,写一条记录,研究继续。正向运行不能被采纳;消融格记"证据不足:违规(原因)",不记比特 |
| 只是模型怀疑的 | 记下来,在导出里列出,不暂停 |
| 宿主自己说不清的,比如这次运行到底启动了没有 | 停下,等用户核对 |
资源超限被杀,按超时失败处理,不算违规。不设"暂停整个研究、等人处置"的流程。
@@ -668,22 +728,26 @@ VOI(S) = E_{S 的结果}[ max_p E(收益_p | S 的结果) ] − max_p E(收益_p
做方法实验时,下面这些可以换。研究开始时,程序把配置翻译成"这份研究的步骤清单"和"每个决策点用哪条规则",存进账本。被关掉的步骤,在账本里记一条"按配置跳过"。互相冲突的组合在配置校验时就报错,例如关掉了预测,选批却不是随机。
**步骤开关**
- 消融:关掉时不列消融格;解释照样写文字,但不给每格的三个数。
- 挑刺与回应。
- 第零轮。
- 第一次预测。
**选批规则**
- 批内最好期望;
- 均匀随机:从候选池的全部候选里随机抽一批,不看入池门槛,批量规则不变,种子按第九部分的方法定。
**选格规则**
- 信息价值减成本;
- 全测;
- 随机抽同样多的格;
- 都不测。
**朴素循环**:一组开关的命名预设,不另写流程。
- N 位研究者每轮各交提案,不挑刺、不回应、不预测,提案直接冻结;
- 判重和输入检查照常做;
- 从提案里均匀随机选批;
@@ -704,3 +768,4 @@ VOI(S) = E_{S 的结果}[ max_p E(收益_p | S 的结果) ] − max_p E(收益_p
6. 第一次预测估的是原始提案,和最后真正跑的冻结协议可能有出入,所以两次预测的对比里,也混着"协议被改过"这一层。
7. 所有研究者都认为下一步该在同一个因子上继续时,信息价值严格为 0,这次采纳的因子就不测,没有"关掉它少多少分"的实测。导出里会记下"没测"和净值,真实运行后看这种情况出现得多不多,再决定要不要把知识本身的价值算进信息价值。
8. 一份研究只有十来次运行、一到三次采纳,所有比较都只能当案例来讲。