/* 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} \\]
\\[ 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 没有速度传感器,也不知道小球质量。
请判断:
你可以继续让我直接给标准答案并进入第五课。
第五课我建议正式讲:
\\[ \\boxed{\\text{Policy 策略}} \\]
也就是强化学习真正的“大脑”到底是什么,并第一次解释:
\\[ \\boxed{\\pi(a\\mid s)} \\]
为什么 DQN、PPO、SAC 最终都绕不开 Policy。
网硕互联帮助中心



评论前必须登录!
注册