首页 > 其他分享 >RIME:用交叉熵 loss 大小分辨 preference 是否正确 + 内在奖励预训练 reward model

RIME:用交叉熵 loss 大小分辨 preference 是否正确 + 内在奖励预训练 reward model

时间:2024-07-25 16:21:26浏览次数:16  
标签:loss PbRL 样本 RIME preference model reward mathrm


0 abstract

Preference-based Reinforcement Learning (PbRL) circumvents the need for reward engineering by harnessing human preferences as the reward signal. However, current PbRL methods excessively depend on high-quality feedback from domain experts, which results in a lack of robustness. In this paper, we present RIME, a robust PbRL algorithm for effective reward learning from noisy preferences. Our method utilizes a sample selection-based discriminator to dynamically filter out noise and ensure robust training. To counteract the cumulative error stemming from incorrect selection, we suggest a warm start for the reward model, which additionally bridges the performance gap during the transition from pre-training to online training in PbRL. Our experiments on robotic manipulation and locomotion tasks demonstrate that RIME significantly enhances the robustness of the state-of-the-art PbRL method. Code is available at https://github.com/CJReinforce/RIME_ICML2024.

  • background 和 gap:基于偏好的强化学习 (PbRL) 通过利用人类偏好作为奖励信号,来规避奖励工程的需求。然而,目前的 PbRL 方法过度依赖专家的高质量反馈,导致缺乏鲁棒性。
  • method:在本文中,我们介绍了 RIME,这是一种鲁棒的 PbRL 算法,用于从嘈杂的偏好中有效地进行奖励学习。
    • 1 利用一个基于样本选择的鉴别器(discriminator),动态过滤噪声,确保鲁棒训练。
    • 2 为了抵消因错误选择而产生的累积误差(?),提出 reward model 的热启动(warm start),这进一步弥合了 PbRL 中的 pretrain → 正式训练 的性能差距。
  • 实验:在机器人操作(Meta-world)和运动任务(DMControl)上的实验表明,RIME 显著增强了最先进的 PbRL 方法(指 pebble)的稳健性。

1 intro

  • background:PbRL 省去 reward engineering,PbRL 好。
  • gap 1:PbRL 假设 preference 都是专家打的、没有错误,但人类是容易犯错的。
  • gap 2:从 noisy 的标签中学习,也称为鲁棒训练。
    • Song et al. ( 2022) 将鲁棒训练方法分为四个关键类别:鲁棒架构 (Cheng et al., 2020)、鲁棒正则化 (Xia et al., 2020)、鲁棒损失设计 (Lyu & Tsang, 2019) 和样本选择 (Li et al., 2020;Song 等人,2021 年)。
    • 然而,把它们整合到 PbRL 中很难,貌似因为 1 需要大量样本,而 PbRL 的 feedback 数量(我们常跑的几个 benchmark)最多几万;2 RL 训练期间有 distribution shift,破坏了 i.i.d(独立同分布)输入数据的假设,这是支持稳健训练方法的核心原则。
  • 我们提出了 RIME(Robust preference-based reInforcement learning via warM-start dEnoising discriminator),据他们生成是第一个研究 PbRL noisy label 的工作(?)
  • 主要方法:
    • 1 使用一个 discriminator,用一个阈值找到认为正确的样本 \(\mathcal D_t\),再用一个阈值找到 看起来很错误的样本 \(\mathcal D_f\),将其翻转,最后我们使用的样本是 \(\mathcal D_t \cup\mathcal D_f\) 。
    • 具体的,这里的阈值是交叉熵 loss,有一个理论,感觉很 intuitive,是好工作ww
    • 2 用预训练的 intrinsic reward,初始化训一下 reward model。
    • 具体的,要在预训练时就归一化 intrinsic reward 到 (-1,1),这是因为 reward model 一般采用 tanh 做激活函数,而 tanh 的输出是 (-1,1)。
  • PbRL。
  • learning from noisy labels:
    • 把 intro 的介绍又说了一遍。
    • 提到,在 PbRL 背景下,Xue 等人(2023 年)提出了一种编码器-解码器架构,来模拟不同的人类偏好,但是相比 RIME 的工作,大概需要 100 倍的 preference 数量。
  • Policy-to-Value Reincarnating RL(PVRL):
    • Reincarnate:vt,使投胎、转世、赋予新形体。
    • PVRL,指将次优的 teacher policy 转移到一个 value-based 的 student RL agent(Agarwal 等人,2022 年)。
    • 启发:Uchendu et al. ( 2023) 发现,PVRL 中随机初始化的 Q 网络,会导致 teacher policy 很快被遗忘。
    • gap:在广泛采用的 PbRL pipeline 中,PVRL 挑战也出现在从 pretrain 到 online training 的过渡过程中,但在以前的研究中被忽视了。在 noisy feedback 下,忘记预训练策略的问题变得更加重要,详见第 4.2 节。
    • (这里的预训练指的是 pebble 等工作的 比如说 最大熵预训练策略。
    • 引出 reward model 的热启动。

3 preliminaries

  • PbRL。
  • Unsupervised Pre-training in PbRL:讲了 pebble 的预训练。
  • Noisy Preferences in PbRL:讲了 BPref 的模仿人类 scripted teacher,使用 error teacher。

4 method: RIME

4.1 RIME 的 denoising discriminator

  • 省流:用各个 (σ0, σ1, p) 的 CELoss 大小,来判断它是正确 / 错误样本,并翻转所有错误样本的 p。
  • 为什么用交叉熵 loss 来判断 是 正确 / 错误样本?
    • 现有研究表明,深度神经网络首先学习可泛化的模式,然后再过度拟合数据中的噪声(Arpit et al., 2017; Li 等人, 2020 年)。
    • 因此,将与较小损失相关的 sample 优先为正确样本,是提高稳健性的有充分依据的方法。(其实没太理解)
  • 回顾 交叉熵与 KL 散度的关系
  • 如何确定交叉熵 loss 的阈值?
    • 定理 4.1,假设干净数据的 x 交叉熵 loss 以 ρ 为界,即 \(\mathcal L^\text{CE}(x)\le\rho\) ;则有,损坏样本 x 的预测偏好 \(P_\psi(x)\) ,和 \(\tilde y(x)=1-y\) 之间的 KL 散度,下限为 \(D_{\mathrm{KL}}(\tilde{y}(x)\parallel P_{\psi}(x))\geq-\ln\rho+\frac{\rho}{2}+O(\rho^{2})\) 。
    • 然后,我们制定 KL 散度阈值的下限 \(\tau_\text{base}=\ln \rho+\alpha\rho\),以过滤掉不可信样本。其中,\(\rho\) 表示上次更新期间观察到的 可信样本的最大交叉熵 loss,\(\alpha\in(0,0.5]\) 是可调的超参数。
    • 但是还要考虑 distribution shift 问题。为了在 distribution shift 的情况下,增加对干净样本的 tolerance,我们引入一个辅助项 \(\tau_\text{unc}=\beta_t\cdot s_\mathrm{KL}\) ,来表征过滤的不确定性,其中 \(\beta_t=\max(\beta_\min,\beta_\max-kt)\) 是随时间变化的参数(β max = 3, β min = 1), \(s_\mathrm{KL}\) 是 KL 散度的标准差(看起来是 \(D_{\mathrm{KL}}(\tilde{y}(x)\parallel P_{\psi}(x))\) 的 KL 散度)。这里的 intuition 是,训到 OOD 数据可能导致 CELoss 的波动(其实也没太听懂)
  • 识别可信样本的数据集: \(D_t=\{(\sigma^0,\sigma^1,\tilde{y}) | D_{\mathrm{KL}}(\tilde{y}\parallel P_\psi(\sigma^0,\sigma^1))<\tau_{\mathrm{lower}}\}\) ,其中 \(\tau_{\mathrm{lower}}=\tau_{\mathrm{base}}+\tau_{\mathrm{unc}}=-\ln\rho+\alpha\rho+\beta_{t}\cdot s_{\mathrm{KL}}\) 。
  • 识别不可信样本的数据集: \(D_f=\{(\sigma^0,\sigma^1,\tilde{y}) | D_{\mathrm{KL}}(\tilde{y}\parallel P_\psi(\sigma^0,\sigma^1))>\tau_{\mathrm{upper}}\}\) , \(\tau_{\mathrm{upper}}\) 貌似是预先定义的值,定义成 \(3\ln(10)\) 了。 然后翻转 Df,将翻转后的 Df 与 Dt 并起来,拿去训 reward model。

4.2 reward model 的 warm start

  • 省流:用 intrinsic reward 训一下 reward model。
  • 观察:
    • 观察到在从预训练到在线训练的过渡过程中,性能显著下降(见图 2)。在 noisy feedback的 setting 下,这种差距是可以明显观察到的,并且对鲁棒性是致命的。
    • 在预训练后,PEBBLE 会重置 Q 网络,仅保留预训练的 policy。由于 Q 网络学的是最小化 noisy feedback 的 reward model 下的 TD-error,因此这种 biased Q 函数会导致 policy 学的不好,从而抹去预训练期间的收益。
  • reward model 的 warm start:
    • 具体来说,我们在预训练阶段,先拿 intrinsic reward 训一下 reward model。
    • 由于 reward model 的输出层通常使用 tanh 激活函数(Lee et al., 2021b),因此我们首先将内在奖励归一化到 (-1,1),使用当前已获得的 intrinsic reward 的 mean \(\hat r\) 和 variance \(\sigma_r\) 来做: \(r_{\mathrm{norm}}^{\mathrm{int}}(\mathbf{s}_t)=\mathrm{clip}(\frac{r^{\mathrm{int}}(\mathbf{s}_t)-\hat r}{3\sigma_r},-1+\delta,1-\delta)\) 。
    • 预训练 reward model 的数据,貌似就是 \((s_t,a_t,r_{\mathrm{norm}}^{\mathrm{int}},s_{t+1})\) ,而不是用 segment 的形式。(这里提到一个最近邻,我没太看懂w)

4.3 整体算法流程

在附录 A 放了伪代码。在附录 A 放伪代码,真是好文明。

关键点:

  • 预训练与 reward model 的 warm start:
    • 第 5 行,收集的 intrinsic reward 是归一化过的。
    • 第 10 行,训 reward model 用的是 \(r_{\mathrm{norm}}^{\mathrm{int}}\) 与 \(\hat r\) 的 MSE,而非 segment。
  • 鉴别错误 preference 的 denoising discriminator:
    • 第 13 行,初始化 ρ 为正无穷。
    • 第 19 行,算 辨别可信样本的阈值 τ lower。
    • 第 24 行,用 可信样本 ∪ 错误样本翻转 的数据集,来算新 ρ,其中 ρ 是 KL 散度的下界。

5 experiments

  • setting:跟 pebble 一样,三个 DMControl + 三个 Meta-world。
  • baselines: pebblesurfrune、MRN(MRN 我还没看)。
  • error rate(即随机挑选 (σ0,σ1,p) 并翻转 p 的概率)是 0.1 到 0.3。
  • 大量 ablation:
    • 在 Appendix D.3 尝试了更多种 noisy teacher,放在正文的表比的是 各种 noisy teacher 的 average。
    • 与其他稳健的训练方法的比较:自适应去噪训练 (ADT)(Wang 等人,2021 年),即丢弃一定比例的 CELoss 大的样本,貌似效果不错;使用 MAE 和 t-CE 作为替代 CELoss(?)的损失函数;使用标签平滑 (LS)来处理所有 preference label(?)。
    • 居然有真 human,见 Appendix D.4。总反馈量和每个会话的反馈量分别为 100 和 10。任务是 hopper 后空翻(真假的,这么好学(?)难道 hopper 后空翻是一个 只要控制变量拉到极限 就能一直后空翻 的任务嘛)。但是怎么截图变成了 OpenAI gym 而非 DMControl。
    • 增加 feedback 总数,可以有效提升性能。
    • 各个模块是否有效?当反馈数量相当有限时(即,在Walker-walk上),热启动对于鲁棒性至关重要,可以节省 query 数量。


标签:loss,PbRL,样本,RIME,preference,model,reward,mathrm
From: https://www.cnblogs.com/moonout/p/18323447

相关文章

  • 利用预计算列表的“is_prime”函数
    我实现了一个函数is_prime,它首先检查一个数字是否在前1000个素数的预先计算列表中。如果该数字不在列表中,则会执行其他检查以确定该数字是否为素数。这种方法旨在优化内存使用和执行时间之间的平衡。我的问题是:这是一个好方法吗?defis_prime(num):frommath......
  • 熵,交叉熵,Focalloss
    https://zhuanlan.zhihu.com/p/149186719香农首次提出熵的定义,目的寻找一种高效/无损地编码信息的方法:以编码后数据的平均长度来衡量高效性,平均长度越小越高效;同时还需满足“无损”的条件,即编码以后不能呢个有原始信息的丢失。所以熵的定义是:无损编码事件信息的最小平均编码长度......
  • Binary Cross Entropy(BCE) loss function
    二分分类器模型中用到的损失函数原型。该函数中,预测值p(yi),是经过sigmod激活函数计算之后的预测值。log(p(yi)),求对数,p(yi)约接近1,值越接近0.后半部分亦然,当期望值yi为0,p(yi)越接近1,则1-p(yi)约接近0.在pytorch中,对应的函数为torch.nn.BCELossWithLogits和torch.nn......
  • PyTorch LSTM 模型上的 CrossEntropyLoss,每个时间步一分类
    我正在尝试创建一个LSTM模型来检测时间序列数据中的异常情况。它需要5个输入并产生1个布尔输出(如果检测到异常则为True/False)。异常模式通常连续3-4个时间步长。与大多数LSTM示例不同,它们预测未来数据或对整个数据序列进行分类,我尝试在每个时间步输出True/False检......
  • 常用损失函数 LossFunction
    文章结构损失函数在神经网络中的位置常用的损失函数(结构:解释,公式,缺点,适用于,pytorch函数)MAE/L1LossMSE/L2LossHuberLoss对信息量、熵的解释relativeentropy相对熵/Kullback-LeiblerKLLoss CrossEntropyLoss交叉熵(包含对softmax层的解释)相对熵、熵、和交叉......
  • SharedPreferences 和 MMKV 是何方神圣
    一、概述SharedPreferences和MMKV都是Android平台保存本地数据的工具,用于保存一些常用配置。二、SharedPreferences1.类似Map集合,将Key-Value对存储于硬盘上的XML文件,以XML文件的形式保存在/data/data/包名/shared_prefs目录下。数据较多时会有性能问题。2.SharedPrefe......
  • PyTorch 中 loss.grad_fn 解释
    在PyTorch中,loss.grad_fn属性是用来访问与loss张量相关联的梯度函数的。这个属性主要出现在使用自动微分(automaticdifferentiation)时,特别是在构建和训练神经网络的过程中。当你构建一个计算图(computationalgraph)时,PyTorch会跟踪所有参与计算的操作(比如加法、乘法、激活函数等),......
  • c++ primer plus 第16章string 类和标准模板库,16.2.1 使用智能指针
    c++primerplus第16章string类和标准模板库,16.2.1使用智能指针c++primerplus第16章string类和标准模板库,16.2.1使用智能指针文章目录c++primerplus第16章string类和标准模板库,16.2.1使用智能指针16.2.3uniqueptr为何优于autoptr16.2.3unique......
  • c++ primer plus 第16章string 类和标准模板库,16.2.2 有关智能指针的注意事项
    c++primerplus第16章string类和标准模板库,16.2.2有关智能指针的注意事项c++primerplus第16章string类和标准模板库,16.2.2有关智能指针的注意事项文章目录c++primerplus第16章string类和标准模板库,16.2.2有关智能指针的注意事项16.2.2有关智能指针的......
  • 模型训练中出现loss为NaN怎么办?
    文章目录一、模型训练中出现loss为NaN原因1.学习率过高2.梯度消失或爆炸3.数据不平衡或异常4.模型不稳定5.过拟合二、针对梯度消失或爆炸的解决方案1.使用`torch.autograd.detect_anomaly()`2.使用torchviz可视化计算图3.检查梯度的数值范围4.调整梯度剪裁......