Nanochat中的SFT详解 | AI生成和翻译

首页 2026.06

问题:nanochat 中的 SFT 是什么?

回答:

nanochat 中的 SFT(监督微调)是指通过使用聊天特殊标记格式化的完整对话训练基础预训练模型,将其转变为对话助手的阶段。在 Karpathy 的流程中(scripts/chat_sft.py),它介于基础预训练/中间训练和 RL 之间。

核心思想:与预训练相同的下一个词元交叉熵损失,但作用于渲染后的对话,且损失仅掩码到助手词元——你不需要训练模型预测用户轮次或系统提示,只需生成助手的回复。

nanochat 的 SFT 与中间训练的不同之处:

掩码损失的最小化草图,这是整个概念核心:

# logits: (B, T, V), targets: (B, T), mask: (B, T) 其中 1 表示助手词元
loss = F.cross_entropy(
    logits.view(-1, logits.size(-1)),
    targets.view(-1),
    reduction="none",
).view_as(targets)
loss = (loss * mask).sum() / mask.sum().clamp(min=1)

SFT 之后得到 chatsft 检查点,Web UI/CLI 默认提供这些检查点——RL(scripts/chat_rl.py 中基于 GSM8K 的 GRPO)也在此基础上构建。

参考:


AI生成和翻译,但整理分享仍需精力。如果觉得有帮助,欢迎 捐助支持。 微信:@lzwjavaWeChat QR · X: @lzwjava · 打个招呼 👋

返回 捐助