外观
LLM 预训练、微调与对齐
目录
- 1. 学习目标
- 2. 面试结论
- 3. 面试官为什么问
- 4. 概念与边界
- 5. 原理剖析
- 6. 实现与代码
- 7. 实际项目案例
- 8. 方案权衡与常见误区
- 9. 面试题与参考答案
- 10. 递进追问
- 11. 实践任务
- 12. 相关知识与参考资料
- 13. 简明总结
1. 学习目标
- 理解预训练、监督微调(Supervised Fine-Tuning, SFT)与偏好对齐改变的目标和能力边界;
- 能推导因果语言模型损失、LoRA 参数量和 DPO 的成对偏好目标;
- 能区分全量微调、LoRA/QLoRA、RAG、Prompt 与偏好优化的适用场景;
- 能实现最小 LoRA 适配层,并验证冻结基座、梯度和合并结果;
- 能从数据、训练、评测、发布和回滚全链路排查灾难性遗忘、过拟合、奖励投机与安全退化。
2. 面试结论
2.1 30 秒回答
预训练用大规模语料和自监督目标学习通用语言建模能力;SFT 用高质量“指令—回答”样本教模型遵循任务格式;偏好对齐再用成对偏好或奖励信号,让输出更符合人类偏好和安全要求。全量微调更新全部参数,LoRA 冻结基座并学习低秩增量,显著减少可训练参数和优化器状态,但不自动消除激活显存、数据质量或遗忘问题。知识更新优先考虑 RAG,行为和格式适配考虑 SFT/PEFT,偏好冲突才考虑 DPO/RLHF,最终选择必须由离线集、安全集和线上实验验证。
2.2 一分钟复述版
因果预训练最小化下一个 Token 的交叉熵,让模型拟合语料分布;SFT 形式上仍常用交叉熵,但只在目标回答 Token 上计算损失,Prompt 部分通常 Mask 掉。LoRA 把权重更新限制为
3. 面试官为什么问
- 方法边界:是否会根据“补知识、改行为、调偏好、降成本”选择不同手段;
- 数学与实现:是否理解训练目标、梯度流、低秩约束、参考模型和偏好对;
- 数据工程:是否关注质量、许可、泄漏、重复、模板和分布偏移;
- 生产经验:能否设计评测、灰度、回滚和模型/数据/代码版本追踪;
- 高级区分度:能否指出 PEFT 降低的是可训练参数相关成本,不代表训练或部署的所有显存都按同样比例下降。
4. 概念与边界
小白先这样理解:一位厨师如何从会做菜到懂顾客
学徒先大量阅读菜谱,根据前面的步骤猜下一步会做什么,慢慢学会食材、火候和常见做法。师傅再拿出“顾客点单—标准成品”示范,教他按要求出菜。最后让顾客在两盘菜中选更喜欢的一盘,学徒才逐步调整风格、口味与拒绝边界。
生活角色 → 技术概念: 大量菜谱与“猜下一步”对应预训练,标准点单示范对应 SFT,两盘菜的偏好选择对应 DPO/RLHF 中的偏好信号,厨师手艺的变化对应模型权重或适配器更新。
类比边界: 顾客“更喜欢”不等于事实正确、公平或安全,就像高评分不能代替食品安全检查。训练效果仍受数据质量、目标函数、分布偏移和独立评测约束。
4.1 阶段定义
| 阶段 | 典型数据 | 主要目标 | 主要改变 |
|---|---|---|---|
| 预训练 | 大规模未标注文本/代码 | 预测下一个 Token 等自监督目标 | 通用表示、语言与世界模式 |
| 继续预训练 | 领域未标注语料 | 保持自监督目标适应领域分布 | 领域词汇与分布 |
| SFT | Prompt—Response 示范 | 最大化目标回答似然 | 指令遵循、格式和任务行为 |
| 偏好优化 | chosen/rejected 或评分 | 提升偏好回答相对概率/奖励 | 风格、安全、帮助性等偏好 |
“对齐”不是一个绝对完成状态,而是模型行为相对特定人群、政策和场景目标的优化。不同目标可能冲突,且训练分布外仍可能失败。
4.2 全量微调、PEFT、RAG 与 Prompt
| 手段 | 是否改权重 | 擅长解决 | 不擅长/风险 |
|---|---|---|---|
| Prompt/Few-shot | 否 | 临时任务说明、格式引导 | 上下文成本、稳定性受模型能力限制 |
| RAG | 否 | 更新频繁、需引用的外部知识 | 检索失败、上下文冲突和延迟 |
| LoRA/PEFT | 只训练少量适配参数 | 行为、风格、领域任务适配 | 仍需好数据与评测,不是知识库替代品 |
| 全量微调 | 是 | 需要广泛改变参数分布的任务 | 训练/存储成本高,遗忘和回滚复杂 |
| DPO/RLHF | 是或通过适配器更新 | 成对偏好和行为对齐 | 偏好数据偏差、奖励投机、安全权衡 |
4.3 输入、输出与前置条件
- 训练输入不仅是文本,还包括 Tokenizer、聊天模板、特殊 Token、最大长度、标签 Mask 和数据权重;
- 输出不仅是权重,还应包含基座版本、适配器、配置、数据清单/哈希、代码提交、随机种子、训练日志和评测报告;
- 前置条件包括数据使用权、隐私处理、去重与切分策略、可复现基线、显存预算和发布回滚方案。
4.4 不能混淆的概念
- 继续预训练 ≠ SFT:前者常用未标注领域语料和自监督目标,后者用输入—输出示范;
- SFT ≠ 偏好优化:SFT 模仿唯一/参考答案,偏好优化学习相对选择;
- LoRA ≠ 量化:LoRA 限制可训练更新,量化降低数值表示位宽;QLoRA 将量化基座与 LoRA 训练结合;
- RLHF ≠ 奖励模型本身:奖励模型只是经典 RLHF 流程的一环;
- DPO ≠ 无参考约束:标准 DPO 目标显式比较策略与参考策略的相对 Log Probability。
5. 原理剖析
5.1 因果语言模型预训练
给定 Token 序列
训练最小化负对数似然:
其中
因果链是:数据分布与采样权重 → 模型看到什么模式 → 交叉熵优化什么概率 → 下游行为与偏差。扩大数据量不能自动修复污染、重复、泄漏或不平衡。
5.2 SFT 与标签 Mask
聊天样本可序列化为:
text
<system>规则</system><user>问题</user><assistant>回答</assistant>通常只让 Assistant 回答部分贡献损失:Prompt 对应标签设为 ignore_index,回答 Token 保留真实 ID。若错误地训练 Prompt Token,模型会浪费容量复现用户输入;若模板或终止 Token 错误,可能出现角色串线、无限生成或不会停止。
SFT 仍是最大似然学习:它擅长模仿示范分布,不保证识别所有事实真伪,也不保证训练集之外的安全边界。
5.3 LoRA 的低秩约束、维度与参数量
对线性层
全量训练该层需更新
LoRA 降低梯度和优化器状态的可训练参数规模,但前向仍需运行基座,反向仍需保存/重算必要激活;目标模块、序列长度、批大小、精度、Checkpointing 和优化器共同决定实际显存。不能用“可训练参数减少比例”直接等同于“总显存减少比例”。
5.4 RLHF 与 DPO
经典 InstructGPT 风格 RLHF 流程是:SFT 初始化策略 → 收集回答偏好 → 训练奖励模型 → 用 PPO 等算法优化策略,同时对参考策略施加 KL 约束以避免过度漂移。
DPO 使用偏好三元组
这里序列 Log Probability 是回答 Token 条件 Log Probability 的和(或由实现规定的聚合);
教学插图:预训练、SFT 与偏好对齐的目标差异

替代文本: 预训练使用大规模许可与清洗语料学习下一个 Token,形成 Base Model;SFT 使用指令和回答示范塑造任务遵循与回答行为;偏好对齐比较同一提示下的优选和拒选回答,提高期望回答的相对偏好。每个阶段都必须经过独立质量、安全和回归评测,未通过则不能进入下一阶段或发布。
读图结论: 三类训练目标相互补充但不能互相替代:预训练主要形成能力底座,SFT 学习示范行为,偏好对齐调整相对偏好;后两者都不自动保证事实正确或绝对安全。
图中的三段顺序是常见工程路线,不是唯一流程;项目可以继续预训练、直接做 SFT、选择 DPO 或经典 RLHF,也可以因成本与收益不采用某个阶段,但任何候选都需要独立评测和可回滚发布。
5.5 全流程可视化
图 1:从基座预训练到对齐发布的证据链替代文本: 通用语料用于预训练,指令示范用于 SFT,偏好对用于 DPO 或奖励模型加 RL;每一阶段都必须经过独立质量、安全与回归评测,最后才能灰度发布。
图表加载中…
读图结论: 训练阶段不是单向流水线;每个候选都必须用独立评测闭环证明没有以能力、安全或稳定性退化换取局部偏好提升。
5.6 复杂度与训练内存因果链
- 前向/反向主要计算仍由完整 Transformer、批大小、有效 Token 数和序列长度决定;LoRA 不会跳过基座前向;
- 全量微调为所有权重维护梯度和优化器状态,PEFT 只为适配参数维护这些状态,因此差异主要来自可训练状态;
- 激活显存大致随批内有效 Token、层数、隐藏维度增长,标准 Attention 中间量还与序列长度平方相关;Activation Checkpointing 用额外重算换显存;
- 数据 Packing 可减少 Padding 浪费,但必须正确隔离样本边界、位置与损失,否则会发生跨样本信息泄漏;
- 分布式训练中的数据并行、张量并行、流水并行、ZeRO/FSDP 各自切分不同状态,选择需以模型、网络拓扑和故障恢复目标为依据。
6. 实现与代码
6.1 最小可运行 LoRA 示例
运行环境:Python 3.10+、PyTorch 2.x。示例冻结基座线性层,只训练秩 1 增量去拟合一个秩 1 目标变化。
python
import torch
import torch.nn as nn
import torch.nn.functional as F
class LoRALinear(nn.Module):
def __init__(self, base: nn.Linear, rank: int = 1, alpha: float = 1.0):
super().__init__()
self.base = base
for parameter in self.base.parameters():
parameter.requires_grad = False
self.rank = rank
self.scale = alpha / rank
self.A = nn.Parameter(torch.empty(rank, base.in_features))
self.B = nn.Parameter(torch.zeros(base.out_features, rank))
nn.init.normal_(self.A, mean=0.0, std=0.02)
def forward(self, x):
delta = (x @ self.A.T) @ self.B.T
return self.base(x) + self.scale * delta
def merged_weight(self):
return self.base.weight + self.scale * (self.B @ self.A)
torch.manual_seed(0)
base = nn.Linear(3, 2, bias=False)
model = LoRALinear(base, rank=1, alpha=1.0)
x = torch.randn(64, 3)
# 构造一个可由 rank=1 LoRA 表达的目标增量。
left = torch.tensor([[1.0], [-0.5]]) # [d_out, 1]
right = torch.tensor([[0.3, -0.2, 0.4]]) # [1, d_in]
target = F.linear(x, base.weight + left @ right).detach()
optimizer = torch.optim.Adam([model.A, model.B], lr=0.05)
initial_loss = F.mse_loss(model(x), target).item()
for _ in range(300):
loss = F.mse_loss(model(x), target)
optimizer.zero_grad()
loss.backward()
optimizer.step()
final_loss = F.mse_loss(model(x), target).item()
merged_output = F.linear(x, model.merged_weight())
assert base.weight.grad is None
assert final_loss < initial_loss
assert torch.allclose(model(x), merged_output, atol=1e-5)
print({"initial_loss": initial_loss, "final_loss": final_loss})6.2 关键实现说明
base参数requires_grad=False,验证时还要确认优化器参数组不包含基座;- A 随机、B 为零使初始
,一开始不改变基座输出; B @ A的形状为,可在部署前合并到基座; - 合并后需验证输出容差、dtype、适配器版本与是否重复合并;
- 真实 Transformer 还要选择目标模块(如注意力投影或 FFN),不能照搬固定模块列表到不同架构。
6.3 边界条件与验证
- 检查只有预期适配参数有梯度,梯度范数有限且非零;
- 以固定批次比较合并前后 Logits,而不只比较最终文本;
- 保存并重新加载适配器,检查基座 ID、Tokenizer、目标模块和 rank;
- 增加 rank 对比时控制数据、步数、随机种子和评测集,避免把随机波动当提升;
- SFT/DPO 代码还需单元测试 Chat Template、回答 Token Mask、chosen/rejected 顺序和序列 Log Probability 聚合。
6.4 技术栈与横向选型
预训练、SFT 和偏好对齐是训练目标与工程阶段,不由某个库定义。下表是可复现的参考组合,真实选型还要固定模型、数据、硬件、预算和评测集。
| 技术点 ID | 技术点/环节 | 类型 | 采用方案 | 链路职责 | 版本/证据边界 |
|---|---|---|---|---|---|
| TP-AL-01 | 分布式参数与优化器状态切分 | 框架/基础设施 | PyTorch FSDP 作原生参考;DeepSpeed ZeRO 作候选 | 在多卡间切分参数、梯度和优化器状态,支持检查点恢复 | 显存与吞吐取决于模型、拓扑、精度和版本;必须在目标集群实测 |
| TP-AL-02 | 指令微调 | 库/训练方法 | Transformers + PEFT LoRA 作资源受限参考;全参数 SFT 作对照 | 学习指令与回答格式,产出可版本化 Adapter 或新权重 | LoRA 不保证更好;Rank、目标模块、数据和基座模型都必须记录 |
| TP-AL-03 | 偏好对齐 | 库/算法 | TRL 中的 DPO 作离线偏好参考;奖励模型 + PPO 作高成本候选 | 利用偏好对调整回答的相对偏好,并进入独立安全与质量评测 | API 和训练默认值会演进;DPO/PPO 都不自动保证真实性或安全 |
| 技术点 ID | 候选方案 | 优点 | 缺点/代价 | 适用场景 | 不适用场景 | 选择结论与依据 |
|---|---|---|---|---|---|---|
| TP-AL-01 | PyTorch FSDP | 与 PyTorch 原生模块、检查点和分布式生态集成 | 切分策略、包裹粒度和检查点转换需严格测试 | PyTorch 原生团队、希望减少外部运行时 | 现有集群已深度标准化 DeepSpeed | 作默认基准,以可恢复性和目标集群基准验收 |
| TP-AL-01 | DeepSpeed ZeRO | 分片阶段和 Offload 选项丰富,常用于大模型训练 | 引入额外运行时、配置和兼容调试成本 | 已有 DeepSpeed 运维经验、需 ZeRO/Offload 能力 | 小模型单机或外部运行时收益未证明 | 只在显存、吞吐或现有平台证据支持时采用 |
| TP-AL-02 | PEFT LoRA | 只训练少量参数,Adapter 小且便于多任务管理 | 效果受 Rank 和目标模块影响,合并与服务化多一层版本 | 算力受限、快速领域适配、多 Adapter | 需大幅改变全模型能力且 LoRA 基准不达标 | 先作资源受限基线,由冻结评测集决定是否升级 |
| TP-AL-02 | 全参数 SFT | 所有参数均可更新,不需在推理时管理 Adapter | 训练显存、存储和回归成本高,灾难性遗忘风险更需监控 | 数据充分、资源允许且基准证明需要更大参数可塑性 | 小数据、小预算或快速多租户适配 | 只在 LoRA 在关键切片上不达标且成本可接受时采用 |
| TP-AL-03 | DPO | 使用离线偏好对,流程比奖励模型加在线 RL 简洁 | 对偏好数据偏差和参考模型敏感,不直接优化长轨迹 | 有高质量 chosen/rejected 数据,希望先建立离线基线 | 只有标量奖励或必须在线探索的任务 | 作为首个可复现偏好对齐候选,仍需独立安全与真实性评测 |
| TP-AL-03 | 奖励模型 + PPO | 可根据奖励对策进行在线更新,支持更丰富轨迹 | 同时维护多个模型,训练不稳定、成本与 Reward Hacking 风险更高 | 奖励可验证、团队有 RL 工程能力且离线方案不达标 | 数据、评测和稳定性门禁尚未建立 | 仅当 DPO 不满足可验证目标且风险可控时升级 |
6.5 架构与技术调用流程
图:架构|LLM 分阶段训练与发布证据链
替代文本: 版本化语料、指令数据和偏好对分别进入预训练、SFT 和偏好对齐阶段,分布式运行时承载计算,模型注册表保存数据、代码、配置与权重指纹,离线门禁决定是否进入灰度。
图表加载中…
读图结论: 三个训练阶段各有不同数据和目标,发布的真正交付物是“权重 + 全链路指纹 + 评测证据”,而不是一个模型目录。
架构图将训练方法、分布式运行时与发布门禁分层。FSDP 或 ZeRO 解决资源切分,不能代替数据质量、训练目标和回归评测。
图:技术调用流程|训练任务从数据门禁到模型发布
替代文本: 调度器先验证数据版本和泄漏门禁,再由分布式运行时启动训练;资源错误可从受验检查点恢复,数据门禁或评测失败则必须阻断,只有通过门禁的候选才注册发布。
图表加载中…
读图结论: 基础设施故障只能从受验检查点有限恢复,数据或质量门禁失败则不属于可重试错误。
时序图将“训练跑完”与“候选可发布”分开。恢复后还必须对齐优化器、随机状态和数据位置,否则不应宣称是等价续训。
7. 实际项目案例
示例项目,非真实仓库实现;方案中的阈值和收益必须通过业务评测确定。
7.1 背景、目标与约束
构建企业客服助手:产品知识每日变化,回答格式和语气需要统一,敏感问题必须遵循政策。数据包含产品文档、历史优质回复和经审核的偏好对;部分历史对话含个人信息,必须脱敏并确认用途授权。
7.2 方案选择与调用链
- 知识事实:使用 RAG 接入版本化产品文档,回答附来源;
- 格式与流程:用 SFT/LoRA 学习结构化回复、工具调用格式和升级人工规则;
- 偏好冲突:只有在存在可靠 chosen/rejected 标注时,才评估 DPO;
- 安全底线:训练外仍保留权限、敏感词、工具白名单和人工升级,不能把策略全部寄托在对齐权重;
- 在线链路:网关鉴权 → RAG 检索 → 组装 Prompt → 加载指定基座/适配器 → 生成 → 规则与引用校验 → 返回/转人工;
- 版本记录:每次响应写入模型、适配器、Prompt、知识索引和策略版本。
7.3 数据与训练设计
- 按用户/会话或时间边界切分,避免同一对话泄漏到训练和评测;
- 去重近似模板,防止少数高频句式支配训练;
- SFT 只对 Assistant 回答计算损失,并保留拒答、澄清和转人工的正例;
- 偏好对要求同一 Prompt 下可比较,记录标注准则与分歧;
- 使用能力集、格式集、事实引用集、安全红队集和历史回归集分别评测,不能只汇总一个平均分。
7.4 故障的现象—根因—解决—验证
| 现象 | 可能根因 | 解决方式 | 验证证据 |
|---|---|---|---|
| 模型复述用户 Prompt | SFT 标签未 Mask 输入部分 | 重建 Labels,只保留回答 Token | 人工样本对齐检查;训练批次可视化 |
| 新风格变好但通用能力退化 | 数据过窄、步数/学习率过大、全量漂移 | 混合保留数据、减小更新、用 LoRA/早停 | 通用基线与领域集同时回归 |
| 回答越来越长 | 偏好数据长度偏差或奖励长度投机 | 平衡长度、检查 LogP 聚合与标注准则 | 分长度切片胜率和输出长度分布 |
| 拒答率异常升高 | 安全偏好过强、数据分布失衡 | 分场景采样、校准目标、保留澄清正例 | 正常/敏感请求分别评测 |
| 部署后输出与离线不同 | 模板、Tokenizer、合并或量化不一致 | 制品绑定配置,逐层对比 Logits | 固定样本端到端 Golden Test |
| Adapter 加载成功但无效果 | 目标模块不匹配或被重复合并 | 校验模块名、参数差异和加载日志 | 加载前后 Logits 差异与权重哈希 |
7.4.1 故障演练:领域 SFT 改善风格却损害通用能力
- 现象与影响:领域回答格式和术语更统一,但通用问答、拒答边界或结构化输出明显退化,升级无法安全替换基线模型。
- 定位证据:绑定数据、Checkpoint、Adapter、模板和推理配置,对比领域集、通用基线、安全集与格式集;按训练步数重放中间 Checkpoint。
- 根因:训练数据过窄且重复,学习率或训练步数过大,保留数据不足;上线时还可能叠加错误模板、Adapter 合并或量化差异。
- 临时止损:停止扩量,回滚基线或上一个健康 Adapter;高风险流量临时路由未微调模型。
- 长期修复:补充代表性保留数据与困难负例,降低更新强度并使用早停;把模型、Adapter、Tokenizer、模板和量化制品共同版本化。
- 回归验证:同一评测协议下同时比较领域、通用、安全、格式和长度切片;只有关键门槛均满足才继续灰度。
- 防复发:发布必须关联数据谱系和多维回归报告;监控拒答率、格式成功率、长度、人工反馈与领域外失败分桶。
7.5 监控、发布与复盘
- 训练侧记录数据版本、有效 Token、Loss、梯度范数、学习率、Checkpoint 和评测切片;
- 服务侧记录版本组合、格式成功率、引用正确性、拒答/转人工率、安全事件和人工反馈;
- 候选模型先离线门禁,再影子流量/灰度,设置可回滚制品;
- 只有与基线在同一评测协议下比较后,才能描述提升或退化;本文不预设任何数值结果。
8. 方案权衡与常见误区
8.1 何时选什么
- 事实经常更新且需引用:优先 RAG;
- 输出格式、语气或工具协议稳定适配:考虑 SFT/LoRA;
- 大量无标注领域语料,希望适应领域分布:评估继续预训练;
- 存在可靠成对偏好,SFT 难表达相对取舍:评估 DPO/RLHF;
- 只需少量临时示例:先尝试 Prompt/Few-shot,避免不必要训练。
8.2 关键权衡
| 决策 | 收益 | 代价/风险 |
|---|---|---|
| 全量微调 | 更新自由度最高 | 显存、存储、遗忘与多租户部署成本高 |
| LoRA | 可训练状态小、适配器易切换 | rank/目标层限制表达能力,仍需完整基座 |
| QLoRA | 降低量化基座驻留内存 | 量化、算子、dtype 与训练稳定性更复杂 |
| DPO | 流程比显式 RM+PPO 简化 | 仍依赖参考模型、偏好质量和长度处理 |
| RLHF | 可优化显式奖励并在线采样 | 系统复杂、训练不稳定、奖励投机风险 |
8.3 常见错误回答
- “微调能把所有新知识准确写进模型”:知识更新不可控且难引用,需比较 RAG;
- “LoRA 只训练 1%,显存就只剩 1%”:忽略基座、激活和计算;
- “DPO 不需要奖励模型,所以没有对齐成本”:仍需偏好数据、参考策略和评测;
- “Loss 降低说明上线效果变好”:训练 Loss 不等于分布外能力、安全或业务指标;
- “对齐后模型就安全”:仍需要外部权限、内容策略、审计和人工兜底。
8.4 生产风险与防线
- 训练数据泄漏:按实体/时间切分、近重复检测、评测污染审计;
- 灾难性遗忘:保留通用回归集、控制更新幅度、早停与混合数据;
- 奖励投机/长度偏差:偏好集切片、长度控制、人审失败样本;
- 供应链风险:固定基座和数据许可,权重制品签名与哈希;
- 隐私与删除请求:最小化收集、脱敏、可追踪数据谱系,预先设计删除/重训流程;
- 不可回滚:基座与 Adapter 分离版本,保留旧路由和一键切换。
9. 面试题与参考答案
问题 1:预训练、SFT 和偏好对齐分别学什么?
- 难度:基础;
- 考察点:阶段目标与数据边界;
- 合格答案要点:预训练学通用分布,SFT 模仿指令示范,偏好阶段学习相对选择;
- 优秀答案加分项:指出三者可能共享交叉熵形式但监督信号、Mask 和数据不同;
- 常见错误:把所有训练都叫微调;
- 可继续追问:继续预训练和 SFT 如何区分?
问题 2:LoRA 为什么能减少训练成本?
- 难度:中级;
- 考察点:低秩公式、参数量与显存构成;
- 合格答案要点:冻结
,训练 ,参数从 降为 ; - 优秀答案加分项:说明优化器/梯度状态减少,但激活与基座计算仍在;
- 常见错误:认为 rank 越大一定越好;
- 可继续追问:目标模块和 rank 如何用实验选择?
问题 3:DPO 与经典 RLHF 的核心差异是什么?
- 难度:高级;
- 考察点:偏好目标和训练流程;
- 合格答案要点:DPO 直接优化 chosen/rejected 相对参考策略的概率差;经典 RLHF 显式训练奖励模型并用 PPO 等优化;
- 优秀答案加分项:写出 DPO Log-Ratio、说明
、长度偏差和参考策略; - 常见错误:说 DPO 完全没有奖励建模含义或参考约束;
- 可继续追问:偏好对标签噪声会怎样影响两者?
问题 4:企业知识问答应该微调还是 RAG?
- 难度:高级;
- 考察点:场景拆解和组合方案;
- 合格答案要点:更新知识与引用优先 RAG,行为格式可用 SFT/LoRA,两者可组合;
- 优秀答案加分项:提出时效、权限、删除、评测、延迟、成本和回滚指标;
- 常见错误:不问需求就二选一;
- 可继续追问:如果 RAG 召回正确但回答格式不稳定,怎么处理?
10. 递进追问
- 基础概念:Base、SFT、Instruct/Aligned 模型的区别是什么?
- 目标函数:因果语言模型 Logits 和 Labels 如何 Shift,SFT 为什么要 Mask Prompt?
- 参数推导:给定
,计算 LoRA 参数量和增量矩阵秩上界; - 训练边界:LoRA 可训练参数很少,为什么长序列训练仍可能 OOM?
- 偏好工程:DPO 输出变长且离线胜率上升,你如何判断是真提升还是长度偏差?
- 系统复盘:一个客服 Adapter 灰度后拒答率升高,如何从数据、目标、制品和线上链路逐层定位并安全回滚?
11. 实践任务
- [ ] 最小实现:运行本文 LoRA 代码,验证基座无梯度、Loss 下降和合并前后输出一致;
- [ ] 公式练习:为三个不同线性层计算全量与 LoRA 可训练参数量,解释何时优势变小;
- [ ] 标签实验:构造一条 Chat 样本,打印 Prompt/Answer Token 及
ignore_indexMask; - [ ] 方案设计:针对“知识更新”“格式适配”“偏好冲突”分别选择 RAG/SFT/DPO 并写拒绝其他方案的理由;
- [ ] 故障注入:交换 chosen/rejected、删除 EOS、重复合并 Adapter,记录现象和检测方式;
- [ ] 评测设计:建立能力、领域、事实、安全和历史回归五类不重叠测试集;
- [ ] 面试口述:在一分钟内讲清预训练 → SFT → 偏好对齐,并接受六层追问。
12. 相关知识与参考资料
12.1 相关知识
- 前置输入:Token 与 Embedding;
- 核心架构:Attention 与 Transformer;
- 部署阶段:LLM 推理与服务优化。
12.2 一手参考资料
以下资料均于 2026-07-10 访问。Hugging Face main 文档描述的是持续演进版本,落地时必须锁定并重新核对安装版本。
- Brown et al., Language Models are Few-Shot Learners,自回归大模型预训练论文;
- Hu et al., LoRA: Low-Rank Adaptation of Large Language Models,LoRA 原始论文;
- Dettmers et al., QLoRA: Efficient Finetuning of Quantized LLMs,QLoRA 原始论文;
- Ouyang et al., Training language models to follow instructions with human feedback,InstructGPT/RLHF 论文;
- Rafailov et al., Direct Preference Optimization: Your Language Model is Secretly a Reward Model,DPO 原始论文;
- Hugging Face, PEFT 官方文档与 LoRA API;
- Hugging Face TRL, DPO Trainer 官方文档;
- Hugging Face TRL, SFT Trainer 官方文档。
13. 简明总结
一句话记忆: 预训练学通用分布,SFT 学示范行为,偏好优化学相对取舍;LoRA 只压缩可训练更新,不替代数据、评测和生产防线。
- CLM 预测下一个 Token,SFT 常只让回答 Token 贡献交叉熵;
- LoRA 用
表示低秩增量,参数量为 ; - RAG 适合可更新、可引用知识,SFT 适合行为格式,DPO/RLHF 适合偏好目标;
- 项目易错点是数据泄漏、标签 Mask 错误、遗忘、长度偏差、Adapter/Tokenizer 制品不一致;
- 面试必须讲清目标函数、显存因果链、方案边界以及如何用独立评测和灰度回滚证明安全上线。