论文导读 | 大语言模型中应用到的强化学习算法

news2024/11/20 1:44:11

摘要

在最近取得广泛关注的大规模语言模型(LLM)应用强化学习(RL)进行与人类行为的对齐,进而可以充分理解和回答人的指令,这一结果展现了强化学习在大规模NLP的丰富应用前景。本文介绍了LLM中应用到的RL技术及其发展路径,希望给读者们一些将RL更好地应用于大规模通用NLP系统的提示与启发。

大规模语言模型向RL的发展

语言模型(LM)是一种编码和理解自然语言的NLP模型。早期的Word2Vec等研究工作试图进行字词编码表示语义,但这一做法讲所有字/词的语义编码固定,无法充分利用上下文信息处理一词多义等复杂语义。因此,以BERT为代表的LM通过预训练学习整句的语义表示,达到了更好的自然语言理解性能。此后,一系列研究扩大了语言模型的规模(LLM),其参数在近几年达到了千亿量级,同样取得了进一步的表现提升;为了充分利用LLM的能力,T5等工作提出了基于prompt的自然语言理解和生成范式。

LLM固然有很强的自然语言理解能力,但我们还是希望它能成为人类的好助手。从这个角度上看,让LLM的行为与人类“对齐”,使其能够理解人类指令并做出对人有帮助的回答,是一个亟待解决的问题。为此,以InstructGPT为代表的一系列工作便尝试通过强化学习让LLM与人类的行为对齐。

具体而言,这些工作通过一个反馈模型(RM)模拟一个人对LLM输出的偏好程度打分,并让LLM利用这一反馈优化其输出策略,进而得到一个能输出“令人满意”的内容的LLM。那么如何让LLM根据RM的反馈优化策略?这便是强化学习所擅长解决的问题,下文将介绍其使用的主要方法;而这一利用“人”的反馈进行强化学习的思路也被称为RLHF。

策略梯度:强化学习的基础方法

如上所述,强化学习是一种利用反馈来学习策略的范式。具体而言,如下图所示,强化学习的模型(Agent)与环境交互,对于每个给定状态st采取动作at并从环境获得奖励rt,同时进入下一状态s[t+1],这一过程循环往复。在积累了这一系列交互经验后,模型通过调整自己的策略以让交互过程得到的奖励最大化。这样一来Agent就学习到了在给定状态下采取有益的动作的策略,实现了强化学习的目标。

那么,如何调整策略以最大化奖励呢?换言之,如何设计一个可学习的优化目标,使奖励最大化呢?下图的公式就实现了这一目标。具体而言,我们首先与环境进行一系列交互,从初始状态s1开始到结束状态s_final,模型依次做出了动作a1~an并分别获得了奖励r1~rn,在每步做决策时,模型都会给出概率分布π(at|st)。这一从开始到结束的交互过程我们称之为一条轨迹,将这条轨迹的所有奖励求和即可得到轨迹的总奖励R(π)。

不难发现,上图中的公式就衡量了给定策略下采样若干轨迹所能得到的期望奖励,利用梯度上升优化这一目标即可使得策略往“奖励更大”的方向优化,即得到更优的策略。这一直接的思路被称为策略梯度,是RL的基础方法之一。

策略梯度的问题与优化

策略梯度方法虽然直观,但在实践中往往难以取得效果,这是因为每条轨迹的奖励本身具有较大的方差,可能导致训练难以收敛。具体而言,如果有些较大价值的轨迹没有被采样到,根据现有优化目标,模型可能反而会提升一些价值较小的轨迹的策略概率。因此,如果我们能让奖励有正有负,坏于平均值的奖励被认定为负数,这样即便只采样到这些不太好的轨迹,我们仍然能让模型对这些轨迹的策略概率下降。

这便是Baseline的思想:通过一个变量b估计所有轨迹奖励的平均水平,并在最终的优化目标中将轨迹的奖励减去b,即可实现奖励的有正有负。这样一来策略梯度训练就可以变得稳定一些。

然而,引入baseline并没有彻底解决方差的问题。一方面,b本身也需要通过采样-平均来估计,这本身无法保证b的准确性;另一方面,上述所有计算都是针对一些采样到的轨迹计算得到的奖励,这可能与轨迹真正的价值存在偏差。因此,我们希望直接估计某条轨迹的“价值”,亦即它的总奖励的期望,这便是接下来即将介绍的Actor-Critic的思想。

Q-learning 与 Actor-Critic

如上所述,我们希望估计 R(τ)-b 的期望。从另一个角度理解,这个值也可以被视为在st上采取动作at后,未来的期望收益能带来多大的提升。我们将这个值的期望写作A(st,at),这个A是优势函数(Advantage)的缩写。那么,这个优势函数又该如何计算呢?

为此,我们需要先简单介绍一下Q-learning相关的概念。现在我们用V(s)代表采取某种策略下,状态s后所能获得的期望收益。如果我们能准确估计V(s),那优势函数即可被表示为 A(st,at) = rt+V(s[t+1])-V(st)。这是因为优势函数衡量的就是在st下采取at后,相比起采取其他动作能带来多少额外收益;在st下采取at本身获得了奖励rt,在之后有期望收益V(s[t+1]),而本来采取所有其他动作所对应的期望收益就是V(st)。显然,上式是优势函数的一个正确表示。

最后,我们只需要考虑如何估计V函数即可。值得注意的是,对V的估计本身就是强化学习中另一主流分支Q-learning的研究课题,在这一领域内有大量的研究(DQN、Double-DQN等),在这里我们只介绍最基础、最直觉的V估计方法。如下图所示,顾名思义,既然V(s)衡量状态s以后的期望收益,我们可以直接采样轨迹,平均所有采样到的s后收益来衡量V,这一方法被称为Monte-Carlo(MC)。这种基于采样的方法同样具有较高的方差,为了提高稳定性,我们可以利用动态规划的思路,即如果st转换到s[t+1]获得了收益rt,那这两个状态的价值应满足V(st)=rt+V(s[t+1])。基于这种状态转移方程来训练V网络的方式被称为Temporal Difference(TD)。

完成了对V的估计,我们便可以利用优势函数训练策略网络了。在训练中我们会同时训练两个模型,一个是策略网络(Actor),一个是估计V的估值网络(Critic),因此这类方法也被称为Actor-Critic(AC)。

PPO

Actor-Critic虽然解决了方差高的问题,但在实践中仍可能遇到困难。具体而言,训练AC时需要与环境交互来采样很多轨迹,然后利用这些轨迹训练Actor和Critic;然而,这一过程是十分费时的,这可能导致我们无法高效的采集大量数据,进而充分的训练模型。因此,我们考虑是否能将已有的轨迹数据复用以提高训练效率。

这一思路将我们指向了off-policy RL的道路。具体而言,我们希望有两个策略网络π1和π2,其中π1不断与环境交互收集数据,这些数据可以重复使用以训练π2的参数。这看似能够解决上述问题,但不难发现,如果通过π1来采样数据,π2上的优化目标的期望可能发生改变(下图)。换言之,利用这种方式来训练会偏移我们最初“最大化期望收益”的目标,造成不良的收敛效果。

为保持优化目标的等价性,我们可以利用importance sampling的思想,在原函数后乘上两个分布的概率比例,再重新求期望(下图),这样即可满足从π1采样和从π2采样的等价性。

但这又引入了一个问题,虽然此时二者期望相等,后者的方差可能显著大于前者,进而再次导致训练不稳定。可以证明,如果我们保证π1与π2的分布不相差太远,后者的方差便不会显著增大。因此,在进行off-policy RL时我们还需要尽量控制π1与π2间的差距。

将上述内容总结,即可得到Off-policy RL的总体思路:优化调整后的训练目标,同时保证π1与π2分布的KL散度尽量小,如下图所示。值得注意的是,优化目标中的π2/π1项是一个标量而非概率分布向量,在求梯度时它是不可导的(不像后面的log(π2)可导),因此,在求梯度后,下图中第一行的优化目标实际上与第二行等价,因此我们实际上可以用更简洁的第二行作为训练中的实际优化目标。

有了这些铺垫,我们终于得到了一个可以高效训练的RL算法:Proximal Policy Optimization(PPO),近期获得很大关注的InstructGPT、ChatGPT便在底层使用了PPO进行强化学习。PPO是一种对上述Off-policy RL目标的实现,分析其优化目标不难发现,它首先最大化原始优化目标A*π2/π1,其次又防止π2/π1偏离1太多,即控制了两个分布的差距。实验证明,这一实现相比简单通过KL惩罚项实现的Off-policy RL效果更好。

InstructGPT中的强化学习

最后我们简单介绍一下ChatGPT的核心方法——InstructGPT是如何利用上述方法进行RLHF的。如下图所示,InstructGPT的核心由两个模型构成:1)一个反馈模型(RM),它给定一对模型输入和输出,反馈该输出的合理程度(有多好)打分;2)一个生成式语言模型,给定输出生成一段输出,并利用RM给出的打分作为奖励进行强化学习。只要让RM能很好的反应人类的偏好,我们就可以让生成模型与人类行为进行对齐。

接下来简要介绍训练这两个模型的一些细节。对于RM的训练是很直观的,我们只需人工标注一些偏好数据(例如对于一个输入,我们让模型给出若干输出,并由标注人员对这些输出的好坏程度进行排序),并通过对比学习让RM最大化好输出与坏输出的分数差。

对于生成模型的训练,我们可以将“输入-生成模型输出-RM反馈”作为一个只有一步的轨迹(输入是s1,输出是a1,RM的反馈是奖励),并在这些轨迹上利用PPO进行强化学习。如下图所示,我们只需最大化PPO的优化目标即可实现对生成模型的训练。

总结

本文以大语言模型中应用到的强化学习算法——PPO为核心,介绍了从基础强化学习算法(策略梯度、AC等)到PPO的发展路径、核心问题及解决思路,最后简介了PPO在InstructGPT的应用。希望本文可以启发更多NLP研究者将RL更多、更好的应用在NLP的模型和场景之中。

致谢

部分实例及图表资料源自李宏毅老师的深度强化学习公开课程,感谢他为这一领域研究思路的普及做出的贡献和提出的思考。链接:https://www.youtube.com/playlist?list=PLJV_el3uVTsODxQFgzMzPLa16h6B8kWM_

参考文献

[1] Church K W. Word2Vec[J]. Natural Language Engineering, 2017, 23(1): 155-162.

[2] Devlin J, Chang M W, Lee K, et al. Bert: Pre-training of deep bidirectional transformers for language understanding[J]. arXiv preprint arXiv:1810.04805, 2018.

[3] Raffel C, Shazeer N, Roberts A, et al. Exploring the limits of transfer learning with a unified text-to-text transformer[J]. The Journal of Machine Learning Research, 2020, 21(1): 5485-5551.

[4] Sutton R S, McAllester D, Singh S, et al. Policy gradient methods for reinforcement learning with function approximation[J]. Advances in neural information processing systems, 1999, 12.

[5] Mnih V, Badia A P, Mirza M, et al. Asynchronous methods for deep reinforcement learning[C]//International conference on machine learning. PMLR, 2016: 1928-1937.

[6] Schulman J, Wolski F, Dhariwal P, et al. Proximal policy optimization algorithms[J]. arXiv preprint arXiv:1707.06347, 2017.

[7] Ouyang L, Wu J, Jiang X, et al. Training language models to follow instructions with human feedback[J]. Advances in Neural Information Processing Systems, 2022, 35: 27730-27744.

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

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

相关文章

《NFT区块链进阶指南一》Remix部署Solidity ERC721合约(NFT合约)到Etherscan

文章目录 一、部署合约1.1 无构造参数合约部署1.2 有构造参数合约部署 二、合约详情三、部署提示 本篇为NFT区块链高级部分,在阅读之前需了解:Remix、Metamask、Etherscan、Solidity、Openzeppelin、ERC721合约 一、部署合约 1.1 无构造参数合约部署 智…

maven入门学习

简介 maven是基于ant升级的,apache的自动化构建工具、项目管理工具 Maven – Welcome to Apache Maven maven使用pom.xml进行配置 maven项目可以更方便的实现导jar包、拆分项目 idea默认集成了maven 下载安装 下载maven,在官网(Maven –…

如何设计电商SPU与SKU表以及相关的表?

一、先了解SPU及SKU的相关概念: 我们在开发电商项目时,必须首先要了解两个概念,SPU与SKU是什么?这也是设计一个好的电商系统的必要前提。商系统实现了什么功能,大数情况下都是和商品模块相关联的。因此商品模块本身的…

Python基础入门(3)—— 什么是函数递归、字典、集合、文件操作、异常处理?

文章目录 01 | 🚘函数 && 递归🚔函数🚔递归 02 | 🚘字典03 | 🚘集合04 | 🚘文件05 | 🚘异常处理06 | 🚘习题 Better late than never. 迟做总比不做好;晚来总比不来好。 01 …

M302A-CW/BYT-通刷S905L3(B)-当贝纯净桌面卡刷固件包

M302A-CW/BYT-通刷S905L3(B)-当贝纯净桌面卡刷固件包-内有教程 特点: 1、适用于对应型号的电视盒子刷机; 2、开放原厂固件屏蔽的市场安装和u盘安装apk; 3、修改dns,三网通用; 4、大量精简内置的没用的…

MFP450 基础飞行平台问世,支持室内室外无GPS环境飞行

无人机开发入门,我们需要一个怎样的基础飞行平台? 开源无人机的发展日新月异,但遗憾的是,在PX4和FMT生态中,还很少看到一个稳定可靠的基础飞行平台。目前国内市场的选择不多,还是以DIY为主,尤其…

GEE:使用 ROC 曲线和 AUC 评估分类算法性能

作者:CSDN @ _养乐多_ 在机器学习和遥感数据分析领域,评估分类算法的性能是关键任务之一。Google Earth Engine(GEE)平台提供了丰富的遥感数据和分析工具,结合 ROC(接收者操作特征)曲线和 AUC(曲线下面积)分析,可以有效评估分类算法的准确性和可靠性。 本文将介绍如…

基于阻塞队列实现异步秒杀

文章目录 1 异步秒杀思路2 Redis完成秒杀资格判断3 基于阻塞队列实现秒杀优化总结 1 异步秒杀思路 我们来回顾一下下单流程 当用户发起请求,此时会请求nginx,nginx会访问到tomcat,而tomcat中的程序,会进行串行操作,分…

搞懂 API,跨域资源贡献 (CORS )和安全性问题

在 Web 应用开发中,API 是应用程序和其他系统之间进行数据交互的主要方式。 跨域资源共享(CORS)是一种常见的处理跨域请求的技术,但同时也带来了一些安全性问题。我将分享 CORS 技术及其安全性问题。 跨域资源共享(COR…

django CBV 与 DRF APIView源码分析

django CBV源码分析 在django框架中,视图层中的逻辑即可以使用函数处理也可以使用类进行处理,如果在视图层中使用函数处理请求,就是FBV(function base views),如果在视图层中使用类处理请求,就是CBV(class base views…

Windows无法完成格式化怎么办?正确的3个解决方法!

案例:Windows无法完成格式化怎么办 【由于我的U盘使用时间过长,很多文件都是不需要的,我想将其格式化,但插入电脑后,Windows根本无法完成格式化,这是为什么呢?我应该怎么做呢?求答案…

谁想和我一起做低代码平台!一个可以提升技术,让简历装x的项目

序言 正如文章标题所述,最近一段时间低代码这个概念非常的火,但其实在不了解这个东西的时候觉得它真的很炫酷,从那时就萌生了做一个低代码平台的想法。 但随着时间的变化,现在市面上低代码各个业务方向的平台都有了,可…

算法训练第二周题解汇总

A - AABCC [ABC300D] AABCC - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 大意&#xff1a; 题解&#xff1a; 就是纯暴力题&#xff0c;由于 a<b<c&#xff0c;所以≤N&#xff0c;a<500&#xff1b;<N&#xff0c;c<。先用埃筛预处理&#xff0c;然后枚举的…

hutool工具

目录 官网 简介 pom.xml EscapeUtil使用 HttpRequest使用 官网 Hutool参考文档 简介 Hutool 是一个小而全的 Java工具类库&#xff0c;通过静态方法封装&#xff0c;降低相关API的学习成本&#xff0c;提高工作效率&#xff0c;涵盖了Java开发开发中的方方面面 使用 Hu…

Java入门指南:从零开始的基础语法

java语言概述 Java是一种高级编程语言&#xff0c;最初由Sun Microsystems&#xff08;现在是Oracle Corporation的一部分&#xff09;在1995年推出。Java以其简单、可移植和安全的特性而闻名&#xff0c;并广泛用于各种应用程序开发&#xff0c;从桌面应用程序到移动应用程序和…

Linux如何卸载或者删除docker

1.查看当前docker状态: systemctl status docker 2.如果是运行状态则停掉: systemctl stop docker 3.查看yum安装的docker文件包: yum list installed |grep docker ​ 删除所有安装的docker文件包 yum -y remove docker.x86_64 其他的docker相关的安装包同样删除操作&#xf…

国内GPU渲染农场有哪些值得推荐?

GPU凭借它在图形渲染领域强大的架构和计算能力&#xff0c;给广大用户带来了一种更为高效的解决方案&#xff0c;我们启用GPU渲染加速&#xff0c;实际就是调用GPU加速图形的渲染和填充。既然聊到GPU渲染&#xff0c;CG行业的朋友们肯定也好奇国内值得推荐的GPU渲染农场有哪些&…

【C++】-类和对象之日期类的具体实现(中)

&#x1f496;作者&#xff1a;小树苗渴望变成参天大树 ❤️‍&#x1fa79;作者宣言&#xff1a;认真写好每一篇博客 &#x1f4a8;作者gitee:gitee &#x1f49e;作者专栏&#xff1a;C语言,数据结构初阶,Linux,C 如 果 你 喜 欢 作 者 的 文 章 &#xff0c;就 给 作 者 点…

企业数字化转型的五个常见问题以及回答

数字化、数字化转型其实并不是新的概念&#xff0c;早在十年前就提出来了&#xff0c;但近两年才开始真正走向公众视野。由于概念的泛滥与传统信息化的双重叠加影响&#xff0c;多数企业存在认知上的诸多困扰。 数字化转型为何成为当前热点&#xff1f; 什么是数字化转型&…

云渲染可以渲动画吗?

云渲染可以渲动画吗&#xff1f; 首先我来回答你这个问题&#xff0c;云渲染当然可以渲动画啦&#xff01;像2022年暑期档最火的动画电影《新神榜&#xff1a;杨戬》就是在云渲染的支持下才能准时上线跟大家见面的哦&#xff01; Renderbus瑞云渲染和追光动画也是老朋友了&…