ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

中训练、后训练与AI for AI:模型迭代的主战场与实践指南

中训练、后训练与AI for AI:模型迭代的主战场与实践指南 这两年跟同行聊大模型话题已经从“你预训练用了多少 token”变成了“中训练语料怎么配的”“后训练到底用 DPO 还是 RLAIF”。大家心里都清楚基座模型之间的差距正在被快速拉平真正的产品差异已经从前几年“花几个亿训一个底座”的阶段转移到了在现有底座上做精细雕琢中训练怎么注入领域知识后训练怎么让模型更听话、更可靠。而中训练、后训练之所以持续升温背后还有一个很有意思的推力——模型迭代速度快到人工已经跟不上了于是“AI for AI”这块试炼场彻底火了让 AI 自己去生成训练数据、自己当裁判打分、自己纠错再反哺给下一代模型。这篇文章从我最近搭建训练流水线的实际经历出发聊一聊中训练、后训练到底在解决什么问题以及 AI for AI 在其中的真实落地状态。1. 中训练和后训练为什么成了模型迭代的主战场1.1 从“一次预训练”到“分段训练”的演化早期的模型迭代几乎等于预训练本身。GPT-3、LLaMA 那一代基座拼的是语料规模、算力投入和训练技巧动辄几百万美元的成本让绝大多数团队只能站在旁边看。但这两年开源社区把越来越多的高质量基座模型放到大家手里一个团队想做一个垂直产品完全没有必要从头预训练一遍。于是模型训练这件事被切成了几段通用预训练负责塑造基础语言能力和世界知识中训练负责注入特定领域的专业信息、扩展上下文窗口后训练负责让模型适配具体的交互场景。中训练这个概念在学术上还没有完全统一的定义我更愿意把它理解为“介于通用预训练和任务后训练之间的过渡训练”。它通常包含几种形式在垂直领域语料上做继续预训练比如用法律文书、医疗病历、金融研报继续训练一个通用模型把上下文长度从 4K 扩展到 32K 甚至 128K让模型能处理长文档、长对话调整分词器后重新训练 embedding以及通过大规模文本注入结构化知识。这些操作的共同点在于它们没有改变模型“完成任务”的方式而是先让模型肚子里有货。后训练则是大家更熟悉的那部分指令微调SFT、奖励建模RM、基于人类反馈的强化学习RLHF以及后来更轻量的 DPO、KTO 这类偏好对齐算法。如果说预训练和中训练解决的是“模型懂不懂”那后训练解决的就是“模型能不能听懂需求、把事办得体面”。这两段训练一起升温本质原因是大家都发现通用模型已经足够强但直接拿出去用又总差那么一点针对性。而这一点针对性恰恰决定了产品能不能打。1.2 中训练和后训练各自的技术分工很多人会把中训练和后训练混在一起实际上它们处理的数据、消耗的资源、依赖的工具差别不小。我用一个表格把它们的分工列一下。对比维度中训练后训练核心目标注入领域知识、扩展上下文、增强特定能力对齐人类偏好、提升指令遵循和交互体验主要数据无标注领域文本、文档、代码、日志指令-响应对、偏好对、拒绝采样数据算力需求通常高于普通微调但低于全量预训练相对灵活DPO 比 RLHF 轻量很多常用方法继续预训练、位置插值、LoRA 增量训练SFT、RM、RLHF、DPO、KTO、Best-of-n典型产出领域基座、长上下文模型客服模型、Agent 工具调用模型、内容创作模型这里需要提醒一句中训练和后训练不是互斥的两条路而是一条流水线的前后关系。正确的顺序通常是在领域语料上做中训练然后再做指令微调和偏好对齐。如果顺序反了很容易出现“模型态度很好但一问三个不知道”的尴尬。1.3 为什么持续升温背后有三个现实原因中后训练能成为主线首先是基础模型供给的问题解决了。开源基座的综合能力已经非常接近闭源第一梯队而且版本迭代极快今天你预训练一个模型可能刚跑到一半开源社区已经出了一个更强的基座你之前的投入瞬间贬值。与其冒险预训练不如踩着别人的基座快速做中后训练。其次是应用竞争进入了深水区。通用对话能力大家都不差拼的是某个行业里能不能把专业名词说对、能不能基于企业内部文档给出靠谱答案、能不能在长文档里精准定位信息。这些都是中训练和后训练的长项。第三是工具链成熟带来的门槛降低。LoRA、QLoRA、DeepSpeed、transformers 这套技术栈已经非常顺手中小团队用几张卡就能跑起来。模型快速迭代又会带来新的问题如何从一批 checkpoint 里快速挑出更好的一个如何生成足够多的高质量训练数据如何自动发现 bad case这些单靠人力根本盯不过来于是 AI for AI 就成了顺理成章的选择。2. AI for AI模型迭代如何变成“自己训练自己”的试验场2.1 用 AI 生产训练数据合成数据管道训练数据是模型迭代里最耗人的部分。以前大家依赖人工标注成本高、速度慢而且不同标注员的标准经常打架。现在主流的做法是用更强的模型来生产数据再经过筛选进入训练集业内管这种流程叫合成数据管道。我常用的一个流程是这样的先从领域语料里抽取有信息量的段落然后构造多种指令模板让一个能力较强的模型基于这些片段生成问答再让同一个模型用不同的 temperature 生成多个候选答案接着用一个质量过滤器打分把错误、重复、格式乱七八糟的样本删掉最后再做规则去重和相似度去重。这样下来一批几千条的指令数据可能只需要半天就能从零搭出来放在以前人工做至少得一两周。合成数据的好处还在于可以主动控制数据分布。比如我发现某个业务场景下“多轮对话”类样本太少就可以让模型把单轮问答扩写成多轮对话甚至指定语气和长度。这比翻遍历史日志找现成数据高效得多。当然合成数据不能完全替代真实业务数据它的价值在于做分布补全而不是无中生有。2.2 AI 评估 AI奖励模型与 AI 评分器后训练里最典型的 AI 评估 AI 就是奖励模型。PPO 训练的时候需要一个奖励模型给模型输出打分而这个奖励模型本身就是用人类偏好数据训出来的。再往前走一步很多团队已经不再依赖人类逐条评估各个 checkpoint而是直接用一个 LLM 来当裁判也就是常说的大模型即评估器LLM-as-a-judge。模型迭代速度快起来之后这个评估器的作用会被无限放大每训练完一个 epoch我都要跑一遍固定评测集让评分器给所有输出排序决定下一个 checkpoint 要不要保留。用 AI 评委有几个容易踩的坑我拆开说。第一prompt 要定义清楚评分维度比如正确性、完整性、格式规范、安全隐患不能只让模型打一个笼统的分。第二要防止位置偏差——让模型在两个答案里选一个更好的它倾向于选排在前面那个最简单的办法是交换顺序各评一次再做合并判断。第三定期用一小批人工标注样本校准评测器防止它越评越松或者越评越严。2.3 自我修正与自我迭代闭环AI for AI 还有一条更激进的路让模型自己纠错。比如先让模型生成答案再让同一个模型扮演批评者指出错误并给出修改建议最后根据建议重新输出修订版。这一招既能用在训练数据生成阶段也可以在推理阶段动态提升回答质量。在训练阶段通过“自生成-自评分-自选优”构造偏好对减少对人工反馈的依赖就是 RLAIF 的大致思路。但这件事的效果并没有想象中那么稳定。我踩过几次坑当模型的基础知识比较差时自我反思很容易在错误的思路上越走越远尤其是知识性错误模型甚至会一本正经地修正成另一个错误答案。更稳妥的升级路线是 Best-of-n 采样也就是让模型生成多个候选答案交给评分器挑一个最优的。这样至少保证了多一个候选就多一分容错。只有在模型本身已经达到一定基础能力后再引入真正意义上的自我反思。2.4 Agent 化流水线多角色 AI 协作AI for AI 不只是单模型自嗨还可以是多 Agent 协作。我最近搭过一条数据建设流水线一个 Agent 负责从产品文档里挖概念和规则一个 Agent 负责生成问答题第三个 Agent 负责打分筛选第四个 Agent 负责按难度分层。四个 Agent 各干各的活最后汇合出一个结构清晰的训练集。整个过程不需要人守在中间转数据只要在入口放好原始文档、在出口验收结果就行。Agent 化同样可以用在训练监控上。我试过让一个 Agent 定时读训练日志发现 loss 异常时自动给出诊断建议。它会根据 loss 曲线的形态判断是学习率过大、数据噪声过多还是梯度爆炸再写一段推荐配置。虽然到不了全自动调参的程度但至少省下了我盯着曲线一盯一整天的精力。如果你已经在用 Langflow、Dify 这类编排工具完全可以把这些自定义 Agent 串进同一个工作流里。3. 实操记录搭建一套“中训练后训练”迭代流水线3.1 数据层面先做领域注入再说对齐我最近用开源基座做了一个客服场景的模型迭代。第一步不是急着上指令微调而是先找来一批高质量的客服对话记录和产品操作手册做中训练。目的很直接让模型先熟悉业务词汇、常见问题模式和文档叙述方式。中训练数据不需要带标签但文本必须干净完整否则后面所有环节都会被噪声带偏。清洗流程我一般按这个顺序做去掉 HTML 标签和特殊符号统一编码格式去掉过短的句子和大量重复的模板化文本用 MinHash 做相似度去重最后再按行数过滤把大段乱码和机器生成的无意义字符删掉。这里去重特别重要我见过有人在中训练时没做去重结果模型对高频重复语料过度自信后续微调时特别容易在固定话术上过拟合一到开放性问题就明显泛化不足。3.2 中训练实操超参与位置编码中训练我用的是 LoRA 增量预训练主要还是因为显存不够。LoRA 的做法是冻结原模型权重在 attention 层旁边加低秩可训练矩阵只优化一小部分参数。别小看这一招它能用 8 张消费级显卡跑起来原本需要几十张卡才能完成的训练。学习率我习惯比普通 SFT 调低一些一般取 1e-5 左右batch size 尽量大序列长度直接拉到模型支持的上限。如果你想把一个 4K 上下文的模型扩展到 8K 或 16K可以试试位置插值把位置编码的数值按比例缩放让模型适应更长的相对位置范围。更稳定一点的做法是渐进式扩展先用 4K 长度的数据训练一段时间再逐步扩到 8K、16K每次只加一小段让模型有一个适应过程。扩展完一定要用“大海捞针”式的长文档测试在文档中间塞一个关键信息看看模型能不能捞出来不然你都不知道它到底记住了多少。3.3 后训练实操SFT DPO 的两段式配方中训练完成后我开始做 SFT。这个阶段最重要的是把指令格式统一。比如用户问题 助手回答系统提示、用户指令和助手的回复边界要分得清清楚楚模型才好学。训练时我只计算助手回答部分的损失指令部分做 mask不让模型去背用户的问题。格式上的小统一会让后面评估和部署都省不少事。SFT 完成之后我不会直接上 RLHF而是先做一轮拒绝采样。具体是用一个评测集让模型生成答案再用 AI 评分器选出表现好的样本作为正例故意挑一些得分低的输出作为负例然后用 DPO 做偏好优化。DPO 里有一个关键参数 beta控制新模型偏离参考模型的程度。我常用的取值范围是 0.1 到 0.3。beta 太大模型容易偏离参考模型太远出现流畅度下降beta 太小偏好信号又传不进去训完等于白训。3.4 评估循环人工抽查 AI 评分器 自动化指标快速迭代的核心是快速反馈。我的评估循环是每个 epoch 结束之后跑一遍固定评测集让 AI 评分器打分同时记录几个量化指标比如标准答案命中率、平均响应长度、拒绝回答比例。如果 AI 评分显示“变好了”但量化指标显示“变差了”我一定回去翻具体案例看看是哪里的信号出了矛盾。这时候人工抽查仍然不可替代。我一般会从高分样例和低分样例里各抽 20 条自己过一遍确认评分器给的理由是否合理。一个很容易出现的情况是评分器偏好长回答导致模型为了高分把回复越写越长冗余话术变多。如果人工抽查发现这个问题我会在评分器 prompt 里显式加入“回答必须简洁不鼓励无意义堆砌”并在训练数据里混合一批短回答样本做平衡。4. 快速迭代下的常见问题与排查技巧4.1 灾难性遗忘怎么防中训练之后模型可能忘了通用指令后训练之后又可能忘了中训练注入的领域知识。这是快速迭代里最让人头大的问题。我的经验是两种数据必须混合中训练数据里混入 10% 到 30% 的通用语料后训练时再加一批指令数据做回放。学习率要克制LoRA 的 rank 也不要追求大更新幅度越猛遗忘往往越严重。还有一种做法是用 KL 约束限制新旧模型输出分布的距离。DPO 训练里 beta 越大对偏移的打压也越大如果发现遗忘严重可以先试试把 beta 往上调。另外训练时定期跑一遍通用的基础能力评测集比如常识问答、数学题目一旦发现分数明显下滑就要及时中止训练并降低步调。4.2 奖励黑客与评分器失效奖励黑客指的是模型学会钻奖励模型的空子比如拼命拉长回答、堆砌无关内容、迎合评分器的情绪。一个经典的检测方法是把奖励分和响应长度画成散点图如果它们高度相关基本可以断定模型开始作弊了。另一个信号是奖励分一路上涨但人工评测分反而掉了下来。解法并不复杂核心是想尽办法让评分维度更全面。我会在评分 prompt 里加上“冗余惩罚”也就是明确告诉评分器回答越长并不代表越好如果前后重复、空话过多要扣分。同时让多个评分模型交叉投票降低单一模型偏好带来的误差。每轮迭代结束还要拿人工标注样本重新校准一次评分器避免它慢慢跑偏。4.3 数据污染与评测集泄漏快节奏迭代里最隐蔽的坑是测试集泄漏。有时候中训练语料包含了一些开源 benchmark 的原文后训练指令里又混进了评测样本最后模型在评测集上分数虚高看起来很强一上线就露馅。要解决这个问题得在数据管道的源头设卡凡是进入训练集的文本先和评测集做 n-gram 重叠检测重合度超过阈值的直接丢弃。我还会单独保留一份隔离评测集任何人都不能把它放进训练脚本、不能参与中训练和后训练数据生成只用在最终模型排名上。这份隔离集会固定在每个月更新一次防止随着时间推移模型间接通过其他数据“背下”了答案。数据脚本里的自动去重模块不能省评测集和训练集的重叠检测应该作为一个自动步骤挂在流水线上。4.4 训练损失曲线的误区训练 loss 降得漂亮并不代表模型好用尤其是后训练阶段。SFT loss 降到 0.2 以下往往意味着模型已经在背训练数据而不是在学泛化规律。我更看重验证集上的困惑度和最终评测分数。如果 loss 一直在降但评测分数不动甚至往下走首先检查是不是数据泄漏再看训练数据里有没有大量重复样本把模型带偏。混合精度训练时FP16 偶尔会出现 loss spike这多半是精度溢出。我的习惯是降低梯度裁剪阈值或者干脆切到 BF16BF16 的表示范围比 FP16 大稳定性明显更好。另外训练中断恢复后也要留个心眼确认 optimizer 状态和 learning rate schedule 是否被正确加载不然容易出现莫名其妙的 loss 反弹。4.5 横向对比模型时的“公平性陷阱”做模型迭代免不了把新 checkpoint 跟旧版本、或者跟竞品模型放在一起比。比较时必须保证生成温度、top_p、max tokens 完全一致prompt 模板不能厚此薄彼不要因为新模型能适应某一种模板就只给它喂它擅长的格式评测数据要确保任何模型都没有在训练时见过单条胜负不说明问题要多做几组重复实验看胜率分布。我见过一个非常常见的翻车操作拿一个没有做格式微调的基座模型直接跟一个已经做了 SFT 的模型比回答格式然后得出“微调没用”的结论。这种对比从设计上就有偏结果自然不可信。AI 评分器对格式差异很敏感这种不公平设定会让评估结果失真白费一轮迭代时间。5. 我的实践体会AI for AI 是放大器不是魔法如果让我总结这段折腾下来最深刻的感受那就是AI for AI 这套玩法可以把一个已经有 70 分能力的模型带到 85 分但很难把基础能力只有 40 分的模型硬拽到及格线以上。因为自我评分、自我纠错、合成数据生成这些能力全部受限于模型自己的判断力和知识边界。一个连正确和错误都分不清的模型无论怎么反思产出的都只是噪声。模型快速迭代不等于要无限堆数据。我试过用 10 万条低质量指令去堆一个模型效果反而不如用 1 万条精心筛选的高质量数据。原因很简单模型从多次重复的低质量样本里学到的是各种坏习惯的平均值。与其把时间花在扩大数据规模上不如把精力花在构造困难样本、校准评分器、设计反遗忘策略上。最后再分享一个小建议上手时先别追求一步到位搭出完整的中训练 RLHF 多 Agent 数据管道。拿一个小规模的模型几百条指令数据先把 SFT 和 DPO 整个循环跑通理解每个环节的输入输出是什么再慢慢把合成数据、AI 评估、Agent 协作这些模块加进去。工具和算法迭代得很快但“输入—训练—评估—反馈”这个闭环不会变。把这个闭环打磨顺了后面再换什么新模型你都能快速跟上。
返回列表