用 AI 拆一层 LoRA:训练的是低秩增量,原权重仍然要保留

前天 3阅读

“LoRA只训练少量参数”不等于把原模型删到只剩那些参数。可以让AI拆开一个很小的线性层:原权重照常计算,旁边另有一条低秩更新分支。把两条分支都算出具体数值,就能检查说明有没有偷换对象。

用 AI 拆一层 LoRA:训练的是低秩增量,原权重仍然要保留

AI模型生成的概念插图:大矩阵旁的两条窄带表示紧凑更新;不是软件截图、照片或与正文维度一一对应的矩阵图。

先写清每个矩阵的形状

输入是3×1列向量x,原权重W₀为4×3,输出为4×1。取LoRA秩r=1,则A为1×3,B为4×1,乘积BA才是4×3。本文把缩放系数α/r固定为1,没有偏置和dropout,输出写成W₀x+B(Ax)。

LoRA原论文将预训练权重冻结,训练低秩分解矩阵来表示更新。这里的“低秩”约束的是增量BA;它不要求原权重W₀低秩,也不表示输入只剩一个字符或整个模型只有一个参数。

给两条分支各放一组数

令W₀四行依次为[1,0,0]、[0,1,0]、[0,0,1]、[1,1,1];A=[1,−1,2],B的四项为[1,2,0,−1];输入x=[2,1,−1]。这些是原创演示数值,不是训练得到的模型参数。

原分支W₀x得到[2,1,−1,2]。更新分支先算Ax=2−1−2=−1,再乘B,得到[−1,−2,0,1]。两者相加,最终输出为[1,−1,−1,3]。

再换一条计算路线:BA的四行是[1,−1,2]、[2,−2,4]、[0,0,0]、[−1,1,−2]。把它加到W₀上,再乘同一个x,仍得到[1,−1,−1,3]。本文已分别执行这两条路线,验证线性层的合并等价;真实低精度实现还可能出现舍入差异。

数的是可训练参数,不是全部存储

直接训练这层全部权重需要12个可训练数;秩一分支需要A的3个加B的4个,共7个。W₀的12个冻结数仍然存在。若保留独立分支,不能把“7个可训练数”写成“整个层只占7个数”。

小矩阵也不是任取秩都会省。若r改成2,A和B合计2×3+4×2=14个,反而比12多。对一个1024×1024权重,r=8时增量有8×1024+1024×8=16384个参数,是原1048576个的1/64;这只是该层的数量比例。

可以复制的拆解任务

“按W₀四行[1,0,0]、[0,1,0]、[0,0,1]、[1,1,1],A=[1,−1,2],B=[1,2,0,−1]列向量,x=[2,1,−1]列向量,r=1且α/r=1,分别算W₀x+B(Ax)和(W₀+BA)x。每步标维度;再数r=1、r=2及1024方阵r=8的可训练参数。明确冻结权重是否还需存储。”

训练显存还包括激活、梯度、优化器状态与框架开销,不能按1/64直接换算整机显存。秩怎样选择、是否改善任务表现,也必须通过合适的数据与评价来决定,这份算例不作效果保证。

资料核对日期:2026年10月2日。算例为原创教学设计,没有进行真实模型训练或性能测试。

参考资料

Hu等:LoRA: Low-Rank Adaptation of Large Language Models

文章版权声明:除非注明,否则均为云鹊BLOG原创文章,转载或复制请以超链接形式并注明出处。