#模块三:预训练、数据工程、Scaling Law 与模型结构扩展
#25. Causal Language Modeling 和 Masked Language Modeling 的区别是什么?
#标准答案
CLM(Causal Language Modeling)是标准的自回归目标:只看前文,预测下一个 token,所以它天然适合文本生成、对话、代码续写这类任务。MLM(Masked Language Modeling)则是把一部分 token 遮住,让模型根据左右文把它补回来,因此更适合理解型表示学习。
两者最大的区别,不只是”一个单向一个双向”,而是训练目标决定了后续能力形态。CLM 更容易直接迁移到生成式 LLM;MLM 更适合做编码器和语义表示。所以今天的通用大模型主流更偏 CLM,不是因为 MLM 无用,而是因为目标函数和产品形态更匹配。
#深度解析
1. CLM 和 MLM 的数学形式对比
CLM (Causal Language Modeling):
L_CLM = -Σ log P(x_t | x_{<t}; θ)
- 每个位置 t 只能看到前面的 token
x_1, ..., x_{t-1} - 预测下一个 token
x_t - 天然适合自回归生成
MLM (Masked Language Modeling):
L_MLM = -Σ_{t∈M} log P(x_t | x_{\M}; θ)
- 随机 mask 一部分位置集合 M
- 用双向上下文预测被 mask 的 token
- 适合学习上下文表示
2. 为什么 CLM 更适合生成,MLM 更适合理解?
| 维度 | CLM | MLM |
|---|---|---|
| 上下文方向 | 单向(只能看左边) | 双向(看左右两边) |
| 训练-推理一致性 | 完美一致(都是自回归) | 不一致(训练时 mask,推理时没有 mask) |
| 表示能力 | 弱于 MLM(只能单向编码) | 强于 MLM(双向编码更充分) |
| 生成能力 | 天然强(训练目标=生成目标) | 需要额外适配(如 BERT 做生成需改造) |
3. 从预训练到下游任务的迁移路径
CLM 预训练 (GPT) → 直接做生成任务(对话、续写、代码)
→ 也可以做理解(通过 prompt 设计)
MLM 预训练 (BERT) → 直接做理解任务(分类、NER、匹配)
→ 做生成困难(没有自回归训练)
4. Span Corruption:T5 的统一尝试
T5 提出 Span Corruption:把输入中连续的 token 片段替换为 sentinel,让模型生成被替换的内容。
输入: “Thank you <X> me to your party <Y> week”
目标: “<X> for inviting <Y> last”
这是 CLM 和 MLM 的折中:
- 像 MLM:能看到双向上下文(输入中的 sentinel 两边)
- 像 CLM:输出是自回归生成的
- 但工程上比纯 Decoder-only 更复杂
5. 面试官常见深挖追问
- ”为什么 GPT 用 CLM 而不是 MLM?如果反过来会怎样?”
- 答:GPT 的目标是生成,CLM 的训练目标和生成目标完全一致。如果用 MLM 训练 GPT,推理时模型没有 mask,会遇到 exposure bias——训练时看到完整上下文(mask 位置两边),推理时只能看到左边。BERT 做生成需要额外加 decoder 层或改造输出方式。
- ”MLM 的 mask 比例 15% 是怎么定的?能改吗?”
- 答:15% 是 BERT 论文中的经验值。mask 太少 → 训练信号不足;mask 太多 → 上下文信息太少,模型难以推断。实践中可以调,但通常在 10%-20% 之间。RoBERTa 发现 15% 已经很优,加大到 20% 提升不明显。
- ”CLM 和 MLM 的样本效率哪个更高?”
- 答:MLM 更高。MLM 每个样本能同时预测多个 mask 位置(如 15% 的 token),训练信号密度高。CLM 每个位置只预测下一个 token,信号密度低。但 CLM 的优势是训练-推理一致,且可以通过海量数据(万亿 token)弥补样本效率差距。
#26. 什么是 Scaling Law?
#标准答案
Scaling Law 说的是:当模型参数、训练 token、算力预算持续增大时,模型性能通常会呈现出某种相对平滑、可预测的变化规律。它不是一句“模型越大越强”的口号,而是告诉你提升性能时,数据、参数和算力之间存在耦合关系。
它在工程上的价值,不是拿来神奇预测最终分数,而是帮助团队做资源决策:预算固定时,是继续堆模型、继续加数据,还是先提升数据质量更划算。如果你能把 Scaling Law 讲成”资源配置规律”,而不是”一个数学公式”,回答会成熟很多。
#深度解析
1. Scaling Law 的核心公式
Hoffmann 等人(2022,DeepMind,Chinchilla 论文)提出的标准形式:
L(N, D) = E + A/N^α + B/D^β
其中:
L:损失(loss)N:模型参数量D:训练 token 数E:不可约损失(数据本身的熵)A, B, α, β:拟合常数,通常α ≈ 0.34,β ≈ 0.28
这个公式的核心含义:损失由三部分组成——数据本身的难度(E)、模型太小带来的欠拟合(A/N^α)、数据太少带来的欠训练(B/D^β)。
2. Chinchilla Optimal:模型和数据的配比
Chinchilla 论文的发现:过去很多模型(如 GPT-3、Gopher)在固定算力下,模型参数量太大、训练数据太少,处于”欠训练”状态。
最优配比(算力固定为 C ≈ 6ND FLOPs):
N_opt ∝ C^0.5D_opt ∝ C^0.5
也就是说:模型大小和数据量应该等比例增长。如果算力增加 4 倍,模型和数据都应该增加约 2 倍。
具体数字:在 1e21 FLOPs 预算下,Chinchilla 最优约是 10B 参数 + 200B token;而 Gopher 用了 280B 参数 + 300B token,模型过大、数据不足。
3. 为什么 Scaling Law 不是”越大越好”?
因为公式中有”不可约损失”E。当 N 和 D 足够大后,A/N^α 和 B/D^β 都变得很小,损失趋近于 E。此时继续堆资源,收益急剧递减。
另外,Scaling Law 只在”充分训练”的假设下成立。如果数据质量差、重复多、分布偏移,实际损失会偏离 Scaling Law 的预测。
4. 工程中的实际用法
Scaling Law 最常见的工程用途:
| 场景 | 用法 |
|---|---|
| 算力预算固定 | 按 Chinchilla optimal 选 N 和 D,避免模型过大或数据过少 |
| 已有模型,想继续训 | 判断当前是模型瓶颈还是数据瓶颈:如果 loss 曲线还很陡,说明数据不够;如果已经很平,说明模型容量到头了 |
| 小模型能否通过多数据追上大模型 | 可以,但有天花板。小模型+超量数据的 loss 会逼近 E + A/N^α,大模型+适量数据的 loss 是 E + A/N'^α。如果 N' >> N,小模型无论如何也追不上 |
5. 面试官常见深挖追问
- ”如果算力增加 10 倍,按 Scaling Law 模型应该增大多少倍?”
- 答:按 Chinchilla optimal,
N_opt ∝ C^0.5,所以算力增加 10 倍,模型和数据都应增加约sqrt(10) ≈ 3.16倍。
- 答:按 Chinchilla optimal,
- ”Scaling Law 在小模型上成立吗?为什么有些 1B 模型效果比 7B 还好?”
- 答:Scaling Law 描述的是”充分训练”后的趋势,不是绝对排名。小模型如果在高质量数据上充分训练,可能超过大模型在差数据上的效果。而且 Scaling Law 的幂律拟合在大模型区域更准,小模型区域可能因为初始化、优化器等非线性因素偏离。
- ”为什么 Scaling Law 用 loss 而不是下游任务指标?”
- 答:Loss 是连续值、可微分、对训练过程敏感,适合拟合平滑曲线。下游任务指标(如 accuracy)通常是离散的、饱和的(接近 100% 后很难提升),而且受任务难度影响大,不适合做跨模型/跨任务的统一拟合。
#27. 为什么大模型预训练需要数据去重和数据清洗?
#标准答案
大模型预训练要做数据去重和清洗,核心原因是训练预算非常贵,不能把大量 step 浪费在重复、脏乱或低价值样本上。重复数据会让模型过度记忆少数模式,低质数据会把噪声、错误语法、错误事实甚至爬虫垃圾一起灌进去,最后既影响泛化,也污染评测判断。
更严重的是,如果训练集和测试集存在近重复或泄漏,模型会显得”离线成绩很好”,但其实只是提前见过答案。所以很多团队后来发现,盲目扩数据不一定比认真做去重、清洗、质量分层更有效。
#深度解析
1. 数据去重的技术原理:MinHash + LSH
大规模去重不能用暴力两两比较(O(N²) 不可行),工业界主流用 MinHash + 局部敏感哈希(LSH):
- MinHash:把文档转成一组 k-gram(如 5-gram),用多个哈希函数分别取最小值,构成签名。两个文档的 Jaccard 相似度 ≈ 签名相同的比例。
- LSH:把签名分桶,相似文档大概率落在同一个桶里,只需比较同桶内的文档对。
这样可以在 O(N) 时间内找出近似重复,适用于百亿级文档。
2. 数据清洗的分层策略
| 层级 | 清洗目标 | 典型手段 |
|---|---|---|
| 格式层 | 去除 HTML 标签、乱码、不可见字符 | 正则过滤、编码检测 |
| 语言层 | 保证目标语言纯度、去除混杂语 | 语言检测模型(如 fastText) |
| 质量层 | 过滤低质量、机器生成、spam | perplexity 阈值、规则过滤、分类器 |
| 语义层 | 去重、去除敏感/有害内容 | MinHash/LSH、关键词+分类器 |
| 评测层 | 防止测试集泄漏到训练集 | n-gram 重叠检测、字符串匹配 |
3. 评测污染(Contamination)的定量感受
假设训练集中混入了 1% 的测试集近似重复样本:
| 污染比例 | 对评测指标的影响 | 后果 |
|---|---|---|
| 0.1% | 轻微提升(+1-2%) | 可能察觉不到 |
| 1% | 明显提升(+5-10%) | 误导模型选型 |
| 10% | 大幅虚高(+20-50%) | 完全失去评测意义 |
GPT-3 论文中就明确报告了评测污染检测流程,很多后来的模型也效仿这种做法。
4. 为什么”高质量小数据 > 低质量大数据”?
信息论角度:模型每一步梯度更新都在学习数据分布。低质量数据中噪声比例高,模型会把 step 浪费在拟合噪声上。
实验证据:Chinchilla 论文发现,在相同计算预算下,高质量数据(如过滤后的书籍、维基)的”每 token 信息量”显著高于普通网页爬取数据。
5. 面试官常见深挖追问
- ”MinHash 去重时,k-gram 选多大合适?太大或太小有什么问题?”
- 答:k 太小(如 2-gram):”的”、”是”等高频组合导致大量误报;k 太大(如 20-gram):近似重复(只改了几个词)检测不到。通常选 5-13 gram,平衡覆盖与特异性。
- ”数据去重会把'有用的重复'也去掉吗?比如 FAQ 中正确答案重复出现?”
- 答:预训练的去重通常针对整个文档级别(doc-level dedup),不是句子级别。FAQ 的重复句子不会被误删。但如果整篇文档完全复制粘贴(如镜像网站),则会去重。
- ”如果发现模型在评测集上异常高,怎么验证是不是污染?”
- 答:三板斧:1)把测试集和训练集做 n-gram 重叠分析;2)检查测试样本在训练 loss 上是否异常低(提前见过则 loss 低);3)构造一个”等难度但全新”的测试集,看分数是否大幅下降。
#28. Continue Pretraining 和 SFT 的目标有何不同?
#标准答案
continue pretraining 和 SFT 最大的区别,在于它们解决的问题层级不同。continue pretraining 主要是在原有底座上继续喂某个领域的数据,让模型更熟悉这个领域的术语、语气、知识结构和文本分布,所以它更像“补知识、补语料分布”;SFT 则是通过高质量输入输出对,让模型学会特定任务格式、回答风格和行为约束,更像“补行为”。
一句更好记的话是:continue pretraining 让模型”更懂这个领域”,SFT 让模型”更会按你的要求工作”。如果面试题落在法律、医疗、金融等行业,通常也要按这个思路分析先做哪一步。
#深度解析
1. 两个阶段的本质差异
| 维度 | Continue Pretraining | SFT |
|---|---|---|
| 优化目标 | 降低领域语料的 perplexity | 最大化高质量 (prompt, response) 对的似然 |
| 数据形式 | 无标签纯文本 | 成对的 (input, output) |
| 数据量 | 大(TB 级领域语料) | 小(10K-1M 条高质量对话) |
| 学习时长 | 长(数天到数周) | 短(几小时到几天) |
| 改变什么 | 知识分布、术语理解 | 行为模式、输出格式、安全边界 |
| 风险 | 灾难性遗忘(忘记通用能力) | 过拟合(只学会训练集中的模式) |
2. 为什么通常是”先 continue pretraining,后 SFT”?
如果模型完全不懂法律术语:
问题:”请解释《合同法》第52条”
只 SFT → 模型知道”要回答法律问题”,但可能胡编条文
先 Continue Pretraining → 模型见过大量法律文本,知道”第52条”是什么
再 SFT → 模型学会”用规范格式解释法律条文”
但这不是绝对的。如果底座已经够强(如 GPT-4),可能直接 SFT 就够了。
3. 什么时候可以跳过 continue pretraining?
| 条件 | 说明 |
|---|---|
| 底座通用能力足够强 | 如 GPT-4、Claude-3,通用知识已覆盖大部分领域概念 |
| 任务不需要深层领域知识 | 如风格转换、格式调整、简单问答 |
| 领域和通用语料分布差异小 | 如通用中文 → 新闻中文 |
| 时间/算力极度受限 | 只能做 SFT,accept 效果上限降低 |
4. 两阶段的数据配比陷阱
Continue Pretraining 的一个常见错误:只用领域数据。
| 配比策略 | 效果 | 原因 |
|---|---|---|
| 100% 领域数据 | 灾难性遗忘 | 模型忘记通用知识,变成”领域 narrow expert” |
| 90% 通用 + 10% 领域 | 较好 | 保留通用能力,同时学习领域分布 |
| 50% 通用 + 50% 领域 | 可能欠拟合领域 | 领域信号不够强 |
最佳实践:通用数据占比 70-90%,领域数据 10-30%,具体比例通过验证集调。
5. 面试官常见深挖追问
- ”如果一个法律模型在 SFT 后对通用问题回答变差了,原因是什么?”
- 答:SFT 数据只覆盖法律领域,模型在 SFT 过程中”忘记”了通用问题的回答方式。这就是 SFT 阶段的灾难性遗忘。解决:1)SFT 数据中加入通用数据混合;2)用 LoRA 代替全参数 SFT,冻结大部分预训练权重;3)多阶段 SFT:先做通用 SFT,再做领域 SFT。
- ”continue pretraining 的学习率应该比预训练大还是小?”
- 答:通常更小。预训练学习率 ~1e-4 到 3e-4;continue pretraining 常用 ~1e-5 到 5e-5。原因:预训练是从随机初始化开始,需要大学习率快速收敛;continue pretraining 是在已有好的权重上微调,大学习率会破坏已有知识。但也要看数据量:如果领域数据量很大(如 100B tokens),可以用稍大的学习率。
- ”SFT 数据的质量和数量哪个更重要?”
- 答:质量更重要。1000 条高质量 SFT 数据 > 10000 条低质量数据。高质量的标准:1)输入输出匹配;2)格式一致;3)无错误信息;4)覆盖关键场景。实践中常见策略:先用少量高质量数据(1K-10K)做冷启动,再逐步增加数据量。
#29. 什么是 MoE?
#标准答案
MoE(Mixture of Experts)可以理解成“很多专家 + 一个分诊路由器”的结构。模型里不是只有一个统一 FFN,而是有很多个专家子网络;每个 token 进来后,路由器会决定它该送去哪些专家处理,通常只激活 top-k 个,而不是把所有专家都算一遍。
这样做的价值在于:模型总参数量可以做得很大,容量明显提升,但单个 token 实际激活的计算量不需要按总参数等比例上涨。所以大家会说 MoE 是一种”总参数大、激活参数小”的稀疏激活架构。
#深度解析
1. 路由机制的数学形式
对于每个 token 的隐藏状态 h,路由器先计算一个分数:
gate_score = softmax(h @ W_gate) # 形状: (num_experts,)
topk_indices = topk(gate_score, k) # 通常 k=1 或 2
然后 token 只被送到 topk_indices 对应的专家。每个专家的输出按 gate score 加权求和:
output = Σ(i in topk) gate_score[i] * Expert_i(h)
2. 为什么 top-k 而不是只选 top-1?
k=1(最稀疏):每个 token 只走一个专家,通信最少,但路由决策”硬”——选错了就没有补救。k=2(常用):主专家 + 辅助专家,兼顾稀疏性和容错性。DeepSeek-V3 甚至用到k=6(共享专家 + 路由专家),让关键知识放在共享专家保证必达,领域知识放在路由专家按需激活。
3. 负载均衡:MoE 训练的核心难点
如果没有约束,路由器会倾向于把 token 送到少数”好训”的专家(称为”专家塌缩”)。解决方案:
- 辅助损失(Auxiliary Loss):惩罚不平衡的路由分布。常见形式是
load_balancing_loss = α * Σ(f_i * P_i),其中f_i是专家 i 的实际负载比例,P_i是路由概率的平均值。 - 专家容量限制(Expert Capacity):每个专家每轮最多处理固定数量的 token,超出的 token 被溢出到下一个专家或跳过。
- Noisy Top-K Gating:在路由分数上加噪声,打破”永远选同一个专家”的局部最优。
4. 参数量 vs 激活参数量的具体对比
假设:模型隐藏维度 d=4096,专家 FFN 扩到 4d=16384,专家数 E=16,top-k=2。
- 单个专家参数量:
3 * d * 4d = 3 * 4096 * 16384 ≈ 201M - 所有专家总参数量:
16 * 201M ≈ 3.2B - 每 token 激活参数量:
2 * 201M ≈ 402M(只激活 2 个专家) - 对比稠密模型 FFN:
3 * d * 4d ≈ 201M
总参数从 201M 扩展到 3.2B(16 倍),但每 token 计算只从 201M 增加到 402M(2 倍)。这就是”容量大、计算省”。
5. 面试官常见深挖追问
- ”MoE 的 all-to-all 通信瓶颈是什么?”
- 答:每个 token 激活的专家可能分布在不同 GPU 上,需要把所有 token 的路由结果广播出去,再把激活结果收集回来。这就是 all-to-all 通信。当专家数多、token 数大时,通信量
~batch_size * seq_len * k * hidden_dim会很大,成为训练瓶颈。Expert Parallel(EP)就是为了把相关专家尽量放在同一节点内,减少跨节点通信。
- 答:每个 token 激活的专家可能分布在不同 GPU 上,需要把所有 token 的路由结果广播出去,再把激活结果收集回来。这就是 all-to-all 通信。当专家数多、token 数大时,通信量
- ”DeepSeek 的 shared expert 和 routed expert 有什么区别?”
- 答:Shared expert 是所有 token 都必须经过的(类似一个公共 FFN),保证通用知识始终可达;Routed expert 是按 top-k 选择的,处理领域特异性知识。这样设计的好处是:不会因为路由错误而丢失关键通用能力,同时保留稀疏激活的扩展性。
- ”MoE 和 Dense 模型在推理时谁更快?”
- 答:不一定。MoE 每 token 激活的参数量可能更少(如 top-2 时只激活 2/16 专家),但 all-to-all 通信和路由开销会增加延迟。小 batch 时 MoE 可能更慢(通信占比高);大 batch 高并发时 MoE 优势更明显(计算可以掩盖通信)。
#30. MoE 的优势和代价分别是什么?
#标准答案
MoE 的最大优势,是它让模型可以在不把单 token 计算成本同步拉爆的前提下,把总容量做得更大。换句话说,你可以拥有更多参数、更强知识容量和更高潜在上限,但每次前向只激活少量专家,因此 FLOPs 增长没有那么夸张。
代价同样很明显。第一,路由器可能把大量 token 挤到少数热门专家,导致负载不均;第二,多机多卡下专家通信会变复杂;第三,训练容易出现不稳定和专家塌缩;第四,部署和监控成本明显高于稠密模型。所以 MoE 不是”白送容量”,而是把难题从纯算力转移到了系统与训练策略。
#深度解析
1. 优势的具体量化
| 维度 | Dense 模型 | MoE 模型(16 专家, top-2) | 说明 |
|---|---|---|---|
| 总参数量 | 7B | 7B + 专家额外参数 ≈ 30-100B | 容量大 |
| 每 token FLOPs | 7B 级别 | ~14B 级别(只算 2 个专家) | 计算增长可控 |
| 训练速度(同样 FLOPs) | 基准 | 略慢(路由开销) | 通信开销 |
| 推理吞吐(大 batch) | 基准 | 更高(激活参数少) | 高并发优势 |
| 推理延迟(小 batch) | 基准 | 可能更高(all-to-all) | 通信占比高 |
2. 专家塌缩(Expert Collapse)是什么?
训练初期,所有专家随机初始化,路由大致均匀。但随着训练进行,某些专家可能因为初始化优势或数据分布偏差,逐渐吸收更多 token。最终可能 80% 的 token 都被送到 2-3 个专家,其他专家几乎闲置。
后果:
- 负载不均导致 GPU 利用率下降(某些卡很忙,某些卡很闲)
- 闲置专家没有充分训练,浪费参数量
- 活跃专家过载,泛化能力下降
3. 负载均衡损失的数学形式
load_balancing_loss = α * num_experts * Σ(f_i * P_i)
其中:
f_i:batch 中实际分配给专家 i 的 token 比例P_i:路由器对专家 i 的平均选择概率α:超参数(通常很小,如 0.01)
当路由完全均匀时,f_i = P_i = 1/num_experts,每一项 f_i * P_i = 1/num_experts²,总和最小。 当路由极度不均时(如 f_1=1, f_其他=0),损失很大。
注意:这个损失只在训练时加,推理时不加。
4. MoE 和 Dense 的选择决策树
需要超大容量(>30B 等效)?
├── 是 → 有高并发推理需求?
│ ├── 是 → MoE(吞吐优势)
│ └── 否 → Dense(延迟更稳)
└── 否 → Dense(实现简单、训练稳定)
5. 面试官常见深挖追问
- ”MoE 模型做推理时,怎么选部署 GPU 数量?”
- 答:需要同时考虑模型并行和数据并行。专家数通常是 8/16/64,最好能被 GPU 数整除,让每个 GPU 负责整数个专家。如果 16 个专家但只有 8 张卡,每张卡放 2 个专家,all-to-all 通信只在 8 个节点间进行。
- ”MoE 的 dropout 应该加在哪里?”
- 答:通常在专家输出后加 dropout,而不是在路由前。因为路由是”硬”决策,对 dropout 敏感。另外,一些实现会对专家做”expert dropout”——训练时随机屏蔽某些专家,强迫路由器学会多路径依赖。
- ”如果 MoE 的一个专家坏了(如权重损坏),怎么恢复?”
- 答:因为 top-k 通常 k≥2,单个专家损坏不会完全断流(还有其他专家兜底)。恢复时可以:1)用同层其他专家的权重平均初始化;2)冻结其他专家,只训练损坏专家几轮;3)如果有 checkpoint,直接回滚。
#31. 如果要做一个法律/医疗/金融领域模型,你会选继续预训练还是直接 SFT?为什么?
#标准答案
如果法律、医疗、金融模型的核心短板是“不懂这个行业在说什么”,比如术语陌生、领域知识缺失、文本风格完全不对,那优先考虑 continue pretraining,因为你首先要把底层语言分布补进去。如果模型已经大致懂这个领域,但不会按问答、抽取、报告、风控解释等任务格式稳定输出,那更适合做 SFT。
真实项目里最常见的组合通常是:先用高质量领域语料继续预训练,让模型”听得懂行业黑话”;再用任务数据做 SFT,让模型”按业务要求回答”。如果直接二选一,往往说明你还没先分清楚知识问题和行为问题。
#深度解析
1. 行业模型的典型构建路径
通用底座(如 LLaMA-2-7B)
↓
[阶段一] Continue Pretraining(领域语料)
- 目标:让模型懂行业术语、知识、文风
- 数据:法律判决书、医学文献、金融财报
- 结果:领域 perplexity 下降,但通用能力可能轻微退化
↓
[阶段二] SFT(任务数据)
- 目标:让模型按业务格式回答
- 数据:(用户问题, 标准回答) 对
- 结果:学会问答、摘要、报告生成等任务格式
↓
[阶段三] RLHF/DPO(偏好数据)
- 目标:让回答更专业、更安全、更符合行业规范
- 数据:同一问题的多个回答 + 专业人士排序
2. 什么时候可以跳过 continue pretraining?
| 条件 | 示例 | 建议 |
|---|---|---|
| 底座已覆盖领域基础 | GPT-4 做通用法律咨询 | 直接 SFT + RAG |
| 任务主要是格式/风格 | 让模型输出 JSON 格式报告 | 直接 SFT |
| 领域和通用语料差异小 | 新闻分类(通用中文→新闻中文) | 直接 SFT |
| 需要深度领域推理 | 医疗诊断、法律判例分析 | 必须 continue pretraining |
3. 领域数据的质量要求
| 维度 | 低质量 | 高质量 |
|---|---|---|
| 准确性 | 包含错误医学知识 | 经专家审核的文献 |
| 时效性 | 过时的法律法规 | 最新生效的条文 |
| 格式 | 网页爬虫的 HTML 残渣 | 清洗后的纯文本 |
| 版权 | 侵权内容 | 公开授权或自有数据 |
法律/医疗领域尤其要注意:模型会背诵训练数据中的错误信息,且置信度很高。错误知识的危害性远大于”不知道”。
4. 领域模型评估的特殊性
通用模型的评估(如 MMLU)不够,需要领域专用评测:
- 法律:法考客观题、案例判决匹配、法条引用准确性
- 医疗:执业医考、诊断推理、药物相互作用判断
- 金融:财报指标计算、风险术语理解、合规规则判断
关键指标:幻觉率(hallucination rate)——模型编造不存在法条/药物/规定的比例。
5. 面试官常见深挖追问
- ”如果领域数据只有 1GB,还值得做 continue pretraining 吗?”
- 答:1GB 大约 2 亿 token,对于 7B 模型来说太少(通常需要 10B+ token 才能看到明显效果)。建议:1)先尝试直接 SFT + RAG,看效果是否够用;2)如果必须 CPT,用很小的学习率(1e-6)和很少的步数,防止过拟合;3)考虑数据增强(同义词替换、回译)扩充到 5-10GB。
- ”法律模型生成错误法条,责任谁负?”
- 答:这是领域模型落地的核心风险。工程上需要:1)RAG 优先(检索真实法条作为生成依据);2)输出时强制引用来源(”根据《合同法》第52条...”);3)免责声明(”仅供参考,不构成法律建议”);4)人工审核闭环(高风险场景必须人工确认)。技术上不能完全消除幻觉,必须通过系统设计控制风险。
- ”领域 continue pretraining 会不会导致灾难性遗忘?”
- 答:会,如果领域数据占比过高。缓解策略:1)通用数据 : 领域数据 = 7:3 或 8:2;2)LoRA 代替全参数 CPT(只微调少量参数);3)多阶段训练:先领域 CPT,再通用数据”恢复”通用能力;4)评估监控:定期检查通用 benchmark(MMLU、GSM8K)是否下降。
#32. 预训练数据配比为什么重要?高质量小数据和低质量大数据怎么权衡?
#标准答案
预训练数据配比重要,是因为模型最后学到的不是某一份数据,而是整个训练分布。你给什么比例,它就把多少训练预算花在那种模式上。所以高质量数据虽然量小,但往往信息密度高、噪声低;低质量大数据虽然覆盖广,但会把很多预算浪费在弱模式甚至错误模式上。
实际权衡通常不是”二选一”,而是先用足够大的数据保证覆盖,再通过采样权重、课程学习或数据分层,让高质量数据在关键阶段占更大比重。简化成一句话就是:先解决有没有,再解决好不好。
#深度解析
1. 数据配比的数学:加权采样
假设训练语料有 K 个来源,原始采样概率为 p_i(按文档数比例)。如果希望来源 j 被多采一些,可以给它一个权重 w_j > 1:
采样概率 q_i = (w_i * p_i) / Σ(w_k * p_k)
例如:网页数据占 90%、书籍占 10%。如果我们认为书籍质量更高,给书籍权重 3:
- 新的采样比例:网页 = (1 × 0.9) / (0.9 + 0.3) = 75%,书籍 = (3 × 0.1) / 1.2 = 25%
这就是 Data Mixing 的核心机制。
2. 高质量小数据 vs 低质量大数据的权衡
| 维度 | 高质量小数据 | 低质量大数据 |
|---|---|---|
| 信息密度 | 高(每 token 含更多有效信号) | 低(大量噪声和冗余) |
| 覆盖范围 | 窄(可能漏掉长尾知识) | 广(覆盖更多领域和语言) |
| 训练效率 | 高(收敛快) | 低(需要更多 step 过滤噪声) |
| 泛化风险 | 可能过拟合高质量来源的风格 | 可能学到噪声模式 |
最佳实践不是二选一,而是动态组合:
- 前期:用大数据保证覆盖,防止模型没见过某些模式
- 中期/后期:提高高质量数据比例,让模型在”信息密度高”的数据上精修
- 课程学习:先易后难,逐步引入更复杂的数据
3. 著名模型的数据配比参考
| 模型 | 网页 | 书籍 | 代码 | 百科 | 其他 |
|---|---|---|---|---|---|
| GPT-3 | 60% | 16% | 0% | 3% | 21% |
| LLaMA-1 | ~65% | ~5% | ~5% | ~5% | ~20% |
| LLaMA-2 | 降低网页比例 | 提高代码比例 | ↑ | ↑ | 质量过滤更严格 |
趋势:后续模型普遍降低网页比例、提高代码和书籍比例,因为网页噪声太大。
4. 课程学习(Curriculum Learning)在预训练中的应用
不是所有数据同时加入训练。一种策略:
- Phase 1(0-30% steps):高质量通用数据(书籍、百科)
- Phase 2(30-70% steps):加入代码、对话、多语言数据
- Phase 3(70-100% steps):加入领域特定数据和高质量指令数据
这样模型先学会”基础语言能力”,再扩展到”多样化技能”。
5. 面试官常见深挖追问
- ”如果我把网页数据权重设成 0,只用书籍和代码训练,会怎样?”
- 答:模型可能在通用知识和对话能力上表现差,因为网页虽然噪声大,但覆盖了大量日常用语、时事、多语言内容。完全去掉会导致知识覆盖不足。更好的做法是降权重 + 严格过滤,而不是完全丢弃。
- ”怎么判断'高质量'和'低质量'?有没有客观的指标?”
- 答:常见指标:1)perplexity(用已有好模型测,perplexity 越低通常质量越高);2)语言模型一致性(句子内部逻辑是否通顺);3)人工评分抽样;4)来源可信度(如维基 > 论坛 > 未过滤网页)。但这些指标都有局限,最终需要下游任务验证。
- ”数据配比对模型'性格'有什么影响?”
- 答:影响很大。代码比例高 → 模型更擅长推理和结构化思维;对话比例高 → 模型更健谈、更懂指令跟随;书籍比例高 → 模型知识更深但可能更”书呆子”。GPT-4 之后的模型普遍提高了代码和指令数据比例,这就是它们”更会思考”的原因之一。
#33. Scaling Law 在实际项目里怎么指导模型选型和算力预算?
#标准答案
Scaling Law 在项目里最有用的地方,是帮团队做“钱该花在哪”的判断。比如预算固定时,你需要判断继续堆模型参数是不是已经进入收益递减区,或者是不是应该把更多钱投到数据扩充、数据清洗、训练 token 数,甚至基础设施效率优化上。
所以它更像一个资源导航工具,而不是一个死板公式。成熟团队不会机械地根据某条曲线拍板,而是结合试验点、历史经验和硬件成本,判断当前最值得投入的方向。
#深度解析
1. Chinchilla Scaling Law 的预算分配公式
Chinchilla 论文给出的最优配置:
N_opt ∝ C^0.5, D_opt ∝ C^0.5
即:在固定计算预算 C(FLOPs)下,最优参数 N 和数据量 D 应该相等增长。
具体数值(近似):
N_opt ≈ C / (6 * D_opt)
D_opt ≈ 20 * N_opt (单位:tokens,N 单位:参数)
即:1B 参数的模型,最优训练数据约 20B tokens。
2. 固定预算下的权衡:扩模型 vs 扩数据
假设你有 1e21 FLOPs 的计算预算:
| 方案 | 参数量 | 数据量 | 预期损失 | 原因 |
|---|---|---|---|---|
| 模型过大 | 100B | 10B | 较高 | 数据不足,模型欠训练 |
| Chinchilla 最优 | 30B | 600B | 最低 | N 和 D 平衡 |
| 数据过大 | 1B | 1000B | 较高 | 模型容量不足,无法吸收 |
3. 实际项目中的三段式决策
| 阶段 | 判断标准 | 决策 |
|---|---|---|
| 模型是否够大 | 当前模型是否已到达数据瓶颈? | 如果 loss 还在快速下降 → 继续扩数据;如果 plateau → 考虑扩模型 |
| 数据是否够好 | 数据质量和多样性是否足够? | 如果数据质量差 → 先清洗;如果覆盖不足 → 先扩数据 |
| 硬件是否够强 | 训练时间和成本是否在预算内? | 如果训练太慢 → 优化infra;如果成本太高 → 考虑小模型+更多数据 |
4. 为什么 Scaling Law 不是万能公式?
- 它假设数据是 i.i.d. 的:真实数据有分布偏移、长尾问题
- 它假设模型架构固定:新架构(如 MoE、Mamba)可能打破原有曲线
- 它忽略推理成本:训练时最优的模型,推理时可能太贵
- 它不考虑任务类型:代码任务和创意写作任务的最优配比不同
5. 面试官常见深挖追问
- "如果老板给你 100 万美元预算,你会怎么分配给模型和数据?"
- 答:先算总 FLOPs(100 万 ≈ 购买 100-200 张 A100 训练 1-2 个月 ≈ 1e21-1e22 FLOPs)。按 Chinchilla,选 30-70B 参数 + 600B-1.4T tokens。但具体还要看:1)领域数据是否充足(不足则花更多钱买/清洗数据);2)推理成本约束(如果推理预算有限,宁可选小模型+更多数据);3)时间约束(大模型训练时间更长)。
- "为什么 GPT-3(175B)的训练数据只有 300B tokens,远低于 Chinchilla 最优?"
- 答:GPT-3 训练时 Chinchilla 论文还没发表。事后看,GPT-3 是"模型过大、数据不足"的典型——如果按 Chinchilla 配比,70B 参数 + 1.4T tokens 可能达到类似效果,且推理成本更低。这也解释了为什么后来很多模型(如 LLaMA)选择更小参数+更多数据的路线。
- "Scaling Law 对推理系统选型有什么指导?"
- 答:训练时最优的模型不一定适合部署。假设 70B 模型训练效果比 7B 好 20%,但推理成本高 10 倍。如果业务场景对延迟敏感、预算有限,可能选择 7B + RAG 的方案,而不是直接部署 70B。Scaling Law 指导训练,部署决策还要考虑业务约束。
#34. MoE 为什么能在“参数量变大”的同时把推理 FLOPs 控住?它的路由又会引入什么问题?
#标准答案
MoE 能把总参数量做大但推理 FLOPs 控住,关键就在“稀疏激活”。虽然模型里有很多专家,但每个 token 实际只走 top-k 个专家,所以一次前向并不会把所有参数都算一遍。这样总容量很大,但单次实际计算仍被限制在少数子网里。
问题是,路由从来不是免费的。它会引入热点专家、负载不均、跨卡通信、容量溢出、训练不稳定等一系列工程与优化问题。也就是说,MoE 节省的不是系统复杂度,而是把复杂度重新分布到了路由和并行系统上。
#深度解析
1. 稀疏激活的定量计算
假设一个 MoE 层:
- 总专家数
E = 8 - 每个专家大小同标准 FFN(
d_model × d_ff × 2) - 激活专家数
k = 2
| 指标 | Dense 模型 | MoE 模型 |
|---|---|---|
| 总参数量 | 1× | 8×(专家数倍数) |
| 激活参数量 | 1× | 2×(top-k 倍数) |
| 单次前向 FLOPs | 1× | ~2×(略大于 k 倍,因为还要算路由) |
关键:总参数 8 倍,但计算只 2 倍。模型"记住"了 8 倍的知识,但推理时只激活 2 倍计算。
2. 路由问题的详细拆解
| 问题 | 现象 | 解决方案 |
|---|---|---|
| 专家塌缩 | 所有 token 都路由到少数几个专家 | 负载均衡损失(auxiliary loss) |
| 负载不均 | 某些 GPU 过载,某些空闲 | Expert Parallelism + 动态负载均衡 |
| 跨卡通信 | 专家分布在不同 GPU,token 需要跨卡传输 | All-to-All 通信优化、重叠通信与计算 |
| 容量溢出 | 某专家接收 token 超过容量上限 | Capacity factor(容量因子,如 1.25) |
| 训练不稳定 | 路由权重剧烈波动、loss spike | 路由噪声(noise)、温度退火 |
3. 负载均衡损失的数学
为了防止所有 token 都走同一个专家,MoE 训练通常加一个辅助损失:
L_aux = α * E * Σ(f_i * P_i)
f_i:第 i 个专家被分配的 token 比例P_i:路由器分配给第 i 个专家的平均概率α:超参数(通常 0.01)
目标:让 f_i 和 P_i 都接近均匀分布(1/E),鼓励负载均衡。
4. MoE vs Dense 的效果-效率权衡
| 模型 | 总参数 | 激活参数 | 训练 FLOPs | 推理 FLOPs/token | 效果 |
|---|---|---|---|---|---|
| Dense 70B | 70B | 70B | 1.4e21 | 2×70B | 基准 |
| MoE 8×7B | 56B | 14B | 1.4e21 | 2×14B | ≈ Dense 70B |
| MoE 64×7B | 448B | 14B | ~1e22 | 2×14B | > Dense 70B |
MoE 8×7B(总 56B,激活 14B)的训练成本和推理成本都远低于 Dense 70B,但效果接近。这是 MoE 的核心价值。
5. 面试官常见深挖追问
- "为什么 MoE 的训练通常需要 Expert Parallelism?"
- 答:因为单个 GPU 放不下所有专家(如 64 个专家 × 7B = 448B 参数)。Expert Parallelism 把不同专家放在不同 GPU 上,token 根据路由结果发送到对应 GPU。这引入了 all-to-all 通信开销,是 MoE 训练的主要瓶颈之一。
- "Capacity factor 是什么?为什么需要它?"
- 答:容量因子 = 专家实际容量 / 理论平均负载。如 capacity factor=1.25,意味着每个专家可以处理比平均值多 25% 的 token。如果没有容量因子,当某些 token 被异常大量路由到同一专家时,会 overflow(溢出),这些 token 就被丢弃了。capacity factor 提供了缓冲,但太大会浪费计算。
- "DeepSeekMoE 的 shared expert 是什么创新?"
- 答:传统 MoE 的所有专家都是"平等"的,每个 token 从所有专家中选 top-k。DeepSeekMoE 发现:某些基础能力(如语法、常识)是所有 token 都需要的,不需要路由。于是设计了"共享专家"(shared experts)——所有 token 必须经过这些共享专家,只在剩余专家上做路由。这样减少了路由负担,同时保证了基础能力不被路由错误破坏。
#35. 数据重复、污染、评测泄漏会怎样破坏模型质量判断?
#标准答案
数据重复、数据污染和评测泄漏最危险的地方,是它们会制造一种“模型已经很强”的假象。离线指标可能很好看,但其实模型只是见过大量重复样本,或者训练集和测试集存在近重复,最后并没有真正学会泛化。
这种假象会直接破坏项目判断:团队可能误以为当前模型架构更优、训练策略有效、甚至可以提前上线,结果一到真实场景就掉性能。所以做模型评估时,很多时候不是先看分数,而是先看这分数干不干净。
#深度解析
1. 三类问题的定义与区分
| 问题类型 | 定义 | 典型场景 | 检测难度 |
|---|---|---|---|
| 数据重复 | 训练集中同一样本出现多次 | 爬虫多次抓取同一网页 | 中 |
| 数据污染 | 训练集混入了测试集或评测数据 | 评测数据被爬虫抓取 | 高 |
| 评测泄漏 | 测试集与训练集有近重复(非完全重复) | 改写后的评测题混入训练集 | 很高 |
2. 数据重复的定量影响
假设训练集中某文档重复了 M 次:
- 模型在这份文档上的梯度被计算 M 次
- 相当于给这份文档加了 M 倍权重
- 如果这份文档包含错误信息,错误被强化了 M 倍
实验数据:去重后训练 LLaMA,在多个 benchmark 上效果提升 1-3%——说明重复数据确实在浪费训练预算。
3. 评测污染的经典案例
GPT-3 论文明确报告了评测污染问题:
- 发现某些 benchmark 的测试样本与训练数据有 3-10% 的重叠
- 污染样本上的准确率比未污染样本高 10-30%
- 团队用 n-gram 过滤去除污染后,重新评估真实能力
后续模型(如 LLaMA、PaLM)都引入了更严格的污染检测流程。
4. 检测方法详解
| 方法 | 原理 | 能检测什么 |
|---|---|---|
| n-gram 匹配 | 训练集和测试集的 n-gram 重叠率 | 直接重复、近重复 |
| MinHash | 文档级别的 Jaccard 相似度 | 文档级重复 |
| Embedding 相似度 | 语义相似但表述不同 | 改写后的泄漏 |
| Loss 异常低 | 模型在测试集上 loss 异常低 | 暗示提前见过 |
5. 面试官常见深挖追问
- "如果测试集泄漏了 5%,对模型选型有什么影响?"
- 答:影响可能很大。假设模型 A 在干净测试集上 70%,在污染测试集上 80%;模型 B 在两者上都是 75%。如果不检测污染,会错误地选 A。实际部署后 A 的真实能力只有 70%,比 B 差。所以任何模型比较前,必须先确认分数的"干净度"。
- "数据去重时,会不会把'重要的重复信息'也去掉?比如多个来源报道同一事件?"
- 答: doc-level 去重不会误删。多个来源报道同一事件,文档内容通常不同(角度、措辞、细节差异),MinHash 相似度不会达到去重阈值。真正被去重的是完全复制粘贴或只改几个字的内容(如镜像网站、重复爬取)。
- "如果检测到评测泄漏,已经训练好的模型怎么办?"
- 答:1)如果泄漏比例低(<1%),影响可能不大,继续用但标注"分数可能有轻微高估";2)如果泄漏比例高(>5%),需要重新训练(去除污染数据后),或者至少重新评估(构造全新的测试集)。最理想的做法是:训练前就做好污染检测,避免事后补救。
#36. 为什么有些团队宁愿做数据工程,也不急着继续堆模型参数?
#标准答案
很多团队不急着继续堆参数,是因为模型做到一定规模后,性能瓶颈往往不再只是“模型不够大”,而是“数据不够好、分布不够对、训练预算没花在刀刃上”。这时候继续加参数,可能只是在更高成本下重复学习噪声。
所以成熟团队常会先回头做数据工程:清洗、去重、重采样、提升高质量数据比例、修评测泄漏。因为对已经很大的模型来说,喂更干净的数据,往往比盲目再放大模型更划算。
#深度解析
1. 数据工程 vs 堆参数的 ROI 对比
假设一个团队有 100 万美元预算:
| 投资方向 | 预期效果提升 | 风险 | 边际收益 |
|---|---|---|---|
| 扩模型 2 倍 | +5-10% | 训练不稳定、推理成本翻倍 | 递减 |
| 数据清洗+去重 | +3-8% | 低 | 稳定 |
| 增加高质量数据 2 倍 | +5-15% | 数据获取难 | 较高 |
| 数据配比优化 | +2-5% | 低 | 稳定 |
关键洞察:模型规模扩大 2 倍的成本,通常远高于把数据质量提升一挡的成本。而且数据质量的提升不会增加推理成本,而模型扩大会同时增加训练和推理成本。
2. 为什么数据质量比数据量更重要?
信息论视角:
- 模型的训练过程是"从数据中提取信号、过滤噪声"
- 低质量数据中噪声比例高 → 模型需要更多 step 来"平均掉"噪声
- 高质量数据中信号密度高 → 每 step 学习效率更高
实证:
- LLaMA 团队发现,用相同计算预算,高质量数据(如过滤后的书籍)训练的模型,效果优于用 2 倍低质量数据训练的模型
- GPT-3 到 GPT-4 的提升中,数据质量(包括筛选、标注、多模态数据)的贡献不亚于模型规模
3. "数据工程"具体包括什么?
| 工程项 | 投入 | 预期收益 |
|---|---|---|
| 去重 | 中(需计算资源) | 消除 10-30% 冗余数据,提升训练效率 |
| 质量过滤 | 高(需设计规则/分类器) | 去除低质量源,提升信号密度 |
| 格式标准化 | 低 | 减少模型学习格式噪声的负担 |
| 领域配比 | 中(需实验验证) | 优化下游任务表现 |
| 评测污染检测 | 中 | 确保评估结果可信 |
4. 什么时候应该继续堆参数?
| 条件 | 说明 |
|---|---|
| 数据质量已经很高 | 继续洗数据的边际收益很低 |
| 任务需要极强涌现能力 | 某些能力(如复杂推理)只在一定规模后出现 |
| 推理成本不是首要约束 | 如内部研究、离线分析 |
| 有充足预算 | 可以同时做"数据工程 + 扩模型" |
5. 面试官常见深挖追问
- "如果你只有 10 万美元预算,会优先投给数据还是模型?"
- 答:优先数据。10 万美元大约能租 20 张 A100 训练 1 个月(~1e20 FLOPs)。按 Chinchilla,最优配置约 7B 参数 + 140B tokens。与其把 7B 扩到 13B(效果提升有限),不如把预算花在:1)购买/清洗高质量数据;2)设计更好的数据配比;3)做多轮实验验证不同数据策略。数据工程的投资回报率通常更高。
- "数据工程和模型架构改进,哪个优先级更高?"
- 答:取决于当前瓶颈。如果模型在干净数据上 still underfitting(训练 loss 还在降),说明模型容量是瓶颈,应该改进架构/扩参数;如果模型在训练集上表现好、测试集差(overfitting),说明数据是瓶颈,应该做数据工程。通常先确认数据质量,再谈架构——因为脏数据会让架构改进的效果被噪声淹没。
- "LLaMA 和 GPT-3 的参数规模差不多,为什么 LLaMA 效果更好?"
- 答:核心差异在数据工程。LLaMA 团队做了更严格的数据清洗、去重、配比优化,用更多 tokens(1.4T vs 300B)训练更小模型。这验证了"数据质量 + 数据量 > 单纯扩参数"的假设。也是"先做数据工程"理念的最佳实践案例。