ChatGPT等大模型高效调参大法——PEFT库的算法简介

news2024/9/21 19:04:42

随着ChatGPT等大模型(Large Language Model)的爆火,而且目前业界已经发现只有当模型的参数量达到100亿规模以上时,才能出现一些在小模型无法得到的涌现能力,比如 in_context learing 和 chain of thougt。深度学习似乎朝着模型越来越大的方向一去不复。

而对于这些通用的大模型如何进行 任务微调呢,或者想增加大模型某方面的能力,会遇到很多的问题。

(1)对于动则百亿级别的参数,如何更高效,低资源的微调大模型呢

(2)当样本量很小的时候,如何微调大模型能得到较好的效果呢

等等等等,为解决上面大模型微调的一些问题,学术界提出了很多方法,下面我介绍huggface 开源的一个高效微调大模型的库PEFT里面实现的四种方法(这里笔者的介绍只基于文本分类任务微调),主要是针对transformer 架构的大模型进行微调,当然repo中有对diffusion模型进行微调的案例。

图片

PEFT

LORA

LORA算法是在 每层 transfomer block 旁边引入一个并行低秩的支路,支路的输入是transfomer block 的输入,

然后将输出和 transfomer block 的输出相加,在固定主pretrian model参数的情况下,用支路去学习特定任务知识,来完成特定任务。同时lora现在已经在stable diffusion 图像个性化定制风格和实例这个领域得到了很好的应用,不用动原模型的参数,就可以为ai作画师注入新的知识。

图片

LORA

lora 微调需要设置两个参数一个是r,即中间层神经元的个数。alpha是一个scale参数。

model_name_or_path = "./unsup-simcse-roberta-base"
peft_type = peft_type = PeftType.LORA
peft_config = LoraConfig(task_type="SEQ_CLS", inference_mode=False, r=8, lora_alpha=16, lora_dropout=0.1)
lr = 3e-4
model = AutoModelForSequenceClassification.from_pretrained(model_name_or_path, return_dict=True)
model = get_peft_model(model, peft_config)
model.print_trainable_parameters()

图片

LORA

PREFIX_TUNING

PREFIX_TUNING算法是根据 下游任务 “前缀指令文本” 的所有层的embeding表示,学习到的前缀指令文本向量可以挖掘大模型的潜力去引导模型完成特定任务。

图片

PREFIX_TUNING

PREFIX_TUNING 微调需要设置一个参数,即 指令文本的长度 num_virtual_tokens,研究表明这个数量一般设置在10-20之间。

model_name_or_path = "./unsup-simcse-roberta-base"
peft_type = PeftType.PREFIX_TUNING
peft_config = PrefixTuningConfig(task_type="SEQ_CLS", num_virtual_tokens=20)
lr = 1e-2
model = AutoModelForSequenceClassification.from_pretrained(model_name_or_path, return_dict=True)
model = get_peft_model(model, peft_config)
model.print_trainable_parameters()

图片

PREFIX_TUNING

P_TUNING

P_TUNING算法和PREFIX_TUNING的想法很相似,想通过微调"指令文本",让指令文本去挖掘大模型的潜力去完成特定的任务。但是P tuning 只学习 “指令文本” 输入层embeding的的表示。为了增强 "指令文本"的连续性,采用了一个 MLP(LSTM) 的结果去encoding “指令文本”。从微调参数量来看只有 0.65% 比 PREFIX_TUNING 和LORA 这些在所有层都增加参数的方法要少。需要提醒的是这里的指令文本是伪文本,可能就是 unused1, unused2…等,目前源代码里面就是随机初始化的一个embeding.

图片

P_TUNING

图片

P_TUNING微调需要设置2个参数,一个是MLP中间层的参数encoder_hidden_size,第二个依然是 指令文本的长度 num_virtual_tokens。

model_name_or_path = "./unsup-simcse-roberta-base"
peft_type = PeftType.P_TUNING
peft_config = PromptEncoderConfig(task_type="SEQ_CLS", num_virtual_tokens=20, encoder_hidden_size=128)
lr = 1e-3
model = AutoModelForSequenceClassification.from_pretrained(model_name_or_path, return_dict=True)
model = get_peft_model(model, peft_config)
model.print_trainable_parameters()

图片

P_TUNING

PROMPT_TUNING

PROMPT_TUNING算法和P_TUNING很像,且更简单,就是是根据 下游任务 “指令文本” 输入层embeding的的表示。PROMPT_TUNING没有增加任何的层,直接使用微调指令文本(prompt) 的embeding向量。同时文章提出了目前语言模型微调的最新范式,我感觉这篇的思想和chatgpt指令微调的很像。

就是对不同的任务,我们的输入都是不同的指令(都是自然文本),不同的指令去指导模型完成不同的任务。

摆脱了以前不同的任务需要不同的输入和输出,导致任务之间模型隔离的问题。

从微调参数量来看只有 0.48%,是三种方法中微调参数量最少的一种。并且文章表明随着模型越大,PROMPT_TUNING 的效果几乎能和模型整个微调的效果一样。形成了只是学习一个指令然后去模型中检索某种能力的范式。

图片

PROMPT_TUNING

图片

PROMPT_TUNING

PROMPT_TUNING微调需要设置1个参数, 指令文本的长度 num_virtual_tokens。

model_name_or_path = "./unsup-simcse-roberta-base"
peft_type = PeftType.PROMPT_TUNING
peft_config = PromptTuningConfig(task_type="SEQ_CLS", num_virtual_tokens=20)
lr = 1e-3
model = AutoModelForSequenceClassification.from_pretrained(model_name_or_path, return_dict=True)
model = get_peft_model(model, peft_config)
model.print_trainable_parameters()

图片

PROMPT_TUNING

结语

从repo的介绍中我们发现直接微调大模型需要耗费大量的计算资源,而直接使用lora 可以在少量GPU的资源情况微调大模型,且能够达到比全量微调差一点的效果,确实很强大。我们可以发现这些PEFT的方法有如下优势。

  1. 少量的计算资源,就能撬动大模型的微调。就能达到不错的效果
  2. 同时PROMPT_TUNING 等方法的指令微调方式和预训练任务的训练方式达成了统一,可以在小样本情况小取得不错的成绩
  3. 采用训练prompt指令,充分挖掘预训练模型潜力的范式也相对来说比较合理

也许未来某一天很多小公司就是采用这些方法去微调一个超大的模型去完成自己的任务。

图片

PEFT

图片

如何学习大模型

现在社会上大模型越来越普及了,已经有很多人都想往这里面扎,但是却找不到适合的方法去学习。

作为一名资深码农,初入大模型时也吃了很多亏,踩了无数坑。现在我想把我的经验和知识分享给你们,帮助你们学习AI大模型,能够解决你们学习中的困难。

我已将重要的AI大模型资料包括市面上AI大模型各大白皮书、AGI大模型系统学习路线、AI大模型视频教程、实战学习,等录播视频免费分享出来,需要的小伙伴可以扫取。

一、AGI大模型系统学习路线

很多人学习大模型的时候没有方向,东学一点西学一点,像只无头苍蝇乱撞,我下面分享的这个学习路线希望能够帮助到你们学习AI大模型。

在这里插入图片描述

二、AI大模型视频教程

在这里插入图片描述

三、AI大模型各大学习书籍

在这里插入图片描述

四、AI大模型各大场景实战案例

在这里插入图片描述

五、结束语

学习AI大模型是当前科技发展的趋势,它不仅能够为我们提供更多的机会和挑战,还能够让我们更好地理解和应用人工智能技术。通过学习AI大模型,我们可以深入了解深度学习、神经网络等核心概念,并将其应用于自然语言处理、计算机视觉、语音识别等领域。同时,掌握AI大模型还能够为我们的职业发展增添竞争力,成为未来技术领域的领导者。

再者,学习AI大模型也能为我们自己创造更多的价值,提供更多的岗位以及副业创收,让自己的生活更上一层楼。

因此,学习AI大模型是一项有前景且值得投入的时间和精力的重要选择。

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

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

相关文章

Excel如何快速的定位到某一列和快速知道当前列

Excel如何快速的定位到某一列和快速知道当前列 背景快速找到某一列---660列快速知道当前列 背景 由于某一次做excel数据太大需要快速知道某一列是多少列和快速定位到某一列对此写了这个 快速找到某一列—660列 SUBSTITUTE(ADDRESS(1, 660, 4), "1", ""…

实现MySQL的主从复制基础

目录 1 MySQL实现主从复制的原理 1.1 实现主从复制的规则 1.2 如何实现主从复制 2 MySQL 实现主从复制实践 2.1 实验环境 2.2 my.cnf 配置添加 2.2.1 配置MSTER 端配置文件 2.2.2 配置SLAVE 端配置文件 2.2.3 三台MySQL服务器重启服务 2.3 创建用于复制的用户 2.4 保证三台主机…

Android实战:过root检测

在启动这个app时,我们会看到一个提示,表示设备处于root环境。如下图所示: 为了过掉到这个root检测,我们可以通过直接Hook Toast.show()方法,并打印调用堆栈信息来实现定位关键代码。以下是相关的Frida脚本代码&#…

esxi 安装 精简版win10

镜像来源:[【不忘初心】Windows10 22H2 (19045.4780) X64 无更新 纯净[深度精简版]1.27G](https://www.pc528.net/22h2s.html) 提供下载地址:https://www.123pan.cn/s/lYtRVv-Wmuf3?提取码:GaD4 先把下载esd 转成iso安装 把下载的esd 重命名为install…

如何使用ssm实现学生宿舍管理

TOC ssm094学生宿舍管理jsp 绪论 1.1 研究背景 当前社会各行业领域竞争压力非常大,随着当前时代的信息化,科学化发展,让社会各行业领域都争相使用新的信息技术,对行业内的各种相关数据进行科学化,规范化管理。这样…

YOLOv5改进 | 融合改进 | C3融合EffectiveSE-Convolutional【完整代码 + 小白必备】

秋招面试专栏推荐 :深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转 💡💡💡本专栏所有程序均经过测试,可成功执行💡💡💡 专栏目录: 《YOLOv5入门 改…

如何用comate快速生成一个剩菜好帮手

想法 上班后不想吃饭店的饭菜,时长想自己做一些饭菜,买完菜后却经常放到冰箱中,剩下的菜有无法一下子处理,单纯扔掉有些可惜,但是基于冰箱中的剩菜如何能做出一顿像样的饭菜一致困扰着我,查市面上的程序有…

在不修改应用数据源的情况下,如何确保应用程序能够正常访问adg切换后的主库?

在不修改应用数据源的情况下,如何确保应用程序能够正常访问adg切换后的主库? oracle12c rac测试通过: 1.修改原主库的scanip为某个临时ip,新主库的scanip修改为原生产 2.修改新主库的service_names:dgorcl为原生产的…

学习2d直线拟合

直线拟合算法(续:加权最小二乘)_加权拟合直线法-CSDN博客 直线拟合算法_相位拟合直线-CSDN博客 特别感谢博主无私分享 博文中提到的参考资料《机器视觉算法与应用(双语版)》[德] 斯蒂格(Steger C&#x…

GPT-4o语音功能潜在风险分析与技术挑战

引言 近年来,随着大语言模型(LLM)技术的飞速发展,人工智能的能力在语音处理领域也取得了显著进展。OpenAI推出的GPT系列模型正成为人工智能领域的标杆。然而,在最新的GPT-4o版本中,尽管语音功能具备广阔的…

vue3 多文件下载zip压缩包

vue3多文件下载zip文件包 效果图 代码块 在这里插入代码片 <template><div><el-button type"primary" click"downLoadClick">下载文件zip</el-button></div> </template><script setup lang"ts"> i…

Springsecurity 自定义AuthenticationManager

一、认证流程 1、当用户提交了一个他的凭证(用户名、密码) AbstractAuthenticationProcessingFilter 将会创建一个凭证信息&#xff0c;最终&#xff0c;该请求会被UsernamePasswordAuthenticationFilter 拦截将请求中用户名和密码&#xff0c;封装为 Authentication 对象&…

4个学生党必备好用 AI 学术论文写作工具

随着人工智能技术的不断进步&#xff0c;AI论文写作工具已成为研究人员和学生的得力助手。学姐今天将介绍4个市面上广受好评的免费AI论文写作工具&#xff0c;它们能帮助用户高效地完成从论文大纲到最终校对的各个阶段。 一、梅子AI论文 梅子AI提供快速论文撰写功能&#xff…

Datawhale X 李宏毅苹果书 AI夏令营 学习笔记(二)

自适应学习率 我们梯度下降在参数更新上&#xff0c;公式是 W t W t − 1 − η g t &#xff0c; η 是学习率&#xff0c; g t 是梯度 W_tW_{t-1}-\eta g_t&#xff0c;\eta是学习率&#xff0c;g_t是梯度 Wt​Wt−1​−ηgt​&#xff0c;η是学习率&#xff0c;gt​是梯度…

2024软件测试必问的常见面试题1000问!

01、您所熟悉的测试用例设计方法都有哪些&#xff1f;请分别以具体的例子来说明这些方法在测试用例设计工作中的应用。 答&#xff1a;有黑盒和白盒两种测试种类&#xff0c;黑盒有等价类划分法&#xff0c;边界分析法&#xff0c;因果图法和错误猜测法。白盒有逻辑覆盖法&…

数据结构——链式二叉树的实现与分治编程思维(c语言实现)

目录 前言&#xff1a; 1.前置说明 2.链式二叉树的遍历 2.1 前序&#xff0c;中序及后续遍历 2.2 前序遍历实现 2.3 中序遍历实现 2.4 后续遍历实现 3.结点个数以及高度等 3.1 结点个数 3.2 结点高度 3.3 叶子结点的个数 前言&#xff1a; 在之前的学习中&…

从“云、边、端”的统一管理,为传统工厂数字化转型赋能的智慧地产开源了

智慧地产视觉监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒&#xff0c;省去繁琐重复的适配流程&#xff0c;实现芯片、算法、应用的全流程组合&#xff0c;从而大大减少企业级应用约95%的开发成本。 AI是新形势下数…

这些软件测试面试题一定要会,自动化测试面试题(含答案)

1、你会封装自动化测试框架吗&#xff1f; 自动化框架主要的核心框架就是分层PO模式&#xff1a;分别为&#xff1a;基础封装层BasePage&#xff0c;PO页面对象层&#xff0c;TestCase测试用例层。然后再加上日志处理模块&#xff0c;ini配置文件读取模块&#xff0c;unittest…

多模态大模型技术详解(图像分块、特征对齐)

多模态 多模态发展图像预处理自适应图像切割弥补语义损失 视觉编码器视觉文本特征对齐线性映射或MLPCross AttentionPerceiver ResamplerQ-Former&#xff08;Querying Transformer&#xff09;模型结构表示学习 大语言模型 这篇文档主要讲解目前比较流行的缝合式的多模态大模型…

设计模式—装饰者模式

一、什么是装饰者模式 装饰者模式是一种结构型设计模式&#xff0c;它允许你动态地向对象添加新的行为而不影响其原有的行为。它在运行时给对象动态地添加一些额外的职责&#xff0c;通常是在原有的行为基础上&#xff0c;通过装饰器进行一些修饰&#xff0c;实现了更加灵活的代…