当前位置: 首页 > article >正文

论文阅读笔记——LORA: LOW-RANK ADAPTATION OF LARGE LANGUAGE MODELS

LoRA 论文
传统全面微调,对每个任务学习的参数与原始模型相同:
m a x Φ ∑ ( x , y ) ∈ Z ∑ t = 1 ∣ y ∣ l o g ( P Φ ( y t ∣ x , y < t ) ) 式(1) max_{\Phi}\sum_{(x,y)\in Z}\sum^{|y|}_{t=1}log(P_{\Phi}(y_t|x,y<t)) \qquad \text{式(1)} maxΦ(x,y)Zt=1ylog(PΦ(ytx,y<t))(1)
LoRA 提出对模型中权重更新部分低秩分解,编码任务特定的参数,大幅减少所需参数规模,同时优化 Θ \Theta Θ 来寻找 Δ Θ \Delta \Theta ΔΘ 。对于 175B 的 GPT-3 参数量只有原来的 0.01%。
m a x Θ ∑ ( x , y ) ∈ Z ∑ t = 1 ∣ y ∣ l o g ( p Φ 0 + Δ Φ ( Θ ) ( y t ∣ x , y < t ) ) max_{\Theta}\sum_{(x,y)\in Z}\sum^{|y|}_{t=1}log(p_{\Phi_0+\Delta \Phi(\Theta})(y_t|x,y<t)) maxΘ(x,y)Zt=1ylog(pΦ0+ΔΦ(Θ)(ytx,y<t))

传统方法不足

  • 添加 adapters 的策略虽然参数少,但会在推理阶段引入延迟——增加了模型深度。并且有额外参数和计算,在模型中这些会被放大。
  • 直接优化输入层(prefix)在训练参数方面并非单调变化且保留一部分长度进行调整降低了下游任务的序列长度——占用了一部分序列长度,减少了可用的输入序列长度。并且他的优化难度也大。

LoRA

在这里插入图片描述
核心思想:对于一个预训练的 W 0 ∈ R d × k W_0 \in R^{d×k} W0Rd×k ,训练低秩矩阵 B A BA BA 来替代权重更新部分 Δ W \Delta W ΔW d i m ( A ) = r × k , d i m ( B ) = d × r r < < m i n ( d , k ) dim(A) = r×k, \quad dim(B)=d×r \quad r << min(d,k) dim(A)=r×k,dim(B)=d×rr<<min(d,k)
h = W 0 x + Δ W x = W 0 x + B A x h=W_0x+\Delta Wx=W_0x+BAx h=W0x+ΔWx=W0x+BAx
其中,A 采取随机高斯初始化,B 为 0。

LoRA 在适应期间不需要满足满秩的条件,只需要将 r 设置为预训练权重矩阵的秩,大致可恢复完全微调的能力,可以维持原来架构。

LoRA 优势:

  1. 参数高效:训练参数减少了数千倍,例如在GPT-3中,训练参数从1750亿减少到数百万甚至更少。
  2. 计算资源节省:由于需要计算梯度的参数大大减少,显存占用降低,训练速度加快。
  3. 无额外推理延迟:训练完成后,可以将低秩更新融合到预训练权重中,推理时无需额外计算。
  4. 任务切换灵活:不同任务只需存储和加载小的低秩矩阵,实现快速切换,减少存储需求。
    将 LoRA 应用于 transformer 架构中,只需要对自注意力模块 ( W q , W k , W v , W 0 ) (W_q,W_k,W_v,W_0) (Wq,Wk,Wv,W0) 中的 W q , W v W_q,W_v Wq,Wv 进行适应,保持 MLP 不变。
    在下游部署时,只需要减去 B A BA BA 即可恢复 W 0 W_0 W0,再根据任务需求加上对应 B ′ A ′ B^{'}A^{'} BA 。最明显的好处在于内存和存储使用量减少。

实验结果

在这里插入图片描述

代码实现

class LoRALayer():def __init__(self, r: int, lora_alpha: int, lora_dropout: float,merge_weights: bool,):self.r = rself.lora_alpha = lora_alpha# Optional dropoutif lora_dropout > 0.:self.lora_dropout = nn.Dropout(p=lora_dropout)else:self.lora_dropout = lambda x: x# Mark the weight as unmergedself.merged = Falseself.merge_weights = merge_weights
class Embedding(nn.Embedding, LoRALayer):def __init__(self,num_embeddings: int,embedding_dim: int,r: int = 0,lora_alpha: int = 1,merge_weights: bool = True,**kwargs):nn.Embedding.__init__(self, num_embeddings, embedding_dim, **kwargs)LoRALayer.__init__(self, r=r, lora_alpha=lora_alpha, lora_dropout=0,merge_weights=merge_weights)if r > 0:self.lora_A = nn.Parameter(self.weight.new_zeros((r, num_embeddings)))self.lora_B = nn.Parameter(self.weight.new_zeros((embedding_dim, r)))self.scaling = self.lora_alpha / self.r# 冻结预训练权重self.weight.requires_grad = Falseself.reset_parameters()def reset_parameters(self):nn.Embedding.reset_parameters(self)if hasattr(self, 'lora_A'):nn.init.zeros_(self.lora_A)nn.init.normal_(self.lora_B)def train(self, mode: bool = True):nn.Embedding.train(self, mode)if mode:if self.merge_weights and self.merged:if self.r > 0:self.weight.data -= (self.lora_B @ self.lora_A).transpose(0, 1) * self.scalingself.merged = Falseelse:if self.merge_weights and not self.merged:# Merge the weights and mark itif self.r > 0:self.weight.data += (self.lora_B @ self.lora_A).transpose(0, 1) * self.scalingself.merged = Truedef forward(self, x: torch.Tensor):if self.r > 0 and not self.merged:result = nn.Embedding.forward(self, x)after_A = F.embedding(x, self.lora_A.transpose(0, 1), self.padding_idx, self.max_norm,self.norm_type, self.scale_grad_by_freq, self.sparse)result += (after_A @ self.lora_B.transpose(0, 1)) * self.scalingreturn resultelse:return nn.Embedding.forward(self, x)

相关文章:

论文阅读笔记——LORA: LOW-RANK ADAPTATION OF LARGE LANGUAGE MODELS

LoRA 论文 传统全面微调&#xff0c;对每个任务学习的参数与原始模型相同&#xff1a; m a x Φ ∑ ( x , y ) ∈ Z ∑ t 1 ∣ y ∣ l o g ( P Φ ( y t ∣ x , y < t ) ) 式(1) max_{\Phi}\sum_{(x,y)\in Z}\sum^{|y|}_{t1}log(P_{\Phi}(y_t|x,y<t)) \qquad \text{式(…...

UE5中 Character、PlayerController、PlayerState、GameMode和GameState核心类之间的联动和分工·

1. GameMode 与 GameState 关系描述 GameMode&#xff1a;定义游戏规则和逻辑&#xff0c;控制游戏的开始、进行和结束。GameState&#xff1a;存储和同步全局游戏状态&#xff0c;如得分、时间、胜利条件等。 联动方式 GameMode初始化GameState&#xff1a;GameMode在游戏…...

Redis的IO多路复用机制:高效的网络通信设计

在高并发、高性能的应用中&#xff0c;如何有效地管理和处理大量的客户端请求是一个至关重要的问题。Redis作为一个高性能的内存数据存储系统&#xff0c;面对大量并发客户端请求时&#xff0c;需要具备良好的网络通信能力。在Redis的设计中&#xff0c;IO多路复用机制是其核心…...

Ubuntu24.04 启动后突然进入tty,无法进入图形界面

问题描述 昨晚在编译 Android AOSP 14 后&#xff0c;进入了登录页面&#xff0c;但出现了无法输入密码的情况&#xff0c;且无法正常关机&#xff0c;只能强制重启。重启后&#xff0c;系统只能进入 TTY 页面&#xff0c;无法进入图形界面。 问题排查 经过初步排查&#x…...

搭建主从服务器

任务需求 客户端通过访问 www.nihao.com 后&#xff0c;能够通过 dns 域名解析&#xff0c;访问到 nginx 服务中由 nfs 共享的首页文件&#xff0c;内容为&#xff1a;Very good, you have successfully set up the system. 各个主机能够实现时间同步&#xff0c;并且都开启防…...

jenkins 配置邮件问题整理

版本&#xff1a;Jenkins 2.492.1 插件&#xff1a; A.jenkins自带的&#xff0c; B.安装功能强大的插件 配置流程&#xff1a; 1. jenkins->系统配置->Jenkins Location 此处的”系统管理员邮件地址“&#xff0c;是配置之后发件人的email。 2.配置系统自带的邮件A…...

Scala语言的计算机基础

Scala语言的计算机基础 计算机科学是一门极具挑战性和创造力的学科&#xff0c;其中编程语言是连接人类与计算机的桥梁。Scala&#xff08;特指可扩展语言&#xff09;作为一种现代编程语言&#xff0c;其设计初衷是为了简化软件开发过程&#xff0c;并结合了面向对象和函数式…...

定义模型生成数据表

1. 数据库配置 js import { Sequelize, DataTypes } from sequelize; // 创建一个 Sequelize 实例&#xff0c;连接到 SQLite 数据库。 export const sequelize new Sequelize(test, sa, "123456", { host: localhost, dialect: sqlite, storage: ./blog.db })…...

JVM中常量池和运行时常量池、字符串常量池三者之间的关系

文章目录 前言常量池&#xff08;Constant Pool&#xff09;运行时常量池&#xff08;Runtime Constant Pool&#xff09;字符串常量池&#xff08;String Literal Pool&#xff09;运行时常量池和字符串常量池位置变化方法区与永久代和元空间的关系三者之间的关系常量池与运行…...

KV 缓存简介

以下是关于 KV缓存&#xff08;Key-Value Cache&#xff09; 的简介&#xff0c;涵盖其定义、原理、作用及优化意义&#xff1a; 1. 什么是KV缓存&#xff1f; KV缓存 是Transformer架构&#xff08;如GPT、LLaMA等大模型&#xff09;在自回归生成任务&#xff08;如文本生成&…...

Mysql篇——SQL优化

本篇将带领各位了解一些常见的sql优化方法&#xff0c;学到就是赚到&#xff0c;一起跟着练习吧~ SQL优化 准备工作 准备的话我们肯定是需要一张表的&#xff0c;什么表都可以&#xff0c;这里先给出我的表结构&#xff08;表名&#xff1a;userinfo&#xff09; 通过sql查看…...

算法基础 -- ARM 体系架构设计专家的算法提升目标

算法提升目标:ARM 体系架构设计专家 1. 位运算优化 相关 ARM 知识点&#xff1a;SIMD、NEON、SVE、低功耗优化、加密计算、数据压缩 推荐题目&#xff1a; 136. 只出现一次的数字&#xff08;异或运算&#xff09;190. 颠倒二进制位&#xff08;位反转&#xff0c;ARM rbit…...

不同开发语言对字符串的操作

一、字符串的访问 Objective-C: 使用 characterAtIndex: 方法访问字符。 NSString *str "Hello, World!"; unichar character [str characterAtIndex:0]; // 访问第一个字符 H NSLog("%C", character); // 输出: H NSString 内部存储的是 UTF-16 编…...

Oracle Linux Server 7.9安装fail2ban

yum search oracle-epel-release yum install oracle-epel-release-el7 search fail2ban yum install fail2ban nano /etc/fail2ban/jail.d/00-firewalld.conf # defalut这里是设定全局设置&#xff0c;如果下面的监控没有设置就以全局设置的值设置。 [DEFAULT] # 用于指定哪…...

FPGA|Verilog-SPI驱动

最近准备蓝桥杯FPGA的竞赛&#xff0c;因为感觉官方出的IIC的驱动代码思路非常好&#xff0c;写的内容非常有逻辑并且规范。也想学习一下SPI的协议&#xff0c;所以准备自己照着写一下。直到我打开他们给出的SPI底层驱动&#xff0c;我整个人傻眼了&#xff0c;我只能说&#x…...

Windows11 新机开荒(二)电脑优化设置

目录 前言&#xff1a; 一、注册微软账号绑定权益 二、此电脑 桌面图标 三、系统分盘及默认存储位置更改 3.1 系统分盘 3.2 默认存储位置更改 四、精简任务栏 总结&#xff1a; 前言&#xff1a; 本文承接上一篇 新机开荒&#xff08;一&#xff09; 上一篇文章地址&…...

关于deepseek R1模型分布式推理效率分析

1、引言 DeepSeek R1 采用了混合专家&#xff08;Mixture of Experts&#xff0c;MoE&#xff09;架构&#xff0c;包含多个专家子网络&#xff0c;并通过一个门控机制动态地激活最相关的专家来处理特定的任务 。DeepSeek R1 总共有 6710 亿个参数&#xff0c;但在每个前向传播…...

揭秘大数据 | 9、大数据从何而来?

在科技发展史上&#xff0c;恐怕没有任何一种新生事物深入人心的速度堪比大数据。 如果把2012年作为数据量爆发性增长的第一年&#xff0c;那么短短数年&#xff0c;大数据就红遍街头巷尾——从工业界到商业界、学术界&#xff0c;所有的行业都经受了大数据的洗礼。从技术的迭…...

使用Dependency Walker和Beyond Compare快速排查dll动态库损坏或被篡改的问题

目录 1、问题描述 2、用Dependency Walker工具打开qr.dll库&#xff0c;查看库与库的依赖关系以及接口调用情况&#xff0c;定位问题 3、使用Beyond Compare工具比较一下正常的msvcr100d.dll和问题msvcr100d.dll的差异 4、最后 C软件异常排查从入门到精通系列教程&#xff…...

3.14学习总结 排序算法

插入排序&#xff1a; 1.直接插入排序 维护一个有序区&#xff0c;把元素一个个插入有序区的适当位置&#xff0c;直到所有元素都有序为止。 for (int i 0;i < n - 1;i) {//升序int end i;int temp k[end 1];while (end > 0) {if (temp < k[end]) {k[end 1] …...

Hadoop、Spark、Flink Shuffle对比

一、Hadoop的shuffle 前置知识&#xff1a; Map任务的数量由Hadoop框架自动计算&#xff0c;等于分片数量&#xff0c;等于输入文件总大小 / 分片大小&#xff0c;分片大小为HDFS默认值128M&#xff0c;可调 Reduce任务数由用户在作业提交时通过Job.setNumReduceTasks(int)设…...

本地部署 RAGFlow - 修改默认端口

本地部署 RAGFlow - 修改默认端口 1. 前提条件2. 部署 RAGFlow 1. 前提条件 确保 vm.max_map_count 不小于 262144&#xff1a; 如需确认 vm.max_map_count 的大小&#xff1a; sysctl vm.max_map_count如果 vm.max_map_count 的值小于 262144&#xff0c;可以进行重置&…...

repo init 错误 Permission denied (publickey)

一、已经生成ssh-key并设置到gerrit上 二、已经设置.gitconfig &#xff08;此步骤是公司要求&#xff0c;设置gerrit地址为一个别名之类的&#xff0c;有的公司不需要&#xff09; 然后出现下面的错误&#xff0c;最后发现忘记设置git的用户名和邮箱 1. git config --globa…...

Django settings.py 文件全解析

本篇详细介绍 Django settings.py 文件各个配置项的教程&#xff0c;涵盖核心配置项的作用及最佳实践 一、基础配置 1. ​BASE_DIR BASE_DIR Path(__file__).resolve().parent.parent​作用&#xff1a;项目根目录路径&#xff0c;用于构建其他路径&#xff08;如模板、静态…...

TSB - AD 解读 — 迈向可靠、透明的 TSAD 任务

目录 一 文章动机 二 TSAD 领域内的两类缺陷 三 数据集的构建 四 实验结果及结论 项目宣传链接&#xff1a;TSB-AD 代码链接&#xff1a; TheDatumOrg/TSB-AD: TSB-AD: Towards A Reliable Time-Series Anomaly Detection Benchmark 原作者解读&#xff1a;NeurIPS 2…...

下载 CSS 文件阻塞,会阻塞构建 DOM 树吗?会阻塞页面的显示吗?

下载 CSS 文件会对页面的渲染过程产生影响&#xff0c;具体是否阻塞 DOM 树的构建和页面的显示&#xff0c;取决于浏览器的渲染机制。 1. CSS 文件下载是否会阻塞 DOM 树的构建&#xff1f; 一般情况下&#xff0c;CSS 文件下载不会阻塞 DOM 树的构建&#xff1a; DOM 树的构建…...

6个月的Go语言学习甘特图路线图 从零基础到项目实战

以下是为期6个月的Go语言学习甘特图&#xff08;2025年4月-2025年10月&#xff09;&#xff0c;包含详细阶段划分、对应资源及项目产出文档说明&#xff1a; #mermaid-svg-yQbkZCpCAXv6iXKC {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fi…...

论文阅读:2023-arxiv Can AI-Generated Text be Reliably Detected?

总目录 大模型安全相关研究&#xff1a;https://blog.csdn.net/WhiffeYF/article/details/142132328 文章目录 Abstract&#xff08;摘要&#xff09;1 Introduction&#xff08;引言&#xff09;Conclusion&#xff08;结论&#xff09; Can AI-Generated Text be Reliably D…...

查看IP地址/Ping 命令

目录 Windows Linux macOS Ping 命令 Windows 使用终端&#xff1a; 按下 Win R 键&#xff0c;打开“运行”对话框&#xff0c;输入 cmd 并按 Enter。 在命令提示符中输入 ipconfig&#xff0c;按 Enter。系统会显示网络适配器的详细信息&#xff0c;包括 IPv4 地址、子…...

Language Models are Few-Shot Learners,GPT-3详细讲解

GPT的训练范式&#xff1a;预训练Fine-Tuning GPT2的训练范式&#xff1a;预训练Prompt predict &#xff08;zero-shot learning&#xff09; GPT3的训练范式&#xff1a;预训练Prompt predict &#xff08;few-shot learning&#xff09; GPT2的性能太差&#xff0c;新意高&…...