大模型微调 - 用PEFT来配置和应用 LoRA 微调
大模型微调 - 用PEFT来配置和应用 LoRA 微调
flyfish
PEFT(Parameter-Efficient Fine-Tuning)是一种参数高效微调库,旨在减少微调大型预训练模型时需要更新的参数量,而不影响最终模型的性能。它支持几种不同的微调方法,如 LoRA(Low-Rank Adaptation)、Prefix Tuning、Adapter 等。这里PEFT 被用来配置和应用 LoRA 微调。LoRA 是一种降低预训练模型微调时参数更新数量的方法,通过在 Transformer 层的某些投影矩阵上引入低秩分解,减少参数量,并且只需微调这些低秩矩阵。
from peft import LoraConfig, TaskType, get_peft_model# 定义 LoRA 的配置参数
config = LoraConfig(task_type=TaskType.CAUSAL_LM, # 指定任务类型为自回归语言建模任务(Causal Language Modeling),如 GPT 系列的模型target_modules=["q_proj", "k_proj", "v_proj", "o_proj", "gate_proj", "up_proj", "down_proj"], # 这些是模型中要应用 LoRA 的目标模块inference_mode=False, # 表示训练模式,设置为 True 时是推理模式;为 False 是训练模式r=8, # LoRA 的秩 r,代表分解时矩阵的秩,越大越能保留原有的模型信息,但计算复杂度也会增加lora_alpha=32, # LoRA 的 alpha 超参数,控制了低秩矩阵的缩放因子。一般设置为与 r 成比例的值lora_dropout=0.1, # 在 LoRA 模块中应用 Dropout,防止过拟合,防止微调时模型过拟合到训练数据
)# 应用 PEFT(LoRA)到预训练的模型上
model = get_peft_model(model, config) # 使用 get_peft_model 函数,将定义好的 LoRA 配置应用到预训练模型中
解释
task_type=TaskType.CAUSAL_LM : 指定任务类型为自回归语言模型,常见于 GPT 系列的生成任务。PEFT 支持不同的任务类型,如问答(Question Answering)、序列到序列任务(Seq2Seq LM)等。
target_modules : 这是模型中应用 LoRA 的模块列表。对于 Transformer 模型,这些模块通常是负责自注意力计算的部分,如 q_proj(query projection)、k_proj(key projection)、v_proj(value projection)、o_proj(输出投影)等。
inference_mode=False : 该参数指定模型是否处于推理模式。如果设为 True,表示模型在推理时使用冻结的 LoRA 权重;如果为 False,表示模型处于训练模式,可以继续微调 LoRA 层。
r=8 : LoRA 中的秩 r,用于控制低秩矩阵的大小,值越大,表示模型的表达能力越强,但参数量也相应增加。
lora_alpha=32 : LoRA 中的缩放因子,控制了低秩矩阵的影响力。它常用于放大或缩小 LoRA 矩阵的输出,以确保它们在与原始模型输出进行组合时适当的权重。
lora_dropout=0.1 : 在 LoRA 层应用 Dropout,减少过拟合风险。通过设置 Dropout 概率,使得在训练时随机屏蔽部分神经元,有助于增强模型的泛化能力。
target_modules=["q_proj", "k_proj", "v_proj", "o_proj", "gate_proj", "up_proj", "down_proj"]
在 Transformer 模型中,这些 q_proj、k_proj、v_proj、o_proj 等名称表示的是不同的投影矩阵,它们主要与模型的 自注意力机制(Self-Attention Mechanism) 相关。它们用于将输入向量变换为适合进行自注意力计算的表示。
-
q_proj(Query Projection)
作用 : 将输入的 token 表示投影到 查询向量(Query Vector) 。在自注意力机制中,模型使用这个向量来与其他 token 的键向量(Key)进行相似性计算,从而决定每个 token 应该关注哪些其他 token。
解释 : 查询向量通常用于表示当前 token 的"问题",模型会通过查询向量去"询问"其他 token。 -
k_proj(Key Projection)
作用 : 将输入的 token 表示投影到 键向量(Key Vector) 。键向量用于与查询向量进行相似性计算,衡量两个 token 之间的相关性。
解释 : 键向量可以被视为表示每个 token 特性的"标签",通过与查询向量的相似性计算,模型判断哪些 token 对当前查询最重要。 -
v_proj(Value Projection)
作用 : 将输入的 token 表示投影到 值向量(Value Vector) 。值向量是自注意力机制的输出内容,它们会根据键与查询的相似度进行加权平均,作为最终的注意力输出。
解释 : 值向量可以看作是包含 token 具体信息的向量,模型在计算注意力时,最终会根据键-查询的匹配度来加权这些值向量。 -
o_proj(Output Projection)
作用 : 将注意力机制的输出(即加权后的值向量)进一步变换成模型需要的输出形式。自注意力机制的最终结果通过o_proj投影,返回给模型的下一层或其他模块。
解释 : 输出投影负责整合注意力层的输出,并确保其形状和表示适应接下来模型中的其他操作。 -
gate_proj(Gate Projection)
作用 : 这个投影矩阵通常出现在模型中带有 门控机制(gating mechanism) 的模块中,类似于 LSTM 或 GRU 中的门控单元。它用于调节信息的流入或流出,决定哪些信息需要保留或丢弃。
解释 : 在一些模型中,特别是经过改进的 Transformer 结构里,可能加入了门控机制,用于更灵活地控制信息的流动。gate_proj负责这个过程。 -
up_proj和down_proj
作用 : 这些通常是在模型中进行 上采样(up-sampling) 和 下采样(down-sampling) 的操作,用来调整表示的维度。这些投影矩阵负责在不同的层或模块之间转换表示的维度,类似于提升或降低特征维度的操作。
up_proj: 增大向量的维度(上采样)。
down_proj: 减少向量的维度(下采样)。
补充
在理解 LoRA(Low-Rank Adaptation)时,涉及到的一些关键概念,如矩阵的秩、投影矩阵、低秩分解和低秩矩阵,都是线性代数中的核心概念。
-
矩阵的秩(Rank of a Matrix)
定义 : 矩阵的秩表示矩阵中独立行或独立列的最大数量,简单来说,它是矩阵的行或列向量的线性独立的数目。秩表示一个矩阵可以表示的维度或自由度。
解释 : 矩阵的秩越大,意味着它包含的信息越多。如果一个矩阵的秩等于其行数或列数,它是“满秩”的,意味着这个矩阵不能通过更小的维度来表示。反之,秩较低的矩阵可以通过更小的维度来表示,称为低秩矩阵 。
例如,一个 3×3 的矩阵如果秩为 3,它是满秩矩阵;如果秩为 2 或更小,它是低秩矩阵,意味着该矩阵存在冗余信息,可以被压缩。 -
投影矩阵(Projection Matrix)
定义 : 投影矩阵是将一个向量投影到某个子空间的矩阵。它可以用来把高维度的数据投影到一个较低维度的子空间上。
解释 : 例如在机器学习和自然语言处理中,投影矩阵常用于将输入的向量表示从一个空间(如词向量的维度)转换到另一个空间。投影矩阵可以应用于自注意力机制中的 query(查询)、key(键)和 value(值)等向量,将它们映射到一个新的向量空间。
在 Transformer 模型中,q_proj,k_proj,v_proj这些都是投影矩阵,负责将输入序列的 token 表示转换到适合自注意力计算的空间中。 -
低秩分解(Low-Rank Decomposition)
定义 : 低秩分解是一种将一个高维矩阵分解为几个低维矩阵的技术,通常使用一些线性代数方法(如奇异值分解 SVD)。通过这种分解,可以将一个复杂的矩阵表示成若干个较小的矩阵的乘积,从而降低计算复杂度。
解释 : 低秩分解通过降低矩阵的维度,减少存储和计算需求。在机器学习中,低秩分解常用于减少模型的参数量,提高效率。例如,在 LoRA 中,低秩分解用于将原始的高维投影矩阵分解为两个低秩矩阵(分别是A和B),这些矩阵的秩比原始矩阵小,因此可以大大减少参数的数量。
数学上,假设我们有一个大矩阵W,可以通过两个小矩阵A和B的乘积来近似表示:
W ≈ A × B W \approx A \times B W≈A×B
这里A和B的秩r要比W的秩小,因此称为低秩分解。 -
低秩矩阵(Low-Rank Matrix)
定义 : 低秩矩阵是指秩小于其行数和列数的矩阵,也就是说,它可以通过更小的维度来表示,不是“满秩”的。低秩矩阵可以看作是含有冗余信息的矩阵。
解释 : 在机器学习中,低秩矩阵被用于减少模型的复杂度,因为它们可以用更少的参数来表示一个矩阵。因此,低秩矩阵在需要减少计算成本或内存需求的场景下非常有用。
例如,在 LoRA 中,原始模型中的权重矩阵(如W)通常是高秩矩阵,但我们可以通过低秩矩阵A和B来近似表示这个权重矩阵,从而在保持模型性能的同时减少需要训练的参数量。
相关文章:
大模型微调 - 用PEFT来配置和应用 LoRA 微调
大模型微调 - 用PEFT来配置和应用 LoRA 微调 flyfish PEFT(Parameter-Efficient Fine-Tuning)是一种参数高效微调库,旨在减少微调大型预训练模型时需要更新的参数量,而不影响最终模型的性能。它支持几种不同的微调方法ÿ…...
Ubuntu构建只读文件系统
本文介绍Ubuntu构建只读文件系统。 嵌入式系统使用过程中,有时会涉及到非法关机(比如直接关机,或意外断电),这可能造成文件系统损坏,为了提高系统的可靠性,通常将根文件系统设置为只读…...
【黑金系】金融UI/UX体验设计师面试作品集 Figma源文件分享
在数字金融时代,UI/UX体验设计师扮演着至关重要的角色。他们不仅塑造着产品的界面,更引领着用户的使用体验。我们的面试作品集,正是这样一部展现金融UI/UX设计魅力的宝典。 这套作品集汇聚了众多经典案例,每一处设计都经过精心雕…...
Golang | Leetcode Golang题解之第392题判断子序列
题目: 题解: func isSubsequence(s string, t string) bool {n, m : len(s), len(t)f : make([][26]int, m 1)for i : 0; i < 26; i {f[m][i] m}for i : m - 1; i > 0; i-- {for j : 0; j < 26; j {if t[i] byte(j a) {f[i][j] i} else {…...
Liunx常用指令
1. 文件和目录管理 ls 用法:ls [选项] [文件/目录]示例:ls -l(以长列表格式显示),ls -a(显示所有文件,包括隐藏文件)。 cd 用法:cd [目录]示例:cd ..…...
CSS基础:浮动(float)如何使用清楚以及代替方法
浮动元素在 CSS 中主要通过 float 属性来控制,影响元素的排列方式。浮动用于创建流式布局,常用于实现图文混排、布局列等效果。以下是浮动元素的相关属性和使用方法: 1. 基本浮动属性 float: 控制元素的浮动方向,可以设置为 left…...
margin重叠该怎么解决?
在CSS中,当两个或多个垂直相邻的块级元素(如<div>)的margin相遇时,它们不会叠加成两个margin的和,而是会取两个margin中的较大值,这种现象被称为“margin重叠”(margin collapsing&#x…...
Linux学习笔记(黑马程序员,前四章节)
第一章 快照 虚拟机快照: 通俗来说,在学习阶段我们无法避免的可能损坏Linux操作系统,如果损坏的话,重新安装一个Linux操作系统就会十分麻烦。VMware虚拟机支持为虚拟机制作快照。通过快照将当前虚拟机的状态保存下来,…...
tekton pipeline resources
PipelineResource 代表着一系列的资源,主要承担作为 Task 的输入或者输出的作用。它有以下几种类型: git:代表一个 git 仓库,包含了需要被构建的源代码。将 git 资源作为 Task 的 Input,会自动 clone 此 git 仓库。pu…...
使用Python实现多个PDF文件的合并
使用Python可以很方便地实现多个PDF文件的合并。我们可以使用PyPDF2库来完成这个任务。以下是一个实现PDF合并的Python脚本: import os from PyPDF2 import PdfMergerdef merge_pdfs(input_dir, output_filename):# 创建一个PdfMerger对象merger PdfMerger()# 获取…...
微擎忘记后台登录用户名和密码怎么办?解决方法
微擎忘记后台登录名和登录密码是很常见的,服务器百科网fwqbk.com告诉你找回后台登录用户名和密码的方法: 一:找回微擎后台用户名 (如果只是忘记了后台登录密码,请忽略此步骤,跳转到第二步) 通…...
blender我的对称模型好像中点被我不小心移动了 我现在如果雕刻 两边修改的地方不是对称的 我该怎么办
blender我的对称模型好像中点被我不小心移动了 我现在如果雕刻 两边修改的地方不是对称的 我该怎么办 首先请调整好模型确保左右前后对其相应的xyz轴 之后CtrlA应用变换 确保这些都归0且模型和xyz轴对应 如果在Blender中模型的中点(对称轴)不小心被移动了…...
数据库——MySQL概述
一、数据库 存储数据的仓库,数据是有组织的存储,简称database(DB) 二、数据库管理系统 操控和管理数据库的大型软件(DBMS) 三、SQL 操作关系型数据库的编程语言,定义了一套操作关系型数据库…...
云服务器部署DB-GPT项目
本文收录于《DB-GPT项目》专栏,专栏总目录: 点击这里。 文章目录 项目介绍 一、登录云服务器 1. 进入控制台 2.点击容器实例(点数字) 二、创建容器实例 1. 等待容器实例创建好,创建好的容器实例如下:…...
基于锂电池的多路直流电源模块设计
本实物模块从实物外观、接口介绍及功能说明三部分来介绍这款基于锂电池的多路直流电源模块。 1、实物外观 2、接口介绍 本模块的3D外观图如下图所示,整体尺寸为6*8cm。H1为单节锂电池接口,H2为5V输出接口,H3为12V输出接口,H4为-…...
蓝奏云网盘搜索网页版PHP源码
蓝搜WEB网页版V1.0是一款全开源的搜索引擎程序,支持添加搜索违禁词,并且提供了代码注释,方便用户阅读和修改。该程序支持自适应PC端和移动端,并采用了简洁的界面设计,没有后台管理的繁琐操作,使用起来十分方…...
CocosCreator面试真题详解
最近有位同学面试Cocos Creator,我们把面试时问道的真题列举出来,并配上参考答案。 问题1: 你们公司项目时如何做战斗系统的? 面试官你好,做战斗系统和架构的时候,我们一般把代码逻辑分成3层来设计,同时把数据独立出…...
线性代数 第七讲 二次型_标准型_规范型_坐标变换_合同_正定二次型详细讲解_重难点题型总结
文章目录 1.二次型1.1 二次型、标准型、规范型、正负惯性指数、二次型的秩1.2 坐标变换1.3 合同1.4 正交变换化为标准型 2.二次型的主要定理3.正定二次型与正定矩阵4.重难点题型总结4.1 配方法将二次型化为标准型4.2 正交变换法将二次型化为标准型4.3 规范型确定取值范围问题4.…...
国内外网络安全政策动态(2024年8月)
▶︎ 1.《关于进一步加强智能网联汽车准入、召回及软件在线升级管理的通知》公开征求意见 8月1日,工业和信息化部装备工业一司联合市场监管总局质量发展局组织编制了《关于进一步加强智能网联汽车准入、召回及软件在线升级管理的通知(征求意见稿&#…...
重心映射:坐标系统与边界处理策略
重心映射 在许多应用中,特别是在计算机图形学中,现在通常使用三角形网格形式的分段线性曲面工作,在本课程笔记的剩余部分,我们将主要坚持使用这种类型的曲面。 3.1 三角形网格 如前一章所述,让我们用 $ p (x,y,z) $ …...
JavaScript 中的 ES|QL:利用 Apache Arrow 工具
作者:来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗?了解下一期 Elasticsearch Engineer 培训的时间吧! Elasticsearch 拥有众多新功能,助你为自己…...
从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路
进入2025年以来,尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断,但全球市场热度依然高涨,入局者持续增加。 以国内市场为例,天眼查专业版数据显示,截至5月底,我国现存在业、存续状态的机器人相关企…...
Leetcode 3577. Count the Number of Computer Unlocking Permutations
Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接:3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯,要想要能够将所有的电脑解锁&#x…...
【配置 YOLOX 用于按目录分类的图片数据集】
现在的图标点选越来越多,如何一步解决,采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集(每个目录代表一个类别,目录下是该类别的所有图片),你需要进行以下配置步骤&#x…...
JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作
一、上下文切换 即使单核CPU也可以进行多线程执行代码,CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短,所以CPU会不断地切换线程执行,从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...
多种风格导航菜单 HTML 实现(附源码)
下面我将为您展示 6 种不同风格的导航菜单实现,每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
2025季度云服务器排行榜
在全球云服务器市场,各厂商的排名和地位并非一成不变,而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势,对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析: 一、全球“三巨头”…...
让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比
在机器学习的回归分析中,损失函数的选择对模型性能具有决定性影响。均方误差(MSE)作为经典的损失函数,在处理干净数据时表现优异,但在面对包含异常值的噪声数据时,其对大误差的二次惩罚机制往往导致模型参数…...
tomcat入门
1 tomcat 是什么 apache开发的web服务器可以为java web程序提供运行环境tomcat是一款高效,稳定,易于使用的web服务器tomcathttp服务器Servlet服务器 2 tomcat 目录介绍 -bin #存放tomcat的脚本 -conf #存放tomcat的配置文件 ---catalina.policy #to…...
