Fix. 公式渲染异常处理

master
Xuewei Guo 2 weeks ago
parent aed5d7b588
commit dfdd01fe95

@ -29,15 +29,15 @@
## 3. 五个核心概念
下标 \(t\) 表示第 \(t\) 个时间步(timestep)。
下标 $t$ 表示第 $t$ 个时间步(timestep)。
| 概念 | 符号 | 含义 | 推物例子 |
| --- | --- | --- | --- |
| 状态(State) | \(s_t\) | 足以描述环境当前情况及其后续演化的信息 | 推杆位置、方块位置、方块角度、速度等 |
| 观察(Observation) | \(o_t\) | 机器人通过传感器实际获得的信息 | 相机图像、关节角度、测得的位置 |
| 动作(Action) | \(a_t\) | 策略发送给环境或控制器的指令 | 推杆的目标坐标、机械臂关节目标 |
| 策略(Policy) | \(\pi\) | 根据观察和任务目标选择动作的规则或模型 | 根据方块和目标的位置决定向哪里推 |
| 状态转移(Transition) | \(f\) 或 \(P\) | 环境执行动作后如何变化 | 接触和摩擦使方块移动或旋转 |
| 状态(State) | $s_t$ | 足以描述环境当前情况及其后续演化的信息 | 推杆位置、方块位置、方块角度、速度等 |
| 观察(Observation) | $o_t$ | 机器人通过传感器实际获得的信息 | 相机图像、关节角度、测得的位置 |
| 动作(Action) | $a_t$ | 策略发送给环境或控制器的指令 | 推杆的目标坐标、机械臂关节目标 |
| 策略(Policy) | $\pi$ | 根据观察和任务目标选择动作的规则或模型 | 根据方块和目标的位置决定向哪里推 |
| 状态转移(Transition) | $f$ 或 $P$ | 环境执行动作后如何变化 | 接触和摩擦使方块移动或旋转 |
### 3.1 状态不等于观察
@ -45,7 +45,7 @@
以 PushT 推物任务为例,一个简化状态可以写成:
\[
$$
s_t=
\begin{bmatrix}
x_t^{\text{agent}} & y_t^{\text{agent}} &
@ -53,21 +53,21 @@ x_t^{\text{block}} & y_t^{\text{block}} &
\theta_t^{\text{block}}
\end{bmatrix}
\in\mathbb{R}^{5}
\]
$$
其中:
- \(x_t^{\text{agent}},y_t^{\text{agent}}\):推杆在平面中的位置;
- \(x_t^{\text{block}},y_t^{\text{block}}\):方块中心的位置;
- \(\theta_t^{\text{block}}\):方块的旋转角度。
- $x_t^{\text{agent}},y_t^{\text{agent}}$:推杆在平面中的位置;
- $x_t^{\text{block}},y_t^{\text{block}}$:方块中心的位置;
- $\theta_t^{\text{block}}$:方块的旋转角度。
一个状态向量的形状是 `(5,)`。如果一次处理 \(B\) 个状态,组成的批量张量形状就是 `(B, 5)`。
一个状态向量的形状是 `(5,)`。如果一次处理 $B$ 个状态,组成的批量张量形状就是 `(B, 5)`。
真实机器人可能只能看到相机图像,无法直接知道精确位置、速度或摩擦系数。因此观察可能不完整,也可能带有噪声。当一次观察不足以判断当前状态时,策略可能需要使用连续多帧观察或历史信息。
### 3.2 策略不一定是神经网络
策略 \(\pi\) 是从输入到动作的映射。它可以是:
策略 $\pi$ 是从输入到动作的映射。它可以是:
- 人工编写的规则;
- 传统控制算法;
@ -80,52 +80,52 @@ x_t^{\text{block}} & y_t^{\text{block}} &
先采用无噪声、确定性的简化模型:
\[
$$
\begin{aligned}
o_t &= h(s_t),\\
a_t &= \pi(o_t,g),\\
s_{t+1} &= f(s_t,a_t),\\
o_{t+1} &= h(s_{t+1}).
\end{aligned}
\]
$$
公式中的符号分别表示:
- \(s_t\):执行动作前的环境状态;
- \(o_t\):策略实际获得的观察;
- \(g\):任务目标,例如方块的目标位置;
- \(a_t\):策略选择的动作;
- \(s_{t+1}\):执行动作后的新状态;
- \(h\):从真实状态产生传感器观察的过程;
- \(\pi\):根据观察和目标选择动作的策略;
- \(f\):环境的状态转移函数。
- $s_t$:执行动作前的环境状态;
- $o_t$:策略实际获得的观察;
- $g$:任务目标,例如方块的目标位置;
- $a_t$:策略选择的动作;
- $s_{t+1}$:执行动作后的新状态;
- $h$:从真实状态产生传感器观察的过程;
- $\pi$:根据观察和目标选择动作的策略;
- $f$:环境的状态转移函数。
这里把目标 \(g\) 明确写进策略,因为同一个观察面对不同目标时,正确动作可能不同。另一种常见写法是把目标作为观察的一部分:
这里把目标 $g$ 明确写进策略,因为同一个观察面对不同目标时,正确动作可能不同。另一种常见写法是把目标作为观察的一部分:
\[
$$
\tilde{o}_t=[o_t,g],\qquad a_t=\pi(\tilde{o}_t).
\]
$$
真实环境存在不确定性,相同状态下执行相同动作,结果也可能略有不同。这时状态转移可以写成概率形式:
\[
$$
s_{t+1}\sim P(\cdot\mid s_t,a_t).
\]
$$
\(P\) 表示:已知当前状态和动作时,下一个状态可能服从的概率分布。本章只需要知道不确定性存在,暂时不展开概率推导。
$P$ 表示:已知当前状态和动作时,下一个状态可能服从的概率分布。本章只需要知道不确定性存在,暂时不展开概率推导。
## 5. 反馈、奖励和成功信号不是一回事
闭环中的**反馈(feedback)**通常指执行动作后获得的新观察 \(o_{t+1}\)。**奖励(reward)**则是用数值评价动作结果的信号:
闭环中的**反馈(feedback)**通常指执行动作后获得的新观察 $o_{t+1}$。**奖励(reward)**则是用数值评价动作结果的信号:
\[
$$
r_t=R(s_t,a_t,s_{t+1}).
\]
$$
例如:
- 新观察:方块现在位于坐标 \((3.1,2.0)\);
- 奖励:方块更接近目标,得到 \(r_t=0.1\);
- 新观察:方块现在位于坐标 $(3.1,2.0)$;
- 奖励:方块更接近目标,得到 $r_t=0.1$;
- 成功信号:方块进入目标区域,`success=True`。
模仿学习主要从专家的“观察—动作”示范中学习,不一定需要奖励;强化学习通常利用奖励改进策略。两者都会在环境中执行策略并获得新的观察。
@ -134,44 +134,44 @@ r_t=R(s_t,a_t,s_{t+1}).
为了手算,我们先把推物简化成一维位置控制:
- 当前位置 \(x_0=2\),目标位置 \(g=5\);
- 观察就是当前位置:\(o_t=x_t\);
- 动作是本步移动的距离:\(a_t\in[-1,1]\);
- 当前位置 $x_0=2$,目标位置 $g=5$;
- 观察就是当前位置:$o_t=x_t$;
- 动作是本步移动的距离:$a_t\in[-1,1]$;
- 暂不考虑接触、摩擦、惯性和传感器噪声。
人工策略定义为:
\[
$$
a_t=\operatorname{clip}\bigl(0.5(g-o_t),-1,1\bigr),
\]
$$
状态转移为:
\[
$$
x_{t+1}=x_t+a_t.
\]
$$
`clip(value, -1, 1)` 表示把数值限制在 \([-1,1]\) 内。这里的 \(x_t\)、\(g\)、\(o_t\) 和 \(a_t\) 都是标量;如果统一写成一维张量,形状均为 `(1,)`。
`clip(value, -1, 1)` 表示把数值限制在 $[-1,1]$ 内。这里的 $x_t$、$g$、$o_t$ 和 $a_t$ 都是标量;如果统一写成一维张量,形状均为 `(1,)`。
第一步可以手算为:
\[
$$
\begin{aligned}
o_0 &= x_0=2,\\
a_0 &= \operatorname{clip}(0.5\times(5-2),-1,1)=1,\\
x_1 &= x_0+a_0=2+1=3.
\end{aligned}
\]
$$
第二步为:
\[
$$
\begin{aligned}
o_1 &= x_1=3,\\
a_1 &= \operatorname{clip}(0.5\times(5-3),-1,1)=1,\\
x_2 &= x_1+a_1=3+1=4.
\end{aligned}
\]
$$
## 7. 代码 Demo:观察、动作和反馈的循环
@ -245,28 +245,28 @@ t=5, observation=4.7750, action=0.1125, next_x=4.8875
当位置进入目标附近后,动作逐步变小。定义位置误差:
\[
$$
e_t=g-x_t.
\]
$$
当动作没有触发上下限时:
\[
$$
\begin{aligned}
a_t &= 0.5e_t,\\
e_{t+1} &= g-x_{t+1}\\
&=g-(x_t+0.5e_t)\\
&=0.5e_t.
\end{aligned}
\]
$$
也就是说,误差每一步缩小一半。它会逐渐接近零,但有限步内通常不会恰好等于零。因此工程中通常使用容差判断成功,例如:
\[
$$
|g-x_t|<\varepsilon,
\]
$$
其中 \(\varepsilon\) 是允许误差。如果 \(\varepsilon=0.1\),无扰动实验执行 6 步后的误差为 \(5-4.9375=0.0625\),可以判定成功。
其中 $\varepsilon$ 是允许误差。如果 $\varepsilon=0.1$,无扰动实验执行 6 步后的误差为 $5-4.9375=0.0625$,可以判定成功。
扰动实验中,第 2 步执行后的位置由 4.0 变成了 3.2。下一轮策略重新观察到 3.2,于是把动作从原本可能采用的 0.5 调整为 0.9。这正是反馈在闭环中的作用。
@ -303,8 +303,8 @@ while True:
请先自己计算或修改代码,再核对运行结果。
1. 已知 \(x_1=3\),手算 \(a_1\) 和 \(x_2\)。代码输出是否一致?
2. 如果目标从 \(g=5\) 改为 \(g=-2\),为什么只写 \(a_t=\pi(o_t)\) 不足以完整描述这里的策略?
1. 已知 $x_1=3$,手算 $a_1$ 和 $x_2$。代码输出是否一致?
2. 如果目标从 $g=5$ 改为 $g=-2$,为什么只写 $a_t=\pi(o_t)$ 不足以完整描述这里的策略?
3. 将扰动从 `next_x -= 0.8` 改为 `next_x += 0.8`。下一步动作会变大还是变小?为什么?
4. 分别把 `gain` 改为 `0.2` 和 `1.2`,比较 6 步后的位置和误差。哪个更快?是否出现越过目标的情况?
5. 用自己的话解释:状态、观察、动作和策略分别是什么?反馈与奖励有什么区别?

Loading…
Cancel
Save