06|后训练、MoE与模型定制:能力和行为如何改变
本章目录
本章预备知识
SFT提供目标答案,偏好训练比较回答,强化学习用奖励改善策略。低秩、量化和专家结构讨论参数怎样组织与计算,不是把知识库加入上下文。
本章各题列出所需基础。可先完成相应基础课,也可通过自检确认掌握程度。
进入深读前的小检查:先用两种回答的概率比算一个偏好分数,再区别“权重变少”“权重字节变少”“每次激活的权重变少”。
术语带虚线时可点击速查。公式中的字母先看定义;不要用猜缩写替代推导。
这一章区分“给模型新资料”“让模型改变行为”和“降低模型运行成本”。三者可能配合,但训练目标、改动对象和验证方法完全不同。
沿着对象与状态理解本章
先回答每种方法改变什么:后训练改变模型行为分布,LoRA限制可训练增量,量化改变数值表示,MoE改变激活的子网络。它们不是同一个“变小按钮”,因此收益不能只用参数总数衡量。
下方图解的固定输入在“输入与适用条件”中声明。它用于解释本章机制,不与本章其他独立例子的数值暗中接续。
省参数、省位数、少激活不是同一种优化
LoRA、量化、MoE到底各自省了哪一部分?
可以把系统的账分成三本:有多少参数要存、其中多少参数要更新、这次推理实际用到多少计算。LoRA主要减少需要训练的增量参数;量化改变数值存储表示;MoE选择部分专家计算。把它们统称“模型缩小了”会遗漏真正代价。
输入与适用条件:本图比较技术作用对象;具体数值对照分别在O02量化、O03 LoRA、O08 MoE中声明独立输入。
1 / 6 · 原有大权重
窄屏可左右滑动图形,或点击“放大图形”。文字解释紧随图后。
先说你需要缩小的是哪本账,否则优化指标会错位。
本步状态由图形与说明共同给出。默认静止。用“下一步”看完解释再继续;播放到最后一步自动停止。键盘聚焦播放器后,可用左右键逐步查看、空格播放/暂停。图中颜色辅助区分,含义同时用文字注明。
为什么需要
训练资源和推理资源有限,但不同瓶颈需要不同方案。
怎样实现
先区分存储、求导、激活计算,再进入对应技术。
可能的代价与误解
低秩容量有限、低精度有误差、专家路由有不均衡与通信。
如何判断是否做对
分别计量峰值显存、延迟、吞吐、质量和训练可恢复性。
Q021|SFT、RLHF、DPO分别怎样改变模型?DPO公式在比较什么?
核心回答
SFT用目标回答做监督学习;RLHF通常学习或使用奖励信号,再优化策略;DPO直接从同一问题下偏好回答对构造训练目标,不必在每个训练步骤运行完整的在线强化学习循环。它们优化行为分布,不构成事实真理的保证。[RLHF][DPO]
从同一个问题的两份回答展开
给问题x,偏好回答y⁺,不偏好回答y⁻。SFT只拿一份理想输出,逐Token提高其概率。它没有直接告诉模型“另一份回答为什么更差”;这类区别由示例分布间接体现。
奖励模型可用回答对训练,令r(x,y⁺)>r(x,y⁻)。策略优化时,模型生成回答,再根据奖励更新,同时常用与参考策略的偏离惩罚避免剧烈漂移。奖励模型只近似人的偏好或任务标准,可能奖励表面特征。
DPO的一种标准目标为:
Δ = [log πθ(y⁺|x) − log πref(y⁺|x)]
− [log πθ(y⁻|x) − log πref(y⁻|x)]
L = −log sigmoid(β Δ)
回答概率是答案Token条件概率的乘积,实践里用log概率求和。目标推动偏好回答相对参考模型的优势大于不偏好回答的优势,不是简单把y⁺设为1、y⁻设为0。参考模型提供锚点,β控制目标中的尺度,并与相应推导的正则化强度相关。
假设当前模型与参考模型对两份回答的相对log增益都为0,则Δ=0,loss约0.693。若偏好回答相对增益更大,Δ增大,loss下降。这个目标仍依赖数据质量:若标注者偏爱长篇奉承,训练会把这种偏好当成信号。
同一对回答,SFT与DPO看的训练信号不同
输入与条件。问题x有好回答A和差回答B。假设整段概率与参考概率采用F19的教学值,β=1。
| 步骤与对象 | 内部动作 | 中间结果 / 新状态 |
|---|---|---|
| 1SFT样本 | 只用(x,A) | 最大化A的条件似然,不必有B。 |
| 2偏好样本 | 用(x,A优于B) | 提供两个回答间的相对判断。 |
| 3DPO比较 | 计算ln(0.6/0.3)−ln(0.2/0.2) | 间隔ln2,损失ln1.5≈0.405465。 |
| 4经典RLHF路径 | 先用偏好训练奖励模型,再用它反馈策略更新 | 与直接优化这对概率比的DPO不是同一训练管线。 |
| 5错误标签反例 | 若偏好标签实际把错误回答选为A | 目标可能强化错误偏好,公式正确不能修复坏标注。 |
把过程连起来。训练方法改变的首先是监督信号和优化目标,不是给模型外挂一份跨会话数据库。
边界与反例。数值只解释标准DPO单样本目标;RLHF有多种变体,不能由此概括所有后训练系统。
依据与适用范围:[DPO]。示例输入和场景由本书明确设定。
追问:DPO是不是完全不需要奖励?
它不必显式训练并调用一个独立标量奖励模型,但仍需要偏好信号,也可从目标推导出隐式奖励关系。“无需奖励模型”不等于“无需质量判断”。同样,离线偏好数据不能覆盖策略优化后所有新分布。
追问:SFT会让模型记住全部新业务事实吗?
可能学习部分事实,但难以提供逐条更新、删除和来源追溯。经常变化的制度或源码更适合版本化检索;稳定输出格式、分类边界、工具选择风格可考虑SFT。定制决策应先区分知识缺失、行为不稳定、工具不足还是任务说明不清。
追问:偏好训练为什么可能让回答更讨喜但不更正确?
评价者容易把流畅、自信、长度或语气当作质量代理。模型优化代理后,可能出现“看起来专业”的错误。训练数据与评测需同时包含正确性、引用支持、允许拒答和任务完成情况,而不能只问“你更喜欢哪一段”。
Q022|推理模型为什么常用强化学习?PPO、GRPO和过程监督有什么不同?
核心回答
当任务结果可验证时,可以对模型生成的解答轨迹给予奖励,鼓励更有效的多步推理。PPO是一类受约束的策略更新方法;GRPO使用一组候选的相对奖励构建优势估计,减少对单独价值模型的依赖。过程监督评价中间步骤,结果监督评价最终结果;不同方法可组合,不能视为所有推理模型的统一实现。[R1]
一轮可验证任务训练的逻辑
以有隐藏测试的代码题为例:固定题目,当前策略采样若干程序,运行隔离测试,得到通过情况、超时或非法操作等结果;把结果转换为奖励,再计算序列或Token的策略梯度。只有在模型参数更新后,才是训练。把错误日志重新塞给模型修一遍只是推理时反馈,不等于RL。
PPO常对新旧策略概率比r_t=πθ(a_t|s_t)/πold(a_t|s_t)使用裁剪目标,限制单次更新走得过远。优势A表示这次动作相对基线好多少,不是原始奖励本身。价值估计、KL项、裁剪范围和归一化都会影响训练。
GRPO用同题一组回答奖励的均值和标准差进行相对比较,常见简化优势为A_i=(R_i−mean(R))/(std(R)+ε)。它解释了“同题比较”的作用:去掉题目难度的一部分影响,突出组内优劣。但全组奖励相同,组内信号可能非常弱;这不是调大训练步数就必然解决的问题。
结果奖励清晰、成本较低,但一份错误推理可能偶然得到正确答案;过程奖励提供更细的信用分配,却需要可靠中间步骤评价,容易把不常见但正确的路线误判为错。长轨迹还带来计算成本和奖励作弊风险。
四条候选轨迹的奖励怎样变成相对优势
输入与条件。同一题生成4条候选轨迹,验证器奖励 [0,0,1,1]。取总体标准差、忽略稳定项ε,只演示组内标准化。
| 步骤与对象 | 内部动作 | 中间结果 / 新状态 |
|---|---|---|
| 1组均值 | 四个奖励平均 | 0.5。 |
| 2组标准差 | 每项与均值差±0.5 | 标准差0.5。 |
| 3标准化 | (奖励−均值)/标准差 | 优势为 [−1,−1,1,1]。 |
| 4同分反例 | 奖励全部 [1,1,1,1] | 标准差0,需实现定义稳定处理,不能直接除0。 |
| 5过程监督对照 | 若两条最终成功轨迹中一条有错误中间步骤 | 只看最终奖励无法区分;过程评分会增加另一种信号。 |
| 6目标差异 | PPO还可有价值估计与裁剪概率比 | 不要把“做了标准化”就称为完整GRPO或PPO实现。 |
把过程连起来。奖励是输入监督,优势是相对当前基准的改进信号;它们不是模型答案正确的先验保证。
边界与反例。仅展示组内标准化这个子步骤,不提供完整强化学习训练,不复现论文报告的收益。
依据与适用范围:[DERIVE]。示例输入和场景由本书明确设定。
追问:模型输出更长的思考,是否说明训练更成功?
长度只是中间行为。成功标准应是相同资源条件下任务正确率和可靠性是否提高。模型可能反复自问、无效搜索,或者把简短任务复杂化。推理预算应与难度匹配;不是所有问题都值得多路径采样。
追问:怎样出现Reward Hacking?
当奖励只检测公开测试,模型可能针对测试特征投机,而没有满足真实需求;只奖励格式,则可以产出结构完美的空答案。应隔离隐藏验证、使用多种独立检查并观察分布外表现。不能把奖励分数本身当作任务真值。
追问:Self-consistency与训练的区别是什么?
Self-consistency在推理时采样多条路径,再按答案一致性聚合;参数通常不变。它能降低某些随机推理错误,但若样本共享同一错误前提,多数票仍会错误。增加票数增加成本,也不能把模型之间的相关错误变成独立证据。
Q023|MoE为什么总参数很多却只激活一部分?Router实际做什么?
核心回答
MoE在某些层把一个FFN替换为多个专家网络,对每个Token用路由器选择少量专家计算,再按权重合并结果。通常attention等共享部分仍会执行。总参数决定存储与容量,激活参数更接近单Token计算量,但不能仅凭激活参数推断延迟。[V3]
看一个简化的Top-2 MoE层
输入Token隐藏向量h∈R^d,router计算g=hW_r,得到E个专家分数。选Top-2索引a、b,并对选中分数归一化为权重w_a、w_b;分别计算专家FFN f_a(h)、f_b(h),返回w_a f_a(h)+w_b f_b(h)。实际模型可能有共享专家、不同归一化、负载平衡或更复杂路由,不能套用同一个公式描述全部MoE。
一个batch内不同Token选不同专家。实现要先分组Token,把它们发送给对应专家,执行矩阵乘,再把输出归还原位置。这会产生dispatch/combine和可能的跨卡all-to-all通信。专家数量再多,如果某个专家收到了多数Token,就会成为瓶颈。
负载均衡并不等于语义均衡。训练会用辅助目标、容量限制或其他机制减少拥塞,但每种做法都有代价:丢弃超额Token可能损害质量,过强均衡可能干扰最佳专家选择,通信也可能吞掉理论节省的FLOPs。
MoE路由选两个专家,结果怎样合成
输入与条件。三专家门控原概率 [0.6,0.3,0.1]。本例top-2后重新归一化;专家0输出 [2,0],专家1输出 [0,3]。
| 步骤与对象 | 内部动作 | 中间结果 / 新状态 |
|---|---|---|
| 1取top-2 | 选专家0和1 | 不执行专家2。 |
| 2重归一化 | 选中概率和0.9 | 新权重为2/3和1/3。 |
| 3计算专家输出 | 两条分支独立变换当前Token | 得到给定的两个向量。 |
| 4合并 | (2/3)[2,0]+(1/3)[0,3] | 输出 [4/3,1]。 |
| 5负载反例 | 一批100个Token都选专家0 | 即使总参数很多,也可能造成同一设备拥堵,需要考虑路由负载与容量。 |
把过程连起来。总专家参数量、每Token激活参数量和执行时瓶颈是三个不同量。
边界与反例。专家输出是教学给定,容量溢出处理与权重归一化依模型实现而定,不把此配置说成统一标准。
依据与适用范围:[DERIVE]。示例输入和场景由本书明确设定。
追问:专家是不是“数学专家、法律专家、代码专家”?
名称容易误导。专家是参数块,路由由训练形成,可能出现专业化模式,但不是天然对应人类命名学科。不能仅看某个Token去了哪个专家,就宣称模型给它分配了一个可解释职业角色。MoE专家也不是带独立工具和任务记忆的子Agent。
追问:推理时只加载被选中的专家就行吗?
后续Token会选择不同专家,选择前未必知道需要谁。专家offload可以节约显存,但会引入传输与预取问题;低延迟服务通常需仔细规划权重驻留和设备分布。激活参数少不等于整个模型文件小。
追问:Router与Agent的模型路由有什么区别?
MoE router是模型内部、Token粒度的可训练计算;Agent路由通常在请求或子任务粒度选择一个完整模型、工具或技能。二者预算、训练方法和失败模式不同。不要把“MoE已经路由”当作不需要Agent任务分派的理由。
Q024|LoRA、QLoRA、量化、蒸馏怎样选择?它们到底改了什么?
核心回答
LoRA冻结大部分底座参数,用低秩增量学习任务变化;QLoRA把底座以低比特存储并训练适配器;量化用更少位数近似权重或激活;蒸馏让学生学习教师输出或分布。四者目的可重叠,但不是同义词。[LORA][QLORA]
LoRA的尺寸与梯度流
若原线性层W∈R^(d_out×d_in),增加ΔW=sBA,其中A∈R^(r×d_in)、B∈R^(d_out×r)、r远小于两侧维数,计算y=Wx+sB(Ax)。可训练参数从d_out*d_in变成r*(d_in+d_out)。例如4096×4096矩阵有16,777,216参数,r=16时A+B仅131,072,约为1/128。
底座不更新不意味着无需反向经过底座。为了求下游适配器或更早层的梯度,仍要沿计算链反传并保存或重算激活。很多实现让一个低秩矩阵随机初始化、另一个置零,使初始增量为零;若两个都为零,初始梯度路径可能退化。
普通均匀量化可概括为q=clip(round(w/s)+z),恢复近似值ŵ=s(q−z)。scale和zero point要存储;分组或通道级量化可降低误差,但增加元数据。低bit是表示方式,计算内核是否真正以低bit加速、是否要反量化到更高精度,决定实际速度。
蒸馏可以使用教师生成的高质量答案,也可让学生匹配soft targets。学生不是复制全部教师参数,而是在容量和训练分布约束下逼近特定行为。验证必须包含未用于蒸馏的任务;教师错误也会被传递。
把“知识过期”和“输出格式错误”分开选干预手段
输入与条件。系统有两个失败:A不知道昨天改成5秒的新配置;B明明拿到正确配置却总输出错误字段名。
| 步骤与对象 | 内部动作 | 中间结果 / 新状态 |
|---|---|---|
| 1检查A | 错误来自缺新源码 | 先检索当前版本,不通过微调记住一天一变的配置。 |
| 2检查B | 证据正确,输出结构不合约定 | 先试清晰schema、提示与校验,持续稳定需求再考虑微调。 |
| 3LoRA小账本 | 1000×1000增量,秩r=8 | 全矩阵100万参数,分解为1000×8和8×1000,共1.6万,不含基础W。 |
| 4量化小算例 | x=0.26,步长0.1 | round后为3,恢复0.3;省表示成本但引入误差。 |
| 5蒸馏选择 | 让小模型拟合教师分布 | 需要评测任务保持程度,不等于复制教师全部能力。 |
把过程连起来。先定位失败发生在数据、接口、行为还是计算资源,再选RAG、约束输出、适配或压缩。
边界与反例。参数账本是原理计算,不是训练时间或精度收益预测;QLoRA等完整方案还含量化与训练细节。
依据与适用范围:[DERIVE]。示例输入和场景由本书明确设定。
追问:LoRA能否无损合并进W?
在支持的普通线性层与精度设置下可计算W'=W+sBA,省去额外支路;数学上与同一线性增量等价,浮点和重新量化仍可能引入差异。多个适配器直接相加也不保证业务行为不冲突。动态切换适配器时,应把适配器身份纳入缓存和版本管理。
追问:该优先微调还是RAG?
先看错误来自哪里。最新事实缺失用检索;格式或决策风格稳定性不足可用示例与微调;工具不会执行应改Harness;大量无关上下文应改选择。若不定位根因就微调,可能把易过期知识烙进参数,仍解决不了工具或数据权限问题。
追问:如何判断量化有没有损害实际Agent能力?
不仅测静态文本困惑度,还要测结构化参数、长上下文证据利用、代码回归、工具选择与多轮稳定性。个别logit的微小改变可导致分支选择不同,进而放大到整段任务。应在相同Harness下做配对评测,并保留高精度回退路径,而不是只比较显存下降比例。