数学基础回顾:状态空间、动作空间、奖励函数、马尔可夫决策过程(MDP)

各位同学,欢迎来到第二章。说实话,很多做机器人控制的朋友一听到「数学基础」四个字就想跳过。我当年也一样,觉得直接调库跑算法多爽啊。结果呢?第一次在真实机械臂上跑策略,关节直接抖成了帕金森,我才意识到——不懂MDP,你连问题都定义不清楚。

这一章,咱们把强化学习最底层的数学语言捋一遍。不搞天书公式,我会结合我在力矩控制项目里踩过的坑来讲。你只要跟着走一遍,后面写代码时就会少很多「为什么这里要这样设」的困惑。

2.1 状态空间:机器人眼中的世界

状态空间,说白了就是智能体用来描述环境的所有信息的集合。在机器人力矩控制里,状态通常包括关节角度、角速度、末端执行器的位姿,有时候还有接触力传感器的读数。

我个人习惯把状态空间分成两类:

  • 连续状态空间:比如关节角度是 0.0° 到 360.0° 之间的任意实数。大多数机器人控制问题都是连续的。
  • 离散状态空间:比如「抓取成功/失败」这种只有有限个取值的状态。棋盘游戏里常见,机器人里用得少。

关键点:状态空间的设计直接决定了学习难度。状态太少,智能体看不到关键信息;状态太多,维度灾难会让你哭都哭不出来。

举个例子。我在做六轴机械臂的力控抓取时,一开始把 6 个关节的力矩值也加进了状态空间。结果训练了三天,策略根本不收敛。后来我把力矩值去掉,只保留关节位置和速度,收敛速度直接翻了三倍。为什么?因为力矩是动作的输出,不是环境的固有属性,加进去反而引入了冗余信息。

我的建议:设计状态空间时,先问自己三个问题——1)这个信息智能体能直接观测到吗?2)这个信息对决策有直接影响吗?3)去掉它会不会导致歧义?三个都答「是」,再放进去。

2.2 动作空间:机器人能做什么

动作空间定义了智能体可以施加到环境上的所有可能行为。在力矩控制场景下,动作就是每个关节的期望力矩值(或者电压指令)。

动作空间也有两种:

类型 特点 力矩控制中的例子
离散动作空间 有限个离散选项 「增大力矩 1Nm」「减小力矩 1Nm」「保持不动」
连续动作空间 每个维度是连续值 每个关节输出 [-10, 10] Nm 内的任意力矩值

嗯,这里要注意。很多初学者喜欢把连续问题强行离散化,觉得这样好处理。我曾经也这么干过——把力矩输出离散成 11 个档位。结果机器人动作特别生硬,像在跳机械舞。后来我换成了连续动作空间,配合高斯策略输出,动作才变得平滑自然。

避坑指南:连续动作空间虽然灵活,但对算法要求更高。如果你用的是 DQN 这类离散动作算法,千万别硬套连续问题。选算法前,先搞清楚你的动作空间是离散还是连续。

2.3 奖励函数:告诉机器人什么是对的

奖励函数是强化学习的灵魂。它定义了智能体在每个时间步收到的即时反馈信号。智能体的目标就是最大化累积奖励。

在力矩控制中,奖励函数通常包含以下几个分量:

  • 任务奖励:比如末端是否到达目标位置,给 +100 分。
  • 能耗惩罚:力矩输出越大,惩罚越重,鼓励节能。
  • 平滑性惩罚:相邻两步的力矩变化太大,扣分,防止抖动。
  • 安全约束:关节超限或碰撞,直接给 -1000 并终止回合。

我见过最典型的翻车案例是什么?奖励函数设计得太「稀疏」。比如只有到达目标才给 +1,其他时候都是 0。智能体在前期完全得不到任何有效反馈,就像蒙着眼睛在迷宫里乱撞。训练了十万步,策略还是随机乱动。

我的经验:奖励函数要「密」不要「疏」。哪怕给一个很小的引导信号(比如「越靠近目标,奖励越大」),都比只有最终成功奖励要强得多。这叫奖励塑形(Reward Shaping)。

但也要小心过度塑形。我曾经给一个抓取任务加了「手爪张开角度越接近目标物体宽度,奖励越大」的引导项。结果智能体学了一个很鸡贼的策略——它把手爪张开到和物体一样宽,然后就不动了,因为这样就能一直拿引导奖励,根本不去执行抓取动作。你看,智能体比你想象的更会钻空子。

2.4 马尔可夫决策过程(MDP):强化学习的数学框架

好了,前面三个概念凑齐了,咱们就可以拼出 MDP 这个核心框架了。MDP 是强化学习问题的标准数学描述,它由五元组定义:

(S, A, P, R, γ)

  • S:状态空间
  • A:动作空间
  • P:状态转移概率,P(s' | s, a) 表示在状态 s 执行动作 a 后,转移到 s' 的概率
  • R:奖励函数,R(s, a, s') 表示这次转移获得的即时奖励
  • γ:折扣因子,0 ≤ γ ≤ 1,控制智能体是「短视」还是「远视」

MDP 最核心的假设是马尔可夫性:下一时刻的状态只取决于当前状态和当前动作,与历史无关。说白了就是「未来只通过现在影响过去」。这个假设在机器人控制中基本成立——只要你的状态空间包含了足够的信息。

一个小技巧:如果你发现策略训练效果很差,先检查一下状态空间是否满足马尔可夫性。比如,如果当前状态不包含关节速度,那系统就不是马尔可夫的,因为下一时刻的位置依赖于当前的速度。加上速度信息,问题就解决了。

下面这张图展示了 MDP 在力矩控制中的完整流程,我建议你仔细看看:

力矩控制中的 MDP 流程 力矩控制中的 MDP 流程 状态 s 关节角度、角速度 动作 a 期望力矩指令 奖励 r 任务完成度 + 能耗 下一状态 s' 环境反馈的新状态 策略 π(a|s) 状态到动作的映射 策略选择 环境反馈 状态转移 P(s'|s,a) 循环迭代 折扣因子 γ 平衡即时与未来奖励

你看这个循环:智能体观测到当前状态 s,根据策略 π 选择动作 a,环境执行动作后给出奖励 r 并转移到新状态 s',然后 s' 又成为下一轮的 s。这个循环不断重复,直到任务结束。

折扣因子 γ 是个容易被忽视但极其重要的参数。γ 越接近 1,智能体越「远视」,会为了长期收益牺牲短期利益;γ 越接近 0,智能体越「短视」,只看重眼前的奖励。在力矩控制中,我一般设 γ=0.95 到 0.99 之间。设得太低,机器人会只顾当前一步的力矩最小化,不去规划未来的轨迹;设得太高,收敛又太慢。

总结一下:MDP 就是强化学习的「宪法」。你后面学到的所有算法——Q-learning、Policy Gradient、PPO、SAC——都是在 MDP 这个框架下求解最优策略的不同方法。把 MDP 理解透了,后面的路就好走了。