RL的体悟以及简单的算法介绍

2023-12-15 10:08:58

本文将围绕着本人在接触rl后的各种问题,简单解答,顺便介绍各种算法。主要是给自己用做笔记,所以写得比较乱。

0、 可以参考的资料

openai的教程 这个讲得很棒,最好可以按照顺序读一遍
在这里插入图片描述

1、off policy / on policy?

off policy :采样策略和目标策略不一样,如Q learning(value based)用Q*在evaluate epsilon-greedy Q

on policy:采样策略和目标策略一样 如ppo(policy gradient) sarsa(value based)

在这里插入图片描述
图中可以看到Q-Learning 因为采用了opitmal 的 action-value function ,所以成为了off-policy,而一般on-policy如果用value function 或者 action-value function,不会用带星号(或者说optimal的)。

2、Q-Learning外其他算法如何得到策略网络?

最早,让强化学习在近几年火起来的便是DQN。都知道Q-Learning 只能用在离散动作,因为没有策略网络。
然而,不同于Q-Learning这一套boostrap的方法,Actor-Critic体系的方法如PPO、A2C、A3C根据策略梯度,自然而然学到了策略网络。其中A2C、A3C是直接的策略梯度,样本效率比较低,PPO算是在此基础上的利用重要性采样、梯度裁剪提高样本利用率。不用boostrap,就不会overestimate,导致有偏的估计,效果理论上更好。

策略梯度

不同于一个最常见的策略梯度更新公式如下: θ k + 1 = θ k + α ? θ J ( π θ ) ∣ θ k \theta_{k+1}=\theta_k + \alpha\nabla_\theta J(\pi_\theta)|_{\theta_k} θk+1?=θk?+α?θ?J(πθ?)θk??,其中 ? θ J ( π θ ) \nabla_\theta J(\pi_\theta) ?θ?J(πθ?)就是策略梯度。
为了让这一梯度可以被计算,需要转化为期望的形式,并且采样去估计这个期望,下面是进一步的推导:
? θ J ( π θ ) = E τ ~ ? π θ [ R ( τ ) ] = ? θ ∫ τ P ( τ ∣ θ ) R ( τ ) = ∫ τ ? θ P ( τ ∣ θ ) R ( τ ) = ∫ τ P ( τ ∣ θ ) ? θ log ? P ( τ ∣ θ ) R ( τ ) = ∫ τ P ( τ ∣ θ ) ? θ log ? ( ρ 0 ( s 0 ) ∏ t = 0 T P ( s t + 1 ∣ s t , a t ) π θ ( a t ∣ s t ) ) R ( τ ) = ∫ τ P ( τ ∣ θ ) ? θ log ? ( ∏ t = 0 T π θ ( a t ∣ s t ) ) R ( τ ) = E τ ~ ? π θ [ ∑ t = 0 T ? θ log ? π θ ( a t ∣ s t ) R ( τ ) ] \nabla_\theta J(\pi_\theta) = \mathop{E} \limits_{\tau\sim\ \pi_{\theta}}\left[ R(\tau)\right ]\\ = \nabla_\theta \int_{\tau}P(\tau|\theta)R(\tau)\\ =\int_{\tau}\nabla_\theta P(\tau|\theta)R(\tau)\\ =\int_{\tau}P(\tau|\theta)\nabla_\theta \log P(\tau|\theta) R(\tau)\\ =\int_{\tau}P(\tau|\theta)\nabla_\theta \log \left(\rho_0(s_0) \prod_{t=0}^{T} P(s_{t+1}|s_t,a_t)\pi_\theta(a_t|s_t) \right)R(\tau)\\ =\int_{\tau}P(\tau|\theta)\nabla_\theta \log \left(\prod_{t=0}^{T} \pi_\theta(a_t|s_t) \right)R(\tau)\\ =\mathop{E} \limits_{\tau\sim\ \pi_{\theta}}\left[\sum_{t=0}^{T}\nabla_\theta \log \pi_\theta(a_t|s_t) R(\tau)\right]\\ ?θ?J(πθ?)=τ?πθ?E?[R(τ)]=?θ?τ?P(τθ)R(τ)=τ??θ?P(τθ)R(τ)=τ?P(τθ)?θ?logP(τθ)R(τ)=τ?P(τθ)?θ?log(ρ0?(s0?)t=0T?P(st+1?st?,at?)πθ?(at?st?))R(τ)=τ?P(τθ)?θ?log(t=0T?πθ?(at?st?))R(τ)=τ?πθ?E?[t=0T??θ?logπθ?(at?st?)R(τ)]

上面是最基础的策略梯度计算公式,围绕着 R ( τ ) R(\tau) R(τ)这项有各种变体,常见的是去计算优势
? θ J ( π θ ) = E τ ~ ? π θ [ ∑ t = 0 T ? θ log ? π θ ( a t ∣ s t ) A π θ ( s t , a t ) ] \nabla_\theta J(\pi_\theta) =\mathop{E} \limits_{\tau\sim\ \pi_{\theta}}\left[\sum_{t=0}^{T}\nabla_\theta \log \pi_\theta(a_t|s_t) A^{\pi_\theta}(s_t,a_t)\right] ?θ?J(πθ?)=τ?πθ?E?[t=0T??θ?logπθ?(at?st?)Aπθ?(st?,at?)]
比如添加了baseline计算优势,并且不考虑过去的reward

? θ J ( π θ ) = E τ ~ ? π θ [ ∑ t = 0 T ? θ log ? π θ ( a t ∣ s t ) ( ∑ t ′ = t T R ( s t ′ , a t ′ , s t ′ + 1 ) ? b ( s t ) ) ] \nabla_\theta J(\pi_\theta) =\mathop{E} \limits_{\tau\sim\ \pi_{\theta}}\left[\sum_{t=0}^{T}\nabla_\theta \log \pi_\theta(a_t|s_t) \left( \sum_{t'=t}^{T}R(s_{t'},a_{t'},s_{t'+1}) - b(s_t) \right)\right] ?θ?J(πθ?)=τ?πθ?E?[t=0T??θ?logπθ?(at?st?)(t=tT?R(st?,at?,st+1?)?b(st?))]

也有用GAE估计优势的

TRPO (on-policy)

TRPO和下面的PPO都是试图多次利用已有的数据来更新策略,TRPO利用KL散度约束新老策略差异度:
在这里插入图片描述
其中目标函数被称为代理优势函数
在这里插入图片描述
在这里插入图片描述

然后做泰勒展开近似(g就是代理又是函数)

在这里插入图片描述
在这里插入图片描述
然后用拉格朗日对偶性求解,得到如下结果
在这里插入图片描述
由于有近似,所以更新的时候需要回溯搜索
在这里插入图片描述
此外, H ? 1 H^{-1} H?1在实际的计算中很难做到,用共轭梯度法求解
在这里插入图片描述

PPO(on-policy)

总的来说TRPO形式复杂,而PPO 用clip来约束差异,数学形式和计算更简洁,效果也很好。著名的OpenAI Five就是用的PPO
在这里插入图片描述

3、一些Q-Learning衍生出去的算法,如何“变”出一个策略网络呢?

那其他基于Q-Learning Booststrap体系的网络(off-policy的DDPG、offlineRL里的IQL、CQL)又该如何得到策略网络呢?下面简单介绍一下几种明显的DQN的衍生体。

DDPG(off-policy)

不同于最常见的随机策略的表达方式: a t ~ π ( ? ∣ s t ) a_t \sim \pi(\cdot|s_t) at?π(?st?)
DDPG采用确定策略梯度: a t = μ ( s t ) a_t = \mu(s_t) at?=μ(st?)
也就是说,当确定了最优动作价值函数 Q ? ( s , a ) Q^*(s,a) Q?(s,a),动作也被确定: a ? ( s ) = a r g m a x a Q ? ( s , a ) a^*(s)=arg\mathop{max}\limits_{a}Q^*(s,a) a?(s)=argamax?Q?(s,a),从公式的形式来看,DDPG就是DQN在连续动作下的情况,DDPG也只能用在连续动作。

简单来说,DDPG就是把原来DQN的target,即 r + γ m a x a ′ Q ? ( s ′ , a ′ ) r + \gamma \mathop{max}\limits_{a'}Q^*(s',a') r+γamax?Q?(s,a),改为 r + γ Q ? ( s ′ , μ ( s ′ ) ) r + \gamma Q^*(s',\mu(s')) r+γQ?(s,μ(s))
对于拥有target network来减少overestimate的DQN,更新的目标就是对于 ? \phi ?最小化以下目标:
L ( ? , D ) = E ( s , a , r , s ′ , d o n e ) ~ D [ ( Q ? ( s , a ) ? ( r + γ ( 1 ? d o n e ) Q ? t a r g e t ( s ′ , μ θ t a r g e t ( s ′ ) ) ) ) 2 ] L(\phi,\mathcal{D})=\mathop{E}\limits_{(s,a,r,s',done)\sim\mathcal{D}}\left[\left( Q_\phi(s,a)-\left(r + \gamma(1-done)Q_{\phi _{target}}(s',\mu_{\theta_{target}}(s'))\right) \right)^2 \right] L(?,D)=(s,a,r,s,done)DE?[(Q??(s,a)?(r+γ(1?done)Q?target??(s,μθtarget??(s))))2]
相应的对于策略的更新就是对于 θ \theta θ最大化以下目标:
E s ~ D [ Q ? ( s , μ θ ( s ) ) ] \mathop{E}\limits_{s\sim \mathcal{D}}[Q_\phi(s,\mu_\theta(s))] sDE?[Q??(s,μθ?(s))]

其中target network按照如下更新:
? t a r g e t = ρ ? t a r g e t + ( 1 ? ρ ) ? θ t a r g e t = ρ θ t a r g e t + ( 1 ? ρ ) θ \phi_{target} = \rho \phi_{target} + (1-\rho)\phi\\ \theta_{target} = \rho \theta_{target} + (1-\rho)\theta ?target?=ρ?target?+(1?ρ)?θtarget?=ρθtarget?+(1?ρ)θ

TD3(Twin Delayed DDPG)

准确来说就是在DDPG的基础上延时去更新target network,并使用clipped double-Q等trick ,就是加强版的DDPG,没有应用场景上的变化

CQL(offlineRL 和后文关系不大)

暂时不写

IQL(offlineRL 和后文关系不大)

暂时不写

4、为什么Q-Learning不用类似重要性采样的操作:

因为最优贝尔曼等式右侧期望只与状态转移分布有关,和策略无关,理论上各种策略都可以迭代到 Q ? Q^* Q?

5、 同样是Actor-Critic体系的,都要用策略梯度,为什么比如SAC是off-policy,A2C/A3C/PPO是on-policy?

根据OpenAI里RL的教程,Model-Free RL可以根据学的内容大致分为 Policy Optimization(A2C/A3C/PPO :on-policy) 和 Q-Learning (DQN:off-policy),以及两者的融合(DDPG、SAC,两者均为off-policy)。
至于Actor-Critic 体系,从最早的含义而言,需要Critic价值迭代,Actor策略迭代,广义上而言,有策略网络和价值网络的都算,我认为SAC和DDPG一样都属于后者,因为他们的策略网络是通过最大化价值函数而来的。

SAC(off-policy)

SAC可以粗略看为加了熵的DDPG,它引入了最大熵学习的概念,也就是在各个reward上加上 α H ( π ( ? ∣ s t ) ) \alpha H(\pi(\cdot|s_t)) αH(π(?st?)),其中 H ( P ) = E x ~ P [ ? log ? P ( x ) ] H(P) = \mathop{E}\limits_{x\sim P}\left[-\log P(x) \right] H(P)=xPE?[?logP(x)]
也就是说:
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 ′ ) ? α log ? ( π ( a ′ ∣ s ′ ) ) ) ] Q^\pi(s,a) = \mathop{E}\limits_{s'\sim P,a'\sim \pi}\left[R(s,a,s')+\gamma (Q^\pi(s',a')+\alpha H(\pi(\cdot|s')))\right] \\ = \mathop{E}\limits_{s'\sim P,a'\sim \pi}\left[R(s,a,s')+\gamma (Q^\pi(s',a')-\alpha \log(\pi(a'|s')))\right] Qπ(s,a)=sP,aπE?[R(s,a,s)+γ(Qπ(s,a)+αH(π(?s)))]=sP,aπE?[R(s,a,s)+γ(Qπ(s,a)?αlog(π(as)))]

和TD3比较相似的是SAC也用了boostraping的Q函数更新方法,以及target Q-network、clipped double-Q等手段
不一样的地方是除了引入最大熵,SAC的策略不需要target policy,而且是随机策略

SAC的Q更新部分, s , a , r , s ′ s,a,r,s' s,a,r,s来自replay buffer, a ′ a' a来自最新策略的采样:

Q π ( s , a ) ≈ E s ′ ~ P , a ′ ~ π [ r + γ ( Q π ( s ′ , a ~ ′ ) ? α log ? ( π ( a ~ ′ ∣ s ′ ) ) ) ] Q^\pi(s,a) \approx \mathop{E}\limits_{s'\sim P,a'\sim \pi}\left[r+\gamma (Q^\pi(s',\tilde{a}')-\alpha \log(\pi(\tilde{a}'|s')))\right] Qπ(s,a)sP,aπE?[r+γ(Qπ(s,a~)?αlog(π(a~s)))]

因为动作不是来自buffer,不是来自其他策略,所以也就没有重要性采样的说法
对于策略的学习,最大化 V π ( s ) = E a ~ π [ Q π ( s , a ) ? α log ? π ( a ∣ s ) ] V^\pi(s)=\mathop{E}\limits_{a\sim\pi}[Q^\pi(s,a)-\alpha\log\pi(a|s)] Vπ(s)=aπE?[Qπ(s,a)?αlogπ(as)]

借助重参数化手段

a ~ θ ( s , ξ ) = t a n h ( μ θ ( s ) + σ θ ( s ) ⊙ ξ ) , ξ ~ N ( 0 , I ) \tilde{a}_\theta(s,\xi)=tanh(\mu_\theta(s)+\sigma_\theta(s)\odot \xi), \xi\sim \mathcal{N}(0,I) a~θ?(s,ξ)=tanhμθ?(s)+σθ?(s)ξ),ξN(0,I)

得到
E a ~ π θ [ Q π θ ( s , a ) ? α log ? π θ ( a ∣ s ) ] = E ξ ~ N [ Q π θ ( s , a ~ θ ( s , ξ ) ) ? α log ? π θ ( a ~ θ ( s , ξ ) ∣ s ) ] \mathop{E}\limits_{a\sim\pi_\theta}[Q^{\pi_\theta}(s,a)-\alpha\log\pi_\theta(a|s)] = \mathop{E}\limits_{\xi\sim\mathcal{N}}[Q^{\pi_\theta}(s,\tilde{a}_\theta(s,\xi))-\alpha\log\pi_\theta(\tilde{a}_\theta(s,\xi)|s)] aπθ?E?[Qπθ?(s,a)?αlogπθ?(as)]=ξNE?[Qπθ?(s,a~θ?(s,ξ))?αlogπθ?(a~θ?(s,ξ)s)]

进一步的double-Q不再展开

文章来源:https://blog.csdn.net/qq_35975855/article/details/134972985
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。