零压力了解 LoRA 微调原理

简介: `LoRA` 全称为 `Low-Rank Adaptation`,翻译成中文就是`低秩适配`。⊙﹏⊙ 是不是一头雾水?没关系,相信我,看完下文你就会明白个大概了

banner.png

写在最前

LoRA 全称为 Low-Rank Adaptation,翻译成中文就是低秩适配

⊙﹏⊙ 是不是一头雾水?没关系,相信我,看完下文你就会明白个大概了

那如果还不懂怎么办呢?那就请狠狠的给我一键三连,以示鼓励吧 ¬‿¬

直入正文

丹尼尔:蛋兄,我常常听到 LoRA 微调,那什么是 LoRA 呢?它又为什么可以加速微调呢?原理是什么呢?

蛋先生:这个问题问得好!但是能不能别一下子全问完,不然这篇文章就没法写了 ╮(╯▽╰)╭

丹尼尔:😜 Sorry!那先说说什么是 LoRA 吧

蛋先生:LoRA 全称 Low-Rank Adaptation,中文叫低秩适配。

丹尼尔:开头讲过啦,看名字看不出什么啊,是不是名字起得不好,不能顾名思义?(¬_¬)

蛋先生:别急,等会我讲完原理,你就会觉得这个名字其实起得挺好的 ( ̄▽ ̄)ノ

先说说 LoRA 是什么吧,它是一种非常流行的大模型微调方法。大模型的参数很多,每个参数都去调整的话不仅消耗资源,而且并不是每个参数的调整都有意义。因此,我们需要一种方法,通过调整少量参数就能让大模型适应特定领域的任务,这就是 LoRA 的由来。

简单来说,LoRA 就是只调整模型权重里很小一部分参数,让预训练模型更好地适应特定(通常是小规模)的数据集 (๑•̀ㅂ•́)و✧

丹尼尔:它是怎么做到只调整一小部分参数的呢?

蛋先生:假设预训练大模型的原始权重参数为 W⁰,经过微调后的权重参数为 W,那么就有以下公式

W = W⁰ + △W

丹尼尔:这个 △W 就是权重参数调整的量(权重更新矩阵),也就是我们要学习的部分是吗?

蛋先生:没错!假设 W⁰ 是 100×100 的矩阵,那么 △W 也是 100×100 的矩阵,请问总共需要调整多少个参数?

丹尼尔:1 万啊

蛋先生:真聪明 ( ̄▽ ̄)b

丹尼尔:我谢谢你的夸奖哦,把我当小学生了 (╯°□°)╯

蛋先生:1 万个参数都调,这种称为全量微调

丹尼尔:那 LoRA 怎么优化?(o゚▽゚)o

蛋先生:别急,我们再来看一个矩阵乘积 AB(A 矩阵乘以 B 矩阵),A 是 100×{rank} 的矩阵,B 是 {rank}×100 的矩阵,它们的结果是什么形状的矩阵呢?

丹尼尔:无论 rank 取多少,AB 的结果都正好是 100×100 的矩阵。咦,这个结果正好跟 △W 形状一样!(⊙o⊙)

蛋先生:对了!所以在 LoRA 中,我们不再学习一个完整的 △W,而是直接把它参数化为 AB,这样天然就是低秩的。如果 rank 取 10,那么这两个矩阵共有多少个值(权重参数)呢?

丹尼尔:让我算算...100×10 + 10×100 = 2000 个参数!(≧∇≦)ノ

蛋先生:聪明!原来是 10000 个参数,现在只要 2000 个,只有原来的五分之一

丹尼尔:但有个疑问,△W≈A@B 这个为什么成立呢?

蛋先生:语言模型在下游任务中,不需要“彻底改写”原有能力,而是“往某些方向上调整”。这些调整在数学上往往集中在低秩子空间,所以这样做不会损失太多效果。就像画画时,你只需要在关键位置勾几笔,而不是把整张画重画一遍。

丹尼尔:如果 rank 取更少,那岂不是参数更少了

蛋先生:回到 LoRA 名称中的 low rank,不就是指这里要取更少的维度吗

丹尼尔:原来如此。那具体怎么应用到模型中?

蛋先生:我们可以选择原来的部分全连接层替换为 LoRA 层,用公式表示就是将 XW 替换成 XW⁰+XAB。

XW = X(W⁰+AB) = XW⁰+XAB

丹尼尔:哇,我好像看出来了,这里就体现了 adaption 适配!

蛋先生:没错!因为它不修改原来的权重,只是加了个扩展。编程原则有个开闭原则,对修改关闭,对扩展开放,这里就是这样的。

丹尼尔:那 W⁰ 和 A、B 怎么训练?

蛋先生:其中 W⁰ 是冻结的,我们只微调 A 和 B 即可。

丹尼尔:计算效率怎么样?

蛋先生:在训练时,前向传播虽然多了一次矩阵乘法,但因为参数大幅减少,反向传播的开销也随之下降,所以整体微调速度反而更快。而在推理时,可以把 W⁰+AB 合并成一个整体,几乎不会增加额外计算量。

丹尼尔:原来如此!那除了 A 和 B,还有别的可调参数吗?

蛋先生:当然,LoRA 公式中还会有缩放因子,rank 和缩放因子都属于超参数,可以在训练过程中进行调整。

丹尼尔:现在来看,LoRA 的名字起得确实不错

写在最后

在此声明,以上内容并不严谨。严谨与通俗易懂在表达上往往难以兼顾,就像安全与便利常常难以平衡一样 ( ̄~ ̄; )

因此,建议有兴趣的同学,在此基础上,自行查阅专业资料以获得更深入的了解

亲们,都到这了,要不,点赞或收藏或关注支持下我呗 o( ̄ ▽  ̄)d

目录
相关文章
|
机器学习/深度学习 存储 自然语言处理
简单聊一聊大模型微调技术-LoRA
LoRA(Low-Rank Adaptation)是一种用于减少大模型微调中参数数量和计算资源的技术。通过引入低秩分解,LoRA 仅更新少量参数,从而显著降低显存消耗和计算需求。适用于大规模预训练模型的微调、跨领域迁移学习、低资源设备部署和多任务学习等场景。例如,在微调 BERT 模型时,LoRA 可以仅调整约 0.1% 的参数,保持与全量微调相近的性能。
2885 0
|
7月前
|
机器学习/深度学习 人工智能 索引
RAG 切片利器 LumberChunker 是如何智能地把文档切割成 LLM 爱吃的块
RAG 里的文档应该怎么切割比较好呢?按固定的字符数或词数?按句?按段落?加个重叠窗口?还是 ...
362 1
RAG 切片利器 LumberChunker 是如何智能地把文档切割成 LLM 爱吃的块
|
7月前
|
存储 机器学习/深度学习 人工智能
大模型微调技术:LoRA原理与实践
本文深入解析大语言模型微调中的关键技术——低秩自适应(LoRA)。通过分析全参数微调的计算瓶颈,详细阐述LoRA的数学原理、实现机制和优势特点。文章包含完整的PyTorch实现代码、性能对比实验以及实际应用场景,为开发者提供高效微调大模型的实践指南。
3015 3
|
4月前
|
机器学习/深度学习 数据采集 物联网
大模型指南:一文搞懂LoRA微调
本文详细解析LoRA微调技术,通过低秩分解实现参数高效适配。您将了解其核心原理、实践步骤及效果评估方法,以及如何在消费级GPU上轻量化定制百亿参数大模型,并探索其未来应用与进阶技巧。
1966 13
大模型指南:一文搞懂LoRA微调
|
6月前
|
SQL 自然语言处理 关系型数据库
构建AI智能体:二十九、Text2SQL:告别繁琐SQL!用大模型自助生成数据报表
Text2SQL技术通过自然语言处理将用户查询转换为SQL语句,解决企业数据查询效率低下的痛点。该技术包含语义理解、模式对齐、SQL生成和优化等核心处理过程,核心组件包括自然语言理解模块、Schema管理模块和SQL生成模块。文章介绍了闭源和开源模型的选择策略,并提供了基于Function Calling的Text2SQL实现示例,展示如何安全高效地将自然语言转换为数据库查询。
2675 4
|
存储 弹性计算 调度
云计算,何为云,又何以计算?
本文由笠泱撰写,是“拥抱云计算”系列的第一篇章,旨在分享云计算的概念及其诞生背景,重点介绍了阿里云飞天操作系统。文章从虚拟化技术的起源讲起,探讨了其如何演变为云计算的基础,并详细解释了云计算的关键特性:按需使用、按量付费和弹性。文中还分类介绍了云计算的主要服务模式(IaaS、PaaS、SaaS等)及部署方式(公共云、私有云、混合云),并分析了亚马逊AWS和阿里云在云计算领域的领导地位。最后,文章通过对比OpenStack与阿里云飞天架构,深入浅出地解析了阿里云飞天系统如何调度算力,帮助读者理解云计算的实际运作机制。阅读本文大约需要30分钟,内容详实,值得一读。
2857 5
云计算,何为云,又何以计算?
|
机器学习/深度学习 人工智能 算法
ProtGPS:MIT再造生命科学新基建!蛋白质AI一键预测定位+设计新序列,登Nature子刊
ProtGPS 是麻省理工学院和怀特黑德研究所联合开发的蛋白质语言模型,能够预测蛋白质在细胞内的亚细胞定位,并设计具有特定亚细胞定位的新型蛋白质。
1117 17
ProtGPS:MIT再造生命科学新基建!蛋白质AI一键预测定位+设计新序列,登Nature子刊
|
人工智能 自然语言处理 物联网
llama factory 从数据集起步 跑通 qwen系列开源生成式大模型 微调
`dataset_info.json` 文件用于管理 llama factory 中的所有数据集,支持 `alpaca` 和 `sharegpt` 格式。通过配置此文件,可以轻松添加自定义数据集。数据集的相关参数包括数据源地址、数据集格式、样本数量等,支持 Hugging Face 和 ModelScope 两个平台的数据集仓库。针对不同格式的数据集,提供了详细的配置示例,如 `alpaca` 格式的指令监督微调数据集、偏好数据集等,以及 `sharegpt` 格式的多模态数据集等。今天我们通过自定义数据集的方式来进行qwen2.5_14B_instruct模型进行微调
8173 7