1、基本组成部分
Policy Gradient由3部分组成,分别是actor,environment和reward function,其中actor是可以控制的,但是environment和reward function是在学习之前事先给定的,不能控制。
不同于Q-Learning基于值函数来决定下一个策略,policy gradient通过一个神经网络来决定下一个策略 π \pi π,神经网络的输入是特征向量或者矩阵,表示当前状态和环境,如在游戏中为游戏画面(图像pixel);神经网络的输出为:所有可选动作的概率分布。根据输出的概率来选择最优的动作 π \pi π进行执行。执行完选定的动作之后,会产生一个执行动作之后的收益 r。【这里区分一下Policy Gradient和DQN:在DQN中,神经网络的作用是计算Bellman方程的后效收益,最终还是基于值函数来选择下一个策略,不同于policy gradient直接输出选择所有策略的一个概率。】
2、policy gradient执行过程
从开始输入状态 s1,选择执行动作 a1,得到收益r1,依次类推直到 T个时间步之后到达结束状态,这么一个过程叫做一个episode,一个episode的总收益表示为: R=∑t=1Trt,actor的目标是为了最大化总收益 R。
令 τ={s1,a1,s2,a2,...,sT,aT}表示一个trajectory,即所有的状态的动作的串联concatanation。从而,在给定参数 θ 条件下,可以计算一个trajectory出现的概率:
上式中, p(st+1∣st,at)属于环境控制的部分,某些情况下可能是确定的,即给定一个状态动作,下一个状态时确定的;但某些情况下,如游戏情境中,通常是不确定的。
上述介绍了一个episode对应的收益 R,即每一个trajectory对应一个收益 R,而由于在动作选择,甚至状态更新的时候都是有随机性的,所以更可靠,更有代表性的收益值是期望收益值,如下所示:
即每一个trajectory出现的概率乘上它的收益,即为所有trajectory的期望收益值。
若想对参数 θ 进行训练,需要求期望收益
Rˉθ的导数
∇Rˉθ,因为收益值
R(τ)与参数 θ 无关,同时有公式∇f(x)=f(x)∇log(f(x))成立,所以推导过程如下所示:
policy gradient数据集获取通过和环境进行交互来获取在一次episode下执行一系列动作之后的收益,将训练数据集中的trajectory和reward进行梯度上升(gradient ascent,因为是最大化收益)参数训练,之后更新模型,过程示意如下图所示:
3、执行policy gradient的Tips
3.1 增加一个baseline
增加baseline的缘由是:由于在进行模型训练时,只是对sample的部分样本数据进行了参数学习,所以某些动作可能不能被sample到;同时在很多情况下,收益值没有负值的情况存在,这就会导致所有sample到的动作被选择的概率均一直上升。为了克服上述问题,在计算期望收益值的梯度的时候,在每一个sample的期望收益之后都减去一个baseline系数,这个系数可以取值为:
b=E[R(τ)],添加baseline的policy gradient的计算方法如下所示:
添加baseline之后,导致收益值项R(τn)−b有正有负,从而次优的动作被选择到的概率就会减小。
3.2 分配合理的reward权重
上述在计算梯度的时候还有一个问题,就是在一个trajectory中的所有状态动作对,他们的权重系数项(即 R(τn)−b)都相同,但这样做是不公平的,因为一个trajectory中的不同状态动作对可能有的好,有的差。若在sample的次数够多时,上述问题其他可以被解决,但是通常在训练模型时,sample的次数都是有限的,所以为了克服上述问题,在计算权重系数项,即reward项时,只考虑当前状态动作对之后的所有reward的累和,而不是整个trajectory所有reward的累和。示意图如下所示:
所以上述添加了baseline的梯度计算式可以进一步改进为:
进一步改进上式,可以将未来的reward再添加一个折减系数 γ<1,说明当前的决策对于未来的影响随着时间的加长会逐渐减弱:
令 Aθ(st,at)=∑t′=tTnγt′−trt′n−b表示Advantage Function,其表示的意思是在状态st下,采取动作 at有多好,他可以由一个 critic network来进行估计。
4、Proximal Policy Optimization
4.1 On policy 和 Off Policy
On Policy下,用于学习的agent和与环境进行互动的agent是同一个agent,即agent一遍和环境进行互动,一边进行学习;Off Policy下,用于学习的agent和与环境进行互动的agent不是同一个agent,即另外一个agent通过观察其他agent与环境的互动进行学习。
由On Policy到Off Policy的原因在于:根据梯度的计算公式:
在上述On Policy学习时,每一次更新参数θ之后,每一个trajectory的概率分布 τ∼pθ(τ)就会发生改变,所以训练数据需要重新使用新的 θ进行sample生成,这样就会浪费大量的时间在sample数据上面。为了节省数据sample的效率,同时提高数据的使用效率,采用一个额外的参数' θ′,使用 θ ′ 进行sample数据来训练 θ
因' θ′在一定训练次数下是固定的,所以可以多次使用 θ′sample的数据。
4.1.1 Importance Sampling
Importance Sampling: 根据大数定理,可以知道下式成立:
即在数据满足独立同分布的条件下,若 x服从 p分布,在样本数量 N足够大的条件下,f(x)的数学期望近似等于 1 N1∑i=1Nf(xi)。若现在不能从 p分布下取样本,只能从另外一个 q分布下取样本,则可以对上式进行下述改进:
即在 q q q分布下取样的数学期望相对于在 p 分布下的属性期望,需要乘以一个权重系数 q(x)p(x)。
由上述推导可以知道,可以使用某个分布 q 来代替原始分布 p,在sample样本数量足够多的情况下,二者的属性期望通过上式近似恒等。但是,方差Varx∼p[f(x)]和 Varx∼q[f(x)q(x)p(x)]通过推导可以得出,在分布 p p p和 q q q的差别很大时,方差差别很大。下图直观表达了Importance Sampling的缺陷:
4.1.2 Off Policy下的PPO梯度计算
根据Importance Sampling的规则,通过 θ′来sample数据,通过这些sample的数据来训练θ,期望收益关于参数 θ 的导数如下所示:
即使用θ′sample出一组数据,使用这组数据对 θ进行多次训练,在 θ 训练时,梯度计算时要采用上式进行。
将3.1和3.2中的改进措施应用在off Policy中,梯度计算方式如下所示:
上述有提到,当 θ和 θ ′差距过大时,通过importance sample方法得到的结果会变差,为了防止 θ 和 θ ′差距过大,提出PPO。通过PPO计算梯度的方式如下所示:
其中, βKL(θ,θ′)表示一个约束,用来计算 θ和 θ′两个不同model输出action的KL divergence,即来衡量 θ 和 θ ′的相似程度。这里 和 θ ′ 之间的KL 的divergence不是 θ和 θ′值的差距,而是他们输出行为上的差距,即在同一个给定状态下,输出不同动作概率分布之间的差距。
PPO的算法流程如下所示:
其中, θk表示前面某次训练的参数,本人认为 θk应该更一定次数之后通过 θ进行更新。
由于上述计算KL divergence比较麻烦,所以提出了PPO2方法来简化PPO,PPO2也是为了使得 θ 和 θ′的差距尽可能的小。PPO2的计算方法如下所示:
通过图像可以直观了解PPO2:
其中,横轴表示pθk(at∣st)pθ(at∣st),纵轴表示 Aθk(st,at)前面的系数。蓝线表示clip函数,绿线表示 pθk(at∣st)pθ(at∣st),红线表示取 min之后的效果。当收益 A>0为正时,需要训练 θ增大 st,at对被选择的几率,即 pθk(at∣st)应该增大。但是为了防止 θ和 θ ′ 差距过大, pθk(at∣st)pθ(at∣st)最大为 1+ϵ;当收益 A<0为负时,需要训练 θ减小 st,at对被选择的几率,即 pθk(at∣st)应该j减小。但是为了防止θ和 θ′差距过大,pθk(at∣st)pθ(at∣st)最小为 1−ϵ。