Skip to content

LLM 模型微调 知识点

微调 · 知识点

做 AI 应用需要的微调和基座模型公司做的微调,一般都是什么区别?

名字都叫微调,目标、规模、技术栈、交付完全两档。基座公司训「通用大脑」;应用侧在现成基座上训「岗位技能」。别把自己 LoRA 几千条数据和 DeepSeek 千卡月级混成一件事。

基座模型公司AI 应用侧
代表OpenAI、Google、Meta、阿里、DeepSeek、月之暗面企业 / 团队做垂直产品
目标通用语言能力 — 会聊天、会推理、会代码垂直任务 — 固定格式、领域口径、指令遵循、风格
规模100B+ 参数量级多在 7B–70B 上 LoRA;全参也远小于基座预训练
数据通用语料,万亿 token高质量指令 / 标注,千~百万条 量级
成本千卡 × 月单卡~数卡 × 小时~天;LoRA 消费级卡可摸 7B
技术继续预训练 → 指令微调 → RLHF / PPO / DPO 对齐SFT 为主;LoRA / QLoRA 等 PEFT;很少做继续预训练
交付公开权重或 API私有 adapter、合并权重、内网部署;知识更新仍靠 RAG

基座公司在干什么

  1. 继续预训练(Continue Pre-training) — 在已有权重上再灌海量通用文本,补知识、补能力。
  2. 指令微调(Instruction Tuning) — 教会模型听懂「用户指令 + 助手回复」格式。
  3. 对齐(RLHF / PPO / DPO) — 让人类偏好写进策略:有用、无害、少胡说。

产出是「通才」:什么都能聊一点,但不懂你们公司的发票规则、JSON schema、质检口径。

应用侧在干什么

  1. SFT — 用业务指令–答案对,把输出格式、术语、推理套路对齐到场景。
  2. PEFT(LoRA 等) — 只训旁路矩阵,显存和存储都小,底座冻结,不易把通用能力训没。
  3. 可选 DPO / 偏好对齐 — 在垂直数据上微调「哪种回答更符合业务」,不是从零训奖励模型。

很多场景先 Prompt、再 RAG,微调是「格式 / 风格 / 固定推理链仍不够」才上。知识常更新的事实不要指望微调当知识库。

和预训练的关系

  • 基座公司的「微调」前面还有完整预训练 + 对齐流水线,应用侧通常不接预训练,只在别人训好的 checkpoint 上 SFT / LoRA。
  • 预训练 = 基座、极贵;应用微调 = 垂直数据、数小时到数天。

重点 高效微调的方法

全参微调显存和存储都大,应用侧默认走 PEFT(参数高效微调):冻结底座,只训很少比例参数。下面五种按「可训参数从少到多、工程常用度」记。

方法可训练参数比例核心思想常用场景
Prompt Tuning极低(<0.01%)软提示:冻结整模,只在输入层加一串可训练的软提示向量(不是自然语言词),让模型自适应任务模型很大(>10B)时效果才好;资源极度受限
P-Tuning v1/v2极低(<0.1%~1%)可深度的软提示:Prompt Tuning 升级版,软提示插到每一层输入,不只输入层NLU:分类、阅读理解;中小模型(~10B)也比 Prompt Tuning 稳
Prefix Tuning低(~0.1%~3%)前缀:每层加可训练向量,当虚拟前缀 token;常用 MLP 生成后再冻结NLG:对话、摘要、翻译
LoRA低~中(~1%~10%)低秩更新:冻结 W,用两个小矩阵(降维 A × 升维 B)近似 ΔW,h = Wx + BAx几乎全能,当前最通用;LLM、扩散模型都常用
QLoRA低~中(~1%~10%)量化 LoRA:底座先 4-bit 量化再套 LoRA,显存再砍一截,效果接近全精 LoRA资源紧:单张消费级卡想摸大模型(如 65B 量级)

怎么记、怎么选

  1. 软提示一族 — Prompt 只动输入;P-Tuning / Prefix 深入中间层。Prompt Tuning 对小模型不友好,大模型才香。
  2. LoRA 一族 — 改的是权重旁路,不是提示向量。NLU / NLG 都常用,工程默认先问「能不能上 LoRA」。
  3. QLoRA — 省的是底座显存(4-bit),可训比例仍是 LoRA 那档;不是又发明了一种新更新公式。

重点 LoRA 原理

LoRA = 大模型的低秩适配器。冻结预训练大参数,另加基于低秩分解的小矩阵,适配下游任务。假设微调时权重更新 ΔW 本质低秩,不必动庞大的 W,旁路间接影响即可。

不用 LoRA 会怎样 — 训练集很小(例如子:二三十条)还做全参微调,大模型容易被这几条样本「带偏」——过拟合、原有通用能力伤得重。LoRA 可训参数少、底座冻结,小样本时更稳。

核心公式

text
h = Wx + ΔWx = Wx + BAx
  • W — 预训练权重,W ∈ ℝ^{d×d}冻结,不参与训练。
  • A — 降维矩阵,A ∈ ℝ^{r×d}r ≪ d;高斯初始化 A ~ N(0, σ²)
  • B — 升维矩阵,B ∈ ℝ^{d×r}零初始化 B = 0,训练起步旁路输出为 0,行为等于原模型。
  • ΔW = BA — 用两个小矩阵的积近似权重更新。

前向:x 同时走主路 Wx 和旁路 BAx,再相加得 h

优点

  1. 省参数 / 省存储 — 一份中心底座服务多个下游任务;每任务只存小 adapter(A、B),不必为每个任务复制整模。
  2. 推理无额外开销 — 训完把 BA 并回 W' = W + BA,部署前向与原模型同结构,不因旁路多一截延迟。
  3. 训练相对稳定、效果好 — 底座不动,只动低秩旁路;小数据上比全参少「带偏」风险。

为什么省(和上面三条对应)

  1. 只训 A、B — 可训参数从 量级掉到约 2·d·r;优化器状态、梯度跟着可训参数走,显存大降。
  2. 存盘小 — 多任务 = 1 份底座 + N 份 adapter。
  3. 推理可合并 — 合并后无旁路额外算力。

什么是低秩特性?

把矩阵想成一张大 Excel(比如 1000×1000)。是表里「独立、没法用别的行/列拼出来」的最少基本信息量。秩越低 → 冗余越高 → 越好压缩。

高秩矩阵 — 行列花样多、没什么套路。要完整描述,得把一百万个数全存下来,压不动。

低秩矩阵 — 行与行高度相关,有明显套路。比如每一行都是第一行的倍数:只存几行「底料」,再组合就能还原整张大表。

思考例子:全球气温不必存「每城每分钟」。纬度、季节等少数核心因子(低维基底),就能估出各地温度——高维表被低维因素撑起来。

和 LoRA 的关系 — LoRA 不说底座 W 本身低秩,而说微调时的更新量 ΔW 往往有低秩特性:任务需要的改动,本质落在少数方向上。所以用 r ≪ dBA 就能近似 ΔW,不必存满 d×d

什么是内在的低秩特性?

上一问讲「低秩是什么」;这一问讲 LoRA 假设落在谁身上——ΔW 内在低秩,不是底座 W。

ΔW 是什么 — 预训练大模型学新任务时,神经元连接权重 W 要微调。这份调整量记作 ΔW(权重更新)。形式上可以是 1000×1000、一百万个数那么大。

为什么说「内在」低秩 — 研究者发现:学一个新任务时,真正有效的改动其实很集中、很简单。矩阵看起来很大,有效信息维数却很低。

数学体现(SVD) — 对真实微调得到的 ΔW 做奇异值分解:奇异值衰减极快,绝大多数接近 0,只有前几个显著偏大。

  • ⇒ 真正有用的更新信息,集中在那几个最大奇异值对应的方向;其余可当冗余丢掉。
  • ⇒ 这就是 LoRA 的核心假设:不必存满 ΔW,用低秩 BA(秩 r 取前几个方向那一档)就够近似。

什么是矩阵分解?

矩阵分解 = 把一个大矩阵写成几个小矩阵的乘积(有时再加对角阵)。目的不是换个写法好看,而是:参数变少、能压缩、能抓住主要方向。LoRA 里的 ΔW ≈ BA,就是一种刻意做成低秩的矩阵分解。

直观例子

要存一个 d×d 的更新矩阵,直接存要 个数。若它近似低秩,可以拆成:

text
ΔW_(d×d)  ≈  B_(d×r)  ×  A_(r×d)
直接存 ΔW分解成 B、A
参数个数d·r + r·d = 2·d·r
例:d=1000, r=81,000,00016,000
含义每一个格子独立存只存「底料」再乘出来

r ≪ d 时,2·d·r 远小于 。这就是「低秩 → 可分解 → 可压缩」串起来的工程含义。

和 SVD 的关系(分析用)

奇异值分解(SVD) 是最经典的一种矩阵分解:

text
M = U Σ Vᵀ
  • U、V — 正交方向(左 / 右奇异向量)
  • Σ — 对角线上的奇异值,从大到小排

奇异值衰减快 ⇒ 只留前 r 个最大的,丢掉后面近 0 的,得到 秩-r 近似

text
M ≈ U_r Σ_r V_rᵀ

上一问「内在低秩」用的就是这套:对微调得到的 ΔW 做 SVD,发现前几个奇异值扛事 → 说明 ΔW 可以被低秩分解很好近似。SVD 是事后分析 / 证明假设的工具,不是训练时每步都去算一遍。

和 LoRA 的关系(训练用)

LoRA 在训练时对 ΔW 做 SVD。它直接把更新参数化成两个可学习小矩阵:

text
ΔW := BA
h = Wx + BAx
SVDLoRA 的 BA
干什么把已有矩阵拆开看、做近似从零学出一对小矩阵当 ΔW
何时算分析、压缩、事后检查微调全程只训 A、B
秩 r截断奇异值个数超参(常见 4 / 8 / 16 / 32)

一句话:矩阵分解是手段;低秩是性质;LoRA 用「可学习的 BA 分解」把 ΔW 训小。

别和推荐系统里的「矩阵分解」搅混

推荐里的 MF(User×Item ≈ P×Q)也是大矩阵拆成两个小的,数学同类。这里讲的是 LLM 权重更新上的分解,不是推荐系统里的协同过滤。

矩阵分解的目标函数

分解不是随便拆,要有目标:找一对(或一组)小矩阵,乘出来尽量贴近原来的大矩阵。误差越小,分解越好。

目标写什么

把大矩阵记作 M(推荐里是评分表;LoRA 语境里想成要近似的 ΔW),拆成 M ≈ BA(也常写成 M ≈ UVᵀ,同一类事):

text
min_{B, A}  ‖ M − BA ‖_F²
  • ‖·‖_F²(Frobenius) — 所有元素误差平方再求和,就是「逐格重建误差」。
  • 约束Bd×rAr×d,秩至多 rr ≪ d)。
  • 常加正则 — 防 B、A 绝对值爆掉:
text
min_{B, A}  ‖ M − BA ‖_F²  +  λ (‖B‖_F² + ‖A‖_F²)

一句话:在秩不超过 r 的前提下,让重建误差最小(可选再压参数范数)。

为什么不能「一次解完」就完事

BA(B, A)双线性:两个一起动时,目标一般非凸。B 固定时对 A 是凸的,A 固定时对 B 是凸的,但两边同时优就麻烦。所以工程上用迭代法,而不是指望一个闭式公式随便写写。

例外:若 M 已知且完整,截断 SVD(Eckart–Young)给出最优秩-r 近似——这是「分析用分解」。缺项很多(推荐评分表)、或要把分解嵌进更大训练回路时,才上下面两套。

工程解法

方法全称怎么做直觉
ALSAlternating Least Squares,交替最小二乘固定 A 解 B,再固定 B 解 A,来回交替每次只动一边,子问题是最小二乘,好解、稳
SGDStochastic Gradient Descent,随机梯度下降对重建误差(+正则)求梯度,按样本/元素随机迈步更新 B、A和深度学习同一套优化语言,大规模、可在线

选法:数据完整、要经典最优近似 → 先想截断 SVD;缺项 / 大规模协同过滤经典套路 → ALS;和神经网络、LoRA 同一套训练栈 → SGD / Adam

和 LoRA 训练目标别混

经典矩阵分解LoRA 微调
优化什么‖M − BA‖_F²(重建 M)任务 loss(交叉熵等)
B、A 角色直接逼近 M参数化 ΔW=BA,间接影响 h=Wx+BAx
优化器ALS 或 SGD几乎总是 Adam 等 SGD 变体

LoRA 没有单独再开一个「重建 ΔW」的 loss;ΔW 在训练前并不作为一张完整表给你。矩阵分解目标函数帮你理解:为什么可以用 BA 表示更新;真正 backward 的仍是业务 loss。

ALS(交替最小二乘法)

ALS = Alternating Least Squares。矩阵分解里两个因子(记 XY,前文的 BA / UV 是同一类)不能一起闭式最优,就一次只动一个:固定另一个,当前这个变成普通最小二乘,好解、稳。两边来回交替,直到收敛。

text
目标仍是:min ‖ M − XY ‖_F²   (可加正则)

三步

  1. Step1 — 固定 Y,优化 X(此时对 X 是线性最小二乘)。
  2. Step2 — 固定 X,优化 Y(同理,对 Y 是最小二乘)。
  3. 重复 Step1、Step2,直到 XY 收敛。

每次固定一个矩阵、优化另一个,都是最小二乘问题。

为什么这样设计

两边一起动ALS 交替
问题性质双线性,整体非凸,难一次解完每次子问题凸(线性最小二乘)
求解不好直接闭式可正规方程 / 现成 LS 求解器
停条件X、Y 变化很小,或重建误差不再降

和 SGD、LoRA 的位置

  • ALS — 经典协同过滤 / 完整或半完整矩阵分解常用;一轮更新一整块因子,不是按样本一点点迈。
  • SGD — 按样本/元素随机梯度;深度学习和 LoRA 训练栈默认这条。
  • LoRA — 一般不用 ALS 去解 BAAB 跟着任务 loss 用 Adam 等更新。ALS 用来讲清「矩阵分解目标怎么工程求解」,不是微调 LLM 时解 BA 的默认算法。

奇异值分解 SVD

SVD = Singular Value Decomposition。任意实矩阵都能拆成「方向 × 强度 × 方向」三块,用来看主方向、做压缩、做最优低秩近似。前文「内在低秩」就是:对 ΔW 做 SVD,看奇异值掉得有多快。

公式

对矩阵 M ∈ ℝ^{m×n}

text
M = U Σ Vᵀ
符号形状(直觉)含义
U左奇异向量(列正交)输出侧的一组正交「基底方向」
Σ对角(或矩形对角)对角元是奇异值 σ₁ ≥ σ₂ ≥ … ≥ 0,表示每个方向有多「重要」
V右奇异向量(列正交)输入侧的一组正交基底;公式里用 Vᵀ

奇异值从大到小排:越大 = 那一维贡献越大;接近 0 = 冗余,可丢。

截断 SVD = 最优秩-r 近似

只留前 r 个最大奇异值及对应向量:

text
M ≈ M_r = U_r Σ_r V_rᵀ

Eckart–Young 定理:在 Frobenius 范数下,M_r 是所有秩 ≤ r 矩阵里逼近 M最优解。重建误差由被丢掉的奇异值决定——后面那些近 0,截断几乎不亏。

这就是「低秩特性」的计算版:奇异值衰减快 ⇒ 很小的 r 就能还原大部分 M

和 ALS、LoRA 怎么摆

SVDALSLoRA
输入一张已知、完整MM 可缺项;迭代求因子没有现成 ΔW 表
产出U,Σ,V;可截断得最优低秩近似迭代得到 X,Y可学习的 A,BΔW:=BA
角色分析 / 证明假设 / 压缩经典 MF 工程求解微调时的参数化

关系可以这样串:

  1. 全参微调得到 ΔW → 对它做 SVD → 奇异值骤降 → 说明 ΔW 内在低秩
  2. LoRA 据此假设,直接用小秩 BA 去学更新,训练时不算 SVD
  3. M 完整要最优低秩近似 → 截断 SVD;缺项协同过滤 → ALS;嵌进神经网络 → SGD。

重点 微调显存怎么估?

总显存 ≈ 四块相加,先拆再估算量级。

text
总显存 ≈ 模型权重 + 优化器状态 + 梯度 + 前向激活
算什么估算
模型权重底座加载FP16/BF16:B × 2 字节;7B ≈ 14G
优化器状态AdamW 的 m、v全参 ~8 字节/参数;LoRA:L × 4 × 2
梯度反向缓存可训参数 FP16:L × 2 字节
前向激活中间激活跟 batch、seq_len 走;粗估权重的 20%~50%

LoRA / QLoRA:2、3 只看旁路参数量 L;QLoRA 把权重块换成 4-bit 底座。激活难精算,batch 或 seq_len 一加就涨。

微调 7B 要多少显存?

LoRA 下大头仍是 FP16 权重 ~14GL 小,优化器 + 梯度加起来不到 1G。例如(L=1%、batch=1、seq=512):14 + 0.56 + 0.14 + 4.2 ≈ 19 GB24G 卡(3090/4090)够训,batch 还能略加。

快捷公式:总显存 ≈ (B×2) × (1 + 0.2~0.5) + L×10。全参 7B 还要叠全量 Adam/梯度,24G 常不够。QLoRA 权重约 B×0.5 字节,7B 约 6~8G。13B 权重 alone ~26G → 32G+ 或 QLoRA;70B 要 QLoRA + 多卡。

怎么证明微调变好了?

训练 / 验证 / 测试 三份数据,职责不能混。

集合干什么禁忌
训练集更新权重(LoRA 吃的数据)
验证集训中监控、调超参、选 checkpoint不能当最终报告
测试集训完评一次,模拟线上新数据全程封存,任何形式都不参与训练

证明:基座 vs 微调版在同一封存测试集上比指标,再加抽样人工评。验证集只服务调参。

模型评估有哪些维度?

封存测试集上,从五维证明「变好了」且「没训坏」。

  1. 任务主指标 — 硬标准。分类 Acc/F1;摘要 BLEU/ROUGE;翻译 ChrF;QA 的 EM/F1。
  2. 通用能力保持 — 防灾难性遗忘。常识推理、简单代码、通用对话,微调后不能明显退步。
  3. 泛化能力 — 同意图换说法、复杂 / 带干扰输入,看真学会还是背训练集。
  4. 人工评估 — 生成类金标准:流畅、相关、有用;自动指标抓不到的细问题靠人。
  5. 输出质量分析 — 挑变好典型和仍失败样例做定性,失败分析直接指导下轮数据 / 超参。

BLEU(Bilingual Evaluation Understudy)评估

BLEU 最初为机器翻译设计,现也常用于各类文本生成自动评测。核心:模型输出和参考答案比 N-gram 重合度——N-gram = 连续 N 个词组成的片段。分数越高,字面越像参考。

N-gram 怎么切(例如)

句子:我 最近 经常 头晕

类型切分结果说明
1-gram我 / 最近 / 经常 / 头晕逐词匹配
2-gram我最近 / 最近经常 / 经常头晕相邻两词
3-gram我最近经常 / 最近经常头晕连续三词
4-gram我最近经常头晕连续四词(句长至少 4)

BLEU 计算步骤

  1. 分词 — 中文用 jieba;英文按空格切。先变成词序列,再抽 N-gram。
  2. 算各阶 N-gram 精度 — 对 1-gram、2-gram…(常到 4)分别算:输出里有多少片段也出现在参考里(精确率;有 clipped 计数防一词多用刷分)。
  3. 加权几何平均 — 把各阶精度合成一个数;权重通常均分(BLEU-4 各 1/4)。
  4. 乘以简短惩罚(Brevity Penalty) — 生成明显短于参考时扣分,防止靠「极短高精」刷分。
text
BLEU ≈ BP × exp( Σ w_n · log p_n )

分数通常 0~1(或 0~100)。跨数据集别横比绝对分;同测试集上基座 vs 微调才有意义。

BLEU 分数能完全反映模型质量吗?

不能。 只量 N-gram 字面匹配。

BLEU 的局限性

  1. 无法衡量事实正确性 — 「吃感冒药」和「吃毒药」N-gram 可能很像,事实天差地别,分不一定低。
  2. 无法衡量安全合规性 — 医嘱有没有害、合不合规,BLEU 看不出来。
  3. 对同义表达不友好 — 「发烧」和「体温升高」意思相同,N-gram 对不上,分可能很低。
  4. 对语序不敏感 — 词序打乱、句子不通,高阶匹配碰巧仍在时,分数未必掉(1-gram 尤其钝)。

实际项目中如何结合自动评估和人工评估?

生命周期分阶段,自动快跑、人工把关、上线后用真实反馈闭环。BLEU 局限决定了不能只靠自动指标定案。

阶段谁评怎么做
开发阶段自动评估快速迭代:看 BLEU + 数据质量报告(合规、完整、重复率、评分卡)
上线前人工评估把关:抽样 100~200 条多人交叉评(事实、安全、有用、合规)
上线后用户反馈持续改进:点赞 / 点踩 → 收集真实偏好数据,回流下一轮 SFT / DPO / 数据清洗

模型评估的步骤是什么?

三阶段流水线,对应五维里的数据来源。

准备阶段 — 预先划分验证集、测试集;测试集封存。

训练中 — 验证集监控、防过拟合、选 checkpoint。训练涨、验证跌 → 过拟合信号。

训练后

  1. 基座 / 微调版同测试集跑任务主指标
  2. 通用能力 + 泛化测试。
  3. 人工抽检 + 输出质量个案分析。
  4. 综合判定:主指标显著涨 + 通用能力无明显退化 = 成功。

微调方法有哪些?

按「教什么」分三档。SFT 背标准答案;RLHF 学人类偏好;GRPO 组内比好坏,少训单独奖励模型。应用侧默认 SFT + LoRA;RLHF / GRPO 多是基座对齐或推理强化那档。电商退货、写秋天文案、鸡兔同笼都是示例

SFT(监督微调)

像老师带学生背标准答案。喂完整「问题 → 标准回答」对,模型模仿格式和内容。最基础、应用侧最常用。

示例(电商客服):

  • 输入 — 「我要退货,怎么操作?」
  • 输出 — 「亲,退货流程如下:1)进入订单详情页;2)点击申请退货;3)选择退货原因;4)提交后等待审核…」

目标:再问退货相关,按固定格式、步骤答。答案要、格式要规范,别教错。

SFT 的数据要求是什么?

SFT 吃的是指令–答案对,格式要对、内容要对。常用 Alpaca 格式

json
{ "instruction": "...", "input": "问题", "output": "标准答案" }

模型直接学 input → output 映射,同时学格式知识/口径。典型数据集举例:Alpaca-52K、中文医疗对话数据集(公开基准名)。

质量关键点(和「微调数据怎么准备」对齐,SFT 再强调一条格式):

  1. 答案准确性 — 错答案会被背死,垃圾进垃圾出。
  2. 完整性 — 步骤、字段、约束别缺一半。
  3. 格式规范性 — 字段名、JSON、话术模板统一,否则学成乱格式。

为什么需要数据质量评估?核心维度有哪些?

评估分两问:为什么要评估,以及用哪些维度量

为什么 — 质量直接定微调效果(垃圾进垃圾出);十几万条没法人肉扫完;要有可量化指标看整库健不健康。

核心维度

  1. 统计 — 长度分布、语种一致性、格式合规率、字段完整率。
  2. 语义 — 类别多样性、重复率检测。
  3. 综合评分 — 0~100 评分卡或 A/B/C/D,合成开训门禁。

数据质量的自动化评估指标

数据侧脚本体检,不是 BLEU。统计四件套 + 综合评分卡。阈值可按业务改。

统计四件套

  1. 长度分布 — 最短/最长/平均/中位数;过短(<10)可能无意义,过长(>1000)可能夹噪;看 P10/P90
  2. 语言一致性 — 中文字符占比;>80% 中文、<20% 英文、中间混合;中文库整体常要 >95%
  3. 格式合规 — Alpaca 三字段;Chat 的 messages+角色;output 非空。
  4. 字段完整 — 填充率 >99% 高完整,<95% 重点查。

综合评分(满分 100)

维度满分算法
格式合规20合规率 × 20
字段完整20平均填充率 × 20
语言一致15中文占比 × 15
数据唯一15(1 − 重复率) × 15
长度合理15(1 − 极端长度占比) × 15
多样性15(实际类别 / 期望类别) × 15

A≥90 / B≥75 / C≥60 / D<60。

RLHF(基于人类反馈的强化学习)

像老师让学生写作文再打分排序。模型先出多份回答,人标偏好(A > B > C),训奖励模型,策略再按奖励调。贵在大量偏好标注,但能教「什么叫好答案」。

示例(创意文案):Prompt「写一段关于秋天的文案」→ A 文艺优美、B 干巴巴、C 跑题 → 人标 A > B > C → 奖励模型学会「文艺 + 切题」。

GRPO(组相对策略优化)

DeepSeek-R1 那路。像一桌同学做同一题,组内比谁推理更好,不必另训奖励老师。同一题模型采样一组回答,组内相对打分 / 用可验证对错当信号,推策略更新。

示例(鸡兔同笼):同一题出 4 条推理路径,2 对 2 错 → 对的路径高奖励、错的低奖励 → 学到「分步验证数量关系比瞎猜可靠」。

SFTRLHFGRPO
学什么标准答案对人类偏好组内相对好坏
要不要 RM不要要(再 PPO 等)通常不要外置 RM
更合适格式、流程、垂直口径风格、有用无害对齐可验证推理(数学等)

RLHF / GRPO 的数据要求是什么?

和 SFT 不同——强化学习这条(尤其 GRPO / 可验证奖励)常常只要 QA 对不必标注推理过程。模型靠奖励函数自己摸推理策略,学的是推理与偏好,不是背标准话术。

json
{ "question": "数学题", "answer": "42" }

典型数据集举例:GSM8K(数学推理,公开基准)。没有逐步解题标注时,对错由答案可验证性判定,组内相对打分推策略。

质量关键点

  1. 问题多样性 — 题型、难度、表述要散,否则策略只学会一类题。
  2. 答案可验证性 — 答案要能自动判对错(数字、代码测例);不可验就难给稳奖励。

和 SFT 对比:SFT 要完整标准答案(准、全、格式齐);这条要题散 + 答案能自动验。开放文风的经典 RLHF 仍常要人标偏好对(chosen / rejected);这里强调的是数学这类可验证任务的数据形态。

重点 提示词工程 VS RAG VS 微调,什么时候使用?

预训练出 LLM,再变成「会各种事」的 AI。用户拿到错误回复时,先问错因,再选手段。常见三叉:

错因手段含义
没问清楚提示工程指令、格式、约束、few-shot 没写好;模型能力够,沟通方式不对
缺乏背景知识RAG缺公司文档、最新事实、要引用依据;检索补上下文,不改权重
能力不足微调问清了、知识也给了,仍不会做:格式死、垂直推理、风格要内化

怎么落地

  1. 默认先 Prompt — 改写法、加示例、结构化输出,零训练成本。
  2. 缺事实上 RAG — 知识常更新、要引用、权限分片,都适合外置。
  3. 能力缺口才微调 — SFT / LoRA;事实仍尽量放库,微调负责「怎么答」。
  4. 可组合 — 微调让模型更会用检索结果;Prompt 约束 RAG 的引用格式。

如何选择微调方法?

上一问是「要不要微调」;这一问是「微调用哪条路」。按任务要什么二选,工程上常串起来用

任务类型例子选什么为什么
有标准答案客服话术、医疗问答(口径固定)SFT指令–答案对直接学格式和知识映射,模仿标准答法
要推理能力数学、编程GRPO同题多路径组内比好坏,推「怎么想」;可验对错时特别合适

能不能一起用? 能。实际项目推荐顺序:

  1. 先 SFT — 学会格式和知识(怎么答、答什么)。
  2. 再 GRPO — 学会推理策略(怎么一步步想对)。

别一上来就 GRPO:格式都乱,组内比较也难稳。开放文风、有用无害对齐仍常看 RLHF / DPO(见上一节对比),和「数学推理上 GRPO」不是同一需求。

对话大模型的训练过程是什么样的?关键是什么?

垂直对话做成领域模型,两块:数据收集 + 训练流水线。关键不是堆卡,而是 合适的基座 + 高质量训练数据。更细的演练见微调课件(仓库内课程练习,不对外发布)。

关键一句话

合适的基础大模型 + 高质量训练数据。

质量重于盲目堆量。微软 Textbooks Are All You Need 口径:有「教科书级」样本,不必海量脏数据。Llama2→Llama3 一类公开报道也是 token 从约 2T 到 15T,推理大涨,关键是量上去的同时质也大幅提升

高质量数据从哪来?关键在对已有数据做过滤筛选,不是只会爬。

数据收集(垂直场景要攒什么)

垂直对话通常要攒这些:

类型内容
历史业务数据优秀坐席的语音 / 文本会话
业务文档流程说明、制度、产品材料
业务规则机器人配置、决策树、各节点话术
技术数据SQL、注释、库表定义与说明
用户特征基础信息、行为轨迹、标签、风控因子

对话大模型训练过程(五步)

  1. 基础大模型 — 开源基座选型(尺寸、中文、许可、能否私有化)。
  2. 数据加工 — 筛高质量对话;回溯校验关键事实;安全与合规过滤。
  3. 微调 + RLHF — 标注训练数据,按业务需求对齐(格式、口径、偏好)。
  4. 提示工程 / 定制对齐 — 定 prompt 模板,打磨提示语句(上线仍靠 Prompt 控场)。
  5. 对话效果评估 — 客观测试集 + 主观测试集一起看。

高质量数据怎么筛(要点)

  1. 源头控制 — 优先优秀坐席的话术与会话,别全量灌。
  2. 基础过滤 — 违法、色情、涉政等敏感内容先去掉(各司细则不同)。
  3. 业务过滤 — 规则模型、现有质检体系,按业务有效性留数。
  4. 去掉无意义对话 — 如接通即挂;只留有业务意义的轮次。
  5. 逻辑完整 — 控制轮数、通话时长,保证营销 / 客服完整闭环话术被学到,别只学半截。

垂直大模型选型:预训练好的 / 基座 / 中英文怎么选?

这是什么问题?
不是问「哪个模型分数最高」,而是 领域适配(垂直大模型)的起点选型与训练路线:起点用已对齐的预训练成品,还是更「生」的基座;语种跟中文还是英文底座;以及走重训、局部微调还是全量微调。

总标题:垂直大模型训练方案与起点选型策略

垂直大模型三条路

text
垂直大模型
├── 重新训练(从基座 / 近乎从零,数据要够)
├── 微调
│   ├── 局部微调(LoRA / P-Tuning 等 PEFT)
│   └── 全量微调(改全部参数)
└── 应用(直接 Prompt / RAG 上线,先不训)

怎么选起点

条件更合适的选择原因
训练数据少预训练好的模型 / 词向量当起点知识迁移,少样本也能借通识
训练数据大且质高可从基座模型开训 / 全参微调预训域和目标域差太大时,硬套旧向量可能拖后腿;Google 机器翻译研究口径:量足质高可直接从基座训
目标强中文优先中文基座或中英均衡底座少做词表扩、分词错配
只有英文强底座 + 中文业务英文基座 → 扩词表(如 BPE) → 全参微调全参 + 数据够,才能把场景精度拉上来

公开量级

某垂直训程:1 个 epoch 约 32 小时;要效果常需 4~6 个 epoch;合计大约 一周 量级才谈上线。用来说明全参 / 大数据路线贵。

怎么选

  1. 小数据 → 借预训练成品做迁移,优先局部微调(LoRA),别一上来重训。
  2. 大数据 + 高质量 → 基座开训或全参微调更干净,减少域不匹配。
  3. 语种 → 业务语种和底座语料对齐;中文任务默认中文/双语底座,只有英文底座时要扩词表再全参。
  4. 能不上训就先「应用」(Prompt / RAG);要改能力再微调;要换骨再重训。

Unsloth:LLM 高效微调

开源的 LLM 高效微调工具unslothai/unsloth)。把 LoRA / QLoRA 训程加速、省显存封装好,主流底座开箱能跑;它是工程加速层,不是另一种微调原理。

公开宣称能力(量级)

内容
支持模型Llama、Mistral、Qwen 等主流
速度相对传统微调约 2~5×
显存约省 50%~80%;例如:1.5B ≈ 7GB,15B ≈ 15GB
算法集成 GRPO(可走推理强化那条,不只 SFT)
导出 / 推理GGUF、Ollama、vLLM 等格式友好
方法LoRA / QLoRA
上手免费 Colab Notebook:换数据集就能跑
量化FP32 → BF16 / QLoRA / Q4 等,训推都瘦身

怎么摆进选型

  1. 原理仍是 LoRA / QLoRA / GRPO — Unsloth 优化内核与显存路径,不替代「低秩旁路」那套理论。
  2. 适合谁 — 单卡 / 消费级卡想摸 7B~十几 B;要快速试 SFT 或 GRPO;训完要进 Ollama / vLLM。
  3. 不替代什么 — 数据质量和任务选型;垂直上线仍要评估、合规、Serving。

Qwen-VL 多模态微调与纯文本 SFT 的差异?

VL 微调不是换个模型名。加载类、LoRA 作用层、数据 messages、Collator 都和纯文本不同。

维度纯文本 SFTQwen-VL 多模态
加载语言模型加载器视觉语言模型加载器
LoRA主要语言层视觉层 + 语言层都要开
数据 content字符串list:text + image
Collator普通 / 默认视觉专用 Collator
数据集准备常自动 prepare跳过自动 prepare

只训语言、冻视觉 → 图看不好。演练细节见微调课件(仓库内课程练习,不对外发布)。


相关代码示例