祝你好运的技术博客

Published on

什么是大模型微调

Authors
  • avatar
    Name
    祝你好运
    Twitter

什么是大模型微调,大模型微调的原理是什么,大模型微调的步骤是什么,大模型微调的工具是什么,大模型微调的案例是什么,大模型微调的优缺点是什么。

什么是大模型微调

大模型微调是指在预训练大模型的基础上,通过在特定任务上进行有监督的训练,使得模型能够更好地适应特定任务的微调。用一句更好理解的话描述就是:给一个通用性的员工培训(少量培训,不是从头到尾的培训),让员工能够更好地适应特定任务(注意是特定任务)。

举例说明

约束输出格式

比如我的输入都是跟病假有关系的,我期望全部是以下格式的输出:

{
  "intent": "sick_leave",
  "country_code": "CN"
}

Prompt 已经写得很长,想要告诉大模型,按照这种格式回答,但模型仍然偶尔:

  • 多输出解释
  • 字段名称写错
  • 枚举值不稳定
  • JSON 格式不合法

这时可以通过大量正确样例微调,让模型更习惯这种输出格式。微调之后,模型就会按照这种格式回答。

节省输入prompt的长度

某个任务重复量非常大,而且规则难以用代码写清楚

例如每天处理几十万条客服消息,需要分类为:

  • 退款问题
  • 物流问题
  • 账号问题
  • 欺诈风险
  • 商品质量
  • 其他

你可以每次都写一个复杂 Prompt,但如果任务非常固定、样本很多,微调后可能:

  • Prompt 更短
  • 分类更稳定
  • 调用成本更低
  • 延迟更低
  • 小模型也能达到不错效果

这种属于典型的任务型微调。

大模型微调的原理

项目预训练微调
起始模型随机参数或早期模型已训练好的基础模型
目标学习通用语言能力适配特定任务或行为
数据量极大较小
数据形式大量原始文本输入—理想输出样本
更新参数通常全参数全参数或 LoRA
学习率相对更大、调度复杂通常更小
训练时间很长相对较短
Loss常见为全 Token 预测常只训练回答部分
风险训练失败、能力不足过拟合、遗忘、风格偏移

微调有哪些主要方式

这里只说下面常见的3中,其中最常用的是SFT。

1. SFT:监督微调

Supervised Fine-tuning。

数据形式:

输入 → 标准答案

例如:

{
  "messages": [
    {
      "role": "user",
      "content": "将用户的问题分类为病假、年假或福利"
    },
    {
      "role": "assistant",
      "content": "{\"intent\":\"sick_leave\"}"
    }
  ]
}

这是最常见、最容易理解的微调。

2. Preference Fine-tuning

数据不是只有一个答案,而是:

输入 + 更好的答案 + 较差的答案

例如:

问题:员工可以休多少天病假?

答案 A:你可以休10天。
答案 B:病假政策取决于国家,请先提供所在国家。

Preferred:B

模型学习人类更偏好哪种答案。

目前一些平台把 DPO 作为独立的微调方式;OpenAI 的 Fine-tuning API 当前列出的方式包括 supervised、DPO 和 reinforcement。

3. Reinforcement Fine-tuning

不是直接提供固定标准答案,而是提供评分器:

模型生成答案
Grader 评分
根据奖励优化模型

适合:

  • 有明确评分标准;
  • 答案不唯一;
  • 可以自动判断质量;
  • 推理或决策型任务。

训练参数的选取

我们知道大模型训练其实就是调参的过程,那微调也是调参数,但具体调哪些参数还是有不同做法的,一般我们会遇到下面3种:

  • Full Fine-tuning
  • LoRA
  • QLoRA

Full Fine-tuning

更新模型全部参数。

特点:

  • 显存和计算量大;
  • checkpoint 体积大;
  • 对资源要求高;
  • 可以实现较大程度的模型改变。

LoRA

不直接更新全部原始权重,而是在部分线性层旁边增加低秩矩阵:

原始权重 W
+
低秩更新 ΔW = A × B

训练时主要更新 A 和 B。

优势:

  • 训练参数少;
  • 显存需求低;
  • 训练更快;
  • Adapter 文件较小;
  • 可以为同一个基础模型保存多个 LoRA。

Google 的 Gemma 文档把 LoRA 列为参数高效微调方法,并指出它通过只更新部分参数降低计算和内存要求。

QLoRA

可以简单解释为:

先把基础模型量化,再在量化模型上训练 LoRA Adapter。

优势是进一步减少显存使用。

博客不必推导矩阵公式,但应该说明:

Full Fine-tuning:改整个模型 LoRA:训练少量附加参数 QLoRA:量化基础模型 + LoRA

怎么做微调?