题目重点:从next-token NLL到SFT回复mask与偏好优化,给出标签错位、padding和评估边界。
题意与假设
这道练习题保留了面经中值得训练的核心约束,并将需要澄清的条件单独列出。现场拿到变体时,先和面试官确认这些条件。
- 题目问如何训练LLM、pre/post区别及loss;原句k-means与训练loss标点相连,不能解释为k-means训练LLM,K-means另见q112。
- 本文dense decoder-only因果语言模型;tokenizer、数据规模、模型尺寸和原任务均未给。SFT示例约定只监督assistant回复含EOS,具体项目mask需确认。
- 电脑操作Agent专用训练见q28,RLHF/DPO比较见q131;本篇集中基础训练数据和监督目标,不重复专用Agent奖励题。
解题路线
- 预训练先做数据授权/清洗/去重/语言与领域配比、tokenization及污染检查,再把文本序列送入因果模型。目标L=−Σ有效位置log pθ(x_t|x_<t)/有效token数;teacher forcing的输入必须对应上一个token,不能让目标token通过attention泄露。
- 持续预训练用新领域或新时间语料继续next-token目标,可能改善领域能力也可能遗忘;不能简单把所有预训练后发生的训练都等同指令对齐。报告数据变化、训练预算以及通用能力回归。
- SFT用prompt/response示范改变模型完成任务的行为。训练通常保留prompt作为上下文,但可仅把assistant token设为有效label,padding/prompt用ignore标记;多轮对话须明确每段assistant是否监督,以及system/user分隔符和EOS位置。
- 偏好训练不是把chosen/rejected当普通类别标签直接算CE。在线RL依赖采样/奖励/策略更新,DPO用偏好对和参考策略;具体目标另见q130/131。奖励可能来自规则/环境,也可能来自人类偏好模型,post-training并非全部需要人类逐条反馈。
- 基础能力用heldout NLL/领域任务评估,指令行为用任务成功、格式正确、工具执行、人工偏好和安全评估。偏好胜率提升可能伴随长度偏差、奖励作弊或知识回归,必须固定解码合同并检查有无污染。
- 实现检查包括shift、causal mask、packed样本边界是否允许跨文档attention、有效token归一化及分布式loss聚合。不同长度batch若先平均每样本再平均,会改变长短样本权重;必须说清token平均或sequence平均。
- 公开SFT/偏好阶段参考InstructGPT原论文:https://arxiv.org/abs/2203.02155。训练流水线假设和下例是教学方案,不伪造题目模型或数据。
手动走一遍
序列[BOS,Q,A,EOS,PAD],输入前4位[BOS,Q,A,EOS],预测标签[Q,A,EOS,PAD]。只监督回复时mask=[0,1,1,0];若A/EOS正确概率为0.5/0.25,loss=−(ln0.5+ln0.25)/2=1.03972077。把Q也监督是另一合同,把PAD监督或不shift标签则是错误。即使mask不算Q的loss,Q仍通过上下文影响A。
规模与取舍
训练每step成本取决B/T/层数/d及attention;序列级生成评估还包含自回归采样成本,不能用teacher-forced loss速度估在线任务吞吐。存储要算权重、梯度、优化器、激活及checkpoint,LoRA或分片只改变相应部分。
易错点与追问
容易失分的边界
- 把prompt mask成attention不可见。
- 预测当前位置而不是下一token。
- 把PAD计入loss分母。
- 把偏好优化当所有post-training。
- 只用训练loss验收助手质量。
继续深挖
- packed样本边界如何避免不合意跨样本attention?
- 多个assistant回合的mask如何写?
- 领域持续训练怎样检查遗忘?
- 不同长度batch梯度归一化怎样保持一致?
技术参考
- InstructGPT 原论文:公开方法/语言合同参考,本文示例参数自拟,不代表题目数据或实际项目实现。
