Skip to content

大模型微调

英文:Fine-tuning 中文:大模型微调

大模型的构建其实分为 2 个阶段:

  1. 预训练(pre-training):此阶段模型会在 大规模、多样化的数据集 上进行训练,从而形成全面的语言理解能力。
  2. 微调(fine-tuning):在规模较小的 特定任务或特定领域数据集 上对模型进行 针对性的训练
image-20250604144822013

微调提示词工程RAG 之间的区别:

项目微调(Fine-tuning)提示词工程(Prompt Engineering)RAG(检索增强生成)
定义基于已有模型,用新数据“训练”一遍以适应特定任务通过设计更优提示词,提高模型表现在生成前引入“外部知识”作为上下文供模型参考
是否改动模型参数✅ 会,训练会更新模型权重❌ 不会,只用原始模型❌ 不会,主要改进数据流
适用场景高精度、专属领域(如医疗、法律)通用模型适配多任务、快速试验数据频繁更新、文档 QA、知识密集型任务
依赖外部数据源需要少量高质量训练数据可选,通常仅靠提示必须,需要知识库或文档
部署复杂度较高,需要训练和模型部署最低,只依赖提示词中等,需接入检索系统(如向量库)

大模型微调分类#

可以从不同的维度分类:

  1. 技术维度
  2. 任务维度

技术维度#

  1. 全量微调(Full Fine-tuning)
  2. 参数高效微调(PEFT,Parameter-Efficient Fine-tuning)

全量微调

对模型的 所有参数 进行更新,而不是只更新其中的一小部分。

全量微调的特点如下:

方面内容
所需数据几万到几百万条的任务数据,且更专注(例如医学),并且是高质量的数据
参数更新模型所有参数(数十亿)都更新
显存要求高(通常 40GB+,分布式训练)
收敛速度慢(通常需要数天训练)

🤔全量微调是否就和预训练相同?

不一样

维度预训练全量微调
数据万亿 token、网络通用语料(Wikipedia、书籍、网页)小规模任务数据(几万 ~ 几百万条),且更专注(如医学)
目标让模型“学会语言”本身(通用语言知识)让模型“适配任务”或“专精领域”
耗时数周到数月通常几小时到几天
模型规模从 0 开始构建参数以已有模型为初始参数进行继续优化

参数高效微调

指的是只训练少量参数添加轻量模块

常见参数高效微调方法:

  1. LoRA(Low-Rank Adaptation):插入低秩矩阵来替代直接更新大模型参数
  2. Prefix Tuning:为每个输入添加一小段可训练的“前缀”向量
  3. Adapter Tuning:在 Transformer 层之间插入小模块
  4. QLoRA:LoRA + 量化(Quantization)

以 LoRA 这种参数高效微调为例,和全量微调做一个对比:

对比项全量微调LoRA 微调
训练参数量所有参数(数十亿)百万级(几乎只改插入模块)
训练显存极高中低(8~24G 可跑)
通用性全面改造仅适用于因任务略微变化
训练速度快得多
适合初学者(难度高)简单易用

任务维度#

  1. 指令微调(Instruction Fine-tuning)
  2. 分类任务微调(Classification Fine-tuning)

两者的区别主要是在 输出方面

指令微调

生成完整自然语言回答,开放式文本

{
"instruction": "请判断患者是否存在糖尿病风险,并说明依据。",
"input": "患者男,45岁,BMI指数29,空腹血糖6.8 mmol/L。",
"output": "患者可能存在糖尿病前期的风险,建议进一步做 OGTT 检查。"
}

指令微调就像是你教模型做开放性问答题或写作题。

分类任务微调

一般输出标签、数字、选项,结构化值

{
"text": "患者男,45岁,BMI指数29,空腹血糖6.8 mmol/L。",
"label": "糖尿病前期"
}

分类任务微调则是像你教学生做选择题或判断题。


-EOF-