diff --git a/EmbodiedAI/第一章——具身智能到底在做什么.md b/EmbodiedAI/第一章——具身智能到底在做什么.md index 00d5936..1a08700 100644 --- a/EmbodiedAI/第一章——具身智能到底在做什么.md +++ b/EmbodiedAI/第一章——具身智能到底在做什么.md @@ -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. 用自己的话解释:状态、观察、动作和策略分别是什么?反馈与奖励有什么区别?