Andrej Karpathy 为 nanochat d32 教授如何统计“strawberry”(或类似变种)中字母 r 的数量,这是一次为小模型增添新能力的有趣尝试。他构造了一个名为 SpellingBee 的合成任务,生成用户提问和理想解答示例,再通过中期训练(SFT 微调)或强化学习使模型获得这一能力。整个过程需要注意以下关键点:
- 必须确保用户提示和问题足够多样化;
- 对于 nanochat 这样的小模型,token 化细节至关重要。比如,在处理过程中需要注意空格,先将单词标准化为引号括起的形式,再逐字拆分以便分布推理计算候选答案,最后通过迭代明确计数;
- 模型采用两种路径求解:一是模拟“心算”的手动计算,二是利用 nanochat 内置的 Python 解释器来获得答案。当前每种方法都能达到理想状态,但未来可以通过模拟错误及恢复示例、或强化学习的方式进一步提升鲁棒性。
有评论提到,小模型必须通过在数据中大量呈现相应任务才能提前学会;同时,也引发了大家对未来是否应构建由专门训练的小模型集合共同完成复杂任务的思考,而非单靠一个大模型。此外,还有讨论涉及如何扩展任务至视觉编码器、任务泛化、模型记忆与新技能兼容的问题,以及任务委派给专门计算服务的可能性。
此例说明,即使在类似蜂大小的“脑袋”中,通过精心设计任务和数据,也能让 LLM 展现出远超预期的能力,同时也提示我们在能力组合、模型调度等方面还有更多探索空间。
原文链接:x.com/karpathy/status/1981746327995465816
