策略梯度算法 (Policy Gradient):强化学习中的一种策略优化方法,它直接根据奖励值对策略参数进行梯度上升,从而最大化奖励的期望。

1 问题定义

首先精简表述一下强化学习的流程。

Actor(演员) 对 Environment(环境) 进行 Observation(观察),根据得到的 Observation 确定下一步的 Action,Action 作用于 Environment 后反馈给 Actor 以 Reward(奖励)。

强化学习的目标就是通过优化从 Observation 到 Action 的策略(实际就是 Actor),从而最大化一整轮动作中得到的 Reward 值。

1.1 Actor

Actor 通过 Observation 得到 Action,因此可以理解为一个函数,记为:

Action=π(Observation)

这个函数的具体实现可以是多样的,可以是简单的神经网络,或者是更复杂的结构。

例如用参数为 θ 的神经网络作为这个函数,目标是学习玩某款游戏,那么这个 Actor 的 Observation 输入应当是一个三维张量 Nn×m×3(彩色二维屏幕),输出 Logits 对应这个游戏中的所有动作 Mk×1

M=πθ(N)

得到 Logits 后,有多种方法确定最终的 Action 取值。最简单的就是直接取最大 Logit 值作为 Action,这种便是固定的选择方式。更好的一种方式是将 Logits 通过 Softmax 后得到概率分布,根据概率来随机选取每个 Action,这种随机的选择方式是更好的。

1.2 Episode

让上述例子的 Actor πθ() 来游玩一轮游戏,从开始到结束它经历的过程叫做 Episode,一个 Episode 的停止条件不是固定的。

例如对于有生命值的游戏来说,当角色死亡便是 Episode 的停止,对于竞技比赛来说,比赛结束便是 Episode 的结束。

  • 初始状态 s1
  • 机器采取动作 a1
  • 机器获得奖励 r1
  • 进入状态 s2
  • 机器采取动作 a2
  • 机器获得奖励 r2
  • 进入状态 sT
  • 机器采取动作 aT
  • 机器获得奖励 rT

这一个 Episode 就可以记为 τ={s1,a1,r1,s2,a2,r2,,sT,aT,rT}.

1.3 Reward

经过一个 Episode,该 Actor 得到的奖励便是:

Rθ=t=1Trt

容易理解的是,Rθ 越大代表这一轮机器的表现更好。但需要注意的是,由于使用的是随机选取的方法来确定 Action,对于同一个 st,机器是可能采取不同的 Action 的。因此实际上,我们应该用 Rθ 的期望 R¯θ 来评估机器的表现。

1.4 Problem

经过上面的铺垫,强化学习的问题定义便是:

θ=argmaxθR¯θ

即找到一个 θ 使 Rθ 的期望最大。

2 策略梯度

策略梯度算法和神经网络中的反向传播算法非常相似,它们的思路都是直接用 Loss/Reward 对每个参数做微分,得到梯度值来进行更新。

θ=[w1,w2,,b1,b2,]TR¯θ=[R¯θw1,R¯θw2,,R¯θb1,R¯θb2,]Tθ=θ+ηR¯θ

接下来便是推导公式了,首先确定 Rθ 的期望怎么表示。对于参数 θ 每一个 Episode τ,它一定是存在一个概率的 P(τθ),那么 Rθ 的期望可以表示为:

R¯θ=τR(τ)P(τθ)

由于 R(τ) 和我们的参数无关,不需要可微,因此期望的梯度是:

R¯θ=τR(τ)P(τθ)=τR(τ)P(τθ)P(τθ)P(τθ)=τR(τ)P(τθ)logP(τθ)

上面第二行到第三行的推导方式(常数省略):

dlogf(x)dx=1f(x)df(x)dx

接着继续推导:

R¯θ=τR(τ)P(τθ)logP(τθ)1Ni=1NR(τi)logP(τiθ)

其中的 τi 代表用 πθN 次该游戏,得到 N 个 episode {τ1,τ2,,τN}.

上面近似变换的原理是蒙特卡洛的直接采样:

R¯θ=τR(τ)P(τθ)1Ni=1NR(τi)

每一次游戏都能当作一次采样,P(τθ) 大的 τ 更容易被采样到。因此对 τN 次采样取平均,就可以近似原式。

logP(τθ) 展开来:

P(τθ)=P(s1)P(a1s1,θ)P(r1,s2s1,a1)P(a2s2,θ)P(r2,s3s2,a2)=P(s1)i=1TP(aisi,θ)P(ri,si+1si,ai)

logP(τθ)=log[P(s1)i=1TP(aisi,θ)P(ri,si+1si,ai)]=logP(s1)+i=1TlogP(aisi,θ)+i=1TP(ri,si+1si,ai)

logP(τθ) 的计算只用考虑与参数有关的,因此:

logP(τθ)=i=1TlogP(aisi,θ)

综上,我们最后的结果便是:

R¯θ1Ni=1NR(τi)logP(τiθ)=1Ni=1NR(τi)j=1T(i)logP(aj(i)sj(i),θ)=1Ni=1Nj=1T(i)R(τi)logP(aj(i)sj(i),θ)

3 优化

3.1 添加偏置

由于我们只进行了 N 次采样来近似,对于没有采样到的情况,在学习过程中可能就会使其概率越来越低。为了缓解这个情况,可以将奖励值减去一个偏置,让奖励值有正有负。

R¯θ1Ni=1Nj=1T(i)(R(τi)b)logP(aj(i)sj(i),θ)

3.2 动态贡献

根据上面的梯度公式,每一个 Action 都乘的是整个 Episode 的 Reward,这会导致一定的不公平性:

R¯θ1Ni=1Nj=1T(i)(R(τi)b)logP(aj(i)sj(i),θ)

例如对于一个 Episode τ={s1,a1,r1,s2,a2,r2,s3,a3,r3},它的 r1=8,r2=1,r3=2,R(τ)=5.

显然 r2,r3 代表 a2,a3 并不是好的 Action,但是由于 R(τ)=5>0,它们仍然会被优化增加概率。

根据这个问题,可以使用动态贡献,每个 Action 只认领自己后面得到的 Reward. 例如对于上面的例子,a1 得到的 Reward 是 5a23a32,可以表示为:

R¯θ1Ni=1Nj=1T(i)(k=jT(i)rk(i)b)logP(aj(i)sj(i),θ)

再进一步,我们可以设定每一个 Action 认领的 Reward 随自己距离 Reward 的步数来减少。这点很好理解,毕竟在游戏里你做出的一步不可能对未来整个游戏都产生巨大影响,影响力肯定是越来越少的。

R¯θ1Ni=1Nj=1T(i)(k=jT(i)(γkjrk(i))b)logP(aj(i)sj(i),θ)其中,γ<1

3.3 优势函数

上面两小节实际上做的事情都是对奖励值进行优化,因此可以将奖励值直接抽象为一个函数来表示,相当于变成一个黑盒了。公式记作:

R¯θ1Ni=1Nj=1T(i)Aθ(sj,aj)logP(aj(i)sj(i),θ)

使用优势函数只是更换了一种表示方式,具体得看优势函数的内部实现是什么。

4 Off-Policy 策略梯度

4.1 On/Off-Policy 的对比

我们回看策略梯度算法的目标函数:

J(θ)=τπθR(τ)P(τθ)θ=argmaxθJ(θ)

需要注意到的是,我们的 τ 是从 πθ 中采样得来的,而进行一次梯度更新后 θ 进行了变化,那么采样得到的 τ 就不能继续使用了,得再从新的 πθ 中重写采样。这种策略更新方式就叫做 On-Policy,下面进行定义:

  • On-Policy: 在学习和决策过程中始终使用相同的策略,即在进行策略更新时只考虑当前策略下的经验。例如,一个人在自己下棋来学习策略。
  • Off-Policy: 可以利用从其他策略中得到的经验进行学习,即在进行策略更新时可以考虑非当前策略下的经验。例如,一个人看别人下棋来学习策略。

On-Policy 只能利用当前策略下的数据,因此数据利用效率相对较低,而 Off-Policy 能够利用所有数据来学习。下面将 Off-Policy 的思想带入策略梯度算法中。

4.2 重要性采样

在上文讲的 On-Policy 版本策略梯度中,使用的是蒙特卡洛直接采样。

Exp[f(x)]=1Ni=1Nf(xi)

重要性采样是蒙特卡洛采样的另一种采样策略,能在无法采样原始分布时近似对原始分布的采样。

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

4.3 结合起来

我们用重要性采样来做策略梯度:

R¯θ=E(st,at)πθAθ(st,at)logPθ(at(n)st(n))=E(st,at)πθPθ(st,at)Pθ(st,at)Aθ(st,at)logPθ(at(n)st(n))=E(st,at)πθPθ(atst)Pθ(atst)Pθ(st)Pθ(st)Aθ(st,at)logPθ(at(n)st(n))E(st,at)πθPθ(atst)Pθ(atst)Pθ(st)Pθ(st)Aθ(st,at)logPθ(at(n)st(n))

这里直接忽略 Pθ(st)Pθ(st) 的原因一是从经验来说这两个概率差别不会太大,二是计算这一项过于复杂,不好计算。
文章目录