← 返回书架人工智能 · 交互式 Wiki
模型工程/LoRA 梯度与合并资料与边界
微调与后训练进阶计算演示

LORA / FORWARD, BACKWARD & MERGE

LoRA 的计算:冻结底座,追踪梯度

从一个二维线性层出发,看低秩分支怎样影响输出、A/B 怎样更新、输入还会收到什么梯度,再检查合并权重与量化的结果。

01 / TWO FORWARD PATHS

底座与增量共同决定输入梯度

h=Ax,y=W0x+sBh,g=∇yL,∇BL=sgh⊤,∇AL=sB⊤gx⊤,∇xL=W0⊤g+sA⊤B⊤g.\begin{aligned} h&=Ax,\qquad y=W_0x+sBh,\\ g&=\nabla_y\mathcal L,\\ \nabla_B\mathcal L&=sgh^\top,\\ \nabla_A\mathcal L&=sB^\top gx^\top,\\ \nabla_x\mathcal L&=W_0^\top g+sA^\top B^\top g. \end{aligned}
W₀ 是计算时使用的冻结底座,A/B 可训练。x 为列向量。冻结 W₀ 表示不为它积累参数梯度;输入 x 仍通过两条路径获得梯度。

若 x 来自更早的可训练模块,W₀ᵀg 是该模块梯度的一部分。把 Wx 放进不记录梯度的区域会删掉这条路径;若把整个 LoRA 层输出切断,A/B 的梯度也无法从下游 loss 到达。是否能省去某段反向,需要按上游可训练参数和完整计算图判断。

A 非零,B 为零

初始增量 BA 为零。此时 ∇A=0,∇B 可以非零;B 更新后,A 在后续步骤可以获得梯度。面板中的 A 是固定数值,不模拟框架的随机初始化。

A 和 B 同时为零

这时两条参数梯度同时为零。对于本例的普通梯度更新,纯 adapter 分支无法离开这个起点。

02 / FOLLOW THE UPDATE

逐步查看 A、B 和输入的梯度

固定 W=[[1,0.2],[−0.3,0.7]],x=[2,−1]ᵀ,目标 y*=[0,1]ᵀ,损失为 ½‖y−y*‖²。每次只更新 A/B,输入和底座保持不变。

一个 Rank-1 分支的五步以内更新

所有读数由当前矩阵计算
当前 loss
当前输出 y
执行的 SGD 更新
对象当前数值(按行展开)当前局部梯度

默认起点的 ∇B=[2.25,−2.875]ᵀ,∇A=[0,0],∇x=[2.49,−1.25]ᵀ。只切断 Wx 后,初始输入梯度变为零,但 A/B 的局部梯度不因此消失。这里展示的是输入处的导数,未真的更新一个上游模型。

03 / MERGE THE SAME BASE

合并后应与哪一个前向结果比较?

Wmerged=W0+sBA,Wmergedx=W0x+sB(Ax),Q(W0+sBA)≠W0+sBA通常成立.\begin{aligned} W_{\mathrm{merged}}&=W_0+sBA,\\ W_{\mathrm{merged}}x&=W_0x+sB(Ax),\\ Q(W_0+sBA)&\ne W_0+sBA\quad\text{通常成立}. \end{aligned}
第一条等价关系固定同一个 W₀、缩放和输入,且没有启用 adapter dropout。Q 表示重新量化后再恢复到计算数值。有限精度与重新量化各自引入误差。

当前参数的合并与误差

随上方控制同步更新
同底座合并的输出最大差
合并后重新量化的输出差
当前底座相对原始 W 的输出差
矩阵第一行第二行

量化底座是另一个数值起点

低位底座前向使用恢复后的 W₀。本例保留 A/B 的双精度计算,反向也经过 W₀ 到达输入。与原始 W 合并的结果比较,需把底座量化误差单独统计。

这里隔离 QLoRA 的一条机制

INT4 使用整张矩阵的 max-abs scale、−7…7 对称刻度、半数远离零舍入。这不是 NF4,也未实现双重量化、分页优化器或低位 kernel,不能据此推断 QLoRA 的质量或显存。

模型交付还需保存底座 revision、adapter 配置、tokenizer 与模板;是否训练 bias、输出头或其他模块要单独记录。真实合并和导出后,继续在目标精度与推理引擎上回归。

适用范围与一手资料

二维 Rank-1 线性层,平方损失、SGD、固定输入;冻结底座与切断梯度分别计算。INT4 仅演示低位底座机制,不实现 NF4、分页优化器或完整 QLoRA;合并核对同一个计算底座。

公式与机制的原始依据 · 4 项
知识目录
搜索知识库