当前位置: 首页 > news >正文

强化学习基本概念

随机变量

X表示随机变量, x表示观测值。 如x是某一次抛硬币的值。

概率密度函数

为什么有了概率还要有概率密密度呢?
对于连续型随机变量(如人的身高、温度),其取值是无限且不可列的。问你“一个人身高恰好是180.0000…厘米的概率是多少?”在数学上,这个概率实际上是​​0​​,因为可能的值有无限多个。但这显然不符合直觉,我们仍然认为身高在180厘米附近是有可能性的。

这就引出了“密度”的概念:
•类似于物理学中​​质量密度​​(密度 = 质量 / 体积)。你不能说一个几何点有多少质量,但可以说某点附近的密度很大,从而通过积分(密度 × 体积)求出某区域的总量。

•概率密度也是如此。​​概率密度函数在某点的值本身不是概率​​,但它反映了概率在该点附近的“密集程度”。概率密度越高,说明随机变量落在该点附近​​极小区域​​内的​​可能性越大​​。

🌰 ​​举个例子​​
这很像​​人口密度​​(单位面积内的人口数)和​​总人口数​​的关系:
•你不能说“上海市陆家嘴某个点上有多少人”,但可以说“陆家嘴地区的人口密度很高”。
•想知道陆家嘴街道有多少人,你需要用人口密度乘以区域面积。
•同样,想知道随机变量(如身高)落在某个区间(如179cm至181cm)内的概率,你需要对概率密度函数在该区间内进行积分。

结论:
1.概率密度函数值不是概率​​:概率密度函数在某点的函数值并非该点的概率,而是概率在该点的变化率。概率密度函数值甚至​​可以大于1,只要它在整个定义域上的积分(总面积)等于1即可
2.概率通过积分获得​​:只有对概率密度函数在某个区间上进行积分,得到的面积才表示随机变量落在这个区间内的​​实际概率​​

期望

对于离散变量 和连续 变量分别如下。

随机抽样

状态State 、动作Action 、Agent

Policy Π 策略

Policy就是 根据观测到的状态S, 做出决策动作Action , 数学上定义 Π 是一个概率密度函数, 表示做某个动作的概率密度。

有了Π函数, 输入一个 state, 那么Π函数就会输出 采取各个动作的概率,比如这里 给了当前这一帧的画面state,Π输出三种动作的概率密度值。 那么Agent可以随机选取其中的一种Action, 就得到了一个观测值。 由于是随机抽样的Action, 所以Action是具有随机性的。

为什么要让动作Action随机,而不是每次都选择最大概率的Action呢? 试想一下,如果Π确定了,那么每次输出的动作概率就是知道的,哪个动作的概率最大也是知道的了。 如果是下棋, 对方知道了你的Π之后,就能知道你下一步要走哪里,这样你就永远赢不了。

当然超级玛丽 可以不用让 动作Action随机, 因为对手(游戏设计机制)也是定好的,它不会根据你的Π去调整自己,所以让对手知道也无所谓,你也可以赢。

Reward 奖励

奖励是指 对于一个动作Action 好坏的得分。 奖励的设计很重要, 设计的不好可能导致 结果很差。目标是让奖励越大越好。
对于超级玛丽游戏, 为了让游戏通过,可以这样设计Reward。

吃到金币: Reward +1
碰到墙:Reward -1
赢得游戏:Reward + 1000
打输游戏:Reward - 1000

状态转移 State Transition

做出一个动作之后, 状态会改变, 这就叫做状态转移。 那么具体是怎么改变的呢?
对于超级玛丽游戏来说, 以我们的经验来看,假如说 执行向上的动作吃了金币,那么新的画面里面的金币就会减少,
前面这个敌人Goomba(橙色的小人)可能向左移动,也可能向右移动,具体向左西向右的概率有多大,只有环境知道, 我玩家并不知道。因此这里的状态是有随机性的, 状态的随机性来源于环境。

假设状态转移 也能用一个概率密度函数来表示, 如Goomba向左移动的概率是0.8,向右移动的概率是0.2, 这个就是状态转移函数, 但是这个函数只有环境自己知道,我们是不知道的。

Agent 和 Environment 交互

t时刻采取了一个动作Action a_t之后, State会改变成 S_t+1, 同时会给出一个奖励reward_t (表示 a_t的 好坏)。

随机性的两个来源

    1. Action 具有 随机性

给出了一个状态S,策略Π函数输出的动作是有多个的, 每个有一定的概率, 具体选择哪一个可以随机选取。所以说Action具有随机性。

    1. 状态转移具有随机性

假设 做了 up的动作, 那么环境的状态State是怎么变化的呢? 也是具有随机性的。可以用 概率密度函数p(s_t+1 | s, a) 表示 , 通过抽样得到下一个环境状态s_t+1 具体是什么。

强化学习的过程

当输入一个当前的状态s1

  1. 首先模型学习出来一个策略Π (具体怎么学习的先不管)
  2. 通过Π 得到一系列动作,然后随机抽样一个动作去执行
  3. 执行完动作后, 环境更新一个新的状态 s2 , 并且反馈一个 奖励值 r1
  4. 新的状态s2作为输入, 执行新的动作a2, 得到新的状态s3, 同时反馈一个奖励值r2
  5. 。。。。。。循环
    结束后就 得到了 每个时刻的 s, a,r 。 称为轨迹 Trajectory

Return和Reward

Return就是 当前的Reward 和 未来的Reward之和。 由于未来的Reward没有当前的Reward重要, 所以一般采用 Discounted return, 对未来的reward打折扣。

Return的随机性

Return 用U表示
如果 t时刻 游戏结束了, 那么所有时刻的reward都被观测到了, 就用小写的字母r 表示
如果 t时刻 游戏还没有结束, 那么未来的reward还不确定,还是随机变量,没有被观测到具体是多少, 用大写的R表示

上面讲了随机性来源于两个方面, 动作和状态转移。U取决于未来时刻的R, R取决于Action 和 State, 因此U的大小取决于当前时刻和未来时刻的 A, 以及未来时刻的S

Value Function

动作价值函数Q

  • 上面学习了Ut是具有随机性的, 随机性来源于 未来时刻的Action和State, 而Action和State是 可以用函数表示的,如下图所示的Policy function 和 State transition 。
  • 其中 Policy function 的含义是 输入当前状态s, 输出的动作的概率分布(如 left=0.1, right=0.2, up=0.7); State transition 表示给出s和采样的动作a, 得到的新状态的概率分布,(如Gooma向左0.2, 向右0.8)。
  • 又因为未来时刻还没有被观测到,是个随机变量(换句话说就是有很多可能性), 而当前时刻已经观测到了,是个具体的值, 因此我们可以把当前时刻但当作常量,那么可以带入这两个函数 对Ut求期望, 得到的期望即为 Q (动作价值函数)。

  • Q与 s_t和a_t 有关,它和Policy函数Π也有关系, 因为Π决定了 输出的动作概率。不同的Π 得到的动作概率不一样, 那么随机抽取到的动作a也不一样。
  • Q函数的含义是: 对于一个固定的Π策略,当我有了s 和 a之后, 输入到Q函数种, 就能达到对应的 Return的期望值,这个值越大代表 Return越大,可以用来反映 a 的好坏。
  • 有很多个Π可以选,当我们选了一个最好的Π函数之后,得到的 Q* 叫做最优的动作价值函数。

状态价值函数V

状态价值函数是 对 Q 函数求期望, 因为Q函数里面的Action是个随机变量, 我们可以对它求期望。
这个函数的意义是, 加入给定了一个策略Π, 输入当前的状态s, 可以得到值V, 可以反映当前的状态的好坏,是快赢了还是快输了。

对于连续变量,如自动驾驶种的 方向盘的角度 ,是连续的。

总结

对U求期望 → Q : 反映a的好坏
对Q求期望 → V :反映s的好坏
对V求期望 → Es(V(S)) : 反映策略Π的好坏

AI如何控制Agent达到目的?

策略学习 Policy Learning

可以学习出来一个策略,在该策略下抽样得到的a,来控制Agent执行动作。

最优动作价值函数

可以学习一个Q*, 有了Q*就可以评价当前动作,Q代表的是未来的Return的期望, Q越大,说明这个a越好。

举例

总结

概念总结

接下来学习

http://www.jsqmd.com/news/459949/

相关文章:

  • 【Vocoder】HiFi-GAN:高效高保真语音合成的GAN架构解析
  • 编辑器使用规则
  • libSQL性能测试终极指南:从压力测试到基准对比的完整实践方案
  • uniapp:鸿蒙报错> hvigor ERROR: Failed :entry:default@MergeProfile... > hvigor ERROR: The compatibleSdkVe
  • 深入理解Python Web框架:gh_mirrors/we/web_develop项目中的Flask应用案例
  • 第二周周二 - f
  • 终极代码质量检查指南:如何使用avante.nvim提升开发效率
  • 9篇7章17节:特殊的NHANES数据解读,包括NNYFS、NHEFS、NHES 和 HHANES 等数据
  • 如何使用nsync实现高效互斥锁(mutex):C语言并发编程实战指南
  • Quarkus缓存策略终极指南:Infinispan分布式缓存集成与实战
  • uniapp安卓苹果APP端:解决安卓/苹果IOS获取蓝牙ID不一致问题,获取到的deviceId不一致?uniapp蓝牙设备ios与安卓端deviceId不一致问题(ios和安卓的获取方式不一样)
  • 如何使用 JetBrains Mono 字体优化哈萨克语西里尔字符编码体验:开发者必备的免费等宽字体指南
  • 如何安全配置Thread脚本:保护你的京东账户与隐私指南
  • 如何利用Quarkus虚拟线程提升Java应用性能:Project Loom完整指南
  • 从卡顿到丝滑:独立开发者用Tracy优化游戏性能的实战手记
  • Dust终极性能优化指南:如何让磁盘扫描速度提升50%
  • CoreControl核心功能详解:从服务器管理到应用监控的完整解决方案
  • RAG-Anything终极指南:如何快速构建多模态智能检索系统
  • 从开发到发布:Snapcraft完整工作流指南
  • 终极指南:Tracy性能分析器如何通过网络协议确保采样数据完整性传输
  • Sinatra终极指南:揭秘Ruby最精简Web框架的DSL革命
  • 如何用onnx-modifier删除节点?两种高效删除模式全解析
  • 终极Tracy跨编译器支持指南:GCC/Clang/MSVC兼容性处理技巧
  • Pyroscope时序数据压缩终极指南:10倍存储效率提升秘籍
  • Phobos单元测试最佳实践:确保D语言标准库代码质量的关键步骤
  • Guice Grapher终极指南:快速掌握依赖关系可视化的10个技巧
  • 7个SuperAgent实用工具函数:让HTTP请求处理效率提升300%的完整指南
  • Tracy性能分析器终极指南:如何在单元测试中集成性能阈值检查
  • 从安装到部署:bevy_egui开发环境搭建完整指南
  • 终极指南:如何用Guice JNDI模块快速配置数据源资源映射