从RL的专业角度解惑 instruct GPT的目标函数

作为早期chatGPT背后的核心技术,instruct GPT一直被业界奉为里程碑式的著作。但是这篇论文关于RL的部分确写的非常模糊,几乎一笔带过。当我们去仔细审查它的目标函数的时候,心中不免有诸多困惑。特别是作者提到用PPO来做强化学习,但是那个目标函数却怎么看都和经典的PPO目标函数不大一样。网上关于这一点的解释资料也甚少,而且不免有理解错误的。所以,鉴于GPT技术在今天是如此的重要,我觉得有必要去把里面的一些误解澄清。这样,后人也可以更加透彻的理解这里面的核心思想,以及这篇文章所用的PPO和原始版本PPO之间的关联。

首先,我们来看原论文的目标函数(省略了pretrain约束的版本):

J(\theta)=E_{(x,y)\sim D_{\pi_\phi}}[r(x,y)-\beta log(\frac{\pi_\phi(y|x)}{\pi_{SFT}(y|x)})]

如果没有后面的惩罚项,这就是一个经典的策略梯度优化对象,我们可以直接把梯度算出来:

J(\phi)=E_{(x,y)\sim D_{\pi_\phi}}[r(x,y)]\approx E_{x\sim D_{\pi_\phi},y\sim \pi_\phi(\cdot|x)}[r(x,y)]=E_{x\sim D_{\pi_\phi}}[\sum_y\pi_\phi(y|x)r(x,y)]

\nabla_\phi J(\phi)=E_{x\sim D_{\pi_\phi}}[\sum_y\nabla_\phi\pi_\phi(y|x)r(x,y)]=E_{x\sim D_{\pi_\phi},y\sim \pi_\phi(\cdot|x)}[\nabla_\phi log \pi_\phi(y|x) r(x,y)]

接下来,经典的做法就是用采样来估计这个梯度,然后做梯度下降,用REINFORCE就可以优化。

但是REINFORCE和PPO最大的差异,在于对新老策略之间距离的约束,也就是KL项。这个项在某种意义上其实是改变了策略空间的度规,从而更自然的反应两个策略(概率分布)之间的真实距离(也就是自然梯度),而原始的REINFORCE之所以效果不好,是因为它默认选择用欧式度规,而这对描述概率分布之间的差异来说并不合适。

那么instruct GPT第一个令人困惑的问题来了,他的KL惩罚项在哪里?大多数人都是直觉上认为这个log(\frac{\pi_\phi(y|x)}{\pi_{SFT}(y|x)})就是KL项,但是这不够严谨,尽管KL的定义和两个分布的比值取对数有关。如果我们严格的把KL的定义写出来,它有如下形式:

KL[\pi_\phi(\cdot |x),\pi_{SFT}(\cdot |x)]=\sum_y\pi_\phi(y|x)log(\frac{\pi_\phi(y|x)}{\pi_{SFT}(y|x)})=E_{y\sim \pi_\phi(\cdot |x)}[log(\frac{\pi_\phi(y|x)}{\pi_{SFT}(y|x)})]

看到这里我们就发现了第一个端倪,这里其实是有一个近似的,而这个近似只有在抽样足够多的时候才成立:

E_{x\sim D_\phi,y\sim \pi_\phi(\cdot |x)}[log(\frac{\pi_\phi(y|x)}{\pi_{SFT}(y|x)})]\approx E_{(x,y)\sim D_\phi}[log(\frac{\pi_\phi(y|x)}{\pi_{SFT}(y|x)})]

所以这个KL项其实是被吸收到期望内部去了,而吸收的前提就是上面提到的这个近似。我们把这个KL项单独提出来,就得到了PPO的目标函数形式(注意,这里是KL形式,而非CLIP形式):

J(\phi)=E_{(x,y)\sim D_{\pi_\phi}}[r(x,y)]-\beta E_{(x,y)\sim D_{\pi_\phi}} [log(\frac{\pi_\phi(y|x)}{\pi_{SFT}(y|x)})]\approx E_{(x,y)\sim D_{\pi_\phi}}[r(x,y)]-\beta E_{x\sim D_{\pi_\phi}}[KL[\pi_\phi(\cdot|x), \pi_{SFT}(\cdot|x)]]

所以网络上所谓的“把KL惩罚直接加到reward上”的说法其实是不准确的,虽然在当前这个目标函数下这二者是等价的,但是一旦我们用类似于PPO中importance sampling的方法来处理这个目标函数,很多地方就说不通了。但是,当我们把它还原成这个标准形式后,我们就发现importance sampling其实不会作用在KL项上。

理解了上面说的,就会立马注意到另外一个令人困惑的地方:如果我们把\pi_{SFT}看作是PPO中的\pi_{old}, 那么这个KL惩罚项其实是和PPO中的KL惩罚项相反的

KL[\pi_\phi(\cdot|x), \pi_{old}(\cdot|x)]\neq KL[\pi_{old}(\cdot|x), \pi_{\phi}(\cdot|x)]

尽管这样并不会影响PPO算法的正确性,因为我们知道

KL[\pi_{old}(\cdot|x), \pi_{\phi}(\cdot|x)]<\delta \Rightarrow KL[\pi_\phi(\cdot|x), \pi_{old}(\cdot|x)]<\frac{\delta}{min_y\pi_{old}(y|x)}

尽管这两个KL都是衡量新策略​相对于旧策略的偏离程度,但是我们依然想搞清楚这二者之间的差异究竟是什么,我们又该在什么时候选择什么样的KL项呢?为了理解清楚这个问题,我们首先来需要注意到当新旧策略在单个数据点上出项差异的时候其实有两种情况:(\pi_{old}​:high,\pi_{\phi}​:low) 和 (\pi_{old}​:low,\pi_{\phi}​:high). 而这正好就对应了这两种KL惩罚项的作用对象。因为KL散度不具备对易性,所以一种KL只会对应的去作用于一种情况,而非二者兼备!

简单的说,当旧策略认为某个动作的概率高而新策略认为该动作的概率低时,KL[\pi_{old}(\cdot|x), \pi_{\phi}(\cdot|x)]会对此进行惩罚,但是KL[\pi_\phi(\cdot|x), \pi_{old}(\cdot|x)]却对此视而不见;同样的,当新策略认为某个动作的概率高而旧策略认为该动作的概率低时,KL[\pi_\phi(\cdot|x), \pi_{old}(\cdot|x)]会进行惩罚, 但KL[\pi_{old}(\cdot|x), \pi_{\phi}(\cdot|x)]会对此视而不见。

理解了这一点,我们就明白了KL[\pi_\phi(\cdot|x), \pi_{old}(\cdot|x)]其实比KL[\pi_{old}(\cdot|x), \pi_{\phi}(\cdot|x)]要更加严格且保守的,因为KL[\pi_\phi(\cdot|x), \pi_{old}(\cdot|x)]主要惩罚新策略增加旧策略低概率动作的概率,从而确保新策略保守更新,保持旧策略的高质量特性。相对的,KL[\pi_{old}(\cdot|x), \pi_{\phi}(\cdot|x)]主要惩罚新策略降低旧策略高概率动作的概率,但对新策略增加旧策略低概率动作的概率限制较少。所以说,PPO中的KL[\pi_{old}(\cdot|x), \pi_{\phi}(\cdot|x)]其实是更加鼓励新策略的exploration的,而instruct GPT中的KL[\pi_\phi(\cdot|x), \pi_{old}(\cdot|x)]则更侧重于保留经过监督微调策略的高质量特性,并不鼓励新策略过多的exploration和创新

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

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

相关文章

Jenkins 常用的 Linux 指令

个人名片 &#x1f393;作者简介&#xff1a;java领域优质创作者 &#x1f310;个人主页&#xff1a;码农阿豪 &#x1f4de;工作室&#xff1a;新空间代码工作室&#xff08;提供各种软件服务&#xff09; &#x1f48c;个人邮箱&#xff1a;[2435024119qq.com] &#x1f4f1…

法国工程师IMT联盟 密码学及其应用 2022年期末考试

1 密码学 1.1 问题1 对称加密&#xff08;密钥加密) 1.1.1 问题 对称密钥la cryptographie symtrique和公开密钥有哪些优缺点&#xff1f; 1.1.1.1 对称加密&#xff08;密钥加密)的优缺点 1.1.1.1.1 优点 加解密速度快encrypt and decrypt&#xff1a;对称加密算法通常基于…

不锈钢焊条A022

说明&#xff1a;A022是钛钙型药皮的不锈钢焊条。交直流两用&#xff0c;操作性能良好。熔敷金属有良好的耐热、耐腐蚀及抗裂性能。 用途&#xff1a;用于焊接尿素、合成纤维等设备及相同类型的不锈钢结构&#xff0c;也可用于焊后不能进行热处理的铬不锈钢以及复合钢和异种钢等…

使用 pgbadger 自动填充准备好的语句占位符#PG培训

问题 当某些应用程序使用扩展查询协议/准备好的语句来查询 Postgres&#xff08;出于性能原因&#xff0c;您通常应该这样做&#xff09;并由于某种原因获得查询错误或只是超过“慢查询日志”阈值&#xff08;log_min_duration_statement配置参数&#xff09;时&#xff0c;您…

Kafka(二)Producer第一篇

一&#xff0c;Client开发 生产逻辑需要具备以下几个 步骤&#xff1a; &#xff08;1&#xff09;配置生产者客户端参数及创建相应的生产者实例。 &#xff08;2&#xff09;构建待发送的消息。 &#xff08;3&#xff09;发送消息。 &#xff08;4&#xff09;关闭生产者实例…

字节码编程javassist之打印方法耗时和入参

写在前面 本文看下如何实现打印方法耗时和入参。 1&#xff1a;程序 需要增强的类&#xff1a; public class ApiTest1 {public Integer strToInt(String str01, String str02) {return Integer.parseInt(str01);}}插桩类 package com.dahuyou.javassist.huohuo.aa;import…

基于 V7 FPGA 的4X 100G 光纤加速卡,可应用于基于服务器的光纤通道数据采集、数据传输等场景

4个100G QSFP28 光纤通道PCIE x16 主机接口&#xff0c;支持xdma&#xff0c;支持SG DMA光纤通道支持Aurora等协议标准&#xff0c;最高支持25Gbps/lane2组独立的DDR4 SDRAM 缓存&#xff0c;工作时钟频率1200MHz多路数字离散IO接口高性能时钟管理单元 功能框图 一款基于PCIE总…

easyexcel使用小结-未完待续

官网&#xff1a;https://easyexcel.opensource.alibaba.com/docs/current/ <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>4.0.1</version></dependency>一、读 1.1简单读 Getter…

Vue 与 OpenAI 接口交互实战:发送请求的全流程解析(一)

前言 本文讲解使用vue去搭建一个项目&#xff0c;然后向OpenAI发送请求&#xff0c;并获取数据 文章分为两篇书写&#xff0c;本篇文章侧重于书写API的封装与调用&#xff0c;第二篇文章侧重于页面逻辑的处理 接下来就让我们开始吧! 调用OpenAI的本质是什么&#xff1f; 本…

基于AD8232的心电图套件的测试

基于AD8232的心电图套件的测试 1、测试设备2、电源的选择3、 用于测试心电图套件的模拟心电图电路基本4017B的电路基于multisim的电路仿真基于STM32F103RCT6 参考测试数据 1、测试设备 1、AD8232心电模块 2、手持示波器 3、心电信号模拟发生器 4、NI multisim 14.3 5、实物待补…

关于振动盘正反料下料逻辑编写

写在前文 借鉴某个程序的逻辑套路写的 1.就是第一个料是正方向&#xff0c;第二个料是反方向。 (* 基础逻辑应该都差不多&#xff0c;这个是一个振动盘&#xff0c;振动盘的末端是一个上下对射的感应器&#xff0c;这个感应器的作用是对射感应到物料的到位信号&#xff0c;末端…

java LogUtil输出日志打日志的class文件内具体方法和行号

最近琢磨怎么把日志打的更清晰&#xff0c;方便查找问题&#xff0c;又不需要在每个class内都创建Logger对象&#xff1b;利用堆栈的方向顺序拿到日志的class问题。看效果&#xff0c;直接上代码。 1、demo test 2、输出效果 3、完整的LogUtil文件 import org.jetbrains.anno…

导入项目,JAVA文件是咖啡杯图标

问题 从图中可以看到&#xff0c;JAVA文件是咖啡杯图标 原因 项目没有识别为MAVEN项目 解决办法 进入pom.xml文件&#xff0c;右键点击Add as Maven Project即可

详解Linux的shell脚本基础指令

一、shell简介 是Linux系统的用户界面&#xff0c;它提供用户与内核的一种交互方式。它接收用户输入的命令&#xff0c;并把它送入内核去执行&#xff0c;是一个命令解释器。 脚本&#xff1a;本质是一个文件&#xff0c;文件里面存放的是 特定格式的指令&#xff0c;系统可以…

CC4利用链分析

我的Github主页Java反序列化学习同步更新&#xff0c;有简单的利用链图 分析版本 Commons Collections 4.0 JDK 8u65 环境配置参考JAVA安全初探(三):CC1链全分析 分析过程 在Commons Collections 4.0中&#xff0c;TransformingComparator类变为可序列化类&#xff0c;增…

myeclipse开发ssm框架项目图书管理系统 mysql数据库web计算机毕业设计项目

摘 要 随着计算机的广泛应用&#xff0c;其逐步成为现代化的标志。图书馆的信息量也会越来越大&#xff0c;因此需要对图书信息、借书信息、还书信息等进行管理&#xff0c;及时了解各个环节中信息的变更&#xff0c;要对因此而产生的单据进行及时的处理&#xff0c;为了提高高…

吴恩达老师推荐的大模型分析网站 Artificial Analysis

是吴恩达老师推荐的一个提供各大模型的质量、输出速度、价格对比等多维度分析的网站。 比起 LMSYS Chatbot Arena 或者 HF 上的其他竞技场&#xff0c;它们更注重的输出的质量而这个网站其实更利于我们选择一个合适的大模型 API&#xff0c;强烈安利&#xff01;

千帆大模型平台升级十大能力,企业级 RAG 全面升级

7 月 5 日&#xff0c;2024 世界人工智能大会&#xff08;WAIC&#xff09;期间&#xff0c;百度智能云大模型助力新质生产力发展论坛在在上海世博展览馆举办。会上&#xff0c;百度智能云宣布文心大模型 4.0 Turbo&#xff08;ERNIE 4.0 Turbo&#xff09;面向企业客户全面开放…

人工智能在三级淋巴结:肿瘤浸润淋巴细胞领域的系统研究进展|顶刊速递·24-07-08

小罗碎碎念 本期文献主题&#xff1a;人工智能在三级淋巴结/肿瘤浸润淋巴细胞领域的系统分析 关于三级淋巴结和肿瘤浸润淋巴细胞的文献&#xff0c;会是接下来的分析重点&#xff0c;期间也会穿插临床文献&项目复现的推文。 另外再说点科研道路上的题外话&#xff0c;也算是…

GitLab CI/CD实现项目自动化部署

1 GitLab CI/CD介绍 GitLab CI/CD 是 GitLab 中集成的一套用于软件开发的持续集成&#xff08;Continuous Integration&#xff09;、持续交付&#xff08;Continuous Delivery&#xff09;和持续部署&#xff08;Continuous Deployment&#xff09;工具。这套系统允许开发团队…