PPO(Proximal Policy Optimization)
Policy Gradient(策略梯度)
基本思想
首先需要知道的是,在Reinforcement Learning里面会有一个Agent跟一个Environment。这个Agent会有Observation看到世界种种变化,这个Observation又叫做State,这个State指的是环境的状态,也就是你的machine所看到的东西。但机器没有办法看到环境的所有状态,所以才会有这个partial of state 这个想法,这个partial of state其实就是Observation。machine会做一些事情(Action),Action会影响环境,会跟环境产生一些互动。因为它对环境造成的一些影响,它会得到Reward,即这些影响是积极的还是消极的。
而Policy可以理解为一个包含参数
θ
\theta
θ的neutral network,它将Observation中观察到的变量作为输入,将各个可能执行的action的概率向量作为输出,并基于该概率决定下一步要执行的action。
我们称游戏从开始到结束的一个完整的回合叫做Episode,则每个Episode是由一个初始状态加上若干个行动action和状态state的组合形成的一个序列构成的(下文称该序列为
τ
\tau
τ)。每完成一个action,机器会得到一个reward,游戏的目标是让reward最大化,亦即reward是我们的目标函数。
给定一个行动状态序列
τ
\tau
τ, 我们可以得到它对应的收益reward,通过控制actor(实质是控制参数
θ
\theta
θ),我们可以得到不同的收益。由于actor采取的行动和基于某一个环境下采取行动后得到的状态state是随机的,故我们只能得到一个期望值,最终的目标是要是这个期望值达到最大,该期望值的表示如下图。
其中
R
(
τ
)
R(\tau )
R(τ)表示执行某一个序列
τ
\tau
τ得到的reward,
ρ
θ
(
τ
)
{\rho _\theta }(\tau )
ρθ(τ)表示在给定的参数
θ
\theta
θ下执行了序列
τ
\tau
τ的概率,具体来说,是在出现了某初始状态的概率上,执行某个action,并返回某个状态的概率的乘积,再乘上下一个action的概率和返回下一个状态的乘积…以此类推,如下图所示:
- a t {a_t} at表示第 t {t} t个action,
- s t {s_t} st表示第 t {t} t个状态( s 1 {s_1} s1为初始状态),
- p θ ( a t ∣ s t ) {p_\theta }({a_t}|{s_t}) pθ(at∣st)表示在状态 s t {s_{t}} st的基础上,执行 a t {a_{t}} at的概率,
- p ( s t + 1 ∣ s t , a t ) p({s_t+1}|{s_{t}},{a_{t}}) p(st+1∣st,at)表示在状态 s t {s_{t}} st的基础上,执行 a t {a_{t}} at后得到 s t + 1 {s_{t+1}} st+1的概率
而最终的目标就是要使
R
‾
θ
{\overline R _\theta }
Rθ,即采取某一个行动状态序列的概率和该采取该序列获得的reward的乘积之和达到最大。
Policy Gradient
得到目标函数之后,我们利用之前学过的Gradient Descent思想求解目标函数最大值时对应的参数 θ \theta θ。但由于我们要求的是最大值,具体实践时与之前求损失函数最小值所用的方法相反,这里使用的是Gradient Ascent。当然思路是大致相同的,首先还是要求解梯度。
求解梯度的步骤如下,以前文所述目标函数为基础,对参数 θ \theta θ 求导,其中,对概率加权的reward求和就是求reward的期望,因此有红框部分的改写,又因为训练的过程中会进行采样训练,采样个数为N,因此公式可以近似表示为N词采样得到的reward的平均。
PPO算法
从on-policy到off-policy
on-policy和off-policy的区别,在原课程中是这样解释的:
on-policy:The agent learned and the agent interacting with the environment are the same;
off-policy:The agent learned and the agent interacting with the environment are different;
举例来说,当一个学习下棋的machine,它自己和其他人或其他machine下棋,在下棋的过程中学习胜利的方法,这种学习是on-policy的;当它不自己参与而是看着别人下棋同时进行学习,这样的学习则是off-policy的;
Q:为什么要引入off-policy的机制?
A: 如果我们使用
π
θ
\pi_\theta
πθ 来收集数据,那么参数
θ
\theta
θ 被更新后,我们需要重新对训练数据进行采样,这样会造成巨大的时间消耗。但利用
π
θ
′
\pi_{\theta}′
πθ′来进行采样,将采集的样本拿来训练
θ
\theta
θ ,
θ
′
\theta′
θ′ 是固定的,采集的样本可以被重复使用。
off-policy的原理:Important Sampling(重复性采样)
Important Sampling 主要解决这样一个问题:用于求解一个概率分布的期望值时,所用的样本数据是由另一个概率分布所产生的。
具体做法:根据目标策略
π
\pi
π 和行为策略
b
b
b 产生相同策略序列的的概率的比值作为权重加权求和得到reward。我们将这个比值称为importance-sampling ratio:
(虽然得到某个指定的序列除了和策略参数有关外还与环境相关,但比值可以消掉环境带来的影响,即消掉上图第二项中的转移概率
p
p
p。)
需要注意的是,目标策略 π \pi π和行为策略 b b b的参数(在本文中即 θ \theta θ和 θ ′ \theta′ θ′)不能相差过大,否则方差会出现较大的差别。
PPO(proximal policy optimization)
- 初始化policy的参数 θ \theta θ
- 在每一次迭代中,使用 θ ′ \theta' θ′ 来和环境互动,收集状态和行动并计算对应的目标函数
- 不断更新参数,找到目标函数最优值对应的参数 θ \theta θ
为了防止上面提到的 θ \theta θ和 θ ′ \theta' θ′相差过大,我们在问题中加入了KL惩罚因子以约束这个行为。首先需要设置一个能接受的最大差别 K L max KL_{\max } KLmax,当当前的KL大于 K L max KL_{\max} KLmax时增大 β \beta β(增大惩罚力度),反之则减小 β \beta β(减小惩罚力度)