小鹏 大模型算法 一面
1. 介绍一下你做的这个项目
2. LoRA 的基本原理是什么
LoRA 的核心思路是,微调大模型时没有必要把整个权重矩阵都更新掉,而是只学习一个低秩的增量。原始权重记作 (W),微调后的权重写成:

其中 (A) 和 (B) 的秩都很低,参数量远小于直接更新整个 (W)。训练时冻结原模型参数,只训练这两个小矩阵,这样显存占用、优化器状态和保存体积都会小很多。它适合做领域适配、指令微调这类任务,因为很多任务对模型的改动并不需要覆盖完整参数空间。
LoRA 常见会插在 attention 的 q_proj、v_proj 上,有时也会加在 k_proj、o_proj 或 MLP 层。选哪些层,本质上是在表达能力和训练成本之间做平衡。如果任务更偏生成风格和领域语言迁移,attention 上加 LoRA 往往就够了;如果任务对知识表达或复杂模式变换要求更高,也会往 MLP 里继续加。
import torch
import torch.nn as nn
class LoRALinear(nn.Module):
def __init__(self, in_features, out_features, r=8, alpha=16):
super().__init__()
self.weight = nn.Parameter(torch.randn(out_features, in_features))
self.weight.requires_grad = False
self.A = nn.Parameter(torch.randn(r, in_features) * 0.02)
self.B = nn.Parameter(torch.zeros(out_features, r))
self.scale = alpha / r
def forward(self, x):
delta = self.B @ self.A
return x @ (self.weight + self.scale * delta).t()
3. 怎么进一步降低 LoRA 的训练成本,QLoRA 的核心原理是什么
QLoRA 可以理解成“量化版 LoRA”。LoRA 已经把可训练参数降下来了,但底座模型本身还是要放在显存里。QLoRA 再往前走一步,把底座模型权重用 4bit 量化存储,比如常见的 NF4 格式,这样显存占用会进一步下降。训练的时候底座参数依然冻结,只更新 LoRA 这部分增量参数。
它真正有价值的地方在于,你可以在相对有限的显存上微调更大的模型。比如原本单卡根本放不下的 13B、30B 规模模型,用 QLoRA 后就有机会跑起来。不过它也不是没有代价,量化会带来一定数值误差,所以有些特别吃精度的任务,QLoRA 的效果上限可能会略差于全精度 LoRA。实际选型通常还是看资源预算、任务难度和是否接受一点精度折中。
4. LoRA 为什么通常要把一边初始化成 0,这么做的意义是什么
LoRA 常见做法是让 (A) 随机初始化,(B) 初始化为 0,或者反过来,总之保证一开始ΔW=BA=0。这样模型刚接上 LoRA 的时候,前向结果和原始模型完全一致,不会因为插入一个新模块就把原模型分布打乱。这个设计在大模型微调里很重要,因为你通常希望模型从一个稳定的预训练状态开始,而不是一上来就偏掉。
从优化角度看,这也是一种比较稳的 warm start。训练刚开始的时候,LoRA 分支逐步学会如何修正原模型,而不是先引入一堆随机扰动。尤其在小数据集或者高学习率情况下,这种初始化能明显减少训练初期的不稳定。
5. PPO 的原理是什么
PPO 是 RLHF 里用得很多的一种策略优化方法。它的目标不是直接最大化奖励,而是在“拿到更高奖励”和“不要偏离原模型太多”之间做平衡。大模型场景里,一般会有策略模型、参考模型、奖励模型,有时还会有 value model。策略模型负责生成答案,奖励模型给这个答案打分,参考模型用于做 KL 约束,避免策略模型更新得太激进。
PPO 的核心是裁剪目标。因为如果新旧策略差太大,训练会很不稳定,所以它会限制单次更新步幅。放到大模型里理解,就是一边让模型更偏向高奖励输出,一边又不让它为了“讨好奖励模型”跑偏太远。很多人说 PPO 难训,本质上就是因为这几个量要同时平衡:reward、KL、entropy、advantage,任何一个尺度不对都可能让训练发散。
import torch
def ppo_clip_loss(old_logprob, new_logprob, advantage, eps=0.2):
ratio = torch.exp(new_logprob - old_logprob)
surr1 = ratio * advantage
surr2 = torch.clamp(ratio, 1 - eps, 1 + eps) * advantage
return -torch.min(surr1, surr2).mean()
6. PPO 和 GRPO 的区别是什么
PPO 更偏经典强化学习路线,它通常要用到 value 或 critic 去估计 baseline,再计算 advantage 来更新策略。GRPO 的思路更偏组内相对优化,不一定要显式训练一个 value model,而是对同一个 prompt 采样一组回答,通过组内相对好坏来构造更新信号。这样做在数学、代码、推理类任务里会比较自然,因为这些任务里“谁更好”通常比“绝对值是多少”更容易确定。
如果放到业务里理解,PPO 更像是“给每个回答一个分数,再控制策略往高分方向走”;GRPO 更像是“同一题做几份答案,组内比出高低,再根据相对位置更新模型”。GRPO 的一个好处是省掉了 critic 训练这部分复杂度,另一个好处是对奖励尺度没那么敏感。但它也依赖一件事,就是你得能稳定构造组内比较信号。
7. DPO 和 PPO 的
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
本专栏聚焦 AI-Agent 面试高频考点,内容来自真实面试与项目实践。系统覆盖大模型基础、Prompt工程、RAG、Agent架构、工具调用、多Agent协作、记忆机制、评测、安全与部署优化等核心模块。以“原理+场景+实战”为主线,提供高频题解析、标准答题思路与工程落地方法,帮助你高效查漏补缺.
查看5道真题和解析