自动研究代理调整nanochat,发现20处改进,降低训练时间11%
三天前,我让autoresearch在depth=12模型上调优nanochat约2天。它找到了大约20个改善验证损失的修改。我昨天测试了这些修改,发现它们都是可累加的,并且可以迁移到更大的(depth=24)模型。将所有修改叠加后,今天我测得排行榜上"Time to GPT-2"从2.02小时下降到1.80小时(约11%的提升),这将成为新的排行榜条目。所以,是的,这些都是真正的改进,并且产生了实际影响。我有点惊讶,我最初的简单尝试在已经手动调优得相当好的项目上竟然效果这么好。
这对我来说是第一次,因为我很习惯手动迭代优化神经网络训练。你想出点子,实现它们,检查是否有效(更好的验证损失),基于此想出新的点子,读一些论文寻找灵感,等等。这是我20年来日常工作的主要内容。看到代理自主完成整个工作流程,端到端地处理了大约700个修改,真是令人惊叹。它真的观察了实验结果的序列,并据此规划下一个实验。这还不是新颖的、突破性的"研究",但所有的调整都是"真正的",我以前手动没有发现它们,而且它们累加起来确实改进了nanochat。其中较大的改进包括:
- 它注意到我的无参数QKnorm没有附加缩放器乘数,导致我的注意力过于分散。代理找到了乘数来锐化它,指向了未来的工作。
- 它发现Value Embeddings非常喜欢正则化,而我没有应用任何正则化(哎呀)。
- 它发现我的带状注意力过于保守(我忘记调整了)。
- 它发现AdamW的betas全乱了。
- 它调整了权重衰减计划。
- 它调整了网络初始化。
这些都是在我已经花了相当多时间调优的基础上取得的。确切的提交在这里,来自这个"第1轮"autoresearch。我将启动"第2轮",同时我也在考虑多个代理如何协作以解锁并行性。
https://github.com/karpathy/nanochat/commit/6ed7d1d82cee16c2e26f45d559ad3338447a6c1b
所有LLM前沿实验室都会这样做。这是最终的老怪战斗。当然,在规模上要复杂得多——你不仅仅有一个train.py文件需要调优。但做到这一点"只是工程问题",而且会奏效。你启动一个代理群,让它们协作调优较小的模型,将最有希望的想法推广到更大的规模,人类(可选)在边缘贡献。
更广泛地说,任何你关心的、能够有效评估的指标(或者有更高效的代理指标,例如训练一个更小的网络),都可以由代理群进行自动研究。值得思考你的问题是否也属于这一类。
这对我来说是第一次,因为我很习惯手动迭代优化神经网络训练。你想出点子,实现它们,检查是否有效(更好的验证损失),基于此想出新的点子,读一些论文寻找灵感,等等。这是我20年来日常工作的主要内容。看到代理自主完成整个工作流程,端到端地处理了大约700个修改,真是令人惊叹。它真的观察了实验结果的序列,并据此规划下一个实验。这还不是新颖的、突破性的"研究",但所有的调整都是"真正的",我以前手动没有发现它们,而且它们累加起来确实改进了nanochat。其中较大的改进包括:
- 它注意到我的无参数QKnorm没有附加缩放器乘数,导致我的注意力过于分散。代理找到了乘数来锐化它,指向了未来的工作。
- 它发现Value Embeddings非常喜欢正则化,而我没有应用任何正则化(哎呀)。
- 它发现我的带状注意力过于保守(我忘记调整了)。
- 它发现AdamW的betas全乱了。
- 它调整了权重衰减计划。
- 它调整了网络初始化。
这些都是在我已经花了相当多时间调优的基础上取得的。确切的提交在这里,来自这个"第1轮"autoresearch。我将启动"第2轮",同时我也在考虑多个代理如何协作以解锁并行性。
https://github.com/karpathy/nanochat/commit/6ed7d1d82cee16c2e26f45d559ad3338447a6c1b
所有LLM前沿实验室都会这样做。这是最终的老怪战斗。当然,在规模上要复杂得多——你不仅仅有一个train.py文件需要调优。但做到这一点"只是工程问题",而且会奏效。你启动一个代理群,让它们协作调优较小的模型,将最有希望的想法推广到更大的规模,人类(可选)在边缘贡献。
更广泛地说,任何你关心的、能够有效评估的指标(或者有更高效的代理指标,例如训练一个更小的网络),都可以由代理群进行自动研究。值得思考你的问题是否也属于这一类。