#模块三:预训练、数据工程、Scaling Law 与模型结构扩展知识点
这一章要把四件事连起来:训练目标决定模型从 token 序列里学什么,数据工程决定可学习信号是否干净,Scaling Law 帮你在参数、数据和算力之间做预算分配,MoE 等结构扩展则尝试在更大容量和可控计算之间折中。面试里如果只会背“CLM、Scaling Law、MoE”三个名词,很容易被追问打断;更好的回答方式是说明输入是什么、损失怎么算、数据怎么进来、扩展后瓶颈会移动到哪里。
#1. CLM 与 MLM:预训练目标到底在训练什么
CLM,也就是 causal language modeling,目标是根据左侧上下文预测下一个 token。给定序列 \(x_1, x_2, ..., x_T\),模型最大化 \(p(x_t | x_{<t})\),损失可以理解为每个位置的 next-token cross entropy 之和。因为训练时只能看左边,推理生成时也是从左到右逐 token 采样,所以训练目标和生成目标高度一致,这就是 GPT 类通用 LLM 多采用 decoder-only CLM 的核心原因。它天然适合续写、对话、代码生成,也能通过 prompt 做理解题。
MLM,也就是 masked language modeling,目标是把输入中一部分 token 替换成 mask,让模型利用左右两侧上下文还原被遮住的位置。BERT 类模型因此更擅长双向语义表示、分类、匹配、检索编码等任务。但 MLM 有两个限制:第一,预训练阶段有 mask,真实生成阶段通常没有 mask,训练和推理形式不完全一致;第二,MLM 通常只预测被遮住的位置,不是逐 token 自回归展开,所以不能直接当作强生成模型使用。面试中要抓住一句话:CLM 更像学“如何继续写”,MLM 更像学“缺词填空后的语义表示”。
#2. 预训练数据 pipeline:不是把网页扔进模型
一个可用的预训练数据 pipeline 通常按这条链路推进:原始采集、正文抽取、编码与格式规范化、语言识别、文档切分、去重、质量过滤、安全与隐私过滤、领域标签标注、评测污染审计、混合比例设计、tokenization、packing、shuffle,最后进入训练 dataloader。每一步都会改变模型实际看到的分布,所以数据工程不是外围清洗,而是在塑造模型能力边界。
去重分精确去重和近重复去重。精确去重处理完全相同的文档或段落;近重复去重处理模板页、转载文章、轻微改写内容,常见思路是用 n-gram、MinHash、LSH 或 embedding 相似度发现候选重复。重复样本会浪费训练 FLOPs,也会让模型过度记忆高频模板,导致 loss 看起来下降,但泛化并没有同步提升。
质量过滤要同时处理格式噪声和语义噪声。规则过滤可以去乱码、广告、导航、过短文本和异常符号;分类器可以识别 spam、低信息密度、机器翻译腔和有害内容;perplexity 或小模型打分可以辅助发现语言异常文本。但过滤不是越狠越好,过度过滤会损失长尾知识和口语分布。好的做法是分层打标签,再通过采样权重控制比例。
混合比例本质上是在回答“模型应该把多少训练预算花在代码、数学、百科、新闻、论文、对话、领域文档和多语言语料上”。高质量小数据可能需要 oversampling,低质量大数据可能只承担覆盖面。比例一旦失衡,模型会出现能力偏科,比如代码太少导致编程弱,网页噪声太多导致答案啰嗦,领域数据过量导致通用能力回退。
contamination是评测污染问题,不能和普通数据清洗混为一谈。它关注训练集是否包含 benchmark 题目、标准答案、评测 prompt、近重复题面或泄漏解析。如果污染存在,离线分数会虚高,模型看似学会了推理,实际可能只是记住了答案。严肃流程会对评测集做 hash、n-gram、近邻检索和人工抽查,把命中文档隔离出训练集,并在报告里说明审计口径。
#3. Scaling Law:参数、数据和算力的预算关系
Scaling Law 不是“越大越好”的玄学,而是经验上观察到 loss 会随模型参数量 \(N\)、训练 token 数 \(D\) 和计算量 \(C\) 呈现相对平滑的幂律下降。对 dense Transformer,一个粗略关系是训练计算量 \(C \approx 6ND\)。因此在固定 compute 下,参数和数据不是可以独立堆的两件事:模型太大但 token 太少,会 undertrain;token 很多但模型太小,会被容量上限卡住。
工程上更重要的是边际收益判断。继续加参数、加数据、加训练 step 都会遇到收益递减;预算固定时要找更接近 compute-optimal 的 \(N\) 和 \(D\) 配比。数据质量会改变“有效 token 数”:一万亿重复、低质、污染 token 不等于一万亿有效 token;高质量数据能降低不可约噪声,让同样 compute 得到更好的 loss 和下游能力。所以 Scaling Law 和数据工程必须一起看,不能拿脏数据上的曲线外推干净数据,也不能把小模型高质量训练的结果简单外推到大模型。
真正做项目时,Scaling Law 通常不是只看最终分数,而是看同一数据管线下的小规模试训曲线。比如用几个不同参数量、不同 token budget 的小模型拟合 loss 趋势,再外推更大预算是否值得投入。如果小模型曲线已经显示某类数据带来的 loss 降幅很弱,优先排查数据质量、重复率、混合比例和训练稳定性,而不是直接把训练规模放大十倍。
#4. Continue Pretraining 与 SFT:补知识还是补行为
continue pretraining继续使用语言模型目标,通常喂领域无标注语料,让模型进一步适应新的知识分布、术语、语言风格和文档结构。它适合“模型没见过足够多领域材料”的问题,比如法律条文、医学指南、金融研报、企业内部文档。风险是数据比例过窄会造成通用能力遗忘,领域噪声会被当作事实吸收。
SFT使用指令和答案对,目标是教模型按人希望的格式回答、遵循任务边界、输出结构化内容或学会某类操作流程。它更适合“模型知道一些东西,但不会按这个任务方式回答”的问题。SFT 不应该被神化成万能知识注入:如果监督样本只覆盖少量问答,它更多是在教回答模板,而不是完整重写模型的世界知识。常见路线是 base model 先做领域继续预训练,再做领域 SFT,最后用偏好优化或评测集校准行为;如果知识变化频繁,还要考虑 RAG 或工具,而不是把所有事实塞进参数。
一个实用判断是先拆成两张评测表:知识题是否答错、格式题是否不遵循。前者优先考虑领域语料继续预训练、检索增强或工具;后者优先考虑 SFT、偏好优化和提示规范。两类问题混在一起时,直接做 SFT 往往会让答案形式变好,但事实错误仍然存在。
#5. MoE:用路由换容量,但不是免费扩参
MoE 通常把 Transformer block 里的 FFN 换成多个 expert。每个 token 先经过 router,router 输出对各 expert 的打分,再选择 top-k 个 expert 处理这个 token,最后按路由权重合并输出。这样模型总参数量可以很大,但每个 token 只激活少数 expert,所以 active parameters 和 per-token FLOPs 低于同规模 dense 模型。这就是 MoE 能在容量和计算之间折中的原因。
MoE 的难点集中在路由和负载均衡。router 如果塌缩到少数热门 expert,会造成这些 expert 过载,其他 expert 学不到东西;训练中通常要加 load balance loss、设置 capacity factor、限制每个 expert 接收 token 数,有时还要处理 token dropping 或 rerouting。系统侧还会引入 all-to-all 通信、expert parallel、跨卡 dispatch、batch 内 token 重排和 serving 调度问题。换句话说,MoE 控制的是每个 token 的计算,不自动控制工程复杂度。
#6. 数据质量和结构扩展必须协同设计
结构扩展会放大数据分布的影响。MoE 的 expert 是否形成有意义分工,取决于训练数据里是否真的存在稳定的领域、语言、任务和难度差异;如果数据充满重复模板和 spam,expert 可能学到的是垃圾簇。长上下文模型需要高质量长文档和跨段落依赖,否则只是扩大窗口但不会学会长程推理。代码、数学、工具调用能力也不是靠参数自然长出来,而是依赖足够干净、可验证、格式一致的数据。面试里可以把结论说得直接一点:模型结构决定容量上限,数据质量决定这部分容量被用来学能力还是记噪声。
#7. 常见误区
- 误区一:CLM 只能生成,不能理解。实际 CLM 可以通过 prompt 把理解任务转成生成答案,只是表示学习形态和 encoder-only 不同。
- 误区二:数据越多越好。更准确的说法是有效 token 越多越好,重复、污染和低质 token 会吞掉训练预算。
- 误区三:SFT 可以解决领域知识缺口。SFT 更擅长教行为格式,知识密集场景要先判断是否需要继续预训练、RAG 或工具。
- 误区四:Scaling Law 能保证能力涌现。它主要拟合 loss 与规模关系,不能替代数据审计、任务评测和部署成本分析。
- 误区五:MoE 参数多所以一定更强更便宜。MoE 只让激活计算更稀疏,同时带来路由、通信、负载均衡和服务稳定性成本。
#8. 复盘清单
- 能否用一句话区分 CLM 的 next-token 目标和 MLM 的 mask 还原目标?
- 能否画出从原始网页到 token batch 的 pipeline,并指出每一步失败会造成什么模型问题?
- 能否解释去重、质量过滤、混合比例和 contamination 审计分别解决不同问题?
- 能否在固定 compute 下说明为什么参数量和 token 数要配比,而不是单独堆一边?
- 能否判断一个领域模型问题应该用 continue pretraining、SFT、RAG 还是组合方案?
- 能否说明 MoE 的 router、expert、top-k、load balance loss、capacity factor 和通信成本?
#9. 追问链路
面试追问通常会从目标函数开始:为什么通用 LLM 用 CLM,不用 MLM?接着转到数据:如果 loss 下降但 benchmark 不涨,你怎么检查去重、质量和污染?然后问预算:同样算力下是训更大的模型,还是训更久、换更好数据?再问领域适配:法律或医疗模型是 CPT 还是 SFT,怎么防止遗忘?最后落到结构扩展:MoE 为什么能降 FLOPs,router 怎么训练,专家负载不均会怎样影响吞吐和效果。准备时按这条链回答,基本就能把“预训练、数据、Scaling、MoE”从名词清单讲成一套工程判断框架。