面包屑图标 当前位置: 首页
AI资讯
热点详情

全参微调与LoRA区别及7种变种方法解析

AI热点日报
AI热点日报时间:2026-06-27
热点解读

1 前言 随着LLM的逐步普及,如何在预训练模型基础上做微调,让模型适配自己的业务场景,已经成了一个绕不开的话题。跟全参数SFT比起来,LoRA的做法很讨巧:冻结LLM本身的参数不动,在旁边插两个可学习的矩阵,训练的时候只动这两个小矩阵,推理时再把LLM的输出和这个旁路的输出加起来,得到最终结果。

1. 前言

随着LLM的逐步普及,如何在预训练模型基础上做微调,让模型适配自己的业务场景,已经成了一个绕不开的话题。跟全参数SFT比起来,LoRA的做法很讨巧:冻结LLM本身的参数不动,在旁边插两个可学习的矩阵,训练的时候只动这两个小矩阵,推理时再把LLM的输出和这个旁路的输出加起来,得到最终结果。那么,它和全参数微调到底差在哪?

资源上的差异:

  • 全参数微调:需要加载和更新全部LLM参数,显存需求相当高(一般是单一参数的4倍),而且对数据量的胃口也更大;
  • LoRA:只需加载LLM参数,只训练两个低秩矩阵,显存和数据量的要求都低得多,训练速度也快了不少。

效果上的差异:

  • 全参数微调:理论效果上限更高,但搞不好会陷入灾难性遗忘的泥潭;
  • LoRA:和全参数微调的效果差距不大,稳定性和扩展性反而更好。

2. LoRA原理

LoRA的核心思路,说白了就是通过低秩分解来模拟参数的变化量,用极小的参数量间接完成大模型的训练。具体怎么操作?

第一步,在原始的Pretrain_LLM旁边搭一条新通路,用前后两个矩阵A和B相乘,结果作为输出。换句话说,就是在原始参数 W_qW_kW_v 上加一个AB矩阵(注意,同一层QKV的AB矩阵参数是共享的,不同层之间不共享)。

第二步,矩阵A负责降维,矩阵B负责升维,中间层的维度设为 r (r << d),用来模拟所谓的本征秩。

第三步,初始化:矩阵A用随机高斯分布初始化,矩阵B用0矩阵初始化。这么做是为什么?

  • 之所以不让AB同时初始化为0,是为了保证训练能顺利更新参数;
  • 之所以不让AB同时用高斯初始化,是为了让模型一开始时AB矩阵不起作用,避免 ΔW 一开始就引入噪声;
  • 反过来,B用高斯初始化、A用0初始化行不行?目前看也是可以的,如果有不对的地方欢迎指正。

第四步,输出结果是两者相加:h' = W_0 x + BAx = (W_0 + BA)x

3. LoRA的变种

QLoRA

QLoRA和LoRA相比,核心区别在于:LLM模型采用4bit加载,进一步降低了训练所需的显存。 它把模型本身量化到4bit,训练时再把数值反量化到bf16再算,利用LoRA锁定原模型参数的特性,只训练少量LoRA参数,显存消耗自然大大减少。

LoRA+

LoRA+的改进在于:给A、B矩阵分别设置不同的学习率,并且把AB矩阵应用到全部参数矩阵。 传统的LoRA在训练时,学习率对所有权重矩阵一视同仁。但LoRA+的作者证明,单一的学习率其实是次优的。把矩阵B的学习率设得远高于矩阵A,能让训练更高效。t > 1 这个放大因子就是这么来的。

LoRA-FA

LoRA-FA是LoRA和Frozen-A的合体:只训练B矩阵。 矩阵A初始化后就被冻结了,矩阵B则像原始LoRA一样从零开始训练。这样一来,参数量直接减半,性能却和普通LoRA相差无几。

LoRA-drop

LoRA矩阵理论上可以加到神经网络的任何一层,但LoRA-drop引入了一套算法,决定哪些层用LoRA微调,哪些层可以跳过。

具体步骤是:

  • 1. 采样一部分数据,训练LoRA跑几个迭代;
  • 2. 计算每个LoRA适配器的重要性,公式是BAx(A和B是LoRA矩阵,x是输入);
  • 3. 如果这个输出很大,说明它会对模型行为产生较大影响;如果很小,那这个LoRA对冻结层的影响基本可以忽略;
  • 4. 汇总重要性值,达到某个阈值(由超参数控制)就停,或者直接取最重要的n个LoRA层;
  • 5. 最后在整个数据集上正式训练,其他层固定成一组共享参数,训练期间不再变动。

根据作者的说法,这个算法允许只用一部分LoRA层来训练模型,准确度虽然有一点点变化,但计算时间因为参数少了,确实省了不少。

AdaLoRA

LoRA-drop的思路是选择哪些LoRA参与训练,而AdaLoRA更进一步:根据重要程度,为不同的LoRA适配器调整秩的大小(原始LoRA里所有层的秩是统一的)。而且,AdaLoRA把LoRA矩阵的奇异值作为重要性指标。

和相同秩的标准LoRA相比,两种方法总的参数量相同,但分布不一样。LoRA里所有矩阵的秩都一样,AdaLoRA里有的秩高、有的秩低,总数不变。实验表明,AdaLoRA的效果比标准LoRA更好,说明可训练参数在模型上的分布确实有讲究,对特定任务来说,选对地方投参数更重要。

DoRA

通常认为LoRA等微调技术不如全参数微调(Finetune),是因为LoRA只是Finetune的一种低秩近似。但作者发现,LoRA的学习模式和Finetune很不一样——它偏向于很强的正相关性,即方向和幅度变化高度绑定,这可能对更精细的学习不太友好。

图中x轴是模型更新方向,y轴是幅度变化,每个散点对应一层。可以看出,Finetune训练时,更新方向和幅度没有太大关联(或者有微弱的负相关),而LoRA的正相关性相当强。

那么,哪一种方向和幅度的相关性更好?说实话,这个不确定。但既然LoRA的目标是用较小的参数达到和Finetune一致的效果,那至少在相关性上,它应该更像Finetune才对。所以作者的做法是:把预训练参数矩阵分解成大小(magnitude)和方向(directional)两个向量,只对方向部分应用LoRA微调。

DoRA把预训练矩阵W分解后,得到大小为1 x d的大小向量m和方向矩阵V,从而独立训练大小和方向。方向矩阵V通过B*A增强(LoRA),m则原样训练。这样一来,LoRA虽然习惯同时改变幅度和方向,但DoRA可以更容易地分开调整,或者在调整一个方向时用另一个的负变化来补偿。所以DoRA的方向和大小之间的关系更贴近Finetune。以下是代码实现:

import torch.optim as optim
from torch.utils.data import DataLoader, TensorDataset
import torch
import torch.nn as nn
import torch.nn.functional as F

class DoRALayer(nn.Module):
    def __init__(self, d_in, d_out, rank=4, weight=None, bias=None):
        super().__init__()
        if weight is not None:
            self.weight = nn.Parameter(weight, requires_grad=False)
        else:
            self.weight = nn.Parameter(torch.Tensor(d_out, d_in), requires_grad=False)
        if bias is not None:
            self.bias = nn.Parameter(bias, requires_grad=False)
        else:
            self.bias = nn.Parameter(torch.Tensor(d_out), requires_grad=False)
        self.m = nn.Parameter(self.weight.norm(p=2, dim=0, keepdim=True))
        std_dev = 1 / torch.sqrt(torch.tensor(rank).float())
        self.lora_A = nn.Parameter(torch.randn(d_out, rank)*std_dev)
        self.lora_B = nn.Parameter(torch.zeros(rank, d_in))

    def forward(self, x):
        lora = torch.matmul(self.lora_A, self.lora_B)
        adapted = self.weight + lora
        column_norm = adapted.norm(p=2, dim=0, keepdim=True)
        norm_adapted = adapted / column_norm
        calc_weights = self.m * norm_adapted
        return F.linear(x, calc_weights, self.bias)

LongLoRA

LongLoRA是港中文和MIT在2023年发表的,主要解决长上下文场景反赌意力机制计算量爆炸的问题。LLM支持长文本的方法通常包括用NTK外推或内插来扩展位置编码,但为了让模型表现更好,一般还得微调。LongLoRA的要点有两条:

  • S2-attn注意力:这一点和LoRA没关系,纯粹是为解决长序列注意力成二次方增长的问题。训练时不计算全局注意力,而是把所有token分组,每个token只计算自己组和相邻组的注意力,显存消耗降了,训练速度提了(和longformer、Big Bird这些处理长文本的方案思路一致);
  • LoRA训练(变种):在嵌入层和归一化层也都加上了LoRA权重来训练。

总结

LoRA系列微调方法是大模型PEFT领域的一个核心方向,也是目前工程上应用最广的微调手段之一。基于LoRA的改进论文和方法还在不断涌现,值得持续关注。

引用链接

[1] 位置编码(下): https://zhuanlan.zhihu.com/p/720755157

热点追踪提示词
你是一名 AI 行业编辑,请围绕下面这条热点输出一份资讯解读:
热点:全参微调与LoRA区别及7种变种方法解析要求:
1. 先用一句话解释这条热点在讲什么
2. 再总结它为什么重要
3. 说明会影响哪些 AI 产品或内容方向
4. 最后给出 3 个适合资讯站使用的标题
来源:https://www.53ai.com/news/finetuning/2024110858146.html
ai 人工智能

游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。

相关热点
AI热点2026-07-16 19:10
尊界S800典藏大观即将发布 探索设计工艺新高度

华为旗下鸿蒙智行尊界品牌将于6月25日发布全新超高端系列——尊界S800GrandDesign典藏大观。该系列由余承东亲自预热,定位200万元级市场,预售价格160万-200万元。新车采用专属锦绣设计主题,搭载新一代途灵龙行平台,并提供纯电与增程双动力选择。其车身尺寸庞大,轴距达3370mm,旨

AI热点2026-07-16 19:10
前五个月轿车销量:前十车企市场份额近七成

中国汽车工业协会发布2026年1-5月轿车销量数据。数据显示,销量排名前十的轿车生产企业共销售243 1万辆,合计市场份额达到67 4%。在这十家企业中,仅上汽股份和特斯拉的销量较去年同期实现增长,其余八家企业销量均出现下滑。这份报告揭示了轿车市场高度集中的竞争格局,以及不同车企在当前市场环境下的分

AI热点2026-07-16 18:06
燃油二手车价格暴跌,部分车型骨折清仓

近期,国内燃油二手车市场出现剧烈价格动荡,部分车型遭遇“骨折式”降价。车商反映,一些燃油车正以每月近10%的速度贬值,月跌数万元成为常态,导致库存压力巨大。超过八成的经销商新车售价已低于进价,价格倒挂现象普遍。造成这一局面的核心原因,一方面是新车市场价格战激烈,直接拉低了二手车残值;另一方面是新能源

AI热点2026-07-16 18:06
速卖通欧洲618本地仓订单过半,跨境电商履约前置加速

跨境电商平台在欧洲市场的运营策略出现显著变化。速卖通海外618大促数据显示,其在西班牙、法国、波兰等核心市场,从欧洲本地仓发货的订单占比首次超过50%,标志着本地化履约已成为主流。这一转变主要源于欧盟对低值包裹税收政策的收紧,使得传统跨境直发模式成本与合规压力增大。为此,速卖通、SHEIN、Temu

延伸阅读