论文阅读_模型结构_LoRA

name_en: LoRA: Low-Rank Adaptation of Large Language Models
name_ch: LORA:大语言模型的低阶自适应
paper_addr: http://arxiv.org/abs/2106.09685
date_read: 2023-08-17
date_publish: 2021-10-16
tags: [‘深度学习’,‘大模型’]
author: Edward J. Hu
citation: 657
code: https://github.com/microsoft/LoRA pytorch,风格简捷

1 读后感

LoRA 是 Low-Rank 的缩写,它是一种大模型微调技术。一开始用于优化自然语言模型,但是后来自然语言模型后来选择了 Prompt 的道路;而该技术在图像领域得到了广泛的应用,比如 Stable Diffusion 的一众 LoRA 模型,从背景风格到人物形像,不用精调 2-8 G 的基础模型,通过训练 只有几十到几百兆 LoRA 模型,就可以实现建模。

它针对的问题是:当模型大到一定程度,比如 GPT-3 有 175B 参数,精调变得费时而昂贵。其解决方法是:它修改了fine-tune过程,提出低阶自适应技术,冻结了预训练的模型权重,并将可训练的秩分解矩阵注入到 Transformer 架构的每一层中,这大大减少了下游任务中可训练参数的数量。其的效果是:与使用 Adam 微调的 GPT-3 175B 相比,LoRA 可以将可训练参数数量减少 10,000 倍,GPU 内存需求减少 3 倍。且推理时没有额外延迟。

2 介绍

2.1 感性理解

先用图像建模举个例子,比如使用 LAION-5B 数据集训练底模,它包含 58.5 亿个 图像-文本对,如果我们在其基础上用 200 张图片精调模型,可以想见,最终模型的大多数参数与底模差异不大;如果也使用与原模型一样大的空间存储是很浪费的,需要保留的只是当前风格和通用风格的差异,信息量并不大。这种情况下,使用 LoRA模型,相当于对两个模型的差异做降维后再存储。这种情况下,相对于5G的底模,LoRA 模型可能只有10-20M。

2.2 LoRA 优势

之前的优化 fine-tune 的方法主要有:只精调部分参数,训练额外层,调节激活函数等,这些方法精调效果往往不是很好,有的还会引起推理延迟。LoRA优势如下:

  • 对于一个大模型,可针对不同下游任务训练多个LoRA小模型,方便存储和切换。
  • 训练效率更高,硬件需求更低,只需要优化注入的小得多的低秩矩阵。
  • 与完全微调的模型相比,不会引入推理延迟。
  • LoRA 与许多现有方法正交,可与其中许多方法相结合。

(既不复杂,使用时也没有太多限制条件)

3 背景知识

3.1 矩阵的秩 Rank

矩阵的秩是指矩阵中线性独立的行向量或列向量的最大数量,即矩阵中的最大线性无关行(或列)的数量。对于一个 m 行 n 列的矩阵,它的秩记为r,r 的取值范围是 0 到 min(m, n)。当 r = 0 时,表示该矩阵是一个零矩阵,所有元素都为零。

3.2 全秩 Full-Rank

当 r = min(m, n) 时,表示矩阵的所有行(或列)都是线性无关的,即全秩(满秩,full-rank)矩阵。

3.3 低秩 Low-Rank

低秩表示(Low-Rank Representation,简称LRR)的基本思想是将高维数据表示为低维子空间中的低秩表示。假设数据中的信息可以由较少的关键特征表示。通过将数据表示为低秩矩阵,LRR可以实现降维和去噪的效果,从而提取出数据中的重要特征。

4 方法

4.1 低秩参数矩阵

之前论文《Intrinsic Dimensionality Explains the Effectiveness of Language Model Fine-Tuning》证明,预训练的语言模型具有较低的“内在维度”(实际不需要那么大维度),即使随机投影到较小的子空间,仍可有效学习。我们假设权重的更新 fine-tune 也具有较低的“内在维度”。

将预训练的权重矩阵定义为W0,其维度为 d×k,通过用低秩分解 W0 + ΔW = W0 + BA 用后者来约束其更新,其中 B 为 d×r 维,A 为 r×k 维,并且秩 r << min(d, k)。训练期间,W0 被冻结,不更新,而 A 和 B 包含可训练参数。W0 和 ΔW = BA 都与相同的输入相乘,并且它们各自的输出向量按维度求和。

h = W 0 x + ∆ W x = W 0 x + B A x h = W_0x + ∆W x = W_0x + BAx h=W0x+Wx=W0x+BAx

对 A 使用随机高斯初始化,对 B 使用零初始化,因此 ΔW = BA 在训练开始时为零。然后按 α/r 缩放 ΔW x ,其中 α 是 r 中的常数,调整 α 与调整学习率大致相同。

这里的 r 需要设置,如果 r 与 d 维度相同,即降维时,理论上其效果和 fine-tune 一致,而具体 r 如何设置详见对比实验部分。

4.2 将 LORA 应用于 Transformer 框架

从原理来看,LoRA 可用于任何神经网络中。在 Transformer 架构中,自注意力模块中有四个权重矩阵(Wq、Wk、Wv、Wo),MLP 模块中有两个。研究限制为仅调整下游任务的注意力权重,并冻结 MLP 模块。后面的对比实验针对这四个矩阵做了 LoRA 测试。

这样做最显著的好处是减少内存和存储量。对于使用 Adam 训练的大型 Transformer,如果使用 r << d 的模型,可以将 VRAM 使用量减少多达 2/3。在 GPT-3 175B 上,可将训练期间的 VRAM 消耗从 1.2TB 减少到 350GB。当 r = 4 并且仅调整查询和值投影矩阵时,检查点大小减少了大约 10,000倍(从 350GB 到 35MB)。

RoLA 还允许支持定制多个模型,这些模型可在预训练权重存储在 VRAM 中的机器上动态地换入换出。与完全微调相比,由于不需要计算绝大多数参数的梯度,GPT-3 175B 训练期间的速度提高了 25%。

5 实验

实验部分分别对 RoBERTa,GPT-2,GPT-3 做了针对下游任务的对比实验,从实验部分可以看到,LoRA模型参数非常少,且效果往往不低于fine-tune,有时效果更好。

6 对比实验

6.1 在 Transformer 中的哪些权重矩阵上应用 LORA

文中实验限定了参数整体大小,针对不同的 LoRA 设置,对比模型性能。这里只考虑了自注意力中的权重矩阵,如果使用 1 种类型的注意力权重,则 r = 8;如果使用 2 种类型,则对应于 r = 4,结果如表 5 所示:

实验证明 Wq,Wv 组合可提供最佳性能,4 阶也能捕获足够的 ΔW 信息,因此适应更多的权重矩阵比适应具有更大阶数的单一类型权重效果更好。

6.2 最佳 rank 的大小是多少

实验对比了不同秩大小的模型效果,可以看到,r=1 时 Wq,Wv 就可以满足一定效果,而单独调节 Wq 需要更大的 r。这说明 ΔW 只需要很低的秩(另外两个实验也验证了数据的低秩性质)。

6.3 ΔW 与 W 对比

观察 ∆W 与 W 的相关性,具体方法是将 W 映射到 ∆W 的 r 维子空间中,然后用 Frobenius 范数,对比其一致性。

实验得出结论:与随机矩阵相比,ΔW 与 W 具有更强的相关性;ΔW 不重复 W 的顶部奇异方向,而是仅放大 W 中未强调的方向;放大系数相当大:r = 4 时为 21.5 ≈ 6.91/0.32。这表明低秩适应矩阵可能会放大特定下游任务的重要特征,这些特征是在一般预训练模型中学习但未强调的

7 实用技巧

7.1 LoRA 与 基础模型

根据 LoRA 原理可知,LoRA保存的是精调与基础模型(底模)差异的降维数据,所以 LoRA 与训练它的底模强相关,一般 LoRA 描述中也有对其底模的说明,一般情况下,至少二者的 2D/现实风格需要一致。
当然也有像 “Detail Tweaker LoRA” 这样不挑底模的 LoRA。

7.2 LoRA 权重

在引用 LoRA 时,可在 Prompt 中指定 LoRA 权重,一般默认为 1,虽然 SD 是基于 LDM 技术,理论上,其特征是连续的,可微调的,但是将 LoRA 设得太大,结果往往也是反常识的。

7.3 多个 LoRA 叠加

操作时可以叠加使用多个 LoRA。实际使用时,尽量叠加不同类型的 LoRA,比如一个增加画面细节,另一个修改背景风格,它们调整的往往不是一组权重,问题不大;但是不建议叠加同一类型的 LoRA,在同一组权重上反复计算,效果往往不可控。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/57519.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

自然语言处理(三):基于跳元模型的word2vec实现

跳元模型 回顾一下第一节讲过的跳元模型 跳元模型&#xff08;Skip-gram Model&#xff09;是一种用于学习词向量的模型&#xff0c;属于Word2Vec算法中的一种。它的目标是通过给定一个中心词语来预测其周围的上下文词语。 这节我们以跳元模型为例&#xff0c;讲解word2vec的…

java中的序列化和反序列化

1、序列化是干啥用的&#xff1f; 序列化的原本意图是希望对一个java对象做一下“变换”&#xff0c;变成字节序列&#xff0c;这样一来方便持久化存储到磁盘&#xff0c;另外变换成字节序列也更方便在网络运输和传播&#xff0c;所以概念上很好理解&#xff1a; 序列化&…

python怎么提取视频中的音频

目录 操作步骤 1. 安装MoviePy库&#xff1a; 2. 导入MoviePy库和所需的模块&#xff1a; 3. 提取音频&#xff1a; 可能遇到的问题 1. 编解码器支持&#xff1a; 2. 依赖项安装&#xff1a; 3. 文件路径问题&#xff1a; 4. 内存消耗&#xff1a; 5. 输出文件大小&a…

Linux CentOS安装抓包解包工具Wireshark图形化界面

1.Wireshark介绍 Wireshark 是一个开源的网络协议分析工具&#xff0c;它能够捕获和分析网络数据包&#xff0c;提供深入的网络故障排除、网络性能优化和安全审计等功能。它支持跨多个操作系统&#xff0c;包括 Windows、macOS 和 Linux。 2.Wireshark主要使用方法 捕获数据…

计算机视觉入门 5)自定义卷积网络

系列文章目录 计算机视觉入门 1&#xff09;卷积分类器计算机视觉入门 2&#xff09;卷积和ReLU计算机视觉入门 3&#xff09;最大池化计算机视觉入门 4&#xff09;滑动窗口计算机视觉入门 5&#xff09;自定义卷积网络计算机视觉入门 6&#xff09; 数据集增强&#xff08;D…

数据结构之单链表java实现

基本概念 链表是一种物理存储结构上非连续、非顺序的存储结构&#xff0c;数据元素的逻辑顺序是通过链表中指针链接次序实现的。和数组相比较&#xff0c;链表不需要指定大小&#xff0c;也不需要连续的地址。 单链表的基本设计思维是&#xff0c;利用结构体的设置&#xff0c…

24 | 紧跟时代步伐:微服务模式下API测试要怎么做?

微服务架构&#xff08;Microservice Architecture&#xff09; 微服务是一种架构风格。在微服务架构下&#xff0c;一个大型复杂软件系统不再由一个单体组成&#xff0c;而是由一系列相互独立的微服务组成。其中&#xff0c;各个微服务运行在自己的进程中&#xff0c;开发和部…

C# char曲线控件

一、char曲线显示随机数数据 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Runtime.InteropServices; using System.Text; using System.Threading; using Syst…

Windows 转 mac 记录

初次从Windows转mac可能会不适应&#xff0c;建议先看看 【6分钟搞定MacBook】不懂时无所适从&#xff0c;学会后越用越爽&#xff01;_哔哩哔哩_bilibili 我主要是做一些补充记录 1、Windows的右键等于mac的双击触控板、control单击触控板 2、运行中的应用下方会有一个点&…

安卓webview,网页端生成安卓项目(极速生成)教程

安卓webview&#xff0c;网页端生成安卓项目&#xff08;极速生成&#xff09;教程 一&#xff0c;前言 当自己做了一个PC端的页面&#xff0c;也就是前端的页面&#xff0c;或者已经上服的页面&#xff0c;但也想生成一个安卓端供用户使用&#xff0c;本教程详细讲解如何把前…

Spark整合hive的时候出错

Spark整合hive的时候 连接Hdfs不从我hive所在的机器上找&#xff0c;而是去连接我的集群里的另外两台机器 但是我的集群没有开 所以下面就一直在retry 猜测&#xff1a; 出现这个错误的原因可能与core-site.xml和hdfs-site.xml有关&#xff0c;因为这里面配置了集群的nameno…

高等职业学校物联网实训室建设方案

一、概述 1.1专业背景 物联网&#xff08;Internet of Things&#xff09;被称为继计算机、互联网之后世界信息产业第三次浪潮&#xff0c;它并非一个全新的技术领域&#xff0c;而是现代信息技术发展到一定阶段后出现的一种聚合性应用与技术提升&#xff0c;是随着传感网、通…

无涯教程-分类算法 - Python实现函数

为了在Python中实现SVM&#xff0c;无涯教程将从标准库导入开始&#xff0c;如下所示- import numpy as np import matplotlib.pyplot as plt from scipy import stats import seaborn as sns; sns.set() 接下来&#xff0c;从sklearn.dataset.sample_generator创建具有线性可…

Ceph源码解析:PG peering

集群中的设备异常(异常OSD的添加删除操作)&#xff0c;会导致PG的各个副本间出现数据的不一致现象&#xff0c;这时就需要进行数据的恢复&#xff0c;让所有的副本都达到一致的状态。 一、OSD的故障和处理办法&#xff1a; 1. OSD的故障种类&#xff1a; 故障A&#xff1a;一…

【微服务部署】01-Kubernetes部署流程

文章目录 部署1. Kubernetes是什么2. Kubernetes的优势3. 环境搭建4. 应用部署 部署 1. Kubernetes是什么 Kubernetes是一个用于自动部署、扩展和管理容器化应用程序的开源系统 2. Kubernetes的优势 自动化容器部署资源管理与容器调度服务注册发现与负载均衡内置配置与秘钥…

【缓存设计】记一种不错的缓存设计思路

文章目录 前言场景设计思路小结 前言 之前与同事讨论接口性能问题时听他介绍了一种缓存设计思路&#xff0c;觉得不错&#xff0c;做个记录供以后参考。 场景 假设有个以下格式的接口&#xff1a; GET /api?keys{key1,key2,key3,...}&types{1,2,3,...}其中 keys 是业务…

Gitlab设置中文

1. 打开设置 2.选择首选项Preferences 3. 下滑选择本地化选项Localization&#xff0c;设置简体中文&#xff0c;然后保存更改save changes。刷新网页即可。

Rabbitmq的Federation Exchange

(broker 北京 ) &#xff0c; (broker 深圳 ) 彼此之间相距甚远&#xff0c;网络延迟是一个不得不面对的问题。有一个在北京的业务(Client 北京 ) 需要连接 (broker 北京 ) &#xff0c;向其中的交换器 exchangeA 发送消息&#xff0c;此时的网络延迟很小&#xff0c;(C…

开源文库系统moredoc

什么是 moredoc &#xff1f; moredoc 中文名 魔豆文库&#xff0c;是基于 golang 开发的类似百度文库、新浪爱问文库的开源文库系统&#xff0c;支持 TXT、PDF、EPUB、MOBI、Office 等格式文档的在线预览与管理&#xff0c;为 dochub 文库(github, gitee &#xff09;的重构版…

k8s的交付与部署案例操作

一 k8s的概念 1.1 k8s k8s是一个轻量级的&#xff0c;用于管理容器化应用和服务的平台。通过k8s能够进行应用的自动化部署和扩容缩容。 1.2 k8s核心部分 1.prod: 最小的部署单元&#xff1b;一组容器的集合&#xff1b;共享网络&#xff1b;生命周期是短暂的&#xff1b; …