返回专辑
·Johan·4 分钟阅读

选 DQN 还是 PPO/SAC:看动作空间

离散小动作空间可走 value-based;高维连续控制更常选 Actor-Critic 系,选错家族会浪费大量调参时间。

选 DQN 还是 PPO/SAC:看动作空间

1. MuJoCo 上硬调 DQN,months 白费

Atari 用 DQN 很经典:动作空间小(通常 ≤18)、离散、可大量并行环境采样。机械臂关节力矩控制是连续向量,用 DQN 需要离散化或 C51 等变体,维数一高就不现实。在 MuJoCo 连续任务上硬调 DQN,months 可能花在动作离散化和不稳定 Q 上。反过来,CartPole 用 PPO 也能训,但不如 DQN 直接。选型失误的代价:months 调参也救不了家族选错。多离散动作且大量非法 move(棋类、调度)时,policy gradient + action masking 比 Q 表更自然。

2. 三大家族

Value-based(Q-learning、DQN):学 Q(s,a),策略隐含为 argmax Q。样本可 off-policy 复用 replay buffer,但 max 操作带来过估计。Policy-based(REINFORCE、PPO):直接优化策略,天然处理连续动作(高斯策略 + reparameterization)。on-policy 方法(PPO)样本效率较低但实现稳。Actor-Critic:策略网络 + 价值网络,用 advantage 或 GAE 降方差。PPO、SAC、TD3 都属于这一族。

3. 选型规则与 shootout

我的默认:离散 + 不太大 → DQN 系;连续 → PPO 或 SAC。env.action_space:Discrete(n) 且 n<100 可试 DQN;Box 连续优先 PPO/SAC。新 env 到手,用同一套 wrapper 和相近 wall-clock 各跑 200k~500k 步:离散小动作试 DQN,连续试 PPO 和 SAC。看 eval return 谁先甩开 random,以及 fps 谁更高。FetchReach 这类 manipulation 我倾向 SAC+HER;Atari 像素仍是 DQN 系更常见。Documentation 给新人:「先读 action_space,再选算法族」,比算法名列表有用。

4. 部署与 hybrid

Policy gradient 要存 rollout,内存和采样吞吐是瓶颈;value 系吃 replay,GPU 利用率高但 off-policy 稳定性要盯 Q 曲线。Greedy Q 推理快;随机策略要采样。Deterministic policy(TD3)部署简单,但要自己管 exploration 只在训练期存在。Mobile base discrete + arm continuous 可用 MultiDiscrete + Box 组合 space,或 hierarchical。Distributional RL(C51)估 return 分布,Atari 上常比 vanilla DQN 稳,但 MuJoCo 上仍不如 PPO/SAC 省心。Hybrid discrete-continuous 在 manipulation 里偶尔出现。

5. 案例:algorithm shootout

新任务到手,同一套 wrapper 各跑 200k~500k 步:离散小动作试 DQN,连续试 PPO 和 SAC。看 eval return 谁先甩开 random,以及 wall-clock 谁更快到可用策略。Policy gradient 系要存 rollout;value 系吃 replay。选型没有银弹,只有和 action space、reward 密度、是否真机交互匹配的折中。离散化连续动作空间训 DQN 在维数低时可行,维数上去动作组合爆炸。

6. 与样本效率和墙钟

Wall-clock 到可用策略的时间,不是只看 sample efficiency。先用同一套 wrapper 跑 random baseline 和 1M step 小实验,比较 sample efficiency 和实现复杂度,再定主算法。CartPole 用 PPO 也能训,但不如 DQN 直接——反过来连续任务 DQN 不经济。Greedy Q 推理快;随机策略要采样。Deterministic policy 部署简单,但要自己管 exploration 只在训练期存在。

Hybrid discrete-continuous 在 manipulation 里偶尔出现。Distributional RL(C51)估 return 分布,Atari 上常比 vanilla DQN 稳,但 MuJoCo 上仍不如 PPO/SAC 省心。Greedy Q 推理快;随机策略要采样。Deterministic policy(TD3)部署简单,但要自己管 exploration 只在训练期存在。Mobile base discrete + arm continuous 可用 MultiDiscrete + Box 组合 space,或 hierarchical。

7. 一周内的算法试射

新环境到手,用同一套包装器和相近墙钟各跑二十万到五十万步:离散小动作试 DQN,连续试 PPO 和 SAC。看评估回报谁先甩开随机,以及帧率谁更高。操作类任务我倾向 SAC 加 hindsight;Atari 像素仍是 DQN 系更常见。价值系吃回放、GPU 利用率高但离策略稳定性要盯 Q 曲线;策略梯度系要存 rollout,内存和采样吞吐是瓶颈。墙钟到可用策略的时间不是只看样本效率。给新人的文档写「先读 action_space 再选算法族」,比算法名列表有用。

8. 验收

  • 同一 wrapper 跑 random baseline 和 1M step 小实验。
  • 比较 sample efficiency 和实现复杂度,再定主算法。
  • CartPole 用 PPO 也能训,但不如 DQN 直接。
  • 连续任务 DQN 不经济,MuJoCo 硬调 DQN months 白费。
  • 选型文档:「先读 action_space,再选算法族」。

算法选型没有银弹,只有和 action space、reward 密度、是否真机交互匹配的折中。选错家族,调参 months 也救不了。Documentation 给新人:「先读 action_space,再选算法族」,比算法名列表有用。

← 全部文章

johan's blog