简单学习 --> 模型微调

模型微调

主流微调方案

SFT (Supervised Fine-Tuning) - 有监督微调

DPO (Direct Preference Optimization) - 直接偏好优化

PPO (Proximal Policy Optimization) - 近端策略优化

OPO (通常指 ORPO)Odds Ratio Preference Optimization) SFT 和 DPO 二合一

(还在未来,原理就是模型在进行有监督微调的同时,学会分辨好坏,让模型回答更符合人类喜好、更安全、更自然、少幻觉)

SFT (Supervised Fine-Tuning) - 有监督微调

就是在预训练大模型(如 LLaMA、GPT)基础上,用高质量人工标注的数据 ,再做一轮有监督训练,让模型学会按指令办事、输出更规范 / 更专业 / 更符合人类预期的答案。

大模型的进化阶段主要分3个 :

  1. Pre-train 预训练 大模型通过海量数据学习到各种知识,目标是学会语言规律、知识、语法、常识。

    复制代码
    像读遍全网书籍的学霸:知识全懂、语法全会,但不会审题、不会按要求答题,用自己学习到的东西回答。
  2. SFT (Supervised Fine-Tuning) 有监督微调 在预训练模型基础上,用人工标注指令问答数据做有监督训练,目标是让大模型学会遵循指令、按格式输出、对齐任务.

复制代码
像一个学生,从课本上学到海量知识,但是不会答题写卷子
但是 老师给题库 + 标准答案刷题:学生就学会看懂问题、按要求作答,能正常聊天、写代码、做任务,但语气生硬、不够贴心。

3. RLHF (Reinforcement Learning from Human Feedback) 基于人类反馈的强化学习

在 SFT 模型后,用人类打分偏好数据 ,通过强化学习 优化,目标是让回答更符合人类喜好、更安全、更自然、少幻觉

复制代码
人给模型回答打分、排好坏,用强化学习让模型学会说人话、更贴心、守规矩。
PPO 近端策略优化

PPO 是传统 RLHF:打分 + 强化学习调教

强化学习让模型(Actor)不断生成回答,用奖励模型(RM)打分,再用Critic 评估价值;

PPO 核心是限制每次更新幅度(clip)+ 用 KL 散度防止学歪 / 忘本,在稳定训练的同时,让模型朝高分方向优化。

复制代码
先有一个 ** 阅卷老师 (RM)** 给所有答案打分,
再不断纠正你:往高分写法学,不许偏离太多。
DPO 直接偏好优化

DPO 是简化版 PPO:不用单独训练奖励模型,直接一步对齐

DPO不需要单独的奖励模块,直接就用人类偏好数据(好回答,坏回答)训练,跳过中间打分环节,直接让模型选好的,避开坏的

复制代码
不用专门阅卷老师,直接给你好答案、坏答案两两对比,
让你自己学会:以后就按好的那种风格写,自动避开坏的。
DPO 和 RLHF 的区别

一句话概括 : DPO 是简化版的 RLHF

复制代码
RLHF:Reinforcement Learning from Human Feedback
人类反馈强化学习(传统三阶段)
​
DPO:Direct Preference Optimization
直接偏好优化(RLHF 简化平替版)

都是用人类偏好数据(两个回答,哪个更好 A>B),让大模型:更符合人类喜好、更少废话、更少幻觉、更安全。

  • RLHF

    先雇一个专业评委(RM 模型)给答案打分,再让模型反复刷题冲分(PPO),流程繁琐、容易练废。

  • DPO

    不用单独评委,直接把「哪个回答好、哪个差」写成数学约束,直接教模型学好避坏,简单省事、效果差不多。

复制代码
大白话理解 PPO
普通强化学习:
每次更新模型步子迈太大,一改参数,模型直接崩、输出乱套。
PPO 做了一件核心事:
限制模型每一次更新的幅度,不许跟旧模型差太远
SFT 和 DPO的区别

SFT有监督微调 :教模型 「标准答案长什么样」

复制代码
SFT让大模型知道问题该怎么做,怎么解决,只会模仿固定写法,不会判断好坏,没有"人情味"

DPO直接偏好优化:教模型 「哪个回答更好、哪个更烂」

复制代码
在SFT基础上:更自然、更得体、会拒绝违规问题、更少废话、更少幻觉、更贴合人类口味
​
就像一个厨师,SFT让大模型知道怎么做菜,DPO让大模型知道怎么做才更好,更符合人类喜欢

主流微调工具

LLaMA Factory(最火、中文友好)
  • 支持:SFT、DPO、RLHF(PPO) 全流程;LoRA/QLoRA/ 全参数;100 + 模型(Llama/Qwen/GLM)

  • 特点:零代码 / 低代码,WebUI + 命令行,单卡就能跑

  • 适合:个人 / 中小企业、快速验证、DPO/RLHF 对齐

Axolotl(社区强、易配置)
  • 支持:LoRA/QLoRA、全参数、SFT/DPO;主流 Llama 系模型

  • 特点:配置文件驱动,一行命令启动,社区成熟

  • 适合:熟悉 Hugging Face、需要灵活配置的开发者

Unsloth(最快、显存最小)
  • 特点:比普通 LoRA 快 2--3 倍,4bit QLoRA,单卡 4090 可训 7B 模型

  • 适合:资源有限、追求速度、个人 / 小团队

DeepSpeed(微软、超大模型)
  • 特点:ZeRO 优化、分布式训练,支持千亿级模型,显存优化极强

  • 适合:企业级、大模型(70B+)、多机多卡训练

SFT数据处理

模型微调有一句名言 : 模型微调的效果,70% 取决于数据质量,30% 取决于算法和参数。

在进行模型微调之前,需要有数据,那么数据要存成什么格式,就有了下面两个主流数据格式 .

两大主流数据格式:Alpaca 和 ShareGPT

Alpaca 格式 (单轮指令微调的标准)

最适合**"一问一答"**的任务,如逻辑推理、文本分类、翻译。

复制代码
格式: 一问一答
{
  "instruction": "用户指令/问题",
  "input": "补充上下文(可选)",
  "output": "模型标准回答"
}
​
例如: 
 {
    "instruction": "解释什么是LoRA",
    "input": "",
    "output": "LoRA是低秩适配,一种轻量化微调方案,只训练少量参数,节省显存。"
}
​
​
  {
    "instruction": "请总结下面这段话",
    "input": "大模型训练分为预训练、SFT有监督微调、RLHF人类反馈强化学习三个阶段。",
    "output": "大模型训练主要包含预训练、SFT微调、RLHF对齐三个环节。"
  }
​
ShareGPT 格式 (多轮对话微调的标准)

多轮人机对话标准格式,用来做多轮上下文对话微调,LLaMA-Factory、所有大模型微调框架都原生支持。

专门解决:一轮聊完接着聊、有上下文记忆 的场景。

复制代码
格式: 多轮问答
[
  {
    "conversations": [
      {
        "from": "human",
        "value": "什么是SFT?"
      },
      {
        "from": "gpt",
        "value": "SFT是有监督微调,让大模型学会遵循人类指令。"
      },
      {
        "from": "human",
        "value": "那和DPO有什么区别?"
      },
      {
        "from": "gpt",
        "value": "SFT学标准答案,DPO学好坏偏好;SFT是单标答,DPO是成对对比。"
      }
    ]
  }
]

现在主流的是 ShareGPT , 因为即使是 单轮指令一问一答,也可以转成ShareGPT的格式 , 这样

数据清洗

网上爬下来的数据或者开源数据集,通常充满杂志,脏数据会让模型学废话、学病句、学错误逻辑、重复话术、幻觉变重。

数据清洗目的:去掉重复、错误、噪声,避免模型学坏

去重: 防止模型学到太多系统知识,导致过拟合,泛化能力下降

  • 精确去重:删完全相同的样本。

  • 模糊/语义去重**(MinHash + LSH)**:用句向量聚类,合并意思一致的(如 "查物流"≈"怎么看物流")。

去噪 :去掉一些错误的内容 和 "拒绝回答"

  • 去掉乱码 + 去掉广告 + 去掉错误 + 去掉拒绝话术

  • 去掉拒绝话术: 绝大多数开源 SFT 数据集都是用 GPT批量生成,里面有一堆的[AI 免责声明]

复制代码
「AI 免责声明 / 拒绝话术过滤」
属于低质 + 有害数据清洗的,例如 : 
As an AI language model, I can't...
我是AI助手,无法为你提供...
抱歉,我不能...
这个问题我无法回答
很抱歉,我无法帮你
作为人工智能,我不能...
​
这些句子对我们自己训练模型毫无用处,甚至剧毒。

脱敏:去除敏感信息

  • 手机号、身份证、姓名等隐私信息替换或删除。

过滤 : 低质文本过滤(剔除病句、流水账、废话)

  • 过滤掉含有暴力、色情、广告

微调要多少数据合适

数量 < 质量

首先 数据的质量 要大于 数据的数量 : (LIMA论文证明)只用 1000 条人工精修对话 做 SFT,效果追平 / 超过用 5 万条爬虫 + GPT 生成的低质数据 微调的模型。

配比策略(防止灾难性遗忘)

不能只喂垂直数据,会 "变傻" , 比如一直给大模型喂某个领域的知识数据,模型可能会变傻,他的一些通用能力会下降

  • 70%~80% 垂直领域数据

    (如医疗、法律、客服、编程)

    • 决定模型专业能力
  • 10%~20% 通用能力数据

    (日常闲聊、写作、常识、简单推理)

    • 防止 "灾难性遗忘",保住基础智商
  • 5%~10% 自我认知数据

    • 格式:

      • Q:你是谁?

      • A:我是 XX 医疗助手,由 XX 团队开发,专注医疗问诊。

    • 防止模型说 "我是 ChatGPT / 我是 AI 语言模型"

Lora进行高效SFT

全量微调 Full Fine-Tuning

全量微调需要更新模型里的 每一个参数 ,把大模型里所有参数、所有权重全部拆开重新训练更新

  • 成本极高 : 需要大量的显存才能做到

  • 灾难性遗忘 : 如果sft数据少了,直接过拟合(被新知识过渡洗脑了) + 灾难性遗忘(把旧知识忘了),越训越废。

LoRA 低秩适配

不改动原始大模型权重,只额外训练两个很小的低秩矩阵,用极小参数量实现大模型微调。

复制代码
大白话比喻
大模型:一本不能改的精装原版大字典
全量微调:把整本字典重新改写,代价超大、耗显存、耗算力
LoRA:不碰原字典,只附一张小小的备注纸条
训练只练这张纸条,推理时把纸条效果叠加到原模型上。

把模型微调比做是房子美化 ,那么全量微调是把房子全拆了重建, Lora就是给房子加装饰,不改变原有

QLoRA量化低秩适配

QLoRA = 4-bit 量化压缩 + LoRA 低秩微调 ,是 LoRA 的 "极致省钱显存版",让单张 24GB 消费级显卡(如 RTX 4090)就能微调 70B 大模型,效果还接近全量微调

复制代码
大白话比喻
全量微调:把精装大书逐页重写(成本极高)
LoRA:书不动,贴几张备注纸条(省成本,但书还是 16-bit,占显存)
QLoRA:先把书缩成 4-bit 压缩本(占空间极小),再贴备注纸条;读的时候临时解压看,极致省显存,效果不掉线
4-bit NF4 量化
  • 把 16-bit(BF16/FP16)模型权重 → 4-bit NormalFloat(NF4)

  • 显存占用:16-bit → 4-bit,直接降为 1/4

  • 优势:NF4 针对模型权重的正态分布优化,精度损失极小

  • 代价: 精度会有极其微小的损失,但在微调任务中几乎可以忽略不计

LoRA的 核心参数

Rank (r) : LoRA 秩

r 是低秩矩阵的维度,决定 LoRA 学习能力强弱

原理:r 越大,可拟合的知识、风格越多;r 越小,参数量越少、越不容易过拟合

调参规律

  • 小场景(只改语气、人设):r=4、8

  • 常规领域 SFT(客服、日常、行业问答):r=16

  • 复杂领域(代码、医疗、专业推理):r=32、64

复制代码
影子比喻 : 用低维还原高维
把模型比做成一个 复杂的三维物体(比如一只手) , 这只手是预训练后学习到的一个庞大知识库
​
1.全量微调 : 相当于把这只手每个细胞,每个纹路都改一遍,工作量非常大
​
2.LoRa(秩为r) : 相当于我们不改变手的本身,而是给手大一束光,投下一个影子
    -秩r  就是这个影子的复杂度
    -如果r=1 , 影子就看是一条直线,分不清楚是手还是棍子 (丢失太多信息了)
    -如果r=8 , 影子能清晰看出手的轮廓,能分辨手的动作是握拳还是比耶
    -如果r=16 , 影子能更加清晰显示出 手指的关节和细微动作
r秩的本质 : 代表了你决定用多小的代价(参数量)去模拟表达内心复杂的“知识更新”
Alpha 缩放因子

lora_alpha 缩放因子 , 决定新学的知识(Lora) 对模型的影响有多大

通常 : Alpha = 2 * rank , 也就是缩放因子 = 2 * 秩

Target Modules 目标模块

决定将 LoRA 层应用到原模型的哪些算子中。

Transformer 结构

  • 主要包含 q_proj, k_proj, v_proj, o_proj (Attention 层)

  • gate_proj, up_proj, down_proj (MLP 层)。

全面微调:为了获得最佳性能,建议覆盖所有的线性层(Linear Layers),而不仅仅是 Attention 层。

显存优化 :如果显存极度紧张,可以只针对 q_projv_proj

Learning Rate 学习率

LoRA 微调中,学习率 (Learning Rate, LR) 是最重要的超参数,没有之一。它决定了模型在训练过程中,根据误差更新权重的"步长"。

QLoRA 推荐学习率值2e-4 (0.0002)。

  • 这比全量微调(通常 1e-5)要大,因为 LoRA 参数少,需要更大的步长,更激进的更新。

Scheduler学习率调度策略 :推荐 cosine (余弦退火) 或 linear(线性衰减)。

  • Linear (线性衰减)

    • 形状:一条笔直的斜线。

    • 逻辑 :每一步减少的幅度是恒定的。它非常"诚实",无论处于训练的哪个阶段,减速的力度都一样。

  • Cosine (余弦退火)

    • 形状:半个余弦波形(S型曲线)。

    • 逻辑

      • 初期:下降非常缓慢,让模型在高学习率区域多停留一会儿,充分探索。

      • 中期:下降速度加快,快速穿过不稳定的区域。

      • 后期:下降再次变慢,进入极其平缓的"微调"状态,在最优解附近反复摩擦。

Warmup(预热) 是深度学习训练初期的一个"热身"阶段。

简单来说,在训练开始的前几百步(或前 5%-10% 的数据),我们不直接使用设定的最高学习率,而是从 0 开始,线性地增加到预热目标值

微调技巧 NEFTune

NEFTune (Noisy Embeddings Fine-Tuning)是一个非常有意思且"暴力美学"的微调技巧。它的核心思路非常简单:在微调过程中,向模型的 Embedding(词嵌入)层注入一些随机噪声

效果:

  • 防止过拟合(Overfitting)

  • 显著提升对话的流畅度和指令遵循能力

核心参数:Noise Alpha

在配置 NEFTune 时,

  • Noise Alpha :决定了噪声的大小 , 通常在 515 之间。

偏好对齐

偏好对齐 (Preference Alignment) 是大模型训练中"从机器变成人"的关键一步。

如果说预训练(Pre-training)是让模型"博览群书",指令微调(SFT)是让模型"学会听令",那么偏好对齐就是给模型装上"价值观"和"情商",让它的输出符合人类的偏好、安全标准和逻辑习惯

复制代码
SFT只是让模型学会怎么说话 , 偏好对齐就是让模型说‘好话’
对齐的核心,不是写更多的标准答案,而是告诉模型:“这个回答比那个更好”。
偏好对齐核心结构:三元组

与 SFT 的"一问一答"不同,偏好数据通常包含三个部分,我们称之为 "三元组"

  1. Prompt (提示词):用户的提问。

  2. Chosen (胜者):人类(或强模型)认为更好的回答。

  3. Rejected (败者):人类认为较差的回答。

为什么必须是"三元组"而不是"问答对"

复制代码
区分度:普通的问答对(SFT 数据)只告诉模型“路怎么走。
而三元组通过 Chosen 和 Rejected 的对比,让模型通过对比,学到什么样的才是好的,什么样的是‘坏的’

数据来源

构建偏好数据比 SFT 数据难得多,SFT只需要问题+答案,而偏好对齐需要问题+两个相反的答案

人工标注 (The Gold Standard)

能拿到质量最高的数据,但是也最贵

流程:

  1. 让模型针对同一个问题生成多个回答

  2. 标注员对回复进行 1-5 分的打分,或者针对"是否有幻觉"、"是否礼貌"进行勾选

  3. 将模型生成的错误回复(Rejected)手动修改为完美回复(Chosen),从而形成高质量的对比对。

LLM-as-a-Judge

由于人工标注又贵又慢,现在主流的做法是用"强模型"带"弱模型"(即 AI 反馈取代人类反馈)。

流程:

  1. Prompt:同一个问题。

  2. 生成:用你的待训练模型(如 LoRA 微调中的模型)生成多个回答。

  3. 评审 :用一个更强大的模型(如 Gemini 1.5 Pro 或 GPT-4o)充当"裁判",让它根据你设定的准则(比如:请选出最适合语音播报、最简洁的答案)选出 ChosenRejected

  4. 构建数据: 根据gemini或gpt的选择构建 对比对

数据剧毒

DPO 算法对数据非常敏感。如果数据里有"毒",模型会学坏。以下是三个最致命的坑。

事实错误

本质是 : 偏好倒置 ,把"差回答"标成了 Chosen,把"好回答"标成了 Rejected

  • 如果给DPO的答案就是错的,例如 : 问题 : 1+1= , 好答案:3 , 坏答案:4

  • 那么这种情况对于DPO来说就是导航指反了方向,走得越快,错得越远

相似度过高

本质是:区分度缺失Rejected 样本太弱时,模型不需要学习任何复杂的逻辑,模型会找到一种"捷径"。

  • 比如Chosen 和 Reject 只差一个字时,那么DPO 算法算出来的 Loss 会非常小,模型学不到东西,甚至梯度消失。

  • 考试全是 1+1,学生学会了偷懒,遇到高考就抓瞎。

隐形偏见

本质是 : 统计性走捷径

  • 比如 :老师喜欢写字多的学生,那么模型会认为 "写的长" == "写的好", 训练出来的模型会变得话多且没用

  • 如果你构造的数据集中,Chosen 总是比 Rejected 长,DPO 训练后的模型会变成一个话痨。它会为了讨好奖励机制,疯狂堆砌废话

DPO的局限

  1. 数据成本高 : 需要高质量的(Chosen , Rejectd)数据。

  2. 容易过拟合 : DPO容易用力过猛,模型为了讨好人类的偏好,容易导致语言能力退化

  3. 流程繁琐 : 需要先做SFT 然后再做DPO, 要训练两次,还要加载Reference Model , 显存和时间消耗高

相关推荐
Muyuan19981 小时前
30.通过Claude code做项目系统测试
运维·服务器·人工智能·fastapi
水云桐程序员1 小时前
C++变量的概念及用法
开发语言·c++
2301_809244531 小时前
C#怎么使用协变和逆变 C#泛型中的in和out关键字协变逆变是什么意思怎么用【语法】
jvm·数据库·python
知识汲取者2 小时前
巨量引擎营销 API 完整文档
开发语言·数据库·python
DevnullCoffe2 小时前
用 MCP 让 AI Agent 直接批量下载亚马逊商品图片——原理、踩坑与实现
爬虫·python·api
Awu12272 小时前
⚡精通 Claude 第 10 课:CLI 完全参考
人工智能·aigc·claude
youmiyoumiyoumi2 小时前
# 微信机器人客服系统搭建:从人工到智能的客服升级
人工智能
Mr数据杨2 小时前
【CanMV K210】通信扩展 WiFi Socket TCP Client 通信
人工智能·硬件开发·canmv k210
dingzd952 小时前
Reddit验证资料测试之后跨境品牌如何提升社区运营可信度
大数据·人工智能·矩阵·新媒体运营·内容营销·跨境