跳到主要内容
SecondHome

loss mask 的细节:模型到底在学哪些 token

13 分钟进阶4bL8 p.11-19 ↗p.39 ↗录像 ↗支撑材料 4 篇

SFT 的损失公式人人会写,公式里那个 mask(损失掩码)才是真正的设计决定:同一条轨迹、同一个 next-token loss,mask 划在哪,模型学到的就是动作、文风,还是停不下来。本篇沿 slides L8 p.11-19 走 mask 全线:chat template 把整条轨迹套成一条 token 序列(p.11);只对 assistant span 算损失的公式与 render→tokenize→mask 的造法(p.12-13);TRL/Axolotl/LLaMA-Factory 三框架的同一个决定(p.14);stop token 必须在 mask 内、否则模型可能学不会停止(p.15);think 块留上下文/进训练两个独立开关与 Nemotron 3 Ultra 的取舍(p.16);BalanceSFT 的轮内加权与「按样本配平、按 token 结账」的账本错位(p.17-18);最后落在无人做过的 8B mask 消融(p.19),收尾是 LIMA 1,000 条的不可外推边界(数字出自 LIMA 论文)。

伴读第三节「SFT:把示范写进参数」里那句「只对答案部分算损失」,落到 agent 轨迹上是一串必须逐个拍板的小决定:模板、公式、stop token、推理块、token 账本。

本篇把它们排成一列,队尾停在一个无人做过的实验面前。这一步至今没有公开消融,每一家的划法都是工程自觉 (L8 p.11-19)。

一、模板即边界:trainer 只见一条串和一列 bit

InstructGPT 把 SFT 立为三段管线的第一步;mask(损失掩码)决定这一步究竟把什么写进权重。

第一步的第一件事,是让多角色轨迹变成模型吃得下的形状。chat template(聊天模板)把 user/assistant/tool 消息连同角色标记套进一个模具,产出一条 token 序列 (L8 p.11):

<|im_start|>tool↵3·failed,·41·passed<|im_end|>…<tool_call>str_replace(...)</tool_call><|im_end|>

注意 <|im_start|> 这类记号:它在词表里是单个特殊 token,不是一串普通字符 (L8 p.11)。序列有了,学哪段用一条与它等长的 mask 表示,每 token 一 bit (L8 p.12):

L(θ)=−∑t: mt=1log⁡pθ ⁣(xt∣x<t)\mathcal{L}(\theta) = -\sum_{t:\,m_t=1} \log p_\theta\!\left(x_t \mid x_{<t}\right)

只有 mt=1m_t=1 的 token 计入损失,默认划法只学 assistant (L8 p.12)。

observation(工具返回、环境反馈)在这套语义里是条件上下文,模型不学着预测它 (L8 p.12)。要学的是另一件事:世界长这样时,下一个动作该是什么。

mask 怎么造 (L8 p.13):render 阶段记下每段 assistant span → tokenize → span 内 token 置 1、其余置 0。

时序是理解这件事的关键。训练真正开始时,角色已经消失了:trainer 眼里没有 user/tool/assistant,只有一条 token 串和一列 bit。mask 的全部语义,都封死在模板这一步。

这套语义还给训练与部署立了一条军规:两边的模板必须一致到空白级别。部署时追加的工具消息会改写前缀,模板一漂移,训练时的条件分布就不再是部署时的条件分布 (L8 p.39)。

拿到一份训练数据,按这张图逐类 token 判断在不在 mask 内:

<|im_start|>assistant                     → 0  角色头由系统供给,永不是目标
3·failed,·41·passed(observation)        → 0  条件上下文,不是预测目标
<tool_call>str_replace(...)</tool_call>   → 1  assistant 的动作,真正要教的
<|im_end|>(收尾这条消息)                 → 1  stop token,模型要自己学会产出

同一个决定,三大框架各配了一个开关 (L8 p.14):TRL 叫 assistant_only_loss,Axolotl 叫 roles_to_train,LLaMA-Factory 叫 train_on_prompt;Axolotl 还为 stop token 单独留了 train_on_eos。

名字不同,语义是同一个。差别只在 TRL 把 span 标记放进模板本身,另两家留在 trainer 配置里。

打开任何 SFT 配置,先问三句

角色头在不在损失里?stop token 在不在?think 块在不在?三问答完,这场训练在教什么就基本清楚了。

二、边界上最贵的两个 bit:stop token 与推理块

mask 划漏一格,代价不是少学一点,而是学错一件事 (L8 p.15-16)。

最典型的是 stop token(停止词元)。角色头由系统供给,永远不是预测目标;但一条消息怎么收尾,得模型自己产出。所以 stop token 必须在 mask 内 (L8 p.15)。

哪家的模板把它漏在外面,模型从头到尾没被要求过停下来:损失账面完全正常,线上症状是停不下来。

K3 的 XTML 格式干脆用独立 token 把 think/response/end_of_msg 拆开,否则「the model may not learn to stop.」(L8 p.15)。

End of turn 这个位置扛着三重语义:结束一条消息、交回工具、宣告任务完成;拆成独立 token,模型才可能分别学会三件事。

第二个易漏项是推理块(think 块)。它有两个互不相干的是 / 否 (L8 p.16):

  • 留上下文:决定这段思考能否解释随后的动作。
  • 进训练:一旦进 loss,长此以往会沉淀为模型自己的写作风格。

两个开关、四个象限,没有默认正确的一格。Nemotron 3 Ultra 给出一组示范取舍:预算截断的推理留在上下文里,给后续动作留解释;人为截断点从 loss mask 掉 (L8 p.16)。半截草稿不配成为风格。

管推理时:下一步动作的条件里有没有这段思考。有,动作更可解释、更连贯;没有,上下文更省。

管训练时:这段思考进不进损失。进,它会沉淀成模型的写作风格;不进,它只是 teacher 的草稿,借道而已。

三、mask 之内还有账本:按样本配平,按 token 结账

mask 定的是谁进损失;每类 token 在损失里占多大权重,它管不着。损失按 token 加总,而 agent 轨迹的 token 分布极度不均 (L8 p.17):长推理主导 loss,真正要对的是短工具调用。

Thought: (大段推理:比对文件、排除候选、确认修改点…… 整块都在 mask 内,逐 token 计入损失)assistant: <tool_call>str_replace (…)</tool_call>(短短一行,同样在 mask 内)Observation: 损失按 token 结算 —— 这一轮的梯度几乎全由推理块贡献,真正的动作只占零头Thought: BalanceSFT(Hao 2025)就是对着这本账来的:SSB 按样本重配推理 token 与工具调用 token 的权重,HDR 再把难例重采样回来

错位还有更结构性的层面 (L8 p.18):数据集按轨迹条数配平,损失却按 token 结算,一条长轨迹可以吃掉几乎全部 token。

MAI-Thinking-1 的教训:你以为配平了的混合,在 loss 账面上可能被单类长轨迹完全主导。

四、无消融之地:一个人人做得起的实验

以上所有细节有一个尴尬的共同点:改 agent SFT 的 mask 并测后果,这样的实验至今一篇也没发表 (L8 p.19)。整条线靠的是各家不写进论文的工程自觉。

唯一已发表的 unmask prompt 有益案例,成立条件是长 prompt + 短回答 + 少数据;agent 轨迹三点全反,结论搬不过来 (L8 p.19)。

做一次像样的 mask 消融,8B 规模就很便宜,至今无人跑 (L8 p.19)。LoRA 把门槛再往下拉:冻结主干、只训低秩注入,mask 消融落进消费级硬件的射程。

配上知乎那篇 agentic SFT 全流程当工程对照,一个认真的团队可以把这格空白填上。

最后是外推的边界:LIMA(Zhou et al., 2023)用 1,000 条精选样本做到 43% 的对比追平 / 胜过 GPT-4(数字出自 LIMA 论文),常被引为数据少也行的证据。

但 LIMA 的对象是闲聊式对齐,状态短;agent 轨迹是多步决策。从闲聊到 agent,少而精不可外推。

与本讲的连接

在 4b 训练线上,本篇上承《改行为改在哪》:那篇定改在权重,本篇定写进权重的是哪些 token;下接《轨迹经济学》,问选哪些轨迹来学。下次打开任何一份 SFT 配置,先找 mask 开关,把上面那三问答完。有余力,就把 L8 p.19 那格 8B 消融空白填了。

本节论文与规范

本节资料

  • InstructGPT 论文2203.02155入门

    经典·高引(NeurIPS 2022)。指令微调 + RLHF 开山之作:SFT—奖励建模—PPO 三段管线,SFT 是第一步。1.3B InstructGPT 的输出被人类偏好于 175B GPT-3。训练线必读起点。

  • 经典·高引(NeurIPS 2023)。65B LLaMA 仅用 1,000 条精选样本微调,43% 的回复被评判追平或胜过 GPT-4——表面对齐假说:知识在预训练,对齐只需少量示范。对 agent 轨迹数据的价值判断要划边界。

  • LoRA 论文2106.09685入门

    经典·高引(ICLR 2022)。冻结原权重、注入可训低秩矩阵:可训参数降 10,000×、显存降 3×、推理零额外延迟。SFT 走向消费级硬件的基座,如今 agent 微调的默认选项。

  • 2025-12 中文。agentic SFT 工程向全流程:配对数据怎么造、从哪来、怎么训练与评测。与 4b 小节逐点对得上的中文对照材料,工程细节比论文讲得更细。

AI 生成 · 仅供参考,与课程方无关。选中正文里的任何一段也能直接问我(解释一下 / 举个例子)。

本详解以 CMU 11-768 AI Agents (Fall 2026) 课程大纲为参考框架独立撰写,AI 辅助起草、人工抽审。 涉及的官方课件、论文与课程材料版权归原所有方,讲义为站内镜像、其余外链原文出处; 观点与文字(除标注引用外)为作者原创。