云计算百科
云计算领域专业知识百科平台

强化学习第四课:State 和 Observation 到底有什么区别?

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */
#content_views .toc,
/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */
#content_views.markdown_views > p:empty:has(+ .toc),
#content_views.markdown_views > .toc + p:empty,
/* 富文本旧版目录标记 */
#content_views.htmledit_views #main-toc,
#content_views.htmledit_views #hr-toc,
#content_views.htmledit_views p[id*=\”-toc\”] {
display: none !important;
}
/* 目录去掉后,紧跟的首个标题不再多出一块上边距 */
#content_views.markdown_views > .toc + h1,
#content_views.markdown_views > .toc + h2,
#content_views.markdown_views > .toc + h3,
#content_views.markdown_views > .toc + h4,
#content_views.markdown_views > .toc + p:empty + h1,
#content_views.markdown_views > .toc + p:empty + h2,
#content_views.markdown_views > .toc + p:empty + h3,
#content_views.markdown_views > .toc + p:empty + h4 {
margin-top: 0 !important;
}

第三课小测标准答案

已知:

\\[ s_t=\\text{末端位置} \\]

情况 A:

\\[ x=10\\text{ cm},\\quad v=+5\\text{ cm/s} \\]

情况 B:

\\[ x=10\\text{ cm},\\quad v=-5\\text{ cm/s} \\]

  • 两种情况下的 \\(s_t\\) 是否相同?相同。 因为你把 State 只定义成“位置”,两者位置都是:
  • \\[ x=10\\text{ cm} \\]

    所以对 Agent 来说,这两个状态看起来一模一样。

  • 它们下一时刻的状态是否一定相同?不一定,实际上很可能不同。 A 正在向右运动,B 正在向左运动,因此即使当前位置相同,下一时刻位置也可能不同。

  • 为什么“只用位置作为 State”可能不满足 Markov 性质?因为当前的:

  • \\[ s_t=x \\]

    没有包含足够的信息来预测未来。过去的信息——例如“它之前是从左边过来的还是从右边过来的”——仍然能帮助预测未来,这说明当前 State 没有把过去有用的信息总结完整。

  • 怎么改进?最直接的方法是加入速度:
  • \\[ \\boxed{s_t=(x_t,v_t)} \\]

    例如:

    \\[ s_t^A=(10,+5) \\]\\[ s_t^B=(10,-5) \\]

    现在 Agent 就能区分这两种情况。

    这就是一个非常重要的思想:

    State 不是“信息越少越好”,而是至少要包含完成决策和预测未来所需的重要信息。


    第四课:State 和 Observation 到底有什么区别?

    这一课对你以后做视觉强化学习、机械臂、具身智能、VLA非常重要。

    因为现实机器人经常面临一个问题:

    世界真正处于什么状态,和机器人实际能看到什么,并不是一回事。

    先从一个非常简单的例子开始。


    1. 假设你闭着一只眼睛抓杯子

    桌子上有一个杯子。

    真实世界里,杯子有:

    位置
    姿态
    速度
    质量
    表面摩擦系数
    是否被遮挡
    与夹爪距离

    机械臂也有:

    每个关节的真实角度
    关节速度
    电机状态
    夹爪位置

    这些东西合起来,可以描述:

    世界真正的状态。

    我们把它记成:

    \\[ s_t \\]

    也就是:

    State。

    但是机器人真的能知道这些东西吗?

    不一定。


    2. 摄像头只能看到“一部分”

    假设你的机器人只有一台深度相机。

    它得到:

    RGB 图像
    Depth 深度图

    例如:

    \\[ o_t= \\{\\text{RGB image},\\text{Depth image}\\} \\]

    这里我们用:

    \\[ o_t \\]

    表示:

    Observation,观测。


    State 是真实情况

    例如:

    \\[ s_t= \\{ x_{\\text{object}}, y_{\\text{object}}, z_{\\text{object}}, v_{\\text{object}}, \\text{friction}, \\text{joint angles}, \\text{joint velocities} \\} \\]


    Observation 是机器人实际拿到的信息

    例如:

    \\[ o_t= \\{ \\text{RGB image}, \\text{Depth image} \\} \\]

    所以:

    \\[ \\boxed{\\text{State} \\neq \\text{Observation}} \\]

    在真实机器人问题中尤其如此。


    3. 为什么 Observation 不一定等于 State?

    假设杯子被盒子挡住一半。

    真实情况:

    杯子完整存在
    杯子中心位置确定
    杯子姿态确定

    这属于 State。

    但是相机看到的可能只有:

    杯子的上半部分

    所以 Observation 是:

    不完整的。

    再比如,真实世界存在:

    \\[ \\text{摩擦系数}=0.4 \\]

    但是普通 RGB 相机并不会直接告诉机器人:

    摩擦系数 = 0.4

    所以:

    \\[ s_t \\]

    里面可能包含的信息,比:

    \\[ o_t \\]

    更多。


    4. 用一句话区分

    你先直接记:

    \\[ \\boxed{\\text{State:世界实际上是什么样}} \\]\\[ \\boxed{\\text{Observation:Agent 实际观察到了什么}} \\]

    这个区别以后非常重要。


    5. 一个机械臂例子

    假设真实环境是:

    物体位置:
    x = 30 cm
    y = 10 cm
    z = 5 cm

    物体速度:
    0 cm/s

    Joint1 = 20°
    Joint2 = 40°

    夹爪打开

    桌面摩擦系数 = 0.5

    那么真实状态可以写:

    \\[ s_t= (30,10,5,0,20^\\circ,40^\\circ,\\text{open},0.5) \\]

    注意,我们这里只是简化表示。

    但是机械臂可能只能获取:

    相机 RGB 图像
    深度图
    编码器读出的 Joint1、Joint2

    于是它获得的 Observation:

    \\[ o_t= (\\text{RGB},\\text{Depth},20^\\circ,40^\\circ) \\]

    这里:

    \\[ o_t\\neq s_t \\]


    6. 甚至传感器读数也不一定是真实 State

    这个概念非常重要。

    假设真实关节角:

    \\[ \\theta=30^\\circ \\]

    但是编码器有误差。

    机器人读取到:

    \\[ 29.7^\\circ \\]

    那么:

    真实状态:

    \\[ s_t:\\theta=30^\\circ \\]

    观测:

    \\[ o_t:\\hat{\\theta}=29.7^\\circ \\]

    这里出现:

    \\[ \\hat{\\theta} \\]

    上面的小帽子:

    \\[ \\hat{} \\]

    通常用来表示:

    估计值。

    所以:

    \\[ \\theta \\]

    可能代表真实角度。

    而:

    \\[ \\hat{\\theta} \\]

    代表机器人估计出来的角度。

    以后你做视觉定位、状态估计时会大量看到这个符号。


    7. 那 Agent 到底根据 State 还是 Observation 决策?

    理论上如果 Agent 能获得完整 State,可以写:

    \\[ s_t\\rightarrow a_t \\]

    但真实机器人往往只能根据 Observation:

    \\[ o_t\\rightarrow a_t \\]

    例如:

    RealSense D435
    ↓
    RGB + Depth
    ↓
    Observation
    ↓
    神经网络
    ↓
    Action
    ↓
    机械臂

    这已经非常接近你以后真正做的机器人系统了。


    8. 为什么机器人论文经常写 observation?

    以后你看到代码:

    obs = env.reset()

    这里:

    obs

    就是:

    observation。

    又比如:

    action = policy(obs)

    意思就是:

    策略根据当前观测决定动作。

    数学上:

    \\[ a_t\\sim\\pi(a\\mid o_t) \\]

    这个公式今天暂时只认识。

    其中:

    • \\(a_t\\):当前动作
    • \\(\\pi\\):Policy,策略
    • \\(o_t\\):当前 Observation
    • \\(\\mid\\):在……条件下

    意思:

    根据当前观测 \\(o_t\\),策略 \\(\\pi\\) 决定采取什么动作。


    9. State 和 Observation 什么时候可以一样?

    在一些简单仿真环境里,可以人为让 Agent 获得完整状态。

    例如经典小车:

    位置 x
    速度 v
    角度 θ
    角速度 ω

    模拟器直接全部告诉 Agent。

    那么可以近似认为:

    \\[ o_t=s_t \\]

    这类问题比较简单。

    但真实机器人一般更复杂:

    \\[ o_t\\neq s_t \\]

    因为存在:

    遮挡
    传感器噪声
    无法测量的信息
    延迟
    视觉误差
    未知物理参数


    10. 这里会引出 POMDP

    上一课我们学了:

    \\[ \\boxed{\\text{MDP}} \\]

    Markov Decision Process。

    如果 Agent 能获得充分的 State,我们可以用 MDP 描述。

    但是如果 Agent 只能获得不完整 Observation:

    \\[ o_t \\]

    而不能直接知道真实:

    \\[ s_t \\]

    那么通常会引出:

    \\[ \\boxed{\\text{POMDP}} \\]

    全称:

    Partially Observable Markov Decision Process

    中文:

    部分可观测马尔可夫决策过程。

    名字很长,其实核心就一句话:

    真实世界有一个 State,但 Agent 只能看到它的一部分。


    11. 一个非常直观的 POMDP 例子

    想象你在一个黑暗房间。

    房间真实状态:

    你在房间左侧
    桌子在右侧
    门在前方
    椅子在后方

    这是:

    \\[ s_t \\]

    但你只能用手摸到周围 20 cm。

    你当前摸到:

    前面是空的
    左边有墙

    这是:

    \\[ o_t \\]

    所以:

    真实世界
    s_t
    ↓
    只能观察其中一部分
    ↓
    o_t
    ↓
    Agent
    ↓
    Action

    这就是部分可观测。


    12. 为什么“历史信息”突然又变重要了?

    假设机器人当前相机画面:

    一个球出现在画面中央

    只看这一帧,你不知道球:

    是向左运动?

    还是:

    向右运动?

    但是如果看连续三帧:

    Frame 1:球在左边
    Frame 2:球在中央偏左
    Frame 3:球在中央

    你就能推测:

    球正在向右运动。

    也就是说:

    \\[ o_t \\]

    单独可能不够。

    但是:

    \\[ o_{t-2},o_{t-1},o_t \\]

    结合起来,可以提供更多信息。

    这就是为什么机器人强化学习有时候会使用:

    多帧图像
    Frame Stacking

    RNN

    LSTM

    Transformer

    因为它们可以利用历史信息。

    以后 VLA 里这个概念也非常重要。


    13. 一个你以后一定会看到的技巧:Frame Stacking

    例如 Atari 游戏。

    如果只给 Agent 一张图:

    ●

    你可能知道球在哪里,但是不知道球往哪运动。

    于是研究者把连续几帧拼起来:

    \\[ o_t= (I_{t-3},I_{t-2},I_{t-1},I_t) \\]

    其中:

    • \\(I\\):Image,图像
    • \\(I_t\\):第 \\(t\\) 时刻图像

    这叫:

    Frame Stacking,帧堆叠。

    这样 Agent 可以从位置变化间接推断速度。


    14. 放到你的机械臂场景

    以后如果做视觉抓取,你可能有:

    \\[ o_t= \\{ I_t^{RGB}, I_t^{Depth}, q_t, \\dot q_t, g_t \\} \\]

    第一次看到符号,我们一个个解释。

    \\(I_t^{RGB}\\)

    第 \\(t\\) 时刻的 RGB 图像。

    \\(I_t^{Depth}\\)

    第 \\(t\\) 时刻的深度图。

    \\(q_t\\)

    通常表示:

    机械臂关节位置/关节角。

    例如:

    \\[ q_t= [\\theta_1,\\theta_2,\\theta_3,\\theta_4] \\]

    假设是 4 个关节。

    \\(\\dot q_t\\)

    上面的点表示对时间求导。

    简单理解:

    关节速度。

    例如:

    \\[ \\dot q_t= [\\dot\\theta_1,\\dot\\theta_2,\\dot\\theta_3,\\dot\\theta_4] \\]

    \\(g_t\\)

    我们这里假设表示:

    gripper state,夹爪状态。

    比如:

    \\[ g_t=0 \\]

    表示打开。

    \\[ g_t=1 \\]

    表示闭合。

    于是:

    \\[ o_t= \\{ RGB, Depth, 关节角, 关节速度, 夹爪状态 \\} \\]

    就可以作为机器人策略的输入。

    这已经是比较典型的机器人强化学习 Observation 设计思路了。


    15. 从今天开始再区分一个词

    以后我们最好不要总说:

    “相机图像就是 State。”

    更严谨一些应该说:

    相机图像通常属于 Observation。

    例如:

    真实物体三维姿态
    → State

    D435 拍到的 RGB-D
    → Observation

    当然很多 RL 论文为了方便,也会宽松地把输入统一称作“state”,所以你以后看到论文不能机械地认为作者一定严格区分了二者。

    要根据上下文判断。


    16. 今天最核心的一张图

    真实世界
    │
    │
    True State sₜ
    │
    ┌────传感器────┐
    │ │
    ▼ │
    Observation oₜ │
    │ │
    ▼ │
    Agent │
    │ │
    Action aₜ │
    │ │
    └──────────────►
    环境变化
    │
    ▼
    New State sₜ₊₁

    最核心关系:

    \\[ \\boxed{ s_t \\rightarrow o_t \\rightarrow a_t \\rightarrow s_{t+1} } \\]

    解释:

    世界处于真实状态 \\(s_t\\) → 传感器产生观测 \\(o_t\\) → Agent 根据观测产生动作 \\(a_t\\) → 环境发生变化进入下一状态 \\(s_{t+1}\\)。


    第四课必须记住的四句话

    \\[ \\boxed{\\text{State = 世界真实处于什么情况}} \\]\\[ \\boxed{\\text{Observation = Agent 实际获得的信息}} \\]

    真实机器人通常:

    \\[ \\boxed{o_t\\neq s_t} \\]

    如果只能获得部分状态信息,就会引出:

    \\[ \\boxed{\\text{POMDP}} \\]

    而利用:

    历史帧
    RNN
    LSTM
    Transformer

    本质上经常都是在想办法:

    根据有限的 Observation,更好地推断真实世界现在到底是什么状态。

    这件事情后面和机器人视觉、具身智能、VLA 会慢慢连接起来。


    第四课小测

    假设桌子上的小球真实情况是:

    \\[ x=20\\text{ cm} \\]\\[ v=+3\\text{ cm/s} \\]\\[ m=100\\text{ g} \\]

    但摄像头只能测出:

    球的位置约为 20.4 cm

    Agent 没有速度传感器,也不知道小球质量。

    请判断:

  • 哪些信息属于真实 State?
  • 当前 Observation 是什么?
  • 为什么这里 \\(o_t\\neq s_t\\)?
  • 只看一张图为什么可能不知道球的运动方向?
  • 如果给 Agent 连续 4 帧图像,为什么会比单帧更有用?
  • 你可以继续让我直接给标准答案并进入第五课。

    第五课我建议正式讲:

    \\[ \\boxed{\\text{Policy 策略}} \\]

    也就是强化学习真正的“大脑”到底是什么,并第一次解释:

    \\[ \\boxed{\\pi(a\\mid s)} \\]

    为什么 DQN、PPO、SAC 最终都绕不开 Policy。

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » 强化学习第四课:State 和 Observation 到底有什么区别?
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!