【模型微调】| 各类微调模型总结 P-Tuning,Prefix,P-tuning v2,LoRA

文章目录

  • 1 微调背景
    • 1.1 Full fine-tuning 全参数微调(FFT)
    • 1.2 parameter-Efficient-fine-tuning 部分参数微调(PEFT)
  • 2 提示词调整训练法
    • 2.1 P-Tuning
    • 2.2 Prefix
    • 2.3 P-Tuning v2
  • 3 结构调整训练法
    • 3.1 Adapter tuning
    • 3.2 LoRA

微调大模型方法最全综述

各种各样的微调模型在最近两三年很火爆,想要去讲明白这些方法并不容易~但是我还是想尝试一下,尽可能将这些微调模型以一个清晰的架构呈现出来

1 微调背景

首先我们从基础概念出发—— fine-tuning(微调),微调在AI界扮演着非常重要的角色,因为很多大模型往往采用预训练+微调范式

预训练大模型可以让模型广泛学习到一些知识~相当于广撒网,一个劲地学,也不管会碰撞怎样的思想火花,好比读书破万卷,所以可见预训练大模型需要很多的硬件资源,耗费很长时间,因而是很多大公司才能玩的动的。

那么预训练模型就很强了吗?不一定,就好比我们可能读了很多书,但想要对某些领域深入了解,需要再精读细读

某些领域的书籍,这就是模型微调,针对自然语言不同的下游任务(比如问答电影相关的知识)需要通过微调让模型获得更精细的知识,所以微调可以解决预训练模型在特定任务上表现差的情况。

微调可以分为两大类

1.1 Full fine-tuning 全参数微调(FFT)

很好理解,就是整体参数都参与到微调过程中,不对网络结构,Prompt进行更改,这种微调的效果往往结果会比较好,但是可想而知,耗费的资源和时间也长

因而人们想在保证结果优秀的前提下,想尽可能少的调整原本大模型的参数,来减小成本,也就是接下来的一大类

1.2 parameter-Efficient-fine-tuning 部分参数微调(PEFT)

  • 其中有些维持原本网络结构和大部分参数不变,只动个别层的参数,这是传统微调方式,在传统AI任务如分类用的很多,比如我们只调整输出层的参数,我把他叫做部分参数训练法 在大语言模型用的其实不多

  • 其中有些不动原本的网络结构和参数,对输入Prompt进行调整,我把他叫做提示词Prompt调整训练法 如P-tuning

  • 对原本网络结构进行更改,增加某些层,或者增加某些结构,我把他叫做结构调整训练法

有些方法可能是上面三种基本方法的组合~

以下五个优点:

  1. 能够降低计算成本(需要更少的GPU和GPU运行时间);

  2. 拥有更快的训练时间(更快地完成训练);

  3. 具备更低的硬件要求(适用于较小显存的GPU和较小的内存);

  4. 具有更好的模型性能(降低过拟合);

  5. 需要更少的存储空间(大部分weights可以在不同任务(tasks)之间共享)。

我们重点介绍提示词Prompt调整训练法结构调整训练法

2 提示词调整训练法

2.1 P-Tuning

在2021年论文《GPT Understands,Too》提出Prompt tuning(即我们可以常看到的P-Tuning)(讲到用到NLU自然语言理解任务)

他的思路动机来源于,观察到在很多情况下,我们调整提示词可以获得更好的结果,可以做这样一个类比

原本提示词输入是,Input=1,2,3,4,5 (这里以数字举例,每个数字对应代表一个字符)假设模型输出能够打60分

我们在实验中发现,输入调整为Input= 2,2,3,4,5 会更好,模型输出最后能够打75分

但是如上我们的调整都是离散的调整,费时费力,我看到一个专门的称呼,叫这种调整方式是离散的,硬的(hard Prompt tuning)

而很有可能这两个都不是最佳的,最佳的可能是Input=1.4,2,3,4,5

所以我们给Input加一些可学习的部分,让他自己学习到最佳的提示词状态,这便是提示词调整训练法的一大精髓和核心(Soft Prompt tuning)

如下图,将原本的离散的The captial of is 这些变为h0,h1,h2等等一系列连续的量

在这里插入图片描述

通俗可以这么理解,就是针对某些任务,在提示词上做更改是可以提高模型的表现的,但是我们不知道该做怎样的更改,人工调整费时费力,简单,让模型自适应地去学习怎么样调整提示词!

P-tuning:自动构建模版,释放语言模型潜能 - 科学空间|Scientific Spaces (kexue.fm)

2.2 Prefix

Prefix-Tuning: Optimizing Continuous Prompts for Generation

Prefix其实和 P-Tuning挺像的

Prefix支持进入前缀,P-tuning不局限于前缀

Prefix注重自然语言生成任务,P-tuning 注重自然语言理解任务

在这里插入图片描述

《The Power of Scale for Parameter-Efficient Prompt Tuning》是Prefix的简化~

好好研究一下这个

然后研究一下开源库huggingface

大模型微调实践——Prefix tuning与P-tuning v2的原理、区别与代码解析最终章 - 知乎 (zhihu.com)

2.3 P-Tuning v2

2021年,清华大学提出《P-Tuning v2: Prompt Tuning Can Be Comparable to Fine-tuning Universally Across Scales and Tasks》

v2 在v1的基础上进行了改进,显著的改进源于对预训练模型的每一层应用连续Prompt

在这里插入图片描述

3 结构调整训练法

3.1 Adapter tuning

2019年论文《Parameter-Efficient Transfer Learning for NLP》提出

如图,在自我注意模块(和前馈神经网络层模块)和后续剩余连接之间插入适配器层Adapter

在训练过程中,只训练Adapter结构的参数,原本模型参数不动

在这里插入图片描述

3.2 LoRA

论文《LoRA: Low-Rank Adaptation of Large Language Models》

具体做法

  • 在原模型旁边增加一个旁路,通过低秩分解(先降维再升维)来模拟参数的更新量
  • 训练时,原模型固定,只训练降维矩阵A和升维矩阵B;
  • 推理时,可将BA加到原参数上,不引入额外的推理延迟;
  • 初始化,A采用高斯分布初始化,B初始化为全0,保证训练开始时旁路为0矩阵;
  • 可插拔式的切换任务,当前任务W0+B1A1,将lora部分减掉,换成B2A2,即可实现任务切换;
  • 秩的选取:对于一般的任务,rank=1,2,4,8足矣,而对于一些领域差距比较大的任务可能需要更大的rank。

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

永久删除 Elasticsearch 中的主节点

Elasticsearch 是一个开源分布式搜索和分析引擎,用于各种任务,例如全文搜索、日志分析和实时数据分析。 Elasticsearch 集群由一个或多个节点组成,每个节点可以具有多种角色,包括主节点(master node)、数据…

15. 三数之和(力扣LeetCode)

文章目录 15. 三数之和题目描述双指针去重逻辑的思考a的去重b与c的去重 15. 三数之和 题目描述 给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k ,同时还满足 nums[i] nums[j] nums[k] 0 。请 …

C# 使用 MailKit 接收邮件(附demo)

C# 使用 MailKit 接收邮件(附demo) 介绍安装包(依赖)简单代码获取附件核心代码完整代码 介绍 MailKit 是一个开源的 C# 邮件处理库,用于在应用程序中发送和接收电子邮件。它提供了一个强大且易于使用的 API&#xff…

2024最新版TypeScript安装使用指南

2024最新版TypeScript安装使用指南 Installation and Development Guide to the Latest TypeScript in 2024 By JacksonML 1. 什么是TypeScript? TypeScript is JavaScript with syntax for types. – typescriptlang.org TypeScript 是 JavaScript 的一个超集,…

【UE 材质】球形遮罩材质

效果 步骤 1. 新建一个材质,这里命名为“M_Mask” 打开“M_Mask”,混合模式设置为已遮罩,勾选双面显示 在材质图表中添加如下节点 此时我们将一个物体赋予材质“M_Mask”并放置在世界坐标原点,可以看到如下效果 2. 如果我们希望能…

页面切换导致echarts不加载的问题

1. 问题描述 在A页面写了echarts,初始化dom元素加载,显示正常.当切换到B页,再切换回A页面时,echarts加载不出来. f12召唤出来看看报错,没有问题,但是有这样的警告 渲染echarts的dom元素上多了一个" echarts_instance "的属性,这是用来表示唯一性的. 2. 问题解决 …

HIMO智能尾灯,让夜骑的你更加自信

现在选择骑车外出的朋友越来越多了,日常骑行的过程中, 夜间要尤其注意安全 , 特别是在一些光线不好的道路 , 有必要给车辆增加一些醒目的“标志” , 像是尾灯我觉得就很重要 , 我也是前几天新装了一枚 HIMO…

DataX介绍

一、介绍 DataX 是一个异构数据源离线同步工具,致力于实现包括关系型数据库(MySQL、Oracle等)、HDFS、Hive、ODPS、HBase、FTP等各种异构数据源之间稳定高效的数据同步功能。 github地址 详细文档 操作手册 支持数据框架如下: 架构 Reader&#xff1…

RT-Thread:STM32的PB3,PB4 复用IO配置为GPIO

说明:在使用 STM32F103CBT6 配置了 PB3 为IO,测试时发现读取这个IO的电平时钟是0,即便单管脚上的电平是1,读取的数据任然是0,查规格书后发现PB3,PB4是JTAG复用口,要当普通IO用需要配置。 配置工具:STM32Cu…

51单片机编程应用(C语言):独立按键

目录 1.独立按键介绍 2.独立按键控制LED亮灭 1.1按下时LED亮,松手LED灭(按一次执行亮灭) 1.2首先按下时无操作,松手时LED亮(再按下无操作,所以LED亮),松手LED灭(松手时…

LeetCode:206反转链表

206. 反转链表 - 力扣(LeetCode) 不难,小细节是单写一个循环,把特殊情况包含进去, 单链表核心:上一个结点,当前结点,下一个结点, 代码:注释(算是…

系统分析师-22年-下午答案

系统分析师-22年-下午答案 更多软考知识请访问 https://ruankao.blog.csdn.net/ 试题一必答,二、三、四、五题中任选其中两题作答 试题一 (25分) 说明 某软件公司拟开发一套博客系统,要求能够向用户提供一个便捷发布自已心得,及时有效的…

安装jar包到maven本地仓库的基本步骤

1.jar名字和所在目录 2.输入导包脚本 mvn install:install-file -DfileE:\resources\6、SpringBoot3Vue3全套教程\02_资料\02_Bean注册资料\common-pojo-1.0-SNAPSHOT.jar -DgroupIdcn.itcast -DartifactIdcommon-pojo -Dversion1.0 -Dpackagingjar3.打开命令行输入脚本就可以…

Linux安装aria2出现No package aria2 available.的解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

【C++】 C++入门—内联函数

C入门 1 内联函数1.1 定义1.2 查看方式1.3 注意 Thanks♪(・ω・)ノ谢谢阅读下一篇文章见!!! 1 内联函数 1.1 定义 程序在执行一个函数前需要做准备工作:要将实参、局部变量、返回地址以及若干寄存…

代理模式详解(重点解析JDK动态代理)

- 定义 在解析动态代理模式之前,先简单看下整个代理模式。代理模式分为普通代理、强制模式、动态代理模式。其中动态代理模式主要实现方式为Java JDK提供的JDK动态代理,第三方类库提供的,例如CGLIB动态代理。 代理模式就是为其他对象提供一种…

Attack Lab:Phase1~Phase5【缓冲区溢出实验】

注:本实验所用文件不是csapp官网给出的,是学校下发的。可以参考我的思路。 phase 1 本阶段目标是使getbuf调用结束后,控制权交给touch1函数。 则我们要知道两件事:一是缓冲区大小,二是touch1在虚拟内存中的位置。 用…

山海鲸智慧教育方案:教育数据的未来

作为山海鲸可视化软件的开发者,我们深知数据可视化在教育领域的重要价值。山海鲸智慧教育解决方案正是在这样的背景下应运而生,致力于为教育行业提供高效、直观的数据可视化解决方案。 随着教育信息化的深入推进,教育数据呈爆炸式增长。如何…

vue3中使用了keep-alive来缓存页面使用onActivated和onDeactivated生命周期

1.说明 要求从实单订单列表跳转到物流账单列表时通过订单号(orderSn)进行筛选。现在出现的问题是所以第一次跳转到物流账单列表页面时是可以实现通过订单号进行筛选数据。在没有关闭物流账单列表页面就进行第二次跳转 2.出现的问题 3.keep-alive缓存页面特有的生命周期 vue2…

【算法与数据结构】300、LeetCode最长递增子序列

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析&#xff1a;   程序如下&#xff1a; class Solution { public:int lengthOfLIS(vector<int>& nums)…