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

news2024/11/20 14:30:10

对于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好的基础模型,对输出结果进行标记排序,反复上面第二步和第三步的过程。最后经过几轮训练,参数就会越来约稳定,输出结果就会越来越靠谱。

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

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

相关文章

【剖析】为什么说RBF神经网络的误差为0

本文来自《老饼讲解-BP神经网络》https://www.bbbdata.com/ 机器学习中的模型非常的多,但如果要问有没有这样的一个模型,它的训练误差为0,那么就非RBF神经网络莫属了!下面我们来聊聊,为什么RBF神经网络的训练误差为0。…

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

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

数据分析的线上云端数据库搭建及Excel和Tableau连接

数据分析的线上云端数据库搭建及Excel和Tableau连接 SQL基础知识 线上SQL训练: SQlZOO: https://www.sqlzoo.net/wiki/SQL_Tutorial 牛客网SQL真题:https://www.nowcoder.com/ta/sql select,from,where, order by, limit, group by, having, substr(),…

HTML 之<title> 标签

一.HTML <title> 标签 二.实例 为您的 HTML 文档定义标题&#xff1a; <html> <head> <meta charset"utf-8"> <title>文档标题</title> </head> <body> 文档内容...... </body> </html> 尝试一下 三…

[问题记录]Qt QGraphicsItem 移动时出现残影

目录 1.问题现象 2.问题原因 3.修改方案 1.问题现象 自定义 QGraphicsItem 时&#xff0c;绘制rect&#xff0c;对象移动时出现残影。 2.问题原因 直接原因是view未刷新的问题&#xff0c;所以网上有人使用方案 setViewportUpdateMode(QGraphicsView::FullViewportUpdate…

周末设计高端企业_集团官网主题Discuz模板

风格名称: 周末设计_高端企业_集团官网 适用版本: Discuz! X3.0、X3.1、X3.2、X3.3、F1.0 风格编码: 使用语言包结构&#xff0c;适合全部编码 周末设计高端企业_集团官网主题Discuz模板

黑苹果EFI详细配置说明

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

html--好看的手机充值单页

<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><title>线上充值-首页</title><meta content"widthdevice-width,initial-scale1.0,maximum-scale1.0,user-scalable0" name"viewport&…

【树形dp 换根法 BFS】2581. 统计可能的树根数目

本文涉及知识点 CBFS算法 动态规划汇总 图论知识汇总 树形dp 换根法 BFS LeetCode 2581. 统计可能的树根数目 Alice 有一棵 n 个节点的树&#xff0c;节点编号为 0 到 n - 1 。树用一个长度为 n - 1 的二维整数数组 edges 表示&#xff0c;其中 edges[i] [ai, bi] &#xf…

2.树莓派4b+ubuntu18.04(ros版本melodic)+arduino mega自制两轮差速小车,实现建图导航功能

这篇文章介绍arduino使用和安装arduino_bridge 将arduino与树莓派连接 查看arduino的端口号&#xff0c;我们这里查看到的时ttyUSB0 ll /dev/ttyUSB*将当前用户添加进dialout组 sudo usermod -a -G dialout your_user_name然后重启树莓派&#xff0c;然后才能生效 然后如果你…

【ajax核心02】底层原理-Promise对象

目录 一&#xff1a;promise对象是什么 二&#xff1a;语法&#xff08;Promise使用步骤&#xff09; 三&#xff1a;Promise-三种状态 一&#xff1a;promise对象是什么 Promise 对象代表异步操作最终的完成&#xff08;或失败&#xff09;以及其结果值。 即Promise对象是…

安卓逆向经典案例—H5appXX运维

H5app的class不一定是android.webkit.WebView 也可能是腾讯X5内核或者是uc webview 殊途同归也要去hook webview的系统函数和可调式方法setWebContentsDebuggingEnabled。突破sign算法&#xff0c;输出协议和加密算法的作用是什么&#xff1f;分析c-sign值 在加密的位置下断点 …

STM32单片机实现PWR多种模式

文章目录 1. PWR多种模式 2. 修改主频 2.1 main.c 3. 睡眠模式串口发送接收 3.1 Serial.c 3.2 Serial.h 3.3 main.c 4. 停止模式对射式红外传感器计次 4.1 CountSensor.c 4.2 CountSensor.h 4.3 main.c 5. 待机模式实时时钟 5.1 MyRTC.c 5.2 MyRTC.h 5.3 main.c…

【Spring】Spring Boot 快速入门

&#x1f4da;博客主页&#xff1a;爱敲代码的小杨. ✨专栏&#xff1a;《Java SE语法》 | 《数据结构与算法》 | 《C生万物》 |《MySQL探索之旅》 |《Web世界探险家》 ❤️感谢大家点赞&#x1f44d;&#x1f3fb;收藏⭐评论✍&#x1f3fb;&#xff0c;您的三连就是我持续更…

【漏洞复现】AJ-Report开源数据大屏 verification;swagger-ui RCE漏洞

0x01 产品简介 AJ-Report是一个完全开源的B平台&#xff0c;酷炫大屏展示&#xff0c;能随时随地掌控业务动态&#xff0c;让每个决策都有数据支撑。多数据源支持&#xff0c;内置mysql、elasticsearch、kudu等多种驱动&#xff0c;支持自定义数据集省去数据接口开发&#xff…

缓存层持久化

** 读缓存** 分布式缓存 先将所有的缓存数据集中存储在同一个地方&#xff0c;而非重复保存到各个服务器节点中&#xff0c;然后所有的服务器节点都从这个地方读取数据 使用MongoDB的公司最少&#xff0c;目前&#xff0c;Redis比Memcached更流行&#xff1a; &#xff08;1&…

SpringBoot2+Vue3开发博客管理系统

项目介绍 博客管理系统&#xff0c;可以帮助使用者管理自己的经验文章、学习心得、知识文章、技术文章&#xff0c;以及对文章进行分类&#xff0c;打标签等功能。便于日后的复习和回忆。 架构介绍 博客管理系统采用前后端分离模式进行开发。前端主要使用技术&#xff1a;Vu…

Comfyui-ChatTTS-OpenVoice 为ComfyUI添加语音合成、语音克隆功能

‍‍ 生成多人播客&#xff1a; Comfyui-ChatTTS是一个开源的GitHub项目&#xff0c;致力于为ComfyUI添加语音合成功能。该项目提供了一系列功能强大的节点和模型&#xff0c;支持用户创建和复用音色&#xff0c;支持多人对话模式的生成&#xff0c;并提供了导出音频字幕文件的…

sed的用法

grep 就是查找文本当中的内容&#xff0c;扩展正则表达式 sed是一种流编辑器&#xff0c;一次处理一行内容 如果只是展示&#xff0c;会放在缓冲区&#xff08;模式空间&#xff09;&#xff0c;展示结束之后&#xff0c;会从模式空间把操作结果删除。 一行一行处理&#xf…

消息认证码解析

1. 什么是消息认证码 消息认证码(Message Authentication Code)是一种确认完整性并进行认证的技术&#xff0c;取三个单词的首字母&#xff0c;简称为MAC。 消息认证码的输入包括任意长度的消息和一个发送者与接收者之间共享的密钥&#xff0c;它可以输出固定长度的数据&#x…