想让模型学习某个领域或行业的知识,是应该预训练还是应该微调
P1 · llm_training
📊 考点:pretraining
🏷 标签:finetuning, domain-adaptation, llm
1️⃣ 考察意图
面试官想看你是否理解“知识注入”的本质区别,而非简单背概念。这道题考察的是工程决策能力:在资源、数据、效果三者约束下,选择最优策略。刁钻点在于,很多人误以为“微调就能学新知识”,实际上微调主要调整输出格式和偏好,对事实性知识的注入能力极弱。答好了能展示你对 LLM 训练全流程(预训练、持续预训练、SFT、RLHF)的认知深度,以及处理灾难性遗忘、数据配比等实战问题的经验。
2️⃣ 标准答
核心结论:预训练学知识,微调学格式。具体选择取决于三个维度:知识容量需求、数据规模、计算预算。
1. 知识容量需求:区分“事实性知识”与“行为偏好”
- 事实性知识(如“2024年诺贝尔物理学奖得主是谁”)必须通过预训练注入。因为预训练阶段模型通过 next token prediction 学习语料中的统计规律,将事实编码进参数。微调(SFT)本质是调整输出分布,对低频事实的注入效率极低——实验表明,SFT 需要重复数百次才能让模型记住一个事实,且容易过拟合。
- 行为偏好(如“用简洁风格回答”)适合微调。LoRA 等 PEFT 方法只需调整 0.1%-1% 的参数,就能改变输出格式,成本低且不破坏预训练知识。
2. 数据规模:决定是否值得做增量预训练
- 领域语料 >10B tokens:值得做增量预训练(Domain-Adaptive Pretraining, DAPT)。例如 BloombergGPT 用 363B tokens 金融语料从头预训练,但多数团队用更经济的持续预训练(Continue Pretraining)。关键 trade-off:预训练数据配比中,领域数据占比通常 30%-70%,其余保留通用语料(如 C4、Pile)以防止灾难性遗忘。
- 领域语料 <1B tokens:微调更实际。此时预训练收益递减,且容易过拟合。一个坑:直接用少量领域数据做全量微调,会导致模型在通用任务上性能暴跌(如 MMLU 下降 5-10 个点)。解法:混合 10%-20% 通用数据,或用 LoRA 限制参数更新范围。
3. 计算资源:预训练 vs 微调的成本差距
- 预训练:以 7B 模型为例,在 8×A100 上训练 100B tokens 约需 2-3 周,成本约 $50k-$100k(按云 GPU 计费)。且需要分布式训练、数据并行、梯度检查点等工程能力。
- 微调:LoRA 微调 7B 模型,在 1×A100 上 1-2 天即可完成,成本 <$500。但注意:LoRA 的秩(rank)选择很关键——rank=8 适合行为调整,rank=64 才能注入少量事实,但会增大过拟合风险。
4. 实际落地的坑与解法
- 坑 1:增量预训练后微调,通用能力下降。例如在医疗领域用 50B tokens 增量预训练后,模型在 GSM8K 上从 70% 降到 55%。解法:在增量预训练阶段,按 7:3 混合领域和通用数据;微调阶段,用 LoRA 而非全量微调,并保留 20% 通用指令数据。
- 坑 2:微调后模型“幻觉”更严重。因为微调让模型更倾向于输出训练集中的高频模式,即使事实错误。解法:微调时加入负样本(如错误事实+正确事实的对比),或使用 RLHF 中的 KL 散度约束。
- 坑 3:领域知识更新频繁。预训练模型有知识截止日期,微调无法注入新知识。解法:结合 RAG(检索增强生成),用向量数据库存储最新知识,微调只负责优化检索后的回答格式。
5. 实践建议:先微调,再增量预训练
- Step 1:用 LoRA 微调 1-2 轮,评估领域任务指标(如 F1、BLEU)。如果效果不足,说明模型缺乏领域知识。
- Step 2:做增量预训练,用 10B-50B tokens 领域语料,混合通用数据。训练后评估通用基准(如 MMLU、HellaSwag),确保下降 <3%。
- Step 3:在增量预训练模型上再次微调,调整输出格式。最终效果通常比仅微调提升 10-20%(如法律问答任务)。
3️⃣ 答题模板(30 秒电梯版)
“这个问题我从知识类型、数据规模、计算成本三个层面回答。第一,事实性知识必须通过预训练注入,行为偏好用微调;第二,领域语料超过 10B tokens 才值得做增量预训练,否则微调更经济;第三,预训练成本是微调的 100 倍以上,但能带来 10-20% 的效果提升。总结一句:先微调验证需求,再增量预训练注入知识,最后用 LoRA 微调优化格式,同时用 RAG 处理知识更新。”
4️⃣ 高频追问 & 应对
追问 1:增量预训练时,领域数据和通用数据的配比怎么定?有没有经验值?
经验配比是 7:3(领域:通用),但需要动态调整。如果领域数据质量高(如 PubMed 论文),可以提高到 8:2;如果领域数据噪声大(如社交媒体评论),降到 5:5。关键指标是监控通用基准(如 MMLU)的下降幅度——每下降 1%,就增加 10% 通用数据比例。另一个技巧:使用课程学习(Curriculum Learning),先训练通用数据 10% 步数,再逐步增加领域数据比例。
追问 2:如果只有 100M tokens 的领域数据,怎么让模型学到知识?
100M tokens 不足以做增量预训练,但可以用数据增强和检索增强。数据增强:用 GPT-4 生成领域问答对(10 万条),做 SFT;同时用领域文档构建向量数据库,在推理时检索相关段落。另一个方法:用 LoRA 微调时,将领域数据重复 3-5 轮,但每轮混入 20% 通用数据防止过拟合。实测在金融领域,这种方法能让 F1 从 60% 提升到 75%,但再高就遇到瓶颈。
追问 3:微调后模型在通用任务上掉点,怎么量化这个损失?有没有办法完全避免?
量化方法:在微调前后,跑 MMLU(5-shot)、HellaSwag(10-shot)、GSM8K(8-shot)三个基准,计算平均下降率。完全避免不可能,因为微调本质是改变模型分布。但可以缓解:① 用 LoRA 而非全量微调,参数更新量 <1%,掉点通常 <2%;② 微调数据中混入 10-20% 通用指令数据;③ 使用 EWC(弹性权重巩固)损失,对重要参数施加惩罚。实际工程中,接受 1-3% 的掉点,换取领域任务 10-20% 的提升,是合理的 trade-off。
5️⃣ 避坑 · 常见错误答法
- ❌ “微调就能让模型学会新知识,因为模型会调整权重记住新数据。” → ✅ “微调主要调整输出分布,对低频事实的注入效率极低。事实性知识必须通过预训练阶段的 next token prediction 学习,微调更适合调整格式和偏好。”
- ❌ “预训练成本太高,所以永远选微调。” → ✅ “如果领域知识是核心壁垒(如医疗诊断、法律判例),增量预训练带来的 10-20% 效果提升值得投入成本。先评估数据规模和业务价值,再决策。”
- ❌ “增量预训练时,只用领域数据训练,效果最好。” → ✅ “只用领域数据会导致灾难性遗忘,通用任务性能下降 5-10%。必须混合 30%-50% 通用数据,或使用 EWC 等正则化方法。”
6️⃣ 简历呼应
- 如果你有 RAG 项目:从“知识更新频率”切入,说明微调无法处理动态知识,RAG 是更经济的方案。强调你在项目中用向量数据库+微调组合,解决了领域知识注入和实时更新的矛盾。
- 如果你只做过传统 NLP:用“特征工程”类比——预训练相当于构建领域词向量,微调相当于在词向量上训练分类器。强调你理解数据规模对模型容量的影响,以及如何用 LoRA 在资源受限时做迁移学习。
- 如果你是校招无项目:聚焦论文复现——提到 DAPT(Domain-Adaptive Pretraining)论文中,在生物医学领域用 2B tokens 增量预训练后,BioBERT 在 NER 任务上提升 5%。强调你理解数据配比和灾难性遗忘的 trade-off。
7️⃣ 延伸阅读
- 《Don't Stop Pretraining: Adapt Language Models to Domains and Tasks》(DAPT 论文)
- 《LoRA: Low-Rank Adaptation of Large Language Models》
- 《BloombergGPT: A Large Language Model for Finance》
- 《Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks》(RAG 论文)
- 《Scaling Laws for Neural Language Models》(预训练数据规模与效果关系)