尧图精选

WAM模型训练实战:数据、预训练与后训练的工程体系解析

🕒 发布时间:2026/10/1 19:39:01 📁 来源:尧图网络
近三百篇工作调研做完最大的感受是现在做模型训练拼的早就不是单点技巧而是整套数据预训练后训练的工程体系。WAM 这类模型我这里泛指以 Web/Agent/多模态交互为代表的一类通用基础模型更是如此它不像纯文本模型那样只要“读得多”就行还要求模型能理解页面结构、操作意图、反馈信号甚至要在多轮交互中保持稳定。为了弄清楚当前业内到底怎么做训练策略我系统性扫了近 300 篇相关论文、技术报告和开源仓库把数据、预训练、后训练三块的方案捋了一遍。这篇就把调研里最有价值的结论、可复现的细节和踩过的坑一起整理出来给正在做类似工作的朋友一个参考。1. 为什么做这次近 300 篇的调研——背景与总体脉络1.1 调研的起点与目标起因是我自己在跑 WAM 类模型的训练实验时发现一个很尴尬的问题单看某一篇论文方案看起来都很合理但真正组合到一起就各种翻车。比如数据清洗用了一套规则预训练又换了另一种 tokenization后训练阶段再做指令微调结果模型能力不升反降。后来跟几个做类似方向的朋友聊发现大家遇到的坑高度相似于是决定做一次系统调研核心目标有三个第一搞清楚当前 WAM 模型训练的主流数据来源和配比方式第二梳理预训练阶段不同策略的优劣和适用条件第三总结后训练阶段从指令微调到对齐方法的演进路径。调研范围覆盖了 2020 年到 2024 年间的近 300 篇工作包括顶会论文、arxiv 预印本、开源模型的技术报告以及一些大厂公开的 training recipe。1.2 筛选与分类方法近 300 篇听起来多但真正值得精读的大概三分之一。我的筛选标准很简单优先看有完整训练细节的比如数据配比表、超参数设置、消融实验只有结论没有过程的直接放到次要位置。分类上按三个维度切分——数据策略、预训练策略、后训练策略。数据策略里又细分为采集、清洗、配比、评估预训练策略重点关注目标函数、数据规模、架构选择后训练策略则包含指令微调、偏好对齐、持续学习。每一篇都记录下它的核心方案、关键数据点、实验结果和可复用的经验教训。这样整理完之后规律就变得非常清晰了。1.3 三个核心维度的总体判断先给结论数据层面质量比数量重要得多去重和清洗的收益甚至超过增加数据量预训练层面训练目标的多样性比单纯堆模型尺寸更有效多任务联合训练是主流趋势后训练层面指令微调已经非常成熟真正的挑战在于偏好对齐和持续学习带来的灾难性遗忘。这三部分不是孤立的数据策略会直接影响预训练效果预训练的效果又决定了后训练的上限。我见过太多团队把精力全押在某一个环节上比如疯狂加数据但清洗做得稀烂或者模型做得很大但训练目标单一最后效果都不理想。下面按这三个维度逐一展开。2. 数据策略模型的地基工程2.1 数据从哪里来——语料构成与来源分布调研里数据来源基本可以分为五类网页爬取、结构化知识库、用户行为日志、公开数据集和合成数据。网页数据是主力占比普遍在 60% 以上但问题也最多——噪声大、重复率高、质量参差。这里有个容易被忽视的细节网页数据的抓取策略本身就会影响模型能力。比如用同一套爬虫但不同的 URL 去重规则最终得到的语料多样性差异非常大。调研中有几篇工作专门做了对比实验发现对 URL 做归一化处理而不是简单地对文本做 minhash 去重能保留更多有价值的重复信息尤其是那些在不同页面以不同表述出现但语义相同的知识。结构化知识库虽然占比小但对提升模型的事实性非常关键典型的如代码库、知识图谱、表格数据。用户行为日志则是 WAM 模型独有的优势——记录了真实用户在网页上的点击、输入、滚动等操作这对训练模型的交互能力几乎是不可替代的。合成数据在近两年的工作里越来越多主要用来补充长尾场景和特定任务数据。2.2 数据清洗与去重细节决定上限这个部分我想重点说因为大量实验证明清洗比采集更能决定模型性能。业内一个比较公认的流程是格式清洗 - 语言过滤 - 质量筛选 - 去重 - 毒性过滤。格式清洗解决乱码、HTML 标签残留、异常字符语言过滤通过 langdetect 或 fasttext 做语言识别筛掉非目标语言和混合语言文本质量筛选会用一系列启发式规则比如文本长度、标点符号密度、重复 n-gram 比例、包含敏感词等去重目前主流是用 MinHash 配合 LSH 做近似去重文档级和段落级都要做只做文档级去重会漏掉大量段级别的重复内容。一个值得注意的细节是去重的阈值不是越高越好。我见过一个团队为了追求极致的去重率把相似度阈值压到 0.8结果模型的领域知识广度明显下降。那些“看似重复”的文本往往带有不同的上下文信息过度去重会把这种多样性也一并删掉。2.3 数据配比与课程学习数据配比是一个经常被低估的环节。调研中发现几乎所有效果好的 WAM 模型都会对不同类型的语料设置明确的采样权重而不是简单地把所有数据混在一起。代码数据通常会被赋予较高的权重因为代码的结构化特性和逻辑严密性对提升模型的推理能力有明显帮助对话数据比例一般控制在 5%-15%超过这个范围后边际收益递减长文本数据需要单独考虑因为这类数据在按 token 随机采样时会被系统性低估——一个 10 万 token 的文档按 token 概率采样时它被完整选中的概率远低于 100 个 1000 token 的短文档。解决方式是在采样时按文档长度做过采样或者用基于 token 预算的配比策略。课程学习也就是 curriculum learning在近 300 篇调研中真正用的不多但有一些工作做了尝试先用高质量数据预训练一小段再加入通用数据进行完整训练。效果上课程学习在同样计算预算下能提升约 2%-3% 的下游任务平均分但实现复杂度也相应增加增量不算大是否采用需要看团队的人力情况。如果你决定做课程学习建议先在小规模实验上验证收益再放到正式训练中。2.4 数据质量评估人工评分与自动筛选怎么判断一个数据是好是坏最可靠但最贵的是人工评估。调研中头部团队的做法比较统一定义一套 3-5 级评分标准比如 5-无错误且信息密度高、4-基本无误、3-有少量事实错误或者冗余、2-大量错误、1-不可用先让标注员在几百条样本上对齐标准再抽检 2%-5% 的数据做评分。但这套方案对大多数团队来说太奢侈了。更现实的做法是用小模型做自动筛选——用一个已经训练好的中等规模模型比如 7B对数据打分把得分低的尾巴切掉。这里有个经验打分模型和训练模型不要用同一个架构否则会引入系统性偏差。另外数据质量的自学习过滤在好几个工作里都出现了核心思路是用模型自己的困惑度来做筛选先训练一个短期的临时模型再根据这个模型在某个验证集上的表现对训练数据进行加权或筛选。这个方法成本低效果也不错特别适合在数据规模达到万亿 token 级别、人工审查完全不现实的时候用。3. 预训练策略成本与能力的平衡艺术3.1 预训练目标与损失设计WAM 模型预训练最核心的变化是从单一的 next-token prediction 走向多任务联合训练。纯文本模型可以做 causal LM但对 WAM 类模型我们需要它同时理解文本、页面结构、用户操作甚至视觉信息。调研中看到的主流做法是把多个训练目标组合起来比如主目标仍然是 decoder 架构的因果语言建模但额外添加了 masked token prediction、多模态对齐损失、以及针对特定行为预测的辅助 loss。多任务联合训练这里损失的权重配置直接决定模型最终的能力偏向。一个值得参考的做法是在训练初期将辅助 loss 权重调低比如 0.1让模型充分学习基础语言能力然后在训练中后期逐步提高到 0.3-0.5让模型开始学习结构化信息和交互行为。直接从一开始就给辅助任务高权重的实验效果普遍不好表现为模型语言流畅度下降、下游任务反而变弱。3.2 数据规模、模型规模与计算量的关系我先给一个实用结论训练一个 7B 的 WAM 模型在 2 万亿 token 数据上训练的收益明显大于训练一个 13B 模型但只使用 1 万亿 token。规模和数据的比例不是一个固定值但大多数模型在训练数据量级达到参数量的 50-100 倍时能保持良好的性能增长。我用 7B 模型举例参数量 70 亿训练数据 1.4 万亿 token 是基本门槛做到 3.5 万亿到 7 万亿 token 时模型能力还会有明显提升。但需要注意的是这个比例规律在数据质量不一致时会被打破——如果高质量数据只有 5000 亿 token那再继续灌低质量数据只会稀释模型的注意力机制典型的收益为零甚至为负。计算量方面可以用 Chinchilla 公式做参考设定 token 预算但我个人建议把它当基线而不是硬性约束因为 WAM 模型的多任务训练目标会使最优 token 量略高于 Chinchilla 的估计。在实际操作中团队通常受限于 GPU 资源和时间成本我建议做一组小规模预测实验分别用 5B、10B、20B token 训练同一个 1B 小模型画出一条 scaling 曲线然后按这个曲线外推正式训练需要的资源这种方法比直接套公式可靠得多。3.3 长上下文与结构化数据的处理WAM 模型一个很重要的特性是需要处理超长输入比如整张网页的 DOM 结构或一段很长的用户会话记录。近 300 篇工作里长上下文的处理方案大致分三个流派位置编码外推、窗口式注意力、以及层级化编码。位置编码外推的代表是 RoPE 的多种改造版本比如 YaRN、NTK-aware scaling这属于改动最小、成本最低的方案但外推超过训练长度 4 倍以上时性能下降明显。窗口式注意力比如滑窗注意力加全局 token 的稀疏注意力组合能在固定算力下处理更长的输入但实现复杂度高而且训练不稳定。层级化编码是我个人比较看好的方向——把文档结构先编码为块级表示再在块级表示上做注意力这更符合人类阅读长文档的方式但工程难度不小。如果你只是做实验验证而不是冲极限我建议先用位置编码外推方案训练等模型稳定跑通后再考虑稀疏注意力优化。3.4 不同架构对预训练的影响架构选择对预训练效果的影响很多团队容易忽略。Dense 架构如 LLaMA 结构的模型行为可预期、训练稳定性好绝大多数团队应该优先考虑。MoE 架构如 Mixtral 这种优势是同样的激活参数下可以用更多的总参数推理速度也快但训练稳定性是最大的坑——不需要仔细控制每个 expert 的负载均衡 loss如果设置不当会出现部分 expert 完全不被激活的“死路由”现象。对 WAM 类任务还有一个常见的选择是采用 encoder-decoder 或纯 decoder。调研结论比较清晰如果是生成式任务为主纯 decoder 更自然、效果也更好如果任务是理解为主以及信息抽取、问答encoder-decoder 在同参数规模下通常效果更好。不过现在越来越多的工作将 WAM 定义为生成式 agent所以纯 decoder 是主流。另外我建议关注一下 GQA分组查询注意力的使用在长上下文场景下它比 MHA多头注意力更省显存但推理速度提升并不显著是否使用要看你的部署约束。4. 后训练策略从“会答题”到“会干活”4.1 指令微调数据配比与模板多样性预训练做完模型大概率还是“知识丰富但不会干活”的状态。指令微调就是解决这个问题。调研中关于指令微调的共识有几个第一数据量并不是关键5 万到 10 万条高质量指令数据通常就足够了堆到 50 万条以上反而可能引入噪声第二指令数据的多样性比数量重要得多。这里的多样性有几个维度——任务类型多样性问答、摘要、代码生成、信息抽取等、输入格式多样性短文本、长文档、HTML 页面、指令表述多样性。一个很实用的经验是用一套 seed 指令模板再利用大模型改写生成更多变体能把数据多样性提升 2-3 倍。第三指令数据里的负样本很重要。我调研中发现效果好的模型普遍在训练数据里加入了 3%-10% 的错误示范或拒绝回答样本这样才能让模型学会说“我不知道”而不是胡编乱造。在微调过程中一个问题容易被忽视的是数据混入顺序。建议先训练通用指令数据再混入领域特定数据最后加入少量对话数据做收尾这样模型既保留了通用能力又强化了领域专长最后的对话数据能让交互风格更自然。训练时建议用学习率调度前 10% 的步数用 warmup后面线性衰减最大学习率设置在 2e-5 到 5e-5 之间。4.2 偏好对齐DPO vs RLHF指令微调只是让模型学会“照着做”偏好对齐则是让模型学会“做得更好”。目前主流方案是 RLHF 和 DPO。RLHF 是传统方案需要训练一个奖励模型再用强化学习通常是 PPO来优化策略。效果很好但工程复杂度很高——需要同时维护四个模型策略模型、参考模型、奖励模型、价值模型训练稳定性差超参数敏感动不动就崩。DPO 是近两年非常流行的替代方案思路是直接利用偏好数据构造一个隐式奖励并用简单的分类式损失来优化策略不需要单独训练奖励模型也不需要强化学习循环。调研结论是在数据量不大几万条偏好对的场景下DPO 的效果和 RLHF 基本相当但工程复杂度低了不止一个量级在数据量非常大且质量很高时RLHF 在天花板上仍然略胜一筹。我的建议是除非你有专门的红队和大量的标准数据否则从 DPO 开始。这里有一个实操细节DPO 训练时 beta 参数非常关键。beta 越大模型跟参考模型的偏差越小训练越保守beta 越小模型越容易被偏好数据带着走。经验上 beta 从 0.1 起步如果发现模型表达能力下降输出开始变得千篇一律就把 beta 调大如果发现模型不听从偏好数据就把 beta 调小。另外偏好数据的质量直接影响 DPO 效果负样本一定要是真的差如果偏好对里正负样本差异不明显DPO 几乎学不到东西。4.3 持续学习与灾难性遗忘的平衡后训练阶段一个很容易遇到的问题是模型在指令微调后预训练阶段学到的某些能力会退化。比如你训练模型学会操作浏览器但它的通用知识问答能力可能下降了。这在持续学习领域叫做灾难性遗忘。调研中比较有效的缓解方法有四种第一种是数据回放最朴实的做法在微调数据里混入 5%-20% 的预训练数据或通用指令数据相当于让模型“复习”旧知识。我强烈建议每个团队都做这个成本极低、收益明显。第二种是 L2 正则化对参数更新的约束通过在损失函数里加入对大模型参数变化的惩罚项限制微调偏离预训练权重太远。这个方案实现简单但约束过强会影响新任务的学习效果。第三种是 LoRA 微调虽然 LoRA 更常被当作参数高效微调手段但它在缓解遗忘上也有一定效果因为它更新的参数量很少原始预训练权重基本保持不变。第四种是模型合并把预训练模型和微调模型的权重按一定比例做加权平均或者用 task arithmetic 做向量加减实验效果还不错。真到了需要做持续学习的时候我建议优先级从方案一到方案四都试一遍数据回放通常收益最大LoRA 可以作为并行方案使用。注意千万不要把多个学科的微调数据一次性混合完就训练除非你配了足够的数据回放否则很容易出现只记得最后一个任务、忘掉前面任务的情况。5. 从调研中提炼的实操建议与避坑记录5.1 资源有限时怎么选型不可能每个人都有几千张卡跑大规模预训练。我测试过一条资源有限但效果不错的路径先用公开的基座模型如 LLaMA、Qwen、Mistral然后用低成本的方法做领域适配和指令微调。我自己复盘过多次项目发现指令微调阶段投入产出比是最高的——如果基座模型本身已经很强你用 2-4 万条高质量指令数据做 LoRA 微调就能在特定任务上获得和全参数微调几乎一样的性能。但这里有个前提你要对基座模型的弱项有清晰的认知评估它缺什么、数据集要补什么而不是盲目混合数据微调。在这条思路上数据质量又被放大了一个量级。我建议把预算的 30% 花在数据清洗上因为小数据量下一条坏数据对模型的影响是巨大的——比例上比大数据训练时更敏感。5.2 评估体系怎么搭训练过程如果只有一个 loss 曲线基本等于盲人摸象。我见过不少团队的评估方式是训练完在下游几个公开 benchmark比如 GLUE、SuperGLUE、MMLU上跑一遍但等到训练结束才发现问题已经很难定位到具体原因了。更高效的做法是搭一套“三明治”评估体系。第一层是训练中高频监控指标比如 loss、token 级别的准确率、梯度范数、参数更新幅度每 500 步记录一次。第二层是轻量级测试集一批固定的小任务100-500 条样本每次 checkpoint 落盘时自动跑一遍可以快速发现能力退化。第三层是重量级测试集也就是公开 benchmark 和领域定制任务训练结束时和关键节点才跑。三层组合起来既能快速发现问题又不至于因为评估太频繁浪费计算资源。评估任务里一定要设计“越界”测试——给模型一些训练中从未见过的格式和任务才能真实反映模型的泛化能力。5.3 复现踩坑记录把这次调研中我们团队实测的坑记录一下。第一个坑是 loss 震荡问题特别是加了多任务后不同任务的 loss 量级差异大表现为总体 loss 不降、单个任务 loss 乱跳。解决方案是给辅助 loss 设一个相对较低的最大值上限再配合梯度裁剪一般能压住。第二个坑是数据采样分布不均衡代码数据权重设置过高导致模型在通用文本上的表现明显下降调整之后回归正常。第三个坑是位置编码外推后长文本任务困惑度升高后来用混合长度训练解决了——训练数据里混入 10%-20% 的长文档样本模型很快适应了超过预训练长度的输入。第四个坑是 DPO 训练中模型很快“过拟合”到偏好数据的表达模板输出多样性下降排查后确认是 beta 设得偏低调整后恢复正常。这些坑单独看都不大但加在一起足以让整个项目延期一个多月值得提前预防。6. 常见误区与经验速查6.1 常见误区盘点我挑几个调研中出现频率最高的误区。误区一数据越多越好。实际上在数据质量不上台阶的前提下一味增加数量边际收益急剧递减对大模型来说算力浪费非常严重。误区二预训练只要把 loss 降到最低就完事。这个是完全错误的理解loss 低不等于模型强很多情况下模型过拟合了训练集loss 表现亮眼但下游任务结果一塌糊涂。误区三后训练是万能解药。我再强调一遍基座模型的缺陷靠后训练是无法真正弥补的。有些能力必须靠预训练阶段解决比如长程推理、知识广度、跨语言能力。如果预训练阶段做得不好后训练阶段投入再大效果也有限。误区四只重视正向样本忽略负样本。这个在 DPO 和指令微调里特别常见没有足够数量和质量负样本的偏好数据模型根本学不会“拒绝做错事”。相反在偏好数据里加一定比例的明显错误负样本模型的安全性、可控性提升非常明显。6.2 经验速查表我整理了一张简表方便日常训练时快速对照参考。环节核心要点常见做法易踩的坑数据采集来源多元化网页代码行为日志合成数据网页数据占 60% 以上忽略结构化数据多样性不足数据清洗格式清洗、去重、毒性过滤四步走MinHashLSH 文档级段落级去重过度去重损失知识多样性数据配比按 token 预算设置采样权重代码权重高于文本、对话 5%-15%长文本被系统性低估权重失衡预训练目标主目标辅助损失多任务联合causal LM masked token 行为预测辅助任务权重过高影响语言能力规模计算用 scaling 曲线外推资源5B/10B/20B token 在小模型上预测直接套公式忽视数据质量影响长上下文位置编码外推或层级化编码RoPE 改造、YA RN、NTK-aware超长输入下外推性能骤降架构选择dense 优先、MoE 谨慎7B-13B dense 最稳MoE 路由失衡训练崩溃指令微调数据多样性第一负样本占比 3%-10%模板改写人工筛选数量堆砌覆盖不足偏好对齐小数据用 DPO大数据用 RLHFbeta 从 0.1 起步调beta 过低导致表达多样性下降防遗忘数据回放L2LoRA混入 5%-20% 预训练数据微调数据与预训练分布差异过大6.3 一个值得单独说的经验最后说一个我在调研中发现但不太被提及的细节。很多效果拔尖的 WAM 模型在训练过程中会专门设计“数据温度”这个参数——随着训练步数推进逐步提高数据集中高难度样本的采样概率。这个思路类似 curriculum learning 但更平滑它不改变数据本身只影响采样的概率分布。团队的实验结果是采用数据温度调度后同样的数据量模型在复杂推理任务上的表现提升了大约 4%。原理也很好理解——模型早期能力弱喂太难的样本容易让训练发散后期能力增强如果仍然大量采样简单数据则模型无法继续突破。实现方式不复杂就是在正常的 dataloader 里给每个样本加一个权重权重随训练步数变化。但要注意这个“温度”需要用验证集监控防止出现过拟合特定分布的情况。我个人在这些项目里最大的体会是训练一个 WAM 模型本质上是在管理一个复杂的依赖系统。数据清洗的质量决定上限预训练目标的设计决定能力边界后训练阶段的细节决定最终产品体验。三个核心维度各自都有成熟的方法论但真正拉开差距的是把它们正确组合起来的系统能力。如果你正在准备启动类似的项目我建议不要急着堆算力先花两周把数据策略和评估体系搭扎实后面会省下大量的返工时间。
上一篇/下一篇内容由系统自动关联 返回资讯列表 →