今天看啥  ›  专栏  ›  indigo love

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

indigo love  · CSDN  ·  · 2021-01-01 00:00

之前我们讨论过DQN算法: 深度强化学习-DQN算法原理与代码 、Double DQN算法: 深度强化学习-Double 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算法伪代码




原文地址:访问原文地址
快照地址: 访问文章快照