论文《LoRA: Low-Rank Adaptation of Large Language Models》阅读

论文《LoRA: Low-Rank Adaptation of Large Language Models》阅读

今天带来的是由微软Edward Hu等人完成并发表在ICLR 2022上的论文《LoRA: Low-Rank Adaptation of Large Language Models》,论文提出了大模型 tuning 框架 LoRALow-Rank Adaptation)。

论文地址:https://openreview.net/pdf?id=nZeVKeeFYf9
附录下载地址:https://openreview.net/attachment?id=nZeVKeeFYf9&name=supplementary_material
代码地址:https://github.com/microsoft/LoRA

Background

一些术语介绍:

· Intrinsic Dimension(本征维度):An objective function’s intrinsic dimensionality describes the minimum dimension needed to solve the optimization problem it defines to some precision level. 是指在pre-trained LLM中,对于下游的tuning工作,实际上不需要对模型所有参数都进行更新,在保证某种精度(如90%)的要求下,可以只更新一部分就可以了(可称为 d 90 d_{90} d90)。

few-shot learning:少样本学习。借助于少样本学习,大模型在特定下游任务的训练过程中,只需要少数的特定任务数据就可以发挥不错的性能。

Prompt Engineering:提示工程。这是 LLM 在 NLP 应用中的特有应用,类似于特征工程,是一种需要专家背景知识,通过组织input的格式,风格等内容,使得输入内容对LLM能够具备更好的促进作用。

Adaptation:适应。也就是大模型对特定下游任务的tuning,使其能够在下游任务中性能更好。

Introduciton

本文提出的主要出发点在于 大模型 的训练模式,即先通过对 大量的 task-independent 语料的预训练,然后再在特定任务上进行精调 fine-tuning,使得模型能够在特定的下游任务中展现较好的表现。

这里就出现一个问题,大模型无论是在存储还是计算上,都是很大的,需要很大的算力和存储。Fine-tuning所有参数就会很费时费力。举例来说,GPT-3 175B总共包含175 billion个参数,也就是1750亿个,fine-tuning所有层,所有Transformer中的Q K V 和 output 矩阵加上 bias,可想而知是一个很大的开销。如何解决这个问题构成本文的 Motivation。

当然已经有诸多此类问题的解决方案。例如,Adapter Layer,也就是在Transformer中插入了两层Adapter Layer 来适应下游任务,只更新Adapter Layer 中的参数,原来的Transformer中的参数 不进行更新。这类模型的问题在于,Adapter Layer 和原来的大模型参数是从输入到输出上下夹在一起的(类似于汉堡),参数计算时必须从输入到输出一层一层进行。那么模型在推理的时候,就必然涉及到等上一层计算完才可以计算下一层,那么就带来了模型的延迟,影响模型体验。

作者提出了低秩矩阵乘法作为任意矩阵 W W W的 特定增量 Δ W \Delta W ΔW,通过只更新 Δ W \Delta W ΔW 的方式减小模型开销的同时,保住模型性能。

是的,模型就是这么“简单”,但是一方面模型的切入点非常犀利;另一方面模型性能不错且带来了巨大的 tuning 节省,让贫穷的学生党探索大模型时能够更自如一些;同时,本文的实验部分也非常充分(附录中),在不同benchmark中的表现都能够佐证LoRA模型的有效性。

在这里插入图片描述

Problem Statement

首先是问题形式化,对于fine-tuning,就是把预训练完成的所有参数checkpoint进行存储dump,在精调阶段,将所有参数初始化为dump出来的value,以此作为参数更新的起始点,完成模型优化。表示如下:

max ⁡ Φ ∑ ( x , y ) ∈ Z ∑ t = 1 ∣ y ∣ log ⁡ ( P Φ ( y t ∣ x , y < t ) ) (1) \max _{\Phi} \sum_{(x, y) \in \mathcal{Z}} \sum_{t=1}^{|y|} \log \left(P_{\Phi}\left(y_{t} \mid x, y_{<t}\right)\right) \tag{1} Φmax(x,y)Zt=1ylog(PΦ(ytx,y<t))(1)
如上所示,通过对下游任务数据集 Z \mathcal{Z} Z 进行模型所有参数 Φ \Phi Φ 的更新。如果 Φ {\Phi} Φ 很大,那么fine-tuning 就会很麻烦。

对此,作者提出了只更新 task-specific 的 新引入的 少量的参数 Δ Φ = Δ Φ ( Θ ) \Delta \Phi = \Delta \Phi(\Theta) ΔΦ=ΔΦ(Θ),完成模型的tuning。这里 Θ \Theta Θ 是新参数,而且维度相比较于原LLM模型很小( ∣ Θ ∣ ≪ ∣ Φ 0 ∣ |\Theta| \ll |\Phi_{0}| ∣Θ∣Φ0。作者指出,LoRA能够将需要更新的参数数量缩小到万分之一的地步。

max ⁡ Θ ∑ ( x , y ) ∈ Z ∑ t = 1 ∣ y ∣ log ⁡ ( p Φ 0 + Δ Φ ( Θ ) ( y t ∣ x , y < t ) ) (2) \max _{\Theta} \sum_{(x, y) \in \mathcal{Z}} \sum_{t=1}^{|y|} \log \left(p_{\Phi_{0}+\Delta \Phi(\Theta)}\left(y_{t} \mid x, y_{<t}\right)\right) \tag{2} Θmax(x,y)Zt=1ylog(pΦ0+ΔΦ(Θ)(ytx,y<t))(2)

Methodology

LoRA的具体设计实际上用两句话可以完成概括,(1)引入低秩矩阵进行 Δ W \Delta W ΔW 的计算;(2)选择哪些矩阵进行引入。

Δ W \Delta W ΔW 的选择

对于 Δ W \Delta W ΔW 的计算,如下所示:
h = W 0 x + Δ W x = W 0 x + B A x (3) h=W_{0} x+\Delta W x=W_{0} x+B A x \tag{3} h=W0x+ΔWx=W0x+BAx(3)
即,针对Transformer中的矩阵,加入一个 B ⋅ A B \cdot A BA 的操作,其中, B B B A A A 共享的那个维度是 r r r,远小于 输入维度( x x x 的维度)和 输出维度 ( h h h 的维度)。

W W W的选择

Transformer中的几个矩阵可以分为四类,这里分别表示为Q/K/V/O,分别对应到query/key/value/output。作者在附录中加入了对矩阵的选择(所有可训练参数总数18M, 18 M / 175 B ≈ 1 / 10 K 18M/175B \approx 1/10K 18M/175B1/10K),可以看到对QKVO所有矩阵都进行更新,性能最佳。但是在文中,作者普遍使用了只更新QV的方式,并说QV表现更好,这里不太明白。

Applying Choices

总结

本文simple but effective,值得一看!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Python机器学习】实验16 卷积、下采样、经典卷积网络

文章目录 卷积、下采样、经典卷积网络1. 对图像进行卷积处理2. 池化3. VGGNET4. 采用预训练的Resnet实现猫狗识别 TensorFlow2.2基本应用5. 使用深度学习进行手写数字识别 卷积、下采样、经典卷积网络 1. 对图像进行卷积处理 import cv2 path data\instance\p67.jpg input_…

海外ios应用商店优化排名因素之关键词

与Google Play Store相比&#xff0c;在Apple的App Store中&#xff0c;应用描述不会影响关键词排名。不过有一个专门针对App Store的关键词列表&#xff0c;我们可以在其中放置相关关键词。 1、关键词列表的限制仅为100个字符。 使用排名的竞争性较低的关键词&#xff0c;尝试…

HTML-常见标签、HTML5新特性

HTML 软件架构 1.C/S架构 (1) C/S架构即Client/Server&#xff08;客户机/服务器&#xff09;结构。 (2) C/S 架构特点 ​ C/S结构在技术上很成熟&#xff0c;它的主要特点是交互性强、具有安全的存取模式、网络通信量低、响应速度快、利于处理大量数据。但是该结构的程序是…

基于Linux操作系统中的shell脚本

目录 前言 一、概述 1、什么是shell&#xff1f; 2、shell脚本的用途有哪些&#xff1f; 3、常见的shell有哪些&#xff1f; 4、学习shell应该从哪几个方面入手&#xff1f; 4.1、表达式 1&#xff09;变量 2&#xff09;运算符 4.2、语句 1&#xff09;条件语句&am…

odoo安装启动遇到的问题

问题&#xff1a;在第一次加载odoo配置文件的时候&#xff0c;启动失败 方法&#xff1a; 1、先检查odoo.conf的内容&#xff0c;尤其是路径 [options] ; This is the password that allows database operations: ; admin_passwd admin db_host 127.0.0.1 db_port 5432 d…

【LangChain系列 1】 LangChain初探

原文链接&#xff1a;【LangChain系列 1】LangChain初探https://mp.weixin.qq.com/s/9UpbM84LlsHOaMS7cbRfeQ 本文速读&#xff1a; LangChain是什么 LangChain初探 环境准备 LLMs Prompt Templates Output Parser 第一个LLMChain应用 01 LangChain是什么 LangChain是一…

MongoDB快速上手

MongoDB快速上手 MongoDB用起来-快速上手&集群和安全系列 课程目标&#xff1a; 理解MongoDB的业务场景、熟悉MongoDB的简介、特点和体系结构、数据类型等能够在windows和linux下安装和启动MongoDB、图形化管理界面Compass的安装使用掌握MongoDB基本常用命令实现数据的C…

计算机毕业设计源码-基于java+springboot+vue开发的短视频播放系统-lw

参考源码 文章目录 前言一、项目运行环境配置二、主要技术javaMysql数据库JSP技术B/S结构 三、系统设计四、功能截图总结 前言 随着社会的不断发展与进步&#xff0c;21世纪的今天&#xff0c;人们对信息科学的认识已由低层次向高层次发展&#xff0c;从感性认识逐渐提高到理…

17.2 【Linux】通过 systemctl 管理服务

systemd这个启动服务的机制&#xff0c;是通过一支名为systemctl的指令来处理的。跟以前 systemV 需要 service / chkconfig / setup / init 等指令来协助不同&#xff0c; systemd 就是仅有systemctl 这个指令来处理而已。 17.2.1 通过 systemctl 管理单一服务 &#xff08;s…

logstash配置文件

input { kafka { topics > “xxxx” bootstrap_servers > “ip:port” auto_offset_reset > “xxxx” group_id > “xxxx” consumer_threads > 3 codec > “json” } } filter { grok { match > { “message” > ‘%{IP:client_ip} - - [%{HTTPDATE:…

神仙般的css动画参考网址,使用animate.css

Animate.css | A cross-browser library of CSS animations.Animate.css is a library of ready-to-use, cross-browser animations for you to use in your projects. Great for emphasis, home pages, sliders, and attention-guiding hints.https://animate.style/这里面有很…

大语言模型微调实践——LoRA 微调细节

1. 引言 近年来人工智能领域不断进步&#xff0c;大语言模型的崛起引领了自然语言处理的革命。这些参数量巨大的预训练模型&#xff0c;凭借其在大规模数据上学习到的丰富语言表示&#xff0c;为我们带来了前所未有的文本理解和生成能力。然而&#xff0c;要使这些通用模型在特…

全流程R语言Meta分析核心技术应用

Meta分析是针对某一科研问题&#xff0c;根据明确的搜索策略、选择筛选文献标准、采用严格的评价方法&#xff0c;对来源不同的研究成果进行收集、合并及定量统计分析的方法&#xff0c;最早出现于“循证医学”&#xff0c;现已广泛应用于农林生态&#xff0c;资源环境等方面。…

写之前的项目关于使用git remote -v 找不到项目地址的解决方案

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、报错解析1. 报错内容2. 报错翻译3. 报错解析&#xff08;1&#xff09;使用git branch来查看git仓库有几个分支&#xff08;2&#xff09;使用git remote -v&am…

商城-学习整理-高级-性能压测缓存问题(十一)

目录 一、基本介绍1、性能指标2、JMeter1、JMeter 安装2、JMeter 压测示例1、添加线程组2、添加 HTTP 请求3、添加监听器4、启动压测&查看分析结果 3、JMeter Address Already in use 错误解决 二、性能监控1、jvm 内存模型2、堆3、jconsole 与 jvisualvm1、jvisualvm 能干…

暴力递归汉诺塔问题

暴力递归 将问题转化为规模缩小了的同类问题的子问题。有明确的不需要继续递归的条件&#xff08;base case&#xff09;有当得到了子问题的结果之后的决策过程不记录每一个子问题的解 暴力递归的要点大致可以分为以上四条&#xff0c;但是总结起来就是一句话&#xff1a;不断…

记录Taro巨坑,找不到sass类型定义文件

问题 taronutuisassts项目里tsconfig.json一直报红报错。 找不到“sass”的类型定义文件。 程序包含该文件是因为: 隐式类型库 “sass” 的入口点 其实正常人想的肯定是装上 types/sass试试。开始我试过了&#xff0c;没用。删了依赖重装也没用。后面在issue中找到答案了 解决…

SpringBoot + Vue 微人事(十二)

职位批量删除实现 编写后端接口 PositionController DeleteMapping("/")public RespBean deletePositionByIds(Integer[] ids){if(positionsService.deletePositionsByIds(ids)ids.length){return RespBean.ok("删除成功");}return RespBean.err("删…

案例-基于MVC和三层架构实现商品表的增删改查

文章目录 0. 项目介绍1. 环境准备2. 查看所有2.1 编写BrandMapper接口2.2 编写服务类&#xff0c;创建BrandService&#xff0c;用于调用该方法2.5 编写Servlet2.4 编写brand.jsp页面2.5 测试 3.添加3.1 编写BrandMapper接口 添加方法3.2 编写服务3.3 改写Brand.jsp页面&#x…

item_search_img-按图搜索淘宝商品(拍立淘)

一、接口参数说明&#xff1a; item_search_img-按图搜索淘宝商品&#xff08;拍立淘&#xff09;&#xff0c;点击更多API调试&#xff0c;请移步注册API账号点击获取测试key和secret 公共参数 请求地址: https://api-gw.onebound.cn/taobao/item_search_img 名称类型必须描…