昨晚我教 nanochat d32 如何计算草莓中的 'r'(或类似变体)。我认为这是一个很好的/有趣的例子,展示如何为 nanochat 添加功能,我在这里写了一份完整的指南: 这通过一个新的合成任务 `SpellingBee` 完成,该任务生成用户请求此类问题的示例,以及助手的理想解决方案。然后我们在这些示例上进行中期训练/SFT 微调,以赋予 LLM 这种能力,或者通过 RL 进一步训练,使其更强大。尤其是在较小的模型规模上,有许多细节需要正确处理,指南逐步讲解了这些细节。简要概述如下: - 你必须确保用户提示/查询的多样性 - 对于像 nanochat 这样的小模型,必须非常注意标记化细节,以使任务对 LLM 来说更容易。特别是,你必须小心空格,然后必须将推理计算分散到多个部分解决方案的标记中:首先我们将单词标准化为引号,然后拼写出来(以打破标记),然后我们迭代并保持一个显式计数器,等等。 - 我鼓励模型以两种不同的方式解决模型:一种是手动方式(在脑海中进行心算),另一种是通过 nanochat 可以访问的 Python 解释器的工具使用。这有点像 "烟雾和镜子",因为目前每个解决方案都是 "干净的",没有错误。可以调整任务以模拟错误并通过示例演示恢复,或者运行 RL。最有可能的是,两者的结合效果最佳,前者作为 RL 的先验,并提供可供其使用的内容。 如果 nanochat 是一个更大的模型,你会期望或希望这种能力在某个时刻更容易 "显现"。但由于 nanochat d32 的 "大脑" 大约是 ~蜜蜂的大小,如果我们想让它计算草莓中的 r,我们必须通过在数据中过度表示它来实现,以鼓励模型更早地学习它。但它有效!:)