1. 动作空间:理解强化学习智能体的“手脚”
想象一下,你在教一个机器人走路。你告诉它“抬腿”,这是一个明确的指令。但如果这个指令是“用0.5牛顿的力,以30度的角度向前迈出0.3米”,这就复杂多了。在强化学习的世界里,智能体(Agent)如何“行动”,完全取决于它所在的动作空间。这是所有强化学习实战的起点,也是决定我们选择哪种算法、走哪条技术路线的关键岔路口。
简单来说,动作空间就是智能体所有可能动作的集合。它定义了智能体“能做什么”。根据这个集合是有限的、可数的,还是无限的、连续的,我们将其分为两大类:离散动作空间和连续动作空间。这个区别听起来简单,但在实际训练模型时,带来的挑战和解决方案是天差地别的。我刚开始接触时,曾天真地以为把连续动作“切”成几段就能当离散的用,结果在机械臂控制项目上踩了个大坑,模型死活学不会精细操作。所以,咱们得先把这两兄弟彻底搞明白。
1.1 离散动作空间:选择题的世界
离散动作空间就像在做选择题。动作的数量是有限的、可列举的。比如,玩经典的“打砖块”游戏,你的操作可能只有 {向左, 向右, 发射}。又比如,围棋AI AlphaGo,它的动作就是在19x19的棋盘上选择一个交叉点落子,总共有361个明确的、互不相同的动作选项。
处理离散动作空间,我们最熟悉的“老朋友”就是DQN及其变种。DQN的核心思想是学习一个动作价值函数,它评估在某个状态下,采取每个可能动作的长期收益。智能体只需要在每一步,从所有动作中选出那个估值最高的动作即可。这非常直观,就像你面前有多个按钮,每个按钮上标好了预期的回报,你只需要按下回报最高的那个。
这种方法的优点是结构清晰,训练相对稳定。但它的局限性也很明显:它无法直接处理连续动作。因为连续动作空间是无穷的,你不可能为每一个可能的力的大小、角度都预先计算一个Q值。如果你非要把连续动作空间强行离散化,比如把机械臂的关节角度从0度到180度每隔1度切一刀,那么一个关节就有181个动作。如果是6个关节的机械臂,组合起来的动作数量将是181的6次方,这是一个天文数字,会立刻导致维度灾难,让模型根本无法有效学习和探索。
1.2 连续动作空间:填空题的世界
连续动作空间则像是在做填空题。动作是一个或多个连续变量,可以在一个实数区间内取任意值。比如,控制一个机器人的轮子转速,可以是 [0, 10] 转/秒之间的任意实数;控制一个机械臂末端的空间位置 (x, y, z),每个坐标都是一个连续值。
这才是现实世界中大多数物理控制问题的本来面貌。你不能只告诉无人机“上升”或“下降”,你需要精确控制四个螺旋桨的转速;你不能只告诉自动驾驶汽车“左转”或“右转”,你需要给出方向盘的具体转角。面对这个“填空题”,我们主要有两大解题思路:
- 离散化:就像前面提到的,把连续区间切成很多小段,把填空题强行变成选择题。这在动作维度低、精度要求不高时或许可行,但一旦维度升高,立刻就会陷入组合爆炸的泥潭,既不优雅,效率也极低。我个人的经验是,除非问题极其简单,否则这条路基本走不通。
- 策略梯度方法:这才是处理连续动作空间的“正途”。我们不再去估算每一个动作的价值,而是直接学习一个策略函数。这个函数以状态为输入,直接输出动作(确定性策略),或者输出动作的概率分布(随机性策略)。智能体根据这个策略来“生成”动作。这就好比你不是去背下所有填空题的答案,而是学会了一套解题公式,遇到任何题目都能现场算出答案。
接下来的核心,就是深入探讨策略梯度方法中的两大主力流派:随机策略梯度和确定策略梯度,看看它们分别如何征服连续动作空间这个难题,以及在实战中我们该如何根据场景做选择。
2. 确定策略梯度:精准控制的“手术刀”
当你需要机器人完成一个高精度的焊接任务,或者让机械臂将零件严丝合缝地插入卡槽时,你希望它的动作是精准、确定、可重复的。在这种情况下,确定策略梯度 就像一把精准的“手术刀”。它的核心思想非常直接:策略网络 π(s; θ) 不再输出概率,而是直接输出一个确定的动作值 a。给定同一个状态 s,策略网络永远给出同一个动作 a。
2.1 确定策略梯度推导:价值引导的精确导航
确定策略梯度算法的运作,依赖于两个神经网络协同工作:策略网络和价值网络。我们可以把它们想象成赛车游戏中的车手和领航员。
- 策略网络(车手):
a = π(s; θ)。它负责观察当前路况(状态s),并直接做出驾驶操作(动作a)。 - 价值网络(领航员)

2560

被折叠的 条评论
为什么被折叠?



