LoRA 的结构: LoRA 使用两个矩阵 A 和 B 来近似一个大的权重更新矩阵。
A 矩阵:称为 "lora_A" 或 down-projection B 矩阵:称为 "lora_B" 或 up-projection
矩阵尺寸: 假设原始层的权重矩阵为 W ∈ R^(d×k)
A ∈ R^(r×d) B ∈ R^(k×r) 其中 r 是 LoRA 的秩(rank),通常远小于 d 和 k
压缩原理: LoRA 的更新可以表示为 W + BA,其中 BA 是一个低秩矩阵。 通过减小 r(秩),我们可以显著减少参数数量,同时保留一定的适应能力。
压缩逻辑解释: 对于 lora_A(down-projection):
原始形状:(old_rank, dim) 新形状:(new_rank, dim) 压缩发生在第一个维度,即将 old_rank 减小到 new_rank
对于 lora_B(up-projection):
原始形状:(dim, old_rank) 新形状:(dim, new_rank) 压缩发生在第二个维度,同样将 old_rank 减小到 new_rank 初始化新张量: 对于 lora_A,新权重被随机初始化 对于 lora_B,新权重被初始化为零 如果新的秩小于旧的秩,会保留原始权重的一部分
这种压缩方法的效果:
- 参数减少:通过减小秩,大幅减少了参数数量,从而减小了模型大小。
- 信息保留:通过保留部分原始权重,尽量保持了模型的部分学习能力。
- 一致性:对模型中的所有 LoRA 层统一应用这种压缩,确保了整体结构的一致性。