diff --git a/docs/方法.md b/docs/方法.md index 142a04b..a62bf70 100644 --- a/docs/方法.md +++ b/docs/方法.md @@ -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。只用"只关一个因子"、而且有有效分数的格。按下表从上往下判,命中第一条即停: + + +| 条件 | 标签 | 给下一轮的话 | +| ------------------ | ------------------- | ----------------------- | +| 任一有效格的撑几成 < 0 | "有因子关掉反而更好,不贴标签" | — | +| 有因子没有这样的有效格 | "不全,不贴标签"(不拿剩下的因子凑) | — | +| 每个因子的撑几成都 > 0.9 | 缺一不可 | 要当成一个整体来改 | +| i > 0.2 | 互补 | 改其中一个时要顾及其余的 | +| i < −0.2 | 替代 | 几个因子在做同一件事,想想它们合起来做到了什么 | +| 其余 | 各管各 | 可以分头优化 | -| 条件 | 标签 | 给下一轮的话 | -|---|---|---| -| 任一有效格的撑几成 < 0 | "有因子关掉反而更好,不贴标签" | — | -| 有因子没有这样的有效格 | "不全,不贴标签"(不拿剩下的因子凑) | — | -| 每个因子的撑几成都 > 0.9 | 缺一不可 | 要当成一个整体来改 | -| i > 0.2 | 互补 | 改其中一个时要顾及其余的 | -| i < −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. 在这些组合里,取净值最大、并且净值 > 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. 一份研究只有十来次运行、一到三次采纳,所有比较都只能当案例来讲。 +