对于DQN来说使用一个网络直接逼近了值函数,最后取得了非常不错的效果, 但是对于一些连续性控制或者动作空间特别大的环境来说,很难全部计算所有的值函数来得到最好的策略,那么直接计算策略的方法就别提出来了。
回顾一下前面几篇,所谓的策略,其实就是状态到动作的映射数学表达为
π:s→a
,
我们用
τ
表示状态s到最后一个状态的一个序列,表示为:
τ:st,st+1....sT
那么奖励
R(τ)
是一个随机变量,没法直接作为目标函数被优化,因此采用了随机变量的期望作为目标函数:
J=∫r(τ)Pπ(τ)dτ(1)
因此强化学习的目标是找到最好的
maxπ∫R(τ)Pπ(τ)dτ
,从最优策略的角度来说,对于序列
st,st+1....sT
, 最优的策略序列为:
u∗0→u∗1→u∗2→...u∗T
,总结为:找到最优策略:
π∗:s→u∗
。
继续从目标函数说起, 由于要用神经网络来计算策略梯度,需要用一个网络结构去逼近策略,在此处我们假设神经网络的结构参数为
θ
,将目标函数由公式-1变为:
J(θ)=Eτ∼πθ(τ)[r(τ)]=∫τ∼πθ(τ)πθ(τ)r(τ)dτ(2)
推导原因:
f(x)
关于某分布
P(x)
的期望,对于连续性变量,期望通过积分求得:
Ex∼P[f(x)]=∫p(x)f(x)dx(3)
在数学中梯度的含义就是对函数求取导数,在监督学习中,我们求取损失函数的时候经常求取目标函数的梯度。同理,对于策略的目标函数,我们同样对目标函数
J(⋅)
公式(2)求取梯度:
∇θJ(θ)=∫τ∼πθ(τ)∇θπθ(τ)r(τ)dτ(4)
到这里,我们发现并没有方法直接计算,通过导数求导变换得到:
∇θπθ(τ)=πθ(τ)∇θlogπθ(τ)(5)
将公式(5)代入(4)得到策略梯度:
∇θJ(θ)=Eτ∼πθ(τ)[∇θlogπθ(τ)rτ]=∫τ∼πθ(τ)πθ(τ)∇θlogπθ(τ)r(τ)dτ(6)
终于通过变化计算得到了策略梯度的计算方法,但是发现
∇θlogπθ(τ)
并没法直接求取。那么该怎样计算呢?
通过前面我们知道对于序列
τ
,策略
π(τ)=π(s0,a0,s1,a1,...,sT,aT)
,我们将
π(τ)
通过最原始的方法展开得到
π(τ)=p(s0)∏t=0Tπθ(at|st)p(st+1|st,at)(7)
于是将公式(7)代入公式(6)得到
∇θlogπθ(τ)=∇θlog(p(s0)∏t=0Tπθ(at|st)p(st+1|st,at))=∇θ(logp(s0)+∑t=0Tlogπθ(at|st)+∑t=0Tlogp(st+1|st,at))=∑t=0T∇θlogπθ(at|st)(8)
这样公式已经和监督学习中的最大似然有相同点了,因此我们对其进行蒙特卡洛处理,最终将公式(6)(7)(8)组合,并对公式(6)中的期望用蒙特卡洛进行替换,得到最终策略梯度:
∇θJ(θ)=Eτ∼πθ(τ)[∑t=0T∇θlogπθ(at|st)(∑tTr(st,at))]=1N∑t=0N[∑t=0T∇θlogπθ(at|st)(∑t=0Tr(st|at))]
终于我们得到了策略梯度的计算公式,接下来就是更新了梯度,和监督学习是一个方式
θ^=θ+α∇θJ(θ)
到这里,策略梯度的理论和公式部分计算讲完了,
其实说了这么多,最终只是服务于策略网络的逼近和参数更新,在后面的博客(DDPG等算法的的使用中都会用到)
参考文献:
1.强化学习原理及入门
2.强化学习核心算法讲解