微调入门篇:大模型微调的理论学习

news2024/11/17 23:45:00

1、为什么大模型微调

之前在《大模型这块蛋糕,想吃吗》介绍了普通人如何搭上大模型这块列车, 其中有一个就是模型微调,这个也是未来很多IT公司需要发力的方向,以及在《垂直领域大模型的应用更亲民》中论述了为什么微调适合大家,以及微调有什么价值? 作为小程序猿在开始进行微调实操之前,我们先了解一下微调大模型有什么方法和技术吗?

2、大模型微调的方式

(1)全量微调(Full Fine-tuning):这个其实算不上微调,算是全新训练,但是大部分微调框架都支持这种方式需要较大的计算资源和时间,但可以获得更好的性能.

(2)增加额外参数

(3)选取一部分参数调优

(4)引入重参数优化

3、大模型微调的技术

e180ebaf51c1fd7cb7887d0320ac0522.jpeg

由上面微调的方式的道路,引发的微调技术也是很多的

(1)《BitFit: BitFit: Simple Parameter-efficient Fine-tuning or Transformer-based Masked Language-models》训练时只更新bias的参数或者部分bias参数

(2)《Prefix Tuning: Prefix-Tuning: Optimizing Continuous Prompts for Generation》在输入token之前构造一段任务相关的virtual tokens作为Prefix,然后训练的时候只更新Prefix部分的参数,而PLM中的其他部分参数固定。

(3)《Prompt Tuning: The Power of Scale for Parameter-Efficient Prompt Tuning》 该方法可以看作是Prefix Tuning的简化版本,它给每个任务定义了自己的Prompt,然后拼接到数据上作为输入,但只在输入层加入prompt tokens,并且不需要加入 MLP 进行调整来解决难训练的问题。

(4)《P-Tuning: GPT Understands, Too 》该方法将Prompt转换为可以学习的Embedding层,并用MLP+LSTM的方式来对Prompt Embedding进行一层处理。相比Prefix Tuning,P-Tuning加入的可微的virtual token,但仅限于输入层,没有在每一层都加;另外,virtual token的位置也不一定是前缀,插入的位置是可选的。这里的出发点实际是把传统人工设计模版中的真实token替换成可微的virtual token

(5)《P-Tuning v2: P-Tuning v2: Prompt Tuning Can Be Comparable to Fine-tuning Universally Across Scales and Tasks》该方法在每一层都加入了Prompts tokens作为输入,而不是仅仅加在输入层

(6)《Adapter Tuning :Parameter-Efficient Transfer Learning for NLP》,该方法设计了Adapter结构,并将其嵌入Transformer的结构里面,针对每一个Transformer层,增加了两个Adapter结构(分别是多头注意力的投影之后和第二个feed-forward层之后),在训练时,固定住原来预训练模型的参数不变,只对新增的 Adapter 结构和 Layer Norm 层进行微调,从而保证了训练的高效性。

(7)《LoRA: LOW-RANK ADAPTATION OF LARGE LANGUAGE MODELS》,该方法的核心思想就是通过低秩分解来模拟参数的改变量,从而以极小的参数量来实现大模型的间接训练.

........

小结:

(1)增加额外参数,如:Prefix Tuning、Prompt Tuning、Adapter Tuning及其变体。

(2)选取一部分参数更新,如:BitFit。

(3)引入重参数化,如:LoRA、AdaLoRA、QLoRA。

(4)混合高效微调,如:MAM Adapter、UniPELT

那怎么选择微调技术呢?

70a4700204dd0c6652e9ce3a6ce9540b.jpeg

(1)总的来说,像P-Tuning v2、LoRA等都是综合评估很不错的高效微调技术。如果显存资源有限可以考虑QLoRA;如果只是解决一些简单任务场景,可以考虑P-Tuning、Prompt Tuning也行。

(2)Prompt Tuning、Prefix Tuning、LoRA等少部分微调技术针对不同参数规模的模型进行过评估,同时,这几种方式也是目前应用比较多的高效微调方法.

4、微调框架

要参考论文实现那些技术吗?当然不用,现在开源的能力越来越强,所以计算机发展越来越快,根本学不过来:

(1)DeepSpeed Chat : 微软开源,提供了一键式RLHF训练框架,奖励模型微调和基于人类反馈的强化学习(RLHF),此外还实现了DeepSpeed HE,统一的高效混合引擎,达到训练和推理引擎之间的过渡是无缝的。

(2)PEFT:PEFT 是 Huggingface 开源的一个参数高效微调库,它提供了最新的参数高效微调技术,并且可以与 Transformers 和 Accelerate 进行无缝集成。

小结:

一般来说现在大家基本选择peft框架进行微调.

5、PEFT框架支持微调技术

不同任务下支持模型和技术都有所差别:

PERF支持微调技术有:

(1)LoRA

(2)Prefix Tuning

(3)P-Tuning

(4)Prompt Tuning

(5)AdaLoRA:Adaptive Budget Allocation for Parameter-Efficient Fine-Tuning

(6)IA3:Infused Adapter by Inhibiting and Amplifying Inner Activations

..... 还在新增

6、当前高效微调技术存在的一些问题

(1)缺乏模型大小的考虑

(2)缺乏测量基准和评价标准

(3)代码实现可读性差

7、总结

立一下flag,鼓励自己学下去,了解完微调技术和微调框架,接下来就是实践微调

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

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

相关文章

C#,打印漂亮的贝尔三角形(Bell Triangle)的源程序

以贝尔数为基础,参考杨辉三角形,也可以生成贝尔三角形(Bell triangle),也称为艾特肯阵列(Aitkens Array),皮埃斯三角形(Peirce Triangle)。 贝尔三角形的构造…

常用抓包软件集合(Fiddler、Charles)

1. Fiddler 介绍:Fiddler是一个免费的HTTP和HTTPS调试工具,支持Windows平台。它可以捕获HTTP和HTTPS流量,并提供了丰富的调试和分析功能。优点:易于安装、易于使用、支持多种扩展、可以提高开发效率。缺点:只支持Wind…

Linux内核源码

记得看目录哦! 1. 为什么要阅读Linux内核2. Linux0.01内核源码3. 阅读linux内核源码技巧4. linux升级内核5. linux的备份和恢复5.1 安装dump和restore5.2 使用dump完成备份5.3 使用restore完成恢复 1. 为什么要阅读Linux内核 2. Linux0.01内核源码 3. 阅读linux内核…

dvwa靶场xss储存型

xss储存型 xxs储存型lowmessage框插入恶意代码name栏插入恶意代码 medium绕过方法 high xxs储存型 攻击者事先将恶意代码上传或储存到漏洞服务器中,只要受害者浏览包含此恶意代码的页面就会执行恶意代码。产生层面:后端漏洞特征:持久性的、前端执行、储存在后端数据…

刨析数据结构(一)

🌈个人主页:小田爱学编程 🔥 系列专栏:数据结构————"带你无脑刨析" 🏆🏆关注博主,随时获取更多关于数据结构的优质内容!🏆🏆 😀欢迎…

【百度Apollo】轨迹绘制:探索路径规划和可视化技术的应用

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《linux深造日志》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! ⛳️ 推荐 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下…

element -table,多行或列合并

需求:后端返回的表格数据,如果某列值一样,前端表格样式需要合并他们,需要合并的列的行数未知(所以需要有数据后遍历后端数据对需要合并的属性进行计数)即动态遍历表格合并 效果 - 重点方法;ta…

html+css+js 我的学校网页设计与制作实例(6个页面)

一、作品介绍 HTMLCSSJS网页设计与制作,我的学校网页设计与制作实例, 本实例适合于初学HTMLCSSJS的同学。该案例里面有divcss的样式布局设置,这个实例比较全面,有一级页、二级页、详情页、输入表单等,共6个页面。本文…

编写python脚本调用ordinals以及BRC20的接口

初始版本 #!/usr/bin/python3from flask import Flask, request, jsonify import subprocess import json import osapp Flask(__name__)ord_cmd ["/root/ord/target/release/ord", "--cookie-file/data/btcregtest/data/regtest/.cookie", "--rpc…

C#使用RabbitMQ-4_路由模式(直连交换机)

简介 RabbitMQ中的路由模式是一种根据Routing Key有条件地将消息筛选后发送给消费者的模式。在路由模式中,生产者向交换机发送消息时,会指定一个Routing Key。交换机接收生产者的消息后,根据消息的Routing Key将其路由到与Routing Key完全匹…

基于腾讯云自然语言处理 NLP服务实现文本情感分析

文章目录 一、前言二、NLP 服务简介三、Python 调用腾讯云 NLP 服务 SDK 构建情感分析处理3.1 开通腾讯云 NLP 服务3.2 创建的腾讯云持久证书(如果已创建请跳过)3.2 在腾讯云服务器中安装 Git 工具以及 Python 环境3.3 安装 qcloudapi-sdk-python3.4 部署…

Linux 文件IO

目录 linux下的文件分类: 文件描述符原理:(底层原理,可跳过) 虚拟文件系统: 内存中的inode与磁盘中的inode open函数 函数原型: 形参列表: 代码: close函数 er…

CTF-WEB的入门真题讲解

EzLogin 第一眼看到这个题目我想着用SQL注入 但是我们先看看具体的情况 我们随便输入admin和密码发现他提升密码不正确 我们查看源代码 发现有二个不一样的第一个是base64 意思I hava no sql 第二个可以看出来是16进制转化为weak通过发现是个弱口令 canyouaccess 如果…

计算机网络-调度算法-2(时间片轮转 优先级调度算法 多级反馈队列调度算法 多级队列调度算法)

文章目录 总览时间片轮转时间片大小为2时间片大小为5若按照先来先服务算法 优先级调度算法例题( 非抢占式优先级调度算法)例题( 抢占式优先级调度算法)补充 思考多级反馈队列调度算法例题 小结多级队列调度算法 总览 时间片轮转 …

排序链表---归并--链表OJ

https://leetcode.cn/problems/sort-list/submissions/499363940/?envTypestudy-plan-v2&envIdtop-100-liked 这里我们直接进阶,用时间复杂度O(nlogn),空间复杂度O(1),来解决。 对于归并,如果自上而下的话,空间复…

sqlmap的使用

2024.1.31 sqlmap支持五种不同的注入模式&#xff1a; 1、布尔盲注2、时间盲注3、报错注入4、联合注入5、堆叠注入 检测注入 GET请求的基本格式 ​python sqlmap.py -u <测试网址> Ps:不知道为什么我的sqlmap使用时前面要加python&#xff0c;而大部分其他教程没提到…

3d模型导入草图大师模型变乱什么原因怎么解决?---模大狮模型网

3D模型在导入草图大师后出现混乱可能有多种原因&#xff0c;以下是一些可能的原因和解决方法&#xff1a; 模型尺寸问题&#xff1a;如果3D模型的尺寸在导入草图大师时与画布尺寸不匹配&#xff0c;可能导致模型混乱。解决方法是在3D建模软件中调整模型的尺寸&#xff0c;使其适…

五大架构风格之一:数据流风格

数据流风格详细介绍 系统架构数据流风格是一种软件体系结构风格&#xff0c;它强调了系统内部不同部分之间的数据流动。这种风格侧重于描述系统中的数据处理过程&#xff0c;以及数据是如何从一个组件传递到另一个组件的。以下是系统架构数据流风格的详细介绍&#xff1a; 1 基…

idea激活教程(2020.1.4及以上版本)

首先点击试用版本&#xff0c;进入软件&#xff0c;再依次进行一下操作 一、在idea的Plugins配置中添加Z大的插件市场 上图中加载出来的插件是默认的&#xff0c;大家不用在意&#xff0c;直接点击“Manage Plugin Repositoryies…”打开配置弹窗 点击号&#xff0c;添加一行…

【C/C++】C/C++编程——整型(一)

整型 C 中的整型是基本的数据类型之一&#xff0c;用于表示没有小数部分的数。这包括正整数、负整数以及零。C 提供了多种整型&#xff0c;以适应不同大小的数值需求和优化内存使用。 整型的种类 C 中的整型可以根据其大小&#xff08;即占用的字节数&#xff09;和能够表示…