目录

强化学习的On-Policy 算法和Off-Policy 算法... 1

On-Policy 算法... 2

主要使用场景:... 2

Off-Policy 算法... 5

主要使用场景:... 5

On-Policy 算法

算法的核心其实就是每一次都进行数据的更新,每一次训练的出来的新策略得到新数据,再去研究新数据得到一个更新的策略。但这样会造成一个问题,就是训练会非常慢,因为你要每一次得到新数据再进行下一次。 On-Policy 的优势:理论简单、实现直接、策略一致性强、对时序数据依赖高

主要使用场景:

  1. 对策略稳定性和收敛性要求高,理论清晰度优先:
    • 场景举例:
      • 理论研究、算法原型验证: 当你需要清晰地理解算法原理、验证理论推导或构建一个新算法的基准时。
      • 需要强理论保证的场景: 某些安全性要求极高的领域(虽然RL本身在安全关键领域应用需谨慎),需要算法行为可预测、收敛性可分析。
    • 为什么 On-Policy 合适:
      • 策略一致性: On-Policy 最核心的优势!用来评估动作好坏的数据(计算梯度)和生成这些数据的策略是严格一致的。 这直接满足了策略梯度定理的数学假设(策略评估基于当前策略),理论上推导出的梯度是无偏的(估计值函数准确的前提下),更新方向更“正确”,学习过程通常更稳定、更可预测。
      • 避免 Off-Policy 的麻烦: Off-Policy 需要处理行为策略目标策略之间的差异(分布偏移),常用重要性采样来校正。但重要性采样在高维动作空间或策略差异大时,方差会急剧增大(估计非常不稳定),或者偏差难以控制。On-Policy 完全绕开了这个难题。
    • 效果: 算法行为更符合理论预期,调试和理解更容易,收敛过程相对更平滑(虽然可能慢)。
  2. 环境相对便宜或可以高效并行采样:
    • 场景举例:
      • 仿真环境运行速度快: 比如简单的网格世界、Atari 游戏(模拟器运行极快)、物理引擎高效的机器人仿真(如 MuJoCo, PyBullet)。
      • 能利用大规模分布式计算: 拥有大量 CPU 核心(如云服务器集群)可以同时运行成百上千个环境实例。
    • 为什么 On-Policy 合适:
      • 弥补样本效率劣势: On-Policy 最大的缺点是样本效率低(数据用一次就扔)。但如果环境模拟一次非常快(毫秒级),或者你能同时跑很多很多个环境副本(并行采样),那么你可以在短时间内收集到海量的新数据。这样,即使每次更新只用这批新数据,也能获得足够的“学习信号”。
      • 现代 On-Policy 利器(A3C, PPO): 像 A3C/A2C 和 PPO 这类现代 On-Policy 算法,就是为大规模并行采样而设计的。它们让多个工作者(Worker)同时用同一个策略的副本与环境交互,收集到的数据立即(或定期)汇总用于更新中心策略,然后迅速将更新后的策略同步给所有工作者。这样,虽然每个数据只用一次,但并行产生的数据洪流足以支撑高效学习。
    • 效果: 在计算资源充足(特别是CPU并行资源)且环境仿真快的情况下,On-Policy 方法(尤其是 PPO)可以跑得非常快,达到甚至超过一些 Off-Policy 方法的训练速度,同时保持稳定性和简单性。
  3. 策略更新幅度需要严格控制:
    • 场景举例:
      • 学习过程容易崩溃的环境: 某些环境中,策略稍微变差一点就可能导致智能体陷入糟糕状态无法恢复,或者奖励信号非常稀疏、延迟长,一旦策略更新错误就很难挽回。
      • 需要平滑渐进式改进: 比如训练机器人执行复杂技能,策略需要稳步提升,不能有大的倒退。
    • 为什么 On-Policy 合适:
      • 信任域(Trust Region)方法: TRPO 和 PPO 是 On-Policy 方法中的佼佼者,其核心思想就是限制每次策略更新的幅度,确保新策略 θ_new 和旧策略 θ_old (用来收集数据的策略) 不会偏离太远
      • KL散度约束/Clip目标函数: TRPO 通过复杂的优化强制策略更新的 KL 散度低于阈值;PPO 用更简单的目标函数裁剪(Clipping)来近似实现同样的效果。
      • 依赖当前数据: 这些约束的计算强烈依赖于当前策略收集到的数据分布。使用旧策略的数据来估计新、旧策略之间的差异(KL散度)或者计算 PPO 的 Clip 目标,在策略差异大时是非常不准确的。On-Policy 保证了用于计算这些约束/目标的数据精确地反映了旧策略 θ_old 的行为,从而使得约束有效,更新更保守、更稳定。
    • 效果: 显著提高了学习稳定性,避免了策略更新导致的性能崩溃,在复杂、敏感的任务中表现更鲁棒。PPO 因其优秀的稳定性和不错的效率,成为当前深度强化学习实践中最流行的算法之一。
  4. 任务对数据序列的新鲜度和相关性要求极高:
    • 场景举例:
      • 环境动态剧烈变化或非平稳: 环境规则、对手策略、目标本身会随着时间或智能体的行为而改变。
      • 智能体行为显著影响环境状态分布: 智能体学到的策略会极大地改变它未来看到的状态分布。
    • 为什么 On-Policy 合适:
      • 数据即时效性强: On-Policy 强制使用最新策略生成的数据。这些数据最能反映当前环境的状态当前策略行为所带来的即时后果。
      • 避免过时数据的误导: 在环境快速变化的情况下,经验回放池里的旧数据可能描述的是一个“已经不存在”的环境状态或动态。用这些过时的数据来更新当前策略,就像用去年的地图导航今天的路况,很可能导致错误的更新方向。On-Policy 的数据总是“热乎的”,最能代表当下的情况。
    • 效果: 智能体能更快地适应环境的变化,保持学习到的策略与当前实际情况的相关性。

总结一下什么时候用 On-Policy

  • 当你追求稳稳的幸福时: 需要理论清晰、更新稳定、避免发散,愿意牺牲一些样本效率换取可靠性和可预测性(尤其适合研究和关键应用原型)。
  • 当你家大业大(算力足)时: 环境仿真速度极快,或者你能大规模并行运行环境(很多CPU核心),可以快速生成海量新数据来弥补“用一次就扔”的缺点。PPO 是这个场景的王者
  • 当你走钢丝时: 任务极其敏感、容易学崩,需要严格控制每次策略更新的步伐,确保新策略不会偏离旧策略太远(信任域方法 TRPO/PPO 的核心优势)。
  • 当你面对善变的世界时: 环境或任务本身在快速变化,旧数据很快过时失效,必须用最新鲜的数据来学习才能跟得上变化。

Off-Policy 算法

核心就是他会有个经验回放池,他会再训练开始前放入大量所谓的旧数据,每一次的训练就是从回放池里面随机取出一堆数据进行训练,训练出来的新数据可能会再放入回放池。再这个算法里面会有两个actor,一个是行为策略,一个是目标策略,行为策略需要知道他和目标策略不相同。 Off-Policy 的两个最大优势:样本效率高 和 策略解耦

主要使用场景:

  1. 数据采集昂贵、困难或耗时 (样本效率是关键)
    • 场景举例:
      • 真实机器人控制: 让物理机器人动一次需要时间,有磨损风险,成本高。你不能让它每学一点新知识就重新跑几千次。
      • 复杂模拟环境: 有些高精度仿真(如CFD流体模拟、高精度物理引擎)跑一次模拟可能需要几小时甚至几天。
      • 与人交互的系统: 训练客服机器人或游戏AI时,让真人用户反复陪练收集数据效率低下且影响体验。
      • 高风险环境: 在自动驾驶、金融交易模拟中,让一个不成熟的策略(探索阶段)反复试错可能代价巨大
    • 为什么 Off-Policy 合适:
      • 经验回放池是核心! DQN 把过去所有经验 (s, a, r, s') 都存起来。每次更新网络参数时,不是用最新数据,而是从这个大池子里随机抽一小批旧数据来学习。
      • 数据复用: 同一条经验数据 (s, a, r, s') 可以被用来训练网络很多很多次。一次交互,终身学习(直到被挤出池子)。这极大提高了数据的利用率
      • 效果: 这意味着你不需要让智能体频繁地、大量地与环境进行新的交互来获取学习素材。一次交互获得的数据,可以供后续多次参数更新使用。在数据采集成本高的场景下,这能显著节省时间、金钱和资源
  2. 需要高效探索 (策略解耦是关键)
    • 场景举例:
      • 探索受限的环境: 比如某些状态很难到达,或者某些动作的收益需要长期探索才能发现。
      • 需要激进探索策略: 为了更快发现好的策略,有时需要让智能体采取当前看起来不是最优的、甚至有点“疯狂”的探索动作(高ε-greedy, 噪声探索等)。
    • 为什么 Off-Policy 合适:
      • 行为策略 vs 目标策略: Off-Policy 的精髓在于生成数据的策略 (行为策略,Behavior Policy) 和正在学习优化的策略 (目标策略,Target Policy) 可以不同
      • 灵活探索: 你可以用一个专门负责激进探索的行为策略(比如 ε 很大的 ε-greedy,或者添加大噪声)去和环境交互,收集数据并存入经验池。这个行为策略可以大胆尝试各种动作,即使很多尝试是失败的。
      • 稳定学习: 同时,你的学习算法(比如 DQN)在更新目标策略时,使用的是从经验池中均匀(或优先级)采样的数据。这些数据混合了不同探索阶段的结果(包括激进探索获得的宝贵经验)。目标策略在学习时,会冷静地分析这些数据,提取有用的模式,逐渐优化成一个更优、更稳定的策略,而不需要自己亲自去冒险做那些激进的探索动作。
      • 效果: 这相当于你雇了一个敢死队(行为策略)去前线冒险收集情报(数据),而你的将军(目标策略)在后方安全地研究这些情报,制定更好的作战计划。分离了高风险探索和高价值策略学习的过程。
  3. 需要利用历史数据或预训练 (策略解耦)
    • 场景举例:
      • 离线强化学习 (Offline RL) 你有一大堆别人(或者旧系统)收集好的历史交互数据,但不能再与环境交互(比如历史医疗记录、旧机器人日志、人类游戏录像)。你想直接从这些静态数据集中学习一个好的策略。
      • 预训练: 想先用一些容易获得的数据(可能是模拟数据、人类示范数据、其他策略生成的数据)初始化一个策略,然后再让它在线微调。
    • 为什么 Off-Policy 合适:
      • 天然适配: Off-Policy 方法的核心就是能用不是当前目标策略生成的数据来学习。经验回放池本质上就是一个历史数据集。
      • 直接学习: 在离线 RL 中,经验池直接由这个静态历史数据集初始化。DQN 等 Off-Policy 算法可以直接从这些数据中学习价值函数或策略,而完全不需要生成这些数据的原始策略还在运行,也不需要当前策略去和环境交互。这是 On-Policy 方法完全做不到的。
      • 效果: 解锁了利用海量历史数据学习的可能性,避免了在线交互的成本和风险。对于预训练,可以用低成本数据快速初始化一个还不错的策略。
  4. 分布式/并行训练加速 (样本效率 + 策略解耦)
    • 场景举例: 需要训练非常复杂的模型或解决非常难的问题,需要大量数据。
    • 为什么 Off-Policy 合适:
      • 解耦数据生产与消费: 可以部署多个环境实例(或智能体),并行地 用相同或不同的行为策略与环境交互,源源不断地将收集到的数据存入同一个共享的经验回放池。
      • 独立学习器: 一个(或多个)独立的学习器进程可以持续地从共享池中采样数据,更新目标网络。数据生产和模型更新是异步进行的。
      • 效果: 极大地提高了数据收集的速度和吞吐量,充分利用了计算资源(CPU 收集数据,GPU 训练网络),加速整体训练过程。On-Policy 方法(如 A2C)虽然也能并行,但通常要求并行收集的数据属于同一策略版本,且数据用完即弃,效率相对较低。

总结一下什么时候用 Off-Policy

  • 当你玩不起的时候: 每次让智能体与环境交互都很贵(时间、金钱、资源、风险),你需要榨干每一条数据的价值(经验回放复用数据)。
  • 当你需要敢死队的时候: 你需要进行大胆、高效甚至激进的探索来寻找好策略,但又不希望学习过程本身被这些冒险行为搞得不稳定(行为策略探索 vs 目标策略学习)。
  • 当你有历史宝藏的时候: 你有现成的历史交互数据想直接利用,无法或不方便再在线交互(离线强化学习)。
  • 当你需要人多力量大的时候: 你想通过大规模并行采样来加速训练(分布式强化学习)。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐