技术复盘方法:别让每次失败都白费
说实话,上周我们组那个跑了大半年的实验项目算是彻底黄了。模型准确率卡在87%,调参调得人想吐。凌晨两点,看着屏幕上的loss曲线像心电图一样抖,我脑子里突然蹦出一个念头——这半年我们到底复盘过几次?答案是,一只手数得过来。
于是就想写写技术复盘这件事。你可能觉得这玩意儿虚,但我要说,它可能比你的论文、代码、实验数据都重要。真不是开玩笑。
复盘不是总结,是挖坟
很多人以为复盘就是开个会,把过程说一遍,然后写个报告归档。那是总结,不是复盘。真正的复盘是要把成功或者失败的原因一层层挖出来,直到挖到那个真正的变量。
举个例子。去年我们团队发表了一篇关于深度强化学习的论文,效果不错。按理该高兴,但导师拉着我们开了三次复盘会。第一次,我们把成功归功于算法改进。第二次深挖,发现其实是数据清洗的功劳。第三次才真相大白——是我们随机种子恰好选得极端,导致baseline崩了。当时大家都笑了,笑完一身冷汗。如果没深挖,换个种子可能就全废了。所以复盘这个事,就得像考古一样,一层层刮。
注意,复盘的目的不是找功劳,是找变量。尤其是那些不起眼的变量。
技术复盘会议白板便签纸讨论场景图
AAR四步法,但别死板套
AAR四步法,但别死板套
业界有个著名的AAR(After Action Review)方法,美军用的,谷歌也常用。四步:当初想干什么?实际发生了什么?为什么会发生差异?下次怎么办?
听起来简单,但执行起来容易跑偏。我见过很多团队,第一步说完就直奔第四步,把中间过程全跳了。这跟看美剧直接跳大结局有什么区别?前因后果都没搞明白,谈何改进。
正确的姿势是——把第二步和第三步单独划出时间。特别是第三步,一定要逼着每个人说。别怕吵架,复盘会不吵架就没价值。我记得有一次复盘,两个工程师为了一个bug的原因吵得面红耳赤,最后发现是环境变量的问题,谁都没错。但如果不吵,那个环境变量可能永远找不到。所以,复盘会允许争论,但必须基于事实。别搞人身攻击。
不过话说回来,AAR也不是万能的。它适合单一项目,但如果是长期迭代的东西,比如模型持续训练,就得用更轻量的方法。
KPT,适合日常迭代的轻量复盘
KPT就是Keep, Problem, Try。保持什么,问题是什么,尝试什么。这个方法优点就是快,每周十分钟。我们组现在每个周五下午都会开个KPT小会,每人写三条。不写长篇大论,就写关键词。
比如这周,Keep:“数据增强的代码模块化做得不错”。Problem:“训练速度太慢,因为batch size没调”。Try:“试试混合精度训练”。就这么简单。但别小看它,积累一个月下来,你能看到清晰的轨迹。而且它特别适合跟敏捷开发结合。我们就是靠这个方法,把模型迭代速度提了一倍。
有一点很重要:KPT的后面两步必须落实到行动。如果只是写在便利贴上,下周还是老问题,那就没意义了。所以每次会后,要指定负责人和截止日期。
程序员白板KPT方法便利贴写项目问题图
复盘最大的坑——事后诸葛
复盘最大的坑——事后诸葛
有个心理学现象叫后见之明,就是事情发生后,人的记忆会自动篡改,总觉得自己早就预测到了。这会让复盘变成自欺欺人。怎么破?我有个土办法:记录原始想法。在项目一开始,每个人写一段自己对结果预期和关键假设的备忘录,封存。复盘时打开,对比真实情况。这一招特别狠,能让你直面自己的认知偏差。
另一个坑就是复盘会开成批斗会。记住,复盘是找原因,不是找责任。一旦开始追究谁谁谁,大家就会防御,信息就流动不起来了。所以建议复盘会上,禁止说“你当时为什么不…”,而应该说“我们当时为什么没看到…”。这个措辞的差异,决定了复盘是开放还是封闭。
补充一点,复盘也不是越大越好。像那种几小时的长会,往往效率极低。我觉得有效复盘,控制在30-60分钟内,聚焦最核心的问题。如果超时,说明你还没抓住重点。
结合当下——AI时代的复盘要数据化
现在搞科研,尤其是AI领域,很多实验都是高成本、长周期。一个模型训练可能就要花几百万。这种情况下,技术复盘不能光靠开会,得把监控数据、日志、指标变化曲线都纳入复盘材料。
我们现在的做法是,每次实验后自动生成一份摘要,包括训练曲线、超参数、环境信息、git提交记录。然后复盘会上一起过。这样以后出问题,能快速回溯。这其实也顺应了行业里提倡的“可复现性”。你看看那些顶级团队,比如DeepMind、OpenAI,他们内部肯定都有极其严格的实验记录和复盘机制。
再补充一点:现在很多科研工作流已经支持自动记录,比如Weights & Biases这样的工具,但它只记录数据,不记录思考。所以复盘的核心还是人的思维碰撞。
还有,行业里最近流行一个叫“LLM-as-a-judge”的东西,但它也没法替你做复盘。工具是辅助,关键还是你愿不愿意花时间去做深度思考。
写了这么多,其实就一句话:技术复盘不是走流程,是你对自己劳动的尊重。别让失败白失败,也别让成功稀里糊涂。说实话,很多团队不是没能力,是懒得复盘。但越是忙,越要停下来想想。
也不知道有没有人看,反正我先写为敬。如果有用,拿去;如果没用,那也耽误不了你几分钟。就这样。