1. 什么是on-policy,什么是off-policy
其实这个概念我们之前已经提到了,这里不妨再提一下:
- on-policy就是获取数据的动作和最终策略的动作是一致的,比如Sarsa。
- off-policy就是获取数据的动作和最终策略的动作不一致,比如QLearning。
从这种定义我们也可以得知:我们的强化学习流程中涉及到两个关键流程:一个是选择用来获取数据的动作,另一个则是我们最终用来选择动作的策略。
2. Behavior policy和Target policy
on-policy其实挺符合我们直觉的,问题是off-policy为什么要有两种策略?
先给个定义好了:
- 用来与环境互动产生数据的策略,即在训练过程中做决策。这种策略叫做behavior policy。
- 而目标策略在行为策略产生的数据中不断学习、优化,即学习训练完毕后拿去应用的策略。这种策略叫做target policy。
强 化学习方面主要有两个问题,一个叫做exploitation,另一个叫做exploration。我们获得数据,就是属于exploration,这是 我们behavior policy所做的事情;我们训练我们的策略,就是属于exploitation,是我们target policy所做的事情。
3. 数学背景
(1)Coverage
有些人可能会觉得很疑惑,你采用两个不同的策略,为什么可行?答案是,确实不太可行,我们得加一点约束。
首先既然是用来“探索”的behavior policy,它产生的数据能给我们的target policy训练,那他能采用的动作肯定是target policy的超集把,用数学的语言来描述,就是:
为了能从行为策略b(即behavior policy)产生的样本回合(Episode)中评估(学习)策略 ,我们要求当执行策略时中的每个动作都有一定概率发生,也就是时
,必有
(逆命题不一定成立)。这种要求称为“包含”(Coverage)。
(2)Importance sampling
Importance sampling的核心在于采样。现在你有两种分布,你可以在其中一种分布中采样x,来得到第二种分布的f(x)的期望。这一点和我们的on-policy和off-policy很像。
这个做法的一个注意点是:我们的两个分布不能相差太多,反例如下图所示:
4. PPO和PPO2算法
引入了importance sampling以后,我们就可以着手研究policy-based中的off-policy算法了,首先,既然我们是从另一种策略中取得数据的,我们研究对象也会发生相应的变化:
我们的PPO和PPO2算法,则是基于以下两个式子:
有了这个以后,我们就可以很顺利地编写相关程序了。