Skip to content

LLM 预训练、微调与对齐

目录

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 把权重更新限制为 ΔW=(α/r)BA,将 doutdin 个可训练参数降为 r(din+dout)。经典 RLHF 先收集偏好、训练奖励模型,再用带参考模型约束的强化学习优化策略;DPO 则直接从 chosen/rejected 对优化策略相对参考模型的偏好差,不显式训练奖励模型和运行 PPO。工程上关键不是“用了哪种微调”,而是数据许可与去重、模板和 Tokenizer 一致、标签 Mask、基线/安全评测、Checkpoint 可追溯、发布回滚以及训练—服务精度一致。

3. 面试官为什么问

  • 方法边界:是否会根据“补知识、改行为、调偏好、降成本”选择不同手段;
  • 数学与实现:是否理解训练目标、梯度流、低秩约束、参考模型和偏好对;
  • 数据工程:是否关注质量、许可、泄漏、重复、模板和分布偏移;
  • 生产经验:能否设计评测、灰度、回滚和模型/数据/代码版本追踪;
  • 高级区分度:能否指出 PEFT 降低的是可训练参数相关成本,不代表训练或部署的所有显存都按同样比例下降。

4. 概念与边界

小白先这样理解:一位厨师如何从会做菜到懂顾客

学徒先大量阅读菜谱,根据前面的步骤猜下一步会做什么,慢慢学会食材、火候和常见做法。师傅再拿出“顾客点单—标准成品”示范,教他按要求出菜。最后让顾客在两盘菜中选更喜欢的一盘,学徒才逐步调整风格、口味与拒绝边界。

生活角色 → 技术概念: 大量菜谱与“猜下一步”对应预训练,标准点单示范对应 SFT,两盘菜的偏好选择对应 DPO/RLHF 中的偏好信号,厨师手艺的变化对应模型权重或适配器更新。

类比边界: 顾客“更喜欢”不等于事实正确、公平或安全,就像高评分不能代替食品安全检查。训练效果仍受数据质量、目标函数、分布偏移和独立评测约束。

4.1 阶段定义

阶段典型数据主要目标主要改变
预训练大规模未标注文本/代码预测下一个 Token 等自监督目标通用表示、语言与世界模式
继续预训练领域未标注语料保持自监督目标适应领域分布领域词汇与分布
SFTPrompt—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 序列 x1:T,自回归模型分解联合概率:

pθ(x1:T)=t=1Tpθ(xtx<t)

训练最小化负对数似然:

LCLM(θ)=1i,tmi,ti=1Nt=1Timi,tlogpθ(xi,txi,<t)

其中 mi,t{0,1} 是有效 Token Mask,Padding 不参与损失。实现中 Logits 常为 [B,T,V],标签为 [B,T],预测第 t 个 Token 的 Logit 与第 t+1 个标签对齐,因此必须正确 Shift。

因果链是:数据分布与采样权重 → 模型看到什么模式 → 交叉熵优化什么概率 → 下游行为与偏差。扩大数据量不能自动修复污染、重复、泄漏或不平衡。

5.2 SFT 与标签 Mask

聊天样本可序列化为:

text
<system>规则</system><user>问题</user><assistant>回答</assistant>

通常只让 Assistant 回答部分贡献损失:Prompt 对应标签设为 ignore_index,回答 Token 保留真实 ID。若错误地训练 Prompt Token,模型会浪费容量复现用户输入;若模板或终止 Token 错误,可能出现角色串线、无限生成或不会停止。

SFT 仍是最大似然学习:它擅长模仿示范分布,不保证识别所有事实真伪,也不保证训练集之外的安全边界。

5.3 LoRA 的低秩约束、维度与参数量

对线性层 y=Wx,设 WRdout×din。LoRA 冻结 W0,学习:

W=W0+ΔW,ΔW=αrBAARr×din,BRdout×r,rank(BA)r

全量训练该层需更新 doutdin 个权重;LoRA 更新 r(din+dout) 个参数。只有当 rmin(din,dout) 时参数优势明显。

LoRA 降低梯度和优化器状态的可训练参数规模,但前向仍需运行基座,反向仍需保存/重算必要激活;目标模块、序列长度、批大小、精度、Checkpointing 和优化器共同决定实际显存。不能用“可训练参数减少比例”直接等同于“总显存减少比例”。

5.4 RLHF 与 DPO

经典 InstructGPT 风格 RLHF 流程是:SFT 初始化策略 → 收集回答偏好 → 训练奖励模型 → 用 PPO 等算法优化策略,同时对参考策略施加 KL 约束以避免过度漂移。

DPO 使用偏好三元组 (x,yw,yl),其中 yw 为 preferred/chosen,yl 为 rejected。一个常见写法为:

LDPO=E[logσ(β(logπθ(ywx)πref(ywx)logπθ(ylx)πref(ylx)))]

这里序列 Log Probability 是回答 Token 条件 Log Probability 的和(或由实现规定的聚合);πref 是参考策略。常见 DPO 目标中的 β 对应相对参考策略的 KL 正则强度/温度:通常 β 越大,参考约束越强、允许的策略偏离越小;同时它会缩放偏好 Logit,影响梯度尺度和训练动态,具体取值语义要以所用实现为准。DPO 省去显式奖励模型和在线 RL 采样流程,但仍依赖偏好数据质量、参考模型、长度处理与超参数,不能称为“零成本对齐”。

教学插图:预训练、SFT 与偏好对齐的目标差异

预训练建立能力底座,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 关键实现说明

  1. base 参数 requires_grad=False,验证时还要确认优化器参数组不包含基座;
  2. A 随机、B 为零使初始 ΔW=0,一开始不改变基座输出;
  3. B @ A 的形状为 [dout,din],可在部署前合并到基座;
  4. 合并后需验证输出容差、dtype、适配器版本与是否重复合并;
  5. 真实 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-01PyTorch FSDP与 PyTorch 原生模块、检查点和分布式生态集成切分策略、包裹粒度和检查点转换需严格测试PyTorch 原生团队、希望减少外部运行时现有集群已深度标准化 DeepSpeed作默认基准,以可恢复性和目标集群基准验收
TP-AL-01DeepSpeed ZeRO分片阶段和 Offload 选项丰富,常用于大模型训练引入额外运行时、配置和兼容调试成本已有 DeepSpeed 运维经验、需 ZeRO/Offload 能力小模型单机或外部运行时收益未证明只在显存、吞吐或现有平台证据支持时采用
TP-AL-02PEFT LoRA只训练少量参数,Adapter 小且便于多任务管理效果受 Rank 和目标模块影响,合并与服务化多一层版本算力受限、快速领域适配、多 Adapter需大幅改变全模型能力且 LoRA 基准不达标先作资源受限基线,由冻结评测集决定是否升级
TP-AL-02全参数 SFT所有参数均可更新,不需在推理时管理 Adapter训练显存、存储和回归成本高,灾难性遗忘风险更需监控数据充分、资源允许且基准证明需要更大参数可塑性小数据、小预算或快速多租户适配只在 LoRA 在关键切片上不达标且成本可接受时采用
TP-AL-03DPO使用离线偏好对,流程比奖励模型加在线 RL 简洁对偏好数据偏差和参考模型敏感,不直接优化长轨迹有高质量 chosen/rejected 数据,希望先建立离线基线只有标量奖励或必须在线探索的任务作为首个可复现偏好对齐候选,仍需独立安全与真实性评测
TP-AL-03奖励模型 + PPO可根据奖励对策进行在线更新,支持更丰富轨迹同时维护多个模型,训练不稳定、成本与 Reward Hacking 风险更高奖励可验证、团队有 RL 工程能力且离线方案不达标数据、评测和稳定性门禁尚未建立仅当 DPO 不满足可验证目标且风险可控时升级

6.5 架构与技术调用流程

图:架构|LLM 分阶段训练与发布证据链

替代文本: 版本化语料、指令数据和偏好对分别进入预训练、SFT 和偏好对齐阶段,分布式运行时承载计算,模型注册表保存数据、代码、配置与权重指纹,离线门禁决定是否进入灰度。

图表加载中…

读图结论: 三个训练阶段各有不同数据和目标,发布的真正交付物是“权重 + 全链路指纹 + 评测证据”,而不是一个模型目录。

架构图将训练方法、分布式运行时与发布门禁分层。FSDP 或 ZeRO 解决资源切分,不能代替数据质量、训练目标和回归评测。

图:技术调用流程|训练任务从数据门禁到模型发布

替代文本: 调度器先验证数据版本和泄漏门禁,再由分布式运行时启动训练;资源错误可从受验检查点恢复,数据门禁或评测失败则必须阻断,只有通过门禁的候选才注册发布。

图表加载中…

读图结论: 基础设施故障只能从受验检查点有限恢复,数据或质量门禁失败则不属于可重试错误。

时序图将“训练跑完”与“候选可发布”分开。恢复后还必须对齐优化器、随机状态和数据位置,否则不应宣称是等价续训。

7. 实际项目案例

示例项目,非真实仓库实现;方案中的阈值和收益必须通过业务评测确定。

7.1 背景、目标与约束

构建企业客服助手:产品知识每日变化,回答格式和语气需要统一,敏感问题必须遵循政策。数据包含产品文档、历史优质回复和经审核的偏好对;部分历史对话含个人信息,必须脱敏并确认用途授权。

7.2 方案选择与调用链

  1. 知识事实:使用 RAG 接入版本化产品文档,回答附来源;
  2. 格式与流程:用 SFT/LoRA 学习结构化回复、工具调用格式和升级人工规则;
  3. 偏好冲突:只有在存在可靠 chosen/rejected 标注时,才评估 DPO;
  4. 安全底线:训练外仍保留权限、敏感词、工具白名单和人工升级,不能把策略全部寄托在对齐权重;
  5. 在线链路:网关鉴权 → RAG 检索 → 组装 Prompt → 加载指定基座/适配器 → 生成 → 规则与引用校验 → 返回/转人工;
  6. 版本记录:每次响应写入模型、适配器、Prompt、知识索引和策略版本。

7.3 数据与训练设计

  • 按用户/会话或时间边界切分,避免同一对话泄漏到训练和评测;
  • 去重近似模板,防止少数高频句式支配训练;
  • SFT 只对 Assistant 回答计算损失,并保留拒答、澄清和转人工的正例;
  • 偏好对要求同一 Prompt 下可比较,记录标注准则与分歧;
  • 使用能力集、格式集、事实引用集、安全红队集和历史回归集分别评测,不能只汇总一个平均分。

7.4 故障的现象—根因—解决—验证

现象可能根因解决方式验证证据
模型复述用户 PromptSFT 标签未 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 为什么能减少训练成本?

  • 难度:中级;
  • 考察点:低秩公式、参数量与显存构成;
  • 合格答案要点:冻结 W0,训练 BA,参数从 doutdin 降为 r(din+dout)
  • 优秀答案加分项:说明优化器/梯度状态减少,但激活与基座计算仍在;
  • 常见错误:认为 rank 越大一定越好;
  • 可继续追问:目标模块和 rank 如何用实验选择?

问题 3:DPO 与经典 RLHF 的核心差异是什么?

  • 难度:高级;
  • 考察点:偏好目标和训练流程;
  • 合格答案要点:DPO 直接优化 chosen/rejected 相对参考策略的概率差;经典 RLHF 显式训练奖励模型并用 PPO 等优化;
  • 优秀答案加分项:写出 DPO Log-Ratio、说明 β、长度偏差和参考策略;
  • 常见错误:说 DPO 完全没有奖励建模含义或参考约束;
  • 可继续追问:偏好对标签噪声会怎样影响两者?

问题 4:企业知识问答应该微调还是 RAG?

  • 难度:高级;
  • 考察点:场景拆解和组合方案;
  • 合格答案要点:更新知识与引用优先 RAG,行为格式可用 SFT/LoRA,两者可组合;
  • 优秀答案加分项:提出时效、权限、删除、评测、延迟、成本和回滚指标;
  • 常见错误:不问需求就二选一;
  • 可继续追问:如果 RAG 召回正确但回答格式不稳定,怎么处理?

10. 递进追问

  1. 基础概念:Base、SFT、Instruct/Aligned 模型的区别是什么?
  2. 目标函数:因果语言模型 Logits 和 Labels 如何 Shift,SFT 为什么要 Mask Prompt?
  3. 参数推导:给定 din,dout,r,计算 LoRA 参数量和增量矩阵秩上界;
  4. 训练边界:LoRA 可训练参数很少,为什么长序列训练仍可能 OOM?
  5. 偏好工程:DPO 输出变长且离线胜率上升,你如何判断是真提升还是长度偏差?
  6. 系统复盘:一个客服 Adapter 灰度后拒答率升高,如何从数据、目标、制品和线上链路逐层定位并安全回滚?

11. 实践任务

  • [ ] 最小实现:运行本文 LoRA 代码,验证基座无梯度、Loss 下降和合并前后输出一致;
  • [ ] 公式练习:为三个不同线性层计算全量与 LoRA 可训练参数量,解释何时优势变小;
  • [ ] 标签实验:构造一条 Chat 样本,打印 Prompt/Answer Token 及 ignore_index Mask;
  • [ ] 方案设计:针对“知识更新”“格式适配”“偏好冲突”分别选择 RAG/SFT/DPO 并写拒绝其他方案的理由;
  • [ ] 故障注入:交换 chosen/rejected、删除 EOS、重复合并 Adapter,记录现象和检测方式;
  • [ ] 评测设计:建立能力、领域、事实、安全和历史回归五类不重叠测试集;
  • [ ] 面试口述:在一分钟内讲清预训练 → SFT → 偏好对齐,并接受六层追问。

12. 相关知识与参考资料

12.1 相关知识

12.2 一手参考资料

以下资料均于 2026-07-10 访问。Hugging Face main 文档描述的是持续演进版本,落地时必须锁定并重新核对安装版本。

  1. Brown et al., Language Models are Few-Shot Learners,自回归大模型预训练论文;
  2. Hu et al., LoRA: Low-Rank Adaptation of Large Language Models,LoRA 原始论文;
  3. Dettmers et al., QLoRA: Efficient Finetuning of Quantized LLMs,QLoRA 原始论文;
  4. Ouyang et al., Training language models to follow instructions with human feedback,InstructGPT/RLHF 论文;
  5. Rafailov et al., Direct Preference Optimization: Your Language Model is Secretly a Reward Model,DPO 原始论文;
  6. Hugging Face, PEFT 官方文档LoRA API
  7. Hugging Face TRL, DPO Trainer 官方文档
  8. Hugging Face TRL, SFT Trainer 官方文档

13. 简明总结

一句话记忆: 预训练学通用分布,SFT 学示范行为,偏好优化学相对取舍;LoRA 只压缩可训练更新,不替代数据、评测和生产防线。

  • CLM 预测下一个 Token,SFT 常只让回答 Token 贡献交叉熵;
  • LoRA 用 (α/r)BA 表示低秩增量,参数量为 r(din+dout)
  • RAG 适合可更新、可引用知识,SFT 适合行为格式,DPO/RLHF 适合偏好目标;
  • 项目易错点是数据泄漏、标签 Mask 错误、遗忘、长度偏差、Adapter/Tokenizer 制品不一致;
  • 面试必须讲清目标函数、显存因果链、方案边界以及如何用独立评测和灰度回滚证明安全上线。