强化学习中重要性采样

PPO 中重要性采样

  • https://github.com/modelscope/ms-swift/blob/main/docs/source/Instruction/GRPO/GetStarted/GRPO.md
  • 乐,这个网页中是的groundtruth是错误的(可能是为了防止抄袭)。
    在这里插入图片描述

一些例子

0. 池塘养鱼的一个例子

想象一下,你想知道一个湖里所有鱼的平均重量(求期望)。

普通(均匀)采样:你租一条小船,随机在湖面上撒网。问题是,湖中心鱼又多又大,但你随机撒网,很可能大部分网都撒在了没什么鱼的岸边。这样你得撒非常多次网(采样非常多),才能得到一个比较准确的平均值。效率低下。

重要性采样:你是个聪明的渔夫。你知道湖中心的鱼又多又大(重要区域)。所以你决定:别随机撒网了,咱们就开着船专门去湖中心撒网!

新问题:这样从湖中心捞上来的鱼肯定比实际湖里的平均鱼要重,直接算平均值会严重高估。

解决方案:加权(重要性权重)。当你从湖中心捞起一条大鱼时,你在心里想:“这条鱼确实重,但它来自一个我刻意选择的‘高产区域’,所以它的代表性没那么强。我得给它打个折。”

反之,如果你偶尔在岸边捞到一条小鱼,你会想:“这条鱼虽然小,但它来自一个我几乎不采样的‘低产区域’,它能被捞上来非常难得,它的价值应该被放大。”

这个“打折”或“放大”的系数,就是 重要性权重 。通过这个权重,就能纠正你“刻意去湖中心采样”所带来的偏差,最终也能算出整个湖里鱼的真实平均重量。

核心思想:重要性采样允许我们故意从一个我们喜欢的、容易采样的分布(去湖中心) 而不是从那个原始的、难以采样的分布(整个湖面)进行抽样。然后通过一个权重来修正两个分布之间的差异,从而得到无偏的估计。

1. 强化学习

这是重要性采样最经典的应用领域之一。

问题:一个机器人要用“旧策略” π_old 收集来的数据,来学习和评估一个“新策略” π_new 的好坏。如果新策略和旧策略差别很大,那么旧数据对于新策略来说就可能很不相关,直接用它训练效果会很差甚至危险(比如新策略是“高速行驶”,而旧数据全是“低速行驶”的)。

重要性采样的应用:我们仍然使用旧策略的数据,但在用这些数据计算新策略的收益时,给每一条数据都加上一个重要性权重:权重 = (新策略采取旧行动的概率) / (旧策略采取旧行动的概率)。

例子:旧策略 π_old 在红灯时有 80% 的概率刹车,20% 的概率闯过去。新策略 π_new 更保守,在红灯时有 99% 的概率刹车,1% 的概率闯过去。

如果一条旧数据是“红灯->闯过去->发生车祸”,那么这条数据对于新策略的权重就是 (1%) / (20%) = 0.05。

这意味着,虽然“闯红灯导致车祸”这件事本身代价很大,但因为新策略几乎不会这么做(概率只有1%),所以这件事对新策略的影响会被大大折扣(权重0.05)。

反之,对于“红灯->刹车->安全”的数据,权重是 (99%) / (80%) ≈ 1.24,其影响会被适当放大。

这样,就能安全且高效地利用旧数据来优化新策略了。你提供的命令中的 --importance_sampling_level sequence 就是这个思想在 GRPO 算法中的应用。

2. 金融风险评估

问题:计算某种极端金融事件(如股市暴跌50%)发生的风险。这种事件概率极低,但后果极其严重。如果用普通的蒙特卡洛模拟,你可能要模拟成千上万次甚至百万次,才可能碰到一两次这种极端情况,效率极低。

重要性采样的应用:我们故意修改模拟的规则(采样分布),让极端事件更容易发生。比如,在模拟时故意让股价的波动性变大。

然后,在计算风险时,为每一次模拟结果加上一个权重。这个权重就是:在真实模型下,这个结果发生的概率 / 在修改后的模型下,这个结果发生的概率。

对于那些被我们“人为放大”的暴跌事件,我们会给它一个很小的权重,因为虽然它在我们的模拟中经常发生,但在现实中其实很难发生。通过权重修正后,我们就能得到它在真实世界中的正确风险值。这样,我们用几千次模拟就可能达到普通蒙特卡洛需要几百万次模拟的精度。

3. 计算机图形学(渲染)

问题:计算一个物体表面某一点的颜色(即它接收到的来自所有方向的光照积分)。来自光源方向的光线贡献很大,而来自其他方向的光线贡献很小。

重要性采样的应用:与其均匀地向所有方向发射光线去探测,不如集中地向光源的方向发射更多光线(因为那里贡献大)。

然后,在计算颜色时,为那些射向光源的光线赋予较低的权重(因为你发射了太多条了),为那些射向黑暗角落的光线赋予较高的权重(因为你发射的很少)。这样就可以用更少的光线(更快的渲染速度)得到更清晰、噪声更少的图像。

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

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

相关文章

《树与二叉树详解:概念、结构及应用》

目录 一. 树的概念和结构 1.1 树的基本概念 1.2 树的结构特点 二. 树的表示方法和实际运用 2.1 孩子 - 兄弟表示法(Child-Sibling Representation) 2.2 树的实际应用场景 三. 二叉树的概念 3.1 二叉树的核心定义 3.2 二叉树的基本分类 四. 二叉…

Qt/C++,windows多进程demo

1. 项目概述 最近研究了一下Qt/C框架下,windows版本的多进程编写方法,实现了一个小demo。下面详细介绍一下。 MultiProcessDemo是一个基于Qt框架实现的多进程应用程序示例,展示了如何在Windows平台上通过共享内存和事件机制实现进程间通信。该…

Android SystemServer 系列专题【篇五:UserController用户状态控制】

本篇接着SystemServer的启动流程,围绕SystemServer最后阶段关于主用户的启动和解锁的流程,作为切入点,来看看SystemServer是如何讲用户状态同步到所有的系统级服务中。ssm.onStartUserssm.onUnlockingUserssm.onUnlockedUser本篇先介绍UserCo…

推荐使用 pnpm 而不是 npm

npm 的局限性 磁盘空间浪费在 npm 早期版本中,每个项目的node_modules目录都会完整复制所有依赖包,即使多个项目依赖同一个包的相同版本,也会重复存储。这导致磁盘空间被大量占用,随着项目数量的增加,存储成本显著上升…

Transformer实战(18)——微调Transformer语言模型进行回归分析

Transformer实战(18)——微调Transformer语言模型进行回归分析0. 前言1. 回归模型2. 数据处理3. 模型构建与训练4. 模型推理小结系列链接0. 前言 在自然语言处理领域中,预训练 Transformer 模型不仅能胜任离散类别预测,也可用于连…

【Linux】【实战向】Linux 进程替换避坑指南:从理解 bash 阻塞等待,到亲手实现能执行 ls/cd 的 Shell

前言:欢迎各位光临本博客,这里小编带你直接手撕,文章并不复杂,愿诸君耐其心性,忘却杂尘,道有所长!!!! IF’Maxue:个人主页🔥 个人专栏…

linux常用命令 (3)——系统包管理

博客主页:christine-rr-CSDN博客 ​​​​​ ​​ hi,大家好,我是christine-rr ! 今天来分享一下linux常用命令——系统包管理 目录linux常用命令---系统包管理(一)Debian 系发行版(Ubuntu、Debian、Linux …

YOLOv8 mac-intel芯片 部署指南

🚀 在 Jupyter Notebook 和 PyCharm 中使用 Conda 虚拟环境(YOLOv8 部署指南,Python 3.9) YOLOv8 是 Ultralytics 开源的最新目标检测模型,轻量高效,支持分类、检测、分割等多种任务。 在 Mac(…

【高等数学】第十一章 曲线积分与曲面积分——第六节 高斯公式 通量与散度

上一节:【高等数学】第十一章 曲线积分与曲面积分——第五节 对坐标的曲面积分 总目录:【高等数学】 目录 文章目录1. 高斯公式2. 沿任意闭曲面的曲面积分为零的条件3. 通量与散度1. 高斯公式 设空间区域ΩΩΩ是由分片光滑的闭曲面ΣΣΣ所围成&#x…

IDEA试用过期,无法登录,重置方法

IDEA过期,重置方法: IntelliJ IDEA 2024.2.0.2 (亲测有效) 最新Idea重置办法!: 方法一: 1、删除C:\Users\{用户名}\AppData\Local\JetBrains\IntelliJIdea2024.2 下所有文件(注意:是子目录全部删除) 2、删除C:\Users\{用户名}\App…

创建用户自定义桥接网络并连接容器

1.创建用户自定义的 alpine-net 网络[roothost1 ~]# docker network create --driver bridge alpine-net 9f6d634e6bd7327163a9d83023e435da6d61bc6cf04c9d96001d1b64eefe4a712.列出 Docker 主机上的网络[roothost1 ~]# docker network ls NETWORK ID NAME DRIVER …

Vue3 + Vite + Element Plus web转为 Electron 应用,解决无法登录、隐藏自定义导航栏

如何在vue3 Vite Element Plus搭好的架构下转为 electron应用呢? https://www.electronjs.org/zh/docs/latest/官方文档 https://www.electronjs.org/zh/docs/latest/ 第一步:安装 electron相关依赖 npm install electron electron-builder concurr…

qt QAreaLegendMarker详解

1. 概述QAreaLegendMarker 是 Qt Charts 模块中的一部分,用于在图例(Legend)中表示 QAreaSeries 的标记。它负责显示区域图的图例项,通常包含区域颜色样例和对应的描述文字。图例标记和对应的区域图关联,显示区域的名称…

linux 函数 kstrtoul

kstrtoul 函数概述 kstrtoul 是 Linux 内核中的一个函数&#xff0c;用于将字符串转换为无符号长整型&#xff08;unsigned long&#xff09;。该函数定义在 <linux/kernel.h> 头文件中&#xff0c;常用于内核模块中解析用户空间传递的字符串参数。 函数原型 int kstrtou…

LLM(三)

一、人类反馈的强化学习&#xff08;RLHF&#xff09;微调的目标是通过指令&#xff0c;包括路径方法&#xff0c;进一步训练你的模型&#xff0c;使他们更好地理解人类的提示&#xff0c;并生成更像人类的回应。RLHF&#xff1a;使用人类反馈微调型语言模型&#xff0c;使用强…

DPO vs PPO,偏好优化的两条技术路径

1. 背景在大模型对齐&#xff08;alignment&#xff09;里&#xff0c;常见的两类方法是&#xff1a;PPO&#xff1a;强化学习经典算法&#xff0c;OpenAI 在 RLHF 里用它来“用奖励模型更新策略”。DPO&#xff1a;2023 年提出的新方法&#xff08;参考论文《Direct Preferenc…

BLE6.0信道探测,如何重构物联网设备的距离感知逻辑?

在物联网&#xff08;IoT&#xff09;无线通信技术快速渗透的当下&#xff0c;实现人与物、物与物之间对物理距离的感知响应能力已成为提升设备智能高度与人们交互体验的关键所在。当智能冰箱感知用户靠近而主动亮屏显示内部果蔬时、当门禁系统感知到授权人士靠近而主动开门时、…

【计算机 UTF-8 转换为本地编码的含义】

UTF-8 转换为本地编码的含义 详细解释一下"UTF-8转换为本地编码"的含义以及为什么在处理中文时这很重要。 基本概念 UTF-8 编码 国际标准&#xff1a;UTF-8 是一种能够表示世界上几乎所有字符的 Unicode 编码方式跨平台兼容&#xff1a;无论在哪里&#xff0c;UTF-8 …

4.6 变体

1.变体简介 2.为什么需要变体 3.变体是如何产生的 4.变体带来的麻烦 5.multi_compile和shader_feature1.变体简介 比如我们开了一家餐厅, 你有一本万能的菜单(Shader源代码), 上面包含了所有可能的菜式; 但是顾客每次来点餐时, 不可能将整本菜单都做一遍, 他们会根据今天有没有…

猿辅导Android开发面试题及参考答案(下)

为什么开发中要使用线程池,而不是直接创建线程(如控制线程数量、复用线程、降低开销)? 开发中优先使用线程池而非直接创建线程,核心原因是线程池能优化线程管理、降低资源消耗、提高系统稳定性,而直接创建线程存在难以解决的缺陷,具体如下: 控制线程数量,避免资源耗尽…