Skip to content

LoRA 怎样进行参数高效适配 ​

全参数微调会为每个目标任务更新整个模型。LoRA 冻结原权重,只学习低秩增量,让同一个基础模型可以挂接较小的适配权重。

从一个线性层开始 ​

原层:

y=xW,W∈Rdin×dout

LoRA 增加:

y=x(W+ΔW),ΔW=ABA∈Rdin×r,B∈Rr×dout,r≪d

原参数量 d_in×d_out,LoRA 可训练参数量 r(d_in+d_out)。例如 1024×1024 层、r=8:原层约 1.05M 参数,增量约 16K。

实现中常见缩放 α/r,初始化一侧为零以让初始增量为零;具体 A/B 方向和记号可能因库而异,应以实际权重 shape 为准。

用一个输入看见低秩分支的输出 ​

先不处理 1024 维,取行向量 x=[2,1]、W 为二阶单位阵、rank=1:

A=[12],B=[0.1−0.2]

按前向顺序算:xW=[2,1];xA=2×1+1×2=4;(xA)B=[0.4,-0.8];所以在缩放 α/r=1 时,最终输出为 [2.4,0.2]。

也可以先算 ΔW=AB=[[0.1,-0.2],[0.2,-0.4]],再算 x(W+ΔW),应得到相同结果。这就是合并前后的前向等价关系;量化和浮点舍入下应使用误差容限比较。

自测:将 B 改成全零,初始输出是否等于基座?答案是等于;但“当前增量为零”并不等于 B 的梯度也为零。训练时冻结的是 W,梯度仍能经过基座路径到达可训练分支。本例只验证一次前向,没有执行 adapter 微调。

四类状态 ​

状态是否更新是否保存到 adapter
基础模型 W通常冻结通常只记录基座身份
LoRA A/B更新是
A/B 的梯度与优化器状态训练期间更新checkpoint 需要,推理不需要
激活每步产生不作为 adapter 权重保存

冻结参数仍要参与前向和反向到 LoRA 分支,因此 LoRA 大幅减少可训练参数和优化器状态,却不会让基础模型计算消失。

注入哪里 ​

常见目标包括注意力 Q/K/V/O 投影与 MLP 投影。选择更多模块增加容量和状态,也改变适配行为。必须保存 target modules、rank、alpha、dropout 和基座精确版本。

合并与不合并 ​

推理前可以计算 W_merged=W+ΔW,避免独立 LoRA 分支;也可以运行时挂载 adapter 便于切换。合并后要记录不可逆操作和数值 dtype,不能把 adapter 错配到另一基座。

LoRA 没有解决什么 ​

  • 错误、污染或许可不清的数据;
  • 模板和 loss mask 错误;
  • 领域提升伴随的通用回归;
  • 基础模型缺失的上下文窗口和架构能力;
  • 可靠评测、隐私和安全责任。

自测 ​

本节自测

先作答,再查看解释。记录只保存在当前浏览器。

完成 0 / 3
  1. 1填空题 1024×1024 线性层使用 rank=8 的 LoRA,A/B 合计约多少参数?
  2. 2判断题 冻结基础权重意味着基础模型不参与前向计算。
  3. 3开放题 部署一个 adapter 至少要记录哪些身份?
这里的分数只用于本章自测,不代表真实任务能力。

打印版答案:1. 16384;2. 错;3. 基座、LoRA 配置、数据模板、评测和合并状态。

来源:LoRA: Low-Rank Adaptation of Large Language Models。

下一步 ​

LoRA 只是参数更新方式,下一课偏好数据与 DPO研究不同训练目标。

最近更新