深度强化学习-策略梯度算法推导

之前我们讨论过DQN算法:深度强化学习-DQN算法原理与代码、Double DQN算法:深度强化学习-Doubel DQN算法原理与代码、Dueling DQN算法:深度强化学习-Dueling DQN算法原理与代码以及D3QN算法:深度强化学习-D3QN算法原理与代码,这些算法在求解最优策略的过程中试图估计最优价值函数,所以这些算法都被称为最优价值算法(optimal value algorithm)

但是求解最优策略梯度不一定要估计最优价值函数,策略梯度算法(policy gradient algorithm)试图用含参函数近似最优策略,并通过迭代更新参数值。本文采用两种方法推导策略梯度算法,法一的推导过程比较简单,可以直观了解策略梯度算法的原理,但是不太严谨,具体可以参考李宏毅老师讲解PG算法的视频:Policy Gradient。法二的推导过程稍微复杂一点,但是推导过程严谨,Reinforce算法就是法二推导结果的直观体现。

1 策略梯度算法推导

强化学习的目标在于最大化累积期望回报,策略梯度算法给出了期望回报和策略梯度之间的关系。采用函数近似法估计最优策略\pi _{\ast }(a\mid s)的基本思想是用含参函数\pi _{\theta }(a\mid s)来近似最优策略。 

1.1 方法一

假设智能体与环境交互一次的经验轨迹为\tau,T为终止时刻,即

\tau=s_{0},a_{0},r_{1},s_{1},\cdots ,a_{T-1},r_{T},s_{T}

 本次交互的累积回报为

R(\tau )=r_{1}+r_{2}+\cdots +r_{T-1}+r_{T}=\sum_{t=1}^{T}r_{t}

 本次经验轨迹出现的概率为

P_{\theta }(\tau )=p(s_{0})\cdot \pi _{\theta }(a_{0}\mid s_{0})\cdot p(s_{1}\mid s_{0},a_{0})\cdot \pi _{\theta }(a_{1}\mid s_{1})\cdots \pi _{\theta }(a_{T-1}\mid s_{T-1})\cdot p(s_{T}\mid s_{T-1},a_{T-1}) =p(s_{0})\prod_{i=0}^{T-1}\pi _{\theta }(a_{i}\mid s_{i})\cdot p(s_{i+1}\mid s_{i},a_{i})

其中,p(s_{0})p(s{}'\mid s,a)由环境决定,与\theta无关。

真实的累积回报为采样得到累积回报的期望,即累积期望回报为

\bar{R_{\theta }}=E_{\tau \sim P_{\theta }(\tau )}\left [ R_{\tau } \right ]=\sum_{\tau }^{}R(\tau )P_{\theta }(\tau )

\bar{R_{\theta }}关于\theta求梯度,得到

\triangledown \bar{R_{\theta }}=\sum_{\tau }^{}R(\tau )\triangledown P_{\theta }(\tau )=\sum_{\tau }^{}R(\tau )P _{\theta }(\tau )\frac{\triangledown P _{\theta (\tau )}}{P _{\theta (\tau )}}

注意:式中的R(\tau)其实与参数\theta有关,但是推导时假定无关,没有算入梯度,因此不太严谨,不过并不影响对策略梯度算法的理解,严谨的推导见方法二。

由于

\triangledown lny=\frac{\triangledown y}{y}

\triangledown y=y\cdot \triangledown lny

那么

\triangledown \bar{R_{\theta }}=\sum_{\tau }^{}R(\tau )P_{\theta }(\tau )\triangledown lnP_{\theta }(\tau )=E_{\tau \sim P_{\theta }(\tau )}\left [ R(\tau )\triangledown lnP_{\theta }(\tau ) \right ]

上面求和符号可以通过采样消除,即N次采样后,得到

\triangledown \bar{R_{\theta }}=\frac{1}{N}\sum_{n=1}^{N}R(\tau ^{n})\triangledown lnP_{\theta }(\tau ^{n})

P_{\theta }(\tau )求对数,得到

lnP_{\theta }(\tau )=lnp(s_{0})+ln\pi _{\theta }(a_{0}\mid s_{0})+lnp(s_{1}\mid s_{0},a_{0})+ln\pi _{\theta }(a_{1}\mid s_{1})+\cdots +ln\pi_{\theta }(a_{T-1}\mid s_{T-1})+lnp(s_{T}\mid s_{T-1},a_{T-1})=lnp(s_{0})+\sum_{t=0}^{T-1}\left [ ln\pi_{\theta }(a_{t}\mid s_{t})+lnp(s_{t+1}\mid s_{t},a_{t}) \right ]

lnP_{\theta }(\tau )关于\theta求梯度,由于p(s{}'\mid s,a)\theta无关,因此全部被消掉,得到

\triangledown lnP_{\theta }(\tau )=\sum_{t=0}^{T-1}\triangledown ln\pi _{\theta }(a_{t}\mid s_{t})

\triangledown lnP_{\theta }(\tau )代入\triangledown \bar{R_{\theta }},得到

策略梯度:

\triangledown \bar{R_{\theta }}=\frac{1}{N}\sum_{n=1}^{N}R(\tau ^{n})\sum_{t=0}^{T}\triangledown ln\pi _{\theta }(a_{t}^{n}\mid s_{t}^{n})=\frac{1}{N}\sum_{n=1}^{N}\sum_{t=0}^{T}R(\tau ^{n})\triangledown ln\pi _{\theta }(a_{t}^{n}\mid s_{t}^{n})

至此,我们完成了策略梯度算法的推导,沿着\triangledown \bar{R_{\theta }}的方向改变策略参数\theta,就有机会增加累积期望回报。不过,策略梯度公式中有一个需要注意的地方,R(\tau ^{n})表示的是整条轨迹的累积回报,并非即时回报。

1.2 方法二

策略\pi _{\theta }(a\mid s)满足Bellman期望方程

Bellman期望方程:

v_{\pi_{\theta } }(s)=\sum_{a}^{}\pi _{\theta }(a\mid s)q_{\pi_{\theta } }(s,a)

q_{\pi_{\theta } }(s,a)=r(s,a)+\gamma \sum_{s{}'}^{}p(s{}'\mid s,a)v_{\pi_{\theta } }(s{}')

对以上两式关于\theta求梯度,得到 

\triangledown v_{\pi_{\theta } }(s)=\sum_{a}^{}q_{\pi_{\theta } }(s,a)\triangledown \pi _{\theta }(a\mid s)+\sum_{a}^{}\pi_{\theta } (a\mid s)\triangledown q_{\pi_{\theta } }(s,a)

\triangledown q_{\pi _{\theta }}(s,a)=\gamma \sum_{s{}'}^{}p(s{}'\mid s,a)\triangledown v_{\pi _{\theta }}(s{}')

\triangledown q_{\pi _{\theta }}(s,a)代入\triangledown v_{\pi _{\theta }}(s),得到

\triangledown v_{\pi _{\theta }}(s)=\sum_{a}^{}q_{\pi _{\theta }}(s,a)\triangledown \pi _{\theta }(a\mid s)+\sum_{a}^{}\pi _{\theta }(a\mid s)\gamma \sum_{s{}'}^{}p(s{}'\mid s,a)\triangledown v_{\pi _{\theta }}(s{}')=\sum_{a}^{}q_{\pi _{\theta }}(s,a)\triangledown \pi _{\theta }(a\mid s)+\sum_{s{}'}^{}Pr_{\theta }\left [ S_{t+1}=s{}'\mid S_{t}=s \right ]\gamma \triangledown v_{\pi _{\theta }}(s{}')

在策略\pi _{\theta }(a\mid s)下,当s=S_{t}时求上式的期望,得到

 E\left [ \triangledown v_{\pi _{\theta }}(S_{t}) \right ]=\sum_{s}^{}Pr\left [ S_{t}=s \right ]\triangledown v_{\pi _{\theta }}(S_{t})

=\sum_{s}^{}Pr\left [ S_{t}=s \right ]\left [ \sum_{a}^{}q_{\pi _{\theta }}(s,a)\triangledown \pi _{\theta }(a\mid s)+\sum_{s{}'}^{}Pr_{\theta }\left [ S_{t+1}=s{}'\mid S_{t}=s \right ]\gamma \triangledown v_{\pi _{\theta }}(s{}') \right ]

 =\sum_{s}^{}Pr\left [ S_{t}=s \right ]\sum_{a}^{}q_{\pi _{\theta }}(s,a)\triangledown \pi _{\theta }(a\mid s)

+\sum_{s}^{}Pr\left [ S_{t}=s \right ]\sum_{s{}'}^{}Pr_{\theta }\left [ S_{t+1}=s{}'\mid S_{t}=s \right ]\gamma \triangledown v_{\pi _{\theta }}(s{}')

=\sum_{s}^{}Pr\left [ S_{t}=s \right ]\sum_{a}^{}q_{\pi _{\theta }}(s,a)\triangledown \pi _{\theta }(a\mid s)+\gamma\sum_{s{}'}^{}Pr_{\theta }\left [ S_{t+1}=s{}' \right ]\triangledown v_{\pi _{\theta }}(s{}')

=E\left [ \sum_{a}^{}q_{\pi _{\theta }}(S_{t},a)\triangledown \pi _{\theta }(a\mid S_{t}) \right ]+\gamma E\left [ \triangledown v_{\pi _{\theta }}(S_{t+1}) \right ]

这样就得到了从E\left [ \triangledown v_{\pi _{\theta }}(S_{t}) \right ]E\left [ \triangledown v_{\pi _{\theta }}(S_{t+1}) \right ]的递推式。注意到最终关注的梯度值就是

\triangledown E_{\pi _{\theta }}\left [ G_{0} \right ]=\triangledown E\left [ v_{\pi _{\theta }}(S_{0}) \right ]=E\left [ \triangledown v_{\pi _{\theta }}(S_{0}) \right ]

所以有

\triangledown E_{\pi _{\theta }}\left [ G_{0} \right ]=E\left [ \triangledown v_{\pi _{\theta }}(S_{0}) \right ]

=E\left [ \sum_{a}^{}q_{\pi _{\theta }}(S_{0},a)\triangledown \pi _{\theta }(a\mid S_{0}) \right ]+\gamma E\left [ \triangledown v_{\pi _{\theta }}(S_{1}) \right ]

=E\left [ \sum_{a}^{}q_{\pi _{\theta }}(S_{0},a)\triangledown \pi _{\theta }(a\mid S_{0}) \right ]+E\left [ \gamma \sum_{a}^{}q_{\pi _{\theta }}(S_{1},a)\triangledown \pi _{\theta }(a\mid S_{1}) \right ]+\gamma^{2} E\left [ \triangledown v_{\pi _{\theta }}(S_{2}) \right ]

=\cdots

=\sum_{t=0}^{+\infty }E\left [ \gamma ^{t}q_{\pi _{\theta }}(S_{t},a)\triangledown \pi _{\theta }(a\mid S_{t}) \right ]

考虑到

\triangledown \pi _{\theta }(a\mid S_{t})=\pi _{\theta }(a\mid S_{t})\triangledown ln\pi _{\theta }(a\mid S_{t})

所以

E\left [ \gamma ^{t}q_{\pi _{\theta }}(S_{t},a)\triangledown \pi _{\theta }(a\mid S_{t}) \right ]

=E\left [ \sum_{a}^{}\pi _{\theta }(a\mid S_{t})\gamma ^{t}q_{\pi _{\theta }}(S_{t},a)\triangledown ln\pi _{\theta }(a\mid S_{t}) \right ]

=E\left [ \gamma ^{t}q_{\pi _{\theta }}(S_{t},A_{t})\triangledown ln\pi _{\theta }(A_{t}\mid S_{t}) \right ]

又由于q_{\pi _{\theta }}(S_{t},A_{t})=E\left [ G_{t}\mid S_{t},A_{t} \right ],所以

E\left [ \gamma ^{t}q_{\pi _{\theta }}(S_{t},a)\triangledown \pi _{\theta }(a\mid S_{t}) \right ]=E\left [ \gamma ^{t}q_{\pi _{\theta }}(S_{t},A_{t})\triangledown ln\pi _{\theta }(A_{t}\mid S_{t}) \right ]

=E\left [ \gamma ^{t}G_{t}\triangledown ln\pi _{\theta }(A_{t}\mid S_{t}) \right ]

因此

策略梯度:

 \triangledown E_{\pi _{\theta }}\left [ G_{0} \right ]=E\left [ \sum_{t=0}^{+\infty }\gamma ^{t}G_{t}\triangledown ln\pi _{\theta }(A_{t}\mid S_{t}) \right ]

2 Reinforce算法 

在每一个回合结束后,就回合中的每一步利用如下迭代式更新\theta

\theta _{t+1}\leftarrow \theta _{t}+\alpha \gamma ^{t}G_{t}\triangledown ln\pi _{\theta }(A_{t}\mid S_{t})

这样的算法称为简单的策略梯度算法,R.Willims称它为“REward Increment=Nonnegative Factor x Offset Reinforcement x Characteristic Eligibility”(REINFORCE),表示增量\alpha \gamma ^{t}G_{t}\triangledown ln\pi _{\theta }(A_{t}\mid S_{t})是由三个部分的积组成。这样迭代完这个回合轨迹就实现了

\theta \leftarrow \theta +\alpha \sum_{t=0}^{+\infty }\gamma ^{t}G_{t}\triangledown ln\pi _{\theta }(A_{t}\mid S_{t})

在具体的更新过程中,不一定要严格采用这样的形式。当采用自动微分的软件包来学习参数时,可以定义单步的损失为-\gamma ^{t}G_{t}\triangledown ln\pi _{\theta }(A_{t}\mid S_{t}),让软件包中的优化器减小整个回合中所有步的平均损失,就会沿着\sum_{t=0}^{+\infty }\gamma ^{t}G_{t}\triangledown ln\pi _{\theta }(A_{t}\mid S_{t})的梯度方向更新参数\theta

3 Reinforce算法伪代码

おすすめ

転載: blog.csdn.net/weixin_46133643/article/details/122135993