跳到主要内容
返回文章列表

最近 AutoResearch 的风很大。
大到什么程度呢。
打开知乎,全网都在吹。
从 Karpathy 的 AutoResearch ,到清华的 AutoSOTA,再到各种二创解读,整体画风基本就是一句话,AI 负责科研,你负责睡觉。
我第一次看到这个说法的时候,说实话,心里是有点慌的。
毕竟前两年大家还在说 AI 要干掉码农。
现在一转头,算法也要没了。
程序员刚被端上桌,科研狗紧随其后。
我寻思这也太快了吧。
于是我怀着一种非常复杂的心情,悄悄去看了一下这些东西到底在干嘛。
看完之后,我反而松了一口气。
饭碗暂时保住了。
不是因为这些东西没用。
恰恰相反,它们有用。
但它们有用的方式,和外面广告里吹出来的那个画风,基本不是一回事。
你真的去看 autoresearch 里面那些实验提升到底是怎么来的,会发现一个挺可怕的事实。
它不是突然发现了什么人类没见过的新算法。
也不是 AI 半夜顿悟,参透了深度学习的终极奥义。
很多提升,来自一些非常工程,非常细碎,非常让人看完沉默的地方。
比如 parameterless QKNorm 缺少 scaler multiplier,导致 attention 太 diffuse。
比如 Value Embeddings 很需要正则化,但之前没加。
比如 banded attention 调得太保守,甚至可以说就是忘了好好调。
比如 AdamW betas 参数混乱。
比如 weight decay schedule 和 network initialization 还有明显空间。
你看到这些东西的时候,第一反应很难是,卧槽,AI 会科研了。
更像是,不是哥们,你们之前实验是这么跑的啊???
这就很微妙。
因为这些改动当然有价值。
它们能涨点,能修问题,能让模型变好。
但你说这叫方法创新,我多少有点绷不住。
这更像是一个很有耐心的工程师,把你的实验系统从头到尾翻了一遍,然后一边看一边说,这里没乘 scaler,这里正则漏了,这里 attention 太散,这里优化器参数不对,这里 schedule 没调明白。
听起来和Research一点不沾边。
再看 AutoSOTA。
它里面那些看起来比较能打,比较让人眼前一亮的提升,其实也大多是几类东西。
一类是评测和后处理型提升。
比如 CiteEval、MDReID、Proxy-SPEX、ProteinBinding、WeakStrongPref。
这类东西经常收益很大,因为原始方法的能力其实已经在了,只是 metric-facing 的那一层没写好。
转换、匹配、融合、re-ranking、None 处理、join key。
这些东西听着也不像科研。
听着像什么。
像你 debug 评测脚本 debug 到凌晨两点,结果发现一个 key 没 join 对。
真的就是一声叹息。
另一类是推理时 compute 和 search scaling。
比如 MathFusion、Circuit Stability、Token Recycling、FR-Spec、MoSES。
更多样本,更长生成,更深搜索,更合理的 speculative tree,再加一点局部搜索和后处理。
它不是让模型突然开悟。
它是让模型多试几次,多绕几条路,多花一点算力,把本来就有机会撞出来的东西撞出来。
还有一类是校准和方差控制。
比如 CausalPFN、Neural MJD、TS-RAG、DEEPER、Proxy-SPEX。
bootstrap,antithetic sampling,temperature mixing,feature calibration,score calibration,smoothing。
这类东西做实验的人太熟了。
不是你发现了新大陆。
是你的估计太抖,你把它压稳了。
再往下,还有训练 schedule 和超参修复。
GuidedEmbed、PIR、ChannelNorm、Balanced Active Inference、NeuralSurv、Certified Unlearning。
很多所谓大提升,拆开一看,不是新算法爆杀旧算法。
是 baseline underfit。
是 LR schedule 不适配。
是训练没收敛。
是优化器动态不稳。
是原来的实现自己就没站稳。
看到这里我就更绷不住了。
因为这件事最可怕的地方,不是 AI 有多强。
而是它反过来照出了一件事,我们现在很多论文,到底有多少是真的有效?
这话听起来很难听。
但你仔细想想。
如果一篇论文的代码里存在明显错漏,baseline 没调好,训练流程没跑稳,评测后处理也有坑,结果它居然还能在这个基础上写出一个提升,然后作者再围绕这个结果编一个解释。
那这个提升到底是什么?
真的是论文里说的那种本质提升吗?
真的是所谓更高维的感知吗?
还是只是一次在错误屎山上的过拟合?
这件事真的挺吓人的。
因为论文不是发完就没了。
一篇论文出来,被引用,被复现,被改进,被写进综述,慢慢变成后面人的起点。
但这个起点可能是什么。
可能是一个作者自己都没完全搞明白的实验系统。
可能是代码和论文根本对不上的实现。
可能是一个没调好的 baseline。
可能是一个训练没收敛的对照组。
可能是一个 evaluation pipeline 里藏着的坑。
然后大家在这个基础上继续盖楼。
一层一层盖。
一路盖出来一个看起来很漂亮的学术建筑。
但地基下面到底是什么,没人想看。
因为看了很麻烦。
而 autoresearch 做的事,有时候就是很不体面地把地基挖开,然后告诉你,这里是空的,这里是歪的,这里当年可能就是没写对。
这一下就很黑色幽默。
大家以为 AI 要开始替人类做科研了。
结果它第一个揭示出来的东西是,你们人类之前很多科研,可能本来就错了。
这才是我觉得最有意思的地方。
不是 AI 已经会科研了。
而是它发现,很多论文离真正的科研可能还差的远。
差在哪里。
差在工程。
差在实验。
差在那些论文里不会写,但真实系统里每天都在要命的细节。
这也是为什么我自己后来开始搭一个基于现在科研工作流的自动研究框架。
刚开始我当然也试了现在那些常见玩法。
果不其然。
它给我的建议基本就是,这里改个 loss,那里调个参数,这里加个 regularization,那里换个 schedule。
我当时看完就笑了。
不是因为这些建议完全没用。
而是因为这些东西,基本都是我的来时路。
尤其是我自己是做low level的,很多外面看起来像是可以随便试的东西,在真实系统里根本不是那么回事。
一个系数为什么是这个值。
一个 layout 为什么这么排。
一个 kernel 为什么这么写。
一个中间量为什么要这么存。
一个融合为什么做到这里就停。
一个 precision 为什么不能再降。
一个 buffer 为什么不能再省。
这些东西不是拍脑袋想出来的。
很多都是被 profiling、带宽、cache、寄存器压力、数值稳定性、吞吐延迟、硬件行为,一轮一轮抽出来的。
你以为这里可以随便改。
我知道这里一改,寄存器就炸。
你以为这里可以加一个正则。
我知道这个算子在芯片实现比我整个网络还费时间。
你以为这里可以换个 schedule。
我知道这个东西在某个分布下会出badcase,在某个极端条件会被客户骂死。
很多时候不是我们不知道更漂亮的写法。
是丑东西活下来了。
而且是被真实系统毒打之后活下来的。
所以当一个 autoresearch agent 跑过来跟我说,建议你这里改一下 loss,建议你这里调一下 coefficient,建议你这里加一个 normalization。
我只能说,哥们,这个坑我以前踩过。
甚至可能不是踩过一次。
是踩过以后埋了,后来又有人挖出来,又踩了一次。
这种建议对一个刚写出来的科研 repo,可能非常有用。
尤其是那种作者本身工程经验不多,baseline 也没认真调,评测脚本还藏坑的项目。
autoresearch 进去扫一圈,确实可能涨很多。
因为里面到处都是松动的螺丝。
但如果你面对的是一个已经被长期打磨过的实验系统,情况就完全不一样。
这里不是没有问题。
一定有问题。
但问题通常不会长得那么天真。
它不会是这里忘了调个参数这么简单。
它可能是某个中间表示在特定输入分布下出现结构性偏移。
可能是某个优化在平均指标上没问题,但在边界 case 上破坏了数值稳定性。
可能是某个统计量看起来变好了,但其实只是因为采样策略换了以后方差被掩盖了。
可能是某个 kernel 单看吞吐提升,但放进完整 pipeline 之后因为 memory traffic 变差,整体反而慢了。
可能是你改了一个局部看起来很合理的东西,结果把整个系统的状态流搅乱了。
这才是真实世界。
它不是一个 loss 加一个超参就能解决的。
后来我就不再指望它给我自动发论文了。
我开始按照自己的想法搭。
具体怎么搭我不能讲太细。
但我现在的感受很明确。
它确实有用。
只是它的用法,和外面想象中的自动科研不一样。
它更像是一个统计助手。
一个实验伙伴。
一个不知疲倦,愿意替我干脏活的东西,就像我之前一直用的那样。
过去我想验证一个模型中间图的特性,可能要改一堆代码。
加 hook。
存中间 tensor。
处理不同输入分布。
写统计脚本。
画图。
做对照。
再把实验结果和历史版本对起来。
这个事情我当然知道有价值。
但很多时候,光是想一下就不想做了。
因为要动两百行代码。
因为要重新接一套统计。
因为要跑很多组对照。
因为要把结果整理出来太麻烦。
现在它能帮我做这些事。
这就很爽。
它能帮我把过去那些我知道应该做,但我懒得做的实验补上。
它能帮我自动跑统计。
自动整理中间分布。
自动对比历史版本。
自动把异常 case 捞出来。
自动把某个模块的行为按 shape、输入分布、数值区间拆开看。
它也可以当一个知识库,帮我找一些类似问题的论文或者解决思路。
当然,大部分论文建议还是没什么用。
这个也很正常。
我本来也没指望它天天给我天启。
它只要能让我少偷懒,多做验证,把过去那些被太麻烦了挡掉的实验重新捡起来,就已经很有价值了。
所以我现在对 AutoResearch 的判断反而变得很朴素。
它不是替代研究员的东西。
至少现在不是。
它更像是扩大研究员实验带宽的东西。
以前你一周只能认真验证三个问题。
现在它可能帮你验证十个。
以前你懒得做的统计,现在它替你做。
以前你懒得翻的历史实验,现在它帮你翻。
以前你脑子里一个怀疑,因为实现成本太高就放弃了,现在它能帮你把这个怀疑变成一个可跑的实验。
这件事非常重要。
但它不是AI 负责科研,你负责睡觉。
更像是,AI 负责把你以前懒得干的脏活干掉。
然后你终于没借口偷懒了。
这其实比自动发论文更现实。
因为科研里真正难的,从来不只是提出一个 idea。
很多时候难的是,你愿不愿意把这个 idea 拆成实验。
我看一篇论文,脑子里跳出来三四个改进方法。但是最后都会被搁置。
但是现在不一样了,AI不能替我创新。
但它可以把验证成本打下来。
一旦验证成本下来了,很多以前靠懒躲过去的问题,就躲不过去了。
所以我的结论很简单。
如果你的项目是一个没什么工程经验的人写的,代码里有坑,baseline 没调明白,评测流程也不严谨,那 autoresearch 这种东西确实能帮你 debug。
甚至会非常有用。
它会像一个不会累的工程师,把那些低级错、漏调项、评测坑、训练不稳的问题一个个翻出来。
这挺好。
科研确实需要这种东西。
但如果你指望它自己帮你发顶级论文,自己提出核心问题,自己完成机制判断,自己从实验结果里抽出真正可靠的解释。
那还是算了吧。
至少现在,还远远不是这么回事。
它更像一面镜子。
照出来的不是 AI 已经把科研干掉了。
照出来的是,我们过去很多论文,可能本来就没有那么扎实。
有些提升来自没调好的 baseline。
有些创新来自评测脚本的缝。
有些解释来自结果之后的脑补。
有些所谓方法,可能只是工程屎山上一次偶然有效的补丁。
这话当然不好听。
但我觉得,这可能才是这波 autoresearch 最有价值的地方。
它没有证明 AI 已经会科研。
它证明了科研里有大量工作,本来就更像工程审计、实验统计和系统调试。
这些活过去没人爱干。
现在 AI 可以干。
挺好。
但真正决定方向的东西,还是得人来。
问题该怎么定义。
现象该怎么解释。
一个提升到底是真的机制变化,还是采样噪声,还是评测漏洞。
一个实验结果到底能不能相信。
这些东西,至少目前,不能交给一个只会到处试的 agent。
所以别神化它。
也别看不起它。
它不是科研终结者。
它是一个新的实验基础设施。
对真正做研究的人来说,它最大的价值不是替你睡觉。
是让你醒着的时候,能验证更多东西。
至于科研本身。
你还是得醒着。