LoRA 的英文全称是 Low-Rank Adaptation,即低秩自适应。它是一种参数高效微调的方法。
传统微调需要更新模型的所有参数(比如LLaMA-2 70B的700亿个参数),这非常耗费资源。LoRA则提出一个革命性的想法:大模型在适应特定任务时,其权重变化其实具有较低的“内在秩”。换句话说,权重更新矩阵 $ΔW$ 是低秩的。 我们可以用一个简单的数学公式来理解:
对于一个预训练权重矩阵 $W_0$(维度为 $d \times k$),其更新量为 $ΔW$。LoRA不是直接学习 $ΔW$,而是将其分解为两个更小矩阵的乘积:
$$ΔW = B \times A$$
其中:
$B$ 是一个 $d \times r$ 的矩阵。
$A$ 是一个 $r \times k$ 的矩阵。
$r$(秩)是一个远小于 $d$ 和 $k$ 的值(例如 $r=8$ 或 $r=16$)。
那么,在前向传播过程中,公式就从 $h = W_0x$ 变成了:
$$h = W_0x + ΔWx = W_0x + BAx$$
冻结:保持原始预训练模型的权重 $W_0$ 完全冻结,不进行任何更新。
注入:在模型的特定层(通常是Transformer的Attention模块中的Q, K, V, O投影层)旁,注入一对可训练的、低维的矩阵 A 和 B。矩阵 A 通常用随机高斯分布初始化,矩阵 B 初始化为零,这样在训练开始时 $ΔW = BA = 0$,保证了与原始模型相同的输出。
训练:在微调过程中,只更新这些注入的、小小的 A 和 B 矩阵。
推理:训练完成后,可以将 BA 加到原始权重上,得到一个完整的、融合后的新权重 $W = W_0 + BA$。这样一来,推理时没有任何额外的计算开销,和原模型结构、速度完全一样。
想象一下预训练模型是一本厚重的百科全书($W_0$)。传统微调是让你把整本书重写一遍。而LoRA是让你准备几张小小的便利贴(A 和 B),上面只记录了针对特定任务(比如“医疗问答”)需要修改或补充的要点。使用时,你既可以直接看书+看便利贴,也可以把便利贴上的内容直接抄到书的对应页边(融合)。
面试官会从不同层面考察你对LoRA的理解,以下是从基础到进阶的常见考点:
问题1:与传统全参数微调相比,LoRA有哪些优势?
考察点:对LoRA价值的理解。
回答要点:
极高的参数效率:可训练参数数量减少1万到10万倍,大大降低了硬件门槛。
降低显存占用:由于大部分参数被冻结,只需要存储和优化极小的LoRA参数,以及它们的优化器状态,使得在消费级GPU上微调大模型成为可能。
训练速度快:需要计算梯度的参数变少,训练速度更快。
无推理延迟:训练后可与原权重合并,不引入任何额外的推理开销。
便于任务切换:可以为一个基础模型训练多个独立的LoRA适配器,使用时动态加载,实现一个模型服务多个任务。
问题2:LoRA的基本原理是什么?为什么说它利用了“低秩”的特性?
考察点:对LoRA理论基础的掌握。
回答要点:
基本原理见上文。“低秩”假设源于对模型智能的一种理解:尽管模型参数空间巨大,但它在学习一个新任务时,其“知识”的变化并不需要遍历整个高维空间,而是存在于一个更低维的子空间(内在秩)中。LoRA通过低秩分解 $B \times A$ 来模拟和捕获这个低维度的变化。
问题3:LoRA通常被添加到Transformer架构的哪些部分?为什么?
考察点:对LoRA实践细节的了解。
回答要点:通常添加到Self-Attention模块的四个投影矩阵:Query, Key, Value 和 Output。
原因:这些层是Transformer的核心,包含了大量的参数,并且直接处理语义和上下文信息。研究表明,对这些层进行适配能最有效地让模型学习到新任务的知识。当然,也可以扩展到MLP层,但收益相对较小。
问题4:LoRA中的秩 r 和缩放因子 α 分别是什么?它们有什么作用?
考察点:对LoRA超参数的理解。
回答要点:
秩 r:决定了低秩矩阵 A 和 B 的大小,是LoRA中最重要的超参数。r 越大,可训练参数越多,能力越强,但也可能过拟合;r 越小,参数越少,效率越高,但能力可能不足。通常 r 取4, 8, 16等较小的值就能有很好效果。
缩放因子 α:在训练时,LoRA的输出会乘以 (α / r)。α 可以看作是学习率的一个调节器。固定 r 时,增大 α 等同于放大LoRA更新的强度。通常将 α 设置为 r 的两倍(如 r=8, α=16)是一个不错的起点。
问题5:在初始化时,为什么矩阵 A 用高斯初始化,而矩阵 B 用零初始化?
考察点:对训练稳定性的理解。
回答要点: 这是一种保证训练平稳开始的技巧。B 初始化为零,意味着在训练开始时 ΔW = BA = 0。这样,注入LoRA的模型与原始预训练模型的输出是完全一致的,不会在一开始就引入一个巨大的扰动,破坏了预训练模型已经学到的宝贵知识。A 用随机初始化,是为了在训练开始时让不同的LoRA维度有不同的梯度,从而能够正常地进行学习。
问题6:LoRA和Adapter有什么区别?
考察点:对不同PEFT方法的辨析能力。
回答要点:
Adapter:是在Transformer块中串行地插入一个小型神经网络(通常包含下投影和上投影)。它会改变模型的结构,在推理时会增加额外的计算,导致延迟。
LoRA:是一种并行的附加方式。它不改变原有计算路径,只是增加了一个旁路。训练后可以合并回原网络,实现零推理开销。这是LoRA相对于Adapter的一个关键优势。
问题7:QLoRA 是什么?它与LoRA有什么关系?
考察点:对前沿发展的关注。
回答要点:QLoRA 是LoRA的量化增强版。它在LoRA的基础上,引入了4-bit量化、双量化和分页优化器等技术。核心思想:将预训练模型用量化到4-bit,然后在这个量化模型的基础上注入LoRA适配器并进行训练。反向传播时,通过一种叫“反向传播冻结”的技术来计算梯度。关系:QLoRA是LoRA的进一步发展,它进一步压低了微调的显存门槛,使得在单张24GB显存的消费级显卡上微调65B大模型成为可能,而精度损失极小。
问题8:如果让你用LoRA微调一个模型但效果不佳,你会从哪些方面进行调试?
考察点:解决问题的实践能力。
回答要点:
调整秩 r:尝试增大 r(如从8调到16或32),增加模型容量。
调整 α:尝试不同的 α 值,通常与 r 联动,如 α = 2r。
检查目标模块:确认LoRA是否应用在了正确的层上(Q、K、V、O)。尝试只应用到V和O投影,或者扩展到MLP层。
学习率:由于LoRA参数是新增的,可能需要一个比全参数微调更大的学习率。
数据与任务:检查数据质量和新任务与预训练任务的差异度。如果差异很大,可能需要更大的 r 或更多的数据。
增加Dropout:在LoRA旁路中增加Dropout来防止过拟合。
准备LoRA相关的面试,关键在于理解其 “低秩适配”的核心思想、“零推理开销”的工程优势,以及“参数高效”带来的巨大价值。同时,要熟悉其关键超参数和实现细节,并能与相关技术(如Adapter、Prefix-Tuning)进行对比。如果能提到QLoRA等进阶技术,将会是很大的加分项。