深度强化学习算法之SAC算法

编程入门 行业动态 更新时间:2024-10-14 06:17:31

深度强化学习<a href=https://www.elefans.com/category/jswz/34/1770096.html style=算法之SAC算法"/>

深度强化学习算法之SAC算法

深度强化学习算法之SAC(Soft Actor Critic)算法

文章地址:
Soft Actor-Critic: Off-Policy Maximum Entropy Deep Reinforcement Learning with a Stochastic Actor
Soft Actor-Critic Algorithms and Applications

代码地址:
demo1
demo2

参考地址:
BLOG1
BLOG2
BLOG3
BLOG4

1、最大熵强化学习

  • 一般的强化学习的目标是最大化累积奖励:
    ∑ t E ( s t , a t ) ∼ ρ π [ r ( s t , a t ) ] \sum_{t} \mathbb{E}_{\left(s_t, a_{t}\right) \sim \rho_{\pi}}\left[r\left(s_{t}, a_{t}\right)\right] t∑​E(st​,at​)∼ρπ​​[r(st​,at​)]

  • 最大熵强化学习的目标是带熵的累积奖励:
    J ( π ) = ∑ t = 0 T E ( s t , a t ) ∼ ρ π [ r ( s t , a t ) + α H ( π ( ⋅ ∣ s t ) ) ] J(\pi)=\sum_{t=0}^{T} \mathbb{E}_{(s_t, a_t) \sim \rho_{\pi}}\left[r\left(s_{t}, a_{t}\right)+\alpha H\left(\pi\left(\cdot \mid s_{t}\right)\right)\right] J(π)=t=0∑T​E(st​,at​)∼ρπ​​[r(st​,at​)+αH(π(⋅∣st​))]

​ 其中, α \alpha α 为温度系数,决定熵相对于奖励的重要程度,从而控制策略的随机程度

entropy可以理解为是一个值,用来衡量一个随机变量的随机性有多强。举个例子,如果对一个硬币出现正反面的变量进行加权,如果总是出现正面,那么这个变量的熵就很小;反之,如果出现正反面的加权值都接近0.5,那么就说明这个变量的熵很大。

假设 x ∼ P x \sim P x∼P, P P P 是一个分布,那么 x x x的熵 H H H的计算方式为:
H ( P ) = E P x ∼ P [ − log ⁡ P ( x ) ] H(P)=\underset{x \sim P}{E_{P}}[-\log P(x)] H(P)=x∼PEP​​[−logP(x)]

2、从策略迭代到软策略迭代

  • 策略迭代

    分成两步:

    • 策略评估,更新值函数,用来对策略进行评估
    • 策略改进,更新策略,用上一步的值函数来知道策略提高

​ 如上图所示,不断经过策略评估个策略提高最终找到最优策略。

  • 软策略迭代

    • 策略评估

      对于一个固定的策略 π \pi π,soft Q-value可以用Bellman backup 算子 Γ π \Gamma^{\pi} Γπ 迭代求出来:
      T π Q ( s t , a t ) ≜ r ( s t , a t ) + γ E s t + 1 ∼ p [ V ( s t + 1 ) ] \mathcal{T}^{\pi} Q\left(\mathbf{s}_{t}, \mathbf{a}_{t}\right) \triangleq r\left(\mathbf{s}_{t}, \mathbf{a}_{t}\right)+\gamma \mathbb{E}_{\mathbf{s}_{t+1} \sim p}\left[V\left(\mathbf{s}_{t+1}\right)\right] TπQ(st​,at​)≜r(st​,at​)+γEst+1​∼p​[V(st+1​)]
      其中,soft state value function 为:
      V ( s t ) = E a t ∼ π [ Q ( s t , a t ) − log ⁡ π ( a t ∣ s t ) ] V\left(\mathbf{s}_{t}\right)=\mathbb{E}_{\mathbf{a}_{t} \sim \pi}\left[Q\left(\mathbf{s}_{t}, \mathbf{a}_{t}\right)-\log \pi\left(\mathbf{a}_{t} \mid \mathbf{s}_{t}\right)\right] V(st​)=Eat​∼π​[Q(st​,at​)−logπ(at​∣st​)]

    • 策略提高

      在实际操作中,我们更希望策略最好可以方便处理。因此我们将策略限定在一个特定集合 Π \Pi Π当中,比如带有参数的高斯分布。为了将策略限定在集合 Π \Pi Π中,我们采用KL散度去投影新的策略:
      π new  = arg ⁡ min ⁡ π ′ ∈ Π D K L ( π ′ ( ⋅ ∣ s t ) ∥ exp ⁡ ( Q π old  ( s t , ⋅ ) ) Z π old  ( s t ) ) \pi_{\text {new }}=\arg \min _{\pi^{\prime} \in \Pi} D_{K L}\left(\pi^{\prime}\left(\cdot \mid \mathbf{s}_{t}\right) \| \frac{\exp \left(Q^{\pi_{\text {old }}}\left(\mathbf{s}_{t}, \cdot\right)\right)}{Z^{\pi_{\text {old }}}\left(\mathbf{s}_{t}\right)}\right) πnew ​=argπ′∈Πmin​DKL​(π′(⋅∣st​)∥Zπold ​(st​)exp(Qπold ​(st​,⋅))​)

信息熵:可以表达数据的信息量大小
H ( p ) = H ( X ) = E x ∼ p ( x ) [ − log ⁡ p ( x ) ] = − ∑ i = 1 n p ( x ) log ⁡ p ( x ) H(p)=H(X)=\mathrm{E}_{x \sim p(x)}[-\log p(x)]=-\sum_{i=1}^{n} p(x) \log p(x) H(p)=H(X)=Ex∼p(x)​[−logp(x)]=−i=1∑n​p(x)logp(x)
或者
H ( p ) = H ( X ) = E x ∼ p ( x ) [ − log ⁡ p ( x ) ] = − ∫ p ( x ) log ⁡ p ( x ) d x H(p)=H(X)=\mathrm{E}_{x \sim p(x)}[-\log p(x)]=-\int p(x) \log p(x) d x H(p)=H(X)=Ex∼p(x)​[−logp(x)]=−∫p(x)logp(x)dx
KL散度(相对熵): 表示两个概率分布之间差异的非对称性度量,相对熵等价于两个概率分布的信息熵。
D K L ( p ∥ q ) = ∑ i = 1 N [ p ( x i ) log ⁡ p ( x i ) − p ( x i ) log ⁡ q ( x i ) ] D_{K L}(p \| q)=\sum_{i=1}^{N}\left[p\left(x_{i}\right) \log p\left(x_{i}\right)-p\left(x_{i}\right) \log q\left(x_{i}\right)\right] DKL​(p∥q)=i=1∑N​[p(xi​)logp(xi​)−p(xi​)logq(xi​)]

结合以上两个步骤,最终得到软策略迭代算法,但只适用于离散动作和状态空间,想要处理连续的动作和状态空间,接下来引入SAC算法。

3、SAC算法

  • Value Network

    本来根据上面公式,值函数和Q函数是有关系的,因此我们没有必要去估计值函数,但是在实际操作中发现用单独的网络估计值函数可以稳定训练,它的loss是:
    J V ( ψ ) = E s t ∼ D [ 1 2 ( V ψ ( s t ) − E a t ∼ π ϕ [ Q θ ( s t , a t ) − log ⁡ π ϕ ( a t ∣ s t ) ] ) 2 ] J_{V}(\psi)=\mathbb{E}_{\mathbf{s}_{t} \sim \mathcal{D}}\left[\frac{1}{2}\left(V_{\psi}\left(\mathbf{s}_{t}\right)-\mathbb{E}_{\mathbf{a}_{t} \sim \pi_{\phi}}\left[Q_{\theta}\left(\mathbf{s}_{t}, \mathbf{a}_{t}\right)-\log \pi_{\phi}\left(\mathbf{a}_{t} \mid \mathbf{s}_{t}\right)\right]\right)^{2}\right] JV​(ψ)=Est​∼D​[21​(Vψ​(st​)−Eat​∼πϕ​​[Qθ​(st​,at​)−logπϕ​(at​∣st​)])2]

​ 其梯度可以用一个无偏的估计器:
∇ ^ ψ J V ( ψ ) = ∇ ψ V ψ ( s t ) ( V ψ ( s t ) − Q θ ( s t , a t ) + log ⁡ π ϕ ( a t ∣ s t ) ) \hat{\nabla}_{\psi} J_{V}(\psi)=\nabla_{\psi} V_{\psi}\left(\mathbf{s}_{t}\right)\left(V_{\psi}\left(\mathbf{s}_{t}\right)-Q_{\theta}\left(\mathbf{s}_{t}, \mathbf{a}_{t}\right)+\log \pi_{\phi}\left(\mathbf{a}_{t} \mid \mathbf{s}_{t}\right)\right) ∇^ψ​JV​(ψ)=∇ψ​Vψ​(st​)(Vψ​(st​)−Qθ​(st​,at​)+logπϕ​(at​∣st​))
​ 其中的动作是从现在的策略中采样而不是replay buffer。

  • Soft-Q Network

    soft Q函数参数可以通过最小化soft Bellman residual来得到:
    J Q ( θ ) = E ( s t , a t ) ∼ D [ 1 2 ( Q θ ( s t , a t ) − Q ^ ( s t , a t ) ) 2 ] J_{Q}(\theta)=\mathbb{E}_{\left(\mathbf{s}_{t}, \mathbf{a}_{t}\right) \sim \mathcal{D}}\left[\frac{1}{2}\left(Q_{\theta}\left(\mathbf{s}_{t}, \mathbf{a}_{t}\right)-\hat{Q}\left(\mathbf{s}_{t}, \mathbf{a}_{t}\right)\right)^{2}\right] JQ​(θ)=E(st​,at​)∼D​[21​(Qθ​(st​,at​)−Q^​(st​,at​))2]

其中, Q ^ ( s t , a t ) = r ( s t , a t ) + γ E s t + 1 ∼ p [ V ψ ˉ ( s t + 1 ) ] \hat{Q}\left(\mathbf{s}_{t}, \mathbf{a}_{t}\right)=r\left(\mathbf{s}_{t}, \mathbf{a}_{t}\right)+\gamma \mathbb{E}_{\mathbf{s}_{t+1} \sim p}\left[V_{\bar{\psi}}\left(\mathbf{s}_{t+1}\right)\right] Q^​(st​,at​)=r(st​,at​)+γEst+1​∼p​[Vψˉ​​(st+1​)]

其中, V ψ ˉ V_{\bar{\psi}} Vψˉ​​ 是Deep Q Network中的目标值网络(target value network)。Q函数的梯度:
∇ ^ θ J Q ( θ ) = ∇ θ Q θ ( a t , s t ) ( Q θ ( s t , a t ) − r ( s t , a t ) − γ V ψ ˉ ( s t + 1 ) ) \hat{\nabla}_{\theta} J_{Q}(\theta)=\nabla_{\theta} Q_{\theta}\left(\mathbf{a}_{t}, \mathbf{s}_{t}\right)\left(Q_{\theta}\left(\mathbf{s}_{t}, \mathbf{a}_{t}\right)-r\left(\mathbf{s}_{t}, \mathbf{a}_{t}\right)-\gamma V_{\bar{\psi}}\left(\mathbf{s}_{t+1}\right)\right) ∇^θ​JQ​(θ)=∇θ​Qθ​(at​,st​)(Qθ​(st​,at​)−r(st​,at​)−γVψˉ​​(st+1​))

  • Policy Network

    策略参数可以通过最小化KL散度来获得:
    J π ( ϕ ) = E s t ∼ D [ D K L ( π ϕ ( ⋅ ∣ s t ) ∥ exp ⁡ ( Q θ ( s t , ⋅ ) ) Z θ ( s t ) ) ] J_{\pi}(\phi)=\mathbb{E}_{\mathbf{s}_{t} \sim \mathcal{D}}\left[\mathrm{D}_{\mathrm{KL}}\left(\pi_{\phi}\left(\cdot \mid \mathbf{s}_{t}\right) \| \frac{\exp \left(Q_{\theta}\left(\mathbf{s}_{t}, \cdot\right)\right)}{Z_{\theta}\left(\mathbf{s}_{t}\right)}\right)\right] Jπ​(ϕ)=Est​∼D​[DKL​(πϕ​(⋅∣st​)∥Zθ​(st​)exp(Qθ​(st​,⋅))​)]

    这里我们使用 reparameterization trick来采样动作
    a t = f ϕ ( ϵ t ; s t ) \mathbf{a}_{t}=f_{\phi}\left(\epsilon_{t} ; \mathbf{s}_{t}\right) at​=fϕ​(ϵt​;st​)

​ 其中, ϵ t \epsilon_{t} ϵt​ 为高斯分布, f f f是一个关于 ϕ \phi ϕ 的表达式,整理得到:
J π ( ϕ ) = E s t ∼ D , ϵ t ∼ N [ log ⁡ π ϕ ( f ϕ ( ϵ t ; s t ) ∣ s t ) − Q θ ( s t , f ϕ ( ϵ t ; s t ) ) ] J_{\pi}(\phi)=\mathbb{E}_{\mathbf{s}_{t} \sim \mathcal{D}, \epsilon_{t} \sim \mathcal{N}}\left[\log \pi_{\phi}\left(f_{\phi}\left(\epsilon_{t} ; \mathbf{s}_{t}\right) \mid \mathbf{s}_{t}\right)-Q_{\theta}\left(\mathbf{s}_{t}, f_{\phi}\left(\epsilon_{t} ; \mathbf{s}_{t}\right)\right)\right] Jπ​(ϕ)=Est​∼D,ϵt​∼N​[logπϕ​(fϕ​(ϵt​;st​)∣st​)−Qθ​(st​,fϕ​(ϵt​;st​))]

∇ ^ ϕ J π ( ϕ ) = ∇ ϕ log ⁡ π ϕ ( a t ∣ s t ) + ( ∇ a t log ⁡ π ϕ ( a t ∣ s t ) − ∇ a t Q ( s t , a t ) ) ∇ ϕ f ϕ ( ϵ t ; s t ) \begin{aligned} &\hat{\nabla}_{\phi} J_{\pi}(\phi)=\nabla_{\phi} \log \pi_{\phi}\left(\mathbf{a}_{t} \mid \mathbf{s}_{t}\right) \\ &\quad+\left(\nabla_{\mathbf{a}_{t}} \log \pi_{\phi}\left(\mathbf{a}_{t} \mid \mathbf{s}_{t}\right)-\nabla_{\mathbf{a}_{t}} Q\left(\mathbf{s}_{t}, \mathbf{a}_{t}\right)\right) \nabla_{\phi} f_{\phi}\left(\epsilon_{t} ; \mathbf{s}_{t}\right) \end{aligned} ​∇^ϕ​Jπ​(ϕ)=∇ϕ​logπϕ​(at​∣st​)+(∇at​​logπϕ​(at​∣st​)−∇at​​Q(st​,at​))∇ϕ​fϕ​(ϵt​;st​)​

4、第二篇文章改进

前面的SAC中,我们只是人为给定一个固定的temperature α \alpha α 作为entropy的权重,但实际上由于reward的不断变化,采用固定的temperature并不合理,会让整个训练不稳定,因此,有必要能够自动调节这个temperature。当policy探索到新的区域时,最优的action还不清楚,应该调到temperature 去探索更多的空间。当某一个区域已经探索得差不多,最优的action基本确定了,那么这个temperature就可以减小。

构造一个带约束的优化问题,让平均的entropy权重是有限制的,但是在不同的state下entropy的权重是可变的,即
max ⁡ π 0 : T E ρ π [ ∑ t = 0 T r ( s t , a t ) ] s.t.  E ( s t , a t ) ∼ ρ π [ − log ⁡ ( π t ( a t ∣ s t ) ) ] ≥ H ∀ t \max _{\pi_{0: T}} \mathbb{E}_{\rho_{\pi}}\left[\sum_{t=0}^{T} r\left(\mathbf{s}_{t}, \mathbf{a}_{t}\right)\right] \text { s.t. } \mathbb{E}_{\left(\mathbf{s}_{t}, \mathbf{a}_{t}\right) \sim \rho_{\pi}}\left[-\log \left(\pi_{t}\left(\mathbf{a}_{t} \mid \mathbf{s}_{t}\right)\right)\right] \geq \mathcal{H} \forall t π0:T​max​Eρπ​​[t=0∑T​r(st​,at​)] s.t. E(st​,at​)∼ρπ​​[−log(πt​(at​∣st​))]≥H∀t

J ( α ) = E a t ∼ π t [ − α log ⁡ π t ( a t ∣ s t ) − α H ‾ ] J(\alpha)=\mathbb{E}_{\mathbf{a}_{t} \sim \pi_{t}}\left[-\alpha \log \pi_{t}\left(\mathbf{a}_{t} \mid \mathbf{s}_{t}\right)-\alpha \overline{\mathcal{H}}\right] J(α)=Eat​∼πt​​[−αlogπt​(at​∣st​)−αH]

为了更快速稳定的训练,引入了两个Q网络,然后每次选择Q值小的一个作为target Q值。

总结来说:

  1. 去掉了Value Netowrk;
  2. 用两个Q Network;
  3. 将熵的系数 α \alpha α 作为一个变量,在程序中自动调节。

5、代码实现

文章1:

文章2:

更多推荐

深度强化学习算法之SAC算法

本文发布于:2024-02-06 16:47:24,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1750417.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:算法   深度   SAC

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!