当前位置: 首页 > news >正文

了解大语言模型的参数高效微调(Parameter-Effcient Fine-Tuning)

🍉 CSDN 叶庭云https://yetingyun.blog.csdn.net/


在这里插入图片描述

大语言模型在众多应用领域实现了突破性的进步,显著提升了各种任务的完成度。然而,其庞大的规模也带来了高昂的计算成本。这些模型往往包含数十亿甚至上千亿参数,需要巨大的计算资源来运行。特别是,当需要为特定的下游任务定制模型时,尤其是在计算能力有限的硬件平台上,这一挑战尤为突出。

为了提升 LLM 在未见用户数据集和任务上的性能,微调仍是关键。随着模型规模的不断扩大,如从 GPT-2 的 1.5B 参数增长到 GPT-3 的 175B 参数,标准的全参数微调范式需要成千上万的 GPUs 并行工作,这在效率和可持续性方面表现不佳。此外,它可能损害模型的泛化能力,以及导致灾难性遗忘问题。为解决这一问题,参数高效微调(PEFT) 算法应运而生。该算法通过调整少量参数,在下游任务上实现了优于全面微调的性能。

参数高效微调(PEFT)是一种实用的解决方案,它涉及选择性地调整模型中的少数参数,而保持其他参数不变。调整大语言模型以高效地适应各种下游任务。PEFT 通过最小化新增参数数量或降低计算资源需求来调整预训练大语言模型,这在计算资源受限的情况下尤为重要。在处理参数数量庞大的大语言模型时,这种方法尤为有价值。因为从头开始微调这些模型不仅计算代价高昂,而且资源密集,这给支持系统平台设计带来了相当大的挑战。

我们将 PEFT 算法按照其操作方式分为加法、选择性、重参数化和混合微调四类。常见的加法微调算法主要有三种:(1)适配器;(2)软提示;(3)其他。这些算法在附加的可调模块或参数上存在差异。相比之下,选择性微调无需额外参数,它仅从骨干模型中选择部分参数,使这些参数在下游任务微调过程中可调,而保持大多数参数不变。我们根据所选参数的分组将选择性微调分为:(1)非结构化遮罩;(2)结构化遮罩。重参数化则是指在两种等效形式之间转换模型参数。具体而言,重参数化微调在训练过程中引入额外的低秩可训练参数,并在推理时将这些参数与原始模型集成。这种方法主要分为两种策略:(1)低秩分解;(2)LoRA 衍生物。混合微调则探索了不同 PEFT 方法的设计空间,并结合了它们的优点。

自然语言处理目前存在一个重要的范式:大规模预训练一般领域数据,并针对特定任务或领域进行微调(Fine-tuning)。然而,随着预训练语言模型规模的不断扩大,该范式面临以下问题:

  • 在微调大语言模型时,由于训练成本高昂,不太可能对所有模型参数进行重新训练。

  • 以往的方法都存在不同程度的性能问题。例如,adapter 增加了模型的层数,从而引入了额外的推理延迟;而 Prefix-Tuning 的训练难度较大,效果也不如直接进行微调。

模型通常过度参数化,导致冗余,其内在维度相对较小,主要依赖这一低内在维度进行任务适配。基于模型在任务适配过程中权重变化具有低秩特性的假设,研究者提出了低秩自适应(LoRA)方法。LoRA 通过优化适应过程中密集层变化的秩分解矩阵,间接训练神经网络中的部分密集层,同时保持预训练权重的稳定。实现上,LoRA 简洁明了地冻结预训练语言模型的矩阵参数,并选用 A 和 B 矩阵进行替代。在下游任务中,仅更新 A 和 B 矩阵,如图所示。

在这里插入图片描述

结合图片来看,LoRA 的实现流程如下:

  • 在原始预训练语言模型(PLM)的基础上,我们引入了一个旁路,通过降维再升维的操作,来模拟所谓的内在秩。

  • 在训练过程中,我们将固定预训练语言模型(PLM)的参数,仅对降维矩阵 A 和升维矩阵 B 进行训练。

  • 模型的输入输出维度保持不变,输出时,将 BA 与 PLM 的参数进行叠加。

  • 使用随机高斯分布对矩阵 A 进行初始化,同时将矩阵 B 初始化为 0 矩阵,以确保训练开始时,旁路矩阵仍维持为 0 矩阵状态。

具体实现:接下来我们从公式上解释 LoRA 的实现。假设要在下游任务微调一个预训练语言模型(如 GPT-3),则需要更新预训练模型参数,公式表示如下:

h = W 0 x + Δ W x = W 0 x + B A x h=W_{0} x+\Delta W x=W_{0} x+B A x h=W0x+ΔWx=W0x+BAx

W0 是预训练模型的初始化参数,而 ΔW 是需要更新的参数。在全参数微调的情况下,参数量等同于 W0 的参数量。例如,对于 GPT3,ΔW 的参数量约为 175B。由此可见,全参数微调大型语言模型对于资源有限的环境来说是不切实际的。鉴于前人的研究揭示预训练语言模型具有较低的 “内部维度”,这些模型在任务适配过程中即便被随机投影到较小的子空间,也能保持有效的学习。因此,LoRA 引入了一个小参数模块,专门用于学习改变量 ΔW。

在训练过程中,W0 保持不变,而 A 和 B 包含训练参数,会发生变化。在推理阶段,只需将变化量融入原模型,即可实现无延迟操作。若要切换任务,只需在切换过程中减去 BA,并替换为用其他任务训练好的 B’A’ 即可。

总的来说,LoRA 是一种简单而有效的轻量级微调方案,它基于大语言模型的内在低秩特性,通过增加旁路矩阵来模拟全参数微调。目前,LoRA 技术已广泛应用于大语言模型的微调,如 Alpaca 和 Stable Diffusion + LoRA,并能与其他高效的参数微调方法,如最先进的参数高效微调(PEFT)有效结合。

“r” 是 LoRA 中至关重要的参数,它决定了 LoRA 矩阵的秩或维度,对模型的复杂度和容量产生直接影响。当 “r” 值较高时,模型的表达能力增强,但可能引发过拟合问题;相反,降低 “r” 值可以减少过拟合,但相应地,模型的表达能力会有所减弱。在我们保持所有层都启用 LoRA 的前提下,将 “r” 值从 8 提升至 16,以探究其对性能的具体影响。一般来说,微调 LLM 时选择的 alpha 值是秩的两倍。调整 “alpha” 有助于在拟合数据和通过正则化防止过拟合之间保持平衡。

QLoRA,即量化 LoRA 的简称,由 Tim Dettmers 等人提出。它是一种在微调过程中有效降低内存占用的技术。在反向传播阶段,QLoRA 将预训练的权重量化为 4-bit,并采用分页优化器来管理内存峰值。QLoRA 会增加运行时间成本(因为量化和反量化增加了额外步骤),但它是一种很好的节省内存的方法。此外,AdamW 优化器是 LLM 训练的常用选择。此外,虽然学习率调度器可能有益,但 AdamW 和 SGD 优化器之间几乎没有区别。

LongLoRA:增强大语言模型(LLM)的长上下文处理能力,而无需大量算力资源。LongLoRA 通过使用一种简化的注意力形式和 LoRA 方法来高效扩展上下文长度,成功在 LLaMA2 7B/13B/70B 模型上将上下文长度扩展至 32K、64K、100K,几乎不增加算力消耗。此外,研究还创建了 LongQA 数据集来进一步改进模型的输出能力,并证明了通过增加训练信息量可以获得更好的结果。LongLoRA 不仅兼容现有技术,而且在处理长文本和长对话中寻找特定主题方面表现出色,为大型语言模型领域带来了创新的微调方法。

注意:LoRA 经常与现代的 LLMs 结合使用。尽管如此,众多 LoRA 的变体已经涌现(LoRA+、VeRA、LoRA-FA、LoRa-drop、AdaLoRA、DoRA、Delta-LoRA),它们以不同方式偏离了原始方法,旨在提升速度、性能或两者兼具。

  • LoRA+ 通过为两个矩阵设置不同学习率来提高训练效率;

  • VeRA 减少参数数量,通过训练额外的向量而非直接训练矩阵 A 和 B;

  • LoRA-FA 只训练矩阵 B;

  • LoRA-drop 决定哪些层值得通过 LoRA 增强;

  • AdaLoRA 动态调整矩阵的秩;

  • DoRA分别训练大小和方向;

  • Delta-LoRA 通过 A 和 B 的梯度更新预训练矩阵 W。

这些方法展示了在不牺牲性能的情况下,如何通过创新思路减少训练大语言模型的计算需求。

AdapterFusion 算法,用以实现多个 Adapter 模块间的最大化任务迁移。通过将适配器的训练划分为知识提取和知识组合两个阶段,成功解决了灾难性遗忘、任务间干扰以及训练不稳定的问题。然而,Adapter 模块的引入增加了模型的整体参数量,进而影响了模型在推理时的性能。AdapterFusion 在大多数情况下性能优于全模型微调和 Adapter。

前缀微调(Prefix-Tunning)是一种用于生成任务的轻量级微调方法。它通过向输入添加一个特定的、连续的任务向量序列,即 “前缀”,来实现这一点。这些前缀在图中以红色块表示。与提示(Prompt)不同,前缀完全由自由参数组成,不与真实的 token 相对应。与传统的微调相比,前缀微调仅针对前缀进行优化。因此,我们只需存储一个大型 Transformer 模型和已知任务特定前缀的副本,这使得为每个额外任务产生的开销非常小。

Prompt-tuning 为每个任务定义了独特的 Prompt,并将其与数据拼接作为输入。在此过程中,预训练模型被冻结以进行训练。值得注意的是,随着模型规模的扩大,其效果逐渐提升,并最终与微调效果相当。此外,Prompt-tuning 还引入了 Prompt-ensembling 的概念,即在同一批次中同时训练同一任务的不同 Prompt。这种方法相当于训练了多个不同的「模型,但相较于模型集成,其成本大幅降低。

P-Tuning 方法旨在解决大语言模型中 Prompt 构造方式对下游任务效果的重大影响问题。通过引入连续可微的 virtual token 替代传统的离散 token,实现了模板的自动构建,使得 GPT 在 SuperGLUE 上的成绩首次超过了 BERT 模型,改变了 GPT 不擅长 NLU 的观点。P-Tuning 将 Prompt 转换为可学习的 Embedding 层,通过 MLP+LSTM 处理,提高了模型的适应性和性能。P-Tuning v2 进一步改进,通过在每一层都加入 Prompts tokens 作为输入,不仅增加了可学习的参数,还提高了模型预测的直接影响,显示出跨规模和 NLU 任务的通用性。此外,P-Tuning v2 还引入了多任务学习和回归传统分类标签范式,提高了训练效率和模型的通用性。


📚️ 相关链接:

  • 《大型模型的参数高效微调》全面综述

  • LongLoRA:超长上下文,大语言模型高效微调方法

  • 腾讯技术工程 - 大模型微调方法总结

  • 大规模语言模型高效参数微调:P-Tuning 微调系列

  • LoRA 和 QLoRA 微调语言大模型:数百次实验后的见解

  • 不是大模型全局微调不起,只是 LoRA 更有性价比,教程已经准备好了

  • LoRA 家族概述

相关文章:

了解大语言模型的参数高效微调(Parameter-Effcient Fine-Tuning)

🍉 CSDN 叶庭云:https://yetingyun.blog.csdn.net/ 大语言模型在众多应用领域实现了突破性的进步,显著提升了各种任务的完成度。然而,其庞大的规模也带来了高昂的计算成本。这些模型往往包含数十亿甚至上千亿参数,需要…...

2024.4.14力扣每日一题——设计哈希集合

2024.4.14 题目来源我的题解方法一 链表数组 题目来源 力扣每日一题;题序:705 我的题解 方法一 链表数组 由于给定限制次数为10000,所以构造一个长度为10001的链表数组。对于add操作先看数组对应的位置是否为null或者为空,若是…...

SQL explain 显示子查询A类型为ALL怎么优化

当 SQL EXPLAIN 显示子查询 A 的类型为 ALL 时,这意味着数据库系统正在执行全表扫描,而不是使用索引来执行子查询。全表扫描可能会导致性能下降,特别是在大型表上。 为了优化这种情况,您可以考虑以下几点: 1. **索引…...

网络协议学习——IP协议

IP(Internet Protocol,互联网协议)是网络中最基本的协议之一,负责在互联网中进行数据包的传输。下面是对IP协议的详细讲解: IP协议的作用 IP协议是在网络层(第三层)上工作的协议,它的…...

MATLAB初学者入门(1)—— 基础知识和功能介绍

MATLAB(Matrix Laboratory)是一种用于数值计算、可视化以及编程的高性能语言环境。它广泛应用于工程、科学研究和教育等领域。以下是对MATLAB基础知识和编程技巧的系统性讲解,分为几个主要部分: 1. 基础操作 变量和表达式 在MAT…...

React Css 四种引入方式

React CSS 内联样式 优点 样式之间不会有冲突可以动态获取组件中state的值 缺点 要使用驼峰标识部分样式没有很友好的提示如果大量去写内敛样式 容易造成代码混乱伪类和伪元素无法编写 class HighCom extends PureComponent {constructor(props) {super(props)this.state…...

题目:输入3个数a,b,c,按大小顺序输出。

题目:输入3个数a,b,c,按大小顺序输出。    There is no nutrition in the blog content. After reading it, you will not only suffer from malnutrition, but also impotence. The blog content is all parallel goods. Those who are worried abou…...

AI预测体彩排3第3弹【2024年4月14日预测--第1套算法开始计算第3次测试】

今天咱们继续测试第1套算法和模型,今天是第3次测试,目前的测试只是为了记录和验证,不建议大家盲目跟买。我的目标仍旧是10次命中3-4次!~废话不多说了,直接上结果! 2024年4月14日排3的七码预测结果如下 第一套&…...

Android 在xml 布局中如何嵌套 Jetpack Compose

最近在项目开发的过程中需要用到 Jetpack Compose,之前没有接触过Compose,所以项目一直没有用到Compose。通过查看官网发现Compose上手比较快,但是准备比较复杂的布局要转换成Compose 不是一件容易的事情。那有没有可能只是对成熟的项目中的x…...

Spring Boot统一功能处理(一)

本篇主要介绍Spring Boot的统一功能处理中的拦截器。 目录 一、拦截器的基本使用 二、拦截器实操 三、浅尝源码 初始化DispatcherServerlet 处理请求(doDispatch) 四、适配器模式 一、拦截器的基本使用 在一般的学校或者社区门口,通常会安排几个…...

我与C++的爱恋:类与对象(二)

​ ​ 🔥个人主页:guoguoqiang. 🔥专栏:我与C的爱恋 ​ 本篇着重介绍构造函数和析构函数,剩余内容在下篇解答。 一、类的默认成员函数 如果一个类中什么成员都没有,简称为空类。 任何类在什么都不写时…...

BERT入门:理解自然语言处理中的基本概念

1. 自然语言处理简介 自然语言处理(Natural Language Processing,NLP)是人工智能领域的重要分支,涉及计算机与人类自然语言之间的相互作用。NLP 的应用已经深入到我们日常生活中的方方面面,如智能助理、机器翻译、舆情…...

Discoverydevice.java和activity_discoverydevice.xml

一、Discoverydevice.java public class Discoverydevice extends AppCompatActivity {private DeviceAdapter mAdapter2;private final List<DeviceClass> mbondDeviceList new ArrayList<>();//搜索到的所有已绑定设备保存为列表private final List<Devic…...

华为OD机试 - 最多颜色的车辆(Java JS Python C C++)

须知 哈喽,本题库完全免费,收费是为了防止被爬,大家订阅专栏后可以私信联系退款。感谢支持 文章目录 须知题目描述输入描述输出描述解析代码题目描述 在一个狭小的路口,每秒只能通过一辆车,假设车辆的颜色只有 3 种,找出 N 秒内经过的最多颜色的车辆数量。 三种颜色编…...

【无人机/平衡车/机器人】详解STM32+MPU6050姿态解算—卡尔曼滤波+四元数法+互补滤波——附3个算法源码

效果: MPU6050姿态解算-卡尔曼滤波+四元数+互补滤波 目录 基础知识详解 欧拉角...

NzN的C++之路--构造函数与析构函数

如果一个类中既没有成员变量也没有成员函数&#xff0c;这个类简称为空类。空类中其实并不是什么都没有&#xff0c;任何类在什么都不写时&#xff0c;编译器会自动生成6个默认成员函数。那今天我们就来学习一下其中两个默认成员函数&#xff1a;构造函数与析构函数。先三连后看…...

【算法刷题day24】Leetcode:216. 组合总和 III、17. 电话号码的字母组合

文章目录 Leetcode 216. 组合总和 III解题思路代码总结 Leetcode 17. 电话号码的字母组合解题思路代码总结 草稿图网站 java的Deque Leetcode 216. 组合总和 III 题目&#xff1a;216. 组合总和 III 解析&#xff1a;代码随想录解析 解题思路 回溯三部曲&#xff1a;确定递归…...

一体化泵站的生产制造流程怎样

诸城市鑫淼环保小编带大家了解一下一体化泵站的生产制造流程怎样 综合泵站和传统式混泥土泵站的一大差别是&#xff0c;离去制造厂前&#xff0c;能够开展全部机械设备设备的生产加工及零部件加工&#xff0c;随后运送到建筑项目当场开展安裝。这类经营方式缩短了开发周期&…...

【1】C++设计模式之【单例模式】

单例模式在C中的实现方式有以下几种&#xff1a; 懒汉式&#xff08;线程不安全&#xff09;饿汉式&#xff08;线程安全&#xff09;双检锁/双重校验锁&#xff08;DCL&#xff0c;线程安全&#xff09;静态局部变量&#xff08;线程安全&#xff09;C11版本&#xff08;线程…...

软件设计模式之解释器模式

一、引言 在软件设计中&#xff0c;我们经常遇到需要“解释”和执行某种特定语法或语言的情况。这时&#xff0c;解释器模式就派上了用场。解释器模式&#xff08;Interpreter Pattern&#xff09;是一种行为设计模式&#xff0c;它提供了一种解释语言的语法并定义一个句子如何…...

springboot 百货中心供应链管理系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;百货中心供应链管理系统被用户普遍使用&#xff0c;为方…...

c++ 面试题(1)-----深度优先搜索(DFS)实现

操作系统&#xff1a;ubuntu22.04 IDE:Visual Studio Code 编程语言&#xff1a;C11 题目描述 地上有一个 m 行 n 列的方格&#xff0c;从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子&#xff0c;但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...

ffmpeg(四):滤镜命令

FFmpeg 的滤镜命令是用于音视频处理中的强大工具&#xff0c;可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下&#xff1a; ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜&#xff1a; ffmpeg…...

VTK如何让部分单位不可见

最近遇到一个需求&#xff0c;需要让一个vtkDataSet中的部分单元不可见&#xff0c;查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行&#xff0c;是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示&#xff0c;主要是最后一个参数&#xff0c;透明度…...

【7色560页】职场可视化逻辑图高级数据分析PPT模版

7种色调职场工作汇报PPT&#xff0c;橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版&#xff1a;职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...

代码随想录刷题day30

1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币&#xff0c;另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额&#xff0c;返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...

【Go语言基础【13】】函数、闭包、方法

文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数&#xff08;函数作为参数、返回值&#xff09; 三、匿名函数与闭包1. 匿名函数&#xff08;Lambda函…...

Java编程之桥接模式

定义 桥接模式&#xff08;Bridge Pattern&#xff09;属于结构型设计模式&#xff0c;它的核心意图是将抽象部分与实现部分分离&#xff0c;使它们可以独立地变化。这种模式通过组合关系来替代继承关系&#xff0c;从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...

虚拟电厂发展三大趋势:市场化、技术主导、车网互联

市场化&#xff1a;从政策驱动到多元盈利 政策全面赋能 2025年4月&#xff0c;国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》&#xff0c;首次明确虚拟电厂为“独立市场主体”&#xff0c;提出硬性目标&#xff1a;2027年全国调节能力≥2000万千瓦&#xff0…...

32单片机——基本定时器

STM32F103有众多的定时器&#xff0c;其中包括2个基本定时器&#xff08;TIM6和TIM7&#xff09;、4个通用定时器&#xff08;TIM2~TIM5&#xff09;、2个高级控制定时器&#xff08;TIM1和TIM8&#xff09;&#xff0c;这些定时器彼此完全独立&#xff0c;不共享任何资源 1、定…...