autoresearch核心逻辑很简单——人负责改提示词,AI负责改训练代码,然后让它自己跑下去。
Andrej Karpathy上周末打包发布了一个新项目:autoresearch。
Karpathy深夜炸场:开源630行代码“AI研究员”,5分钟完成一次训练,单卡就能跑,自我进化
核心逻辑很简单——人负责改提示词,AI负责改训练代码,然后让它自己跑下去。
项目地址:https://github.com/karpathy/autoresearch
它在做什么
每个实验跑整整5分钟,结束后记录验证损失。Agent在git特性分支上自主循环工作,每找到一个更低验证损失的设置,就提交一个commit。
调的东西包括:神经网络架构、优化器、所有超参数。
你可以用它来比较不同提示词、不同Agent的研究效率。代码约630行,单文件,单GPU。
三天后,结果出来了
三天前,Karpathy让 autoresearch 挂机,在一个深度为 12(depth=12)的模型上对 nanochat 进行了大约2天的微调。它找到了约20个能降低验证损失的修改。昨天他测试了这些修改,发现它们不仅全都可以叠加生效,还能无缝迁移到更大的(深度为 24)模型上。把这些修改全部叠加后,今天实测发现,排行榜上的“达到 GPT-2 级别耗时”从 2.02 小时降到了 1.80 小时(约 11% 的提升),这将是排行榜上的新记录。
这些都是实打实的改进,能产生实质性的变化。对于这个AK自认为已经被手动调优得相当不错的项目,AK这仅凭一己之力的第一次粗浅尝试,居然就能取得这么好的效果,这让AK有点震惊。
提交对比,
三天前:
三天后:
Agent具体发现了什么
以下是这轮改进里比较重要的几条:
• QKnorm没有配缩放乘数,导致attention过于分散。Agent找到了合适的乘数来让attention更集中,指向未来的优化方向。
• Value Embeddings需要正则化,原来一点没加。
• Banded attention设置过于保守,之前忘了调。
• AdamW的beta参数全都设错了。
• Weight decay schedule需要调整。
• 网络初始化需要调整。
这些问题,都是在Karpathy已经手动调优相当长时间的基础上被发现的。
在整个过程中,Agent处理了大约700次变更,自主观察实验结果序列,并以此规划下一步实验。
Karpathy怎么看这件事
这对AK来说是破天荒的头一次,因为他早就习惯了手动对神经网络训练进行迭代优化。你想出点子,去实现它们,跑一遍看看有没有效果(验证损失有没有降低),在此基础上再想出新的点子,去读些论文找找灵感等等等等。过去二十年里,这就是他每天赖以生存的家常便饭。
如今,看着智能体端到端地、完全靠自己走完整个工作流,自主摸索并完成了大约 700 次代码修改,这感觉太疯狂了。它确确实实是在审视一系列的实验结果,并利用这些结果来规划下一步的实验。虽然这(目前)还算不上什么新颖的、突破性的“研究”,但所有的调整都是“真实有效”的,他之前手动也没发现它们,而且它们能产生叠加效应,确确实实地改进了 nanochat。
更大的意义
所有前沿的 LLM 实验室最终都会走这条路。这就是最终的 Boss 战。当然,在大规模应用时情况会复杂得多——你面对的绝对不会仅仅是一个需要调整的 train.py 文件。但做这件事“仅仅是个工程问题”,而且它肯定能跑通。你会启动一个智能体集群(swarm of agents),让它们协作去调优较小的模型,然后把最靠谱的点子推广到越来越大的规模中,而人类(可选地)只在最外围做一些辅助贡献。
更普遍地说,任何你关心的、且能够以相当高的效率去评估的指标(或者有更高效的代理指标,比如去训练一个小网络),都可以交给智能体集群进行“自动化研究(autoresearched)”。
非常值得思考一下,你所面临的问题是否也属于这个范畴。