强化学习方法

# Deep Reinforcement Learning

1|0Introduction

机器学习的最终目标是学习一个function用于我们的tasks,强化学习是机器学习的一个分支,去深度学习不同,强化学习的训练机制是要与环境交互,并且是以一个孩子的身份从自己以往的经验去学习。

以上是我们的强化学习学习图,Policy是我们要学习的function with parameter,用πθ表示,我们的输入是observation o, 以及输出 action a,其中action作用于环境中会有一个函数判断我们的reward r。对于我们的每一组实验,我们在不同时间段有不同的观测和动作,其中我们定义一组实验(游戏)为trajectory τ={s1,a1,s2,a2,,sT,aT},对于τ,我们可以定义其概率

pθ(τ)=p(s1)pθ(a1s1)p(s2s1,a1)pθ(a2s2)p(s3s2,a2)=p(s1)t1pθ(atst)p(st+1st,at)

并且,对于每一组 τ,我们定义最终的Reward R(τ)=tTrt,定义其均值

R¯θ=R(τ)pθ(τ)=Eτpθ(τ)[R(τ)]

所以整个学习的目标找到最佳的θ

θ=argmaxθR¯θ

那么现在问题就变成了我们怎么去优化得到最佳的θ

2|0Policy Gradient

我们根据R¯θ的梯度优化模型参数

R¯θ=τR(τ)pθ(τ)=τR(τ)pθ(τ)pθ(τ)pθ(τ)=τR(τ)pθ(τ)logpθ(τ)=Eτpθ(τ)[R(τ)logθ(τ)]1Nn=1R(τn)logpθ(τn)=1Nn=1Nt=1TnR(τn)logpθ(atnstn)

之后我们通过 R¯θ去优化参数

θθ+ηR¯θ

2|1Add a Baseline

如果当 R(τn)总是是正的,由于我们计算的R¯θ是用采样的,由于某些行为被采样的概率是很小的,然后 r又是正的,所以会导致容易采样到的action的概率越大,所以我们要加一个baseline或者理解为一个bias,我们在优化的时候使用这个方法

R¯θ1Nn=1Nt=1in(R(τn)b)logpθ(atnstn)

2|2Assign Suitable Credit

由于上式中,在相同的τ中的每一个action中都有相同的 r,这并非是公平的,因为其实每一个action的好坏其实是不同,而且一个动作的收益只能从后面的结果中才能体现出来,并且随着时间戳越长,r的权重应该是越小的,所以我们做出如下改变

R¯θ1Nn=1Nt=1in(t=tTnγttrtnb)logpθ(atnstn)γ<1

并且,我们把上式的 (t=tTnγttrtnb)称为 Advantage Function,用于评价我们(st,at)下,at相较于其他行为action更好的的程度

3|0Proximal Policy Optimization

Importance Sampling

由于如果当我们对p(x)并不了解的时候,我们可以使用另一个分布q(x)去模拟p(x),如下证明

Exp[f(x)]=f(x)p(x)dx=f(x)p(x)q(x)q(x)dx=Exq[f(x)p(x)q(x)].

我们在使用分布q去计算 均值的时候,需要乘上p(x)q(x)

但是分布p(x)q(x)不能差太多,因为这样做出的模拟其实是有弊端的,我们考虑两个分布的方差

Varxp[f(x)]=Exp[f(x)2](Exp[f(x)])2Varxq[f(x)p(x)q(x)]=Exq[(f(x)p(x)q(x))2](Exq[f(x)p(x)q(x)])2=Exp[f(x)2p(x)q(x)](Exp[f(x)])2

我们使用Importance Sampling的思路用于我们的训练Policy的过程,我们先介绍On-policy和Off-policy的直观概念

  • On-policy:意味着直接和环境做互动,从自己以往的经验中学习
  • Off-policy:表示让别人和环境做互动,从别人的行为中学习

那么使用Off-policy时,我们使用πθ,去收集数据τ。当θ被更新时,我们可以多次使用样本数据,使用的方法就是使用 πθ去训练θ,使用如下的函数,并且使用之前提到的梯度函数

R¯θ=Eτpθ(τ)[pθ(τ)pθ(τ)R(τ)logpθ(τ)](1)=E(st,at)πθ[Pθ(st,at)Pθ(st,at)Aθ(st,at)logpθ(atnstn)](2)=E(st,at)πθ[pθ(atst)pθ(atst)pθ(st)pθ(st)Aθ(st,at)logpθ(atnstn)](3)=E(st,at)πθ[pθ(atst)pθ(atst)Aθ(st,at)logpθ(atnstn)](4)

(1)(2)使用了之前提到的Policy Gradient,(2)(3)使用了条件概率优化,但是由于$\frac{p_\theta\left(s_t\right)}{p_{\theta^{\prime}}\left(s_t\right)} (4)$

那么,我们根据 θ去优化的方法θ的目标函数如下

Jθ(θ)=E(st,at)πθ[pθ(atst)pθ(atst)Aθ(st,at)]

同样的,我们要保证 pθ(atst)qθ(atst) 差距不能太大所以我们要使用PPO方法,我们使用的目标函数如下

JPPOθ(θ)=Jθ(θ)βKL(θ,θ)Jθ(θ)=E(st,at)πθ[pθ(atst)pθ(atst)Aθ(st,at)]

除了PPO之外,我们还有一个限制 KL(θ,θ)的方法去优化,TRPO(Trust Region Policy Optimization),公式如下:

JTRPOθ(θ)=E(st,at)πθ[pθ(atst)pθ(atst)Aθ(st,at)]KL(θ,θ)<δ

我们写出PPO算法如下:

  1. 初始化 θ 作为模型参数
  2. 使用 θk去环境进行交互,并收集数据st,at,并且计算 Aθk(st,at)
  3. 优化θ通过 off-policy做gradient ascent

JPPOθk(θ)=Jθk(θ)βKL(θ,θk)

然而在实际训练时,β是超参数,所以我们要通过实际情况去调节

  1. 如果KL(θ,θk)>KLmax,增大 β,如果 KL(θ,θk)<KLmin,减小 β

由于上述算法,我们还需要计算 KL散度,这个过程可以使用PPO2进行化简

JPPO2θk(θ)(st,at)min(pθ(atst)pθk(atst)Aθk(st,at),clip(pθ(atst)pθk(atst),1ε,1+ε)Aθk(st,at))

4|0Q-Learning

Q-learning 和之前提到的训练policy的策略不同,它训练的是一个critic,批评家。critic的作用是去评判一个action的好坏,也就是给出actor π,critic给出 Vπ(s)(代表了在状态 s下,累计的reward的预期值),也就是说critic评价是actor,首先 Vπ是一个网络,那么我们接下来介绍怎么得到Vπ

4|1Monte-Carlo(MC)based approach

MC方法就是计算累计reward的方法,需要在episode结束后计算,我们要让模型去拟合 G

4|2Temporal-difference (TD)approach

由于我们使用的MC方法要将游戏结束后,我们才能得到我们的累计reward,但是如果有个游戏特别长的话,MC方法是不合适的,所以可以使用TD方法,它基于的公式是 Vπ(st)=Vπ(st+1)+rt

4|3MC v.s. TD

由于MC的方法需要拟合的 Ga是比较大的reward,而TD需要拟合的小的每一步的reward,所以会导致MC的方法会产生较大的variance,这会导致过拟合。但是TD的方法的准确率较低,目前的话比较常用的依旧是TD的方法

4|4Other

计算 Qπ(s,a),计算对于 policy π,在当前状态 s下给出action a后的累计奖励预期值

以上我们说的 Qπ是用来评估 π的好坏,但是接下来我们要说的是运用学习出来的Qπ去训练一个更好的 π,我们给出以下结论: 如果对于一个 π,我们学习到了其critic Qπ,那么我们可以找到更好的 π

4|5Q-Learning

我们承接之前所说的,我们要用我们训练出来的 critic Qπ去学习一个更好的 π,定义以上提到的更好,我们给出下列表示

π(s)=argmaxaQπ(s,a)

证明: ππ更好的,即证 Vπ(s)>Vπ(s)

π=argmaxQπ(s,a)Vπ(s)=Q(s,π(s))maxaQπ(s,a)=Qπ(s,π(s))

根据上式,我们从 Qπ(s,π)推导到 Vπ(s)

Vπ(s)Qπ(s,π(s))=E[rt+1+Vπ(st+1)st=s,at=π(st)]E[rt+1+Qπ(st+1,π(st+1))st=s,at=π(st)]=E[rt+1+rt+2+Vπ(st+2)]E[rt+1+rt+2+Qπ(st+2,π(st+2))]Vπ(s)

4|6Target Network

固定下面的Qπ去得到我们的target rt+Qπ(st+1,π(st+1)),我们训练上面模型 Qπ的参数,经过训练多次之后把固定的网络的参数更新,进行重新训练,要注意的是,上下两个模型的输出是不一样的

4|7Exploration

由于我们使用Q函数去决定采取的行为时,我们的选择策略是 a=argmaxaQ(s,a),这并不利于数据采样,我们总是会选择我们觉得会好的行为,但是实际上可能会有 a比起我们认为的最好的a最佳

有两个方法解决这个问题

  • Epsilon Greedy

我们采取action依据这个公式 ,a={argmaxaQ(s,a) with probability 1ε raindom  otherwise 

上面的 ϵ会随着时间变小,这个是非常符合直观理解的,因为最开始我们跟倾向于让模型选择一些其他结果,在训练一段时间后在选择自己认为的最好的结果,这是符合经验积累的过程

  • Boltzmann Exploration

P(as)=exp(Q(s,a))aexp(Q(s,a))

使用上述概率,去使用最好的action,为什么这种方法会work呢,因为在训练的初期,我们的Q函数对于一种state采取的action的结果倾向于相同的,所以使用上式相当于使这种发布更为平均,使在训练早期呈现出一种随机采样的结果

4|8Replay Buffer

重复使用交互样本,将交互样本存进Buffer中,这有点Off-policy的味道,因为交互完的样本用于模型学习之后,后面还会用于模型学习,这就是新的模型学习旧的模型的样本,是学习它人的经验。这会让我们的学习样本更diverse,并且在一定程度上减小模型训练的时间消耗,因为训练模型用的时间大部分是在与环境的交互中

4|9Typical Q-Learning Algorithm

  1. 初始化
  2. 收集训练材料
  3. 模型拟合训练材料
  4. 更新目标 Q后迭代 2-4操作

4|10Continuous Actions

我们上述提到的action是离散的,也就是说他是有限值去收集(st,at,rt,st+1)的训练材料,但是如果我们的action是连续的,比如说射击角度这样的值得话,我们无法穷举所有得action,首先我们回到最初得假设,我们使用Q函数得目的是为了得到a满足

a=argmaxQ(s,a)

我们先给出几个比较容易思考的到的解决方案

  • Approximate Sampling

我们不需要去找到确定的a,使得满足最大的奖励,我们可以通过采样多组实验,从中选择最大的a去执行,这样的a可能是近似于最大的行为,当时这会增大计算量,并且不一定能找到好的a

  • Optimization

我们将a看作是一个我们要训练的参数,使用优化算法比如梯度上升去找到最好的a去最大化Q(s,a),但是每一次找一个a还要调用优化的方法去训练,这无疑是非常耗时的行为

基于上面两个方法的不好的地方,我们设计出第三种解决方法

我们通过专门设计Qπ的结构,得到了三个值u(s),Σ(s),V(s),分别是向量,矩阵和标量,这里有个假设很重要,我们得出的Σ是正定的。我们让得出的三个数做交互,与action做运算。需要注意的是,我们的三个值是根据状态得出的,我们最大化下面的Q(s,a)

Q(s,a)=(aμ(s))TΣ(s)(aμ(s))+V(s)u(s)=argmaxQ(s,a)

由于我们要最大化Q,由于Σ是正定的,所以我们我们就要最小化(aμ(s))TΣ(s)(aμ(s)),那么最小化的方法就是,使a=u(s),这样我们就找到的最佳的a

5|0Actor-Critic (A3C)

我们回到之前提到的Policy Gradient的 表达式

R¯θ1Nn=1Nt=1in(t=tTnγttrtnb)logpθ(atnstn)γ<1

我们将上式的t=tTnγttrtnb定义为 Gtn,它是通过模型和环境交互得来的,回顾Q-Learning中的两种函数

  • 状态值函数 Vπ(s),给定状态s,在π下的累计预期奖励
  • 转台行为值函数Qπ(s,a),给定actor π,在状态s下做出a的行为,之后的累计预期奖励

由于我们在Policy Gradient中要计算Advantage Function,由于Gtn的值代表的含义也是目前行为的奖励值,那么一种很natural的想法就是把我们的Gtn通过Q-Learning中的函数去计算,而b的值作为一种基线可以用Vπ来代替

E[Gtn]=Qπθ(stn,atn)b=Vπθ(stθ)

所以我们的Advantage Function就变为了Qπ(stn,atn)Vπ(stn),那么此时我们要预测两个网络Qπ(stn)Vπ(stn),由于实际上Qπ(stn,atn)实际上是一种期望值,

Qπ(stn,atn)=E[rtn+Vπ(st+1n)]

由于我们在实际过程中,我们是不计算这种均值的,改为下列式子

Qπ(stn,atn)=rtn+Vπ(st+1n)

于是我们可以把最开始训练两个网络的Advantage Function变为下式

rtn+Vπ(st+1n)Vπ(stn)

这样我们就只用训练一个网络,但是我们也因此引入了一个随机值 rtn,但是我们可以在每一步都得出相应的值

5|1Advantage Actor-Critic

在训练模型的过程中,π(s)Vπ的参数可以共享,并且使用输出熵作为regularization,可以让不同的actor尝试不同的action

5|2Asynchronous

5|3Pathwise Derivative Policy Gradient

使用actor和critic结合的方法,直接训练actor和critic

原来的将s输入进π然后得到a,将这个as再重新输入进Qπ,算法解释如下

  1. 初始化 两个Q函数,actor π,和目标 π^
  2. 收集交互样本 (st,π(st),rt,st+1),储存进buffer中
  3. 使用前面的交互样本出(si,ai,ri,si+1) 拟合Qπy=ri+Q(si+1),π^(si+1)^,通过几组交互数据更新Qπ参数,更新π的参数去 maxmizeQ(si,π(si))
  4. Q^=Q,π^=π,迭代2-4步

6|0Sparse Reward

当我们使用强化学习去训练网络时,在外面训练初期,模型的能力是很低的,这导致获得奖励可能是十分稀少的,那么Sparse Reward的情况下,如何训练我们的模型。

6|1Reward Shaping

通过人工设计reward,来调整这个issue,这是很合理的一件事情。比如射击游戏中,原本是击杀敌人能够得分,但是由于在训练初期,机器做到这种这个行为是很困难的。但是我们可以设计一些其他的reward来平衡,比如说开枪reward,存活之类的reward。

6|2Curiosity

增加模型的好奇心,让模型敢于去冒险

可以发现我们重新有训练了两个网络,网络1的作用是接收到atϕ(st)之后输出我们预测的ϕ^(st+1),如果ϕ^(st+1)ϕ(st+1)的差别很大,那么我们输出一个新的reward很大。也就是说我们的新的reward和根据网络一的预测有关,如果网络一越不能预测出那个结果,那么奖励越大。那么网络二的作用是什么呢,这个是由atat^的拟合网络,通过输入ϕ(st)ϕ(st+1),来预测at^。网络二的训练和Feature Ext有关,或者说Feature Ext的作用就是用来过滤掉那些无关紧要的at带来的冒险reward。

6|3Curriculum Learning

上面提到一开始我们的模型能力去做我们的task时,其能力最开始是不够的。那么就像我们上课一样,如果课程太难,那么我们先打好基础从简单开始。Curriculum Learning就是让模型从简单的任务还是学起,逐渐增加难度和挑战。但是机器设计课程也是需要技巧的,有一种常用的方法是Reverse Curriculum Generation,关于这个方法需要搜索一下相关资料

6|4Hierarchical RL

通过设计层级关系,上层下达任务给下层网络,如果下层执行不了,那么上层就会收到惩罚,这个就让上层指定的task是让下层能够学习的。那么强化学习用这个方法也是为了让模型能够从简单的task坐起,并且简单的task具体由上层模型来做。


__EOF__

本文作者1zeryu
本文链接https://www.cnblogs.com/ykzhou/p/16727889.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   1zeryu  阅读(369)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下
点击右上角即可分享
微信分享提示