五厂面经真题集快手面经高频快手真题大模型微调损失函数速答 · 约 5 分钟更新 2026-09-29

Qwen 微调经验?训练阶段和 Loss Function 怎么设计?

一句话结论

训练分领域继续预训练、指令 SFT 和可选的 DPO 对齐;SFT 只对回答段计算交叉熵,prompt 段掩码。分类用 CE,回归用 MSE,多任务按目标配比。

先这样答

训练阶段可以分成领域继续预训练、指令 SFT 和对齐。继续预训练使用领域语料,让模型接触目标领域的文本。SFT 使用指令数据训练模型按要求回答。对齐阶段可以选择 DPO。是否加入这一步,要看训练目标。

SFT 的 Loss 用交叉熵,但只计算回答段。输入里的 prompt 段要掩码,不能把 prompt token 一起当作预测目标。这样,Loss 对应的是模型生成回答的部分。写训练数据时,要确认 prompt 和回答的边界标记正确。掩码范围一旦错位,实际参与计算的 token 就会和预期不同。

如果任务还包含分类或回归,就按任务输出设计 Loss。分类头用交叉熵,回归任务用均方误差。多个任务一起训练时,需要给各任务的 Loss 加权。面试时我会重点说明两件事:SFT 是否只在回答段计算 Loss,以及多任务 Loss 如何配比。整个方案可以概括为:先按阶段组织训练,再按任务选择 Loss,最后明确掩码和权重。

面试官会怎么追问

  • 「为什么 SFT 不对 prompt 段计算 Loss?」
    SFT 要训练模型根据指令生成回答,所以我只让回答段参与交叉熵计算。prompt 段作为输入,不作为这次生成目标。实现时要核对边界和掩码是否一致。

  • 「继续预训练、SFT 和 DPO 分别放在哪个阶段?」
    先用领域语料做继续预训练,再用指令数据做 SFT。对齐阶段可以选择 DPO。回答时我会把 DPO 说明为可选步骤,不把它说成必选阶段。

  • 「分类和回归任务也能用同一个 Loss 吗?」
    我会按任务类型选择 Loss。分类头用交叉熵,回归用均方误差。多个任务同时训练时,再对各项 Loss 加权,并说明配比需要作为设计点处理。

回答的坑

  • 把 prompt 段也纳入 SFT 交叉熵,会让训练目标偏离只学习回答段的设定。
  • 只说多任务 Loss 加权,却不提配比,会漏掉这道题的关键设计点。

这家公司的面经实录

相关深度笔记

—— 本题完 ——