@jbhuang0604: LoRA, low-rank adaptation, is arguably the most popular parameter-efficient fine-tuning method for LLMs. But how does i…
摘要
LoRA(低秩适配)是LLM最流行的参数高效微调方法,视频介绍了LoRA及其变体(LoRA+、QLoRA、VeRA、DoRA)的工作原理。
查看缓存全文
缓存时间: 2026/06/27 03:51
LoRA, low-rank adaptation, is arguably the most popular parameter-efficient fine-tuning method for LLMs.
But how does it actually work?
Check out the video to learn LoRA and friends (LoRA+, QLoRA, VeRA, and DoRA)!
https://t.co/Bt9ky4oKnk https://t.co/9nUhaG5a8q
TL;DR
LoRA通过低秩分解大幅减少可训练参数,使大模型微调变得高效,后续的QLoRA、VeRA和DoRA进一步降低了内存需求或提升了适配灵活性。
参数高效微调的必要性
现代AI模型极其庞大。全量微调(更新所有权重)代价高昂:一个700亿参数的模型,在16位精度下仅权重就需约140GB内存。若每个任务都保存完整副本,存储开销将迅速失控。因此,我们需要参数高效的适配方法。
LoRA的核心思想
在Transformer中,大部分计算发生在线性层(注意力中的Q/K/V投影、前馈网络的扩展与压缩)。这些层执行相同的操作:( Y = W \cdot X )。
我们不直接微调整个权重矩阵( W ),而是冻结原始预训练权重( W_0 ),并添加一个可训练的修正矩阵( \Delta W )。微调后,可将( W_0 + \Delta W )合并为一个矩阵,推理速度与原始模型无异。
低秩分解
关键假设:修正矩阵( \Delta W )具有低秩结构。例如,一个6×6矩阵的列向量可能是冗余的,只有前两个独立方向(秩=2)。因此,可将( \Delta W )分解为两个小矩阵( B )(高而瘦)和( A )(矮而宽),即( \Delta W = B A )。这就是低秩适配(LoRA)。通过选择秩( r )(远小于输入/输出维度),可训练参数数量大幅减少。
在实践中,LoRA通过缩放因子( \alpha / r )控制更新强度,使不同秩下的更新大小保持稳定。
键值解释
将( B )分解为列向量( \mathbf{b}_i ),( A )分解为行向量( \mathbf{a}i ),则: [ \Delta Y = B A X = \sum{i=1}^{r} \mathbf{b}_i (\mathbf{a}_i \cdot X) ] 其中( \mathbf{a}_i )像特征检测器(键),( \mathbf{b}_i )指定对应的修正(值)。例如,在医学文献上微调时,一个键可能检测心脏病,对应的值添加心脏病学专业知识。LoRA充当局部联想记忆:只有与任务相关的输入才会激活修正,基础模型保持通用知识。
初始化策略
初始时希望( \Delta Y = 0 ),避免随机扰动干扰预训练知识。因此一个矩阵从零开始,另一个从随机开始。常用选择:随机初始化( A ),零初始化( B )。这样第一步( B )接收梯度,随后两者都可学习。随机( A )提供多样化的初始特征方向,有利于早期学习。
LoRA+:不同学习率
矩阵( A )将宽输入映射到低秩空间,矩阵( B )将低秩特征映射回输出空间。两者尺度不同,用相同学习率会导致( B )训练不足。LoRA+给( B )分配较大学习率,给( A )分配较小学习率,可加快收敛并提升最终性能。
QLoRA:量化LoRA
LoRA虽减少了可训练参数,但冻结的基础模型仍需大量内存。QLoRA通过量化压缩基础模型,使整个微调可在单个48GB GPU上运行(以700亿参数模型、秩64为例,可训练参数仅占1.17GB)。
NF4量化
采用4位量化,但等间距的16个电平浪费了精度(权重多集中在零附近)。NormalFloat 4(NF4)使用分位数量化,根据零均值正态分布放置电平,使每个区间包含等比例权重。由于4位有16个偶数个电平,为包含零电平,需不对称构建:-1到0设8个电平,0到1设9个电平,去掉重复零电平后共16个。NF4将精度分配给权重密集的区域,减少量化误差。
块级量化与双重量化
若整个模型用一个缩放因子,单个异常值会主导缩放。因此将权重分成小块(如64个元素每块),每块独立计算缩放因子。但缩放因子本身也需要存储(32位),每参数额外增加0.5位。QLoRA进一步将缩放因子量化为8位(双重量化),进一步节省内存。
VeRA:共享随机方向
LoRA中每个线性层学习两个小矩阵,跨层累加参数仍较多。VeRA使用一对随机初始化的矩阵,冻结并在所有适配层共享。每个层只学习两个可训练的对角向量:( \mathbf{b} )(从零开始)和( \mathbf{d} )(从小常数开始)。权重更新为: [ \Delta W = \text{diag}(\mathbf{b}) \cdot B_{\text{fixed}} \cdot \text{diag}(\mathbf{d}) \cdot A_{\text{fixed}} ] 可训练参数数量极小。例如输入维度4096、秩64、80层,标准LoRA需约4200万参数,VeRA仅需约33.3万(减少126倍)。VeRA不学习方向,只学习冻结随机方向的使用强度。
DoRA:权重分解低秩适配
LoRA对权重矩阵的修正同时改变方向和幅度,两者耦合。DoRA将每个输出神经元的权重分解为幅度(行向量的范数)和单位方向。预训练权重( W_0 = \text{diag}(\mathbf{m}) \cdot \hat{W} )。然后对方向部分应用LoRA风格的更新,并学习单独的幅度参数。这种解耦使适配更接近全量微调的效果,同时只增加极少的额外参数。
Source: YouTube视频链接
相似文章
Hybrid-LoRA:桥接全微调与低秩适应的后训练方法
Hybrid-LoRA提出了一种框架,选择性地对一小部分模块进行全微调,同时对其他模块使用LoRA,在显著降低计算成本的同时实现了接近全微调的性能。实验表明,与现有参数高效基线方法相比,性能提升高达5.65%。
基于可学习秩的参数高效微调
来自阿德莱德大学的研究人员提出了 LR-LoRA(可学习秩 LoRA),这是一种参数高效微调方法,在训练过程中动态学习每个 Transformer 层的适配器秩,而非使用固定的全局秩。LR-LoRA 在语言理解和常识推理基准测试上达到了最先进的性能,超越了固定秩 LoRA 基线。
BaLoRA:大规模模型的贝叶斯低秩适应
BaLoRA 引入了低秩适应(LoRA)的贝叶斯扩展,通过缩小与全量微调之间的差距,提供校准良好的不确定性估计并提高预测准确性。
超越 LoRA 与全参数微调:基于梯度引导优化器路由的大语言模型适配
本文提出了一种混合 LoRA 与全参数微调(MoLF)框架,利用梯度引导的优化器路由在 LoRA 和全参数微调之间进行自适应切换。旨在通过结合全参数微调的可塑性与 LoRA 的正则化特性,克服仅依赖静态适配方法的结构局限性。
@0xSero: Highly recommended educational content. LoRA is one of the coolest things to dabble in, lets anyone fine tune models re…
本文详细介绍了 LoRA 及其变体(QLoRA、VeRA、DoRA)的原理,解释了如何通过低秩分解减少可训练参数,实现高效微调大型模型。