机器学习 & 大模型微调 面试八股文完整指南
涵盖 传统机器学习 和 LLM Post-Training 微调 两大核心板块,适用于算法工程师 / AI 工程师面试准备。
第一部分:传统机器学习
一、核心基础概念
1.1 监督学习 vs 无监督学习 vs 半监督学习
| 类型 | 定义 | 典型算法 |
|---|---|---|
| 监督学习 | 训练数据有标签(输入-输出对) | LR、SVM、决策树、随机森林、XGBoost |
| 无监督学习 | 训练数据无标签,发现隐藏结构 | K-Means、DBSCAN、PCA、GMM |
| 半监督学习 | 少量有标签 + 大量无标签数据 | 标签传播、自训练 |
| 强化学习 | 智能体与环境交互,最大化累积奖励 | Q-Learning、PPO、DQN |
1.2 偏差-方差权衡(Bias-Variance Tradeoff)⭐ 超高频
偏差(Bias): 模型预测值与真实值之间的差距。高偏差 = 模型太简单 = 欠拟合。
方差(Variance): 模型对训练数据微小变化的敏感程度。高方差 = 模型太复杂 = 过拟合。
总误差分解:
| 情况 | 训练误差 | 测试误差 | 解决方案 |
|---|---|---|---|
| 高偏差(欠拟合) | 高 | 高(与训练误差接近) | 增加模型复杂度、增加特征、减少正则化、延长训练 |
| 高方差(过拟合) | 低 | 高(远大于训练误差) | 增加数据、增强正则化、降低复杂度、集成学习、Early Stopping |
| 理想状态 | 低 | 低(与训练误差接近) | — |
1.3 过拟合与欠拟合
过拟合的常见解决方法:
- 正则化(L1 / L2 / Elastic Net)
- 增加训练数据 / 数据增强
- Dropout(神经网络)
- Early Stopping(监控验证集损失,提前停止训练)
- 交叉验证(更可靠地评估模型泛化能力)
- 剪枝(决策树)
- 降低模型复杂度(减少层数、参数、特征)
1.4 正则化(Regularization)⭐ 高频
正则化通过在损失函数中添加惩罚项,限制模型复杂度,防止过拟合。
| 类型 | 惩罚项 | 效果 | 别名 |
|---|---|---|---|
| L1 正则化 | λ Σ|wᵢ| | 产生稀疏解(部分权重变为 0)→ 特征选择 | Lasso |
| L2 正则化 | λ Σwᵢ² | 权重整体缩小但不为 0 → 权重衰减 | Ridge |
| Elastic Net | α·L1 + (1-α)·L2 | 兼顾稀疏性和稳定性 | 弹性网络 |
为什么 L1 产生稀疏解而 L2 不会?
几何解释:L1 正则化的约束区域是菱形(顶点在坐标轴上),损失函数的等高线与菱形的交点更容易落在坐标轴上(某些参数恰好为 0)。L2 的约束区域是圆形,交点通常不在轴上,所以参数不会变为 0,只会变小。
正则化的贝叶斯解释:
- L2 正则化 ↔ 权重的高斯先验(MAP 估计)
- L1 正则化 ↔ 权重的拉普拉斯先验
1.5 交叉验证(Cross-Validation)
| 方法 | 原理 | 适用场景 |
|---|---|---|
| Hold-out | 一次性划分训练集/验证集/测试集 | 数据量大 |
| K-Fold | 分 K 份,轮流 1 份验证,K-1 份训练,取平均 | 最常用,K=5 或 10 |
| Stratified K-Fold | K-Fold 改进,保证每折类别比例一致 | 类别不平衡 |
| LOOCV | K=N,每次留 1 个样本做验证 | 数据量极小 |
K-Fold 的优点: 充分利用所有数据进行训练和验证,减少评估方差,结果更可靠。
K-Fold 的缺点: 计算量为 Hold-out 的 K 倍。
1.6 评估指标
分类指标
| 指标 | 公式 | 含义 | 适用场景 |
|---|---|---|---|
| Accuracy | (TP+TN) / (TP+TN+FP+FN) | 整体正确率 | 类别平衡 |
| Precision | TP / (TP+FP) | 预测为正中真正为正的比例 | 关注误报(如垃圾邮件检测) |
| Recall | TP / (TP+FN) | 真正为正中被找回的比例 | 关注漏报(如疾病检测) |
| F1 Score | 2·P·R / (P+R) | P 和 R 的调和均值 | P 和 R 都重要时 |
| AUC-ROC | ROC 曲线下面积 | 分类器的排序能力 | 阈值无关的整体评估 |
| AP / mAP | PR 曲线下面积 | — | 类别极不平衡时优于 AUC |
混淆矩阵:
ROC 曲线: 横轴 FPR = FP/(FP+TN),纵轴 TPR = TP/(TP+FN)。AUC 越接近 1 越好。
回归指标
| 指标 | 公式 | 说明 |
|---|---|---|
| MSE | Σ(yᵢ - ŷᵢ)² / n | 对异常值敏感 |
| RMSE | √MSE | 与原始数据同量纲 |
| MAE | Σ|yᵢ - ŷᵢ| / n | 对异常值鲁棒 |
| R² | 1 - SS_res / SS_tot | 模型解释的方差比例,越接近 1 越好 |
二、经典算法详解
2.1 逻辑回归(Logistic Regression)⭐ 必考
本质: 虽然名字带"回归",但它是一种分类算法。
原理:
- 先做线性组合:z = wᵀx + b
- 通过 Sigmoid 函数 映射到 (0,1):σ(z) = 1 / (1 + e⁻ᶻ)
- 输出值作为 P(Y=1|X) 的概率
损失函数: 交叉熵(Cross-Entropy)/ 对数损失
为什么不用 MSE?因为 Sigmoid + MSE 组合是非凸函数,有多个局部最小值,无法保证收敛到全局最优。交叉熵是凸函数。
优化方法: 梯度下降、牛顿法、L-BFGS
多分类扩展:
- OvR(One-vs-Rest):训练 K 个二分类器
- Softmax 回归:直接做多分类,输出 K 类概率
优点: 简单高效、可解释性强(输出概率)、适合大规模在线学习、容易正则化
缺点: 线性模型,无法处理复杂非线性关系(需手动特征工程);对异常值敏感
2.2 支持向量机(SVM)⭐ 必考
核心思想: 找到一个最大间隔的超平面,将不同类别的数据分开。
关键概念:
- 支持向量: 离决策超平面最近的那些样本点,决定了超平面的位置
- 间隔(Margin): 两类支持向量到超平面的距离之和
- 硬间隔: 严格要求所有样本正确分类(数据线性可分)
- 软间隔: 引入松弛变量 ξᵢ 和惩罚参数 C,允许少量错分
目标函数(软间隔):
- C 大 → 对错分惩罚严厉 → 倾向硬间隔 → 可能过拟合
- C 小 → 容忍更多错分 → 更大间隔 → 可能欠拟合
核函数(Kernel):
| 核函数 | 公式 | 适用场景 |
|---|---|---|
| 线性核 | K(x,y) = xᵀy | 线性可分或特征维度已经很高 |
| 多项式核 | K(x,y) = (xᵀy + c)ᵈ | 需要一定非线性 |
| RBF(高斯核) | K(x,y) = exp(-γ||x-y||²) | 最常用,万能近似 |
| Sigmoid 核 | K(x,y) = tanh(αxᵀy + c) | 类似神经网络 |
核技巧的本质: 无需显式计算高维映射 φ(x),而是直接在原始空间计算内积 K(x,y) = φ(x)ᵀφ(y),大幅降低计算成本。
SVM 优缺点:
| 优点 | 缺点 |
|---|---|
| 小样本表现好 | 大数据训练慢 O(n²)~O(n³) |
| 高维空间有效 | 核函数和参数选择困难 |
| 有理论保证(结构风险最小化) | 不直接输出概率 |
| 支持向量决定模型,鲁棒性好 | 对缺失值敏感 |
2.3 决策树(Decision Tree)⭐ 必考
基本思想: 通过递归选择最优特征将数据划分为子集,构建树形结构。
三种经典算法对比:
| 算法 | 划分准则 | 树类型 | 特点 |
|---|---|---|---|
| ID3 | 信息增益 | 多叉树 | 偏向取值多的特征;不能处理连续值和缺失值 |
| C4.5 | 信息增益率 | 多叉树 | 修正 ID3 偏向;可处理连续值和缺失值 |
| CART | 基尼指数(分类)/ MSE(回归) | 二叉树 | 可做分类和回归;生成二叉树 |
信息论基础:
剪枝策略:
| 策略 | 时机 | 特点 |
|---|---|---|
| 预剪枝 | 树生长过程中 | 设置最大深度、最小样本数、最小增益阈值等提前停止 |
| 后剪枝 | 树生成完毕后 | 自底向上,用验证集评估剪枝前后效果,效果通常更好 |
优缺点:
| 优点 | 缺点 |
|---|---|
| 可解释性强(可视化) | 容易过拟合 |
| 不需要特征缩放 | 对数据小变化敏感(高方差) |
| 能处理数值和类别特征 | 贪心算法,非全局最优 |
2.4 集成学习(Ensemble Learning)⭐ 重中之重
Bagging vs Boosting
| Bagging | Boosting | |
|---|---|---|
| 核心思想 | 并行训练多个模型,结果投票/平均 | 串行训练,每轮纠正上一轮错误 |
| 采样方式 | 有放回抽样(Bootstrap) | 调整样本权重(或拟合残差) |
| 主要降低 | 方差(Variance) | 偏差(Bias) |
| 基学习器 | 强学习器(如深决策树) | 弱学习器(如浅决策树) |
| 并行 | ✅ 可并行 | ❌ 必须串行 |
| 过拟合风险 | 低 | 相对高(需控制迭代轮数) |
| 代表算法 | Random Forest | AdaBoost, GBDT, XGBoost, LightGBM |
随机森林(Random Forest)
= Bagging + 决策树 + 特征随机采样
两重随机性(关键!):
- 样本随机:Bootstrap 有放回抽样生成每棵树的训练集
- 特征随机:每个节点分裂时随机选择特征子集(通常 √p 个特征)
优点:
- 精度高、泛化好、不容易过拟合
- 可评估特征重要性
- 可并行训练,速度快
- 对异常值和噪声鲁棒
缺点:
- 可解释性差(黑盒模型)
- 对高噪声数据可能过拟合
- 占用内存较多(存储多棵树)
GBDT vs XGBoost vs LightGBM ⭐ 超高频
| 特性 | GBDT | XGBoost | LightGBM |
|---|---|---|---|
| 导数信息 | 一阶梯度 | 一阶 + 二阶(泰勒展开) | 一阶 + 二阶 |
| 正则化 | 无显式正则 | L1 + L2 正则项 | L1 + L2 正则项 |
| 缺失值 | 不自动处理 | 自动处理(学习默认方向) | 自动处理 |
| 树生长策略 | Level-wise | Level-wise | Leaf-wise(更高效) |
| 并行 | 不支持 | 特征级并行 | 特征级并行 |
| 速度 | 慢 | 中 | 快 |
| 内存 | — | 较高 | 更低(直方图算法) |
| 特有技术 | — | 列抽样、加权分位数 | GOSS + EFB |
| 小数据集 | — | 通常更好 | 可能过拟合 |
| 大数据集 | — | 较好 | 最好 |
XGBoost 相比 GBDT 的核心改进:
- 二阶泰勒展开:使用损失函数的一阶和二阶导数,更精确的优化
- 正则化项:目标函数加入叶子节点数量和权重的正则化
- 列抽样:类似 Random Forest 的随机特征采样
- 自动处理缺失值:训练时学习缺失值的最优划分方向
- 支持并行:特征粒度的并行计算
LightGBM 相比 XGBoost 的核心改进:
- Leaf-wise 生长:每次选增益最大的叶子分裂(XGBoost 是 Level-wise 逐层)
- GOSS(Gradient-based One-Side Sampling):保留大梯度样本 + 随机采样小梯度样本
- EFB(Exclusive Feature Bundling):将互斥特征捆绑在一起,减少特征数
- 直方图算法:将连续特征离散化为直方图,减少计算和内存
Stacking
- 训练多个不同类型的基模型
- 用基模型的预测结果作为新特征,训练一个元学习器(Meta-Learner)
- 可以组合不同类型模型的优势
2.5 KNN(K-Nearest Neighbors)
| 要点 | 内容 |
|---|---|
| 原理 | 找到距离最近的 K 个邻居,多数投票(分类)/ 加权平均(回归) |
| 距离度量 | 欧氏距离、曼哈顿距离、闵可夫斯基距离、余弦相似度 |
| K 值选择 | K 太小 → 过拟合(对噪声敏感);K 太大 → 欠拟合(边界模糊) |
| 类型 | 懒学习(Lazy Learning),无显式训练过程 |
| 优点 | 简单直观、无需训练、天然支持多分类 |
| 缺点 | 预测慢(需遍历所有样本)、高维数据效果差(维度灾难)、对特征尺度敏感(需标准化) |
| 加速 | KD-Tree、Ball-Tree、LSH(局部敏感哈希) |
2.6 朴素贝叶斯(Naive Bayes)
核心公式(贝叶斯定理):
“朴素"假设: 所有特征在给定类别下条件独立。
常见变体:
| 变体 | P(xᵢ|Y) 的分布假设 | 适用数据 |
|---|---|---|
| 高斯朴素贝叶斯 | 高斯分布 | 连续特征 |
| 多项式朴素贝叶斯 | 多项式分布 | 文本(词频) |
| 伯努利朴素贝叶斯 | 伯努利分布 | 二值特征 |
优点: 速度快、小数据效果好、适合文本分类(垃圾邮件、情感分析)
缺点: 独立性假设过强;对特征相关性敏感;零概率问题(需拉普拉斯平滑)
2.7 聚类算法
K-Means
流程:
- 随机初始化 K 个聚类中心
- 将每个样本分配到最近的中心
- 更新每个中心为所属样本的均值
- 重复步骤 2-3 直到收敛
K 值选择:
- 肘部法则(Elbow Method):画 K vs SSE 曲线,找"肘部"拐点
- 轮廓系数(Silhouette Score):衡量簇内紧密度和簇间分离度
缺点: 需要预设 K;对初始化敏感;只能发现球形簇;对异常值敏感
改进: K-Means++(更好的初始化策略)、Mini-Batch K-Means(更快)
DBSCAN
- 基于密度的聚类,不需要预设 K
- 参数:ε(邻域半径)、MinPts(最小邻域点数)
- 能发现任意形状的簇,能自动识别噪声点
- 缺点:对参数 ε 和 MinPts 敏感;高维数据效果差
K-Means vs DBSCAN
| K-Means | DBSCAN | |
|---|---|---|
| 需要预设 K | ✅ 是 | ❌ 否 |
| 簇形状 | 球形 | 任意形状 |
| 异常值处理 | 无 | 自动标记噪声点 |
| 时间复杂度 | O(nKt) | O(n log n) |
2.8 降维算法
PCA(主成分分析)
目标: 找到数据方差最大的正交方向(主成分),投影到低维空间。
步骤:
- 数据标准化(零均值)
- 计算协方差矩阵
- 特征值分解(或 SVD)
- 选取前 k 个最大特征值对应的特征向量
- 将数据投影到这 k 个方向上
关键点:
- 无监督降维,不考虑标签信息
- 第一主成分 = 数据方差最大的方向
- 主成分之间正交(不相关)
- 信息损失 = 被丢弃的特征值之和 / 总特征值之和
PCA vs LDA
| PCA | LDA | |
|---|---|---|
| 类型 | 无监督 | 有监督 |
| 目标 | 最大化投影后方差 | 最大化类间距 / 最小化类内距 |
| 适用 | 降维、去噪、可视化 | 分类前的降维 |
三、优化算法
3.1 梯度下降(Gradient Descent)⭐ 必考
核心思想: 沿着损失函数梯度的反方向,迭代更新参数,逐步逼近最小值。
参数更新公式:
三种变体
| 变体 | 每次用多少数据 | 优点 | 缺点 |
|---|---|---|---|
| BGD(批量) | 全部训练数据 | 梯度准确、稳定收敛 | 速度慢、内存大 |
| SGD(随机) | 1 个样本 | 速度快、可逃出局部最小 | 梯度噪声大、不稳定 |
| Mini-Batch GD | 一小批(32/64/128) | 最常用,平衡速度和稳定性 | 需要选择 batch size |
学习率
- 太大:震荡甚至发散,无法收敛
- 太小:收敛速度极慢
- 策略:学习率衰减(Step Decay、Cosine Annealing)、Warm-up、自适应学习率
3.2 常见优化器对比
| 优化器 | 核心思想 | 特点 |
|---|---|---|
| SGD | 基础随机梯度下降 | 简单但收敛慢 |
| SGD + Momentum | 累积历史梯度方向,加入"惯性” | 加速收敛、减少震荡 |
| Adagrad | 自适应学习率(频繁更新的参数降低学习率) | 适合稀疏数据,但学习率会持续衰减 |
| RMSprop | Adagrad 改进,用指数移动平均替代累积 | 解决学习率持续衰减问题 |
| Adam | Momentum + RMSprop 结合 | 最常用,一阶矩估计 + 二阶矩估计,自适应学习率 |
| AdamW | Adam + 权重衰减解耦 | 大模型训练首选 |
四、特征工程
4.1 数据预处理
| 方法 | 公式 | 效果 | 适用 |
|---|---|---|---|
| 归一化(Min-Max) | (x - x_min) / (x_max - x_min) | 缩放到 [0,1] | 特征量纲差异大;对异常值敏感 |
| 标准化(Z-Score) | (x - μ) / σ | 均值 0,方差 1 | 更鲁棒,适用于大多数场景 |
哪些算法需要特征缩放?
- 需要:SVM、KNN、逻辑回归、神经网络、PCA、K-Means
- 不需要:决策树、随机森林、XGBoost(基于排序的划分)
4.2 特征选择
| 类型 | 方法 | 说明 |
|---|---|---|
| Filter(过滤式) | 方差阈值、相关系数、卡方检验、互信息 | 与模型无关,速度快 |
| Wrapper(包裹式) | 前向选择、后向消除、RFE | 依赖模型评估,效果好但慢 |
| Embedded(嵌入式) | L1 正则化、树模型特征重要性 | 训练中自动选择,平衡效果和效率 |
4.3 处理类别不平衡
| 方法 | 说明 |
|---|---|
| 过采样(SMOTE) | 对少数类生成合成样本 |
| 欠采样 | 随机删除多数类样本 |
| 代价敏感学习 | 调整类别权重(class_weight) |
| Focal Loss | 降低易分类样本的权重,聚焦难分样本 |
| 评估 | 不用 Accuracy,用 F1、AUC-ROC、PR 曲线 |
4.4 缺失值处理
- 删除含缺失值的样本/特征
- 填充:均值 / 中位数 / 众数 / 插值
- 用模型预测缺失值
- XGBoost / LightGBM 可自动处理
五、数学基础
5.1 概率统计
| 概念 | 要点 |
|---|---|
| MLE(极大似然估计) | 找使观测数据似然函数最大的参数 θ^,只关注数据本身 |
| MAP(最大后验估计) | MLE + 先验分布 P(θ),等价于正则化的 MLE |
| 贝叶斯 vs 频率学派 | 贝叶斯:参数是随机变量,有先验;频率派:参数是固定未知量 |
| 生成模型 vs 判别模型 | 生成:学 P(X,Y)(朴素贝叶斯、HMM、GMM);判别:学 P(Y|X)(LR、SVM、NN) |
| 中心极限定理 | 独立同分布变量之和的分布趋近正态分布 |
| 大数定律 | 样本均值趋近总体均值 |
5.2 信息论
| 概念 | 公式 | 含义 |
|---|---|---|
| 熵(Entropy) | H = -Σ pᵢ log₂(pᵢ) | 衡量不确定性/混乱程度 |
| 条件熵 | H(Y|X) | 已知 X 后 Y 的不确定性 |
| 信息增益 | H(Y) - H(Y|X) | 知道 X 后不确定性减少了多少 |
| KL 散度 | Σ p(x) log(p(x)/q(x)) | 两个分布的差异(非对称) |
| 交叉熵 | -Σ p(x) log(q(x)) | 分类损失函数的理论基础 |
| 互信息 | I(X;Y) = H(X) - H(X|Y) | X 和 Y 共享的信息量 |
六、高频综合对比
LR vs SVM
| 维度 | 逻辑回归 | SVM |
|---|---|---|
| 损失函数 | Log Loss(交叉熵) | Hinge Loss |
| 输出 | 概率值 P(Y=1|X) | 分类标签(或到超平面距离) |
| 解的特点 | 所有样本参与优化 | 只有支持向量决定模型 |
| 非线性 | 需手动特征交叉 | 核技巧自动映射 |
| 正则化 | 一般 L2 | 结构风险最小化(自带) |
| 适合 | 大数据、在线学习、需要概率输出 | 小数据、高维、非线性 |
生成模型 vs 判别模型
| 生成模型 | 判别模型 | |
|---|---|---|
| 学什么 | P(X, Y) 或 P(X|Y) 和 P(Y) | P(Y|X) |
| 代表 | 朴素贝叶斯、HMM、GMM、VAE | LR、SVM、决策树、NN |
| 优点 | 可做无监督、可生成新样本 | 直接分类,精度通常更高 |
| 缺点 | 建模复杂、需要更强假设 | 不能生成新样本 |
算法选择指南
| 场景 | 推荐算法 |
|---|---|
| 数据量小、特征多 | SVM(核函数)、朴素贝叶斯 |
| 需要概率输出 | 逻辑回归 |
| 需要可解释性 | 决策树、逻辑回归 |
| 结构化表格数据 | XGBoost / LightGBM(实战首选) |
| 非结构化数据(图像/文本) | 深度学习(CNN / Transformer) |
| 在线学习 / 大规模数据 | SGD 优化的 LR |
| 不确定用什么 | 先试 XGBoost / LightGBM |
第二部分:LLM 模型微调 / Post-Training
七、SFT(Supervised Fine-Tuning,监督微调)
核心概念
SFT 是在预训练模型基础上,使用 高质量的指令-响应对数据 进行监督训练,让模型学会遵循人类指令、生成特定格式和内容的回答。
高频考点
| 问题 | 要点 |
|---|---|
| SFT 与预训练的区别? | 预训练用海量无标注数据学通用语言知识(next token prediction),SFT 用少量标注数据(指令-响应对)学特定指令和任务 |
| SFT 数据集要求? | 需要高质量的指令-响应对,数据质量 > 数据量,几千条高质量数据就能有效 |
| SFT 后模型"变傻"了?(灾难性遗忘) | 微调导致通用能力下降;缓解:混入通用数据做多任务微调、数据回放 |
| 预训练 vs SFT 哪个注入知识? | 预训练阶段注入知识,SFT 主要是激活/对齐已有知识的表达方式 |
| 多轮对话怎么微调? | 用多轮对话格式的数据进行 SFT,注意 loss mask(只在 assistant 回复部分计算 loss) |
| SFT 的 loss 函数? | 交叉熵损失,与预训练相同(next token prediction),但只对 response 部分计算 |
八、RLHF(Reinforcement Learning from Human Feedback)
核心流程(三阶段)
高频考点
| 问题 | 要点 |
|---|---|
| 为什么需要 RLHF? | SFT 需要"标准答案",无法处理多目标平衡(有用、无害、真实);RLHF 将人类偏好转化为可优化的 reward 信号 |
| RLHF 比 SFT 好在哪? | 能处理复杂的、主观的偏好对齐,不需要给出"标准答案",可通过人类排序来学习 |
| RM 得分越高越好吗? | 不一定! 可能出现 Reward Hacking(模型钻 RM 漏洞刷分,但实际质量没提升甚至下降) |
| PPO 中为什么加 KL 约束? | 防止策略模型偏离初始 SFT 模型太远,避免 reward hacking 和模式崩塌 |
| RLHF 的缺点? | ①人工偏好标注成本高 ②训练流程复杂(需同时运行 4 个模型:策略、参考、RM、价值网络)③训练不稳定 ④计算资源消耗大 |
| Pretraining Loss vs SFT Loss vs RLHF Reward? | Pretraining:通用语言建模。SFT:模仿人类写的标准回复。RLHF:优化人类偏好分数(不是模仿,而是探索更好的回答) |
九、DPO(Direct Preference Optimization)
核心思想
不需要单独训练 Reward Model,也不需要 PPO,直接用偏好数据优化模型策略。
通过数学推导,将 RLHF 的目标函数重新参数化,把 RM 的 reward 用策略模型的 log-probability 隐式表达。
DPO 的损失函数
其中 y_w 是 chosen(被偏好的回答),y_l 是 rejected(不被偏好的回答),π_ref 是参考模型(SFT 模型)。
高频考点
| 问题 | 要点 |
|---|---|
| DPO vs RLHF? | DPO 去掉了 RM 和 PPO,直接在偏好对上做训练;训练更稳定、更简单、计算开销更小 |
| DPO 的优势? | ①简化流程 ②训练稳定 ③计算开销小 ④效果与 RLHF 相当甚至更好 |
| DPO 的局限? | 依赖高质量偏好数据;对 out-of-distribution 的泛化可能不如 RLHF;对 β 参数敏感 |
| 什么时候选 DPO? | 想要对齐效果但不想搞复杂 RL 训练,有偏好数据对即可 |
十、LoRA(Low-Rank Adaptation)
核心原理
在 Transformer 权重矩阵旁边注入低秩分解矩阵:
训练时冻结原始权重 W₀,只训练 B 和 A。
为什么 LoRA 能工作?
Aghajanyan et al. (2020) 证明,微调时的权重更新矩阵 ΔW 具有低内在维度(low intrinsic dimensionality),即 ΔW 是低秩的。因此用低秩矩阵 BA 近似 ΔW 是合理的。
高频考点
| 问题 | 要点 |
|---|---|
| LoRA 的优势? | ①参数量极小(通常 <1% 原模型)②显存大幅减少 ③可热插拔切换任务 ④避免灾难性遗忘(原始权重冻结) |
| 秩 R 怎么选? | R 越大表达能力越强但效率下降;通常 R=8~64;需根据任务复杂度调参 |
| LoRA 一般加在哪? | Attention 的 Q、K、V、O 投影矩阵以及 MLP 层(实践中至少加 Q 和 V) |
| 推理有额外开销吗? | 没有! 推理时将 BA 合并回原始权重 W’ = W₀ + BA,零额外延迟 |
| LoRA vs 全量微调? | 全量微调:更新所有参数,需更多显存和数据;LoRA:只更新 <1% 参数,效率高,效果接近全量微调 |
| LoRA 的缩放因子 α? | 实际 ΔW = (α/r)·B·A,α 控制 LoRA 更新的缩放强度 |
十一、QLoRA(Quantized LoRA)
核心思想
在 LoRA 基础上,将基座模型量化到 4-bit(NF4 格式),LoRA adapter 保持高精度(FP16/BF16),计算时反量化回 16-bit。
三大核心技术
| 技术 | 说明 |
|---|---|
| 4-bit NormalFloat(NF4) | 针对正态分布权重优化的量化格式,比普通 INT4 更精确 |
| Double Quantization | 对量化常数(scaling factor)再做一次量化,每参数额外省约 0.37 bit |
| Paged Optimizers | 用 NVIDIA 统一内存做 CPU-GPU 自动分页,避免 OOM |
高频考点
| 问题 | 要点 |
|---|---|
| QLoRA vs LoRA? | QLoRA 在 LoRA 基础上加了基座模型 4-bit 量化,显存进一步大幅降低 |
| 性能损失大吗? | 论文表明几乎无损,某些 benchmark 甚至优于全量微调 |
| 消费级 GPU 能微调大模型吗? | QLoRA 使得单张 24GB GPU 微调 70B 模型成为可能 |
十二、其他 PEFT 方法(常作对比)
| 方法 | 原理 | 特点 |
|---|---|---|
| Adapter Tuning | 在 Transformer 层间插入小型 Adapter 模块 | 比 LoRA 参数略多,推理有额外延迟(不能合并进原始权重) |
| Prompt Tuning | 在输入前添加一组可学习的连续虚拟 token | 极其轻量(只训练几个 token),但效果依赖模型规模 |
| Prefix Tuning | 在每层 attention 的 K、V 前加可学习前缀 | 比 Prompt Tuning 表达能力更强(每层都有前缀) |
| P-Tuning v2 | Prefix Tuning 的改进版,在每一层都加前缀 | 效果接近全量微调 |
| IA³ | 学习三个缩放向量作用于 K、V、FFN | 参数量极小,甚至少于 LoRA |
PEFT 方法对比
| 可训练参数量 | 推理额外延迟 | 效果 | 实现复杂度 | |
|---|---|---|---|---|
| LoRA | 小(<1%) | 无(可合并) | 好 | 简单 |
| QLoRA | 小(<1%) | 无 | 好 | 中等 |
| Adapter | 中等 | 有 | 好 | 简单 |
| Prompt Tuning | 极小 | 轻微 | 中等 | 简单 |
| Prefix Tuning | 小 | 轻微 | 中等偏好 | 中等 |
| 全量微调 | 100% | 无 | 最好 | — |
十三、综合对比与选择
SFT vs RLHF vs DPO 怎么选?
| 场景 | 推荐方法 |
|---|---|
| 有明确标准答案/格式,想让模型模仿特定风格或注入领域知识 | SFT |
| 需要复杂的价值对齐(安全、无害、有用的平衡),有预算做人工标注 | RLHF |
| 想要对齐效果但不想搞复杂 RL 训练,有偏好数据对 | DPO |
| 资源有限,快速适配 | SFT + LoRA/QLoRA |
RAG vs 微调 怎么选?
| 维度 | RAG | 微调 |
|---|---|---|
| 知识更新 | ✅ 适合频繁更新的知识 | ❌ 需要重新训练 |
| 引用来源 | ✅ 可追溯 | ❌ 不可追溯 |
| 改变行为/风格 | ❌ 受限 | ✅ 深层改变 |
| 延迟 | 较高(需检索) | 较低 |
| 私有数据安全 | 数据存在外部检索库 | 知识内嵌模型 |
全量微调 vs LoRA 显存估算
| 方法 | 7B 模型 | 13B 模型 | 70B 模型 |
|---|---|---|---|
| 全量微调 | ~112-140 GB | ~208-260 GB | ~1120-1400 GB |
| LoRA | ~16-20 GB | ~28-36 GB | ~80-100 GB |
| QLoRA | ~6-10 GB | ~12-16 GB | ~20-36 GB |
估算公式:全量微调 ≈ 参数量 × 16~20 bytes(FP16 参数 + 梯度 + Adam 优化器状态 × 2)
十四、Post-Training 全景流程
复习优先级建议:
- 🔴 最高优先:偏差-方差、正则化 L1/L2、LR、SVM、决策树、XGBoost vs LightGBM、梯度下降、SFT、RLHF、DPO、LoRA/QLoRA
- 🟡 高优先:随机森林、KNN、朴素贝叶斯、评估指标、交叉验证、特征工程、PCA
- 🟢 中优先:K-Means、DBSCAN、数学基础、其他 PEFT 方法、Stacking
最后更新:2026-03-19