之前看李宏毅关于强化学习视频的时候,他说PPO是 off policy 的方法,但是刚看openai spinningup的时候,里面又明确写明它是一种on policy的方法。

如何区分
我个人觉得,一个非常简单的区分方法为:如果与环境交互的策略与目标策略相关,则是on policy的,否则是off policy的。
注意:我这里说的是“相关”,而严格定义来说应该是“相同”,为什么要这么区分,这就和本文题目有关了。
举两个典型的例子进行说明:
Q-learning:典型的off policy策略。Qlearning在数据收集(与环境交互)过程中,可以采用任意策略,收集到的数据可以长久保存下来用于qtable或qnet的训练。这是因为训练得到的qtable或qnet本身就与模型无关,你可以使用它训练任意actor网络
SARSA:典型的off-policy策略。它和Qlearning唯一的区别在于,qlearning是直接找到\(S_{t+1}\)中最大的reward,而SARSA找到当前策略在\(S_{t+1}\)时的能够获得的reward。显然,一个和目标策略无关,一个有关。
两者Q值的更新公式:

注:2式中,\( a_{t+1} \)表示的是当前策略在\( S_{t+1} \)环境下所选择的action
PPO?
从上面说的角度来看,PPO确实应该归属于on policy策略。因为它收集数据所使用的policy与目标策略是相关的,这里的相关体现在收集数据所使用策略的参数必须每过一段时间与目标策略参数进行同步,它们不能相差太大。
但是如果从严格定义上来讲,虽然两个策略必须保持相似,但本质上还是两个策略,从这方面来说,它确实也是off policy的