AI大神卡帕西教你辅导小模型学数数!像极了辅导熊孩子功课

卡帕西通过合成任务与精细token控制,教会微型模型nanochat精准数出“strawberry”中的字母r,揭示小模型能力注入的核心工程方法。

一个只有蜜蜂大脑大小的小模型,居然也能学会“数草莓英文strawberry里有几个r”?听起来是不是有点魔幻?AI圈大神安德烈·卡帕西(Andrej Karpathy)最近干的一件“小事”——他用自己开发的微型语言模型 nanochat d32,硬是教会它精准数出“strawberry”里到底有几个字母“r”。别笑,这背后其实藏着一套超实用的“给小模型加能力”的方法论,特别适合资源有限但又想让模型变聪明的开发者们!

安德烈·卡帕西是前特斯拉AI负责人,也是斯坦福大学的AI研究员,更是深度学习和大模型领域的顶流人物。他不仅懂理论,还特别擅长用极简代码把复杂概念讲清楚。这次他搞的 nanochat 项目,就是一个轻量级开源语言模型实验平台,目标就是让大家看清:小模型到底能不能干大事?

回到“数r”这件事。表面上看,这问题简单到离谱——strawberry 里明明有3个r嘛!但对一个小模型来说,这简直是一场灾难。为什么?因为模型在生成答案时,如果只能靠“一个token”就给出最终数字,那它必须在一次前向传播中完成:识别单词、拆解字母、计数、校验……所有步骤压在一起,小模型根本扛不住。

所以卡帕西的解法非常聪明:把整个思考过程“摊开”成多个步骤,让模型一步步来,每一步只干一件小事

具体怎么做?他新建了一个叫“SpellingBee”(拼字蜜蜂)的合成任务。这个任务会自动生成大量对话样本:用户问“strawberry里有几个r?”,助手则按固定套路回答。但这个套路可不是随便写的,而是经过精心设计的“教学脚本”。

首先,为了让模型能稳定触发这个能力,用户提问的方式被做了大量数据增强——比如“你能数一下strawberry里有几个r吗?”、“告诉我单词strawberry中r出现的次数”、甚至用其他语言问。这样模型就不会只认一种句式,泛化能力更强。

其次,最关键的细节来了:tokenization(分词)陷阱

很多人不知道,像“pollocks”这样的词,在模型眼里可能被切成“poll”和“ocks”两个token,而前面有没有空格,token ID完全不同!所以卡帕西强制让模型在回答时,先把单词用单引号括起来,比如‘strawberry’。因为tokenizer的规则里,单引号会强制创建token边界,这样就能确保后续拆字母时不会出错。

接着,模型必须“拼出”整个单词:s-t-r-a-w-b-e-r-r-y。注意,这里每个字母后面都不能有空格,否则又会改变token。他用逗号分隔字母,利用逗号在tokenizer中的固定行为,确保每个字母都是独立token。这一步看似啰嗦,实则是把“拼写”这个隐式任务显式化,让小模型能专注学习。

然后才是计数环节。模型会逐个检查每个字母是不是“r”,如果是,就把计数器+1,并且把当前计数明确写出来:“目前r的数量是1…现在是2…现在是3”。这种显式计数,相当于给模型提供了“中间记忆”,让它不用靠内部状态硬扛,而是可以回看前面的token来继续推理。

更妙的是,卡帕西还让模型用两种方式解题:一是手动推理,二是调用内置的Python解释器工具。虽然目前所有样本都是“完美答案”,没有错误,但这种双路径设计是在训练模型形成一种“验证思维”——未来如果加入错误样本或强化学习(RL),模型就能学会自我纠错。

他还额外加了一个叫“SimpleSpelling”的辅助任务,专门训练模型拼写常见但容易错的单词。因为如果连单词都拼不对,数字母就无从谈起。这种“分而治之”的策略,极大提升了训练效率。

最后,卡帕西坦言:如果是个千亿参数的大模型,可能随便训训就会了。但 nanochat d32 只有32层,参数量极小,相当于“蜜蜂大脑”,所以必须靠在训练数据中高频、结构化地重复这个任务,才能让它“记住”并“学会”。这不是魔法,而是工程智慧。

总结一下,这套方法的核心思想是:对小模型,别指望它“顿悟”,要手把手教它“分步解题”。通过合成数据、控制token细节、显式推理链、多路径验证,你就能给小模型注入看似复杂的能力。这不仅适用于数字母,还能扩展到数学计算、逻辑推理、甚至代码生成。

未来,卡帕西还计划加入“模拟错误+恢复”机制,以及用强化学习让模型在真实交互中自我优化。这才是真正让小模型“活”起来的关键。

所以,别再说小模型没用了。只要方法对,蜜蜂大脑也能干出聪明事!