【RL】策略梯度的训练技巧

r ( τ ) r(\tau) r(τ)的baseline

毫无疑问, r ( τ ) r(\tau) r(τ)代表着轨道 τ \tau τ的好坏。按照我们推导出来的policy gradient的式子, r ( τ ) r(\tau) r(τ)大于0的时候,训练会使得这个轨道上涉及的所有 π w ( a i ∣ s i ) \pi_{w}\left(a_{i} \mid s_{i}\right) πw(aisi)增加。这说明,如果 τ \tau τ是一条比较好的轨道,则我们应该“充分学习成功的经验”,让 τ \tau τ涉及到的每一次决策 ( s i , a i ) (s_i, a_i) (si,ai)的概率都增大;同理,当 r ( τ ) r(\tau) r(τ)小于0的时候,训练会使得这个轨道上所有 π w ( a i ∣ s i ) \pi_{w}\left(a_{i} \mid s_{i}\right) πw(aisi)概率减少。这是因为 τ \tau τ是一条比较失败的轨道,所以我们应该“避免重蹈覆辙”,让 τ \tau τ涉及的每一次决策 ( s i , a i ) (s_i, a_i) (si,ai)的概率都减少。从训练的公式上看,我们能够实现上述目的。从直觉上说,上述的目的也是合情合理的。这令我们非常满意。

但是,我们现在要考虑下面的情况:假设我们的MDP所定义的 τ \tau τ都是大于0的,则所有 r ( τ ) r(\tau) r(τ)都应该是正的,只有大和小的分别,没有正和负的分别。在 r ( τ ) r(\tau) r(τ)比较小的时候 τ \tau τ包含着“失败的经验”(例如贪吃蛇游戏中, r ( τ ) r(\tau) r(τ)用游戏结束时蛇的长度来表示,那么 r ( τ ) = 5 r(\tau)=5 r(τ)=5是一个很差的结果)。

现在的问题是:如果我们坚持用 r ( τ ) r(\tau) r(τ)来训练,就会出现“学习失败经验”的情况,似乎“不合情理”;而如果对 r ( τ ) r(\tau) r(τ)进行调整,就与我们推导的策略梯度的公式有所偏差,不知会不会出现错误。这个问题应该如何解释呢?

但是,如果我们采样了许多 τ \tau τ,其中的 r ( τ ) r(\tau) r(τ)有大有小、全部大于0。我们用这些数据训练的效果就完全等同于将较小的 r ( τ ) r(\tau) r(τ)变成负数,将较大的 r ( τ ) r(\tau) r(τ)变成小一些的正数。这就好像用 r ( τ ) r(\tau) 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(τ)]
如果改变 r ( τ ) r(\tau) r(τ),给他加一个常数:
E w [ ∇ w log ⁡ ( P w ( τ ) ) ( r ( τ ) + b ) ] = E w [ ∇ w log ⁡ ( P w ( τ ) ) r ( τ ) ] + E w [ ∇ w log ⁡ ( P w ( τ ) ) b ] E_{w}\left[\nabla_{w} \log \left(P_{w}(\tau)\right) (r(\tau)+b)\right]=E_{w}\left[\nabla_{w} \log \left(P_{w}(\tau)\right) r(\tau)\right]+E_{w}\left[\nabla_{w} \log \left(P_{w}(\tau)\right) b\right] Ew[wlog(Pw(τ))(r(τ)+b)]=Ew[wlog(Pw(τ))r(τ)]+Ew[wlog(Pw(τ))b]
E w [ ∇ w log ⁡ ( P w ( τ ) ) b ] = ∫ t a u ∇ w P w ( τ ) b d τ = b ∇ w ∫ τ P w ( τ ) d τ = 0 E_{w}\left[\nabla_{w} \log \left(P_{w}(\tau)\right) b\right]=\int_{t a u} \nabla_{w} P_{w}(\tau) b d \tau=b \nabla_{w} \int_{\tau} P_{w}(\tau) d \tau=0 Ew[wlog(Pw(τ))b]=tauwPw(τ)bdτ=bwτPw(τ)dτ=0

所以得到:
∇ w J ( w ) = E w [ ∇ w log ⁡ ( P w ( τ ) ) ( r ( τ ) + b ) ] \nabla_{w} J(w) = E_{w}\left[\nabla_{w} \log \left(P_{w}(\tau)\right) (r(\tau)+b)\right] wJ(w)=Ew[wlog(Pw(τ))(r(τ)+b)]
这启发我们,如果将所有轨道对应的奖励总和 r ( τ ) r(\tau) r(τ)(即训练时的“权重”)同时增加一个常数 b b b ,其实是不会影响策略梯度的求值的。

从直观上来说, b b b应该取值为 r ( τ ) r(\tau) r(τ)的均值,这可以使得 r ( τ ) − b r(\tau)-b r(τ)b的平方和最小。并且这样可以使得“比较好的”轨道 τ \tau τ对应的权重 r ( τ ) − b r(\tau)-b r(τ)b都是正数,而“比较差的”轨道 τ \tau τ对应的权重 r ( τ ) r(\tau) r(τ)是负数。但是,这并不意味着估计的均方误差最小。如果经过严格的数学推理,我们会发现其实 b b b不是取 r ( τ ) r(\tau) r(τ)的均值,而是取 r ( τ ) r(\tau) r(τ)关于对应梯度大小的加权均值时候,估计的均方误差最小。不过在实践中人们发现, b b b取为 r ( τ ) r(\tau) r(τ)的均值,虽然不能达到“均方误差最小”,但是计算比较简单,效果也相当不错,而且“赏罚分明”,比较符合人们的直观。所以人们一般就将 b b b取为所有 r ( τ ) r(\tau) r(τ)的均值。这也就是说,在训练时,我们一般先对采样出的所有轨道的 r ( τ ) r(\tau) r(τ)进行中心化,然后再求其均值以用来估计策略梯度

二 Experience Replay

policy gradient显然是一个on-policy的算法。换言之,我们必须用当前策略产生的数据,才能训练改善当前的策略。

在DQN中,由于DQN具有off-policy的特性,它可以采用experience replay,将所有训练中产生的 ( s , a , r , s ′ ) \left(s, a, r, s^{\prime}\right) (s,a,r,s)数据集都记录下来,放在一个记忆库中。每次训练的时候,都可以从中随机抽取出一个batch来训练。此举有很多好处,例如提高数据的利用率、减少产生数据的成本,打断同一个batch数据集前后关联程度、增加训练集之间独立性等等。如果策略梯度算法必须每一步产生大量数据,而只用来训练一次就丢掉,无疑太过浪费了。所以,我们的问题是,在策略梯度算法中,如何才能正确利用过去的数据呢?

策略梯度公式唯一妨碍我们采用off-policy的地方就只有一个,那就是 τ i \tau_i τi不服从 P w ( τ ) P_w(\tau) Pw(τ)分布。

化简一下我们的问题,我们想求的是 E x ∼ p ( x ) [ f ( x ) ] E_{x \sim p(x)}[f(x)] Exp(x)[f(x)] ,但我们只有一组 x ∼ q ( x ) x \sim q(x) xq(x)的样本,我们掌握 f ( x ) f(x) f(x)的计算方法,并且也掌握 p ( x ) p(x) p(x) q ( x ) q(x) q(x)的表达式。唯一的问题就是 p ( x ) p(x) p(x) q ( x ) q(x) q(x)是不同的概率密度函数。注意如下的公式:
E x ∼ p ( x ) [ f ( x ) ] = ∫ x p ( x ) f ( x ) d x = ∫ x q ( x ) p ( x ) q ( x ) f ( x ) d x = E x ∼ q ( x ) [ p ( x ) q ( x ) f ( x ) ] E_{x \sim p(x)}[f(x)]=\int_{x} p(x) f(x) d x=\int_{x} q(x) \frac{p(x)}{q(x)} f(x) d x=E_{x \sim q(x)}\left[\frac{p(x)}{q(x)} f(x)\right] Exp(x)[f(x)]=xp(x)f(x)dx=xq(x)q(x)p(x)f(x)dx=Exq(x)[q(x)p(x)f(x)]
这也就是说,如果我们对当前这组样本 x x x对应的 p ( x ) q ( x ) f ( x ) \frac{p(x)}{q(x)} f(x) q(x)p(x)f(x)求均值,就可以得到 E x ∼ p ( x ) [ f ( x ) ] E_{x \sim p(x)}[f(x)] Exp(x)[f(x)]的一个无偏估计。

上述的方法被称为“重要性蒙特卡洛方法”。即通过为每个样本增加一个“重要性权重” p ( x ) q ( x ) \frac{p(x)}{q(x)} q(x)p(x),使得本来服从 q ( x ) q(x) q(x)分布的一组样本可以被“强行改成”服从于 p ( x ) p(x) p(x)分布的样本。这样一来,就可以计算我们手头上没有样本的分布所对应的期望了。以下的图片展示为什么我们可以通过改变样本的“重要性权重”达到改变样本分布的目的。要注意的是,左图中的黑点位置在右图中位置没有移动,只是按照不同权重变成了不同大小的红点,其对应的分布也发生了改变。
在这里插入图片描述
所有基于策略的方法都天然地是on-policy的算法。为了将其off-policy的训练,提升性能,我们都需要采取类似于重要性采样的方法。

三 Exploration

在DQN中,exploration可以增加数据集的多样性,使得算法更加鲁棒。主要有两种exploration方法,一种 ϵ − \epsilon- ϵ greedy,即以 1 − ϵ 1-\epsilon 1ϵ的概率按照 a r g m a x Q ( s , a ) argmaxQ(s, a) argmaxQ(s,a)选择 a a a,而以 ϵ \epsilon ϵ的概率随机选择一个 a a a;另一种方式叫做Boltzmann Exploration,即按照 exp ⁡ ( Q ( s , a ) ) \exp(Q(s, a)) exp(Q(s,a))归一化后的概率产生 a a a。这两种方法都可以为数据集增加多样性,不过后一种方法的性能要比前者更鲁棒,因为它充分地考虑了所有不同 a a a之间的优劣,让 Q ( s , a ) Q(s, a) Q(s,a)更高的 a a a更容易被选中。

policy gradient算法和DQN是完全不同的。它不是要估计某个“客观的价值”,而是要直接输出“最佳的策略”。所以,它不会像DQN一样存在“局部收敛”的问题。但是,在迭代中我们要随机采样很多 τ i \tau_i τi ,求出 ∇ w log ⁡ P w ( τ i ) r ( τ i ) \nabla_{w} \log P_{w}\left(\tau_{i}\right) r\left(\tau_{i}\right) wlogPw(τi)r(τi)的平均值,以估计policy gradient E w ( ∇ w log ⁡ P w ( τ ) r ( τ ) ) E_{w}\left(\nabla_{w} \log P_{w}(\tau) r(\tau)\right) Ew(wlogPw(τ)r(τ))如果我们采样出来的 τ \tau τ不够多样,则估计的policy gradient肯定会不够准确。换句话说,我们希望 P w ( τ ) P_w(\tau) Pw(τ)的分布更加“平均”一些,这样,通过蒙特卡洛方法对 P w ( τ ) P_w(\tau) Pw(τ)求期望才会更加准确。从这个角度说,一定程度的explore对于训练策略网络也是很重要的。

策略网络天然就具有explore的方式——它输出的本来就是 π w ( a ∣ s ) \pi_{w}(a \mid s) πw(as)的概率,我们让Agent按照这个概率分布去随机抽样 a a a,做出决策,则得到 τ \tau τ自然是具有多样性的。但是随着训练的进行,某些 ( s , a ) (s, a) (s,a) π w ( a ∣ s ) \pi_{w}(a \mid s) πw(as)趋于1,这样一来 τ \tau τ的多样性也大大的减少了。归根结底,这是因为我们并没有显式地去定义如何增加 τ \tau τ的多样性,我们应该对多样性进行一个严格的定义,并显式地去增加它。

我们定义熵函数 H ( s ) = Σ a π v o ( s , a ) log ⁡ ( π w ( s , a ) ) H(s)=\Sigma_{a} \pi_{v o}(s, a) \log \left(\pi_{w}(s, a)\right) H(s)=Σaπvo(s,a)log(πw(s,a)),表示面对输入状态 s s s时,策略网络输出的 a a a的概率分布的熵。若 a a a的概率分布越均匀,则熵越大。对不同的 s s s,策略网络输出的 a a a的分布不同,熵函数自然也不同,所以熵函数是一个关于 s s s的函数,将其记为 H ( s ) H(s) H(s)。我们定义策略的熵为不同状态下熵的期望值,即:
E w ( H ( s ) ) = ∫ s P w ( s ) H ( s ) d s E_{w}(H(s))=\int_{s} P_{w}(s) H(s) d s Ew(H(s))=sPw(s)H(s)ds
策略的熵越大,说明它决策中 ( s , a ) (s, a) (s,a)的丰富度越高,用它决策出来的 τ \tau τ就越多样。

在基本的policy gradient中,我们迭代地让 w w w沿着 ∇ w J ( w ) \nabla_wJ(w) wJ(w)的方向更新,以谋求获得更大的 J ( w ) J(w) J(w)。现在,我们修改一下, w w w沿着 ∇ w [ J ( w ) + α E w ( H ( s ) ) ] \nabla_{w}\left[J(w)+\alpha E_{w}(H(s))\right] w[J(w)+αEw(H(s))]的方向更新,意思是我们既要考虑增大总的奖励 J ( w ) J(w) J(w),也要同时考虑让策略具有更大的熵、让它决策更具有多样性。这就好像是在说,我们要多为自己的人生保留无限的可能性,不要过早地把自己给限定死了。 α \alpha α是一个惩罚系数,表示我们对于“决策多样性”的重视程度。 α \alpha α越高,就代表我们越重视多种不同的经验,越会努力去尝试让自己人生丰富多彩。它与机器学习中的正则项系数有一定相似性,相当于超参数。要多调试一下不同的 α \alpha α才能找出其最佳的取值。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值