# 提案 这一轮,你和另外几位研究者各自提出改法。你交的每一条,接下来要经过几个人的手:别的研究者读它、挑毛病、估它能跑多少分;实验员照着它写代码;跑完以后,大家拿结果回头对照它。一条好提案的标准很朴素:别人不用来问你,就能看懂你要改什么、为什么觉得有用、什么结果算你错了。 ## 冲最高分 正向实验只管分数(系统提示词开头讲了为什么):在你想得到的改法里,交你认为最可能拿到最高分的那条,哪怕它要换掉整道工序、结果难以预料。只修一处、结果几乎能事先算出来的小步,跑完多半只确认了你已经知道的东西;它要是值得做,就作为配套放进冲分的那条里。冲分不等于捆:路可以走得很远,因子照样要拆得开(见下面"两种会让结论变成假的做法")。 ## 从哪里出发 先读"你自己的"一节:你认领的入口、你的笔记、你自己候选的结果。第 1 轮时入口是你的起点,从它说的那个问题开始看;看完觉得别处更值得改,就提别处。第 2 轮起,走不走入口由你定。 第 1 轮还没有任何实测。先在思考里做一遍写入口时的那三步,这次落在你认领的入口上:不看基线,要是从零写你会怎么解、哪种最可能拿最高分;再把基线拆成工序;最后对照,看哪几道工序要换掉、哪几道留着。 再读公共材料。"上一轮的收尾"写着每个人觉得什么被支持、什么被挑战、下一步想在哪继续;"信念本"按因子记着测过的东西,以及程序按公式推的"押的因子",那只是参考,可以跟也可以不跟;"上一轮实验员实现时的提醒"常常比研究者的推理更早看出某处会出问题;研究记录里有跑过的每个候选和它的答案出自哪条路径。 要知道的处境是:别人也读了同一份公共材料,而且你们是同一个模型。收尾里写的下一步、押的因子、基线里最显眼的毛病,每个人都看得到,从这些直接推出来的那一步,很可能有两三个人同时交,交上去就是同一个候选,白占了几个人的名额。所以动笔前先问自己:读完公共材料,谁都会想到的那一步是什么?拿到同样材料的同事有多大可能也提我这一条?那一步值得做,就交,但同类只交一条;你其余的提案,从只有你手上有的东西出发:你的入口、你的笔记、你自己候选的结果、你读代码时注意到的某个具体现象。 从现象出发时,往回想它的原因,再想改法。也可以问:这份程序由哪几道工序组成,最终分数受哪几处制约?它默认了哪些做法,却从来没人测过换掉会怎样?这些自己读代码去盘点,不用写出来。对每个想法再问一句:它是在现有做法里调一个旋钮,还是换掉某道工序的做法?两种都可以,只是要知道自己在做哪一种。不同也不等于更复杂。 先在思考里宽宽地列一串,只写一句话一个,查过它们彼此不重复,再挑真心觉得值得一跑的。两条想法,一条跑出结果以后另一条的结果大体能猜到,就是同一条改法:只在次数、幅度、阈值、时长这类数值上不同的几个版本,都算同一条。拿不准取值,就把取值规则写进关键设定,不拆成几条交。 ## 按因子写 一条提案由一到几个因子组成,因子数不超过材料"任务与本轮"里写的上限。改法被采纳以后,程序会把因子逐个关掉重跑,看每个因子撑了几成;你写得越清楚,那一步越不会测错东西。 做法写到别人能照着实现出同一个东西。好:"字典满了以后,删掉最近 1000 次查找里没被用到的词条,每次最多删四分之一。"坏:"改进字典管理。"要用的数值写成规则或公式,不写由它算出来的数值表。也不写到代码级:变量怎么排、函数怎么拆是实验员的事,写到"两位实验员照着写,不会写出两样东西"就够了。一个因子里只写一种做法,不写"用 A 或 B";另一种也值得试,另提一条。 一个因子用到另一个因子的产物时(比如它读另一个因子统计出来的表),写明关掉被依赖的那个、它自己照开的那一格里,它怎么运作、那一格量到的是什么。不写,那一格多半会量到"它被废掉了",而不是关掉另一个因子的效果。 每个因子为什么可能有用,写成一句带方向的小假设,再写一句它在什么情况下会没用。好:"按访问频次而不是先后决定淘汰,热门页面不会被一阵冷门请求挤出去,命中率会升高;如果访问本来就很均匀,它几乎没用。"坏:"改进淘汰策略可能影响结果"——涨了跌了都能说"早料到了"。 保障清单里的每一条,照系统提示词"因子与保障"那几问过一遍。 ## 两种会让结论变成假的做法 一种是把几件事捆成一个因子。写完挨个看你的因子,问一句"如果只有它,我还想不想试?"想的,它就是一个因子;不想、只是顺手的,删掉或另提一条。因子数超过上限时,只有三种办法:拆开、多出来的留到下一轮;删掉一件;或者两件离了对方确实说不通,在理由里说清为什么。捆成一个因子交,消融时只能一起关,永远分不出是哪一件在出力。 另一种是挑着说:只引用对自己有利的结果,或者先看到某个组合好,再回头编"它们为什么配合起作用"。因子之间的关系写你事前真实的猜测,猜不出就写"不清楚",这本来就是消融要回答的问题。 ## 延续 延续只用于同一个想法的新版本:信念本里某个因子换了设定,或搬到了新基线上。比如上一轮测过"缓存预取(提前 4 块)",这一轮改成提前 8 块,是延续;受它启发想到"按访问模式分别预取""空闲时才预取",是新想法,留空,可以在做法里写一句受哪个因子启发。把几个新想法都写成延续同一个因子,信念本就会把几件不同的事记成同一个因子的几个版本,所以一份提案里最多一个因子延续同一个因子。研究记录里跑过的改法再提时,写明这次差在哪、为什么这个差别可能改变结果。 ## 协议 协议写清什么不许改、随机性怎么固定、什么时候停、什么运行不算数。写清不许改什么,是因为实现的人顺手改了别的,结果变好了也说不清是哪个改动起的作用。停止条件写死,因为实现的人擅自加一个提前退出,分数变了,可那不是你提的改法。 想用一个专门的量来检验某个因子的小假设,就登记一条指标。 ## 你自己的三个数 作者自评照系统提示词"给范围:三个数"去给。不必为了在几种做法里挑一种,先把每种的分数各推一遍:哪种更好,正是正式实验要回答的。 ## 交几条 本轮你可以交一到 M 条(M 写在材料"任务与本轮"里)。一条一条地交;交第二条之前,想清楚它和前面那条在机制上差在哪。宁可交一条你真心看好、写得清楚的,也不要为了交满而补一条你自己都不看好的。 一条都找不到时,就不交,在回复里写清卡在哪:缺什么信息,试过哪些方向、为什么放弃。用户会读到你写的原因。