【深度学习】大模型中的LoRA的重要参数理解,dim维度和lora_alpha

peft LoRA

LoRA(Low-Rank Adaptation)的重要参数如下:

  1. init_lora_weights:用于初始化LoRA权重的方法,有几种选择:

    • "kaiming_uniform":默认的初始化方法,使用Kaiming均匀初始化权重A,权重B初始化为零。
    • "gaussian":使用高斯分布初始化权重A,权重B初始化为零。
    • "pissa":使用主奇异值和奇异向量初始化LoRA适配器,以加快收敛速度和提高性能。
    • "pissa_niter_[number of iters]":快速SVD方法,迭代次数决定误差和计算时间的平衡。
    • False:不进行初始化,通常用于调试和测试。
  2. target_modules:指定要应用LoRA的模块,可以是具体的层名称或使用“all-linear”应用于所有线性层。常用于QLoRA风格的训练。

  3. lora_alpha:用于缩放每个前向传递中的适配器的固定标量,通常与rank相关联。

    • 默认实现中,标量为 lora_alpha/r
    • Rank-stabilized LoRA(rsLoRA)中,标量为 lora_alpha/math.sqrt(r)
  4. layer_replication:用于层复制以扩展模型,例如将一个7B模型扩展到10B。指定复制的层序列,例如[[0,4], [2,5]]表示复制第0到第4层和第2到第5层。

  5. use_rslora:是否使用Rank-stabilized LoRA,用于稳定适配器并提高性能。

    • True:使用rsLoRA。
  6. use_dora:是否使用Weight-Decomposed Low-Rank Adaptation (DoRA),用于分解权重更新以改善低rank情况下的性能。

    • True:使用DoRA。
  7. lora_dropout:适配器的dropout率,用于防止过拟合。

  8. r:LoRA的秩(rank),即适配器的维度,影响参数的数量和适配器的表现。

示例代码如下:

from peft import LoraConfig# 使用Kaiming均匀初始化
config = LoraConfig(init_lora_weights="kaiming_uniform", target_modules="all-linear", lora_alpha=32, layer_replication=[[0,4], [2,5]], use_rslora=True, use_dora=False, lora_dropout=0.1, r=16)# 使用高斯分布初始化
config_gaussian = LoraConfig(init_lora_weights="gaussian", ...)# 使用PiSSA初始化
config_pissa = LoraConfig(init_lora_weights="pissa", ...)# 使用快速SVD的PiSSA初始化
config_pissa_fast = LoraConfig(init_lora_weights="pissa_niter_10", ...)# 使用Rank-stabilized LoRA
config_rs = LoraConfig(use_rslora=True, ...)# 使用Weight-Decomposed LoRA
config_dora = LoraConfig(use_dora=True, ...)

这些参数可以根据具体的需求进行调整,以优化模型的训练和性能表现。

dim维度和lora_alpha

LoRA(Low-Rank Adaptation)通过将全连接层的权重矩阵分解为两个低秩矩阵来减少参数数量并加快训练速度。让我们通过公式来详细解释LoRA的dim维度和lora_alpha。

1. 权重矩阵的低秩分解

假设我们有一个全连接层,其权重矩阵为 W ∈ R d × k W \in \mathbb{R}^{d \times k} WRd×k,其中 d d d是输入维度, k k k是输出维度。LoRA将 W W W分解为两个低秩矩阵 A ∈ R d × r A \in \mathbb{R}^{d \times r} ARd×r B ∈ R r × k B \in \mathbb{R}^{r \times k} BRr×k,其中 r r r是分解的秩(rank)。

W ≈ A B W \approx AB WAB

其中, r ≪ min ⁡ ( d , k ) r \ll \min(d, k) rmin(d,k),这样可以显著减少参数的数量。

2. LoRA的dim维度

dim维度即 r r r,表示分解的秩。选择合适的 r r r非常重要,因为它直接影响模型的参数数量和表示能力。假设输入向量为 x ∈ R d x \in \mathbb{R}^{d} xRd,输出向量为 y ∈ R k y \in \mathbb{R}^{k} yRk,则有:

y = W x ≈ A B x y = Wx \approx ABx y=WxABx

3. lora_alpha参数

lora_alpha是一个缩放因子,用于在每次前向传递中调整适配器的影响力。在原始实现中,适配器在每次前向传递中通过一个标量进行缩放,这个标量的值为:

α = lora_alpha r \alpha = \frac{\text{lora\_alpha}}{r} α=rlora_alpha

因此,完整的计算公式为:

y = W x ≈ α A B x = lora_alpha r A B x y = Wx \approx \alpha ABx = \frac{\text{lora\_alpha}}{r} ABx y=WxαABx=rlora_alphaABx

综合公式

综合以上,可以得到LoRA的完整前向计算公式:

y ≈ ( W + lora_alpha r A B ) x y \approx \left(W + \frac{\text{lora\_alpha}}{r} AB\right)x y(W+rlora_alphaAB)x

其中, W W W是原始权重矩阵, A A A B B B是LoRA的低秩矩阵, α = lora_alpha r \alpha = \frac{\text{lora\_alpha}}{r} α=rlora_alpha是缩放因子。

示例

假设我们有一个输入维度 d = 128 d=128 d=128,输出维度 k = 256 k=256 k=256,我们选择的dim维度 r = 16 r=16 r=16,并且lora_alpha=32,那么缩放因子 α \alpha α为:

α = 32 16 = 2 \alpha = \frac{32}{16} = 2 α=1632=2

所以,LoRA的前向计算公式为:

y ≈ ( W + 2 A B ) x y \approx \left(W + 2AB\right)x y(W+2AB)x

通过这样的方法,LoRA可以有效地减少参数数量并加速训练,同时保持较高的模型性能。

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

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

相关文章

解决:uniapp 小程序 使用swiper 内部嵌套另外一个拥有左右滑动组件导致滑动冲突

解决办法 在swiper-item 内增加这个属性进行包裹 touchmove.stop <div touchmove.stop><qiun-data-charts type"area" :opts"optsStg" :chartData"dateDataStg" /> </div>

微信小程序 - 在视图组件上绑定函数并携带参数(事件对象自定义属性传参)

前言 有时候,我们需要在小程序的视图组件上绑定一个函数,而且需要 传递参数。 小程序在组件上绑定事件后,传递参数的方式不同于前端开发其他场景中直接加参数的方式,小程序在参数的传递时,采用 事件对象的自定义属性 的方式,和普通 Vue 还不同。 示例代码

微信小程序中Map组件Marker中把Label文字信息通过按钮显示或隐藏

wxml页面按钮 <button bindtap"toggleLabel">Toggle Label</button>js data:{labelMarkerId: null // 记录当前显示文本的标记的 id }, //按钮切换显示 toggleLabel() {// 判断当前是否有显示的文本标记if (this.data.labelMarkerId ! null) {// 如果…

数学建模--图论与最短路径

目录 图论与最短路径问题 最短路径问题定义 常用的最短路径算法 Dijkstra算法 Floyd算法 Bellman-Ford算法 SPFA算法 应用实例 结论 延伸 如何在实际应用中优化Dijkstra算法以提高效率&#xff1f; 数据结构优化&#xff1a; 边的优化&#xff1a; 并行计算&…

zabbix添加钉钉告警机器人使用bash和python两种脚本

zabbix添加钉钉告警机器人使用bash和python两种脚本 查看脚本目录 vi /etc/zabbix/zabbix_server.conf# 脚本存放路径 AlertScriptsPath/usr/lib/zabbix/alertscripts编写脚本&#xff08;二选一&#xff09; bash脚本 编写脚本 cd /usr/lib/zabbix/alertscripts vi zabbi…

服务器文件上传使用MD5实现文件校验和

MD5&#xff08;Message-Digest Algorithm 5&#xff09;是一种常用的哈希函数&#xff0c;用于生成一个128位&#xff08;16字节&#xff09;的哈希值&#xff08;散列值&#xff09;&#xff0c;用于验证数据完整性。MD5求校验和的原理可以分为以下几个步骤&#xff1a; 1. …

AV1技术学习:Quantization

量化是对变换系数进行&#xff0c;并将量化索引熵编码。AV1的量化参数 QP 的取值范围是0 ~ 255。 一、Quantization Step Size 在给定的 QP 下&#xff0c;DC 系数的量化步长小于 AC 系数的量化步长。DC 系数和 AC 系数从 QP 到量化步长的映射如下图所示。当 QP 为 0 时&…

React 官方文档学习笔记

Address:React 中文文档(Beta 版) | React 中文文档 | React 中文网 (bootcss.com);快速入门 – React 中文文档 (docschina.org) Date:2024-07-18 注:该文章中与 Vue 通用的概念已被略过,仅作为学习 React 新概念的笔记总结。 1. 快速入门 学习 React 的基本概念。 2…

qt初入门8:下拉框,输入框模糊查询,提示简单了解 (借助QCompleter)

实现一个简单的模糊查询的逻辑&#xff0c;输入框能提示相关项。 主要借助qt的QCompleter 类&#xff08; Qt 框架中提供的一个用于自动补全和模糊搜索的类&#xff09;&#xff0c;结合一些控件&#xff0c;比如QComboBox和QLineEdit&#xff0c;实现模糊查询的功能。 1&…

Python实现Java mybatis-plus 产生的SQL自动化测试SQL速度和判断SQL是否走索引

Python实现Java mybatis-plus 产生的SQL自动化测试SQL速度和判断SQL是否走索引 文件目录如下 │ sql_speed_test.py │ ├─input │ data-report_in_visit_20240704.log │ resource_in_sso_20240704.log │ └─outputdata-report_in_visit_20240704.cs…

科普文:百度交易中台之系统对账篇

百度交易中台作为集团移动生态战略的基础设施&#xff0c;面向收银交易与清分结算场景&#xff0c;赋能业务、提供高效交易生态搭建。目前支持百度体系内多个产品线&#xff0c;主要包括&#xff1a;度小店、小程序、地图打车、文心一言等。本文主要介绍了百度交易中台的交易链…

海康威视综合安防管理平台 detection 前台RCE漏洞复现

0x01 产品简介 海康威视综合安防管理平台是一套“集成化”、“智能化”的平台,通过接入视频监控、一卡通、停车场、报警检测等系统的设备。海康威视集成化综合管理软件平台,可以对接入的视频监控点集中管理,实现统一部署、统一配置、统一管理和统一调度。 0x02 漏洞概述 海康…

总结——TI_音频信号分析仪

一、简介 设备&#xff1a;MSPM0G3507 库&#xff1a;CMSIS-DSP TI 数据分析&#xff1a;FFT 软件&#xff1a;CCS CLion MATLAB 目的&#xff1a;对音频信号进行采样&#xff08;滤波偏置处理&#xff09;&#xff0c;通过FFT获取信号的频率成分&am…

每天一个数据分析题(四百四十二)- 标签与指标

数据分析师在工作中常常会涉及两个概念&#xff1a;标签、指标&#xff0c;下面关于标签与指标的描述正确的是&#xff08;&#xff09;&#xff1f; A. 指标通常可以量化&#xff0c;但是标签一般是不可量化的 B. 标签是用来定义、评价和描述特定事物的一种标准或方式 C. 指…

keras框架的to_categorical方法

在阅读keras的中文文档时候&#xff0c;对于这里的代码不了解 y_train keras.utils.to_categorical(np.random.randint(10, size(1000, 1)), num_classes10)这里应该拆分为两部分看待 第一个是np.random.randint() 查看numpy文档知道&#xff1a; random.randint ( low , hi…

AWS DMS MySQL为源端,如何在更改分区的时候避免报错

问题描述&#xff1a; 文档[1]中描述MySQL compatible Databases作为DMS任务的源端&#xff0c;不支持MySQL 分区表的 DDL 更改。 在源端MySQL进行分区添加时&#xff0c;日志里会出现如下报错&#xff1a; [SOURCE_CAPTURE ]W: Cannot change partition in table members…

java thread怎么保证线程按顺序执行?如何实现线程排队?

在Java中&#xff0c;通常不保证多个线程按特定顺序执行&#xff0c;因为线程的调度是由操作系统管理的&#xff0c;并且是不可预测的。然而&#xff0c;如果需要确保线程按特定顺序执行&#xff0c;可以使用以下方法&#xff1a; 使用线程的join()方法&#xff1a;确保一个线…

【表单组件】地址组件新增精简模式

07/17 主要更新模块概览 快速筛选 精简模式 触发条件 自定义域名 01 表单管理 1.1 【表单组件】-数据关联组件新增快速筛选功能 说明&#xff1a; 数据关联组件新增快速筛选功能&#xff0c;用户在数据关联组件选择数据时&#xff0c;可以通过快速筛选功能&#xff0…

萝卜快跑突然就火了,背后发生了什么?

近日&#xff0c;百度旗下的自动驾驶出行平台“萝卜快跑”突然在网络上火了起来&#xff0c;成为热门话题。那么&#xff0c;这背后到底发生了什么&#xff1f; 1. 数字误传引发热议 首先&#xff0c;一些误传的数字在传播中起到了推波助澜的作用。例如&#xff0c;百度在2023…

Camtasia Studio2024最新版本新功能,并深入学习它的使用教程

在视频创作和教学内容制作领域&#xff0c;Camtasia Studio 一直是备受青睐的工具。随着 2024 版本的推出&#xff0c;Camtasia Studio 带来了更多强大的功能和优化&#xff0c;为用户提供了更高效、更便捷的创作体验。接下来&#xff0c;让我们详细了解一下 Camtasia Studio 2…