一条小旁路,怎样改变大矩阵?
L01/b0 · 原矩阵
列向量输入;W 为 4096×4096;低秩更新 ΔW = sBA,固定缩放 s。
4096×1
4096×1
低秩约束的是更新;不是整个模型低秩,也不是速度提升 256 倍。
假设我们已经有一个训练好的模型,只想继续适配自己的任务。先放大其中一个矩阵,W有四千零九十六行、四千零九十六列;输入x是一列四千零九十六个数。乘起来,输出仍是四千零九十六个数。这个矩阵本身有一千六百七十七万七千二百一十六个参数。如果全量微调,它们都可能更新。LoRA提出的选择是先保留这条计算主路,冻结原来的W,再另外学习一个受限形式的增量。冻结的意思是参数值不更新,不是主路停止工作。
教师备课:指图与模拟问答
指图与推进 · 不朗读沿x→W→输出指;读维度,明确列向量。
L01/b1 · 两个小矩阵
列向量输入;W 为 4096×4096;低秩更新 ΔW = sBA,固定缩放 s。
4096×1
4096×1
低秩约束的是更新;不是整个模型低秩,也不是速度提升 256 倍。
旁路先经过A,把四千零九十六维输入变成八维,再经过B,把八维变回四千零九十六维。这样才能在输出位置与主路相加。A有八乘四千零九十六个参数,B也有四千零九十六乘八个,两者合计六万五千五百三十六。和原矩阵相比,可训练增量的参数数目是二百五十六分之一。这里的八叫秩的设定值,它限制旁路能表示的更新形式。我们先把这两个小矩阵当作真实计算对象看清,再记名字。
教师备课:指图与模拟问答
指图与推进 · 不朗读逐项显出A、B和中间8维向量;当场指算参数总数。
L01/b2 · 两路相加
列向量输入;W 为 4096×4096;低秩更新 ΔW = sBA,固定缩放 s。
4096×1
4096×1
低秩约束的是更新;不是整个模型低秩,也不是速度提升 256 倍。
同一个x同时走两条路。一条经过冻结的W,保留原模型的计算;另一条经过A和B,乘一个固定缩放系数s,再加到主路输出上。因此有效矩阵可以写成W加sBA。训练中loss仍然从最后输出传回来,梯度用于更新A和B,而W保持不变。小旁路不是只在某些输入上临时贴一个答案,它对许多输入共同改变这个层的输出,后续层又会继续处理这些变化。多个合适位置使用这种增量,就能让整个网络的行为发生调整。例如旁路为零时,输出就退回原来的Wx;旁路学到非零增量以后,才在这个起点上作调整。这个想象帮助我们理解“适配”的含义:已有能力仍在计算中,新数据通过增量改变它怎样被使用。
教师备课:指图与模拟问答
指图与推进 · 不朗读点亮主路冻结、旁路训练;指相加节点和梯度落点。
L01/b3 · 低秩更新边界
列向量输入;W 为 4096×4096;低秩更新 ΔW = sBA,固定缩放 s。
4096×1
4096×1
低秩约束的是更新;不是整个模型低秩,也不是速度提升 256 倍。
有两个结论不能偷换。第一,我们约束的是更新,不是说这个完整矩阵、整套模型或者任务本身只有八维。第二,二百五十六分之一是这个矩阵新增可训练参数的比例,不代表训练快二百五十六倍。原来的大矩阵还要做前向计算,训练也还需要保存和传播一些中间状态;适配效果取决于任务、目标位置和秩等条件。它的价值是减少必须更新和保存优化器状态的参数,让很多已有模型的继续训练更容易承担。下一步再问:既然大底座冻结了,保存它时能不能少用一些位数?
教师备课:指图与模拟问答
指图与推进 · 不朗读突出两条边界;短路线将此口述并入两路相加cue后。
补充推导、边界与来源
采用列向量约定:输入x有4096个数,原矩阵W为4096×4096,共16,777,216个参数。LoRA冻结W,只训练A(8×4096)与B(4096×8),并计算W′x=Wx+sB(Ax),其中s是固定缩放。两小矩阵共有65,536个参数,等于原矩阵参数量的1/256。
这个比例只针对所示矩阵的可训练增量,不是整个模型的可训练比例,也不是训练速度提高256倍。主路仍要计算,训练也仍需中间激活及梯度传播。低秩假设限制更新BA的形式,不宣称原矩阵或整个模型本来就只有秩8。任务能否用这种受限更新适配,需要实际评价。
本页证据与条件
LoRA列向量教学算例;Hu et al. 2021