PbRL | Christiano 2017 年的开山之作,以及 Preference PPO / PrefPPO
PrefPPO 首次(?)出现在 PEBBLE,作为 pebble 的一个 baseline,是用 PPO 复现 Christiano et al. (2017) 的 PbRL 算法。
For evaluation, we compare to Christiano et al. (2017), which is the current state-of-the-art approach using the same type of feedback. The primary differences in our method are (1) the introduction of unsupervised pre-training, (2) the accommodation of off-policy RL, and (3) entropy-based sampling. We re-implemented Christiano et al. (2017) using the state-of-the-art on-policy RL algorithm: PPO (Schulman et al., 2017). We use the same reward learning framework and ensemble disagreement-based sampling as they proposed. We refer to this baseline as Preference PPO.
Christiano et al. (2017) 这篇文章的题目是 Deep reinforcement learning from human preferences,发表在 NeurIPS 2017;arxiv:https://arxiv.org/abs/1706.03741 ,GitHub:https://github.com/mrahtz/learning-from-human-preferences(用 TensorFlow 实现的)。
01 论文阅读:Deep reinforcement learning from human preferences
1.1 intro
intro:
- 大规模应用 RL 的限制是,许多任务涉及复杂、定义不明确或难以指定的目标。(举了一些例子)
- 如果有人类 demo(专家数据),可以 inverse RL 或 behavior cloning,但是很多任务难以给出人类 demo,比如控制奇形怪状的 跟人类很不像的机器人。
- 我们的 PbRL 思路:从 human feedback 中学习 reward model,当作 RL 中的奖励函数。这可以解决上面的两个问题,允许 non-expert user 来给 feedback,并且(据论文说)可以节省一个数量级的 feedback 数量。
- human feedback 的形式:让 human 看两段 video,指出哪一段更好(即 preference)。
Related Work:
- 列举了很多从 human 打分或排序中学 RL 的工作。还有一些工作在 RL 之外的 setting 使用 preference。
- Akrour 2012 和 2014 年的工作,貌似也算是 PbRL,但他们的方法是在整个 trajectory 上打 preference,不像我们只需要比较两个较短的 video segment。
- Akrour 2012:April: Active preference learning-based reinforcement learning. Joint European Conference on Machine Learning and Knowledge Discovery in Databases(好像是 ECML PKDD,不知道是什么概念)2012。
- Akrour 2014:Programming by feedback. ICML 2014。
- 从 feedback 里学 reward model 的方法,貌似跟 Wilson et al. (2012)工作比较像。
- Wilson et al. (2012):A Bayesian approach for policy learning from trajectory preference queries. NeurIPS 2012。
1.2 Method
首先介绍了一下 PbRL 的 setting:
- 定义 segment \(\sigma = ((s_0, a_0), ... (s_{k-1}, a_{k-1}))\) ,是长为 k 的轨迹段。
- 定义 preference \(\sigma_0\succ\sigma_1\) 表示轨迹段 σ0 比 σ1 更好。接下来,我们用这些 preference 数据学出 reward model。
然后是 method:(发现这篇文章好像没给伪代码)
- 我们要维护一个 reward model \(\hat r\),和一个 policy \(\pi\) 。
- 大概重复这样的过程:
- 用目前的 policy \(\pi\) 生成 query \((\sigma_0,\sigma_1)\) ;
- 把 query 给 human 比较得到 preference 数据;
- 用新 preference 数据学 reward model;
- 把 reward model 当作奖励函数,去学 RL、更新 policy \(\pi\) 。
① 把 reward model 当作奖励函数,去学 RL、更新 policy \(\pi\) :
- 论文声称 \(\hat r\) 可能是非平稳的(因为 reward model 一直在更新),所以他们想用 policy gradient 方法,因为 policy gradient 方法对奖励函数具有鲁棒性。
- 他们用 A2C(advantage actor-critic)做 Atari,用 TRPO 做 MuJoco。调整了 TRPO 的 entropy bonus,MuJoCo 的 swimmer 任务使用 0.001 的 entropy bonus,其他任务使用 0.01 的 entropy bonus。
- 把 reward model 产生的 \(\hat r\) 归一化到 0 均值 1 标准差。
② 用目前的 policy \(\pi\) 生成 query \((\sigma_0,\sigma_1)\):
- preference 数据的形式是 \((\sigma_0,\sigma_1, p)\),其中 p 是一个 {0,1} 上的分布。
- 如果 human 能打出 preference,那么 p = 0 或 1。如果 human 分不出来,则 p 是 01 上的均匀分布。如果 human 感觉 query 是不可比的,那么不会使用这个 query 学 reward model。
③ 用新 preference 数据学 reward model:
我们使用 Bradley-Terry model 来建模 \(\hat r\) 和 preference 之间的关系:
- \[\hat P[\sigma_0\succ \sigma_1] = \frac{\exp\sum\hat r(s_t^0,a_t^0)}
{\exp\sum\hat r(s_t^0,a_t^0) + \exp\sum\hat r(s_t^1,a_t^1)} ~~.
\tag{1}
\] 然后,我们去优化 cross-entropy loss:
- \[L(\hat r) = -\sum_{(\sigma_0,\sigma_1,p)} \left(
p(0)\log \hat P[\sigma_0\succ \sigma_1] + p(1)\hat P[\sigma_1\succ \sigma_0]\right)
\tag{2}
\] (以上流程已经变成经典的 PbRL 做法)
他们还加了三个小 trick:
- 对 reward model 进行 ensemble,学 n 个独立的 reward model,用它们每个人单独归一化后的值 取平均 作为 \(\hat r\) 的值。
- 把一部分 preference 数据拿出来做验证集,以调整神秘的 L2 正则化的权重参数,并添加神秘 dropout,以避免 reward model 过拟合(?)
- label smoothing(?)貌似是当 human 打出 p = 0 的时候,认为 p = 0 的概率是 0.95,p = 1 的概率是 0.05。
query selection:
- 即,我们现在有很多 trajectory,要从里面截出 segment、组成 segment pair,作为 query 送给人去比较。应该如何选取 segment pair 作为 query?
- 这里使用了基于 disagreement 的 query selection,貌似是让每个 reward model 给出 \(\hat P[\sigma_0\succ \sigma_1]\) 的值,计算这些值的方差,然后选一个方差最大的 query。
1.3 实验结果
算法是在 TensorFlow 中写的。Github:https://github.com/mrahtz/learning-from-human-preferences(貌似不是官方代码…)
- preference 一些是人类打的,另一些是 scripted teacher 打的。
- Appendix B 中有让人类打 preference 的一些 prompt,感觉很有趣。
- scripted teacher:上面公式 (1) 中用任务的真 reward 替换 \(\hat r\),反向生成 preference。
- MuJoCo 实验中,分别使用真 reward、1400 700 350 个 scripted teacher queries、和 750 个 human queries。
- (个人理解,这里的 750 human queries 包含的 label 少于 750 个,因为人类认为不可比的 query 应该会直接扔掉)
- MuJoCo 实验中,很多 task 都做了 1e7 步,相比 pebble 来说学的很慢;pebble 1e6 步就能学出来。
- Atari 实验中,分别使用真 reward、10k 5.6k 3.3k 个 scripted teacher queries、和 5.5k 个 human queries。(好多 human label…… 这要打好久好久;如此充足的实验,真是 solid work 呀)
- 这些实验没有得出 human label 比 scripted teacher 好用的结论,论文说,可能是因为 human 犯错、不同 human 的打标签准则不一样等原因。
- 一些 Appendix A 里的实验细节:
- 有些环境会提前结束 episode,比如当 agent 倒下、死亡或到达目的地(?)他们声称这种 done 信号可能会提供 task 信息,因此魔改了环境,规避掉了 episode 长度可变的情况(?)使得 agent 死亡时得到一个大惩罚,或者 agent 到达目的地的时候直接 reset env 而不 done(?)
- 在 MuJoCo 中,在实验开始前直接用随机 policy 打 25% 的 queries,然后以一个随时间递减的 rate 来打 preference;segment length = 15 - 60,取决于具体 task。
- 在 Atari 中,reward model 和 policy 的输入是一样的,都是一个处理图像的卷积网络(无端联想,听说 DPO 的主要贡献是可以省掉 LLM RLHF 的 reward model,因为 reward model 应该跟 policy 一样大,所以省掉它可以节约很多显存)。
- Atari 其实跑的是 A3C,在实验开始前打 500 个 query,segment length = 25。
- 3.2 节还在 MuJoCo 里学习了 hopper 后空翻的 novel behavior,据文章说,可以保证后空翻后 hopper 脚着地。使用 900 个 human query 学习的。3.2 节还有其他的 novel behavior。
- 3.3 节做了非常充分的 ablation study。发现 segment 长度 = 1 貌似会性能变差,reward model 不加正则化影响不大,把 query selection 改成随机好像也影响不大,以及,最好边更新 policy 边拿最新轨迹打 preference。
02 PEBBLE 中的 PrefPPO 实现
PEBBLE 中的 PrefPPO 实现,直接魔改了 stable_baselines3 的 PPO 模型;他们写了一个叫做 PPO_REWARD 的新类,把所有跟 reward model 的交互都封装到 model.learn() 函数里了。
2.1 reward model 如何构建
跟 pebble 的 reward model 一样。
如果 state 和 action 都是了连续的(比如普通的 cheetah walker),那么就把 state 和 action concat 起来,作为 reward model 的输入。
如果 state 是图像,action 是离散的(比如 Christiano 2017 论文中的 Pong 环境),那么(按照 Christiano 2017 复现代码),…… 好像直接拿 state 图像来算 reward 了,没有 concat 一个 one-hot action 或者数值 action。
2.2 PPO_REWARD 的 model.learn()
PPO 的大概流程:收集 rollout → 计算 rollout 的 advantage 之类 → 计算 loss 并 backward → 收集新 rollout…
在收集 rollout 的过程中,PrefPPO 把要收集的真实 task reward 替换成了 \(\hat r\) ,并把 rollout 数据都添加到 query 的备选中。
在收集 rollout 前后,貌似都有调用 learn_reward() 函数来训练 reward model,这个函数首先收集 query,然后拿收集的 query 学习 reward model。跟 pebble 基本一样。
PbRL | Christiano 2017 年的开山之作,以及 Preference PPO / PrefPPO的更多相关文章
- 这部分布式事务开山之作,凭啥第一天预售就拿下当当新书榜No.1?
大家好,我是冰河~~ 今天,咱们就暂时不聊[精通高并发系列]了,今天插播一下分布式事务,为啥?因为冰河联合猫大人共同创作的分布式事务领域的开山之作--<深入理解分布式事务:原理与实战>一书 ...
- [3] ScanRefer论文精读 3DVisual Grounding开山之作
论文名称:ScanRefer: 3D Object Localization in RGB-D Scans using Natural Language 这篇文章最主要的工作,我觉得是两个,第一,提出 ...
- 论文翻译——R-CNN(目标检测开山之作)
R-CNN论文翻译 <Rich feature hierarchies for accurate object detection and semantic segmentation> 用 ...
- 【论文考古】联邦学习开山之作 Communication-Efficient Learning of Deep Networks from Decentralized Data
B. McMahan, E. Moore, D. Ramage, S. Hampson, and B. A. y Arcas, "Communication-Efficient Learni ...
- 【转】DPM--对象检测开山之作
本文非原创,原文转载自:http://blog.csdn.net/ttransposition/article/details/12966521 DPM(Deformable Parts Model) ...
- SRcnn:神经网络重建图片的开山之作
% ========================================================================= % Test code for Super-Re ...
- 【神经网络与深度学习】【计算机视觉】RCNN- 将CNN引入目标检测的开山之作
转自:https://zhuanlan.zhihu.com/p/23006190?refer=xiaoleimlnote 前面一直在写传统机器学习.从本篇开始写一写 深度学习的内容. 可能需要一定的神 ...
- Web信息架构——设计大型网站(第3版)(久负盛名经典再现,信息架构设计领域基石之作!)
Web信息架构——设计大型网站(第3版)(久负盛名经典再现,信息架构设计领域基石之作!) [美]]Peter Morville(彼得·莫维尔) Louis Rosenfeld(路易斯·罗森菲尔德) ...
- CNN网络架构演进:从LeNet到DenseNet
卷积神经网络可谓是现在深度学习领域中大红大紫的网络框架,尤其在计算机视觉领域更是一枝独秀.CNN从90年代的LeNet开始,21世纪初沉寂了10年,直到12年AlexNet开始又再焕发第二春,从ZF ...
- CVPR2018: Unsupervised Cross-dataset Person Re-identification by Transfer Learning of Spatio-temporal Patterns
论文可以在arxiv下载,老板一作,本人二作,也是我们实验室第一篇CCF A类论文,这个方法我们称为TFusion. 代码:https://github.com/ahangchen/TFusion 解 ...
随机推荐
- Kafka Topic 中明明有可拉取的消息,为什么 poll 不到
开心一刻 今天小学女同学给我发消息她:你现在是毕业了吗我:嗯,今年刚毕业她给我发了一张照片,怀里抱着一只大橘猫她:我的眯眯长这么大了,好看吗我:你把猫挪开点,它挡住了,我看不到她:你是 sb 吗,滚我 ...
- ggml 简介
ggml 是一个用 C 和 C++ 编写.专注于 Transformer 架构模型推理的机器学习库.该项目完全开源,处于活跃的开发阶段,开发社区也在不断壮大.ggml 和 PyTorch.Tensor ...
- docker 命令 报错device or resource busy
背景: docker-compose up -d 运行容器报错:failed to remove root filesystem for xxx: remove /var/lib/docker/dev ...
- 在 Web 中判断页面是不是刷新
在 Web 开发中,我们经常需要区分用户是否通过刷新操作重新加载了页面.这一操作可能是由用户手动刷新(如按下 F5 键或点击浏览器刷新按钮)或通过浏览器自动重新加载.判断页面是否刷新有助于开发者优化用 ...
- 合合信息扫描全能王发布“黑科技”,让AI替人“思考”图像处理问题
现阶段,手机扫描正越来越多地进入到人们的生活中.随着扫描应用场景的不断拓宽,诸多细节的问题逐渐显露,比如使用者在拍照扫描文档时,手指不小心"入镜"了,只能重拍:拍电脑屏幕时,画面上 ...
- HTML & CSS – Responsive Image 响应式图片 (完整版)
前言 之前就有写过关于 Retina 和 Responsive Image 响应式图片 (responsive image) Retina 显示屏 但写的太烂了, 所以有了后来的 屏幕, 打印, 分辨 ...
- SelMatch:最新数据集蒸馏,仅用5%训练数据也是可以的 | ICML'24
数据集蒸馏旨在从大型数据集中合成每类(IPC)少量图像,以在最小性能损失的情况下近似完整数据集训练.尽管在非常小的IPC范围内有效,但随着IPC增加,许多蒸馏方法变得不太有效甚至性能不如随机样本选择. ...
- 如何关闭每次打开启动软件前的弹窗(用户账户控制)你要允许此应用.WIN11、10、7
1.先点击任务栏内的搜索,输入"控制面板",然后点开 2.然后在右上角输入"更改用户",然后在下方点击"更改用户账户控制设置" 3.然后把& ...
- 《Vue.js 设计与实现》读书笔记(1-3章)
第 1 章.权衡的艺术 命令式 or 声明式 命令式:关注过程 声明式:关注结果 声明式直接声明想要的结果,框架帮用户封装好命令式的代码,所以在封装的过程中要做一些其他的事情来(生成要做的事情/找出差 ...
- 对于ChannelNet的一点理解
主要是为了个人理解,做个笔记 1.Pytorch代码 2.论文出处 3.详细介绍 这篇论文在2018年发出来,而ShuffleNet是从2017年由旷视发出来.起初了解shufflenet的提出,主要 ...