2021-arxiv-LoRA Low-Rank Adaptation of Large Language Models

2021-arxiv-LoRA Low-Rank Adaptation of Large Language Models


Paper: https://arxiv.org/abs/2106.09685
Code: https://github.com/microsoft/LoRA

大型语言模型的LoRA低秩自适应

自然语言处理的一个重要范式包括对通用领域数据的大规模预训练和对特定任务或领域的适应。当预训练更大的模型时,完全微调(重新训练所有模型参数)变得不那么可行。以 GPT-3 175B 为例,部署微调模型的独立实例,每个实例都有 175B 参数,成本高得令人望而却步 因此, 作者提出了低秩自适应(Low-Rank Adaptation,简称LoRA),它冻结了预训练模型的权重,并将可训练的秩分解矩阵注入到Transformer架构的每一层中,大大减少了下游任务的可训练参数数量。与使用 Adam 微调的 GPT-3 175B 相比,LoRA 可以将可训练参数的数量减少 10,000 倍,将 GPU 内存需求减少 3 倍。LoRA 在 RoBERTa、DeBERTa、GPT-2 和 GPT-3 上的模型质量与微调相当或更好,尽管可训练参数更少、训练吞吐量更高,并且与适配器不同,没有额外的推理延迟。
LoRA用来降低大语言模型下游任务训练的算力及内存资源需求量,降低预训练大模型产品化落地的成本。

LoRA基本思想

  1. 在原始PLM旁边增加一个旁路,做一个降维再升维的操作,来模拟所谓的intrinsic rank。
  2. 训练的时候固定PLM的参数,只训练降维矩阵A与升维矩阵B。
  3. 而模型的输入输出维度不变,输出时将BA与PLM的参数叠加。用随机高斯分布初始化A,用0矩阵初始化B,保证训练的开始此旁路矩阵依然是0矩阵。


下面是参数的更新表示:
其中,预训练的矩阵为 W 0 ∈ R d × k W_0 \in \mathbb{R}^{d \times k} W0Rd×k,它的更新表示为:

W 0 + Δ W = W 0 + B A , B ∈ R d × r , A ∈ R r × k W_0+\Delta W=W_0+B A, B \in \mathbb{R}^{d \times r}, A \in \mathbb{R}^{r \times k} W0+ΔW=W0+BA,BRd×r,ARr×k
其中秩 r < < m i n ( d , k ) r << min(d,k) r<<min(d,k)
对于 h = W 0 x h=W_0x h=W0x ,它的前向计算变为:
h = W 0 x + Δ W x = W 0 x + B A x = ( W 0 + B A ) x h=W_0 x+\Delta W x=W_0 x+B A x=\left(W_0+B A\right) x h=W0x+ΔWx=W0x+BAx=(W0+BA)x
这种方式类似与残差连接,同时使用这个旁路的更新来模拟full finetuning的过程。

参考

https://zhuanlan.zhihu.com/p/514033873

Low-Rank Adaptation (LoRA) 是一种用于大型语言模型的有效微调技术,其核心思想在于通过引入低秩分解矩阵减少下游任务中的可训练参数数量[^2]。如果想获取 LoRA 的原始论文 PDF 文件,可以通过以下几种方式找到: ### 获取论文的方式 1. **官方链接**: 原始论文通常会发布在学术平台如 arXiv 上。可以在 arXiv 搜索页面输入关键词 “Low-Rank Adaptation of Large Language Models”,即可找到对应的论文页面并下载 PDF 文件。 2. **Microsoft 官方资源**: 根据 GitHub 仓库描述,该研究由 Microsoft 提出,因此可以访问 Microsoft Research 的官方网站或者相关项目页寻找论文的正式版本。 3. **学术搜索引擎**: 使用 Google Scholar 或其他学术搜索引擎(如 Semantic Scholar),搜索标题 “Low-Rank Adaptation of Large Language Models”。这些平台不仅提供免费的 PDF 链接,还会列出引用此论文的相关文献。 4. **社区分享**: 如果无法直接从上述渠道获得 PDF,则可以尝试加入 AI 和机器学习相关的论坛或社交媒体群组询问。许多研究人员会在这些平台上共享有价值的资料。 以下是基于 LoRA 技术的一些扩展思考和代码实现片段展示如何计算可训练参数数目: ```python def calculate_trainable_parameters(lora_ranks, model_dimensions, num_lora_weights): """ Calculate the number of trainable parameters using LoRA. Args: lora_ranks (int): Rank value 'r' used in LoRA matrices. model_dimensions (int): Dimensionality 'd_model' of the transformer layers. num_lora_weights (int): Number of weights to apply LoRA on '\hat{L}_{LoRA}'. Returns: int: Total number of trainable parameters '|Θ|'. """ total_params = 2 * num_lora_weights * model_dimensions * lora_ranks return total_params # Example usage with typical values from RoBERTa LARGE configuration lora_rank_example = 8 model_dimension_example = 1024 num_lora_weight_matrices = 24 # Assuming application across all attention heads trainable_param_count = calculate_trainable_parameters( lora_rank_example, model_dimension_example, num_lora_weight_matrices ) print(f"Total Trainable Parameters Using LoRA: {trainable_param_count}") ``` 这段脚本展示了依据给定公式 \(|\Theta| = 2 \times \hat{L}_{\text{LoRA}} \times d_{\text{model}} \times r\) 来估算采用 LoRA 后模型所需的总训练参数数目的过程[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

发呆的比目鱼

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

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

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

打赏作者

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

抵扣说明:

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

余额充值