论文阅读之PeriodicLoRA: Breaking the Low-Rank Bottleneck in LoRA Optimization(2024)

文章目录

  • 论文地址
  • 主要内容
  • 主要贡献
  • 模型图
  • 技术细节
  • 实验结果

论文地址

PeriodicLoRA: Breaking the Low-Rank Bottleneck in LoRA Optimization

主要内容

这篇文章的主要内容是介绍了一种名为PeriodicLoRA(PLoRA)的参数高效微调(Parameter-Efficient Fine-Tuning,PEFT)方法,旨在解决大型语言模型(Large Language Models,LLMs)微调过程中的低秩瓶颈问题。文章首先讨论了大型语言模型在自然语言处理任务中的应用越来越广泛,但全参数微调这些模型需要大量的计算资源。为了解决这一问题,研究者们开发了参数高效微调方法,其中LoRA(Low-Rank Adaptation)是最广泛使用的方法之一。LoRA通过优化低秩矩阵来减少微调过程中的内存使用,但与全参数微调相比,其性能仍有差距。

为了克服这一限制,文章提出了PLoRA方法,该方法通过多次累积低秩更新矩阵来实现更高的更新秩。PLoRA包含多个训练阶段,在每个阶段结束时,将LoRA权重卸载到主干参数中,然后重新初始化LoRA状态。实验结果表明,PLoRA具有更强的学习能力,最多可达LoRA学习能力的1.8倍,而且不会增加内存使用。此外,文章还介绍了一种基于动量的卸载策略,以减轻PLoRA训练过程中的不稳定性。

文章还讨论了相关工作,包括监督微调、参数高效微调、LoRA及其变体,并详细介绍了PLoRA方法的实现细节。此外,文章还提供了实验设置、数据集、实验结果和讨论,以及PLoRA方法的局限性和未来研究方向。最后,文章总结了PLoRA的贡献,并提供了参考文献列表。

主要贡献

文章的主要贡献可以总结为以下几点:

  1. 提出PLoRA方法:文章引入了PeriodicLoRA(PLoRA),这是一种新的参数高效微调(PEFT)方法,旨在突破LoRA微调中的低秩瓶颈。PLoRA通过在多个训练阶段中累积低秩更新矩阵来实现更高的更新秩,从而提高模型的学习能力。

  2. 实验验证:文章通过在不同PEFT设置下对LLaMA 7B模型进行指令微调,并在多主题多选题、数学推理以及语言理解和推理任务上评估性能,证明了PLoRA相比于相同秩的LoRA具有更好的性能,并且没有引入额外的内存开销。

  3. 深入分析:文章对PLoRA的训练过程进行了详细的分析,揭示了PLoRA相比于原始LoRA具有更强的学习能力。特别是,在不同任务中应用PLoRA后学习能力的提升。

  4. 公开调优结果:文章公开了在调整超参数方面的完整结果,为选择适当的PLoRA设置提供了参考。

  5. 方法的简化和效率:与现有的LoRA变体相比,PLoRA方法更为简单和高效,它通过周期性地卸载和重新初始化LoRA状态来实现高秩更新,而不是通过增加模型复杂性或内存开销。

这些贡献表明,PLoRA是一个有前景的方法,可以在保持参数效率的同时提高大型语言模型在特定任务上的性能,尤其是在资源受限的情况下。此外,文章的实验结果和分析为未来的研究提供了有价值的见解和方向。

模型图

在这里插入图片描述

在LoRA训练中,只有矩阵A和B被更新,而模型权重被冻结(用蓝色表示)。然后,在完成所有训练之后,使用训练后的矩阵A和B来更新模型权重。

而在PLoRA方法中,在每次小批量训练之后,在继续训练之前,转移LoRA中矩阵A和B的权重以更新模型权重并重置它们自己。此循环在一个历元内重复N次。在图中,浅橙色表示小批量的学习能力,而橙色表示截至当前的累积学习能力。

PLoRA就是在训练过程中练一个小的LoRA然后加到预训练模型权重后面,然后LoRA重置,接着练,一个训练过程可以得到好多个LoRA矩阵,练好一个加一个,直到训练过程结束。

技术细节

在这里插入图片描述

首先LoRA就是一次训练过程中,只训练A、B两个低秩矩阵,W预训练参数冻结。

在这里插入图片描述
简单来说,PLoRA就是一次训练过程中,逐渐训练多个A、B矩阵,训练好一组就把他们加到预训练模型参数中,冻结,然后重新初始化一组A、B,继续只训练A、B,过了两个epoch觉得差不多就再加到W冻结,再开一组A、B,因此,一次训练过程可以得到多组A、B

(人多力量大了)

因此:
PLoRA方法的得到的预训练模型的参数:
在这里插入图片描述
例如一次训练过程,搞出了T组A、B,其实相当于有个T个秩为r的矩阵来学习了。

然后有选择地更新LoRA,将BA乘积按(1−m)缩放,将A和B矩阵按m缩放。这种方法解决了由于数据集可变性而导致的小批量损失不一致的问题。

可以看一段伪代码加深理解:

import torch
import torch.nn as nn
from torch.optim import AdamW# 假设我们有一个预训练的Transformer模型
class TransformerModel(nn.Module):# ... Transformer模型的定义 ...def forward(self, x):# ... 前向传播的实现 ...return x# 初始化模型和优化器
model = TransformerModel()
optimizer = AdamW(model.parameters(), lr=1e-4)# 初始化LoRA的权重矩阵A和B
rank = 10  # 假设我们选择的秩为10
A = torch.randn(model_dim, rank)  # 随机初始化A
B = torch.zeros(model_dim, rank)   # 初始化B为零# 训练循环
num_stages = 5  # 假设我们有5个训练阶段
for stage in range(num_stages):# 在每个阶段,我们只更新A和Bfor data, target in train_loader:optimizer.zero_grad()# 假设我们有一个函数来应用LoRA权重更新updated_weights = apply_lora_weights(model, A, B)# 执行前向传播和损失计算output = model(data)loss = loss_fn(output, target)# 反向传播和参数更新loss.backward()optimizer.step()# 阶段结束时,将更新的权重应用到模型的主干参数上apply_updated_weights_to_model(model, updated_weights)# 重置A和B为初始状态A = torch.randn(model_dim, rank)B = torch.zeros(model_dim, rank)# 应用LoRA权重更新的函数
def apply_lora_weights(model, A, B):# 这里应该是将LoRA的权重更新应用到模型的特定层上# 具体实现取决于模型的结构和LoRA的实现细节pass# 将更新的权重应用到模型的函数
def apply_updated_weights_to_model(model, updated_weights):# 这里应该是将累积的LoRA权重更新应用到模型的主干参数上# 具体实现取决于模型的结构和LoRA的实现细节pass# 假设的损失函数和数据加载器
loss_fn = nn.CrossEntropyLoss()
train_loader = ...  # 你的数据加载器# 开始训练
train(model, loss_fn, optimizer, num_epochs)

实验结果

在这里插入图片描述
基于经验证据,文章将4.8k数据设置为训练期间PLoRA的卸载点。

在这里插入图片描述
PLoRA在复杂任务的表现更好
在这里插入图片描述
调整缩放参数的影响
在这里插入图片描述
PLoRA在复杂任务上收敛更快

还有一些实验结果,先这样

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

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

相关文章

基于Springboot Vue医院管理系统+数据库脚本+文档(万字)

项目效果视频: 基于Springboot Vue医院管理系统 一、 项目介绍 角色:管理员、患者、医生 基于springboot vue实现的医院管理系统,有管理员、医生和患者三种角色。系统拥有丰富的功能,能够满足各类用户的需求,系统提供了登录和注册…

ensp静态路由综合实验(一)

实验拓扑: 实验目的: 1、R6为ISP,接口IP地址均为公有地址,该设备只能配置IP地址,之后不能再对其进行任何配置; 2、R1-R5为局域网,私有IP地址192.168.1.0/24,请合理分配;…

超声波清洗机值不值得买?今年最值得入手的四款眼镜清洗器推荐!

如果是经常佩戴眼镜,并且眼镜比较容易脏,自己又很懒不会经常清洗眼镜的时候,不妨考虑眼镜超声波清洗机!因为眼镜在比较脏的时候,如果不清洁干净,长期佩戴模糊不清的镜片,会导致眼镜的视力下降严…

UE5C++学习(四)--- SaveGame类存储和加载数据

上一篇说到使用数据表读取数据,如果我开始玩游戏之后,被怪物打了失去了一部分血量,这个时候我想退出游戏,当我再次进入的时候,希望仍然保持被怪物打之后的血量,而不是重新读取了数据表,这个时候…

羊大师解析,孩子喝羊奶的好处

羊大师解析,孩子喝羊奶的好处 孩子喝羊奶有诸多好处。羊奶富含多种营养物质,包括蛋白质、脂肪、维生素和矿物质等,对孩子的生长发育和身体健康都有积极的促进作用。羊奶中的蛋白质含量丰富,且易于消化吸收。这些优质蛋白质可以为…

对电商不懂但又很想做抖店,该如何入局呢?给你一些电商入门建议

我是王路飞。 对电商感兴趣的不在少数,但这种兴趣可能更多是被电商的巨大红利给勾起来的。 天下熙熙皆为利来,天下攘攘皆为利往,这很正常。 尤其是电商中的抖店项目,作为近几年的黑马项目,接着直播带货的热度,吸引了…

k8s入门到实战(五)—— k8s存储卷详细介绍

存储卷 什么是存储卷 在 k8s 中,存储卷(Volume)是一种抽象的概念,用于提供 pod 中容器的持久化存储。存储卷允许将数据存储在 pod 的生命周期之外,以便在容器重启、迁移或重新调度时保留数据。 存储卷可以连接到 po…

Python:基础语法

一、import与from.....import 有时候我们需要使用一些第三方库或包时,我们就需要通过import或from.....import导入模块。 # 导入库 import sys print("hello,world") 当我们自己写了些函数,在其他py文件,我们也可以通过from.....im…

OC对象 - Block解决循环引用

文章目录 OC对象 - Block解决循环引用前言1. 循环引用示例1.1 分析 2. 解决思路3. ARC下3.1 __weak3.2 __unsafe_unretained3.3 __block 4. MRC下4.1 __unsafe_unretain....4.1 __block 5. 总结5.1 ARC下5.2 MRC下 OC对象 - Block解决循环引用 前言 本章将会通过一个循环引用…

项目管理商业文件--商业论证与效益管理计划

本文描述从事项目管理和了解项目管理领域所需的基本知识,词汇定义来自于《项目知识管理体系》(PMBOK指南)第六版,仅作个人学习使用,任何对此文章的引用,应当说明源出处,不得用于商业用途。 如有侵权、联系速删 文章目录…

SAP ABAP Update Module 调试

最近搞SAP migo的调试 BADI 那如何让起效呢 参考 SAP调试一: Update Module函数调试 - 程序员大本营 先在 BEFORE_update 里面打上内部断点 再在update里面打上外部断点 断点调试的时候 在设置->更改调试器参数文件/设置 如下图

第十三届蓝桥杯物联网试题(省赛)

做后感悟: OLED显示函数需要一直显示,所以在主函数中要一直循环,为了确保这个检错功能error只输出一次,最好用中断串口进行接收数据,数据收完后自动进入中断函数中,做一次数据检查就好了,该开灯…

YOLOv8融入低照度图像增强算法---传统算法篇

YOLOv8n原图检测YOLOv8n增强后检测召回率和置信度都有提升 前言 这篇博客讲讲低照度,大家都催我出一些内容,没想到这么多同学搞这个,恰好我也做过这方面的一些工作,那今天就来讲解一些方法,低照度的图像增强大体分“传统算法”和“深度学习算法”; 目前低照度的图像增…

Python学习笔记(二)

一:异常: 1.1:异常处理: 1.2:异常捕获: 1.3:异常传递: 二:模块: 2.1:模块的定义: 2.2:模块的导入: 2.3&…

Open WebUI大模型对话平台-适配Ollama

什么是Open WebUI Open WebUI是一种可扩展、功能丰富、用户友好的大模型对话平台,旨在完全离线运行。它支持各种LLM运行程序,包括与Ollama和Openai兼容的API。 功能 直观的界面:我们的聊天界面灵感来自ChatGPT,确保了用户友好的体验。响应…

窥探向量乘矩阵的存内计算原理—基于向量乘矩阵的存内计算

前言 在计算机科学和数学领域,向量乘矩阵的内积计算是许多算法和模型中的核心操作之一。这一操作的高效实现对于优化算法的性能以及提高计算速度至关重要。本文将深入探讨向量乘矩阵的存内计算原理,聚焦于基于这一操作的存内计算方法。 本文的目标是解…

第16篇:奇偶校验器

Q:本期我们将实现4位奇偶校验逻辑电路,即校验4位二进制代码中 “1” 的个数是奇数或偶数。 A:奇偶校验器的基本原理:采用异或运算对“1”的奇偶个数进行校验,从最高位依次往最低位进行连续异或运算。如果最后的异或运…

Linux离线安装Docker-Oracle_11g

拉取oracle11g镜像 docker pull registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g创建11g容器 docker run -d -p 1521:1521 --name oracle11g registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g查看容器是否创建成功 docker ps -a导出oracle容器,查看…

计算机视觉之三维重建(3)---单视几何

文章目录 一、问题提出二、无穷远点、无穷远线、无穷远平面2.1 2D空间2.2 3D空间 三、影消点和影消线3.1 2D平面上的无穷远点,无穷远线变换3.2 影消点3.3 影消线 四、单视重构 一、问题提出 1. 当摄像机标定后,内部参数 K K K 已知,外部参数…

最新上门预约服务派单小程序源码 仿东郊到家小程序源码 开源可二开 含完整搭建部署教程

上门预约服务派单小程序源码的在提供便捷的预约服务、实现有效的派单管理、优化服务流程、提升用户体验,并为业务发展和优化提供数据支持。分享一个最新上门预约服务派单小程序源码,仿东郊到家小程序源码,O2O平台系统,跟58到家模式…