原创 | 一文读懂ChatGPT中的强化学习

原文:原创 | 一文读懂ChatGPT中的强化学习

ChatGPT基于OpenAI的GPT-3.5创造,是InstructGPT的衍生产品,它引入了一种新的方法,将人类反馈纳入训练过程中,使模型的输出与用户的意图更好地结合。在OpenAI的2022年论文《通过人类反馈训练语言模型以遵循指令》中对来自人类反馈的强化学习(RLHF)进行了深入描述。

创建者将监督学习和强化学习相结合来微调ChatGPT,强化学习组件是ChatGPT的独到之处。研究人员使用了“根据人类反馈强化学习(Reinforcement Learning from Human Feedback ,RLHF)”的特殊技术,在训练环路中使用人类反馈来尽量减少有害的、不真实的和/或有偏差的输出。

该方法包括以下三个步骤:

第一步:带监督的微调,预训练语言模型对由标注人员管理的相对较少的演示数据进行微调,以学习监督策略(SFT模型),根据选定的提示列表生成输出,这表示基线模型;

第二步:“模仿人类偏好” :要求标注人员对相对较多的SFT模型输出进行投票,创建一个由对比数据组成的新数据集。在该数据集上训练一个新的奖励模型(RM);

第三步:近端策略优化(PPO):对奖励模型进一步微调以改进SFT模型。这一步的结果就是所谓的策略模型。

步骤1只进行一次,而步骤2和步骤3可以连续迭代:在当前的最佳策略模型上收集更多的比较数据,训练出一个新的奖励模型,然后在此基础上再训练出一个新的策略。

带监督的微调(SFT)模型

首先是收集演示数据,以训练一个带监督的策略模型,称之为SFT模型。

数据收集:选择一份提示列表,要求一组人工标注人员写下预期的输出响应。ChatGPT使用了两种不同的提示来源:一些是直接从标注人员或开发人员那里获取到的的,一些是从OpenAI的API请求中取样的(即来自GPT-3客户)。整个过程速度缓慢并且代价昂贵,输出结果是一个相对较小的、高质量的管理数据集(大概大约有12-15k个数据点),将利用该数据集微调预先训练的语言模型。

模型选取:开发人员选择了在GPT-3.5系列中选择一个预训练模型,而不是对原来的GPT-3模型进行微调。可使用最新的基线模型——text-davinci-003,这也是一个GPT-3模型,对主要的编程代码进行微调。

由于这一步的数据量有限,在此过程之后获得的SFT模型很可能输出用户不太关注的文本,而且往往会出现错位的问题。这里的问题是,监督学习这一步存在很高的可扩展性成本。

为了克服上述问题,利用人工标记创建一个更大的数据集,这个速度缓慢而代价昂贵的过程,采用一个新的策略,为人工标记的SFT模型输出创建一个奖励模型——在下面的内容中进行更详细的解释。

奖励模型

在步骤1 中训练 SFT 模型后,该模型会对用户提示生成更一致的响应。接下来是训练奖励模型,其中模型输入是一系列提示和响应,输出是一个缩放值,称为奖励。需要奖励模型以利用强化学习,在强化学习中模型学习产生输出以最大化其奖励。

直接从数据中学习出一个目标函数(奖励模型)。这个函数的目的是给SFT模型的输出给出一个分值,这一分值与人类对输出的可取程度成比例。在实践中,这将反映出选定的标记人员群体的具体偏好和他们同意遵循的准则。最后,这一过程将从数据中提取出一个模仿人类偏好的自动回答系统。其工作原理如下:

  • 选择一个提示列表,SFT模型为每个提示生成多个SFT 模型输出(在4个到9个之间);

  • 标注人员将输出从好到坏进行排序,结果是生成一个新的标记数据集,其中的排名是标记。这个数据集的大小大约是SFT模型数据集的10倍;

  • 利用这些新数据训练一个奖励模型(RM)。该模型将某些SFT模型输出作为输入,并根据人类偏好对它们进行排序。

对于标注者来说,对输出进行排序比从头开始生成它们要容易得多,因此这个过程的缩放效率会更高。在实践中,从30-40k个提示符(prompts)中生成一个数据集,要求将这些输出从最好到最差进行排名,创建输出排名组合。在排名阶段,将不同标注的输出呈现给不同的提示符。

利用近端策略优化(PPO)算法微调SFT模型

接下来,利用强化学习微调SFT策略,让它优化奖励模型。模型会收到随机提示并返回响应。响应是使用模型在步骤2 中学习的“策略”生成的。策略表示机器已经学会使用以实现其目标的策略;在这种情况下,最大化其奖励。基于在步骤 2 中开发的奖励模型,然后为提示和响应对确定缩放器奖励值。然后奖励反馈到模型中以改进策略。所使用的算法为近端策略优化(PPO)算法,而微调后的模型称为PPO模型。

2017年,舒尔曼等人。引入了近端策略优化 (PPO),该方法用于在生成每个响应时更新模型的策略。PPO 包含来自 SFT 模型的每个代币 Kullback–Leibler (KL) 惩罚。KL 散度衡量两个分布函数的相似性并对极端距离进行惩罚。在这种情况下,使用 KL 惩罚会减少响应与步骤 1 中训练的 SFT 模型输出之间的距离,以避免过度优化奖励模型和与人类意图数据集的偏差太大。PPO算法的具体实现已经在前文4.4 节中进行了描述,这种方法的要点:

  • PPO是一种用于训练强化学习中智能体的算法,为策略算法,正如DQN(深度q网络)等算法一样,它直接从当前策略中学习和更新策略,而非从过去的经验中学习算法。PPO根据智能体所采取的行动和它所获得的奖励,不断地调整当前的政策;

  • PPO使用置信区间优化方法对策略进行训练,它将策略的变化限制在与先前策略的一定距离内,以确保稳定性。这与其他策略梯度方法相反,其他策略梯度方法有时会对策略进行大量更新,从而使学习不稳定;

  • PPO使用价值函数来估计给定状态或动作的预期回报。利用价值函数计算优势函数,它表示期望回报和当前回报之间的差值,使用优势函数通过比较当前策略所采取的动作与先前策略的本应采取的动作来更新策略,PPO能够根据动作的估计值对策略进行更明智的更新。

在该步骤中,由SFT模型初始化PPO模型,由奖励模型初始化价值函数。该环境是一个强盗环境(bandit environment),它显示一个随机的提示符,并期望对该提示符作出响应。给出提示和反响应之后,会生成奖励(由奖励模型决定)。在每个标注的SFT模型中添加各个标记的KL惩罚,以优化奖励模型。

结论

ChatGPT引入了强化学习近端策略优化(PPO)算法微调SFT模型,将人类反馈纳入模型训练过程中,从而大幅度提高了模型训练的准确度。

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

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

相关文章

多汗症如何诊断?

多汗症的诊断需要综合考虑多个因素,包括患者的症状、病史、体格检查以及相关实验室检查等。 首先,医生会详细询问患者的症状,了解出汗的部位、时间、严重程度等,以便做出初步的诊断。同时,医生还会询问患者的家族史和…

【Docker】Docker安装入门教程及基本使用

🎉🎉欢迎来到我的CSDN主页!🎉🎉 🏅我是Java方文山,一个在CSDN分享笔记的博主。📚📚 🌟推荐给大家我的专栏《Docker实战》。🎯🎯 &…

【K8S 云原生】Kurbernets集群的调度策略

目录 一、Kubernetes的list-watch机制 1、List-watch 2、创建pod的过程: 二、scheduler调度的过程和策略: 1、简介 2、预算策略:predicate 3、优先策略: 3.1、leastrequestedpriority: 3.2、balanceresourceal…

Mysql——索引相关的数据结构

索引 引入 我们知道,数据库查询是数据库的最主要功能之一。我们都希望查询数据的速度能尽可能的快,因此数据库系统的设计者会从查询算法的角度进行优化。最基本的查询算法当然是顺序查找(linear search),这种复杂度为…

【C++】sizeof()、strlen()、length()、size()详解和区别

sizeof()、strlen()、length()、size()均用于获取字符串长度 length(): C中,length()只用于获取字符串的长度。例如: String str"abcdefg"; str.length()7 size(): 除了与length一样可以获取字符串的长度,还可以获取vetor类型的长…

springboot基于java的小区物业管理系统(保安巡逻绿化消防)设计+jsp

小区物业管理系统采用的是JAVA语言开发,利用MySQL为数据库, 使用IDEA平台来编写代码,框架方面选择的是springbootweb框架,采用B/S结构实现系统。本系统的设计与开发过程中严格遵守软件工程的规范,运用软件设计模式&…

leecode1143 | 最长公共子序列

给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 ,返回 0 。 一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不…

JAVA常见面试题——后端--集合篇

2.1. 在平常工作中常用的集合有哪些 ArrayList: 基于动态数组实现,支持动态增长,适用于查找和遍历操作频繁的场景。 LinkedList: 基于链表实现,支持高效的插入和删除操作,适用于频繁插入和删除元素的场景。…

香港Web3:Web3的新热土

相关推荐点击查看TechubNews 随着区块链技术的快速发展,Web3的概念逐渐在全球范围内受到关注。作为亚洲的金融中心,香港在Web3领域也展现出了极大的热情和潜力。本文将探讨香港在Web3领域的发展现状、机遇与挑战。 一、香港Web3的发展现状 香港在Web3…

合并 K 个升序链表[困难]

一、题目 给你一个链表数组,每个链表都已经按升序排列。请你将所有链表合并到一个升序链表中,返回合并后的链表。 示例 1: 输入:lists [[1,4,5],[1,3,4],[2,6]] 输出:[1,1,2,3,4,4,5,6] 解释:链表数组如…

AI智能分析网关V4:太阳能+4G智慧水库远程可视化智能监管方案

一、背景需求分析 由于水库位置分散的原因,水库视频监控建设在立杆、布线等方面都存在一定的难度,且需要人力、物力的前期投入和后期维护。目前水库的监管存在一定的问题,管理人员工作强度大但管理质量并不高,人为巡检无法实时发…

GBASE南大通用 访问其他数据库服务器

通过限定数据库对象(表、视图、同义词或例程)的名称,您可访问外部数据库中的任何 表或例程。 当外部表与当前数据库位于同一数据库服务器上时,您必须以数据库名称和冒号限定对象 名称。例如,要引用不是本地数据库的数据…

【React源码 - Fiber架构之Reconciler】

前言 React16架构可以分为三层也是最核心的三个功能分别是: Scheduler(调度器)—调度任务的优先级,高优任务优先进入Reconciler(16新增)Reconciler(协调器)—负责找出变化的组件Renderer(渲染…

青龙面板教程

docker安装青龙面板 1.青龙面板 ### 切换到想要安装的目录,执行下面的命令 docker run -dit \ --name ql \--hostname ql \--restart always \-p 5700:5700 \-v $PWD/ql/config:/ql/config \-v $PWD/ql/log:/ql/log \-v $PWD/ql/db…

C++_虚函数表

虚函数表 介绍源码运行结果笔记扩充函数名联编静态联编动态联编 介绍 1.编译器通过指针或引用调用虚函数,不会立即生成函数调用指令,而是用 二级函数指针 代替 1.1确定真实类型 1.2找到虚函数表从而找到入口地址 1.3根据入口地址调用函数(PS:俗称 函数指…

RT-Thread入门笔记3-线程的创建

线程 RT-Thread 中,线程由三部分组成:线程代码(入口函数)、线程控制块、线程堆栈. 线程代码: 线程控制块 : 线程控制块是操作系统用于管理线程的一个数据结构, 它会存放线程的一些信息, 例如优先级、 线程…

使用Notepad++将多行数据合并成一行

步骤 1、按CtrlF,弹出“替换”的窗口; 2、选择“替换”菜单; 3、“查找目标”内容输入为:\r\n; 4、“替换为”内容为空; 5、“查找模式”选择为正则表达式; 6、设置好之后,点击“全…

Vue3 父事件覆盖子事件,Vue2 的 v-on=“$listeners“ 的替代方案

在 Vue3 中,$listeners 被删除 子组件代码,需要特别注意的是事件名为 on 开头,例如 onBack。不确定的可以通过给父组件传递 事件或属性,再打印子组件的 attrs useAttrs(),来确定传值 // template v-bind"newA…

了解PyTorch中的缩放点积注意力及演示

torch.nn.functional.scaled_dot_product_attention 函数在 PyTorch 框架中用于实现缩放点积注意力(Scaled Dot-Product Attention)。这是一种在自然语言处理和计算机视觉等领域常用的注意力机制。它的主要目的是通过计算查询(query&#xff…

Windows常用命令(文件相关、进程相关、网络相关、用户相关、特殊符号)

Windows常用命令 Windows常用命令 Windows常用命令0x01 基础操作0x02 文件操作0x03 进程操作0x04 网络相关0x05 用户相关0x06 特殊符号 0x01 基础操作 清屏:cls 关机:shutdown -s(关机)-r(重启) -f(强制)…