一、背景:全参数微调的困境
大型语言模型(LLM)参数规模极大,全参数微调存在诸多难题:
- 成本高昂:需存储和更新所有模型参数副本,训练开销大。
- 部署困难:每个任务都要存储完整模型副本,占用大量存储空间。
- 资源需求高:对计算资源和GPU内存要求严苛,普通设备难以支撑。
二、LoRA核心原理
(一)核心思想
假设模型权重的更新可通过低秩分解表示,不直接更新原始权重矩阵,而是训练两个更小的低秩分解矩阵,大幅减少需训练和存储的参数数量。
(二)数学表达与低秩分解示例
新的矩阵计算式为 h=W0x+ΔWxh = W_0x + \Delta Wxh=W0x+ΔWx,其中W0W_0W0是原始权重矩阵,xxx是输入向量,ΔW\Delta WΔW是新增权重矩阵。
为控制新增参数规模,将ΔW\Delta WΔW分解为两个低秩矩阵AAA和BBB的乘积(ΔW=BA\Delta W = BAΔW=BA),此时计算式变为 h=W0x+BAxh = W_0x + BAxh=W0x+BAx,其中A∈Rr×kA \in R^{r \times k}A∈Rr×k,B∈Rd×rB \in R^{d \times r}B∈Rd×r,且r≪min(d,k)r \ll min(d,k)r≪min(d,k)(rrr为LoRA的秩,远小于原始维度)。
比如,有一个表示“不同城市在不同季节的游客数量”的矩阵ΔW\Delta WΔW,假设原始矩阵是4×44\times44×4(4个城市、4个季节),若我们发现游客数量主要受“气候适宜度”和“旅游宣传力度”两个维度影响(低秩特性,即r=2r = 2r=2),那么可以把ΔW\Delta WΔW分解为矩阵AAA(2×42\times42×4,表示“气候适宜度”“旅游宣传力度”与4个季节的关联)和矩阵BBB(4×24\times24×2,表示4个城市对“气候适宜度”“旅游宣传力度”的响应)。原本ΔW\Delta WΔW有 4×4=164\times4 = 164×4=16个参数,分解后AAA有2×4=82\times4 = 82×4=8个参数,BBB有4×2=84\times2 = 84×2=8个参数,总共8+8=168 + 8 = 168+8=16个参数,看似数量没减,但当原始矩阵维度更大时,优势就很明显。比如原始矩阵是100×100100\times100100×100,若r=10r = 10r=10,分解后AAA是10×10010\times10010×100(1000个参数),BBB是100×10100\times10100×10(1000个参数),总共2000个参数,远少于原始的10000个参数,极大减少了参数数量。
(三)与本征维度的关联
本征维度指充分描述数据或空间结构/特征所需的最小维度,实际任务相关的权重更新往往集中在低维子空间。LoRA利用这一特性,通过低秩分解捕获权重更新,契合任务适配的低本征维度特点。比如一张苹果图片,展示很精细,有光线、斑点、叶子脉络、细微色差等,但如果只是要认出是苹果,仅用普通像素点展示就可以,这些像素极低的点才是最关键的信息,对应到矩阵就是其本征维度低。
三、LoRA的优势
- 减少参数:显著降低可训练参数数量,如上述100×100100\times100100×100矩阵的例子,参数大幅减少。
- 降低资源需求:减少GPU内存占用,加快训练速度。
- 多任务共享:多个任务可共享基础模型,只需存储小型任务特定适配器。像在线客服场景,公司有基础大语言模型用于客服对话,为不同产品线(如手机、电脑、家电)定制客服机器人时,只需维护一个基础模型,为每个产品线训练小型LoRA适配器,运行时动态加载对应适配器,大幅节省存储空间和训练成本,还能快速支持新产品线。
- 性能接近全微调:训练稳定性好,性能与完整微调相近。
四、LoRA的训练与初始化
(一)初始化
矩阵A的元素服从正态分布N(0, 1),矩阵B初始化为全0矩阵。这种初始化可确保初始梯度有效传播、提供足够随机性,且避免破坏预训练模型初始性能。
(二)训练过程
训练仅更新A和B的值。初始时B为0,权重更新无效果;通过反向传播计算损失对B的梯度,利用梯度下降逐步更新B,使其收敛到有助于完成任务的值。学习率、任务性质、优化器选择、A的初始值等会影响B的变化,训练过程中B经历从快速变化到趋于稳定的阶段。如果B保持为0,模型就无法学习任何任务特定的适配,损失函数会推动B向着能够减小任务损失的方向变化。
五、LoRA在Transformer中的作用位置与应用
(一)基本概念阐释
- 查询向量(Q, Query):用于表达模型的查询意图。
- 键向量(K, Key):用于承载可供查询的信息标识。
- 值向量(V, Value):用于存储实际的信息内容。
- 输出投影(O, Output):用于将注意力机制的输出映射至目标维度。
(二)在Transformer架构中的流程位置
输入序列首先经过线性投影层(Linear Projection Layer),随后依次进行查询向量(Q)、键向量(K)、值向量(V)的矩阵变换操作,接着执行注意力计算流程,之后进行输出投影(O)的矩阵变换,最终生成输出结果。
(三)各矩阵的具体功能
- Q矩阵:负责将输入数据转换为查询形式。
- K矩阵:负责将输入数据转换为可供查询的键表示。
- V矩阵:负责存储实际的信息内容。
- O矩阵:负责将注意力机制的输出转换为所需的表示形式。
(四)在LoRA中的应用方式
LoRA主要应用于查询向量权重矩阵(WQW_QWQ)、键向量权重矩阵(WKW_KWK)、值向量权重矩阵(WVW_VWV)以及输出投影权重矩阵(WOW_OWO)的更新过程,且可对每个上述权重矩阵单独应用LoRA。以查询向量(Q)为例,原始计算方式为 Q=input×WQQ = \text{input} \times W_QQ=input×WQ,应用LoRA后,计算方式变为 Q=input×(WQ+BA)Q = \text{input} \times (W_Q + BA)Q=input×(WQ+BA)(其中BBB和AAA为低秩矩阵)。
(五)LoRA的选择性应用策略
LoRA支持仅对部分矩阵进行应用,常见的组合形式包括仅对查询向量(Q)和值向量(V)应用、对查询向量(Q)、键向量(K)、值向量(V)全部应用,以及对查询向量(Q)、键向量(K)、值向量(V)、输出投影(O)全部应用。LoRA的作用体现在对W0Q+ΔWQW_0Q + \Delta W_QW0Q+ΔWQ、W0K+ΔWKW_0K + \Delta W_KW0K+ΔWK、W0V+ΔWVW_0V + \Delta W_VW0V+ΔWV、W0O+ΔWOW_0O + \Delta W_OW0O+ΔWO中的ΔW\Delta WΔW进行低秩分解优化。
(六)实际应用影响
- Q矩阵更新:会对模型的查询方式产生影响。
- K矩阵更新:会对键的表示形式产生影响。
- V矩阵更新:会对值的内容产生影响。
- O矩阵更新:会对最终输出结果产生影响。
六、总结
LoRA借助低秩分解,解决了大语言模型全参数微调的痛点,在减少参数、降低资源消耗的同时保证微调性能,还能灵活作用于Transformer不同权重矩阵,为大模型在多场景的高效适配提供了有力支撑,推动了大语言模型的落地应用。
1180

被折叠的 条评论
为什么被折叠?



