LoRA大模型微调技术

104 阅读2分钟

LoRA大模型微调技术

本文参考【【LoRA微调】从原理到调参,7 个问题彻底理解LoRA,不懂线性代数也没问题_大模型微调_低秩适配】www.bilibili.com/video/BV1wa…

什么是LoRA?

LoRA:低秩矩阵分解算法 全参微调:所有的参数都要更新。W->W',将W'拆解成W+ΔW,即W+ΔW=W',更进一步,可以将ΔW分解为A*B,如同下面的例子。

image.png image.png A有10个参数,B有8个参数,要更新的参数数就从原来的20个减小到了18个。实际应用场景下,LoRA能使参数减少0.01%-3%左右

为什么需要LoRA

LORA想解决的问题:资源消耗太大,训练效率低下

image.png

image.png

为什么可以对低秩权重增量分解

image.png 不可以对原始矩阵进行低秩分解,原因:原始矩阵一般接近满秩,奇异值分步比较平滑

LoRA如何更新参数

初始化-计算损失-反向传播-迭代优化

LoRA可以用在transformer的那些层

注意力层: image.png

LoRA有哪些版本

image.png

LoRA训练的时候要调整哪些超参数

参数名类型含义建议值
finetuning_typeLiteral["full","freeze","lora"]指定微调类型为 LoRA选择 lora,用于高效微调
lora_alphaOptional[int]缩放系数 α,一般情况下为 lora_rank*2设为 r 的 1–2 倍,如 r=16, α=32
lora_dropoutfloat (0.0–1.0)LoRA 的 Dropout 概率大数据集:0.0;小数据集:0.05–0.1
lora_rankintLoRA 的秩 r简单任务:8–16;中等:32;复杂:64+
lora_targetstr(逗号分隔)应用 LoRA 方法的模块名称(主要是q和v)默认:q_proj,v_proj;复杂任务加 k_proj,o_projall/FFN
additional_targetstr(逗号分隔)额外的 LoRA 目标模块通常留空,除非有特殊模块
loraplus_lr_ratioOptional[float]LoRA+ 学习率比例 (λ = η_B / η_A),η_A、η_B 分别为 adapter 矩阵 A 与 B 的学习率启用时设 4–16(如 8)
use_rslorabool是否启用秩稳定 LoRA(rsLoRA)小 r (4–16): false;大 r (32+): true
use_dorabool是否启用权重分解 DoRA默认 false,复杂任务开启
pissa_initbool是否用 PiSSA 初始化 LoRA(禁用量化模型)默认 false,需高性能时设 true