Off-policy Actor-critic in RL

Abstract

本文主要介绍 DDPG, TD3 和 SAC这三种continuous action下的off-policy算法。
其中 DDPG和TD3属于确定性策略,SAC属于随机策略。
问题1: 确定性策略和随机性策略的区别:
在确定性策略下,我们在一个状态下只会进行一种固定的动作;而随机性策略,在一个状态下会生成 不同动作的执行概率,然后根据概率进行随机选择。
在有些问题中,因此观测值是不完全的,可能会将不同的状态看作一种状态,在这时候 执行确定性策略可能会就陷入困境。 但是很多问题下,有的随机性策略使用 高斯分布下的重参数化,最终的结果有可能方差极小,也就近似等于确定性算法。 确定性策略与随机性策略的结果都比较不错。确定性策略因为是off-policy,所以过去的经验可以重复利用,在有些问题中 data-efficiency 会比较重要。因此确定性策略和随机性策略应该根据问题需要进行选择。

问题2:off-policy的含义:
off-policy是指 我们获取经验的过程是使用behavior policy+较大的noise exploration,但是我们最后期望得到的是 target policy和没有noise的behavior policy。 因为我们是使用behavior policy+Noise exploration进行的,所以生成的经验池中的数据的决策度量 ρ \rho ρ是根据 π b \pi_b πb

举例: 我们在off-policy中经常会用到 ϵ \epsilon ϵ-greedy policy, Gaussian noise, OU noise等等。为了增加探索范围,可能还会在每个episode的前N步采用随机动作。 这些都使得 经验池中的经验的决策度量 和 真实我们的策略的决策度量之间有很大的差别。 off-policy使用经验池中的数据来学习 target policy和target Q。【需要注意的是:确定性策略和随机策略都有off-policy方法。而确定性策略中没有重要性采样,但是在随机策略中有重要性采样。】

而on-policy 一般只适用于随机性的策略, 每次生成的经验都是基于当前的策略。然后根据当前的数据更新策略与Q值。然后再根据新的策略生成新的数据,之前的数据都会被丢弃掉。这是on-policy(使用target policy来生成数据)

DDPG

在离散问题中,我们如果有了 Q函数,那么我们可以直接得到对应的策略 a = a r g m a x   Q ( s , : ) a= argmax \ Q(s,:) a=argmax Q(s,:)。 而在连续问题当中,如果我们有了Q,我们也没办法直接得到连续的动作空间下的最优动作。而DPPG采用的方式 就是 ▽ θ π = E [ ▽ θ Q ( s , μ ( s ; θ ) ) ] \bigtriangledown_\theta \pi = E[\bigtriangledown_\theta Q(s,\mu(s;\theta))] θπ=E[θQ(s,μ(s;θ))]。 我们在对应的状态下 沿着Q增大的方向改变我们的确定性策略。
如果我们得到了最优的Q函数,我们就可以最终达到每个状态下的最好的动作。而改善Q的方式就是使用经验池中数据,采用Q-learning的方式,使得Q更加趋近于 Q ∗ Q^* Q
因此,我们也就知道了 DPPG实际上就是 通过Q-learning得到最优的 Q ∗ Q^* Q,然后使用梯度上升的方式,在不同的状态下更新策略,使得策略在不同的状态下对应更好的Q。因此,DDPG可以看作是 连续动作空间下的deep Q learning。
所以,更新到最好的策略的前提,就是学到得到更好的Q。

Q的目标函数

因为我们是采用动作策略的决策度量下的Q值最好,所以对应的目标函数就是:
J ( ϕ ) = m a x   ∑ s ρ π b ( s ) Q ( s , μ ( s ) ) = E ( s , a , r , s ′ , d ) ∼ π b { [ Q ϕ ( s , a ) − ( r + γ ( 1 − d ) m a x a ′   Q ϕ ( s ′ , a ′ ) ) ] 2 } J(\phi)=max \ \sum_s \rho^{\pi_b}(s) Q(s,\mu(s))=E_{(s,a,r,s',d)\sim \pi^b}\{ [ Q_{\phi}(s,a)- (r+\gamma(1-d)max_{a'} \ Q_\phi (s',a')) ]^2 \} J(ϕ)=max sρπb(s)Q(s,μ(s))=E(s,a,r,s,d)πb{[Qϕ(s,a)(r+γ(1d)maxa Qϕ(s,a))]2}
其中 m a x a ′ Q ϕ ( s ′ , a ′ ) max_{a'}Q_{\phi}(s',a') maxaQϕ(s,a)存在trick,以下再说明。

Tricks

Replay buffers

我们为了更好的更新Q,我们的经验池应该足够大,使得各种探索得到的经验都能够被充分的利用,使得Q充分的更新。 另外Replay buffer也不能保持所有经验,不然会使得学习变得很慢。【需要根据环境,进行调节。】

可以使用过去经验的原因:
我们在更新Q时,使用了bellman optimal equation(Q-learning),所以对于所有的 MDP转换,贝尔曼最有方程都是适用的。因此是off-policy算法。

Target Networks

Target Q

我们在使用真实值时,如果直接使用 动作策略对应的Q,会使得结果不稳定。因此,为了让结果更稳定,采用了一个接近Q参数的网络target Q(类似DQN)。
更新方式,不同于DQN(过一段时间,将behavior Q赋予target Q)。而是采用以下的方式:
ϕ t a r g ← ρ ϕ t a r g + ( 1 − ρ ) ϕ \phi_{targ}\leftarrow \rho \phi_{targ}+(1-\rho)\phi ϕtargρϕtarg+(1ρ)ϕ

Target Policy

我们在 m a x   Q t a r g max \ Q_{targ} max Qtarg的时候,选择使用 target policy来进行,而不是选择 behavior policy来进行。
【在DQN中,我们在计算真实值时,采用的是 m a x   Q t a r g ( s ′ , : ) max \ Q_{targ}(s',:) max Qtarg(s,:)。 而在Double Q中,我们采用的 Q t a r g ( s ′ , a r g m a x   Q b ( s ′ , : ) ) Q_{targ}(s', argmax\ Q_b(s',:)) Qtarg(s,argmax Qb(s,:))
根据 DDQN和DQN的关系,按理说应该采用 Behavior policy对应的动作,但是DDPG也并没有。
target policy的更新方式 和 target Q一样:
θ t a r g ← ρ θ t a r g + ( 1 − ρ ) θ \theta_{targ}\leftarrow \rho \theta_{targ}+(1-\rho)\theta θtargρθtarg+(1ρ)θ

Exploration

DDPG的核心在于 Q的更新,因此探索是非常重要的一步。
DDPG原文使用OU noise,但是 后续的结果表明: Gaussian noise表现最好。

另外,为了增加探索,可以在每一个episode的前N步进行随机的动作选择,增大探索空间。

Pseudocode

DDPG pseudocode

TD3(Twin Delayed DDPG)

TD3算法主要在DDPG基础之上进行了调整,使得DDPG鲁棒性更强。
DDPG有时候崩溃的原因在于 Q函数开始大幅度的过评估,最后导致了策略更新出问题(利用了Q函数中的误差),TD3提出了3个trick来改善这个问题。

Tricks

target policy smoothing

在使用Q-learning更新时,真实值计算中,我们不直接使用 μ θ ; t a r g \mu_{\theta;targ} μθ;targ,我们添加了一定的噪音。通过添加噪音,使得Q值更新更加的光滑(类似于正则化:减少DDPG 的Q值中不正确的sharp peak)。
a ′ ( s ′ ) = c l i p ( μ θ ; t a r g ( s ′ ) + c l i p ( ϵ , − c , c ) , a l o w , a h i g h ) , ϵ ∼ N ( 0 , σ ) a'(s')=clip(\mu_{\theta;targ}(s')+clip(\epsilon,-c,c),a_{low},a_{high}),\epsilon \sim N(0,\sigma) a(s)=clip(μθ;targ(s)+clip(ϵ,c,c),alow,ahigh),ϵN(0,σ)

但是,对于policy update时,则不使用该trick。

Clipped Double-Qlearning

学习两个target Q 函数 Q t a r g 1 , Q t a r g 2 Q_{targ1},Q_{targ2} Qtarg1,Qtarg2,可以减少Q的过估计(类似ensemble of neural network)。
y ( r , s ′ , d ) = r + γ ( 1 − d ) m i n i = 1 , 2   Q ϕ i , t a r g ( s ′ , a ′ ( s ′ ) ) y(r,s',d)=r+\gamma(1-d)min_{i=1,2}\ Q_{\phi_i,targ}(s',a'(s')) y(r,s,d)=r+γ(1d)mini=1,2 Qϕi,targ(s,a(s))

然后使用该真值 更新 Q t a r g 1 Q_{targ1} Qtarg1 Q t a r g 2 Q_{targ2} Qtarg2

除了以上三个trick之外,TD3和DDPG没有差别。

延迟的策略更新

我们更新策略(behavior policy & target policy)的频率 要少于 Q函数的更新频率。 文章同推荐 更新两次Q,然后更新一次policy。

Pseudocode

TD3

SAC (soft actor-critic)

SAC 采用 随机策略,但是和 VPG, TRPO,PPO不同的点在于 SAC的随机策略不仅 计算策略的均值,也计算策略的方差。
虽然 都是假设为高斯分布,但是其他的 随机策略算法都是使用了固定的方差。 主要原因是 SAC 根据方差的大小(信息熵)来进行探索。

在状态 s s s下,随机策略的动作分布是 π ( a ∣ s ) \pi(a|s) π(as),那么我们就可以知道其 信息熵 H ( π ( s ) ) = E a ∼ π ( a ∣ s ) [ − l o g   π ( a ∣ s ) ] = ∫ a − π ( a ∣ s ) l o g π ( a ∣ s ) H(\pi(s))=E_{a \sim \pi(a|s)}[-log \ \pi(a|s)]=\int_a - \pi(a|s)log\pi(a|s) H(π(s))=Eaπ(as)[log π(as)]=aπ(as)logπ(as)

SAC是信息熵正则化的强化学习算法,因此智能体在每一步除了有奖励 r ( s , a , s ′ ) r(s,a,s') r(s,a,s),还会有信息熵 α H ( π ( a ∣ s ) ) \alpha H(\pi(a|s)) αH(π(as))作为奖励。
π ∗ = a r g m a x π   E ρ ∼ π b [ ∑ t = 0 ∞ γ t ( R ( s t , a t , s t + 1 ) + α H ( π ( s t ) ) ) ] \pi^* =arg max_{\pi}\ E_{\rho \sim \pi_b}[\sum_{t=0}^{\infty} \gamma^t(R(s_t,a_t,s_{t+1})+\alpha H(\pi(s_t)))] π=argmaxπ Eρπb[t=0γt(R(st,at,st+1)+αH(π(st)))]
V π ( s ) = E a ∼ π [ Q π ( s , a ) ] + α H ( π ( s ) ) = E a ∼ π [ Q π ( s , a ) − α l o g ( π ( a ∣ s ) ) ] V^\pi(s)=E_{a\sim \pi}[ Q^\pi (s,a) ]+\alpha H(\pi(s))=E_{a \sim \pi}[Q^\pi(s,a)-\alpha log(\pi(a|s))] Vπ(s)=Eaπ[Qπ(s,a)]+αH(π(s))=Eaπ[Qπ(s,a)αlog(π(as))]
信息熵对于每一个 动作都是相同的,主要是针对不同的状态。 如果状态s的信息熵比比较大,那么就会鼓励该动作(加强探索,增加收敛);如果信息熵比较小,但是奖励比较大,那么很可能是较优动作;如果信息熵比较小,奖励比较小,那么就没必要探索了。 因此信息熵和 策略的方差 实现了 不同状态下的探索。

目标函数

J ( θ ) = E ρ ∼ π b [ Q π ( s , a ) ] J(\theta)=E_{\rho \sim \pi_b}[Q^{\pi}(s,a)] J(θ)=Eρπb[Qπ(s,a)]

策略是 V值的梯度。

Tricks

only one policy

在随机性策略中因为不同的动作都有可能执行,SAC也添加了信息熵来增大探索空间。 不需要添加额外的exploration(Gaussian noise等等)。 因为不需要多个policy,只需要一个policy就行。因此以下选择s’对应的a’时,直接使用policy采样得到: a ′ = π ( s ′ ) a'=\pi(s') a=π(s)

Q值更新

Q π ( s , a ) = E s ′ ∼ P , a ′ ∼ π [ r ( s , a , s ′ ) + γ ( Q ( s ′ , a ′ ) + α H ( π ( s ′ ) ) ) ] = E s ′ ∼ P . a ′ ∼ π [ r ( s , a , s ′ ) + γ ( Q ( s ′ , a ′ ) − α l o g   π ( a ′ ∣ s ′ ) ) ] , a ′ ∼ π ( s ′ ) Q^\pi(s,a)=E_{s' \sim P, a'\sim \pi}[r(s,a,s')+\gamma(Q(s',a')+\alpha H(\pi(s')))]=E_{s' \sim P. a'\sim \pi}[r(s,a,s')+\gamma(Q(s',a')-\alpha log \ \pi(a'|s'))], a' \sim \pi(s') Qπ(s,a)=EsP,aπ[r(s,a,s)+γ(Q(s,a)+αH(π(s)))]=EsP.aπ[r(s,a,s)+γ(Q(s,a)αlog π(as))],aπ(s)
注意, a ′ a' a是从目前的策略中采样得到的,不是根据之前的经验。

double-Q clip

我们使用了 两个 Q t a r g Q_{targ} Qtarg,使用 m i n i = 1 , 2 ( Q t a r g , i ) min_{i=1,2}(Q_{targ,i}) mini=1,2(Qtarg,i)来更新结果。
y ( r , s ′ , d ) = r + γ ( 1 − d ) [ m i n i = 1 , 2 Q t a r g , i ( s ′ , a ′ ) − α l o g   π θ ( a ′ ∣ s ′ ) ] , a ′ ∼ π ( s ′ ) y(r,s',d)=r+\gamma (1-d)[ min_{i=1,2}Q_{targ,i}(s',a')-\alpha log\ \pi_\theta(a'|s') ],a' \sim \pi(s') y(r,s,d)=r+γ(1d)[mini=1,2Qtarg,i(s,a)αlog πθ(as)],aπ(s)

policy选择

生成 μ ( s ) , σ ( s ) \mu(s),\sigma(s) μ(s),σ(s),那么动作就是 a ( s ) = t a n h ( μ ( s ) + σ ( s ) ∗ ξ ) , ξ ∼ N ( 0 , I ) a(s)=tanh( \mu(s)+\sigma(s)*\xi ),\xi \sim N(0,I) a(s)=tanh(μ(s)+σ(s)ξ),ξN(0,I)

policy 更新

▽ θ [ m i n i = 1 , 2 Q ϕ , i ( s , a ′ ( s ) ) − α l o g   π θ ( a ′ ) ] \triangledown_\theta [min_{i=1,2}Q_{\phi,i}(s,a'(s))-\alpha log \ \pi_{\theta}(a')] θ[mini=1,2Qϕ,i(s,a(s))αlog πθ(a)]

target Q 更新

和DPPG, TD3相同。

Pseudocode

SAC

Reference

Spinningup
Deterministic Policy Gradient Algorithms, Silver et al. 2014
Continuous Control With Deep Reinforcement Learning, Lillicrap et al. 2016
Addressing Function Approximation Error in Actor-Critic Methods, Fujimoto et al, 2018

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值