惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

P
Proofpoint News Feed
Microsoft Azure Blog
Microsoft Azure Blog
Jina AI
Jina AI
博客园_首页
宝玉的分享
宝玉的分享
The Cloudflare Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
量子位
T
Tailwind CSS Blog
雷峰网
雷峰网
Blog — PlanetScale
Blog — PlanetScale
Last Week in AI
Last Week in AI
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Hugging Face - Blog
Hugging Face - Blog
月光博客
月光博客
罗磊的独立博客
F
Fortinet All Blogs
酷 壳 – CoolShell
酷 壳 – CoolShell
Stack Overflow Blog
Stack Overflow Blog
J
Java Code Geeks
V
V2EX
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
The GitHub Blog
The GitHub Blog
Apple Machine Learning Research
Apple Machine Learning Research
博客园 - 聂微东
U
Unit 42
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
D
Docker
阮一峰的网络日志
阮一峰的网络日志
I
InfoQ
Simon Willison's Weblog
Simon Willison's Weblog
D
DataBreaches.Net
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
I
Intezer
Scott Helme
Scott Helme
B
Blog
M
MIT News - Artificial intelligence
K
Kaspersky official blog
H
Help Net Security
V
Vulnerabilities – Threatpost
C
CXSECURITY Database RSS Feed - CXSecurity.com
Engineering at Meta
Engineering at Meta
博客园 - 【当耐特】
L
Lohrmann on Cybersecurity
P
Privacy & Cybersecurity Law Blog
Project Zero
Project Zero
The Hacker News
The Hacker News
B
Blog RSS Feed
T
Tor Project blog

StudyingLover's Blog

Diffusion Policy笔记 rwkv笔记 act笔记 nanovllm-block_manager opencode多智能体 nanobot-pre-train nanobot-rl nanobot-sft nanobot-checkpoint_manager nanobot-gpt nanobot-mid-train Vision Mamba (Vim)笔记 BPE演示 最后一遍学习Transformer YOLOv5 目标检测笔记 下载根服务器解析记录 Dynaseal A Backend-Controlled LLM API Key Distribution Scheme with Constrained Invocation Parameters 判断链表有环 王道25数据结构勘误 关于perplexity的open-sourcing-r1-1776 AI为什么不像人类一样进行多轮对话 新博客改造日记和功能测试 linuxqq只显示登陆背景图 数字设计和计算机体系结构(机械工业出版社)勘误(自制) Dynaseal:面向未来端侧llm agent的llm api key分发机制 A Definitive Guide to Markdown Style This post is using MDX, Where you can embed JSX and Astro components RT-Patch学习 pydantic实现的LLM ReAct fastapi 和 uvicorn 设置监听 ipv6 pydantic+openai+json 控制大模型输出的最佳范式 解决 Matplotlib Scatter 不支持 Marker 列表的问题:mscatter 实现 roofline model zhipuAI接口兼容openai 在docker部署fastapi宝塔里使用nginx反代套上cloudflare获取请求的真实ip clion搭建libbpf-bootstrap开发环境 coze+coze-discord-proxy+ChatNextWebUI实现AI自由 安卓内核时间使用的是UTC时间 colab运行google最新开源模型Gemma Sora技术报告 视频生成模型作为世界模拟器 笔记 archlinux flutter开发踩坑 fastapi集成google auth登录 linux下NTFS磁盘报错输入输出错误 Venn-Abers 预测器 基于Venn-Abers预测器的系统日志异常检测方法_顾兆军 手机平板远程访问kvm虚拟机的windows phi-2弱智吧测评 poe的gemini pro或是百度开发 google gemini api使用 google gemini api申请 构建用于复杂数据处理的高效UDP服务器和客户端 matplotlib中文字体渲染 TruFor笔记和代码复现 深入分析:GitHub Trending 项目 "multipleWindow3dScene" pua大模型 ggml教程|mnist手写体识别量化推理 xgboost2.0最佳实践 xgboost使用GPU最佳实践 马踏棋盘 cloudlflare推理llama2 docker搭建elasticsearch并使用python连接 FreeU-文字生成图片的免费午餐笔记 使用xgboost的c接口推理模型 Archlinux使用CMake调用xgboost的c接口 m2cgen生成机器学习c语言推理代码 xgboost模型序列化存储并推理 speculative-sampling笔记 prompt2model笔记 RoboTAP笔记 自建obsidian同步服务 MediaPipe即将推出图像生成服务 Dual-Stream Diffusion Net for Text-to-Video Generation笔记 ViT在DDPM取代UNet(DiT) arch4edu搞崩了我的flutter LISA(推理分割)笔记 在终端绘制GPU显存使用曲线 GPTBot介绍 arch蓝牙无法连接 GPU部署llama-cpp-python(llama.cpp通用) 花式求GCD 使用llama构建一个蜜罐(前端) 使用llama构建一个蜜罐(后端) llama-cpp-python快速上手 快速上手llama2.c(更新版) Paper Gestalt笔记 DINO-v2笔记 快速上手llama2.c AnyDoor笔记 Archlinux安装scrcpy加载共享库出错 error while loading shared libraries:libusb-1.0.so.0:wrong ELF class:ELFCLASS32 npc_gzip笔记 python调用c++函数 Filesystem type ntfs3,ntfs not configured in kernel open_clip编码图像和文本 PicGo配置CloudflareR2图片储存 ArchlinuxGnome快捷键打开终端 clip-interrogator代码解析 GroundingDINO安装报错解决 2023华为鲲鹏畅想日暨西安高新国际会议中心零食午饭测评 RoboMaster开源仓库汇总(长期更新) 没有手都可以在腾讯云创建镜像
LoRA 笔记
About the Author StudyingLover · 2023-06-13 · via StudyingLover's Blog

LoRA 笔记

自然语言处理的一个重要范式包括对一般领域数据的大规模预训练和对特定任务或领域的适应。当我们预训练更大的模型时,重新训练所有模型参数的完整微调变得不那么可行。LoRA1冻结预训练模型权重并将可训练的秩分解矩阵注入到 Transformer 架构的每一层中,大大减少了下游任务的可训练参数的数量。与用 Adam 微调的 GPT-3 175B 相比,LoRA 可以将可训练参数的数量减少了 10,000 倍,GPU 内存需求减少了 3 倍。

什么是low-rank

首先需要明确一些什么什么是矩阵的秩,rank

在国内的本科线性代数课程中我们是这样定义矩阵的秩的

设在矩阵AA 中有一个有一个不等于00rr 阶子式DD ,且所有r+1r+1 阶子式(如果存在的话)都等于00 ,那么DD 称为矩阵AA 的最高阶非零子式,数rr 成为矩阵的秩,记为R(A)R(A) 。并规定零矩阵的秩为0。2

怎么求矩阵的秩呢,很简单啦就是把一个矩阵化成RREF(课本上管这个叫行最简行矩阵)然后数一下每一行第一个非零元素所在列为单位向量的个数就可以了。

好的,发生了什么?好像并没有解释清楚秩到底是什么。

实际上啊,秩反映了矩阵里列向量线性相关的程度,意思就是你矩阵里的那几个向量能“支”出来几维,假如说我有一个矩阵里面有五个向量,但是他的矩阵秩是3,这就说明五个向量只能撑起一个3维空间,剩下两个向量可以被三个不能被互相表示的向量表示(课本上管这个叫线性相关和线性无关),用李宏毅的话说就是这里有两个向量在”耍废”。

推荐一下3Blue1Brown的视频https://www.bilibili.com/video/BV1ys411472E/?spm_id_from=333.999.0.0,线性代数讲的很清楚。

该清楚了秩是什么,低秩是什么就很好理解了,就是有个矩阵他的秩很低,小于矩阵里面向量的个数(向量组线性相关/有向量在”耍废”)。

你可能会想问,LoRA作为一个微调大语言模型和图文大模型的方法,关矩阵的秩什么事?在2020年,3 指出大模型的训练实际发生在low-rank空间上的,所以说我们只需要构造一个低秩空间下的训练方法就可以了。

为什么需要LoRA

LoRA并不是第一个进行微调大模型的,从迁移学习开始有很多的尝试,以语言建模为例,在有效适应方面有两种突出的策略:添加适配器层或优化某种形式的输入层激活。然而,这两种策略都有其局限性,尤其是在大规模和延迟敏感的生产场景中。

添加适配器层(引入推理延迟)

适配层(Adapter) 实际上就是在原本的架构上添加一些层,让他学到新的东西。例如4 左侧为每个 Transformer 层添加适配器模块两次:在多头注意力的投影和两个前馈层之后。右侧适配器由一个瓶颈组成,该瓶颈包含相对于原始模型中的注意力层和前馈层的参数很少。适配器还包含跳过连接。在适配器调整期间,绿色层在下游数据上进行训练,这包括适配器、层归一化参数和最终分类层(图中未显示)。

虽然可以通过修剪层或利用多任务设置来减少整体延迟,但没有直接的方法绕过适配器层中的额外计算。在单个 GPU 上对 GPT-2介质运行推理,我们看到在使用适配器时延迟显着增加,即使瓶颈维度非常小。

优化某种形式的输入层激活(很难进行)

作者观察到前缀调整很难优化,并且它的性能在可训练参数中非单调地变化,证实了原始论文中的类似观察结果。更根本的是,保留序列长度的一部分进行适应必然会降低可用于处理下游任务的序列长度,所以作者怀疑与其他方法相比,调整提示的性能较低。

LoRA到底怎么工作

神经网络包含许多执行矩阵乘法的密集层。这些层中的权重矩阵通常具有满秩。对于预训练的权重矩阵 W0∈Rd×kW_0 ∈ R^{d×k},我们通过使用低秩分解 W0+ΔW=W0+BAW_0 + ΔW = W_0 + BA 表示后者来约束其更新,其中 B∈Rd×r,A∈Rr×kB ∈ R^{d×r} , A ∈ R^{r×k},秩rrmin(d,k)min(d, k)。在训练期间,W0W_0 被冻结并且不接收梯度更新,而 AABB 包含可训练的参数。注意 W0W_0ΔW=BAΔW = BA 都乘以相同的输入,它们各自的输出向量按坐标求和。对于 h=W0xh = W_0x,我们修改后的前向传递产生:h=W0x+ΔWx=W0x+BAxh=W_0x+\Delta Wx=W_0x+BAx 参数初始化时,我们对 A 使用随机高斯初始化,B 使用零,因此 ΔW = BA 在训练开始时为零。所以 ΔW=BA\Delta W = BA 在训练开始时为零.用αr\frac{\alpha}{r} 缩放 ΔWxΔWx,其中 α\alpharr 中的一个常数。在使用 Adam 进行优化时,如果我们适当地缩放初始化,调整 α\alpha 与调整学习率大致相同。因此,我们只需将 α\alpha 设置为我们尝试的第一个 r,而不对其进行调整。当我们改变时,这种缩放有助于减少重新调整超参数的需要

这种微调方式有两个好处

  1. 完全泛化的微调方式
  2. 不会引入推理延迟

在推理的时候,只需要把BBAA 两个矩阵乘起来然后加回到原先的参数矩阵就完成了参数的更新

参考文献

Footnotes

  1. LoRA: Low-Rank Adaptation of Large Language Models. (n.d.). ↩

  2. 同济大学数学系工程数学-线性代数(第6版)笔记和课后习题(含考研真题)详解. (2015). ↩

  3. Aghajanyan, A., Gupta, S., & Zettlemoyer, L. (2021). Intrinsic Dimensionality Explains the Effectiveness of Language Model Fine-Tuning. Proceedings of the 59th Annual Meeting of the Association for Computational Linguistics and the 11th International Joint Conference on Natural Language Processing (Volume 1: Long Papers). Presented at the Proceedings of the 59th Annual Meeting of the Association for Computational Linguistics and the 11th International Joint Conference on Natural Language Processing (Volume 1: Long Papers), Online. https://doi.org/10.18653/v1/2021.acl-long.568

  4. Houlsby, N., Giurgiu, A., Jastrzębski, S., Morrone, B., Laroussilhe, Q., Gesmundo, A., … Gelly, S. (2019). Parameter-Efficient Transfer Learning for NLP. International Conference on Machine Learning. ↩