Fine-tuning在垂直领域的最佳实践指南

对于Fine-tuning是深度学习和机器学习领域一个特别重要的概念,并且每个企业的实践方式也会有所不同,今天我们就来聊一聊Fine-tuning。

什么是Fine-tuning

Fine-tuning指的是模型微调,通常是指在一个预训练模型的基础上,通过在特定任务的数据集上来进一步的训练调整模型参数,以提高模型在特定任务上的性能。这种方法特别适用于数据量不足以从头开始训练大型模型的情况,可以大大减少模型的训练时间和计算资源。

OpenAI GPT-3.5模型的强化学习微调过程

我们先来看看OpenAI是如何进行大模型微调的,参照下图所示:

图片

图片

它这里分为了3个步骤:

步骤1、收集示范数据并训练监督策略

1.1、数据采集:从prompt数据集中选择一个prompt,例如“向六岁小孩解释什么是强化学习”。

1.2、标注答案:标注者会根据这个prompt给出一个理想的输出,好比给小孩解释“会使用奖励和惩罚来学习”。

1.3、监督学习:将上面收集到的数据用于对GPT-3.5模型进行微调,这一过程使用的是监督学习(Supervised Fine-Tuning, SFT),即模型学习模仿标注者给出的回答。

简单总结一下,这个步骤,主要就是采集数据的过程,针对每条要训练的数据,整理出一问一答,进行模型微调。

步骤1完成后,模型已经经过了一轮训练,但这是一个监督学习训练,其中模型被训练来模仿标注者给出的示例回答。在这个阶段,模型尝试学习如何根据输入的prompt生成正确和合理的输出。这可以被视作是微调过程中的第一步,因为它使用了预标注的数据来教导模型预期的输出格式和内容。

然而,这个训练后的模型通常还不是最终的产品。虽然它可能已经能够生成质量不错的输出,但这些输出可能还没有完全达到部署标准或者还不够适应复杂的现实世界任务。这就是为什么需要后面的步骤来优化和精细调整模型的表现。

步骤2、收集比较数据并训练奖励模型

2.1、采集比较数据:我们对大模型进行提问,对于同一个prompt,模型可能会给出多个不同的输出。

2.2、对输出进行排名:标注者会检查所有的输出,并根据输出质量从好到坏进行排名。(例如,D > C > A > B)。

2.3、训练奖励模型(RM):这个排名信息被用来训练一个奖励模型(Reward Model, RM),该模型学会如何根据标注者的偏好对输出进行评分,用于评价不同的输出并决定哪个是最好的。

总结一下,第二步主要是将第一步训练好的模型生成的输出结果被用来训练一个奖励模型,该奖励模型能够评估和区分不同输出的质量。

步骤3、使用PPO强化学习算法对策略进行优化

3.1、采样新的prompt:从数据集中选择一个新的prompt,比如“写一个关于水獭的故事”。

3.2、初始化PPO模型:使用之前的监督策略,初始化PPO(Proximal Policy Optimization)模型。

3.3、生成输出:PPO策略产生一个输出,例如开始输出回答“关于水獭的故事”。

3.4、奖励模型计算奖励:奖励模型评估这个输出,并给出一个奖励分数。

3.5、PPO优化:根据奖励模型的评分,使用PPO算法更新策略,以生成更好的输出。

总结一下,这三步主要做的事是使用PPO算法通过强化学习来优化一个基于奖励模型的策略,以此提升模型生成输出的质量。这一步骤的核心目标是通过反复迭代来细化模型的行为,使其能够生成更符合人类评价标准的文本。相当于整体又做了一轮强化学习。而所谓的模型微调,本质上就是把每个参数再动一动,一般第二大步骤和第三大步骤会循环几轮。

将上面三步整体总结:

1、用步骤一先训练一个有回答能力的基础模型。然后再基于步骤一的输出结果,训练一个奖励模型,也就是步骤二做的事。

2、对于当前基础模型给定的一个输出,奖励模型会进行评估,分配一个奖励值。PPO算法使用奖励模型提供的奖励值来更新基础模型的策略。如果生成的文本得到了高奖励,那么基础模型在未来会更倾向于产生类似的输出。如果奖励低,模型的策略会调整,以减少类似输出的生成。

3、这个生成-评估-更新的过程是迭代进行的(这个迭代过程也有专业说法,叫RLHF(Reinforcement Learning fromHuman Feedback),人类反馈强化学习)。在每一轮迭代中,模型都会尝试生成更好的文本以获得更高的奖励。随着迭代次数的增加,基础模型在奖励模型的指导下逐渐学习如何改善其输出。这导致生成的文本质量逐步提升,更加符合人类的偏好。

--------------

关于这一部分,有一个非常好的实践大家可以参考学习下,去年火遍全球,叫做Alpaca(羊驼),它就是套用GPT的输出数据作为训练数据,在LLaMA 7b模型上进行fine-tuning,仅用52k数据,训练出效果约等于GPT3.5。并且成本很低,一共不到600美元,其中使用OpenAI生成数据用了500美元,在8个80G A100显卡上训练了3个小时,100美元。包括去年的字节跳动也是也是那么干的,套用GPT数据用于训练自家的大模型,但是被OpenAI发现了把字节跳动账号给封了一阵。还有就是谷歌在Gemini-Pro在中文的训练数据上使用了百度文心一言,都是一样的道理,套用别的模型输出数据来训练自己的模型。

现在模型微调更方便了,比如现在大家可以考虑用Hugging Face训练框架对LLaMA模型进行微调。

--------------

Fine-tuning在垂直领域的最佳实践方式

1、根据你的业务数据,找几个人,花1~2个月,准备一问一答的高质量prompt数据集,比较小的业务规模可以准备几千条甚至上百条即可,因为OpenAI GPT-3.5第一步SFT阶段才准备了13k的prompt数据,第二步RM阶段,准备了33k条,第三步PPO阶段是31k条。

2、选取一个开源的模型,比如国内的ChatGLM或Meta的LLaMA,借助于Hugging Face进行Fine-tuning训练和本地私有化部署,完成第一轮的Fine-tuning。(这里我个人不推荐用一些公有云平台上的Fine-tuning的接口来训练自己的专属模型,虽然方便,但是会存在数据安全隐私问题,即使它一定会声称你的数据不会用于其他地方使用)

3、需要找几个人花时间,针对第一轮Fine-tuning好的基础模型,对输出结果进行标记排序,反复上面第二步和第三步的过程。最后经过几轮训练,参数就会越来约稳定,输出结果就会越来越靠谱。

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

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

相关文章

redis数据库备份,回档,迁移工具使用

相信很多服务器开发者或者运维同学都遇到过这样的场景,比如我要从阿里云的redis集群把数据迁移到另外一个账号下的或者另外一个云服务商的redis集群,或者单机,或者哨兵模式redis实例,那么这种情况下我推荐给大家一款非常好用的工具,可以无缝的从A集群/单机/哨兵/已有的数据…

安装虚拟环境

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 Flask依赖两个外部库:Werkzeug和Jinja2。Werkzeug是一个WSGI(在Web应用和多种服务器之间的标准 Python 接口)工具…

频率和时间单位换算表

1. 频率单位和计数单位的换算关系 1.1 频率换算关系 1 MHz 等于 10^6 Hz 1.2 常用计数单位及其换算关系 1000 K 1 M 1000 M 1 G 分别表示: K (千) 10^3 M (兆) 10^6 G (吉) 10^9 2. 时间与频率的关系 频率(Frequency)和周期&#xff0…

Pytest和Unitest框架对比

在学到自动化的时候,很多同学都遇到了Pytest和Unitest框架,有的人是两个都学,但是学的不精只是知道分别怎么用.不了解两个区别是什么.有的是犹豫到底要学习那个框架.其实要做好自动化测试,是有必要了解不同框架之间的差异化的. Pytest 特点: Pytest采用了更简洁、更灵活的语法…

使用Let‘s Encrypt 申请通配符证书

为什么不使用阿里云/腾讯云等公有云厂商提供的免费证书? 上篇介绍了从阿里云上面申请免费证书,有效期一年 为网站配置https证书 公有云提供的证书不支持通配符,只支持某个确定的解析。 不管是二级域名还是三级域名,只要是具体的确定的地址,都…

记MySQL事务+消息队列引起的问题

问题描述: 先说一下流程:后端保存前端提交的图表信息,然后发送异步消息到消息队列,由下游服务去处理图表信息。 部署项目到服务器,验证项目功能的时候,出现了以下错误:数据库存在数据。下游服…

【服务器07】之【GitHub项目管理】及【Unity异步加载场景】

登录GitHub官网 GitHub: Let’s build from here GitHub 注册账号 登录账号 输入一个自定义名字,点击创建存储库就可以了 现在我们下载Fork Fork - a fast and friendly git client for Mac and Windows (git-fork.com) 免费的 下载完成之后点击File下的Clone …

黑苹果EFI详细配置说明

先上网址: https://dortania.github.io/OpenCore-Install-Guide/installer-guide/opencore-efi.html 1: 了解作用 ACPI作用: 总结: ACPI是UEFI引导方式和操作系统之间的硬件抽象接口,概述了硬件设备,如 USB 控制器、CPU 线程、嵌入式控制器、系统时钟等 硬件设备识别和驱动:…

Nacos 2.x 系列【15】数据源插件支持达梦、Oracel、PostgreSQL......

文章目录 1. 概述2. 持久层机制2.1 固定语句2.2 数据源插件 3. 案例演示3.1 编译已实现插件3.2 自定义插件3.3 数据库初始化3.4 插件引入3.4.1 方式一:引入到源码3.4.2 方式二:插件加载目录 3.5 修改配置3.6 测试 1. 概述 在实际项目开发中,…

设计模式导读:建造者模式的细腻之处与编程技巧

笔者的碎碎念 其实之前有写过建造者模式的文章,但是感觉其实写的不怎么样,而且自己也理解的一般,但是阅读一些框架源码发现,这些模式真的蛮重要的,很多框架例如OkHttp,Retrofit等等都大量使用了建造者模式…

将知乎专栏文章转换为 Markdown 文件保存到本地

一、参考内容 参考知乎文章代码 | 将知乎专栏文章转换为 Markdown 文件保存到本地,利用代码为GitHub:https://github.com/chenluda/zhihu-download。 二、步骤 1.首先安装包flask、flask-cors、markdownify 2. 运行app.py 3.在浏览器中打开链接&…

了解请求参数与响应参数的区别:初学者指南

在 Web 的开发领域,无论你是前端开发还是后端开发人员,把握请求与响应参数的核心差异是极其重要的。这些参数在客户端和服务器之间的互动中扮演着关键角色。 请求参数的定义及类别 定义 当客户端向服务器提交信息时所使用的数据被称为请求参数。这些参…

深入理解TCP协议:工作原理、报文结构及应用场景

TCP协议详解 TCP(Transmission Control Protocol,传输控制协议)是因特网协议套件中最重要的协议之一。它为应用程序提供了可靠、面向连接的通信服务。TCP协议确保数据包按顺序到达,并且没有丢失或重复。本文将详细介绍TCP协议的工…

免费ddns工具,快解析DNS解析使用教程

DDNS(Dynamic Domain Name Server),中文叫动态域名解析,主要用于没有固定公网ip的网络环境下,使用一个固定的域名,解析动态变化的ip地址,达到远程访问的目的。 众所周知,目前公网ip资源非常紧缺…

Springboot多模块项目从0构建打包运行

今天复习了一下Springboot的多模块的构建,其实一直以来都对单体项目使用多模块感到不太理解,不知道到底有什么样的优势,目前切身体会到的优势就是确实可以让依赖的划分更加清晰(每个模块下的pom文件只引入该模块需要的依赖&#x…

基于imx6ull开发板 移植opencv4.7.0

一、概述 本章节是针对opencv-4.7.0移植到Linux系统,运行在正点原子-I.MX6U ALPHA开发板 上,详细的移植流程如下。 二、环境要求 2.1 硬件环境 正点原子-I.MX6U ALPHA开发板虚拟机:VMware 2.2 软件环境 Ubuntu系统要求:20.0…

常用算法及参考算法 (1)累加 (2)累乘 (3)素数 (4)最大公约数 (5)最值问题 (6)迭代法

常用算法及参考算法 &#xff08;1&#xff09;累加 &#xff08;2&#xff09;累乘 &#xff08;3&#xff09;素数 &#xff08;4&#xff09;最大公约数 &#xff08;5&#xff09;最值问题 &#xff08;6&#xff09;迭代法 1. 累加 #include <stdio.h>int main() {…

物理层(一)

第2章 物理层 2.1 通信基础 2.1.1 基本概念 1、数据、信号与码元 通信的目的是传输信息&#xff0c;如文字、图像和视频等。数据是指传送信息的实体。信号则是数据的电气或电磁表现&#xff0c;是数据在传输过程中的存在形式。数据和信号都有模拟或数字之分:①模拟数据(或模…

Day15 —— 大语言模型简介

大语言模型简介 大语言模型基本概述什么是大语言模型主要应用领域大语言模型的关键技术大语言模型的应用场景 NLP什么是NLPNLP的主要研究方向word2vecword2vec介绍word2vec的两种模型 全连接神经网络神经网络结构神经网络的激活函数解决神经网络过拟合问题的方法前向传播与反向…

【数据结构与算法】详解循环队列:基于数组实现高效存储与访问

&#x1f493; 博客主页&#xff1a;倔强的石头的CSDN主页 &#x1f4dd;Gitee主页&#xff1a;倔强的石头的gitee主页 ⏩ 文章专栏&#xff1a;《数据结构与算法》 期待您的关注 ​ 目录 一、引言 &#x1f343;队列的概念 &#x1f343;循环队列的概念 &#x1f343;为什…