从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和创新

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

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

相关文章

【微信小程序知识点】手机号验证组件

手机验证组件&#xff0c;用于帮助开发者向用户发起手机号申请&#xff0c;必须经过用户同意后&#xff0c;才能获得由平台验证后的手机号&#xff0c;进而为用户提供相应的服务。 手机号验证组件分为两种&#xff1a;手机号快速验证组件以及手机号实时验证组件。 1.手机号快速…

【微信小程序知识点】自定义构建npm

在实际开发中&#xff0c;随着项目的功能越来越多&#xff0c;项目越来越复杂&#xff0c;文件目录也变得很繁琐&#xff0c;为了方便进行项目的开发&#xff0c;开发人员通常会对目录结构进行优化调整&#xff0c;例如&#xff1a;将小程序源码放到miniprogram目录下。 &…

Portainer工具

Portainer是一款免费、开源的Docker的图形化管理工具&#xff0c;其能够提供状态显示面板、应用模板快速部署、容器镜像网络数据卷的基本操作&#xff08;包括上传下载镜像&#xff0c;创建容器等操作&#xff09;、事件日志显示、容器控制台操作、Swarm集群和服务等集中管理和…

Macos 远程登录 Ubuntu22.04 桌面

这里使用的桌面程序为 xfce, 而 gnome 桌面则测试失败。 1,安装 在ubuntu上&#xff0c;安装 vnc server与桌面程序xfce sudo apt install xfce4 xfce4-goodies tightvncserver 2&#xff0c;第一次启动和配置 $ tightvncserver :1 设置密码。 然后修改配置&#xff1a…

JVM 之对象的结构与创建

1.对象的创建 1.1类加载 当Java 虚拟机遇到一条字节码 new 指令时&#xff0c;首先将去检查这个指令的参数是否能在常量池中定位到 一个类的符号引用&#xff0c;并且检查这个符号引用代表的类是否已被加载、解析和初始化过。如果没有&#xff0c;那 必须先执行相应的类加载过…

C# .net6使用Hangfire

首先我们先来了解什么是Hangfire&#xff1f; Hangfire 是一个用于 .NET 的任务调度库&#xff0c;允许你在后台运行任务&#xff0c;而不需要依赖外部的任务队列服务或复杂的基础设施。它简化了后台任务的创建、调度和管理过程&#xff0c;使得在 .NET 应用程序中处理长期运行…

【系统架构设计】操作系统(一)

操作系统&#xff08;一&#xff09; 操作系统的类型和结构操作系统基本原理进程管理进程三态模型挂起状态进程互斥 / 进程同步前趋图进程调度死锁 存储管理设备管理文件管理作业管理 操作系统原理的关键在于“一个观点、两条线索”&#xff1a;一个观点是以资源管理的观点来定…

【算法笔记自学】第 9 章 提高篇(3)——数据结构专题(2)

9.1树与二叉树 #include <cstdio>int main() {int n, m;scanf("%d%d", &n, &m);printf(n m 1 ? "Yes" : "No");return 0; } 9.2二叉树的遍历 #include <cstdio> #include <vector> using namespace std;const int…

Java毕业设计 基于SSM vue电影订票系统小程序 微信小程序

Java毕业设计 基于SSM vue电影订票系统小程序 微信小程序 SSM 电影订票系统小程序 功能介绍 用户 登录 注册 忘记密码 首页 图片轮播 电影信息 电影详情 评论 收藏 预订 电影资讯 资讯详情 用户信息修改 电影评价 我的收藏管理 用户充值 在线客服 我的订单 管理员 登录 个人…

SpringCloud集成kafka集群

目录 1.引入kafka依赖 2.在yml文件配置配置kafka连接 3.注入KafkaTemplate模版 4.创建kafka消息监听和消费端 5.搭建kafka集群 5.1 下载 kafka Apache KafkaApache Kafka: A Distributed Streaming Platform.https://kafka.apache.org/downloads.html 5.2 在config目录下做…

全渠道AI智能商品管理软件平台 助力零售品牌占领技术高地

关于7thonline第七在线 1999年创立于纽约&#xff0c;7thonline第七在线全渠道AI智能商品管理平台&#xff0c;以先进的数学算法模型、人工智能和机器学习技术为核心驱动力&#xff0c;融合了众多零售商品管理的卓越实践经验&#xff0c;精心打造出一套深度适配零售业务场景的自…

[每周一更]-(第105期):SSL证书过期后引发的DNS缓存问题

问题回顾&#xff1a; ​ 上班路上收到ZeroSSL邮件通知我们清点项目的SSL证书到期了&#xff0c;到公司还是登录网址查看信息&#xff0c;一看果然是7.10也就是今天到期&#xff0c;开始看下acme.sh的定制任务为何没生效&#xff0c;一看crontab脚本&#xff0c;日志任务丢垃圾…

tomcat和nginx实现动静分离

访问nginx就是静态页面&#xff0c;nginx代理index.jsp可以访问tomcat的动态页面。 实验 1、设备以及IP地址 nginx1 192.168.10.41 tomcat1 192.168.10.51 tomcat2 192.168.10.52 2、tomcat1 的配置 创建动态页面 cd /usr/local/tomcat/webapps 创建一个目录作为一个ser…

复现ORB3-YOLO8项目记录

文章目录 1.编译错误1.1 错误11.2 错误21.3 错误31.4 错误4 1.编译错误 首先ORB-SLAM相关项目已经写过很多篇博客了&#xff0c;从ORB-SLAM2怎么运行&#xff0c;再到现在的项目。关于环境已经不想多说了 1.1 错误1 – DEPENDENCY_LIBS : /home/lvslam/ORB3-YOLO8/Thirdparty…

Feature Alignment and Uniformity for Test Time Adaptation--论文笔记

论文笔记 资料 1.代码地址 https://github.com/SakurajimaMaiii/TSD 2.论文地址 https://arxiv.org/abs/2303.10902 3.数据集地址 论文摘要的翻译 TTA在接收训练分布外的测试域样本时对深度神经网络进行自适应。在这样设置下&#xff0c;模型只能访问在线未标记的测试样…

昇思MindSpore学习总结十五 ——基于Mindspore 实现BERT对话情绪识别

1、环境配置 根据实际情况&#xff0c;选择合适版本。 %%capture captured_output # 实验环境已经预装了mindspore2.2.14&#xff0c;如需更换mindspore版本&#xff0c;可更改下面mindspore的版本号 !pip uninstall mindspore -y !pip install -i https://pypi.mirrors.ustc…

MYSQL--第七次作业

MYSQL–第七次作业 在product表上创建三个触发器。每次激活触发器后&#xff0c;都会更新operate表。product表和表的内容如下 Product表内容 字段名 字段描述 数据类型 主键 外键 非空 唯一 自增 Id 产品编号 Int(10) 是 否 是 是 否 Name …

torch之从.datasets.CIFAR10解压出训练与测试图片 (附带网盘链接)

前言 从官网上下载的是长这个样子的 想看图片&#xff0c;咋办咧&#xff0c;看下面代码 import torch import torchvision import numpy as np import os import cv2 batch_size 50transform_predict torchvision.transforms.Compose([torchvision.transforms.ToTensor(),…

echarts解决数据差异过大的问题

问题描述 使用echarts折线图和柱状图展示数据时&#xff0c;如果数据差异值较大&#xff0c;会导致显示图形差异过大&#xff0c;图表不美观。 如这一组数据[2000000, 200, 0.1, 20, 0, -10, -3000]&#xff0c;渲染出来的效果如下图&#xff1a; 可以看到由于最大值和最小值差…

几何距离与函数距离:解锁数据空间中的奥秘

几何距离&#xff1a;直观的空间度量 几何距离&#xff0c;顾名思义&#xff0c;是我们在几何学中熟悉的距离概念&#xff0c;如欧几里得距离、曼哈顿距离和切比雪夫距离等。这些距离度量直接反映了数据点在多维空间中的位置关系。 欧几里得距离&#xff1a;最为人熟知的几何距…