LoRA微调系列笔记

系列文章目录

第一章:LoRA微调系列笔记
第二章:Llama系列关键知识总结
第三章:LLaVA模型讲解与总结


文章目录

  • 系列文章目录
  • LoRA:Low-Rank Adaptation of Large Language Models
    • 目的:
    • 依据:
    • 优势:
    • 方法
  • QLoRA: Efficient Finetuning of Quantized LLMs
    • 摘要:
    • 重点
    • QLoRA Finetuning
    • 4-bit NormalFloat Quantization
  • 引用


LoRA:Low-Rank Adaptation of Large Language Models

目的:

自然语言处理的一个重要范例是对一般领域数据进行大规模预训练pre-train,并经过微调(fine-tuning)适应特定的任务或领域。当我们fine-tuning较大的模型时,fine-tuning所有模型参数的完全微调变得不太可行。以GPT-3 175B为例,部署独立的微调模型实例,每个实例都有175B参数,这是非常昂贵的。我们提出了低秩自适应(Low-Rank Adaptation, LoRA),它冻结了预训练的模型权重,并将可训练的秩分解矩阵注入到Transformer架构的每一层,从而大大减少了下游任务的可训练参数的数量。与经过Adam微调的GPT-3 175B相比,LoRA可以将可训练参数的数量减少10,000倍,GPU内存需求减少3倍。

依据:

研究发现,pre-train得到的大模型往往存在过度参数化现象,即模型的权重矩阵的秩不是满秩的,且一般都较低,因此我们假设在fine-tuning过程中权重变化也具有较低的秩,从而提出了低秩适应(low - rank adaptation, LoRA)方法。LoRA允许我们通过优化密集层在适应过程中变化的秩分解矩阵来间接训练神经网络中的一些密集层,同时保持预训练的权值不变。

优势:

在这里插入图片描述

  1. 预先训练的模型可以共享,并用于为不同的任务构建许多小型LoRA模块。我们冻结共享模型,并通过替换图1中的矩阵A和B来fine-tuning模型实现有效地任务切换,从而显著降低存储需求和任务切换开销

  2. 当使用自适应优化器时,LoRA使训练更有效,并将硬件进入门槛降低了3倍,因为我们不需要计算梯度或维护大多数参数的优化器状态。相反,我们只优化注入的小得多的低秩矩阵。

  3. 我们简单的线性设计允许我们在部署时将可训练矩阵与冻结权重合并,通过构造与完全微调的模型相比,不会引入推理延迟

  4. LoRA与许多先前的方法正交,并且可以与其中的许多方法组合,例如前缀调优(prefix-tuning)。

方法

在适应特定任务时,研究表明,预训练的语言模型具有较低的“内在维度”(instrisic dimension),尽管随机投射到较小的子空间,但仍然可以有效地学习。对于预训练的权重矩阵 W 0 ∈ R d × k W_0\in\mathbb{R}^{d\times k} W0Rd×k,我们通过用低秩分解(low-rank decomposition)表示来约束其更新,
W 0 + Δ W = W 0 + B A {{W}_{0}}+\Delta W={{W}_{0}}+BA W0+ΔW=W0+BA
其中 B ∈ R d × r B\in\mathbb{R}^{d\times r} BRd×r , A ∈ R r × k A\in\mathbb{R}^{r\times k} ARr×k,秩 r ≪ m i n ( d , k ) r\ll \ min (d,k) r min(d,k),在训练期间, W 0 W_0 W0被冻结,不接收梯度更新,而 A A A B B B包含可训练参数。注意, W 0 W_0 W0 ∆ W = B A ∆W = BA W=BA都用相同的输入相乘,它们各自的输出向量按坐标求和。当 h = W 0 x h = {W_0} x h=W0x时,修正后的正向传播表示为:
h = W 0 x + Δ W x = W 0 x + B A x h={{W}_{0}}x+\Delta Wx={{W}_{0}}x+BAx h=W0x+ΔWx=W0x+BAx
我们在图1中说明了我们的重新参数化。我们对 A A A使用随机高斯初始化,对 B B B使用零初始化,因此 ∆ W = B A ∆W = BA W=BA在训练开始时为零。然后,我们将 ∆ W x ∆Wx Wx α / r α/r α/r进行缩放(scale),其中 α α α r r r中的常数。当使用Adam进行优化时,如果我们适当地缩放初始化,则调整 α α α与调整学习率大致相同。因此,我们简单地将 α α α设置为我们尝试的第一个 r r r,而不调整它。当我们改变 r r r时,这种缩放有助于减少重新调整超参数的需要。

QLoRA: Efficient Finetuning of Quantized LLMs

摘要:

QLoRA是一种有效的微调方法,它减少了内存使用,足以在单个48GB GPU上微调65B参数模型,同时保留完整的16位微调任务的性能。QLORA通过冻结的4位量化预训练语言模型将梯度反向传播到低秩适配器(Low Rank Adapters, LoRA)QLoRA推出了许多创新,在不牺牲性能的情况下节省内存:

  1. 4-bit NormalFloat (NF4),一种新的数据类型,它是正态分布权重的信息理论上最优的;
  2. Double Quantization(双量化)通过量化量化常量来减少平均内存占用
  3. Paged Optimizers 用分页优化器管理显存峰值

重点

虽然最近的量化方法可以减少llm的内存占用,但这些技术仅适用于推理,不适应于训练期间。我们首次证明了在没有任何性能下降的情况下微调量化4-bit模型是可能的。我们的方法QLoRA将预训练模型量化到4位,然后添加一组可学习的Low-rank Adapter权重,这些权重通过量化权重的反向传播梯度进行调整。
关键: 4-bit NormalFloat:一种信息理论上最优的正态分布数据量化数据类型,比4位整数和4位浮点数产生更好的经验结果。

QLoRA Finetuning

QLoRA通过提出的4-bit NormalFloat(NF4)量化和双量化两种技术实现了高保真的4-bit 微调。此外,我们引入了分页优化器,以防止梯度检查点期间的内存峰值导致内存不足错误,这些错误通常会使大型模型难以在单个机器上进行微调。

QLoRA有一种低精度存储数据类型,在我们的例子中通常是4-bit,还有一种计算数据类型通常是BFloat16。在实践中,这意味着每当使用QLoRA权重张量时,我们将张量反量化为BFloat16,然后执行16位矩阵乘法。

4-bit NormalFloat Quantization

TODO

引用

Modest Understandings on LLM
LoRA及其变体概述:LoRA, DoRA, AdaLoRA, Delta-LoRA

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

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

相关文章

Python - 游戏:飞机大战;数字华容道

Pygame是一个利用SDL库的写的游戏库,SDL呢,全名Simple DirectMedia Layer,是一位叫做Sam Lantinga的大牛写的 SDL是用C写的,不过它也可以使用C进行开发,当然还有很多其它的语言,Pygame就是Python中使用它的…

【JVM】总结篇-字节码篇

字节码篇 Java虚拟机的生命周期 JVM的组成 Java虚拟机的体系结构 什么是Java虚拟机 虚拟机:指以软件的方式模拟具有完整硬件系统功能、运行在一个完全隔离环境中的完整计算机系统 ,是物理机的软件实现。常用的虚拟机有VMWare,Visual Box&…

GitHub 及 GitHub Desktop 详细使用教程(通俗易懂)

目录 Δ前言 一、Github教程 1.什么是Github? 2.仓库和对仓库的操作: 2.1 Repository(仓库) 2.2 Fork(派生) 2.3 Star(收藏) 2.4 Watch(追番) 2.5 Issue&am…

OpenLinkSaas使用手册-待办事项和通知中心

在OpenLinkSaas工作台上,你可以查看待办事项和未读通知。 待办事项 目前待办事项支持: 个人待办项目待办:在项目中指派给你的任务/缺陷Git待办:在Git仓库中指标给你的Issue,目前只有在AtomGit和Gitee账号登录时才支持。 通知中心 通知中心支持Git通知和邮件通知两种…

springboot集成阿里云短信服务

springboot集成阿里云短信服务 一.阿里云账号准备 流程:注册阿里云账号>短信服务>新增资质>新建签名>新建模版>申请秘钥>用代码测试 1.注册阿里云账号 2、登录成功后, ① 在首页搜索短信服务 ② 打开第一个搜索结果 ③ 免费开通 ④ 可以根据…

试题转excel;word转excel;大风车excel(1.1更新)

最近更新了大风车excel1.1版本 主要优化在算法层面: 1.0版本试题解析的成功率为95%,现在1.1版本已经优化到解析成功率为99% 一、问题描述 一名教师朋友,偶尔会需要整理一些高质量的题目到excel中 以往都是手动复制搬运,几百道…

python实现自动登录12306抢票 -- selenium

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 python实现自动登录12306抢票 -- selenium 前言其实网上也出现了很多12306的代码,但是都不是最新的,我也是从网上找别人的帖子,看B站视频&…

机器学习之正则化惩罚和K折交叉验证调整逻辑回归模型

机器学习之正则化惩罚和K折交叉验证调整逻辑回归模型 目录 机器学习之正则化惩罚和K折交叉验证调整逻辑回归模型1 过拟合和欠拟合1.1 过拟合1.2 欠拟合 2 正则化惩罚2.1 概念2.2 函数2.3 正则化种类 3 K折交叉验证3.1 概念3.2 图片理解3.3 函数导入3.4 参数理解 4 训练模型K折交…

文件本地和OSS上传

这里写目录标题 前端传出文件后端本地存储阿里云OSS存储上传Demo实现上传ConfigurationProperties 前端传出文件 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>上传文件</title> </head&g…

《Vue3实战教程》37:Vue3生产部署

如果您有疑问&#xff0c;请观看视频教程《Vue3实战教程》 生产部署​ 开发环境 vs. 生产环境​ 在开发过程中&#xff0c;Vue 提供了许多功能来提升开发体验&#xff1a; 对常见错误和隐患的警告对组件 props / 自定义事件的校验响应性调试钩子开发工具集成 然而&#xff…

python制作打字小游戏

import pygame # 导入游戏模块 安装pygame import sys # 导入系统指令模块 import random # 导入随机数模块 pygame.init() #初始化游戏环境 wndpygame.display.set_mode((800,565)) #指定窗口大小 pygame.mixer.music.load(素材/SurvivalGame.mp3) #素…

抖音短视频矩阵系统源码开发全流程解析

在项目开发过程中&#xff0c;调整配置文件至关重要&#xff0c;这些文件包括数据库连接、API密钥及全局参数等。通过正确配置这些信息&#xff0c;可确保应用程序的稳定性和安全性。灵活调整配置以适应具体需求有助于短视频矩阵系统项目的顺利推进。 在开发环境中&#xff0c…

前端路由layout布局处理以及菜单交互(三)

上篇介绍了前端项目部署以及基本依赖的应用&#xff0c;这次主要对于路由以及布局进行模块化处理 一、 创建layout模块 1、新建src/layout/index.vue <template><el-container class"common-layout"><!-- <el-aside class"aside">&l…

戴尔/Dell 电脑按什么快捷键可以进入 Bios 设置界面?

BIOS&#xff08;基本输入输出系统&#xff09;是计算机硬件与操作系统之间的桥梁&#xff0c;它负责初始化和测试系统硬件组件&#xff0c;并加载启动操作系统。在某些情况下&#xff0c;如调整启动顺序、更改系统时间或日期、修改硬件配置等&#xff0c;您可能需要进入BIOS进…

《从入门到精通:蓝桥杯编程大赛知识点全攻略》(一)-递归实现指数型枚举、递归实现排列型枚举

本篇博客将聚焦于通过递归来实现两种经典的枚举方法&#xff1a;指数型枚举和排列型枚举。这两种枚举方式在计算机科学和算法竞赛中都有广泛应用&#xff0c;无论是在解题中&#xff0c;还是在实际工作中都极具价值。 目录 前言 斐波那契数列递归 递归实现指数型枚举 算法思…

idea 的 springboot项目spring-boot-devtools 自动编译 配置热部署

1&#xff0c;设置一 2&#xff0c;设置二 设置二&#xff08;旧版本&#xff09; CtrlShiftAlt/ 点击弹出框中Registry... 引入&#xff08;如果报错&#xff0c;换不同的版本&#xff09; <dependency><groupId>org.springframework.boot</groupId><a…

低代码开发:开启企业数智化转型“快捷键”

一、低代码开发浪潮来袭&#xff0c;企业转型正当时 在当今数字化飞速发展的时代&#xff0c;低代码开发已如汹涌浪潮&#xff0c;席卷全球。从国际市场来看&#xff0c;诸多企业巨头纷纷布局低代码领域&#xff0c;像微软的 PowerApps、OutSystems 等平台&#xff0c;凭借强大…

C#二维数组详解

目录 1&#xff0c;什么是二维数组&#xff1f; 2&#xff0c;创建二维数组的几种方式 &#xff08;1&#xff09;使用[,]声明数组&#xff08;常见方式&#xff09; &#xff08;2&#xff09;声明数组时指定元素 &#xff08;3&#xff09;使用new创建数组 &#xff08;…

STM32--超声波模块(HC—SR04)(标准库+HAL库)

一、HC-SR04工作原理 1&#xff09;采用IO触发测距&#xff0c;给至少10us的高电平信号。 2&#xff09;模块自动发送8个40KHz的方波&#xff0c;自动检测是否有信号返回。 3&#xff09;有信号返回&#xff0c;通过IO输出一高电平&#xff0c;高电平持续时间就是超声波从发…

DDD(一)—— Authentication with JWT

文章目录 项目地址一、项目结构梳理1.1 Domain层1.1.1 Entities文件夹1.2 Contracts层1.2.1 Authentication文件夹1.3 Appliaction层1.3.1Common文件夹1. Interfaces文件夹Authentication 权限接口Persistence 数据库接口Services 常用服务接口1.3.2 Services文件夹1. Authenti…