原始权重 Wq 冻结;
新增低秩矩阵 $A\in \mathbb{R}^{r\times d}, B\in \mathbb{R}^{d\times r}$,形成:
Wq′=Wq+BA若 r=0,直接用原始 Wq。
相对于全量微调,LoRA微调提出了一种低秩分解的方法,只需在原模型参数基础上增加少量的可训练参数,大幅降低计算成本和内存占用。具体而言,对于原始的预训练权重矩阵W,LORA做以下改进:
W′=W+B×A
W为原始权重(冻结不变),B∈Rd×r和 A∈Rr×d为新增的低秩矩阵,r<<d,秩r一般很小。微调时只更新 A、B这两个矩阵,显著减少训练的参数数量。请实现支持LoRA的Attention计算
函数LoRA_Attention(x,Wa,Wk,Wv,A,B) 。为简化实现,仅需支持Attention中Q的LoRA结构实现即可。实现时请使用float64位精度。
第1行: b,d,r,其中b为batch size,d为特征的长度,r为LoRA矩阵的秩,b≥1,d≥1,r≥0
第2行:输入x,长度为b×d
第3−5行: Wq,Wk,Wv,长度为d×d
若r>0,则:
第6行:A,长度为r×d
第7行:B,长度为d×r
LoRAAttention计算的结果,输出保留四位小数,不足四位小数的补0
输入
2 5 3
-0.58 -0.52 -0.02 0.56 0.79 0.06 -0.64 -0.04 -0.20 -0.38
0.24 -0.72 -0.66 0.96 0.02 -0.43 -0.24 0.19 -0.85 -0.35 0.69 -0.09 0.99 0.21 -0.06 0.55 0.57 0.97 0.58 -0.16 0.64 0.02 -0.71 0.53 -0.90
0.07 -0.16 -0.47 -0.32 -0.92 0.13 -0.74 -0.87 0.05 0.33 0.37 0.75 0.57 0.14 -0.62 0.67 -0.62 -0.85 0.09 -0.90 0.22 0.97 -0.68 0.61 0.48
0.39 -0.74 0.84 0.21 0.44 -0.59 -0.07 -0.84 -0.70 0.86 -0.12 -0.06 0.45 -0.43 -0.09 -0.73 0.56 -0.62 0.36 -0.87 -0.97 -0.48 0.71 0.07 -0.28
0.25 0.58 -0.04 -0.94 0.45 -0.60 0.89 0.94 0.35 -0.76 -0.47 -0.40 0.10 0.23 0.25
-0.18 -0.11 0.60 0.37 0.75 0.51 -0.76 -0.39 -0.81 -0.88 -0.43 -0.88 0.15 -0.46 -0.24
输出
0.3499 0.0803 0.0376 -0.1791 0.3952 0.4112 0.2240 -0.0239 -0.2177 0.4478
输入
1 3 2
0.58 -0.65 -0.63
-0.74 -0.71 0.65 0.70 -0.14 0.01 -0.84 0.20 0.25
-0.60 0.51 -0.12 -0.35 0.57 -0.38 -0.44 -0.82 0.53
0.14 0.03 -0.27 0.10 -0.12 0.85 -0.55 0.10 -0.43
0.65 0.32 -0.42 -0.62 -0.88 -0.70
-0.66 0.49 0.09 -0.21 0.48 0.41
输出
0.2318 -0.3995 -0.1131