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 |
基座公司在干什么
- 继续预训练(Continue Pre-training) — 在已有权重上再灌海量通用文本,补知识、补能力。
- 指令微调(Instruction Tuning) — 教会模型听懂「用户指令 + 助手回复」格式。
- 对齐(RLHF / PPO / DPO) — 让人类偏好写进策略:有用、无害、少胡说。
产出是「通才」:什么都能聊一点,但不懂你们公司的发票规则、JSON schema、质检口径。
应用侧在干什么
- SFT — 用业务指令–答案对,把输出格式、术语、推理套路对齐到场景。
- PEFT(LoRA 等) — 只训旁路矩阵,显存和存储都小,底座冻结,不易把通用能力训没。
- 可选 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 量级) |
怎么记、怎么选
- 软提示一族 — Prompt 只动输入;P-Tuning / Prefix 深入中间层。Prompt Tuning 对小模型不友好,大模型才香。
- LoRA 一族 — 改的是权重旁路,不是提示向量。NLU / NLG 都常用,工程默认先问「能不能上 LoRA」。
- 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。
优点
- 省参数 / 省存储 — 一份中心底座服务多个下游任务;每任务只存小 adapter(A、B),不必为每个任务复制整模。
- 推理无额外开销 — 训完把
BA并回W' = W + BA,部署前向与原模型同结构,不因旁路多一截延迟。 - 训练相对稳定、效果好 — 底座不动,只动低秩旁路;小数据上比全参少「带偏」风险。
为什么省(和上面三条对应)
- 只训 A、B — 可训参数从
d²量级掉到约2·d·r;优化器状态、梯度跟着可训参数走,显存大降。 - 存盘小 — 多任务 = 1 份底座 + N 份 adapter。
- 推理可合并 — 合并后无旁路额外算力。
什么是低秩特性?
把矩阵想成一张大 Excel(比如 1000×1000)。秩是表里「独立、没法用别的行/列拼出来」的最少基本信息量。秩越低 → 冗余越高 → 越好压缩。
高秩矩阵 — 行列花样多、没什么套路。要完整描述,得把一百万个数全存下来,压不动。
低秩矩阵 — 行与行高度相关,有明显套路。比如每一行都是第一行的倍数:只存几行「底料」,再组合就能还原整张大表。
思考例子:全球气温不必存「每城每分钟」。纬度、季节等少数核心因子(低维基底),就能估出各地温度——高维表被低维因素撑起来。
和 LoRA 的关系 — LoRA 不说底座 W 本身低秩,而说微调时的更新量 ΔW 往往有低秩特性:任务需要的改动,本质落在少数方向上。所以用 r ≪ d 的 BA 就能近似 ΔW,不必存满 d×d。
什么是内在的低秩特性?
上一问讲「低秩是什么」;这一问讲 LoRA 假设落在谁身上——ΔW 内在低秩,不是底座 W。
ΔW 是什么 — 预训练大模型学新任务时,神经元连接权重 W 要微调。这份调整量记作 ΔW(权重更新)。形式上可以是 1000×1000、一百万个数那么大。
为什么说「内在」低秩 — 研究者发现:学一个新任务时,真正有效的改动其实很集中、很简单。矩阵看起来很大,有效信息维数却很低。
数学体现(SVD) — 对真实微调得到的 ΔW 做奇异值分解:奇异值衰减极快,绝大多数接近 0,只有前几个显著偏大。
- ⇒ 真正有用的更新信息,集中在那几个最大奇异值对应的方向;其余可当冗余丢掉。
- ⇒ 这就是 LoRA 的核心假设:不必存满 ΔW,用低秩
BA(秩 r 取前几个方向那一档)就够近似。
什么是矩阵分解?
矩阵分解 = 把一个大矩阵写成几个小矩阵的乘积(有时再加对角阵)。目的不是换个写法好看,而是:参数变少、能压缩、能抓住主要方向。LoRA 里的 ΔW ≈ BA,就是一种刻意做成低秩的矩阵分解。
直观例子
要存一个 d×d 的更新矩阵,直接存要 d² 个数。若它近似低秩,可以拆成:
text
ΔW_(d×d) ≈ B_(d×r) × A_(r×d)| 直接存 ΔW | 分解成 B、A | |
|---|---|---|
| 参数个数 | d² | d·r + r·d = 2·d·r |
例:d=1000, r=8 | 1,000,000 | 16,000 |
| 含义 | 每一个格子独立存 | 只存「底料」再乘出来 |
r ≪ d 时,2·d·r 远小于 d²。这就是「低秩 → 可分解 → 可压缩」串起来的工程含义。
和 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| SVD | LoRA 的 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) — 所有元素误差平方再求和,就是「逐格重建误差」。
- 约束 —
B是d×r,A是r×d,秩至多r(r ≪ 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 近似——这是「分析用分解」。缺项很多(推荐评分表)、或要把分解嵌进更大训练回路时,才上下面两套。
工程解法
| 方法 | 全称 | 怎么做 | 直觉 |
|---|---|---|---|
| ALS | Alternating Least Squares,交替最小二乘 | 固定 A 解 B,再固定 B 解 A,来回交替 | 每次只动一边,子问题是最小二乘,好解、稳 |
| SGD | Stochastic 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。矩阵分解里两个因子(记 X、Y,前文的 B、A / U、V 是同一类)不能一起闭式最优,就一次只动一个:固定另一个,当前这个变成普通最小二乘,好解、稳。两边来回交替,直到收敛。
text
目标仍是:min ‖ M − XY ‖_F² (可加正则)三步
- Step1 — 固定
Y,优化X(此时对X是线性最小二乘)。 - Step2 — 固定
X,优化Y(同理,对Y是最小二乘)。 - 重复 Step1、Step2,直到
X、Y收敛。
每次固定一个矩阵、优化另一个,都是最小二乘问题。
为什么这样设计
| 两边一起动 | ALS 交替 | |
|---|---|---|
| 问题性质 | 双线性,整体非凸,难一次解完 | 每次子问题凸(线性最小二乘) |
| 求解 | 不好直接闭式 | 可正规方程 / 现成 LS 求解器 |
| 停条件 | — | X、Y 变化很小,或重建误差不再降 |
和 SGD、LoRA 的位置
- ALS — 经典协同过滤 / 完整或半完整矩阵分解常用;一轮更新一整块因子,不是按样本一点点迈。
- SGD — 按样本/元素随机梯度;深度学习和 LoRA 训练栈默认这条。
- LoRA — 一般不用 ALS 去解
BA;A、B跟着任务 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 怎么摆
| SVD | ALS | LoRA | |
|---|---|---|---|
| 输入 | 一张已知、完整的 M | M 可缺项;迭代求因子 | 没有现成 ΔW 表 |
| 产出 | U,Σ,V;可截断得最优低秩近似 | 迭代得到 X,Y | 可学习的 A,B,ΔW:=BA |
| 角色 | 分析 / 证明假设 / 压缩 | 经典 MF 工程求解 | 微调时的参数化 |
关系可以这样串:
- 全参微调得到 ΔW → 对它做 SVD → 奇异值骤降 → 说明 ΔW 内在低秩。
- LoRA 据此假设,直接用小秩
BA去学更新,训练时不算 SVD。 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 权重 ~14G;L 小,优化器 + 梯度加起来不到 1G。例如(L=1%、batch=1、seq=512):14 + 0.56 + 0.14 + 4.2 ≈ 19 GB → 24G 卡(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 微调版在同一封存测试集上比指标,再加抽样人工评。验证集只服务调参。
模型评估有哪些维度?
封存测试集上,从五维证明「变好了」且「没训坏」。
- 任务主指标 — 硬标准。分类 Acc/F1;摘要 BLEU/ROUGE;翻译 ChrF;QA 的 EM/F1。
- 通用能力保持 — 防灾难性遗忘。常识推理、简单代码、通用对话,微调后不能明显退步。
- 泛化能力 — 同意图换说法、复杂 / 带干扰输入,看真学会还是背训练集。
- 人工评估 — 生成类金标准:流畅、相关、有用;自动指标抓不到的细问题靠人。
- 输出质量分析 — 挑变好典型和仍失败样例做定性,失败分析直接指导下轮数据 / 超参。
BLEU(Bilingual Evaluation Understudy)评估
BLEU 最初为机器翻译设计,现也常用于各类文本生成自动评测。核心:模型输出和参考答案比 N-gram 重合度——N-gram = 连续 N 个词组成的片段。分数越高,字面越像参考。
N-gram 怎么切(例如)
句子:我 最近 经常 头晕
| 类型 | 切分结果 | 说明 |
|---|---|---|
| 1-gram | 我 / 最近 / 经常 / 头晕 | 逐词匹配 |
| 2-gram | 我最近 / 最近经常 / 经常头晕 | 相邻两词 |
| 3-gram | 我最近经常 / 最近经常头晕 | 连续三词 |
| 4-gram | 我最近经常头晕 | 连续四词(句长至少 4) |
BLEU 计算步骤
- 分词 — 中文用 jieba;英文按空格切。先变成词序列,再抽 N-gram。
- 算各阶 N-gram 精度 — 对 1-gram、2-gram…(常到 4)分别算:输出里有多少片段也出现在参考里(精确率;有 clipped 计数防一词多用刷分)。
- 加权几何平均 — 把各阶精度合成一个数;权重通常均分(BLEU-4 各 1/4)。
- 乘以简短惩罚(Brevity Penalty) — 生成明显短于参考时扣分,防止靠「极短高精」刷分。
text
BLEU ≈ BP × exp( Σ w_n · log p_n )分数通常 0~1(或 0~100)。跨数据集别横比绝对分;同测试集上基座 vs 微调才有意义。
BLEU 分数能完全反映模型质量吗?
不能。 只量 N-gram 字面匹配。
BLEU 的局限性
- 无法衡量事实正确性 — 「吃感冒药」和「吃毒药」N-gram 可能很像,事实天差地别,分不一定低。
- 无法衡量安全合规性 — 医嘱有没有害、合不合规,BLEU 看不出来。
- 对同义表达不友好 — 「发烧」和「体温升高」意思相同,N-gram 对不上,分可能很低。
- 对语序不敏感 — 词序打乱、句子不通,高阶匹配碰巧仍在时,分数未必掉(1-gram 尤其钝)。
实际项目中如何结合自动评估和人工评估?
按生命周期分阶段,自动快跑、人工把关、上线后用真实反馈闭环。BLEU 局限决定了不能只靠自动指标定案。
| 阶段 | 谁评 | 怎么做 |
|---|---|---|
| 开发阶段 | 自动评估 | 快速迭代:看 BLEU + 数据质量报告(合规、完整、重复率、评分卡) |
| 上线前 | 人工评估 | 把关:抽样 100~200 条,多人交叉评(事实、安全、有用、合规) |
| 上线后 | 用户反馈 | 持续改进:点赞 / 点踩 → 收集真实偏好数据,回流下一轮 SFT / DPO / 数据清洗 |
模型评估的步骤是什么?
三阶段流水线,对应五维里的数据来源。
准备阶段 — 预先划分验证集、测试集;测试集封存。
训练中 — 验证集监控、防过拟合、选 checkpoint。训练涨、验证跌 → 过拟合信号。
训练后
- 基座 / 微调版同测试集跑任务主指标。
- 做通用能力 + 泛化测试。
- 人工抽检 + 输出质量个案分析。
- 综合判定:主指标显著涨 + 通用能力无明显退化 = 成功。
微调方法有哪些?
按「教什么」分三档。SFT 背标准答案;RLHF 学人类偏好;GRPO 组内比好坏,少训单独奖励模型。应用侧默认 SFT + LoRA;RLHF / GRPO 多是基座对齐或推理强化那档。电商退货、写秋天文案、鸡兔同笼都是示例。
SFT(监督微调)
像老师带学生背标准答案。喂完整「问题 → 标准回答」对,模型模仿格式和内容。最基础、应用侧最常用。
示例(电商客服):
- 输入 — 「我要退货,怎么操作?」
- 输出 — 「亲,退货流程如下:1)进入订单详情页;2)点击申请退货;3)选择退货原因;4)提交后等待审核…」
目标:再问退货相关,按固定格式、步骤答。答案要准、格式要规范,别教错。
SFT 的数据要求是什么?
SFT 吃的是指令–答案对,格式要对、内容要对。常用 Alpaca 格式:
json
{ "instruction": "...", "input": "问题", "output": "标准答案" }模型直接学 input → output 映射,同时学格式和知识/口径。典型数据集举例:Alpaca-52K、中文医疗对话数据集(公开基准名)。
质量关键点(和「微调数据怎么准备」对齐,SFT 再强调一条格式):
- 答案准确性 — 错答案会被背死,垃圾进垃圾出。
- 完整性 — 步骤、字段、约束别缺一半。
- 格式规范性 — 字段名、JSON、话术模板统一,否则学成乱格式。
为什么需要数据质量评估?核心维度有哪些?
评估分两问:为什么要评估,以及用哪些维度量。
为什么 — 质量直接定微调效果(垃圾进垃圾出);十几万条没法人肉扫完;要有可量化指标看整库健不健康。
核心维度
- 统计 — 长度分布、语种一致性、格式合规率、字段完整率。
- 语义 — 类别多样性、重复率检测。
- 综合评分 — 0~100 评分卡或 A/B/C/D,合成开训门禁。
数据质量的自动化评估指标
数据侧脚本体检,不是 BLEU。统计四件套 + 综合评分卡。阈值可按业务改。
统计四件套
- 长度分布 — 最短/最长/平均/中位数;过短(<10)可能无意义,过长(>1000)可能夹噪;看 P10/P90。
- 语言一致性 — 中文字符占比;>80% 中文、<20% 英文、中间混合;中文库整体常要 >95%。
- 格式合规 — Alpaca 三字段;Chat 的
messages+角色;output非空。 - 字段完整 — 填充率 >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 错 → 对的路径高奖励、错的低奖励 → 学到「分步验证数量关系比瞎猜可靠」。
| SFT | RLHF | GRPO | |
|---|---|---|---|
| 学什么 | 标准答案对 | 人类偏好 | 组内相对好坏 |
| 要不要 RM | 不要 | 要(再 PPO 等) | 通常不要外置 RM |
| 更合适 | 格式、流程、垂直口径 | 风格、有用无害对齐 | 可验证推理(数学等) |
RLHF / GRPO 的数据要求是什么?
和 SFT 不同——强化学习这条(尤其 GRPO / 可验证奖励)常常只要 QA 对,不必标注推理过程。模型靠奖励函数自己摸推理策略,学的是推理与偏好,不是背标准话术。
json
{ "question": "数学题", "answer": "42" }典型数据集举例:GSM8K(数学推理,公开基准)。没有逐步解题标注时,对错由答案可验证性判定,组内相对打分推策略。
质量关键点
- 问题多样性 — 题型、难度、表述要散,否则策略只学会一类题。
- 答案可验证性 — 答案要能自动判对错(数字、代码测例);不可验就难给稳奖励。
和 SFT 对比:SFT 要完整标准答案(准、全、格式齐);这条要题散 + 答案能自动验。开放文风的经典 RLHF 仍常要人标偏好对(chosen / rejected);这里强调的是数学这类可验证任务的数据形态。
重点 提示词工程 VS RAG VS 微调,什么时候使用?
预训练出 LLM,再变成「会各种事」的 AI。用户拿到错误回复时,先问错因,再选手段。常见三叉:
| 错因 | 手段 | 含义 |
|---|---|---|
| 没问清楚 | 提示工程 | 指令、格式、约束、few-shot 没写好;模型能力够,沟通方式不对 |
| 缺乏背景知识 | RAG | 缺公司文档、最新事实、要引用依据;检索补上下文,不改权重 |
| 能力不足 | 微调 | 问清了、知识也给了,仍不会做:格式死、垂直推理、风格要内化 |
怎么落地
- 默认先 Prompt — 改写法、加示例、结构化输出,零训练成本。
- 缺事实上 RAG — 知识常更新、要引用、权限分片,都适合外置。
- 能力缺口才微调 — SFT / LoRA;事实仍尽量放库,微调负责「怎么答」。
- 可组合 — 微调让模型更会用检索结果;Prompt 约束 RAG 的引用格式。
如何选择微调方法?
上一问是「要不要微调」;这一问是「微调用哪条路」。按任务要什么二选,工程上常串起来用。
| 任务类型 | 例子 | 选什么 | 为什么 |
|---|---|---|---|
| 有标准答案 | 客服话术、医疗问答(口径固定) | SFT | 指令–答案对直接学格式和知识映射,模仿标准答法 |
| 要推理能力 | 数学、编程 | GRPO | 同题多路径组内比好坏,推「怎么想」;可验对错时特别合适 |
能不能一起用? 能。实际项目推荐顺序:
- 先 SFT — 学会格式和知识(怎么答、答什么)。
- 再 GRPO — 学会推理策略(怎么一步步想对)。
别一上来就 GRPO:格式都乱,组内比较也难稳。开放文风、有用无害对齐仍常看 RLHF / DPO(见上一节对比),和「数学推理上 GRPO」不是同一需求。
对话大模型的训练过程是什么样的?关键是什么?
垂直对话做成领域模型,两块:数据收集 + 训练流水线。关键不是堆卡,而是 合适的基座 + 高质量训练数据。更细的演练见微调课件(仓库内课程练习,不对外发布)。
关键一句话
合适的基础大模型 + 高质量训练数据。
质量重于盲目堆量。微软 Textbooks Are All You Need 口径:有「教科书级」样本,不必海量脏数据。Llama2→Llama3 一类公开报道也是 token 从约 2T 到 15T,推理大涨,关键是量上去的同时质也大幅提升。
高质量数据从哪来?关键在对已有数据做过滤筛选,不是只会爬。
数据收集(垂直场景要攒什么)
垂直对话通常要攒这些:
| 类型 | 内容 |
|---|---|
| 历史业务数据 | 优秀坐席的语音 / 文本会话 |
| 业务文档 | 流程说明、制度、产品材料 |
| 业务规则 | 机器人配置、决策树、各节点话术 |
| 技术数据 | SQL、注释、库表定义与说明 |
| 用户特征 | 基础信息、行为轨迹、标签、风控因子 |
对话大模型训练过程(五步)
- 基础大模型 — 开源基座选型(尺寸、中文、许可、能否私有化)。
- 数据加工 — 筛高质量对话;回溯校验关键事实;安全与合规过滤。
- 微调 + RLHF — 标注训练数据,按业务需求对齐(格式、口径、偏好)。
- 提示工程 / 定制对齐 — 定 prompt 模板,打磨提示语句(上线仍靠 Prompt 控场)。
- 对话效果评估 — 客观测试集 + 主观测试集一起看。
高质量数据怎么筛(要点)
- 源头控制 — 优先优秀坐席的话术与会话,别全量灌。
- 基础过滤 — 违法、色情、涉政等敏感内容先去掉(各司细则不同)。
- 业务过滤 — 规则模型、现有质检体系,按业务有效性留数。
- 去掉无意义对话 — 如接通即挂;只留有业务意义的轮次。
- 逻辑完整 — 控制轮数、通话时长,保证营销 / 客服完整闭环话术被学到,别只学半截。
垂直大模型选型:预训练好的 / 基座 / 中英文怎么选?
这是什么问题?
不是问「哪个模型分数最高」,而是 领域适配(垂直大模型)的起点选型与训练路线:起点用已对齐的预训练成品,还是更「生」的基座;语种跟中文还是英文底座;以及走重训、局部微调还是全量微调。
总标题:垂直大模型训练方案与起点选型策略
垂直大模型三条路
text
垂直大模型
├── 重新训练(从基座 / 近乎从零,数据要够)
├── 微调
│ ├── 局部微调(LoRA / P-Tuning 等 PEFT)
│ └── 全量微调(改全部参数)
└── 应用(直接 Prompt / RAG 上线,先不训)怎么选起点
| 条件 | 更合适的选择 | 原因 |
|---|---|---|
| 训练数据少 | 用预训练好的模型 / 词向量当起点 | 知识迁移,少样本也能借通识 |
| 训练数据大且质高 | 可从基座模型开训 / 全参微调 | 预训域和目标域差太大时,硬套旧向量可能拖后腿;Google 机器翻译研究口径:量足质高可直接从基座训 |
| 目标强中文 | 优先中文基座或中英均衡底座 | 少做词表扩、分词错配 |
| 只有英文强底座 + 中文业务 | 英文基座 → 扩词表(如 BPE) → 全参微调 | 全参 + 数据够,才能把场景精度拉上来 |
公开量级
某垂直训程:1 个 epoch 约 32 小时;要效果常需 4~6 个 epoch;合计大约 一周 量级才谈上线。用来说明全参 / 大数据路线贵。
怎么选
- 小数据 → 借预训练成品做迁移,优先局部微调(LoRA),别一上来重训。
- 大数据 + 高质量 → 基座开训或全参微调更干净,减少域不匹配。
- 语种 → 业务语种和底座语料对齐;中文任务默认中文/双语底座,只有英文底座时要扩词表再全参。
- 能不上训就先「应用」(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 等,训推都瘦身 |
怎么摆进选型
- 原理仍是 LoRA / QLoRA / GRPO — Unsloth 优化内核与显存路径,不替代「低秩旁路」那套理论。
- 适合谁 — 单卡 / 消费级卡想摸 7B~十几 B;要快速试 SFT 或 GRPO;训完要进 Ollama / vLLM。
- 不替代什么 — 数据质量和任务选型;垂直上线仍要评估、合规、Serving。
Qwen-VL 多模态微调与纯文本 SFT 的差异?
VL 微调不是换个模型名。加载类、LoRA 作用层、数据 messages、Collator 都和纯文本不同。
| 维度 | 纯文本 SFT | Qwen-VL 多模态 |
|---|---|---|
| 加载 | 语言模型加载器 | 视觉语言模型加载器 |
| LoRA | 主要语言层 | 视觉层 + 语言层都要开 |
| 数据 content | 字符串 | list:text + image |
| Collator | 普通 / 默认 | 视觉专用 Collator |
| 数据集准备 | 常自动 prepare | 跳过自动 prepare |
只训语言、冻视觉 → 图看不好。演练细节见微调课件(仓库内课程练习,不对外发布)。