4. ⼤模型微调方法

到底有哪些微调⽅法呢?

  • 第⼀类⽅法:借助OpenAI提供的在线微调⼯具进⾏微调;
  • 第⼆类⽅法:借助开源微调框架进⾏微调;

1. OpenAI在线微调⼯具

网址:https://platform.openai.com/docs/guides/fine-tuning/common-use-cases

  • OpenAI提供了GPT在线⼤模型的微调API:Fine-tuning,⽤于在线微调在线⼤模型;
  • ⽬前⽀持A、B、C、D四⼤模型在线微调;根据格式要求在线提交数据集并⽀付算⼒费⽤,即可在线进⾏模型微调;
  • 微调后会⽣成单独模型的API供使⽤;
  • ⼀个模型可以多次微调;OpenAI在线微调是⿊箱算法;

OpenAI提供的“傻⽠式”微调流程:
在这里插入图片描述

  • 按照格式要求,准备并上传数据集;
  • 排队、⽀付费⽤并等待微调模型训练完成;
  • 赋予微调模型API单独编号,调⽤API即可使⽤;
from openai import OpenAI
client = OpenAI()

client.fine_tuning.jobs.create(
  training_file="file-abc123", 
  model="gpt-3.5-turbo"
)

关于OPENAI的在线微调需要重点考虑以下几点

  • 成本:在线微调可能会产生较高的成本,因为需要大量的计算资源来训练和调整模型,所以如果数据量大的话会支付比较高的成本。
  • 数据隐私和安全性:用户需要将数据上传到OpenAI的服务器进行微调,这可能引发数据隐私和安全的担忧,这一般是企业最担心的问题。
  • 当然还需要注意的是,想要使用OpenAI是需要科学上网的。

2. 开源微调框架

深度学习微调⽅法⾮常多,主流⽅法包括LoRA、Prefix Tuning、P- Tuning、Promt Tuning、AdaLoRA等;
⽬前这些⽅法的实现均已集成⾄Hugging Face项⽬的库中,我们可以通过安装和调⽤Hugging Face的PEFT(⾼效微调)库,来快速使⽤这些⽅法;
在这里插入图片描述

  • Hugging Face 是⼀家专注于⾃然语⾔处理(NLP)技术的公司,同时也开发并维护了多个⼴受欢迎的⾃然语⾔处理的开源库和⼯具,如Transformers 库、ChatGLM-6B库等;
  • ⾼效微调,State-of-the-art Parameter-Efficient Fine-Tuning (SOTA PEFT),与之对应的更早期的简单的全量参数训练微调的⽅法(Fine- Tuning),⾼效微调则是⼀类算⼒功耗⽐更⾼的⽅法

2.1 ⾼效微调⽅法⼀:LoRA

LoRA:LOW-RANK ADAPTATION OF LARGE LANGUAGE MODELS(2021)
基于低阶⾃适应的⼤语⾔模型微调⽅法

Github地址: https://github.com/microsoft/LoRA
论⽂地址: https://arxiv.org/abs/2106.09685

  • 原理简述:基于⼤模型的内在低秩特性,增加旁路矩阵来模拟全参数微调;
  • LoRA最早由微软研究院发布的⼀项微调技术;
  • 简⽽⾔之,是通过修改模型结构进⾏微调,是⼀种四两拨千⽄的微调⽅法,是⽬前最通⽤、同时也是效果最好的微调⽅法之⼀;
  • 后面实战将详细介绍LoRA微调实践⽅法;

在这里插入图片描述

概念辨析:⼤模型微调LoRA与通信技术LoRa,⼆者相差⼀个字⺟的⼤⼩写,是完全两种不同的技术;
LoRA除了可以⽤于微调⼤语⾔模型(LLM)外,⽬前还有⼀个⾮常⽕爆的应⽤场景:围绕diffusion models(扩散模型)进⾏微调,并在图⽚⽣成任务中表现惊艳

2.2 ⾼效微调⽅法⼆:Prefix Tuning

Prefix-Tuning: Optimizing Continuous Prompts for Generation(2021)
基于提示词前缀优化的微调⽅法
论⽂地址: https://aclanthology.org/2021.acl-long.353/

  • 来源于斯坦福⼤学的⼀种⾼效微调⽅法;
  • 原理简述:在原始模型基础上,增加⼀个可被训练的Embedding层,⽤于给提示词增加前缀,从⽽让模型更好的理解提示词意图,并在训练过程中不断优化这些参数;
  • Prefix Tuning既能够在模型结构上增加⼀些新的灵活性,⼜能够在模型使⽤上提供⼀种⾃动的、能够改进模型表现的提示机制;
    在这里插入图片描述

2.3 ⾼效微调⽅法三:Prompt Tuning

The Power of Scale for Parameter-Efficient Prompt Tuning (2021)
论⽂地址: https://arxiv.org/abs/2104.08691

  • 由⾕歌提出的⼀种轻量级的优化⽅法;
  • 原理简述:该⽅法相当于是Prefix Tuning的简化版本,即⽆需调整模型参数,⽽是在已有的参数中,选择⼀部分参数作为可学习参数,⽤于创建每个Prompt的前缀,从⽽帮助模型更好地理解和处理特定的任务;
  • 不同于Prefix⽅法,Prompt Tuning训练得到的前缀是具备可解释性的,我们可以通过查看这些前缀,来查看模型是如何帮我们优化prompt的;
  • 该⽅法在参数规模⾮常⼤的模型微调时效果很好,当参数规模达到100亿时和全量微调效果⼀致;
    在这里插入图片描述

2.4 ⾼效微调⽅法四:P-Tuning v2

P-Tuning v2: Prompt Tuning Can Be Comparable to Fine-tuning Universally Across Scales and Tasks(2022)

GitHub地址:https://github.com/THUDM/P-tuning-v2
论⽂地址: https://aclanthology.org/2021.acl-long.353/
ChatGLM-6B+P-Tuning微调项⽬地址: https://github.com/THUDM/ChatGLM-6B/blob/main/ptuning/README.md

  • 来源于清华⼤学团队提出的⾼效微调⽅法;
  • 原理简述:可以理解为Prefix tuning的改进版本,即P-Tuning v2不仅在输⼊层添加了连续的prompts(可被训练的Embedding层),⽽且还在预训练模型的每⼀层都添加了连续的prompts;
  • 这种深度的prompt tuning增加了连续prompts的容量,出于某些原因,PTuning v2会⾮常适合GLM这种双向预训练⼤模型微调;
    在这里插入图片描述

2.5 基于强化学习的进阶微调⽅法

RLHF:Reinforcement Learning from Human Feedback
基于⼈⼯反馈机制的强化学习⽅法

  • 最早由OpenAI研究团队提出,并⽤于训练OpenAI的InstructGPT模型;
  • 效果惊艳:根据OpenAI相关论⽂说明,基于RLHF训练的InstructGPT模型,在仅拥有1.3B参数量的情况下,输出效果已经开源和GPT-3 175B模型媲美。这充分说明了RLHF⽅法的实践效果;
  • ⽬前Hugging Face、PyTorch和微软研究院都有提供RLHF实现⽅法,其中微软研究院的DeepSpeed Chat是⽬前最⾼效稳定的端到端RFHL训练系统;

项⽬地址: https://github.com/microsoft/DeepSpeed/
在这里插入图片描述

  • 步骤1:监督微调(SFT) —— 使⽤精选的⼈类回答来微调预训练的语⾔模型以应对各种查询;
  • 步骤2:奖励模型微调 —— 使⽤⼀个包含⼈类对同⼀查询的多个答案打分的数据集来训练⼀个独⽴的(通常⽐ SFT ⼩的)奖励模型(RW);
  • 步骤3:RLHF 训练 —— 利⽤ Proximal Policy Optimization(PPO)算法,根据 RW 模型的奖励反馈进⼀步微调 SFT 模型。

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

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

相关文章

无人机遥感技术应用分析,无人机遥感系统测绘技术详解

由于无人机具有机动快速、使用成本低、维护操作简单等技术特点,因此被作为一种理想的飞行平台广泛应用于军事和民用各个领域。尤其是进入二十一世纪以后,许多国家将无人机系统的研究、开发、应用置于优先发展的地位,体积小、重量轻、探测精度高的新型传感器的不断问世,也使无人…

让Python遇上Office--从编程入门到自动化办公实践

最近仔细的学习了这本《让Python遇上Office》的书,同时把我的学习进程与心得录制了同步视频。 到今天终于把全部90集完成,并且上传到下面的视频平台了,欢迎大家观看并指正! 西瓜视频:https://www.ixigua.com/7300628…

c语言中的隐式类型转换

数据类型转化 我们在实际编程中,不管你是有意的还是无意的,有时候都会让两个不同类型的数据参与运算,编译器为了能够生成CPU可以正常 执行的指令,往往会对数据做类型转换,将两个不同类型的数据转换成同一种数据类型。…

Popper.js:ElementUI 中采用弹出,提示框库,好用的没朋友。

Hi,我贝格前端工场,继续介绍经典的js库,ElementUI 中Tooltip、Select、Cascader、TimePicker等组件中怎么把提示框定位到目标元素的,是用 Popperjs 来实现。 一、Popper.js是什么? Popper.js是一个用于创建弹出式组件…

LLM之LangChain(七)| 使用LangChain,LangSmith实现Prompt工程ToT

如下图所示,LLM仍然是自治代理的backbone,可以通过给LLM增加以下模块来增强LLM功能: Prompter AgentChecker ModuleMemory moduleToT controller 当解决具体问题时,这些模块与LLM进行多轮对话。这是基于LLM的自治代理的典型情况,…

回归预测模型:MATLAB多项式回归

1. 多项式回归模型的基本原理 多项式回归是线性回归的一种扩展,用于分析自变量 X X X与因变量 Y Y Y之间的非线性关系。与简单的线性回归模型不同,多项式回归模型通过引入自变量的高次项来增加模型的复杂度,从而能够拟合数据中的非线性模式。…

卫星通讯领域FPGA关注技术:算法和图像方面(3)

最近关注的公众号提到了从事移动通信、卫星通讯等领域的FPGA、ASIC、信号处理算法等工程师可能需要关注的技术,有通感融合、RNSS授时、惯导,以下做了一些基础的调研: 1 通感融合 1)来自博鳌亚洲论坛创新报告2023:通感算融合已成…

Linux操作系统基础(三):虚拟机与Linux系统安装

文章目录 虚拟机与Linux系统安装 一、系统的安装方式 二、虚拟机概念 三、虚拟机的安装 四、Linux系统安装 1、解压人工智能虚拟机 2、找到解压目录中的node1.vmx 3、启动操作系统 虚拟机与Linux系统安装 一、系统的安装方式 Linux操作系统也有两种安装方式&#xf…

算法学习——LeetCode力扣栈与队列篇1

算法学习——LeetCode力扣栈与队列篇1 232. 用栈实现队列 232. 用栈实现队列 - 力扣(LeetCode) 描述 请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty): 实现 MyQu…

动态水印怎么加 怎么去除动态水印 视频剪辑软件 会声会影安激活序列号 会声会影怎么剪辑视频

为了防止白嫖或者增加美观效果,视频制作者可能会采用动态水印的方式,让其他人难以盗取视频使用。动态水印的添加,需要应用到运动路径功能。接下来,本文会教大家动态水印怎么加,怎么去除动态水印的相关内容。感兴趣的小…

解析十六进制雷达数据格式:解析雷达数据长度。

以Cat62格式雷达数据为例,十六进制雷达数据部分代码: 3e0120bf7da4ffee0085 雷达数据长度使用4个字符(2个字节)标识,在这里是“0120”,转换为十进制数为288。 雷达数据长度父类: base_length_…

人工智能如何彻底改变身份欺诈

据 AuthenticID 称,近一半的企业报告合成身份欺诈有所增加,而生物识别欺骗和伪造 ID 欺诈尝试也有所增加。 在当今的数字化存在中,消费者和企业都面临着新的挑战,从考虑数字身份的影响到应对生成人工智能等新工具的使用和流行。与…

最高的牛(C++)

有 N头牛站成一行,被编队为 1、2、3…N每头牛的身高都为整数。 当且仅当两头牛中间的牛身高都比它们矮时,两头牛方可看到对方。 现在,我们只知道其中最高的牛是第 P 头,它的身高是 H ,剩余牛的身高未知。 但是&#xf…

css2复合选择器

一.后代(包含)选择器(一样的标签可以用class命名以分别) 空格表示 全部后代 应用 二.子类选择器 >表示 只要子不要孙 应用 三.并集选择器 ,表示 代表和 一般竖着写 应用 四.伪类选择器(包括伪链接…

VR和AR傻傻分不清,一句话给你讲明白。

不说废话,直接说结论,虚拟现实(Virtual Reality,VR)和增强现实(Augmented Reality,AR)。如果现实是A,虚拟是B,那么VRB,ARAB,就这简单&…

基于javaEE的ssm仓库管理系统

仓库管理系统的重中之重是进销存分析这一板块,在这一板块中,顾名思义能够查询到近期的进货记录,包括每日的进货单据,单品推移(即某一商品的库存变化),方便我们核对库存差异。同时也需要查询到每日的销售数据&#xff0…

hexo部署到gitee(码云)

引言 Hexo 是一个基于Node.js的静态博客框架,而 Gitee(也被称为码云)是一个国内的代码托管平台,支持 Git 版本控制系统,与 GitHub 类似。将 Hexo 部署到 Gitee Pages 可以让你的博客受益于 Gitee 的国内服务器&#xf…

ClickHouse--02--安装

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 安装官网 ;[https://clickhouse.com/docs/zh/getting-started/install](https://clickhouse.com/docs/zh/getting-started/install)![在这里插入图片描述…

动态内存分配函数 | free为什么只传入一个指针就能正确释放

文章目录 1.Linux内存分布图2.C标准库中动态内存分配函数3.动态内存分配函数的常见错误 1.Linux内存分布图 在程序设计当中,可以定义全局变量也可以定以局部变量,分别也是在全局区、栈区开辟,那么这些区域都不有用我们动手管理,但…

【第六天】c++虚函数多态

一、多态的概述 多态按字面的意思就是多种形态。当类之间存在层次结构,并且类之间是通过继承关联(父类与子类)时,就会用到多态。 C 多态意味着调用成员函数时,会根据调用函数的对象的类型来执行不同的函数。 静态多态&…