# InfoRSI 研究方法 这份文件是研究方法唯一的现行版本,代码里的数学规则、流程推进和记账都以它为准。 - 文中的数值写的是现行值。可以改的标"可配置"或"方法参数";字段名和默认值以配置的类型定义为准。 - 标〔自定〕的条目,是开发中自己定的规则,用户还没有逐条确认。其余都是用户确认过的方法。 - 正文的来源是用户逐条认可的方法,各自的确认记录写在提交说明里。 --- ## 一、研究要回答什么 自动改代码提分的系统已经能读代码、改代码、跑实验。本方法要回答的是:一份研究只有十来次正式运行时,系统能不能做到下面三件事。 1. **持续提出值得试的改法**:从目标、代码和历史结果里找方向。 2. **知道每次运行让我们多知道了什么**:模型能给出数值范围,但给得偏自信,几位研究者之间也高度相关,所以不能直接当概率用。程序要把这些范围换算成可用的把握,用它来选实验、决定要不要花运行去查原因,并持续核对这些范围准不准。 3. **弄清每次成功是哪一部分起了作用**,并把这个认识带进下一轮。 每一轮研究交出三样东西: - 更好的代码; - 按因子的知识:被采纳改法里,信息价值认为值得测的因子"关掉它少多少分"的实测; - 能度量的认识收窄:信念本和比特。 方法有三层,三层都要保住: - 正向找改法、反向查原因的闭环; - 信息度量:范围、信念本、比特、信息价值; - 以因子为单位做消融、记录知识。 分工的根本原则:程序推进阶段、执行数学规则、保存不可改的记录;模型负责提案、实现和解释。模型在对话里说"已经提交"不算数,以正式记录为准。 --- ## 二、核心概念 **基线**:当前当作出发点的代码,以及它的实测分数。研究开始时,基线是任务给的原始代码。每采纳一次,就换一次基线。同一轮的所有正向候选都从同一份"本批基线"出发,这份基线的分数记作 b。 **候选**:一条等待预测和运行的改法。 **因子**:一个改法里最小、能单独开关检验的改动。这个词沿用实验设计里的叫法:因子是一个可以单独设定的开关,它的取值叫水平,在这里就是开和关。判断一处代码改动算什么时,按下面的顺序问: 1. **配套设定**:它是某个因子自带的设定值,离开这个因子就没有意义。例如换优化器时,顺手把某参数从 0.1 改成 0.01。实验设计里把这种情况叫嵌套因子。配套设定归它所属的那个因子,跟着一起开、一起关;信念本里写成"新优化器(0.01)"。 2. **保障**:它对分数而言只是一次"重构",让代码更稳,但在任何一格里都不改变评测打出来的分数。说得更具体些:凡是评测本来会收下的运行,带不带它,交出的答案都一样,差别在 ε 以内。只有在评测本来不会收的情形下,它才动手,比如程序崩溃、算出 NaN、交出不合法的答案。动手时只做三件事之一:把答案修到刚好合法、退回基线的做法、直接报错,不另交一个能拿分的新答案。完整版本和每一格消融都带着全部保障,所以这一条在每一格里都要成立。 - 做不到这一条的是因子,拿不准的也算因子。算成因子只多花一格消融,看得见;算成保障,它的效果就永远测不到。 - 名字叫"保护"、实际在改分的,是因子。 - 保障在实验设计里相当于**控制变量**:每一格都带着它,从不关掉。但它比控制变量多一个要求:对评测本来会收下的运行,它像一次**重构**一样不改变结果,只在评测本来不收的情形下才动手。 3. **连带变化**:它是改动造成的后果,不是人写进去的改动,例如用时变长 30%。它不算因子,由程序对每次运行统一记录资源用量。 4. **因子**:以上三种都不是,而且单独放到基线上也说得通的改动。例如换优化器和换学习率调度器,是两个因子。 一条提案最多有几个因子,由因子数上限决定(可配置,现行值 3)。一个因子可以改很多行,一处代码也可以同时服务两个因子。 **范围(三个数)**:对一个分数的事前判断,写成"有一成可能低于多少、一半可能低于多少、九成可能低于多少",记作 q₁ < q₅ < q₉。分数一律按原值写,不管任务是越大越好还是越小越好,写法都一样。研究者不用手算任何概率或期望。 **把握、合并分布**:程序把每个人的三个数画成一条"分数低于某值的把握"折线,几个人的折线等权平均,再掺进一份**开放预留**(代表"我们可能全都说错了"),得到**合并分布**。 **批内最好期望**:一批候选跑完后,手里最好的那个平均比 b 高多少。程序用它来决定这一批跑哪几个候选。 **采纳线**:新结果要比当前基线高出多少,才把它换成新基线。 **消融、格**:从完整代码出发只关掉一个因子再跑一次,叫消融;这样的每一次运行叫**一格**。 **撑几成**:关掉一个因子后少掉的分数,占这个改法总提升的比例。 **解释**:研究者对"每个因子起多大作用"的文字判断,外加对每一格给的三个数。每条解释在每一格上,看实测是否落在它自己给的一成到九成之间:落在里面记**确认**,落在外面记**否定**。 **信息价值**:先测某几格再决定下一步,比不测就决定,平均能多拿多少分。**机会成本**:这几次运行如果拿去跑正向候选,本来平均能多拿多少分。 **测哪几格**:被采纳改法的每个因子都列一格,但不是每格都测。程序用"信息价值减机会成本"挑出值得测的格马上测;没挑中的格记"没测"并写明原因,以后也不补。 **比特、世界比特、惊讶**: - 把分数按固定宽度切成小格。合并分布在这些小格上有多拿不准,就是这次运行揭晓的**世界比特**。评测是确定的,结果一出来就没有不确定了。 - 合并分布给实测所在那一小格的把握记作 p,**惊讶** = −log₂ p。 - 世界比特和惊讶都只记账,不参与任何决定。 **落点四段、覆盖率**:实测落在某人范围的哪一段,分四段:低于一成、一成到一半、一半到九成、高于九成。**覆盖率**是实测落在一成到九成之间的比例。估得准时,覆盖率约八成,四段的比例约为 1 : 4 : 4 : 1。 **信念本**:程序在每个阶段开始时,从已公开的记录现算出来的一份"这道题现在知道什么、还拿不准什么"。它不单独保存,模型也不能写它。 **战绩**:信念本里核对各人范围准不准的一栏,分方向写。它只用来显示,不改任何权重。 **押的因子**:按当前的看法,下一轮最值得继续改的那个因子。只作参考,不强制。 **入口**:第零轮里研究者为自己选的起点,回答的是"从哪里开始看",不是结论。 **原始提案、冻结协议**: - **原始提案**是研究者交上来、还没被挑刺的版本。 - 挑刺和回应之后,程序把"原始提案 + 回应里改过的地方"合成最终版本并锁死,这就是**冻结协议**。之后谁都不能改它,实验员照它实现。 **精度 ε**:分数上"差多少以内不在乎"的尺度,由任务配置,填圆的现行值是 0.01。几个跟分数刻度有关的常数都从它推出来(见 6.11),这样同一套规则可以用在刻度不同的任务上。变化在 ±ε 以内也是正常结果,照样记账。导出里给改进量标"变好 / 基本不变 / 变差"时也按 ±ε 判断,只是为了方便人读。 **已知最好**:任务说明里给出的公开最好成绩,可以没有。填圆 26 个圆按容差 0 计,现行值是 2.635983。 **运行次数**:一份研究能用的正式运行总数,是研究唯一的预算上限。不设轮数上限,研究一轮接一轮地进行,直到运行次数用完(见第七部分)。 --- ## 三、角色与分工 | 角色 | 人数 | 工具 | 做什么 | | ------ | ------ | --------------- | --------------------------------------------------- | | 研究者 | N(可配置) | 只读工具、提交工具、私人笔记 | 写入口、提案、预测、挑刺、回应、解释、收尾 | | 实验员 | 按任务派 | 完整的文件与 shell 权限 | 按冻结协议实现、做轻量检查、按核验意见修复、实现消融格 | | 核验员 | 按任务派 | 只读工具、提交工具 | 逐项核对实现是否落实了冻结协议 | | 程序(宿主) | — | — | 推进阶段、保管冻结记录与评测文件、启动正式运行、从原始产物独立算分、执行全部数学规则、记账、现算信念本 | | Jev 判别 | — | — | 回答封闭问题,例如两条提案是不是同一个改法、一处实现改动有没有某种性质;程序根据回答合并、退回或拒收 | 研究者之间互相独立。三个角色各有自己的角色提示词。 角色之间默认互信:研究者负责提出方案和指标定义,实验员负责按冻结协议正确实现,程序不逐行复核模型的工作成果。这是分工,不是安全边界。 **谁在什么时候能看到什么** - 同一阶段的提交,要等全部应交者交齐才公开。公开之前,本轮还没公开的提案、范围和入口,别人通过正常材料和查询接口都拿不到。 - 作者自评从交上来那一刻起就封存。在第一次预测、挑刺、回应、第二次预测这几个阶段,它都不给任何人看。 - 第一次预测只有本人看得到,之后各阶段也不给别人看,只进导出。〔自定〕 - 信念本只写已经公开的记录。 **给研究者的材料顺序**:每次叫起一位研究者,第一条消息依次是: 1. **任务说明**:这一步做什么,交给谁读。 2. **你自己的**:你认领的入口、你的私人笔记全文、你自己的候选的运行与消融结果、实验员对你的候选的提醒、答案路径。 3. **公共材料**:任务与本轮情况、基线、研究记录、信念本、上一轮收尾、挑刺与回应、指标清单等。正式证据一样不少;第 2 部分已经给过的内容,这里只写一句指引。 4. **现在交什么**。 **私人笔记**:用来记你自己的判断,尤其是这几样: - 你和别人看法不同的地方; - 你押的是什么、为什么押它; - 什么证据会让你改主意; - 你还走不走自己认领的入口。 工作中的事实不必记,公共材料里都有。 **研究者能做的事**:读任务代码、预置资料和历史记录。不自主搜索外部论文或方案,也不运行代码。 --- ## 四、一份研究的完整流程 ### 4.1 研究开始 1. 程序把这份研究的配置冻结进账本,包括 N、M、因子数上限、每批上限、运行次数、各开关、各决策点用哪条规则、方法参数、提示词哈希。之后的流程只读这份冻结的配置。 2. 已有的结果只有在实验条件完全相符时才能当基线;没有符合条件的结果,就安排一次基线运行,计入运行次数。 ### 4.2 第零轮:各自找不同的入口 第零轮放在基线之后、第 1 轮之前。它不跑正式实验,不扣运行次数,信念本也不变。整轮可以关掉;讨论次数可配置为 1 或 2 次,现行值是 2。 | 步 | 谁做 | 能看到什么 | 交什么 | | ------------- | ------------- | ----------------------- | -------------------------------- | | 0.1 闭门写入口 | 每位研究者各自同时写 | 任务说明、基线代码、基线分数;看不到别人的入口 | 2–3 个入口 | | 0.2 讨论(1–2 次) | 每位研究者,每次各自同时交 | 全部入口(标明作者)、之前各次的讨论 | 一段讨论正文;可以整份替换自己的入口清单 | | 0.3 认领 | 每位研究者各自同时交 | 最终的入口与全部讨论 | 一串志愿,至少排 min(N, 入口总数) 个,可以排别人的入口 | | 0.4 分配 | 程序 | — | 每人分到一个入口,记进账本 | **一个入口写三样**: - 名称:离开清单单独看也读得懂; - 从哪里开始看:先读哪段代码、先问哪个问题、先质疑哪个设定。只写起点,不写"应该改成什么、能到多少分"; - 为什么值得有人去走。 入口之间尽量不重叠,想不出第三个就交两个。讨论的目标是分工,不是达成共识:指出哪些入口其实是同一条路,哪条路没人站但值得走,自己想走哪条。 **分配规则**:按志愿一轮一轮分。 1. 第 k 轮里,还没分到入口的人看自己的第 k 志愿。这个入口还空着、而且只有他一个人选,就分给他。 2. 几个人同时选了同一个空着的入口时,如果入口的作者在其中,分给作者;否则分给研究者编号最小的人。没分到的人进入下一轮。 3. 志愿用完还没分到的人,按编号从小到大,各拿剩下的入口里编号最小的一个。 4. 结果记成一条事实,写明每人分到哪个入口、是他的第几志愿。 分配只读账本里的志愿和入口,所以重算结果相同。N = 1 时不讨论,直接把第一志愿分给他。 **之后怎么用**: - 第 1 轮提案的材料,最前面放"你认领的入口"。提案不必只围着它转。 - 第 2 轮起,入口仍放在"你自己的"那一节,标注"第 1 轮的起点;之后是否沿用由你定"。 - 第零轮结束后,它的全部记录对所有研究者公开,并进导出。 ### 4.3 第 r 轮 **① 开轮(程序)** - 本轮所有任务的材料里都放入信念本。 - 冻结本轮名单和提案上限 M。这两样如果要调整,下一轮才生效。 - 上一轮没跑、而且基线没变的候选,自动留在本轮候选池里。它们沿用原来的冻结协议和回应,不重新挑刺、不重新回应,只重新做第二次预测。作者自评继续封存,作者也不用重新给。留池候选不占作者本轮的提案名额,候选池不设上限。 - 基线变了的旧候选离开候选池,只在信念本里列出名字,可以重新提出。 **② 提案(每位研究者,各自独立)** - 每人交 1 至 M 条合格提案,每条按因子写,格式见第五部分。 - 正文里不写自己估的分数或提升量,那属于作者自评,要封存。可以引用已经测到的分数,并写明出自哪次运行。 - 文献结论和别人报告的数值只能当起点,要说明与本任务的区别。 - 从第 2 轮起,要说明哪些新的观测影响了这条提案。 - 因子超过上限时,把多出来的留到下一轮,不要几个捆成一个因子交。超过上限的提案退回本人重交。 - 交不出合格提案时,在回复里写清卡在哪里,不凑数。这按内部错误处理:研究停下,写明原因。 **③ 判重与合并(程序与 Jev)** - Jev 判断新提案之间、新提案与留池候选之间是不是同一个改法。 - 判为同一改法的几条新提案合成一个候选,所有作者都保留作者关系,由其中编号最小的作者在回应阶段写成一份冻结协议(见 ⑥ 的"统一")。 - 与留池候选重复的新提案,并进那个留池候选。〔自定〕 **④ 第一次预测(每位研究者,各自独立)** - 每人对本轮每个新候选交三个数。材料是原始提案;合并而成的候选,把几份原始提案都给出来。看不到作者自评,也看不到别人的预测。 - 留池候选没有新的原始提案,不做第一次预测。〔自定〕 - 交完即冻结。 - 第一次预测不参与选批,只用来和第二次预测对比,看挑刺与回应有没有让大家估得更准。 **⑤ 挑刺(每位研究者)** - 可以针对整条提案,也可以针对其中某个因子。 - 可以挑的内容: - 混杂因素; - 写得不清楚、没法照着做; - 值不值得花一次运行; - 因子划得对不对,比如"这其实是两个因子吗?"; - 对每条保障,按拦、补、改三问去追问(见第五部分)。 - 因子由作者自己划,挑刺是唯一的第二双眼睛。 - 没有对照代码或已测运行核实过的判断,要写成"(推测)",并写出依据。 **⑥ 回应与统一(提案作者)** - **回应**:逐条答复挑刺,只交改动了的部分,并给出实现条款。作者自评不能改;作者看完挑刺后怎么想,由他在第二次预测里自己交的范围来体现。 - **统一**:合并而成的候选,由编号最小的作者写成一份完整的冻结协议。它仍然按因子写,因子数上限照样适用;要逐条写明每份原提案在哪里体现,不能在原提案和挑刺之外加新改动。 - Jev 检查冻结条款有没有改动评测、有没有自相矛盾,有问题就退回。 - 回应阶段关闭时,协议冻结。冻结协议包括:因子清单、保障清单、协议正文、因子之间的关系、指标、实现条款。 **⑦ 第二次预测(每位研究者,各自独立)** - 每人对候选池里每个候选交三个数,包括自己的候选和留池候选。 - 材料:冻结协议、挑刺与回应,以及自己第一次给这个候选的三个数。看不到别人第一次的数,也看不到作者自评。 - 材料里标了"(推测)"的判断,要当作别人的猜想,不当作证据。 - 收齐 N 人后冻结。选批只用第二次预测。 **⑧ 选批(程序)** - 合并第二次预测,筛出能进候选池的候选,按批内最好期望选出本批,写一条选批记录(见 6.4)。 **⑨ 实现与核验(实验员、核验员)** - 每个入选的候选,由实验员从本批基线出发,按冻结协议实现。 - 实现过程中只做规模和次数受限的轻量检查,不运行正式规模的求解。 - 实验员要交三样东西: - 代码; - 因子位置表:每个因子、每条保障分别在哪几行。同一行既属于某个因子又属于某条保障时,两边都写;不属于任何因子的改动,写一句说明; - `concerns`:照冻结原文实现、但认为会出问题的地方,尤其是某条保障会挡掉或改变什么。没有就写"无"。它不阻止运行,也不改动协议。 - 程序检查实验员有没有改不许改的文件。Jev 检查改动里有没有这几类问题:用了不固定种子的随机数、协议没登记就读时钟、测不到的量写成 0。有就退回。 - 程序把两类情况交给核验员:没有归到任何因子或保障的改动,核验员逐条判断是否越界;同一行同时出现在因子和保障里,核验员在说明里写一句,只是提醒,不判越界。 - 核验员只交逐项结果:每条实现条款、每个因子、每条保障,找没找到、在哪里;没有归属的改动,逐条判断是否越界。只要有一项"没落实"或者判为越界,程序就判不通过,退回实验员修复。修复次数有上限,可配置。 **⑩ 正式运行(程序)** - 先预留一次运行名额,确认进程已经启动后,才扣一次运行次数。 - 运行结束后,程序做这几件事: - 用任务的独立校验器,从原始产物判分;需要时先做合法化; - 采集常规辅助指标,以及事先登记过的假设专用指标; - 记录资源用量; - 记录最终答案出自哪条路径、各条保障动手了几次。 - 每次运行原则上只跑一次。 **⑪ 整批公开与两本账(程序)** 本批全部跑完后,结果整批公开。程序记两本账: - **分数账**:每个候选的实测分数,以及目前手里最好的分数; - **信息账**:每次运行的世界比特、惊讶,以及每个人的范围落在哪一段(见 6.9)。 **⑫ 采纳(程序)** - 只看正向运行的实测分数。最好的有效候选比当前基线高出采纳线以上,就成为新基线;否则保留原基线。 - 被采纳的改法如果只有 1 个因子,正向运行本身就是这个因子的实测,不做消融,直接跳到 ⑱。 - 没有采纳任何候选时,也跳到 ⑱。 **⑬ 列消融格(程序)** - 对被采纳改法的每个因子,各列一格"只关掉它":从完整代码出发,把这个因子换回关掉时的做法,其余因子、配套设定、保障都照完整版本保留。关掉时的做法写在提案里;提案没写,就回到基线在这件事上的做法。 - 只做"从完整版本关掉一个因子"这一个方向,不做"从基线只加一个因子"。 **⑭ 解释(每位研究者,各自独立)** - 材料包括:信念本、本轮各候选的代码与分数、被采纳改法的因子清单、各次运行的产物、实验员的提醒、答案路径。 - 每条解释交两部分: - 一段文字:机制是什么、哪个因子在出力、什么情况下不成立、因子之间在效果上怎么互相依赖,以及结论覆盖哪些设定、没覆盖哪些; - 对每一格给三个数:"关掉这个因子后,有一成、一半、九成的可能低于多少分"。 - 一般交一条就够,真有第二个机制判断时再交第二条,每人最多 M 条。〔自定:上限沿用 M〕 - 没有具体的机制判断,可以直说,范围照实写宽。 - "没有 B,D 就没用"这类效果上的依赖,写进解释,当作预测交给消融去检验;提案里不填依赖。 - 收齐 N 人后冻结。冻结必须早于任何一格消融的启动,这样这些范围才算事前预测。 **⑮ 定测哪几格(程序)** - 推算方向收益,对每一种测格组合,算信息价值和机会成本,选出要测的组合,马上测。 - 没选中的格记"没测",写明原因,以后不补。 - 写一条决定记录,附上全部数字(见 6.7)。 **⑯ 消融的实现、核验与运行** - 实验员从完整代码出发,按因子位置表把指定的因子换回关掉时的做法,保障照留。 - 指标代码照完整代码保留;被关掉的因子本身测不到的量,写 null。 - 代码真的跑不起来时,实验员从两种做法里选一种: - 交"这一格跑不起来:原因"。这一格不启动,也不扣次数; - 报告还需要一起关掉哪个因子,这一格就同时关掉它们,并写明。 - 核验员只查一件事:是不是只关了指定的因子。 - 运行的规矩和正向运行相同。 - 完整代码和基线的分数,直接取本批已有的运行结果,不重跑。 **⑰ 结算(程序)** - 对每一格算撑几成,判配合关系标签;每条解释在每一格上判确认或否定;标出"现有测法分不开"的情况;记世界比特和惊讶(见 6.6)。 - **检查"消融中发现"**:如果某一格的有效分数比当前基线(也就是刚被采纳的完整代码)高出采纳线以上,这一格的代码直接成为下一轮的基线,采纳记录的来源写"消融中发现"。 - 几格都过线时,取分数最高的;分数相同时,取因子编号小的。 - "一起关"的格也同样算。 - 不为它另列消融格。 - 研究的最后一次消融同样适用,过线的那一格就成为最终代码。 - 定下押的因子(见 6.8),写进信念本。 **⑱ 信念本更新与收尾(每位研究者)** - 本轮的全部结果在同一个事务里算完并公开。下一阶段的材料据此现算出新的信念本。 - 每位研究者写一段收尾:什么被支持了、什么被挑战了、下一步想在哪个因子上继续。把结论推广出去时,要写清它覆盖哪些设定。收尾正文原样放进下一轮的提案材料,所有人都能读到。 - 本轮结束时: - 跑过的候选(正向运行已经启动)解封作者自评,进导出;其中有有效成绩的,进战绩里"作者自评 vs 大家合并"那一栏; - 入选了却没跑成的候选,解封作者自评并离开候选池;〔自定〕 - 留池候选的作者自评继续封存。 ### 4.4 研究结束 1. 运行次数用完,研究结束(第七部分"什么时候开下一轮")。 2. 导出全部记录:正向、消融、两次预测、第零轮、提交的替换次数、解封的作者自评、合法化、资源用量、答案路径、`concerns`、两条曲线、常数表。 --- ## 五、每种提交 总原则: - **结构化字段只放最少的内容**:程序要拿来计算或对号的,做成结构化字段;其余写成带小标题的markdown正文。程序不拆分正文,也不检查markdown正文是否齐全,原样转给下一步。 - **每样都有出口**,出口写进字段说明,例如"只有一个因子就写一个"、"不适用:原因"、"没有:为什么"。只存不读的栏目、程序自己推得出的栏目,都不设。 - **阶段公开前,本人可以替换自己刚交的提交**。替换时要指明替换的是哪一份;后续的决定和记账只用最后一版。账本按版本号区分各版,导出里写替换次数。实现和核验阶段不能替换。 - **提交回执**会回显"收到正文 N 字,结尾是:……",模型据此能看出自己交的东西有没有被截断。 | 提交 | 结构化字段 | 正文 | 程序怎么用 | | ----------- | ----------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ----------------------------------- | | 入口(0.1、0.2) | 名称(编号由程序按顺序分配) | 从哪里开始看、为什么值得走 | 编号用于认领与分配 | | 讨论(0.2) | 可选:替换后的入口清单 | 讨论正文 | 转给下一次讨论与认领 | | 志愿(0.3) | 入口编号的有序列表 | — | 分配 | | 提案 | 因子清单:每个因子的编号、名称、做法、关键设定(决定效果的设定值,没有写"无")、关掉时换成什么(可省)、延续(信念本里的因子编号,或空)。保障清单:每条一个短名。指标登记。作者自评的三个数 | 每个因子为什么可能有效;每条保障做什么、属于拦 / 补 / 改哪一种、自检时怎么想的;协议(不许改什么、随机性怎么处理、何时停、什么样的运行不算数);因子之间的关系 | 数因子个数、列消融格、信念本按因子归并;保障短名用来对号;作者自评封存 | | 第一次预测 | 本轮每个新候选的三个数 | 理由 | 和第二次预测对比、信息账 | | 挑刺 | 针对谁(整条提案,或某个因子编号) | 挑刺内容 | 回应时逐条对号 | | 回应 / 统一 | 逐条答复(挑刺编号 + 答复);改动了的字段;实现条款 | 答复正文 | 覆盖提案的对应部分后冻结;实现条款供核验逐条对号 | | 第二次预测 | 候选池里每个候选的三个数 | 理由 | 合并、选批、信息账 | | 实现 / 修复 | 因子位置表与保障位置表;`concerns`(代码由程序从实验员的工作目录冻结,不作为字段交) | 实现说明 | 列出没有归属的改动交给核验员;`concerns` 转给研究者 | | 核验 | 逐项结果(条款、因子、保障:找没找到、在哪里);没有归属的改动逐条判断是否越界 | 说明 | 推出通过与否 | | 消融实现 / 核验 | 需要一起关的因子,或"这一格跑不起来:原因";`concerns`;核验的逐项结果(代码同上,由程序冻结) | — | 这一格的正式运行 | | 解释 | 每一格的三个数 | 机制等文字 | 信息价值、确认 / 否定、信息账 | | 收尾 | — | 什么被支持、什么被挑战、下一步在哪个因子上继续 | 进下一轮的提案材料 | **三个数**:必须严格递增,q₁ < q₅ < q₉,否则退回。认为分数几乎不会变时,写一个很窄的范围,例如 1.2999 / 1.30 / 1.3001。没有"不知道"这个选项,拿不准就把一成和九成拉开。 **保障的自检:拦、补、改三问**。先说清这条保障做的是哪一种动作,再回答对应的问题。这些问题用来引导思考,不要求按表格交答案。 | 动作 | 自检问题 | 回答是下面这样,它就是因子 | | ----------------- | ----------------------------------------- | ----------------- | | 拦:把某些候选、起点或结果挡掉不用 | 挡掉的东西里,有没有评测本来会收下的?比评测更严的检查、在修正之前就做的检查,都算 | 有 | | 补:出事时另交一个东西 | 补上的东西自己能拿多少分?它是不是只是基线的做法、修到合法的原答案,或者报错? | 补的是新做法,或者分数接近正常水平 | | 改:把答案或中间量改一点 | 对一次本来正常的运行,它把最终分数改了多少?只在出事时改,还是每一步都在改? | 改动 ≥ ε,或者每一步都在改 | 每条保障还要回答最后一问:关掉任何一个因子以后,这条保障会不会从"很少用到"变成"一定用到"?会的话,就针对那一格把上面的问题再答一遍。 **延续**只用于同一个想法的新版本,比如换了设定、换了基线。受它启发想出来的新想法不算延续。同一份提案里,两个因子不能延续同一个因子,违反就退回。 **指标** - 最终指标由任务规定,宿主独立计算。 - 常规辅助指标由程序统一采集。 - 假设专用指标由研究者自己定义,执行前在协议里登记,不限定只能从内置清单里选,由候选代码写出。每个假设专用指标要选定"测不到时怎么办": - **缺了只记缺失**:这次运行的成绩照常算。诊断用的量一般选这一种。 - **缺了整次作废**:这次运行不能被采纳,运行次数照扣。只有没有这个量成绩就不可信时,才选这一种。 - 引用别人登记过的指标时,沿用原登记的选法。 - 消融格里,假设专用指标缺失一律只记缺失,不作废这一格。 **答案路径**:候选在写最终指标的同一个文件里,多写两个保留键: - `answer-path`:最终答案出自哪里,取值是 `main`、某个因子编号或某条保障的短名; - `safeguard-triggers`:每条保障这次动手了几次。 程序把这两个键当作辅助记录统一采集,不当作指标;读不到时也不作废这次运行。没写,或者写的取值不在位置表里,就记一个明确的状态,不填默认值。 如果某一格的答案出自某条保障,材料和导出里单独标一行:"本格答案出自保障 X,量到的可能是这条保障的效果,而不是关掉这个因子的效果。" --- ## 六、数学规则 ### 6.1 方向 研究者一律按分数的原值写三个数。对越小越好的任务,程序在合并之后、计算之前,统一换算成"改进量",同时一成和九成对调。下文都按越大越好来写。 ### 6.2 三个数 → 一个人的折线 一个人交了 (q₁, q₅, q₉)。程序画出"低于 x 的把握" Fᵢ(x),依次连接下面五个点: (q₁ − (q₅ − q₁), 0)、(q₁, 0.1)、(q₅, 0.5)、(q₉, 0.9)、(q₉ + (q₉ − q₅), 1) 也就是说:一成到一半之间放 40% 的把握,一半到九成之间放 40%,两端各补一段 10% 的尾巴,尾巴的宽度等于同一侧的半宽。三个数严格递增,所以每一段的宽度都大于 0。 示例:交 2.44 / 2.52 / 2.62,低端尾巴铺在 2.36–2.44,高端尾巴铺在 2.62–2.72。"低于 2.57"的把握是 0.5 + 0.4 × 0.05 ÷ 0.10 = 0.70。 ### 6.3 开放预留与合并 - **正向**:在同一次选批里,取所有人对所有候选的折线(含尾巴)的最低点 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。 - 各人等权,不按以往战绩加权,也不往两头推。 - 同一个人交了几条解释时,他的那一份权重在这几条之间平分。 ### 6.4 入池、选批、分数尺读数 - **入池**:在合并分布里,"比 b 低 ε 以上"的把握不到一半,候选才能进入候选池。 - **批量**:k = min(每批上限, 本轮可用于正向的运行次数)。本轮可用次数见第七部分。候选池里的候选不足 k 个时全部跑,空出来的名额留给以后。 - **批内最好期望**: 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\* 是选中的组合。它表示"按现有看法挑,比什么都知道时平均少拿多少分"。 - **选批记录**写入:各候选的合并范围、是否入池、各组合的 V、选中的组合、分数尺读数,以及所用的选批规则和种子。 ### 6.5 采纳线 设当前基线分数为 B,已知最好为 K\*。 - 有已知最好:采纳线 = min(ε, (K\* − B) ÷ 4);结果低于 ε/100 时取 ε/100,B 已经超过 K\* 时也取 ε/100。 - 没有已知最好:采纳线 = ε。 采纳只看实测分数。 ### 6.6 消融结算 **撑几成**:分数统一换成越大越好。令 G = f(完整) − f(基线),即总提升。被消融的一定是被采纳的改法,所以 G 不小于采纳线;遇到 G ≤ 0 时直接报错。 撑(p) = [f(完整) − f(关掉 p)] ÷ G 撑几成只用最终指标计算。 **配合关系标签**:相对交互量 i = Σ\_p 撑(p) − 1。只用"只关一个因子"、而且有有效分数的格。按下表从上往下判,命中第一条即停: | 条件 | 标签 | 给下一轮的话 | | ------------------ | ------------------- | ----------------------- | | 任一有效格的撑几成 < 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₉] 里面(含两端)记确认,落在外面记否定。〔自定:含两端〕 - 各格各判,不归一,不分功劳。 - 确认与否定只是这一格上事前预测的记录,不代表机制为真的概率,也不代表研究者的信誉。 - 只用解释冻结之后的运行来记账。每次消融单独判,不跨轮累计。 **现有测法分不开**:两条解释在所有测过的有效格上,确认与否定的序列完全相同时,程序自动标出。这不算提交不合格。 **一格的几种结局**: | 结局 | 情形 | 解释在这一格 | 撑几成 | | ---- | ------------------------------- | ---------------------- | ---------------------------------- | | 有效分数 | 跑完、有分数(含合法化后的分数) | 判确认 / 否定;记世界比特与惊讶 | 按公式算 | | 证据不足 | 启动了(扣了次数),但跑崩、超时、没有产物、修不了,或判为违规 | 不判,不记账 | "证据不足:原因" | | 没测 | 信息价值减成本没选中,或者剩余次数不够 | 不判 | "没测:原因(附净值)" | | 跑不起来 | 实验员交了"跑不起来",也没给一起关的方案;不启动,不扣次数 | 不判 | "跑不起来:原因" | | 一起关 | 关 p 时代码跑不起来,实际和 q 一起关了 | 记"证据不足(测的是 p + q 一起关)" | 记在"p + q 一起"名下,不算成 p 的;q 有自己的格时照常测 | - 后四种结局都不进标签的求和。 - "一起关"是对称的:关 p 要连 q 一起关,关 q 也要连 p 一起关,这是同一种设置。已经有结果就直接沿用,不重跑,不重复扣次数,也不重复记账。 ### 6.7 方向收益、信息价值、机会成本、选格 **方向收益**:下一轮要选的,是"在被采纳改法的哪个因子上继续改",每个因子算一项;"换思路"不放进这个菜单。设关掉 p 的那一格分数为 x,在 p 上继续改的收益是: 收益_p(x) = h × [f(完整) − x] ÷ G h 是剩余空间:有已知最好时 h = max(K\* − f(完整), ε/100);没有已知最好时 h = 1。h 只改变刻度,不改变测不测。 这个比例量的是 p **已经拿到**的分数,不是它还能再拿多少,所以只适合用来排序,直接当收益用会估高。信息价值和机会成本用的是同一个数,只要各因子估高的倍数相同,结论就不受影响。 **成分与权重**: - 每条解释算一个成分,开放预留也算一个成分。 - 起始权重:所有解释合起来占 1 − λ,研究者之间等权,同一个人的几条解释平分他那一份;开放预留占 λ(λ 同 6.3)。 - 每个成分对每一格都有一个分布:解释用它自己的三个数补上尾巴后的折线,开放预留用这一格的均匀分布。 - 同一个成分里,各格之间互相独立。 **信息价值**:测格子集合 S 的价值为 VOI(S) = E_{S 的结果}[ max_p E(收益_p | S 的结果) ] − max_p E(收益_p) - 测到的格落在值 v 上时,每个成分的新权重 ∝ 旧权重 × 这个成分在 v 处的密度;测了几格就连乘几格。 - 测到的格,直接用实测值换算收益;没测的格,用新权重对各成分的期望收益做加权平均。 - 积分用确定的数值方法,不随机抽样,这样进程被杀后重算,结果逐位相同: - 全部格都测时,按一维积分精确计算。同一个成分里,"各格收益的最大值低于 t"的把握等于各格把握的连乘;对它逐段做多项式精确积分,再按成分权重相加。 - 只测一部分格时,每格在自己的开放预留范围内按折点切段,每段再等分成 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),即按现在的看法押的那个因子的期望收益。 - 这个式子假设下一轮每个候选的涨幅在 0 到 2ĝ₀ 之间均匀分布。 - 运行次数是唯一的预算,每花一次在消融上,就少一次跑正向候选的机会,所以成本总是要算。 - 净值(S) = 价值(S) − 成本(S)。 **选格**: 1. 只考虑格数不超过"余额 − 1"的非空组合,至少留 1 次给下一轮正向。余额为 0 或 1 时不做消融。 2. 在这些组合里,取净值最大、并且净值 > 1e-12 的组合。净值相差不到 1e-12 的视为相同,先取格数少的,再按因子编号从小到大比。所有组合的净值都不大于 1e-12 时,一格都不测。 3. 没选中的格记"没测":组合里放不下的写"剩余次数不够",其余写"信息价值不足以抵过成本",都附上它所在组合的净值。没测的格以后不补。 ### 6.8 押的因子 - 一次消融全部结算完之后,算每个因子的方向收益: - 有效格用实测值换算; - 其余格(没测、证据不足、跑不起来、一起关)用"只按有效格更新过的成分权重"来估; - "一起关"的分数不参与权重更新; - 实测落在所有成分的范围之外、权重无从更新时,保持起始权重。〔自定〕 - 收益最大的那个因子就是押的因子,同时记下预测收益。 - 两种情况不押: - 任一有效格的撑几成 < 0:记"不押:关掉 pN 反而更好 X 分"; - 挑出来的因子估计收益不为正:记"不押:估计收益不为正"。 - 下一轮补记两样东西:实际涨幅(被采纳改法的实测提升,没有采纳记 0),以及那个改法里有没有因子写了"延续"押的因子。这些记录用来在多份研究之间检查"方向收益会不会估高"。 ### 6.9 比特、惊讶、核对范围准不准 - **格宽** Δ = ε/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 或无穷大顶替。 - **分歧量**(只记录)= 各人折线等权平均后的世界比特 − 各人世界比特的平均值。这里的平均不掺开放预留,所以大家交的范围完全一样时分歧量为 0。 - 只对有效分数记比特和惊讶。世界比特、惊讶、分歧量、分数尺读数和战绩都用第二次预测来算。 - 范围是偏宽还是偏窄,看落点四段和覆盖率。按人分开、按正向与消融分开报告,第一次和第二次预测也各报一份。估得准时,覆盖率约 80%,四段比例约 1 : 4 : 4 : 1。 - 比特的多少首先取决于大家事前说得有多宽,所以"比特变少"不能单独证明学到了东西,必须和惊讶、落点一起看。 - 衡量好坏的尺子只有一把:比特、惊讶、覆盖率永远按同一个算法、从每个人的原始范围算出来,不跟着选批、选格这些决策规则一起变。 ### 6.10 信念本写什么 1. **按因子分行**,每个因子一行: - 因子名,括号里写关键设定; - 出现在哪些候选里、在哪个基线上测过; - 关掉少多少分、撑几成,没有有效分数的格写明结局; - 测之前的合并范围、世界比特、惊讶; - 哪些解释被确认、哪些被否定; - 答案出自哪里; - 撑几成为负时写"关掉 pN 反而更好 X 分(实测)";过了采纳线时,再加一句"已采纳为下一轮基线(消融中发现)"。 2. **每次消融一句程序读出的结论**,外加一行:"程序按方向收益押的因子:pN(预测收益 X)。这只是按公式推出来的参考,你可以不跟。"不押时写明原因。 3. **选批历史**和各次运行结果,包括合法化扣掉的分和资源用量。 4. **战绩**,分方向写: - 中位数偏高几次、偏低几次; - 被穿过上沿几次、下沿几次; - 包住几次; - "作者自评 vs 大家合并"那一栏,只收已经跑过、有有效成绩的候选。 5. 因为基线变了而离开候选池的旧候选名字。 ### 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 | 固定 | 方法参数只在做方法实验时才改,配置对话不会问。研究开始时,全部取值冻结进账本。 --- ## 七、预算与扣次 **预算** - 正式运行次数事先定死,不能因为结果不好临时扩大。它是唯一的预算上限,也是唯一决定研究长度的上限,不设轮数上限。 - 计算时间不设总预算:单次运行的时限和核数已经由任务定死(见第八部分),每次运行最多花多少计算是固定的,再设计算时间总额只是重复运行次数。每次运行的 CPU 秒、墙钟时间、峰值内存照实记录。 - 模型调用不设上限,用量照实记录;拿不到用量时记"未知",不记 0。 - 程序记录整个环境的用量:正式运行和实验员会话的 CPU 时间、GPU 时间、内存、墙钟时间,以及模型调用量。这些只记录,不作为限制。 **什么时候扣次数** - 基线、正向候选、消融格,都按实际启动计入。 - 启动前先预留一次名额,确认进程已经启动,才扣一次。 - 启动后失败、超时、被取消,照样计数。 - 确认没有启动就取消的,退还名额;已经发生的准备成本照样记录。 - 不确定有没有启动时,先核对。核对不出来就记"状态未知"并停下,等用户决定;不自动退还,也不重跑。 - "这一格跑不起来"的情况不启动,也不扣次数。 - 轻量检查有次数和时长上限(见配置),只能用来检查语法、接口和极小的样例。正式规模的求解,哪怕叫"调试",也是正式运行,不能借轻量检查绕开预算。 **什么时候开下一轮** - 余额至少还有 1 次,就开下一轮;余额为 0,研究结束。不设轮数上限。 - 本轮正向的批量 k = min(每批上限, 余额)。 - 消融最多测"余额 − 1"格,保证下一轮至少还能跑 1 次正向(见 6.7)。 - 最后一次正向如果用掉了全部余额,又采纳了多因子改法,这次采纳就没有消融,各格记"没测:剩余次数不够"。 **示例**(推演,不是真实运行):运行次数 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 | 余额用完,研究结束 | --- ## 八、违规与公平比较 **公平比较靠事先定死的条件** - 单次运行的时限和核数由任务规定(填圆:120 秒、1 核)。这是所有候选共用的比较条件,不是用来防作弊的。容器限 1 核,并且让程序看到的核数也是 1,否则候选会照常开多个进程,去抢那 1 个核。 - 同一批候选从同一份基线出发。 - 每次运行记录 CPU 秒、墙钟时间、峰值内存。材料里同时写"是基线的几倍"和"占单次时限的几成"。 **合法化**(只在任务能写出修法时才做) 1. 校验器按容差 0 判断原产物。 2. 不合法时,按题目里写死的、只会让分数变差的规则,把产物修到合法,再判分。 - 填圆的规则是只缩小参与违反的圆,不挪圆心:每个圆的半径减去它参与的最大违反量(重叠或出界,取较大的那个);仍不合法,就再减一个最小浮点单位;半径减成负数时取 0。 - 圆心在正方形外,或者半径缩到 0 仍不合法,判为修不了。 3. 修完的分数如果比原分数还高,直接报错。 4. 每次运行多记三样:原违反量、原分数、合法化扣掉的分数。 5. 跑崩、超时、没有产物、修不了的运行,照样扣次数,记为失败。正向运行出现这种情况不能被采纳;消融格记"证据不足"。 **防作弊靠结构,不靠审查** - 评测程序和评测文件由宿主保管,实验员改不到;程序会检查有没有改了不许改的文件。 - 宿主从原始产物重新计算最终指标,不采信候选自报的成绩。 - 用硬规则校验文件、格式和合法性。 - 不用模型审查实验员的命令,也不用模型审查运行时的观测量。 - 同类系统里真实发生过的作弊,大多是钻了评分程序的漏洞,所以发现漏洞就去修评分程序。研究进行到一半发现漏洞时,只把它记录下来,这份研究照常跑完或停下;修好以后另开一份新研究。 **违规怎么处理** | 情况 | 处理 | | ---------------------- | --------------------------------------------------------- | | 能确认的违规(由硬规则或宿主重算判出) | 这次运行不进记账,次数照扣,写一条记录,研究继续。正向运行不能被采纳;消融格记"证据不足:违规(原因)",不记比特 | | 只是模型怀疑的 | 记下来,在导出里列出,不暂停 | | 宿主自己说不清的,比如这次运行到底启动了没有 | 停下,等用户核对 | 资源超限被杀,按超时失败处理,不算违规。不设"暂停整个研究、等人处置"的流程。 --- ## 九、中断与恢复时的记账含义 - **每个花钱的动作都先登记、再执行、再登记结果**,包括正式运行和模型调用。每次启动都走同一条恢复路径:从账本读出当前状态,找出已经登记、但还没有结果的动作,逐个核对。 - 正式运行能核对出"确认启动"或"确认没启动"的,按第七部分扣次数或退还;核对不出来的,记"状态未知"并停下。 - 模型任务还没有收下提交的,重新发起;已经收下提交的,以账本为准。 - **驱动了实际动作的决定,一经写入,恢复时就按原决定走,不重算。** 这类决定包括:选批、测哪几格、入口分配、押的因子。还没写入的决定,由同一个纯函数从账本里的输入重新算出,结果相同。这里不用全局随机数;需要随机时,种子由研究编号、轮次、版本算出。 - **同一格只结算一次**,同一条解释在同一格上只有一行账。重复读取、导入、恢复,或者换个编号重建同一次消融,都不会再记一次账。同一次运行服务于不同的比较时,记录共享同一个来源,不算成几份独立的证据。 - **冻结的东西不可覆盖,更正一律追加记录。** 这包括协议、因子清单、因子位置表、范围、原始证据。冻结先于启动,这个先后关系在中断前后都要成立:中断前已经冻结的范围,仍然算事前预测;中断后才写的范围,不能冒充事前预测。 - **运行一旦启动,就按实测记账。** 跑完才发现实现有错,也不标为无效重跑。 - **不支持中途作废重做某一轮**,也不支持替换提示词模板、放弃某个阶段。想重来,就另开一份新研究。 - **开发入口**:研究因为模型交不出合格提交而停下后,开发者可以修好提示词,在同一阶段只重新发起那一个任务。这个入口由配置开关控制,默认关闭,开发调试时才打开。〔自定:默认关闭〕打开过这个入口的研究,不能当验收证据。 - **每个阶段结束时核对几条总账**,不符就停。例如:扣掉的次数等于已确认启动的正式运行数;每条证据只记一次账。 --- ## 十、任务需要提供什么 一个任务要交给方法这些东西: 1. 目标、最终指标,以及指标的方向(越大越好还是越小越好)。 2. 基线代码、数据,以及允许修改的范围(哪些文件不许改)。 3. 独立校验器:从原始产物判断是否合法、计算最终指标。校验器和评测文件都由宿主保管。 4. 单次运行的资源和时限,以及轻量检查的范围。 5. 精度 ε;已知最好成绩(可选)。 6. 一份说明,写清"评测会收下什么样的结果"。判断一处改动算不算保障,要靠它。 7. 合法化规则(可选)。只能是只会让分数变差的修法;写不出来就不做合法化。 8. 常规辅助指标的定义。 9. 评测是否确定,也就是同一份代码跑两次,结果是否逐位相同。本方法有三处依赖评测确定:比特计算、"结果一出来就没有不确定"、消融时不重跑基线和完整版本。结果有波动的任务(例如训练任务)要先重新设计这几处,目前不支持。 填圆是第一个完整任务。nanochat 和 AI4AI 目前只预留接口。 --- ## 十一、方法的开关与对照流程 做方法实验时,下面这些可以换。研究开始时,程序把配置翻译成"这份研究的步骤清单"和"每个决策点用哪条规则",存进账本。被关掉的步骤,在账本里记一条"按配置跳过"。互相冲突的组合在配置校验时就报错,例如关掉了预测,选批却不是随机。 **步骤开关** - 消融:关掉时不列消融格;解释照样写文字,但不给每格的三个数。 - 挑刺与回应。 - 第零轮。 - 第一次预测。 **选批规则** - 批内最好期望; - 均匀随机:从候选池的全部候选里随机抽一批,不看入池门槛,批量规则不变,种子按第九部分的方法定。 **选格规则** - 信息价值减成本; - 全测; - 随机抽同样多的格; - 都不测。 **朴素循环**:一组开关的命名预设,不另写流程。 - N 位研究者每轮各交提案,不挑刺、不回应、不预测,提案直接冻结; - 判重和输入检查照常做; - 从提案里均匀随机选批; - 实现、核验、运行照常;采纳规则和完整流程相同; - 不做消融,没有信念本、第零轮、私人笔记、收尾,候选也不留池; - 下一轮的材料只有任务说明、当前基线代码,以及之前全部运行的提案正文与分数; - 一直跑到运行次数用完。 --- ## 十二、已知局限 1. 方向收益量的是已经拿到的分数,当成收益用会估高。靠"押的因子、预测收益、下一轮实际涨幅"这几项记录,在多份研究之间检查。 2. 因子怎么划由作者决定,只靠"拿不准就算因子"和挑刺把关;"延续"写错了也察觉不到。 3. 保障的定义仍然要靠读代码来判断。答案路径和实验员的提醒能在事后发现问题,但不能在事前保证。 4. 消融中发现的新基线,其余因子的作用是在原来的完整代码上测出来的。因子之间有交互时,两者会不同,信念本里会写明"测于完整代码"。 5. N 位研究者用的是同一个模型。第零轮、材料顺序和两次预测都是为了把他们拉开,效果要实际量一量;量不出差别时,只能如实写"同一个模型抽样了 N 次"。 6. 第一次预测估的是原始提案,和最后真正跑的冻结协议可能有出入,所以两次预测的对比里,也混着"协议被改过"这一层。 7. 所有研究者都认为下一步该在同一个因子上继续时,信息价值严格为 0,这次采纳的因子就不测,没有"关掉它少多少分"的实测。导出里会记下"没测"和净值,真实运行后看这种情况出现得多不多,再决定要不要把知识本身的价值算进信息价值。 8. 一份研究只有十来次运行、一到三次采纳,所有比较都只能当案例来讲。