【RL】Vanilla Policy Gradient(VPG)

policy gradient的基本思想,是把总的奖励表示为策略的函数,然后对这个函数做优化。在这一章中,我们将详细地讲解这个函数具体的形式是怎么样的、如何求出策略梯度,理解policy gradient这个算法的基本框架。

关于MDP中动作与状态是否是连续变量,一共有四种不同的组合。其中,状态是有限分类变量的情况是不适合采用神经网络的,所以在这里不予讨论。在本章中,主要要考虑的情况是状态 s s s为连续高维变量、动作 a a a为分类变量(有限个)的MDP。并且,设环境 P s , s ′ a P_{s, s^{\prime}}^{a} Ps,sa r 5 a r_{5}^{a} r5a为时齐的,不随时间的变化而变化。状态与动作都是连续变量的MDP当然也可以用策略梯度法解决,但是由于这种方法效率不高所以平时不是很常见。

一 策略网络的构造

在策略梯度法中,我们首先要随机初始化一个策略,然后不断地让策略沿着策略梯度的方向梯度更新,得到更好的策略,直到策略收敛。在实际的算法中,我们必须把这个策略具体是什么给先定义出来,然后才能开始更新。

在随机且时齐的MDP中,策略是状态到动作的映射。由于 a a a是分类变量,所以我们没有办法直接输出 a a a,只能输出一个条件分布 π ( a ∣ s ) \pi(a \mid s) π(as)。为了拟合这个策略,我们定义一个神经网络policy net。网络的输入是 s s s,输出是一个n维向量,对它进行softmax之后,得到n个不同的概率(其和为1),分别对应于最佳动作是各个 a a a的概率。设网络的参数为 w w w,则可以将网络输出简记为 π w ( a ∣ s ) \pi_{w}(a \mid s) πw(as),它表示在 s s s状态下最佳动作是 a a a的条件概率。对于任何确定的 s s s,将 n n n a a a对应的 π w ( a ∣ s ) \pi_{w}(a \mid s) πw(as)相加,结果总是为1。

由于网络的输入是高维向量,输出是类别变量,我们可以将其与分类问题进行类比。在分类问题中,我们输入一张高维、连续的图片,输出它属于各个类别的概率;而在策略梯度中,我们输入一个高维、连续的状态,输出最佳应对动作的概率。如下所示:

TODO

在分类问题中,我们可以定义loss为训练集的label与输出的predict向量的交叉熵。对于两个离散概率分布 p , q p,q p,q,其交叉熵的定义是 H ( p , q ) = − Σ i p ( i ) log ⁡ q ( i ) H(p, q)=-\Sigma_{i} p(i) \log q(i) H(p,q)=Σip(i)logq(i)。例如在上面的例子中,训练集输出的predict是(0.78,0.15,0.03,0.04),而训练集的label是(1,0,0,0)。则label与predict之间的交叉熵为 − log ⁡ ( 0.78 ) -\log (0.78) log(0.78)。在训练过程中,我们通过梯度法减少交叉熵,就意味着我们会让第一维(“牛”对应的那个维度)的0.78变得更大,而让后面三个维度(不是“牛”对应的维度)的0.15、0.03与0.04变得更小,这样,我们输出的predict向量就会更加接近label(1,0,0,0),这也意味着我们网络的准确性会更高。具体而言,我们也求出交叉熵关于网络参数 w w w的梯度,并让 w w w沿着梯度方向下降。

分类问题是一个监督学习问题,所以训练集中每一个输入都有“标准答案”label供我们学习。但是现在我们讨论的是强化学习,根本就没有label,我们的目的也不是使得predict接近label,而是要使得策略能取得的期望奖励最大。对于新的、复杂的问题,我们总是希望能够将其化归为我们熟悉的、简单的问题。所以我们很自然就会想到,我们能否将强化学习问题也化归为类似于监督学习问题的形式呢?

在这里,我们不妨先假设我们的数据集具有 ( s , a , v ) (s, a, v) (s,a,v)形式。其中的 v v v代表在 s s s处采取动作 a a a得到的“后果”。这里的 v v v可以近似理解为 A π ( s , a ) A_{\pi}(s, a) Aπ(s,a) V π ( s , a ) V_{\pi}(s, a) Vπ(s,a)(事实上还是有所不同,这一点在Actor-Critic的中会详细介绍)。我们可以粗略地想象,当某 ( s , a , v ) (s, a, v) (s,a,v)中的 v v v比0大的时候,就说明 s s s处采取 a a a是好的,我们就应该增加 π ( a ∣ s ) \pi(a \mid s) π(as);而当 v v v比0小的时候,说明在 s s s处采取 a a a是不好的,我们应该减少 π ( a ∣ s ) \pi(a \mid s) π(as)。当 v v v很大的时候,则说明在 s s s处采取 a a a是特别好的,我们应该以比较大的力度去增加 π ( a ∣ s ) \pi(a \mid s) π(as)。换句话说,设 a a a是一个n维的one-hot向量label,网络输出是一个n维的向量predict,则我们应该根据 v v v是否大于0决定让predict远离还是接近label,而我们应该根据 v v v的绝对值大小决定这种远离或者接近的“力度”,即优化时候的步长。这样一来,我们就可以把强化学习问题化归成和监督学习差不多的形式。

TODO

我们还可以进一步将二者做如下对比:分类问题中,我们所追求的是“真理”。不妨将输入的图像记为s,将输出的类别记为a。我们想象每一条训练集 ( s , a ) (s, a) (s,a)都有一个“权重”,但这些“权重”都是正的并且取值统统取值为1。这是因为“真理”只有0和1的分别,没有折中委婉之处。对于每一条数据集 ( s , a , 1 ) (s, a,1) (s,a,1),我们都要更新网络参数 w w w,使得其输出的predict能够更加接近label,并且这种修改的力度是完全一样的。这是由于“真理”是非此即彼的、没有折中的,并且它对于每一条训练集都是平等的;而对于策略网络,我们追求的不是“正确”而是“利益”。这个“利益”就是由 v v v来衡量的。不同的 ( s , a ) (s, a) (s,a)所对应的“权重” v v v是不一样的,有正的也有负的,有大的也有小的。对于每一条数据集 ( s , a , v ) (s, a,v) (s,a,v),我们要根据 v v v是正负性决定到底是让predict(即预测各个动作为最佳动作的概率)去接近还是去远离label(即这个 a a a对应的one-hot向量),因为追求“利益”其实意味着趋利避害;并且,我们会根据 v v v的大小去决定这种接近或远离的“力度”,是应该迈着大步去靠近,还是踱着碎步轻轻地接近。这是因为“利益”大的时候,我们追求的动力就大,“利益”小的时候,我们追求的动力就小。

从这个角度而言,我们可以认为分类网络是在用“权重相同的训练集”去训练,而策略网络则是在用“带有不同权重的训练集”去训练。只要我们能够找出衡量 ( s , a ) (s, a) (s,a)好坏的标准 v v v,得到 ( s , a , v ) (s, a, v) (s,a,v)形式的数据,就可以把训练策略网络的过程看成“带权重的监督学习”。但是,我们如何找出这个 v v v呢?找出 v v v之后具体应该按照什么公式训练呢?下面,我们要详细地根据定义推导出policy gradient的表达式。

二 策略梯度的计算

本节将要推导出策略梯度的公式,并且讲述计算它的方法。假设策略网络的参数为 w w w,则可以将策略记为 π w \pi_w πw

在这里,我们首先引入“轨道”的概念:设Agent从初始状态开始,不断地采取动作,进入下一个状态,又进一步采取动作,进入再下一个状态……这个连续的过程可以被记为 ( s 0 , a 0 , r 0 , s 1 , a 1 , r 1 , s 2 , a 2 , r 2 , … , s n , a n , r n ) \left(s_{0}, a_{0}, r_{0}, s_{1}, a_{1}, r_{1}, s_{2}, a_{2}, r_{2}, \ldots, s_{n}, a_{n}, r_{n}\right) (s0,a0,r0,s1,a1,r1,s2,a2,r2,,sn,an,rn)(此处的 s i , a i , r i {s}_{i}, {a}_{i}, {r}_{i} si,ai,ri分别表示在第 i i i个回合中的状态、动作与奖励),我们将其称为“轨道”,记录为 τ \tau τ

我们可以想象,在不同的 w w w下,轨道 τ \tau τ有不同的分布,即 P π w ( τ ) P_{\pi_{w}}(\tau) Pπw(τ)。由于神经网络结构确定后, π w \pi_w πw是由 w w w决定的,我们将其记为 P w ( τ ) P_{w}(\tau) Pw(τ),它代表在我们选择策略 π w \pi_w πw时,某一个具体的轨道出现的概率。

举个简单的例子,如果一条 τ \tau τ ( s 0 , a 0 , r 0 , s 1 , a 1 , r 1 , s 2 , a 2 , r 2 ) \left(s_{0}, a_{0}, r_{0}, s_{1}, a_{1}, r_{1}, s_{2}, a_{2}, r_{2}\right) (s0,a0,r0,s1,a1,r1,s2,a2,r2),则我们用策略 π w \pi_w πw走出轨道 τ \tau τ的概率应该是每一步中 s i s_i si作出 a i a_i ai决策的条件概率、产生 r i r_i ri的概率,以及进入下一个 s i + 1 s_{i+1} si+1的概率的联合乘积。即:
P w ( τ ) = P ( s 0 ) π w ( a 0 ∣ s 0 ) P ( r 0 ∣ s 0 , a 0 ) P s 0 , s 1 a 0 π w ( a 1 ∣ s 1 ) P ( r 1 ∣ s 1 , a 1 ) P s 1 , s 2 a 1 π w ( a 2 ∣ s 2 ) P ( r 2 ∣ s 2 , a 2 ) P_{w}(\tau)=P\left(s_{0}\right) \pi_{w}\left(a_{0} \mid s_{0}\right) P\left(r_{0} \mid s_{0}, a_{0}\right) P_{s_{0}, s_{1}}^{a_{0}} \pi_{w}\left(a_{1} \mid s_{1}\right) P\left(r_{1} \mid s_{1}, a_{1}\right) P_{s_{1}, s_{2}}^{a_{1}} \pi_{w}\left(a_{2} \mid s_{2}\right) P\left(r_{2} \mid s_{2}, a_{2}\right) Pw(τ)=P(s0)πw(a0s0)P(r0s0,a0)Ps0,s1a0πw(a1s1)P(r1s1,a1)Ps1,s2a1πw(a2s2)P(r2s2,a2)
这其中, P ( s 0 ) P\left(s_{0}\right) P(s0)表示初始状态的分布,一般这是给定的。由于转移概率 P s , 5 ′ a P_{s, 5^{\prime}}^{a} Ps,5a与奖励的分布 P ( r ∣ s , a ) P(r \mid s, a) P(rs,a)都是给定的,所以,轨道的分布式 P w ( τ ) P_{w}(\tau) Pw(τ)中,只有 π w ( a i ∣ s i ) \pi_{w}\left(a_{i} \mid s_{i}\right) πw(aisi)的部分是会随着参数 w w w的变化而变化的。

对于一般的 τ \tau τ,可以将其表示为环境概率与决策概率的连乘形式:
P w ( τ ) = Π i = 0 n π w ( a i ∣ s i ) Π i = 0 n − 1 P s i , s i + 1 a i Π i = 0 n P ( r i ∣ s i , a i ) P_{w}(\tau)=\Pi_{i=0}^{n} \pi_{w}\left(a_{i} \mid s_{i}\right) \Pi_{i=0}^{n-1} P_{s_{i}, s_{i+1}}^{a_{i}} \Pi_{i=0}^{n} P\left(r_{i} \mid s_{i}, a_{i}\right) Pw(τ)=Πi=0nπw(aisi)Πi=0n1Psi,si+1aiΠi=0nP(risi,ai)
以上是一条很重要的公式,即“轨道 τ \tau τ关于 w w w分布的公式”。我们可以看出,轨道分布中受到 w w w影响的只有“主观决策”对应的第一部分,即 Π i = 0 n π w ( a i ∣ s i ) \Pi_{i=0}^{n} \pi_{w}\left(a_{i} \mid s_{i}\right) Πi=0nπw(aisi),而其他两部分都是由“客观环境”所决定的。

我们这里假设目标是极大化奖励总和,即最大化的目标是 r ( τ ) = Σ t r t r(\tau)=\Sigma_{t} r_{t} r(τ)=Σtrt,而非随着时间衰减的效用 Σ t γ t r t \Sigma_{t} \gamma^{t} r_{t} Σtγtrt(也可以理解为默认 γ = 1 \gamma=1 γ=1)。有人或许会认为,这种设定是不太合乎情理的,因为为了保证目标的期望有限,我们应该引入小于1的衰减因子 γ \gamma γ(如果设定时间上限,又会导致策略非时齐,也不太好)。在DQN中一直默认 γ < 1 \gamma < 1 γ<1。但是为什么在policy gradient中,许多资料都默认 γ = 1 \gamma = 1 γ=1呢?原因如下:

我们说过,基于策略是一大类的强化学习的算法,VPG只是其中最简单的一种。在后面我们将会看到,如果设定 γ = 1 \gamma = 1 γ=1,这可以使得VPG与Actor-Critic算法等价(这也意味着 ( s , a , v ) (s,a,v) (s,a,v)形式的数据集中,代表 ( s , a ) (s,a) (s,a)的“后果”的 v v v等于 Q π ( s , a ) Q_{\pi}(s, a) Qπ(s,a) A π ( s , a ) A_{\pi}(s, a) Aπ(s,a));如果设定 γ < 1 \gamma<1 γ<1,则会和Actor-Critic有所差别(这意味着 v v v会变成别的东西)。这一点在探究Actor-Critic算法的时候,就可以从公式中看出其中的缘由。正是由于这个原因,所以绝大多数policy gradient的材料中会设定 γ < 1 \gamma<1 γ<1,使得我们对基于策略的方法能够有一个比较一致的理解,并且也使得后面推导的公式会相对简单。在这种设定下,我们要最大化的目标为 r ( τ ) r(\tau) r(τ),即 Σ t r t \Sigma_{t} r_{t} Σtrt。但事实上,即使设定 γ < 1 \gamma<1 γ<1,仍然可以按照下面的思路推导出类似的公式。

在策略 π w \pi_w πw下,设我们的期望效用为 J J J,则 J J J应该是一个关于无穷维策略 π \pi π的泛函 J ( π ) J(\pi) J(π)。由于策略是神经网络,所以策略 π w \pi_w πw事实上由神经网络的高维参数 w w w决定的,所以我们可以认为 j j j是关于 w w w的有限维函数 J ( w ) J(w) J(w)。利用 r ( τ ) r(\tau) r(τ) P w ( τ ) P_w(\tau) Pw(τ),我们可以将期望效用 J J J写成如下的形式:
J ( w ) = ∫ τ P w ( τ ) r ( τ ) d τ J(w)=\int_{\tau} P_{w}(\tau) r(\tau) d \tau J(w)=τPw(τ)r(τ)dτ
这个积分式的意思是,对于所有可能的轨道 τ \tau τ,将其发生的概率 P w ( τ ) P_{w}(\tau) Pw(τ)与其对应的奖励 r ( τ ) r(\tau) r(τ)相乘并求积分。显然,这个积分式表示的意思是(在参数 w w w下)Agent获得的奖励总和的期望,即:
J ( w ) = E w ( r ( τ ) ) J(w)=E_{w}(r(\tau)) J(w)=Ew(r(τ))
我们想求的“策略梯度”就是 ∇ w J ( w ) \nabla_{w} J(w) wJ(w)。在这里,积分与梯度符号显然可以交换次序。并且,由于只有 P w ( τ ) P_{w}(\tau) Pw(τ)含有 w w w,而 r ( τ ) r(\tau) r(τ)不含 w w w,所以:
∇ w J ( w ) = ∫ τ ( ∇ w P w ( τ ) ) r ( τ ) d τ \nabla_{w} J(w)=\int_{\tau}\left(\nabla_{w} P_{w}(\tau)\right) r(\tau) d \tau wJ(w)=τ(wPw(τ))r(τ)dτ
我们注意到,上式有一个 ∇ w P w ( τ ) \nabla_{w} P_{w}(\tau) wPw(τ)的部分。我们可以利用上面的第一个公式将 P w ( τ ) P_{w}(\tau) Pw(τ)展开,并且进一步化简。但是,这样化简得到的表达式比较复杂,很难计算。我们应该寻找一种更加“聪明”的方法,使得我们能更加方便地计算 ∇ w J ( w ) \nabla_{w} J(w) wJ(w)

注意到,上面的 ∇ w J ( w ) \nabla_{w} J(w) wJ(w)仍然是一个积分式,积分的下标是 τ \tau τ。所以我们很自然地希望将其表示为 ∫ τ P w ( τ ) ∇ w f ( τ ) d τ \int_{\tau} P_{w}(\tau) \nabla_{w} f(\tau) d \tau τPw(τ)wf(τ)dτ的形式,其中的 f f f是某个函数。根据期望的定义,这个积分的结果就是 E w [ ∇ w f ( τ ) ] E_{w}\left[\nabla_{w} f(\tau)\right] Ew[wf(τ)]。这样的形式更加简便,并且也更容易计算——只要我们用当前的策略与环境交互采样很多 τ \tau τ,并计算出梯度 ∇ w f ( τ ) \nabla_{w} f(\tau) wf(τ)的均值,就能将其作为 ∇ w J ( w ) \nabla_{w} J(w) wJ(w)的一个估计(因为在这种情况下,轨道 τ \tau τ是服从 P w ( τ ) P_w(\tau) Pw(τ)分布的)。为此,我们利用如下的恒等式:
P w ( τ ) ∇ w log ⁡ P w ( τ ) = P w ( τ ) ∇ w P w ( τ ) P w ( τ ) = ∇ w P w ( τ ) P_{w}(\tau) \nabla_{w} \log P_{w}(\tau)=P_{w}(\tau) \frac{\nabla_{w} P_{w}(\tau)}{P_{w}(\tau)}=\nabla_{w} P_{w}(\tau) Pw(τ)wlogPw(τ)=Pw(τ)Pw(τ)wPw(τ)=wPw(τ)
现在,将其代入之前我们关于 ∇ w J ( w ) \nabla_{w} J(w) wJ(w)的式子中,可以得到:
∇ w J ( w ) = ∫ γ ( ∇ w P w ( τ ) ) r ( τ ) d τ = ∫ γ P w ( τ ) ∇ w log ⁡ ( P w ( τ ) ) r ( τ ) d τ = E w [ ∇ w log ⁡ ( P w ( τ ) ) r ( τ ) ] \nabla_{w} J(w)=\int_{\gamma}\left(\nabla_{w} P_{w}(\tau)\right) r(\tau) d \tau=\int_{\gamma} P_{w}(\tau) \nabla_{w} \log \left(P_{w}(\tau)\right) r(\tau) d \tau=E_{w}\left[\nabla_{w} \log \left(P_{w}(\tau)\right) r(\tau)\right] wJ(w)=γ(wPw(τ))r(τ)dτ=γPw(τ)wlog(Pw(τ))r(τ)dτ=Ew[wlog(Pw(τ))r(τ)]
上面的式子让策略梯度化为了期望的形式,这已经足够简单。但是,这式子中 ∇ w log ⁡ ( P w ( τ ) ) \nabla_{w} \log (P_{w}(\tau)) wlog(Pw(τ))这个部分还是让我们难免有些“摸不着头脑”。所以,我们要将上面第一条公式代入以展开 P w ( τ ) P_w(\tau) Pw(τ),化简 ∇ w log ⁡ ( P w ( τ ) ) \nabla_{w} \log (P_{w}(\tau)) wlog(Pw(τ))

我们说过, P w ( τ ) P_w(\tau) Pw(τ)可以展开成为一系列连乘的形式,其中与 w w w有关的部分只有 Π i = 1 n π w ( a i ∣ s i ) \Pi_{i=1}^{n} \pi_{w}\left(a_{i} \mid s_{i}\right) Πi=1nπw(aisi)。取了 log ⁡ \log log之后连乘变成求和的形式,即 log ⁡ ( P w ( τ ) ) \log (P_{w}(\tau)) log(Pw(τ))中所有与 w w w有关的部分为 Σ i = 1 n log ⁡ ( π w ( a i ∣ s i ) ) \Sigma_{i=1}^{n} \log \left(\pi_{w}\left(a_{i} \mid s_{i}\right)\right) Σi=1nlog(πw(aisi))。而由于我们要求的是 ∇ w log ⁡ ( P w ( τ ) ) \nabla_{w} \log (P_{w}(\tau)) wlog(Pw(τ)),所以只用考虑与 w w w有关的部分。我们可以得到:
∇ w log ⁡ ( P w ( τ ) ) = Σ i = 1 n ∇ w log ⁡ π w ( a i ∣ s i ) \nabla_{w} \log \left(P_{w}(\tau)\right)=\Sigma_{i=1}^{n} \nabla_{w} \log \pi_{w}(a_{i} \mid s_{i}) wlog(Pw(τ))=Σi=1nwlogπw(aisi)
将这个等式代入 ∇ w J ( w ) \nabla_{w} J(w) wJ(w)中,我们终于可以得到我们想要的结果。以下便是我们经过漫长的推导之后得到的最终结果:
∇ w J ( w ) = E w [ ( Σ i = 1 n ∇ w log ⁡ π w ( a i ∣ s i ) ) r ( τ ) ] \nabla_{w} J(w)=E_{w}[(\Sigma_{i=1}^{n} \nabla_{w} \log \pi_{w}\left(a_{i} \mid s_{i}\right))r(\tau)] wJ(w)=Ew[(Σi=1nwlogπw(aisi))r(τ)]
或简记为:
∇ w J ( w ) = E w [ ∇ w log ⁡ ( P w ( τ ) ) r ( τ ) ] \nabla_{w} J(w)=E_{w}\left[\nabla_{w} \log \left(P_{w}(\tau)\right) r(\tau)\right] wJ(w)=Ew[wlog(Pw(τ))r(τ)]
这就是策略梯度的表达式。结合这个表达式,我们就可以得到策略梯度法的基本框架。下面,我们来详细地讲解一下整个算法是如何进行的。

三 策略梯度算法

首先,我们要定义一个策略网络,并随机初始化网络参数。与其他的深度学习问题类似,我们要根据问题的复杂程度来设计网络的层数、每一层的神经元个数,以使得其能够与问题复杂度相匹配的拟合能力。当然,这个过程可能需要多次调试。然后,我们进行很多步如下的迭代,直到网络参数收敛。

TODO
在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值