强化学习的数学原理-09策略梯度

Basic idea of policy gradient

截至目前,所有的策略policy都是用表格表示的,如下图所示,每个状态对应一行动作。

1731378261773.png

现在由于策略梯度的方法是直接建立一个关于策略的函数,于是就要改变策略的形式。

现在需要引入一个参数θ,那么策略表示为一个关于参数的函数。

π(as,θ),whereθRmisaparametervector

  • 目前这个策略函数最广泛的形式就是神经网络,神经网络的输入是state输出是采用每个动作的概率,参数是θ7c4cecf8b9f8bc241fd49cbc6164fa5.jpg
  • 引入函数的优点和之前的valuefunctionapproximation是类似的,一方面是存储上function能在statespaceactionspace很大的时候节省很多空间,另一方面就是泛化能力会得到提升,主要是在storagegeneralization两方面有较大的优点。

表格形式和函数形式上对于策略的几点区别

  1. 定义最优策略:表格形式最优策略定义是最优策略下的statevalue大于其他所有策略的,而函数形式下的最优策略引入了一个scalarmetrics来衡量什么是最优策略
  2. 获取在s状态下,采取action的概率:表格形式直接查表即可,而函数形式需要通过神经网络进行一次推理得到。
  3. 改变策略:表格形式直接索引然后改变,函数形式通过改变参数θ来改变策略

下面就看一下policygradient最基本的思想

  1. 首先需要一个metrics或者objectivefunction去定义最优策略J(θ)
  2. 有了目标函数之后就可用梯度的算法做优化,去寻找最优策略θt+1=θt+αθJ(θt)

这就是策略梯度的思想,这个想法是很简单的,但是这其中会存在一些问题。

  1. 怎么选取目标函数
  2. 怎么去计算梯度?

Metrics to define optimal policies

主要有两大类metrics

average value

第一种:averagestatevalue或者被叫做averagevalue,于是就可以定义metrics

vπ¯=sSd(s)vπ(s)

vπ¯是策略的函数,不同策略对应的值不同,所以就可以去优化,找到一个最优的策略让这个值达到最大。

  • vπ¯实际上是一个statevalue的加权平均
  • d(s)0是每个状态的权重
  • 因为sSd(s)=1,我们可以把d(s)描述为概率分布。那么刚才的metrics就可以写成这个形式vπ¯=E[vπ(S)],S表示随机变量Sd

上面相乘再相加的形式可以写成一种更简洁的形式就是两个向量的内积

vπ¯=sSd(s)vπ(s)=dTvπ

vπ=[...,vπ(s),...]TRS

d=[...,d(s),...]TRS


上面就结束了第一种metric总体思想,但是还有问题没有解决就是如何选择d

d的选择也有两种情况,一种是d是独立于π的,另一种就是依赖于π

第一种情况是简单的.

vπ¯=sSd(s)vπ(s)=dTvπ

vπ¯=dTvπ

只需要对后面的vπ求梯度,为了表明dπ没有关系就把d写成d0,vπ¯就写成vπ0¯

dπ没有关系那么如何选择d呢?

  • 最简单的就是把所有的状态认为是equallyimportant,所以d0(s)=1|S|
  • 如何我们关注某些特殊的状态,就可以给某些状态较大的d

第二种情况就是和策略有关系

一种选择d的方式是选择在π策略下的stationarydistribution

然后这个概率可以直接计算出来

dπTPπ=dπT

Pπ是状态转移概率矩阵


average reward

第二种就是averageonestepreward

vπ¯=sSd(s)rπ(s)=E[rπ(S)]

whereSdπ

rπ(s)=aAπ(s|a)r(s,a)

r(s,a)=E[R|s,a]=rrp(r|s,a)

1731385397757.png

这部分还有一点数学形式待完善...

Gradient of the metrics

计算梯度是policygradientmethods最麻烦的部分

首先这里有很多不同的metrics(objectivefunction)vπ¯rπ¯vπ0¯

还需要区分discountedcaseundiscountedcase

这里只给出一个总结的情况

θJ(θ)=sSη(s)aAθπ(a|s,θ)q(s,a)

1731395302500.png

1731395385877.png


(1)θJ(θ)=sSη(s)aAθπ(a|s,θ)q(s,a)(2)=E[θlnπ(A|S,θ)qπ(S,A)]

whereSηandAπ(A|S,θ)

上面这个式子是有用的,因为有期望,所以可以通过采样的方式去近似。这个就是stochasticgradientdescent的思路。

如何得到上面的等式呢?

θlnπ(a|s,θ)=θπ(a|s,θ)π(a|s,θ)

上面这个式子实际就是复合函数求导的链式法则

然后把等式右边的分母乘到左边去

π(a|s,θ)θlnπ(a|s,θ)=θπ(a|s,θ)

把这个式子带入到

(3)θJ=sd(s)aθπ(a|s,θ)qπ(s,a)(4)=sd(s)aπ(a|s,θ)θlnπ(a|s,θ)qπ(s,a)(5)=ESd[aπ(a|S,θ)θlnπ(a|S,θ)qπ(S,a)](6)=Esd,Aπ[θlnπ(A|S,θ)qπ(S,A)](7)=E[θlnπ(A|S,θ)qπ(S,A)]

分析一下上面的一些点

因为需要计算lnπ(a|s,θ),所以必须确保对于所有s,a,θ

π(a|s,θ)>0

但是之前我们的greadypolicy和其他的demesticpolicy出现过π(a|s,θ)=0的一些情况如何去避免的,这里可以使用softmax这个function去解决。

softmaxfunction这个函数主要做的内容就是去归一化去把一个(,+)映射到(0,1)

1731397121259.png

因为π(a|s,θ)>0所以这个策略是stochasticexploratory

Gradient-ascent algorithm(REINFORCE)

θt+1=θt+αθJ(θ)=θt+αE[θlnπ(A|S,θt)qπ(S,A)]

这个公式是没有办法应用的,因为公式中有期望,所以需要通过随机的梯度来代替真实梯度。

θt+1=θt+αθlnπ(at|st,θt)qπ(st,at)

但是上面的式子仍然是无法应用的,因为上面的式子里面涉及了qπ(st,at)是真实的actionvalue

为了解决上面的问题,这里是对这个q进行采样,用qt(st,at)来代替

关于怎么采样于是又有两种方法。

  • 一种是MonteCarlobased,被称为REINFORCE
  • 还有就是其他算法,比如TD,这就和后面ActorCritic有关了

上面就是梯度上升算法,下面是一些关于其中细节的实操

ESd,Aπ[θlnπ(A|S,θt)qπ(S,A)]θlnπ(a|s,θt)qπ(s,a)

如何sampleS

  • Sdd在按策略π下长期运行后得到的一个稳定的状态

如何sampleA

  • Aπ(A|S,θ)因此atshouldbesampledfollowingπ(θt)atst
  • 所以PGonpolicy

如何从另一个角度去理解这个算法

因为

θlnπ(at|st,θt)=θπ(at|st,θt)π(at|st,θt)

因此上面的梯度上升算法可以重写为

(8)θt+1=θt+αθlnπ(at|st,θt)qt(st,at)(9)=θt+α(qt(st,at)π(at|st,θt))θπ(at|st,θt)

然后可以把βt=(qt(st,at)π(at|st,θt))

于是上面的式子就可以化为

θt+1=θt+αβtθπ(at|st,θt)

上面这个式子是在优化π(at,st)的值通过改变θ

1731393875552.png


(10)θt+1=θt+αθlnπ(at|st,θt)qπ(st,at)

q通过采样的方法去替代真实的值

(11)θt+1=θt+αθlnπ(at|st,θt)qt(st,at)

如何qπ(st,at)是通过蒙特卡洛方法得到的就把这个算法叫做REINFORCE


REINFORCE的伪代码

16c38323294a8f5d10168501dcbf466.png

posted @   cxy8  阅读(87)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署
历史上的今天:
2022-11-12 编码器和译码器
点击右上角即可分享
微信分享提示