@ben_burtenshaw: https://x.com/ben_burtenshaw/status/2067615361428545566

X AI KOLs Timeline 新闻

摘要

一份关于监督微调(SFT)训练AI代理的详细教程,完全基于纯PyTorch从零构建,使用Qwen3-0.6B模型,解释了下一个词元预测和标签掩码的机制。

https://t.co/CcFD3hNmYs
查看原文
查看缓存全文

缓存时间: 2026/06/18 16:17

训练智能体:第一节课;从零开始进行SFT

这是《训练智能体系列》的第一篇文章,我将在该系列中发布一系列关于如何训练你自己的智能体的文章和直播。我会从非常简单的内容开始,逐步深入。第一节课的主题是“基于你的轨迹微调智能体“。请查看 YouTube 上的那场直播。

为了准备那节课,我将用这篇文章从基础讲解监督微调(SFT),不涉及任何抽象概念。我之前在 hf.co/learn 上已经介绍过很多这方面的内容,但在这里我只想提供一个简洁且最小化的版本。SFT 训练模型来复现演示的输出。你给它提供提示和补全的对子,模型就会学习在看到提示时生成补全。这就是全部思想。本文用纯 PyTorch 构建了一个最小的 SFT 循环,这样你就能确切看到训练信号是什么,以及它如何改变模型。

代码很短。完整循环不到100行,没有任何训练框架的干扰。我们使用 transformers 加载模型和分词器,然后手动编写损失函数和优化器步骤。

准备工作

这些示例在一块16 GB显存的 GPU 上运行,类似于免费或低成本云端笔记本提供的配置。模型是 Qwen3-0.6B,足够小,可以快速迭代。目标是理解运行机制,而不是真的去训练一个强大的模型。

只需少量依赖项:

以 bfloat16 加载模型并放到 GPU 上:

下一个词元预测就是监督信号

词元(token)是一段文本,通常是一个词或词片段,由分词器映射为一个整数。语言模型读入一串词元,并在每个位置输出下一个词元的概率分布。下图展示了一个四个词元序列的情况。每个位置读取到当前位置的所有词元,然后预测紧随其后的那个词元。

下一个词元预测。

下一个词元预测。

训练利用这些预测作为监督信号。在每个位置,模型有一个预测分布和一个目标(即实际下一个词元)。损失函数是它们之间的交叉熵。当模型自信且正确时,损失接近零。当模型自信但错误时,损失更大。

这就是 SFT 中的全部学习信号。没有单独区分答案好或坏的概念,只有演示数据中应该出现的下一个词元。因为信号是逐词元的,所以模型在补全部分每有一个词元就得到一个梯度。

数据格式:提示、补全、掩码

一个 SFT 样本包含两部分。提示(prompt)是输入,比如用户的问题。补全(completion)是你希望模型生成的输出。在智能体的上下文中,这些被包装在“轨迹“(traces)中。你希望模型学会生成补全,而不是重新生成提示,因此损失只应落在补全词元上。

这就是掩码(masking)的作用。你将提示和补全拼接成一个序列,输入模型,但告诉损失函数忽略提示位置。PyTorch 的交叉熵通过一个哨兵标签 -100 来实现这一点,它会跳过这些位置。掩码示意图展示了对齐关系:输入行包含提示词元后跟补全词元,标签行对每个提示词元填 -100,对每个补全词元填真实的词元 ID。

SFT 标签掩码。提示被替换为 -100,因此损失只落在补全词元上。

SFT 标签掩码。提示被替换为 -100,因此损失只落在补全词元上。

代码对一段简短对话应用聊天模板,并根据助手掩码构建标签:

messages 列表保存对话,每轮一个字典。apply_chat_template 将其渲染成一个词元序列,return_assistant_tokens_mask 标记哪些词元属于助手。其余全部变成 -100。

纯 PyTorch 训练循环

循环包含五个步骤,如示意图所示:将序列送入模型得到 logits、移位 logits 和标签使每个位置与它预测的词元对齐、计算交叉熵、反向传播、更新优化器。

SFT 训练循环

SFT 训练循环

模型输出的 logits 每个输入位置对应一个分布。位置 t 预测位置 t+1 的词元,因此你需要丢弃最后一个 logit 和第一个标签来对齐它们:

这就是一个完整的 SFT 步骤。loss.backward() 为每个权重填充损失梯度,optimizer.step() 迈出一小步来降低损失。交叉熵是显式写出的,因此移位和掩码都没有隐藏。

需要记住的要点

SFT 是模仿。它向模型展示要做什么,并训练模型去复制。其机制是带掩码的下一个词元预测:每个补全词元贡献一个交叉熵项和一个梯度,而提示词元不贡献任何东西。天花板是数据,因为通过 SFT 训练的模型无法可靠地生成其演示从未展示过的行为。

这使得 SFT 稳定且样本高效,并且 SFT 的成本就是编写和验证优质补全的成本。当你能够演示你想要的输出时,SFT 是最简单有效的工具。当你能够对行为进行评分,但难以轻松演示行为的最佳版本时,强化学习就会登场,但那将是另一篇文章的主题。

相似文章

@qinzytech: https://x.com/qinzytech/status/2066585405479371092

X AI KOLs Timeline

对构建自我进化AI代理的两种方法的技术分析:基于模型的方法(通过像SSMs或具有快速权重更新的transformer等架构,以及训练方法)和基于工具的方法(通过内存或能够自我重写的元工具)。作者为不同受众提供了实用建议。