*、Policy Gradient和PPO(PPO2)

简介: *、Policy Gradient和PPO(PPO2)

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。

1e4d995b274a44c39ad4794c2a36db63.png


令  τ={s1,a1,s2,a2,...,sT,aT}表示一个trajectory,即所有的状态的动作的串联concatanation。从而,在给定参数 θ 条件下,可以计算一个trajectory出现的概率:


image.png



上式中, p(st+1∣st,at)属于环境控制的部分,某些情况下可能是确定的,即给定一个状态动作,下一个状态时确定的;但某些情况下,如游戏情境中,通常是不确定的。


上述介绍了一个episode对应的收益 R,即每一个trajectory对应一个收益  R,而由于在动作选择,甚至状态更新的时候都是有随机性的,所以更可靠,更有代表性的收益值是期望收益值,如下所示:


image.png

即每一个trajectory出现的概率乘上它的收益,即为所有trajectory的期望收益值。


若想对参数 θ 进行训练,需要求期望收益

Rˉθ的导数

∇Rˉθ,因为收益值

R(τ)与参数 θ 无关,同时有公式∇f(x)=f(x)∇log(f(x))成立,所以推导过程如下所示:

image.png


policy   gradient数据集获取通过和环境进行交互来获取在一次episode下执行一系列动作之后的收益,将训练数据集中的trajectory和reward进行梯度上升(gradient  ascent,因为是最大化收益)参数训练,之后更新模型,过程示意如下图所示:


853b4e22a23846d09cc56c18dc374503.png




3、执行policy gradient的Tips


3.1 增加一个baseline


增加baseline的缘由是:由于在进行模型训练时,只是对sample的部分样本数据进行了参数学习,所以某些动作可能不能被sample到;同时在很多情况下,收益值没有负值的情况存在,这就会导致所有sample到的动作被选择的概率均一直上升。为了克服上述问题,在计算期望收益值的梯度的时候,在每一个sample的期望收益之后都减去一个baseline系数,这个系数可以取值为:

b=E[R(τ)],添加baseline的policy gradient的计算方法如下所示:


image.png

添加baseline之后,导致收益值项R(τn)−b有正有负,从而次优的动作被选择到的概率就会减小。



3.2 分配合理的reward权重


上述在计算梯度的时候还有一个问题,就是在一个trajectory中的所有状态动作对,他们的权重系数项(即  R(τn)−b)都相同,但这样做是不公平的,因为一个trajectory中的不同状态动作对可能有的好,有的差。若在sample的次数够多时,上述问题其他可以被解决,但是通常在训练模型时,sample的次数都是有限的,所以为了克服上述问题,在计算权重系数项,即reward项时,只考虑当前状态动作对之后的所有reward的累和,而不是整个trajectory所有reward的累和。示意图如下所示:


ca878d8ed2b94e0eb2e557ced545c1dd.png


所以上述添加了baseline的梯度计算式可以进一步改进为:


image.png


进一步改进上式,可以将未来的reward再添加一个折减系数  γ<1,说明当前的决策对于未来的影响随着时间的加长会逐渐减弱:


image.png


令 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的原因在于:根据梯度的计算公式:


image.png


在上述On Policy学习时,每一次更新参数θ之后,每一个trajectory的概率分布  τ∼pθ(τ)就会发生改变,所以训练数据需要重新使用新的 θ进行sample生成,这样就会浪费大量的时间在sample数据上面。为了节省数据sample的效率,同时提高数据的使用效率,采用一个额外的参数' θ′,使用 θ ′ 进行sample数据来训练 θ

因' θ′在一定训练次数下是固定的,所以可以多次使用 θ′sample的数据。




4.1.1 Importance Sampling


Importance Sampling: 根据大数定理,可以知道下式成立:


image.png

即在数据满足独立同分布的条件下,若 x服从  p分布,在样本数量  N足够大的条件下,f(x)的数学期望近似等于 1 N1∑i=1Nf(xi)。若现在不能从 p分布下取样本,只能从另外一个  q分布下取样本,则可以对上式进行下述改进:


image.png


即在 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的缺陷:


7e4bd51301b64989bcd8ec83b869c390.png



4.1.2 Off Policy下的PPO梯度计算


根据Importance Sampling的规则,通过  θ′来sample数据,通过这些sample的数据来训练θ,期望收益关于参数 θ 的导数如下所示:


image.png


即使用θ′sample出一组数据,使用这组数据对 θ进行多次训练,在 θ 训练时,梯度计算时要采用上式进行。


将3.1和3.2中的改进措施应用在off Policy中,梯度计算方式如下所示:


image.png

上述有提到,当  θ和 θ ′差距过大时,通过importance sample方法得到的结果会变差,为了防止 θ 和 θ ′差距过大,提出PPO。通过PPO计算梯度的方式如下所示:

image.png


其中, βKL(θ,θ′)表示一个约束,用来计算  θ和  θ′两个不同model输出action的KL divergence,即来衡量 θ 和 θ ′的相似程度。这里 和 θ ′ 之间的KL 的divergence不是  θ和 θ′值的差距,而是他们输出行为上的差距,即在同一个给定状态下,输出不同动作概率分布之间的差距。

PPO的算法流程如下所示:


dcf45f7e568d4162b75ccf7d4f5db193.png



其中,  θk表示前面某次训练的参数,本人认为  θk应该更一定次数之后通过  θ进行更新。


由于上述计算KL divergence比较麻烦,所以提出了PPO2方法来简化PPO,PPO2也是为了使得 θ 和  θ′的差距尽可能的小。PPO2的计算方法如下所示:


image.png


通过图像可以直观了解PPO2:

e1859e30d27046dbaf2727efda6e7cac.png


其中,横轴表示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−ϵ。














相关文章
|
机器学习/深度学习 开发框架 .NET
YOLOv5的Tricks | 【Trick6】学习率调整策略(One Cycle Policy、余弦退火等)
YOLOv5的Tricks | 【Trick6】学习率调整策略(One Cycle Policy、余弦退火等)
1773 0
YOLOv5的Tricks | 【Trick6】学习率调整策略(One Cycle Policy、余弦退火等)
|
8月前
|
机器学习/深度学习 算法
Lecture 7:策略梯度
Lecture 7:策略梯度
|
8月前
|
机器学习/深度学习 算法 PyTorch
Gradient Descent Algorithm 梯度下降算法
Gradient Descent Algorithm 梯度下降算法
53 0
|
机器学习/深度学习 存储 缓存
YOLOv5的Tricks | 【Trick9】模型剪枝处理与Pytorch实现的剪枝策略
在yolov5项目中的torch_utils.py文件下,有prune这个函数,用来实现模型的剪枝处理。对模型裁剪,模型剪枝这方面之前没有接触到,这里用这篇笔记来学习记录一下这方面内容。
1841 0
YOLOv5的Tricks | 【Trick9】模型剪枝处理与Pytorch实现的剪枝策略
|
11月前
|
机器学习/深度学习 算法 数据可视化
Lesson 4.3 梯度下降(Gradient Descent)基本原理与手动实现-1
Lesson 4.3 梯度下降(Gradient Descent)基本原理与手动实现-1
|
11月前
|
机器学习/深度学习 算法
Lesson 4.3 梯度下降(Gradient Descent)基本原理与手动实现-2
Lesson 4.3 梯度下降(Gradient Descent)基本原理与手动实现-2
|
机器学习/深度学习 算法 Python
机器学习算法之——梯度提升(Gradient Boosting)上
由于每个子模型要使用全部的数据集进行训练,因此 Ada Boosting 算法中没有 oob 数据集,在使用 Ada Boosting 算法前,需要划分数据集:train_test_split;
机器学习算法之——梯度提升(Gradient Boosting)上
|
机器学习/深度学习 算法
机器学习算法之——梯度提升(Gradient Boosting)下
GDBT本身并不复杂,不过要吃透的话需要对集成学习的原理、策树原理和各种损失函树有一定的了解。由于GBDT的卓越性能,只要是研究机器学习都应该掌握这个算法,包括背后的原理和应用调参方法。目前GBDT的算法比较好的库是xgboost。当然scikit-learn也可以。
机器学习算法之——梯度提升(Gradient Boosting)下
|
机器学习/深度学习 存储 分布式计算
【深度学习系列】(二)--An overview of gradient descent optimization algorithms
【深度学习系列】(二)--An overview of gradient descent optimization algorithms
85 0
【深度学习系列】(二)--An overview of gradient descent optimization algorithms
|
算法 数据挖掘 计算机视觉
YOLOv5的Tricks | 【Trick5】遗传算法实现超参数进化(Hyperparameter Evolution)
YOLOv5的Tricks | 【Trick5】遗传算法实现超参数进化(Hyperparameter Evolution)
668 0
YOLOv5的Tricks | 【Trick5】遗传算法实现超参数进化(Hyperparameter Evolution)