LoRA详解

一 LoRA定义

Low-Rank Adaption of Large Language Models,大语言模型的低秩适应,是一种PEFT(参数高效性微调方法),其核心思想是对大型模型的权重矩阵进行隐式的低秩转换,LoRA 主要应用于自然语言处理(NLP)和计算机视觉(CV)等领域。

二 功能特点

  1. 高效微调:LoRA 通过引入低秩矩阵,显著减少了微调过程中需要更新的参数数量,从而降低了计算和存储成本。
  2. 参数高效性:相比于传统的微调方法,LoRA 只需要更新少量的参数,适用于资源受限的环境。
  3. 灵活性:LoRA 可以与多种预训练模型和任务结合使用,具有很高的灵活性。
  4. 性能保持:尽管参数数量减少,LoRA 仍能保持或接近原始模型的性能。
LoRA模型的三大特性(易用性、泛化性、还原度)
  1. **易用性:**在我们加载LoRA模型的权重后,我们需要用多少提示词(Prompt)来使其完全生效。易用性越高,所需的提示词就越少,我们训练的LoRA模型才能在社区更受欢迎,使用量才能快速提升。
  2. **泛化性:**LoRA模型准确还原其训练素材中主要特征的同时,能否与其他LoRA模型和SD模型兼容生效。高泛化性意味着LoRA模型在多种不同的应用场景下都能保持良好的效果。
  3. **还原度:**在LoRA模型完全生效后,生成的图片与训练素材之间的相似度。高还原性保证了生成图片忠于训练素材,细节和质量上的表现准确无误。

这三个核心特性共同定义了LoRA模型的性能和应用范围,但由于资源和技术限制,通常很难同时优化三个特性。我们在选择LoRA模型时,需要根据具体需求考虑哪两个特性最为关键。

三 底层原理

1.核心思想

LoRA 的核心思想是将模型的权重矩阵分解为两个低秩矩阵的乘积,从而减少需要更新的参数数量。具体来说,LoRA 通过以下步骤实现这一目标:

  1. 参数矩阵分解:将模型的权重矩阵 ( W ) 分解为两个低秩矩阵 ( A ) 和 ( B ),即 ( W \approx AB ),其中 ( A ) 和 ( B ) 的秩远小于 ( W ) 的秩。
  2. 低秩矩阵更新:在微调过程中,只更新低秩矩阵 ( A ) 和 ( B ),而保持原始权重矩阵 ( W ) 不变。
  3. 参数重构:在推理过程中,通过 ( AB ) 的乘积重构权重矩阵 ( W ),从而进行模型推理。
2.数学原理

假设我们有一个预训练模型,其权重矩阵为 ( W )。在传统的微调方法中,我们需要更新整个权重矩阵 ( W ),这对于大型模型来说计算和存储开销非常大。LoRA 通过以下步骤减少这一开销:

  1. 权重矩阵分解: 将权重矩阵 ( W ) 分解为两个低秩矩阵 ( A ) 和 ( B ),即: [ W \approx AB ] 其中,( A ) 的维度为 ( (d, r) ),( B ) 的维度为 ( (r, d) ),( r ) 是低秩矩阵的秩,通常远小于 ( d )。
  2. 低秩矩阵更新: 在微调过程中,我们只更新低秩矩阵 ( A ) 和 ( B ),而保持原始权重矩阵 ( W ) 不变。这样,更新的参数数量从 ( d^2 ) 减少到 ( 2dr )。
  3. 参数重构: 在推理过程中,通过 ( AB ) 的乘积重构权重矩阵 ( W ),从而进行模型推理: [ W’ = AB ] 其中,( W’ ) 是重构后的权重矩阵。

四 工作流程

  1. 数据准备:收集和准备特定任务的数据集。
  2. 模型选择:选择合适的预训练模型,如 BERT、GPT 等。
  3. 参数矩阵分解:将模型的权重矩阵分解为两个低秩矩阵 ( A ) 和 ( B )。
  4. 低秩矩阵微调:在特定任务的数据集上,对低秩矩阵 ( A ) 和 ( B ) 进行微调。
  5. 参数重构和推理:在推理过程中,通过 ( AB ) 的乘积重构权重矩阵 ( W ),进行模型推理。

五 使用方法

使用 LoRA 通常涉及以下步骤:

  1. 加载预训练模型:从预训练模型库中加载预训练好的模型。
  2. 参数矩阵分解:将模型的权重矩阵分解为两个低秩矩阵 ( A ) 和 ( B )。
  3. 微调低秩矩阵:在特定任务的数据集上,对低秩矩阵 ( A ) 和 ( B ) 进行微调。
  4. 评估和优化:评估微调后的模型性能,并进行必要的优化。
  5. 部署和应用:将微调后的模型部署到应用中,进行推理。

六 使用例子

以下是使用 LoRA 进行微调的示例代码:

import torch
from transformers import BertModel, BertTokenizer

# 加载预训练的 BERT 模型和分词器
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
model = BertModel.from_pretrained('bert-base-uncased')

# 定义低秩矩阵分解函数
def low_rank_decomposition(weight_matrix, rank):
    U, S, V = torch.svd(weight_matrix)
    U = U[:, :rank]
    S = S[:rank]
    V = V[:, :rank]
    return U, S, V

# 获取模型的权重矩阵
weight_matrix = model.encoder.layer[0].attention.self.query.weight.data

# 进行低秩矩阵分解
rank = 10
U, S, V = low_rank_decomposition(weight_matrix, rank)

# 定义低秩矩阵微调函数
def fine_tune_low_rank(U, S, V, data_loader, epochs, learning_rate):
    optimizer = torch.optim.Adam([U, S, V], lr=learning_rate)
    for epoch in range(epochs):
        for batch in data_loader:
            # 计算损失并更新低秩矩阵
            loss = compute_loss(U, S, V, batch)
            optimizer.zero_grad()
            loss.backward()
            optimizer.step()

# 加载数据集并进行微调
data_loader = load_data('path_to_dataset')
fine_tune_low_rank(U, S, V, data_loader, epochs=3, learning_rate=1e-4)

# 在推理过程中重构权重矩阵
reconstructed_weight_matrix = torch.mm(U, torch.mm(torch.diag(S), V.t()))
model.encoder.layer[0].attention.self.query.weight.data = reconstructed_weight_matrix

# 使用微调后的模型进行推理
input_text = "The stock market saw a significant increase today."
input_ids = tokenizer.encode(input_text, return_tensors='pt')
outputs = model(input_ids)

七 优缺点

优点

  1. 高效性:LoRA 通过引入低秩矩阵,显著减少了微调过程中需要更新的参数数量,从而降低了计算和存储成本。
  2. 参数高效性:相比于传统的微调方法,LoRA 只需要更新少量的参数,适用于资源受限的环境。
  3. 灵活性:LoRA 可以与多种预训练模型和任务结合使用,具有很高的灵活性。
  4. 性能保持:尽管参数数量减少,LoRA 仍能保持或接近原始模型的性能。

缺点

  1. 复杂性:LoRA 的实现和应用可能比较复杂,需要深入的技术知识和经验。
  2. 数据依赖:LoRA 需要高质量的数据进行微调,数据的质量和数量直接影响微调效果。
  3. 模型适应性:LoRA 的效果可能因模型和任务的不同而有所差异,需要进行实验验证。

八更多信息

LoRA(Low-Rank Adaptation)是一种高效微调大型预训练模型的方法,通过引入低秩矩阵,显著减少了微调过程中需要更新的参数数量,从而降低了计算和存储成本。LoRA 具有高效性、参数高效性和灵活性等优点,适用于多种预训练模型和任务。随着技术的不断发展,LoRA 方法和模型架构也在不断改进,未来 LoRA 将继续在各个领域发挥重要作用。

九 LoRA系列模型资源

  1. LoRA模型论文:LORA: LOW-RANK ADAPTATION OF LARGE LANGUAGE MODELS
  2. LyCORIS项目:LyCORIS
  3. LoCon模型项目:LyCORIS/locon
  4. LoHa模型论文:FEDPARA: LOW-RANK HADAMARD PRODUCT FOR COMMUNICATION-EFFICIENT FEDERATED LEARNING
  5. 训练代码:kohya-ss/sd-scriptsqaneel/kohya-trainerqaneel/kohya-trainerdiffusersbmaltais/kohya_ss
  6. LCM_LoRA系列模型(LCM_LoRA SDXL,LCM_LoRA SD1.5,LCM_LoRA SSD-1b)权重百度云网盘:关注Rocky的公众号WeThinkIn,后台回复:LCM_LoRA,即可获得资源链接,包含LCM_LoRA SDXL,LCM_LoRA SD1.5和LCM_LoRA SSD-1b三个LCM_LoRA模型权重
  7. DreamBooth模型第三方资源库:sd-dreambooth-library
  8. Textual Inversion(embeddings模型)技术论文:Textual Inversion技术
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夏沫の梦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值