|
|
|
|
@ -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. 用自己的话解释:状态、观察、动作和策略分别是什么?反馈与奖励有什么区别?
|
|
|
|
|
|