微调——什么是LoRA

微调——什么是LoRA

  • LoRA(Low-Rank Adaptation, 低秩自适应):由微软于 2021 年提出,是一种高效微调大型语言模型(LLM)的技术。LoRA 通过低秩矩阵乘积近似关键更新,仅调整最必要的参数。这种思想本质上利用了大模型的 “冗余性”—— 即预训练模型已具备强大基础能力,微调时只需在低维子空间中调整少数方向,即可实现任务适配。

LoRA 的工作原理

1. LoRA的核心假设与数学表达

LoRA认为:模型在微调时的权重更新矩阵ΔW本质上是低秩的,即ΔW可通过两个小矩阵的乘积近似表示。

  • 传统微调

    • 假设原始预训练权重矩阵为 W∈Rd×kW \in \mathbb{R}^{d \times k}WRd×k,其中:
      • d:输入维度(例如 transformer 的 hidden_size)
      • k:输出维度
    • 全参数微调需要更新整个矩阵,参数量为 d×kd \times kd×k
  • LoRA

  • 原始权重矩阵为 W ∈ R^(d×k)(如d=hidden_size=768,k=hidden_size=768)。

  • 引入两个低秩矩阵:

    • W_A ∈ R^(d×r)(降维矩阵,r≪d,k,通常r=8~128)
    • W_B ∈ R^(r×k)(升维矩阵)
  • 则权重更新为:
  • Wupdated=W+ΔW=W+WA⋅WBW_{updated} = W + \Delta W = W + W_A \cdot W_BWupdated=W+ΔW=W+WAWB
  • 其中,原始W保持冻结,仅训练W_A和W_B。

参数效率分析

  • 原始可训练参数:d×kd \times kd×k
  • LoRA 参数:r×(d+k)r \times (d + k)r×(d+k)
  • 实际应用中需要权衡:r 值过小可能导致性能下降,r 值过大会降低效率

这种低秩适应有效的深层原因是:模型在不同任务间的知识迁移主要发生在低维子空间,通过调整这些关键方向就能实现高效适应。

2. LoRA在Transformer架构中的应用位置

LoRA并非作用于所有层,而是选择性地应用于关键可训练层(稍后有这些层的意义):

  • 必选层
    • 注意力层的Q/K/V投影矩阵(决定模型对输入的编码方式)。
    • 前馈神经网络的两层线性变换矩阵(决定语义特征的变换逻辑)。
  • 可选层
    • 输出层的投影矩阵(如分类任务的最后一层)。
    • 嵌入层(较少使用,因词向量更新可能影响基础语义)。
  • 示例:以LLaMA-7B为例,LoRA通常只更新约40%的可训练层,其余层保持冻结,进一步降低计算量。

预训练模型的权重矩阵W是什么

1. 预训练模型的权重矩阵W

在Transformer架构中,权重矩阵W主要存在于以下关键层:

  • 注意力机制层(Attention Layer)
    • 查询(Query, Q)、键(Key, K)、值(Value, V)投影矩阵:将输入向量映射到Q/K/V空间,如矩阵形状为 [hidden_size, hidden_size](假设hidden_size=768)。
    • 输出投影矩阵:将多头注意力的结果合并后投影回隐藏空间,形状同上。
  • 前馈神经网络层(Feed Forward Network, FFN)
    • 第一层线性变换矩阵:将输入维度从 hidden_size 扩展到 4×hidden_size(如768→3072),形状为 [hidden_size, 4×hidden_size]
    • 第二层线性变换矩阵:将维度从 4×hidden_size 压缩回 hidden_size,形状为 [4×hidden_size, hidden_size]
  • 嵌入层(Embedding Layer)
    • 词嵌入矩阵:将token ID映射为词向量,形状为 [vocab_size, hidden_size](如vocab_size=50000,hidden_size=768)。

这些矩阵W是模型在预训练阶段(如GPT在海量文本上训练)学习到的参数,承载了通用语义理解能力。

2. 传统全参数微调的过程

当使用新数据微调时:

  • 目标:让模型适应特定任务(如情感分析、问答),更新W以优化任务性能。
  • 操作
    1. 加载预训练模型的所有权重矩阵W(冻结或不冻结)。
    2. 输入新任务数据,前向传播计算损失。
    3. 反向传播时计算所有W的梯度,并通过优化器(如Adam)更新所有W的参数。
  • 问题
    • 参数量巨大:以GPT-3(1750亿参数)为例,全量微调需更新所有权重,显存需求超过百GB,普通硬件无法支持。
    • 计算成本高:每次迭代需更新数十亿参数,训练时间长达数天甚至数周。

LoRA 的主要特点和优势

  • 参数高效: LoRA 仅训练少量额外参数,而不是完整的模型权重。典型场景下可训练参数减少 10-100 倍(具体取决于原模型尺寸和r值)
  • 训练速度快: 由于需要更新的参数大幅减少,LoRA 微调比全参数微调速度更快,训练时间更短。
  • 存储空间小: LoRA 适配器通常只有几十到几百 MB,而完整的模型可能需要几十 GB。这使得存储和分发多个专门的微调版本变得更加实际。
  • 推理性能优化: LoRA 权重可以在推理前合并回原始模型,不会增加推理时的计算开销。
  • 可组合性: 多个 LoRA 适配器可以被合并或按不同比例混合,创建具有混合能力的模型。
  • 质量保持: 在许多任务中,LoRA 微调的性能与全参数微调相当甚至更好,同时减少了过拟合风险。

LoRA与传统微调的对比(以GPT-3 125M参数为例)

指标传统全参数微调LoRA微调(r=8)
可训练参数125M8×(768+768)×层数 ≈ 100K-1M
显存需求50GB+(16-bit浮点)5GB-10GB(16-bit浮点)
训练时间(单卡A100)数天数小时
性能损耗(任务精度)无损耗损耗<5%(合理r值下)

LoRA的优化技巧与实际应用场景

1. 关键超参数:秩r的选择

  • r过小(如r=4):模型表达能力不足,任务性能下降。
  • r过大(如r=256):参数减少优势减弱,接近全量微调。
  • 经验法则
    • 小型模型(如7B):r=16-32
    • 大型模型(如13B-175B):r=8-16
    • 复杂任务(如代码生成):可适当增大r(32-64)。

2. LoRA与其他技术的结合

  • 与PEFT(参数高效微调)结合:如搭配QLoRA(量化+LoRA),用4-bit量化预训练模型,进一步降低显存至2GB以下。
  • 与适配器(Adapter)结合:在LoRA层外添加非线性激活函数,增强表达能力。
  • 与提示工程(Prompt Tuning)结合:同时优化提示词和LoRA参数,实现更精准的任务适配。

3. 典型应用场景

  • 垂直领域适配
    • 医疗问答:用医学文本微调LoRA,仅更新数千参数即可让GPT理解医学术语。
    • 法律文书生成:训练LoRA适配法律条文逻辑,无需重训整个模型。
  • 多任务学习
    • 为不同任务(如翻译、摘要)维护独立的LoRA权重,通过权重混合实现多任务切换。
  • 个性化模型
    • 生成特定风格文本(如模仿某作家文风):仅需少量样本训练LoRA,避免全量微调导致的过拟合。

参考资料

https://github.com/karminski/one-small-step/blob/main/20250228-what-is-LoRA/what-is-LoRA.md?plain=1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值