垂直领域大模型微调实践经验总结
本篇从基座模型选择、模型整体架构、数据设计、训练微调四个角度总结垂直领域大模型微调经验。大部分经验经过实测可推广,大家在自己实践过程中可以进行适当参考。
一、基座模型选择
1. 医学类大模型微调怎么选择大模型
推荐 BLOOMZ 模型。BLOOMZ 模型系列使用了 PILE 语料库进行训练,该语料库包含各种医学文本,包括 PubMed Central 和 PubMed Abstracts 等。BLOOMZ 模型的医学知识体系比较丰富,适合作为医疗垂类模型的基座。
二、模型整体架构
- 不要指望单个垂直领域的 LLM 满足所有需求:合理的做法可能是实时更新的知识库 + 微调的医疗 LLM。例如 ChatLaw 等系统采用了检索增强生成(RAG)结合微调的策略,以解决模型幻觉和知识时效性问题。
- 超大参数模型的优势:超大参数模型 (至少百亿) 即使被量化其能力依然能保持的较好。在资源受限场景下,量化技术可以在几乎不损失性能的前提下显著降低显存占用。
三、数据设计
- 数据质量 > 数量:在 LLM 时代,需要牢记这一真理。超大规模的 SFT 数据会让下游任务 LLM 减弱或者失去 ICL(上下文学习)、CoT(思维链)等能力。高质量的小样本往往优于低质量的庞大数据集。
- 防止灾难性遗忘:在算力充足情况下推荐使用医疗数据和通用语料数据进行混合训练。这样模型既可以有医学上的训练学习,也可以保持通用能力(如指令遵循),避免模型变成只会回答医学问题但无法理解普通指令的'偏科'模型。
- 二次预训练的数据配比:大量数据进行二次预训练需要配比各类型其他数据:
- 语言模型训练完成后,参数各个区域负责部分已经确定,如果大量增加某类在预训练时没有的知识,会造成参数的大幅度变化,造成整个语言模型能力损失。
- 进行大规模数据的二次预训练,建议添加 5-10 倍原始预训练中的数据,并打混后一起训练,以保持基础语言能力的稳定性。
- 严格控制噪音:
- 预训练数据中如果出现少量连续的噪音数据,比如连续重复单词、非单词序列等,都可能造成特定维度的调整,从而使得模型整体 PPL(困惑度)大幅度波动。
- 有监督微调指令中如果有大量与原有大语言模型不匹配的指令片段,也可能造成模型调整特定维度,从而使得模型整体性能大幅度下降。
- 混合多种能力数据微调:大模型混合多种能力数据微调时呈现高资源冲突,低资源增益。所以混合不同数据进行微调需要一定的工程技巧,核心策略是:低资源但高质量,并结合不同领域需求进行配比。
- 静态数据集的训练策略:对于静态数据集,在多轮训练中多次迭代可能效果不佳,会导致过拟合,使训练结果恶化。若想让 LLM 强化成「全能选手」,在所有基线任务中都表现优异是不可能完成的。想要解决这个问题需要多样化的数据源,或者使用 LoRA 以外的技术。
四、训练微调
- 全流程训练环节:全流程的 LLM 训练包括:预训练、监督微调、奖励模型、强化学习。多数情况下监督微调即可满足自身需求,无需每次都跑完 RLHF 全流程。
- 垂类模型训练重点:对于垂类模型,更应该关注 PT(预训练)的过程,而不是采集千万百万的 SFT 数据做训练。一般建议是 大规模预训练 + 小规模监督微调 = 超强的 LLM 模型。
- 指令微调轮次控制:
- 针对少量数据进行多个 epoch 的训练,可能会造成语言关键区域变化,从而导致整个模型失效。
- 为了特定任务提升的指令微调,为了保证模型语言能力关键区不被大幅度调整,需要添加通用指令微调数据或者预训练数据。
- LoRA 与 Full-tuning 对比:通常来说,使用 LoRA 的效果不如 full-tuning(如 LoRA results in 4-6% lower performance compared to full fine-tuning)。但在显存受限场景下,LoRA 是更优解。
- 参数量与微调方法选择:7B 系列模型请优先采用全参数微调方式(条件不满足就 P-tuning,动的参数越多效果通常会更好)。,以平衡性能与成本。


