一、算法背景

大部分强化学习算法很难保证单调收敛,这使得即使参数空间中看似很小的差异也会在性能上产生非常大的差异结果,因此一个错误的步骤可能会导致策略性能崩溃。而TRPO通过采取尽可能大的步骤提高性能来更新策略,利用KL散度对新旧策略接近程度进行约束,避免了这种情况。

 

 

置信域策略优化算法(Trust Region Policy Optimization,TRPO)是一种基于策略的方法,即先对策略进行参数化,并设计衡量策略质量的指标或目标函数,然后通过梯度上升法来最大化这指标,让策略逼近局部最优。一般的策略梯度算法在沿着策略梯度更新参数时,可能因为步长太大,使策略变差。TRPO在更新参数的时候会先试探权重参数下一步要更新的位置是否失控,如果失控则调整步长,否则视该区域为置信域(Trust Region),在该区域内能保障策略提升的单调性。

二、定义

策略评估(policy evaluation)

策略π下产生的一系列状态-动作对的预期累计回报:

(1)η(π)=Es0,a0,s1,a1,[t=0γtr(st)]s0s0ρ(s0)atπ(st);st+1P(st+1st,at);

状态值函数(state value function)

(2)Vπ(st)=Eat,st+1,[l=0γlr(st+l)]

状态-动作值函数(state-action value function)

(3)Qπ(st,at)=Est+1,at+1,[l=0γlr(st+l)]

动作优势函数(advantage action function)

即状态s下使用动作a产生的回报与状态s时所有动作产生平均回报的差,衡量某个特定动作相对平均收益的优势

(4)Aπ(s,a)=Qπ(s,a)Vπ(s)

三、将新策略的回报表示为旧策略的回报+其他值

(5)η(π~)=η(π)+Es0,a0,π~[t=0γtAπ(st,at)],s0ρ(s0),atπ(st),st+1P(st+1st,at)

证明:

Eτπ~[t=0γtAπ(st,at)]=Eτπ~[t=0γt[Qπ(st,at)Vπ(st)]]=Eτπ~[t=0γt(r(st)+γVπ(st+1)Vπ(st))]=Eτπ~[t=0γtr(st)]+Eτπ~[t=0γt(γVπ(st+1)Vπ(st))]=η(π~)+Eτπ~[Vπ~(s0)+γVπ~(s1)γVπ~(s1)+γ2Vπ~(s2)+]=η(π~)+(Es0[Vπ(s0)])s0πs0π~=η(π~)η(π)Es0[Vπ(s0)]=Es0[Ea0,s1,[t=0γtr(s0+t)]]=Ea0,s1,[t=0γtr(s0+t)]=η(π)

定义:

(6)ρπ(s)=P(s0=s)+γP(s1=s)+γ2P(s2=s)+

即每个状态的(未标准化的)折扣访问频率(Discounted Visitation Frequencies),其将时间步上的累加,转为了状态上的累加。当γ为1时,可以将其理解为状态的占用度量。

将该定义带入式(5),得到:

(7)η(π~)=η(π)+sρπ~(s)aπ~(a|s)Aπ(s,a)

证明:

η(π~)=η(π)+t=0sP(st=s|π~)a[π~(a|s)γtAπ(s,a)]=η(π)+st=0γtP(st=s|π~)a[π~(a|s)Aπ(s,a)]=η(π)+sρπ~(s)aπ~(a|s)Aπ(s,a)

四、对η(π~)近似,获得替代回报函数

如果先大量采样得到ρπ~(s),再验证式(7)右边第二项0,计算量太大,需要对不同的π~都进行大量采样,也就是盲目地选择一个策略,然后大量采样,看看式(7)第二项是否大于0,这种方法显然是不现实的,而强化学习的目标就是减少采样次数。

考虑这样一种情况,将原回报函数中的ρπ~(s)替换为ρπ(s),定义替换函数:

(8)Lπ(π~)=η(π)+sρπ(s)aπ~(a|s)Aπ(s,a)

η(π~)Lπ(π~)相差很小时,两者可以相互替代,将其均看成π~的函数,π~π均为θ的函数,当η(π~)Lπ(π~)πθold处一阶近似时,即:

(9)Lπθ old (πθold )=η(πθold )θLπθold (πθ)|θ=θold =θη(πθ)|θ=θold 

证明:

1)对于式(9)的第一个式子:

式(7)中的ππold是一样的,都是指的原来的策略,故:

η(πold)=η(πold)+sρπold(s)aπold(a|s)Aπold(s,a)

其中,

aπold(a|s)Aπold(s,a)=0

上式等号右边第二项为0,故式(9)第一个式子得证。

2)对于式(9)的第二个式子,分别让式(7)和(8)对θ求偏导,得:

θη(π~)|θ=θold =θη(ππθold)+sθρπ~(s)aπ~(a|s)Aπ(s,a)+sρπ~(s)aπ~(a|s)Aπ(s,a)(1)η(πθold)η(πθold)=0(2)π~=πoldπ~θπoldθoldaπ~(a|s)Aπ(s,a)=0=sρπ~(s)aπ~(a|s)Aπ(s,a)θ=θoldπ~=πold=sρπθold(s)aπ~(a|s)Aπθold(s,a)
θLπθold(π~)|θ=θold =0+sρπθold(s)aπ~(a|s)Aπθold(s,a)η(πθold)η(πθold)=0

证毕。

η(π~)Lπ(π~)πθold处一阶近似时,则在πold附近,改善L的策略也能改善原汇报函数η,只要步长控制在πold合理的邻域内。

五、控制ππ~之间的散度小于α,就能保证回报单调增长

如果要使用L回报函数替代η回报函数,则ππ~不能差太多,否则一阶近似邻域将非常小,导致极其小的步长,会使得训练变慢。

Kakade和Langford在2002年提出过一个保守策略迭代更新方案,可以为η更新提供明确的下界,即对于策略改进采用以下混合方式时:

(10)πnew(a|s)=(1α)πold(a|s)+απ(a|s)

其中,π=argminπLπold(π),有

(11)η(πnew)Lπold2ϵγ(1γ)2α2,ϵ=maxs|Eaπ~(a|s)[Aπ(s,a)]|

证明:

首先定义A(s)

A(s)=Eaπ~(a|s)[Aπ(s,a)]

A(s)表示在状态s时采用策略π~相对于之前策略的改进。

A(s)改写式(7)和(8),得到:

η(π~)=η(π)+Eτπ~[t=0γtA¯(st)]Lπ(π~)=η(π)+Eτπ[t=0γtA¯(st)]

由于策略按照 πnew(a|s)=(1α)πold(a|s)+απ(a|s)π~πoldπ各自按照一定权重进行混合的,策略可以表示为策略对(π,π~),由策略对产生的动作对(a,a~)

从这种视角看,产生动作a~的概率为α,因为不同策略也可能产生相同的动作,所以在改进的策略πnew中,产生和原策略的动作(即a)不同的概率最多为α,即P(aa~|s)α

于是有:

A=Ea~π~[Aπ(s,a~)]=E(a,a~)(π,π~)[Aπ(s,a~)Aπ(s,a)]EaπAπ(s,a)=00=P(aa~|s)E(a,a~)(π,π~)|aa~[Aπ(s,a~)Aπ(s,a)]a=a~,Aπ(s,a~)Aπ(s,a)=0

于是有:

(12)|A|P(aa~|s)(|Ea~π~[Aπ(s,a~)|+|EaπAπ(s,a)]|)α2maxs,a|Aπ(s,a)|

nt表示在时刻t之前策略ππ~产生的不同动作的数量,有:

(13)Estπ~[A(si)]=P(nt=0)Estπ~|nt=0[A(st)]+P(nt>0)Estπ~|nt>0[A(st)]

(14)Estπ[A(si)]=P(nt=0)Estπ|nt=0[A(st)]+P(nt>0)Estπ|nt>0[A(st)]

nt=0时,策略ππ~动作相同,将到达相同的状态,则有:

Estπ~|nt=0[A(st)]=Estπ|nt=0[A(st)]

则式(13)减去式(14)有:

|Estπ~|nt>0[A(st)]Estπ|nt>0[A(st)]||Estπ~|nt>0[A(st)]|+|Estπ|nt>0[A(st)]|使(12)4αmaxs,a|Aπ(s,a)|

P(nt=0)(1α)t,故P(nt>0)1(1α)t

于是有:

|Estπ~[A(si)]Estπ[A(si)]|=P(nt>0)|Estπ~|nt>0[A(st)]Estπ|nt>0[A(st)]|(1(1α)t)4αmaxs,a|Aπ(s,a)|

从而有:

|η(π~)Lπ(π~)|=t=0γt|Eτπ~[A(st)]Eτπ[A(st)]|t=0γt4ϵα(1(1α)t)ϵ=maxs|Aπ(s,a)|maxs|Eaπ~(a|s)[Aπ(s,a)]|=4ϵα(11γ11γ(1α))=4α2γϵ(1γ)(1γ(1α))4α2γϵ(1γ)2

证毕。

由式(11)可知,可以保证在一定的误差范围内可以用Lπ(π~)代替η(π~)

但混合策略,即式(12)在实际应用中用得很少,个人理解是超参数α很难设定,而α其实表征的是两个策略之间的距离,而策略其实就是概率分布,衡量两个概率分布的相似程度自然而然想到散度,于是使用总方差散度(the Total Variation divergence)。

对于离散的取值,我们有:

(15)DTV(p||q)=12i|piqi|DTVmax(π,π~)=maxs(π(|s)||π~(|s))

又有:

[DTV(p||q)]2DKL(p||q)DKLmax(π,π~)=maxsDKL(π(|s)||π~(|s))

从而有:

η(π~)Lπ(π~)CDKLmax(π,π~)where C =4ϵγ(1γ)2

可以用KL散度控制ππ~之间的距离小于α时,就能够在误差确定的情况下使用Lπ(π~)替代η(π~),从而在优化Lπ(π~)时,η(π~)也在优化。

在保证回报函数单调不减的情况下,求取更新策略的算法:

算法:保证预期回报η不减的近似策略迭代算法

输入:初始化策略π0

For i=0,1,2,3, until 收敛 do:

计算优势函数Aπi(s,a)

求解如下约束问题:

πi+1=argmaxπ(Lπi(π)4ϵγ(1γ)2DKLmax(πi,π)),

其中ϵ=maxs|Eaπ~(a|s)[Aπ(s,a)]

Lπi(πi)=η(πi)+sρπi(s)aπ(a|s)Aπi(s,a)

End for

证明以上算法的有效性:

Mi(π)=Lπi(π)CDKLmax(πi,π)

Mi(πi)=Lπi(πi)=η(πi)DKLmax(πi,πi)=0

πi+1=argmaxπ(Lπi(π)CDKLmax(πi,π))

η(πi+1)Mi+1(πi+1)

于是有 η(πi+1)η(πi)Mi(πi+1Mi(πi))

故改善Mi也会改善η

证毕。

六、采取重要性采样,Q函数替代A函数,对算法进一步近似

参数化的策略是通过改变参数来优化目标函数,即实现maxθ(Lθold(θ)CDKLmax(θold,θ)),可以改写为:

(16)maxθLθold(θ)subject toDKLmax(θold,θ)δ

但上式的约束太严格,要求状态空间的每一点都维持在KL散度在一定范围内,所以在实际应用中用平均散度来作为最大KL散度的近似,这样就可以使用采样的方法,即:

(17)DKLρ(θ1,θ2):=Esρ[DKL(πθ1(|s)||πθ2(|s))]

则有:

(18)maxθsρθold(s)aπθ(a|s)Aθold(s,a)subject to DKLρθold(θold,θ)δ

式(18)中的sρθold(s)[]可以根据其定义,使用11γEsρθold[]代替(将ρ定义中的γ考虑为权重,要让权重为1,则必须先乘上1γ,然后再除以1γ,这样sρ(s)=1

解释:

sρθold(s)[]=stγtP(st|πθold)[]=tγtsP(st|πθold)[]11γEsρθold[]

又因为式(18)第二个的策略是按照新的策略,所以得引入重要性采样,用原策略采样得到的轨迹来训练

即:

(19)sπθ(a|s)Aθold(s,a)=Eaπθold[πθ(a|s)πθold(a|s)Aθold(s,a)]

再一个优化是用状态-动作价值函数Q(s,a)代替优势函数A(s,a)

解释:

aπθ(a|s)Aθold(s,a)=aπθ(a|s)[Qθold(s)Vθold(s,a)]=a[πθ(a|s)Qθold(s,a)]Vθold(s)aπθ(a|s)=a[πθ(a|s)Qθold(s,a)]Vθold(s)Vθold(s)

原论中提到可以用Q替代A,但在代码实现中还是用A来实现的居多,应该是运用了类似Dueling DQN差不多的技巧,以加快训练速度。

最终TRPO的目标转化为转化为:

(20)maxsEsρθold,aπθold[πθ(a|s)πθold(a|s)Qθold(s,a)]subject to Esρθold[DKL(πθold(|s)||πθ(|s))]δ

七、对目标函数进行一阶逼近,对约束函数进行二阶逼近

纯理论上的TRPO更新不是最容易使用的,所以实际的TRPO算法进行了一些近似操作以快速获得答案。

1)对目标函数进行一阶逼近

Lθold(θ)=Esρθold,aπθold[πθ(a|s)πθold(a|s)Aθold(s,a)]

得到:

(21)minθθLθold(θ)|θ=θold(θθold)

解释:

函数f(x)在x=a处的一阶泰勒展开为 f(x)=f(a)+f(a)(xa)

故对式(20)的第一个式子在θ=θold处进行一阶泰勒展开,得到

Lθold(θ)=Lθold(θold)+θLθold(θ)|θ=θold(θθold)

显然等号第一项为0,最大化一个数等价于最小化它的相反数,且在机器学习中一般习惯于最小化目标函数

maxsEsρθold,aπθold[πθ(a|s)πθold(a|s)Aθold(s,a)]minθ(θLθold(θ)|θ=θold(θθold))

2)对约束函数进行二阶逼近

得到:

(22)12(θθold)TF(θold)(θθold)δF

解释:

根据KL散度的定义得:

DKL(πθold(|s)||πθ(|s))=πθold(|s)logπθold(|s)πθ(|s)dx=πθold(|s))logπθold(|s))dxπθold(|s))logπθ(|s))=ExπθoldlogπθoldExπθoldlogπθ

DKL进行一阶求导,即:

θDKL(πθold(|s)||πθ(|s))=πθold(x|s))θlogπθ(x|s))dx=πθold(x|s)θπθ(x|s)πθ(x|s)dxθ=θold=θπθold(x|s)dx=πθold(x|s)dx==0

DKL进行二阶求导

θ2DKL(πθold(|s)||πθ(|s))|θ=θold=πθold(x|s))θ2logπθ(x|s))dx|θ=θoldH=θ2logπθ(x|s))|θ=θold=πθold(x|s)Hlogπθdx|θ=θold=Eπθold[Hlogπθold]=F

注:

两个重要结论 结论1:Fisher矩阵F是Hessian矩阵H的负期望

F=Ep(x|θ)[θlogp(x|θ)logp(x|θ)T]=Ep(x|θ)[Hlogp(x|θ)]

当黑塞矩阵中的被微分的函数是对数函数时,其与费舍尔信息矩阵就相差一个负号

证明:

F=Exp(x,θ)[θlogp(x|θ)θlogp(x|θ)T]
Hlogp(x|θ)=θ(θlogp(x|θ))=θ(θp(x|θ)p(x|θ))=p(x|θ)θ2p(x|θθp(x|θ)θp(x|θ)T)p2(x|θ)=θ2p(x|θ)p(x|θ)θlogp(x|θ)θlogp(x|θ)T
Exp(x,θ)[Hlogp(x|θ)]=Exp(x,θ)[θ2p(x|θ)p(x|θ)]F=θ2p(x|θ)p(x|θ)p(x|θ)dxF=θ2p(x|θ)dxF=F

结论2:Fisher矩阵F是KL散度的Hessian矩阵H

即对DKL的二阶求导结果,即:

KL[pθ||pθ+d]KL[pθ||pθ+d]+(θKL[pθ||pθ]|θ=θ)Td+12dTFd=KL[pθ||pθ+d]Ep(x|θ)[θlogp(x|θ)]Td+12dTFd=12dTFd

m(θ)=Esρθold[DKL(πθold(|s)||πθ(|s))],则m(θ)θ=θold处的二阶泰勒展开为:

m(θ)m(θold)+θm(θ)|θ=θold(θθold)+12(θθold)Tθ2m(θ)|θ=θold(θθold)=12(θθold)TEsρθold[Hlogπθold](θθold)=12(θθold)TEsρθold[Fπθold](θθold)

另一种证明方法:

KL[logp(x|θ)|logp(x|θ)]=p(x|θ)loglogp(xθ)logp(x|θ)=Exp(x,θ)[logp(x|θ)]Exp(x,θ)[logp(x|θ)]
θKL[logp(x|θ)|logp(x|θ)]=θExp(x,θ)[logp(x|θ)]
θ2KL[logp(x|θ)|logp(x|θ)]|θ=θ=θ2Exp(x,θ)[logp(x|θ)]|θ=θ=Exp(x,θ)Hlogp(x|θ)=F

八、利用共轭梯度法求解最优更新量

对式(21)和(22)构造拉格朗日函数,即

(23)L(θ,λ)=(θLθold(θ)|θ=θold(θθold))+λ(12(θθold)TF(θold)(θθold)δ)

利用KKT条件:

(24)L(θ,λ)θ=θLθold(θ)|θ=θold+λF(θold)(θθold)=0λ0λ(12(θθold)TF(θold)(θθold)δ)=012(θθold)TF(θold)(θθold)δ0

d=λ(θθold),可以看出dθθold同向,则d为最优更新量的搜索方向,即满足:

(25)F(θold)d=θLθold(θ)|θ=θoldd=F1(θold)θLθold(θ)|θ=θold
(26)θ=θold+2δgTF1gF1g,g=θLθold(θ)

 

1)计算更新步长:

设步长为β,则:

(27)δ=12(βd)TF(θold)(βd)β=2δdTFdd=F1g,d=d,g26g
(28)θnew=θold+βd

2)计算搜索方向

式(25)是个线性方程组,如果直接求逆,算法复杂度很高,达到O(n3),其中n是矩阵大小,所以采用共轭梯度的方法来求解,即将求解线性方程组的问题转化为求解与之等价的二次函数极小值问题,具体如下:

首先构造目标函数:

f(x)=12xTAx+bTx,A=ATAx=bbT=θLθold(θ)|θ=θold=g(26)ggA=Ep(x|θold)[θlogp(x|θ)logp(x|θ)T]=Ep(x|θold)[θ2DKL(p(x|θold)||p(x|θ))]=HKL[p(x|θold)||p(x|θ])=F

具体算法过程:

第一步:给定初始迭代点x(0)以及停止条件(阈值ϵn

第二步:计算g(0)=f(x(0))=Ax(0)+b,如果g(0)=0则停止迭代,否则d(0)=g(0)

第三步:for k=0 to n-1 do:

a) αk=(g(k))Tdk(dk)TAdk

b) x(k+1)=x(k)+αkd(k)

c) g(k+1)=f(x(k+1))=Ax(k+1)+b,如果g(k+1)=0,停止迭代

d) βk=(g(k+1))TAdk(dk)TAdk

e) d(k+1)=g(k+1)+βkd(k)

End for

输出xn+1

 

此外:

a)、d)都需要计算Adk,需要计算和存储黑塞矩阵A,为了避免大矩阵出现,只计算Adk向量:

Hv=θ((θ(DKLvπθk(πθk,πθ)))T)v=θ((θ(DKLvπθk(πθk,πθ)))Tv)

即现用一阶梯度和向量v点乘后再计算二阶梯度

九、线性搜索

由前所述,TRPO对目标函数进行了一阶近似,对约束条件进行了二阶近似,且将最大散度限制放宽到了平均散度限制,所以根据前一节介绍的算法得到的πθnew的平均回报未必高于πθold的平均回报,或者KL散度可能没有达到限制条件。所以TRPO在每次迭代的最后进行一次线性搜索,以确保找到满足条件,即找到一个最小的非负整数i,使得:

θk+1=θk+αi2δxTFxx

满足KL散度限制,且策略回报有提升,其中α(0,1)是一个决定线性搜索长度的超参数,而i一般按顺序取1,2,3,……直到θk+1满足条件。

十、TRPO算法流程

初始化策略网络参数θ和价值网络参数ω

for 序列 e=1 E do:

用当前策略πθk采样轨迹{s1,a1,r1,s2,a2,r2,}

根据收集到的数据和价值网络估计每个状态动作对的优势函数A(st,at)

计算策略目标函数的梯度g

用共轭梯度法计算x=F1g

用线性搜索找到一个i,并更新策略网络参数θk+1=θk+αi2δxTFxx,i{1,2,,K}为提升策略并满足KL距离限制的最小整数

更新价值网络参数(与Actor-Critic中的更新方法相同)

end for

 

参考资料

John Schulman Trust Region Policy Optimization

张伟楠 沈键 俞勇 《动手学强化学习》 人民邮电出版社

邹伟 鬲玲 刘昱杓 《强化学习》 清华大学出版社

作者:Dreammaker 链接:https://zhuanlan.zhihu.com/p/605886935 来源:知乎

机智的王小鹏 链接:https://space.bilibili.com/169602174