【大模型基础_毛玉仁】4.1 参数高效微调简介


目录

  • 4 参数高效微调
    • 4.1 参数高效微调简介
      • 4.1.1 下游任务适配
        • 1)上下文学习(In-context learning)
        • 2)指令微调(Instruction Tuning)
      • 4.1.2 参数高效微调
      • 4.1.3 参数高效微调的优势


4 参数高效微调

大语言模型虽知识丰富,但在垂直领域适配性不足,仅靠提示工程难以解决,需通过微调参数来提升适配性。然而,大语言模型参数量巨大,微调成本高,限制了其在垂直领域的应用。因此,实现效果可靠、成本可控的参数高效微调技术成为关键。

下面探讨主流的参数高效微调技术:参数附加方法、参数选择方法低秩适配方法的代表性算法实现与优势。

.

4.1 参数高效微调简介

大语言模型在垂直领域适配时,上下文学习和指令微调虽是有效途径但存在不足。为此,参数高效微调(Parameter-Efficient Fine-Tuning, PEFT)技术出现。

本节先回顾前两者并分析其局限,再介绍PEFT概念及优势,最后分类讲解主流PEFT方法,包括参数附加、选择和低秩适配,阐述其原理和代表性工作。

.

4.1.1 下游任务适配

为提高大语言模型在垂直和细分领域的性能,需进行下游任务适配,主流方法有:

  • 上下文学习In-context learning

  • 指令微调Instruction Tuning

1)上下文学习(In-context learning)

上下文学习通过设计Prompt,将任务转化为生成任务,驱动模型完成任务。

小样本上下文学习Few-shotin-contextlearning):

  • 将样本-标签对转化为自然语言指令(Instruction)和样例(Demonstrations),

  • 拼接测试样本输入模型,输出作为预测结果。

  • 该方法无需更新模型参数,可快速应用于多种任务。

上下文学习虽能有效利用大语言模型的能力,但存在明显缺点:

  • 性能与微调有差距,Prompt设计耗费人力且不同设计导致性能差异大,

  • 推理代价随Prompt样例增多而快速上升。

因此,微调大语言模型在许多场景和垂直领域仍有必要。

2)指令微调(Instruction Tuning)

指令微调(Instruction Tuning)通过构建指令数据集并在其上进行监督微调,使模型更好地理解和执行自然语言处理任务指令。其过程如下:

  • 指令数据构建:指令数据包含指令、示例(可选)、问题和回答,构造方式有:1)数据集成,即将带标签的自然语言数据集通过模板转换为指令格式的<输入,输出>对,如Flan和P3数据集;2)大语言模型生成,即人工收集少量指令数据后,使用大语言模型进行指令扩展,如InstructWild和Self-Instruct数据集。

  • 监督微调:构建数据集后,采用完全监督的方式对预训练模型进行微调,通过顺序预测输出中的每个token来训练模型,从而显著提升模型的指令遵循能力,增强其推理水平和泛化到新任务、新领域的能力。

指令微调虽能提升大语言模型在下游任务的性能,但监督微调需大量计算资源。如LLaMA2-7B全量微调需近60GB内存,消费级GPU(如RTX4090)无法胜任。因此,在资源受限环境下,研究参数高效微调技术至关重要。

.

4.1.2 参数高效微调

参数高效微调(Parameter-Efficient Fine-Tuning,PEFT)旨在避免微调全部参数,减少在微调过程中需要更新的参数数量和计算开销,从而提高微调大语言模型的效率。

图4.2: 高效参数微调方法分类学。
在这里插入图片描述

以下是三种参数高效微调方法的精简总结:

  1. 参数附加方法(Additional Parameters Methods):在模型结构中附加较小的可训练模块(如适配器层),冻结原始参数,仅微调新模块,典型方法有适配器微调(Adapter-tuning)、提示微调(Prompt-tuning)、前缀微调(Prefix-tuning)和代理微调(Proxy-tuning)等。

  2. 参数选择方法(Parameter Selection Methods):仅选择模型部分参数微调,冻结其余参数,利用部分参数对下游任务的决定性作用,典型方法包括BitFit、Child-tuning和FishMask等。

  3. 低秩适配方法(Low-rank Adaptation Methods):通过低秩矩阵近似原始权重更新矩阵,冻结原始参数,仅微调低秩更新矩阵,大幅节省内存开销,经典方法有LoRA及其变体如AdaLoRA、DyLoRA和DoRA等。

三种参数高效微调(PEFT)方法:

  • 参数附加方法(Additional Parameters Methods):在模型结构中附加较小的可训练模块(如适配器层),冻结原始参数,仅微调新模块,典型方法有适配器微调(Adapter-tuning)、提示微调(Prompt-tuning)、前缀微调(Prefix-tuning)和代理微调(Proxy-tuning)等。

  • 参数选择方法(Parameter Selection Methods):仅选择模型部分参数微调,冻结其余参数,利用部分参数对下游任务的决定性作用,典型方法包括BitFit、Child-tuning和FishMask等。

  • 低秩适配方法(Low-rank Adaptation Methods):通过低秩矩阵近似原始权重更新矩阵,冻结原始参数,仅微调低秩更新矩阵,大幅节省内存开销,经典方法有LoRA及其变体如AdaLoRA、DyLoRA和DoRA等。

.

4.1.3 参数高效微调的优势

参数高效微调(PEFT)有以下优势:

  • 计算效率高:减少需更新参数数量,降低训练时计算资源消耗。

  • 存储效率高:减少微调参数数量,显著降低模型存储空间,适用于内存受限设备。

  • 适应性强:可快速适应不同任务,无需重新训练整个模型,提升模型在变化环境中的灵活性。

表4.1: 全量参数微调和参数高效微调显存占用对比(OOM代表超出内存限制)

模型名全量参数微调参数高效微调 (LoRA)
bigscience/T0_3B47.14GB GPU / 2.96GB CPU14.4GB GPU / 2.96GB CPU
bigscience/mt0-xxl (12B params)OOM GPU56GB GPU / 3GB CPU
bigscience/bloomz-7b1 (7B params)OOM GPU32GB GPU / 3.8GB CPU

.


其他参考:【大模型基础_毛玉仁】系列文章


声明:资源可能存在第三方来源,若有侵权请联系删除!

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

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

相关文章

Postman使用02、断点、fiddler弱网测试

脚本操作 一、脚本导出 1.导出json脚本 2.打包json文件 3.下载的文件 二 .导入脚本 1.选择文件 2.点击导入 3.导入的接口 三.多接口运行 1.集合右键&#xff0c;点击run &#xff0c;运行多个接口 2.编辑环境&#xff0c;集合&#xff0c;执行次数等 3.运行多个接口 四.运行…

深挖增长内核:好产品驱动增长的全方位解析

年前在老板的带领下深入学习了《增长黑客》&#xff0c;并思考了在CPS站外引流的落地方案&#xff0c;最近刚好在做京东联盟的京粉推客增长体系建设&#xff0c;再次回顾一下增长黑客方法以及记录一下思考。 好产品才是增长的根本。增长黑客理念风靡&#xff0c;“啊哈时刻” 概…

新手小白 react-useEffect 使用场景

useEffect 是 React 中的一个非常重要的 Hook&#xff0c;用于处理组件的副作用&#xff08;side effects&#xff09;。它通常在以下几种场景中使用&#xff1a; 1. 数据获取 当组件加载时&#xff0c;需要从外部 API 获取数据&#xff0c;或者从本地存储中读取数据。示例&a…

MySQL 调优:查询慢除了索引还能因为什么?

文章目录 情况一&#xff1a;连接数过小情况二&#xff1a;Buffer Pool 太小 MySQL 查询慢除了索引还能因为什么&#xff1f;MySQL 查询慢&#xff0c;我们一般也会想到是因为索引&#xff0c;但除了索引还有哪些原因会导致数据库查询变慢呢&#xff1f; 以下以 MySQL 中一条 S…

【操作系统】进程三种状态?进程间状态的切换?挂起态?

进程状态 进程的五种&#xff08;三种&#xff09;状态&#xff1a; 新建&#xff08;New&#xff09;&#xff1a;进程刚被创建&#xff0c;尚未加入到就绪队列&#xff1b;就绪&#xff08;Ready&#xff09;&#xff1a;进程已获得除CPU外的所有资源&#xff0c;等待被调度执…

计算机控制系统的最小拍控制器设计及仿真分析

1题目 开环传递函数 G(s) 2/(s(0.5s1)) &#xff0c;采样周期 T0.5 秒&#xff0c;设计单位速度输入下的最小拍控制器 1.1 方法1 根据课本中的步骤&#xff0c;最小拍控制器的设计步骤如下&#xff1a; 1. 确定对象的离散传递函数G(z)&#xff0c;并确定其零极点。 2. 确定…

哈希--哈希桶

哈希桶是哈希表&#xff08;散列表&#xff09;中的一个概念&#xff0c;是哈希表数组中的每个元素 &#xff0c;用于存储键值对数据。它有以下特点和相关要点&#xff1a; 结构与原理&#xff1a;哈希表底层常由数组构成&#xff0c;数组的每个元素即哈希桶。通过哈希函数计算…

Linux多线程详解

Linux多线程详解 一、Linux多线程概念1.1 什么是线程1.2 进程和线程1.3 进程的多个线程共享1.4 进程和线程的关系 二、Linux线程控制2.1 POSIX线程库2.2 线程创建2.3 获取线程ID pthread_self2.4 线程等待pthread_join2.5 线程终止2.6 线程栈 && pthread_t2.7 线程的局…

Midscene.js自然语言驱动的网页自动化全指南

一、概述 网页自动化在数据抓取、UI 测试和业务流程优化中发挥着重要作用。然而&#xff0c;传统工具如 Selenium 和 Puppeteer 要求用户具备编程技能&#xff0c;编写复杂的选择器和脚本维护成本高昂。Midscene.js 通过自然语言接口革新了这一领域&#xff0c;用户只需描述任…

winstart.wsf 病毒清理大作战

0x00 背景 发现感染了winstart.wsf 病毒如何清理。 0x01 现象 遍历Users下每个目录以及C:\和C:\Windows\Temp 2个目录写入病毒文件。 C:\Users\Administrator\AppData\Local\Temp\winstart.wsf C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Program…

多路转接Poll

在之前我们讲过select是最古老的多路转接方案&#xff0c;古老就意味着他不是很方便使用&#xff0c;他需要用户手动保存fd_set这个位图结构&#xff0c;来表示读写事件的关注与否或者就绪性。 而且由于fd_set的大小是固定的&#xff0c;这就意味着他能管理的套接字文件描述符是…

多层感知机的简洁实现

《动手学深度学习》-4.3-笔记 import torch from torch import nn from d2l import torch as d2l 导入必要的库和模块 net nn.Sequential(nn.Flatten(),nn.Linear(784, 256),nn.ReLU(),nn.Linear(256, 10))def init_weights(m):if type(m) nn.Linear:nn.init.normal_(m.we…

【GoLang】调用llm时提示词prompt的介绍以及使用方式

介绍 提示词是一种与大模型交互的对话格式&#xff0c;它以 JSON 格式定义了一个消息列表&#xff08;messages&#xff09;&#xff0c;包含了系统消息和用户消息。 我们向AI提问时&#xff0c;其实发给AI的都是提示词&#xff0c;别看我们只是简单输入了一句话&#xff0c;…

内核编程十二:打印task_struct中的数据

在Linux内核中&#xff0c;current 是一个宏&#xff0c;用于获取当前正在执行的进程的 task_struct 结构体指针。current 宏返回一个指向当前正在运行的进程的 task_struct 结构体的指针。通过这个指针&#xff0c;内核代码可以访问和修改当前进程的各种属性和状态。 打印单个…

区间端点(java)(贪心问题————区间问题)

deepseek给了一种超级简单的做法 我是真的想不到 贪心的思路是 局部最优——>全局最优 这种我是真的没有想到&#xff0c;这样的好处就是后面便利的时候可以通过foreach循环直接便利qu的子元素也就是对应的某一个区间, 将一个二维数组变成一维数组&#xff0c;每一个一维…

Qt事件处理(处理鼠标事件、键盘事件、定时器事件、窗口移动和大小变化事件)

事件处理 事件是应用程序内部或者外部产生的事情或者动作的统称。 在 Qt 中&#xff0c;事件是用一个对象来管理一个事件的。所有的事件对象都继承自抽象类 QEvent 。事件包括鼠标事件、键盘事件等&#xff0c;发出自 Qt 或操作系统本身。 处理事件一般通过重写相关的 Event 函…

Apache Hive:基于Hadoop的分布式数据仓库

Apache Hive 是一个基于 Apache Hadoop 构建的开源分布式数据仓库系统&#xff0c;支持使用 SQL 执行 PB 级大规模数据分析与查询。 主要功能 Apache Hive 提供的主要功能如下。 HiveServer2 HiveServer2 服务用于支持接收客户端连接和查询请求。 HiveServer2 支持多客户端…

利用 @eslint/eslintrc 实现 ESLint9的适配

深度解析&#xff1a;利用 eslint/eslintrc 实现 ESLint 的高效配置管理 在前端开发领域&#xff0c;代码质量和一致性是至关重要的。ESLint 作为一款流行的代码检查工具&#xff0c;帮助开发者发现代码中的潜在问题并保持代码风格的一致性。而随着项目的复杂度增加和团队规模…

cfca 申请国密证书流程

之前给某银行开发项目&#xff0c;需要用到cfca国密双证证书&#xff0c;证书类型为企业双证的作为接口加密的密钥。 因为是第一次对接&#xff0c;其中走了不少的弯路&#xff0c;现将申请的流程发布出来做下记录 1、需要找到cfca的相关人员进行测试证书的申请 2、大概1天的…

基于Spring Boot的乡村养老服务管理系统的设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…