当前位置:   article > 正文

软性演员-评论家算法 SAC_软演员评论家算法

软演员评论家算法

 


软性演员-评论家算法 SAC

优势原理

DDPG 的问题在于,训练不稳定、收敛差、依赖超参数、不适应复杂环境。

软性演员-评论家算法 SAC,更稳定,更适应复杂环境。

传统强化学习策略,采用 ε-greedy 贪心策略。

  • 过度利用已知最优策略,老是在同一个地方用同一个策略

  • 忽视对未知状态和未知最优动作的探索,容易忽视复杂环境的动态变化

  • DDPG 每个时刻只给了一个最优策略,这个最优策略很大程度还是之前的经验

软性在这里的意思是,软性选择,用于平滑探索和利用的关系。

比如走迷宫,你有很多选择:向前走、向后走、转向等。

  • 在没有 SAC 的情况下,如果你发现一条看似可行的路线(已知最佳经验和动作),你可能会一直沿着这条路线走,即使它可能不是最佳路径。
  • 有了 SAC,就好比你不仅想尽快找到出路,还想探索迷宫中的每个角落。即使某些路线看起来当前并不是最直接的出路,你也会尝试它们,因为你被鼓励去探索。
  • 当 SAC 算法发现自己在某一区域过于确定或重复同样的路径时,它会因为想要增加熵(探索不确定性)而尝试新的动作,比如尝试之前没有走过的道路。
  • 随着时间的推移,SAC 不仅找到了出路,而且可能发现了多条路径,因为它在探索过程中学到了迷宫的更多信息。

SAC 算法通过鼓励探索(即不总是走看起来最优的路径)来找到多个好的解决方案,并且它比其他算法更不容易陷入局部最优解,因为它总是在寻找新的可能性。

核心优势是,避免过早陷入局部最优解,至少也要找一个更大的局部最优解。

SAC 软性选择是基于熵,熵的作用是为了衡量不确性程度。

这意味着在评估一个动作的价值时,不仅考虑了奖励,还考虑了执行该动作后策略的熵。

目标不仅是最大化奖励,还要最大化熵,这意味着算法被鼓励探索更多不同的动作,即使它们不是当前看起来最优的。

最大熵强化学习不仅仅关注立即的奖励最大化,还关注保持策略的多样性和随机性,以促进更全面的探索。

这张图描绘的是软性演员-评论家算法(Soft Actor-Critic, SAC)中用到的一个关键概念,即多模态Q函数。

在这个图中,我们可以看到两个子图,3a和3b,它们展示了策略(π)和Q函数之间的关系。

图3a

  • π(at|st):这表示在给定状态st时,动作at的概率分布,这里假设为正态分布N(μ(st), Σ),其中μ(st)是均值函数,Σ是协方差矩阵。
  • Q(st, at):这是Q函数在特定状态st和动作at下的值。Q函数衡量采取某动作并遵循当前策略预期可以获得的累积回报。

图3b

  • π(at|st) ∝ exp(Q(st, at)):这里显示了SAC中采用的最大熵策略,其中策略(即概率分布)与exp(Q(st, at))成正比。这意味着采取某个动作的概率不仅与预期回报(Q值)相关,还与该动作的熵有关。熵较高的动作即使预期回报不是最大,也可能被选中,这样鼓励了探索。
  • Q(st, at):同样表示Q函数的值,但在这里,它与策略结合来形成一个调整后的策略分布。

这两个子图展示了如何从Q函数构建一个随机策略,这个策略不仅考虑最大化回报,还鼓励策略的多样性(探索)。在图3a中,我们只看到了策略的原始形态,而在图3b中,我们看到了这个策略如何通过与Q函数结合来调整,以包含探索性。

在SAC算法中,这种通过最大化熵来鼓励探索的策略非常重要,有助于避免局部最优解并找到更鲁棒的长期解决方案。

通过这种方式,SAC能够在学习过程中平衡探索和利用,提高智能体在复杂环境中的表现。

软性选择

在某些环境中,可能存在多种不同的策略都能获得高回报,这导致 动作价值 Q 函数 变得多模态(即有多个高值峰)。

传统的强化学习算法可能只能收敛到其中一个模态,也就是一个局部最优解,而忽略了其他可能同样好或者更好的策略。

为了解决这个问题,可以使用一种称为基于能量的策略来让策略更好地适应Q函数的多模态特性。

基于能量的策略通常采用玻尔兹曼分布的形式,这是一个概率分布,它根据能量函数给出了各个状态的概率。

玻尔兹曼分布(x轴是能量大小):

让策略收敛到 Q 函数 的玻尔兹曼分布形式,这个形式的分布就可以拟合上图的多个解。

玻尔兹曼分布可以用来选择动作,其中动作的选择概率与其Q值的指数成正比,公式如下:

  • [ π ( a ∣ s ) = exp ⁡ ( Q ( s , a ) / τ ) ∑ b exp ⁡ ( Q ( s , b ) / τ ) ] [ \pi(a|s) = \frac{\exp(Q(s,a)/\tau)}{\sum_{b}\exp(Q(s,b)/\tau)} ] [π(as)=bexp(Q(s,b)/τ)exp(Q(s,a)/τ)]

这里的 τ \tau τ 称为温度参数,它控制了策略的探索程度。

  • τ \tau τ 较大时,策略倾向于探索

  • τ \tau τ 较小时,策略倾向于利用

这种基于玻尔兹曼分布的策略平衡了探索和利用,有助于智能体在复杂环境中找到长期有效的解决方案。

理论上,当智能体的学习收敛时,它的策略会反映出Q函数的结构,优先选择预期回报高的动作,同时保持对其他可能性的探索,这样做可以避免局部最优解,并适应环境的变化。

模型结构

V网络(Value Network)

  • 输入嵌入层(Input Embedder):对输入的观察数据进行预处理。
  • 中间件(Middleware):通常是一系列的全连接层或其他类型的网络层,用于提取特征。
  • 输出层(Dense):输出状态值(State Value),它代表了在给定状态下,遵循当前策略所能获得的预期回报。

策略网络(Policy Network)

  • 输入嵌入层(Input Embedder):与V网络相同,对输入进行预处理。
  • 中间件(Middleware):提取特征。
  • 策略均值输出层(Dense, Policy Mean):预测给定状态下每个动作的均值。
  • 策略标准差输出层(Dense, Log Policy Std):预测动作的对数标准差,通常会通过指数函数(Exponentiate)进行处理以确保标准差是正的。
  • SAC头(SAC Head):结合均值和标准差定义了一个高斯分布,并从中采样动作(Sampled Actions)作为策略输出。

Q网络(Q Networks)

  • 输入嵌入层(Input Embedder):分别对状态和动作进行预处理。
  • 中间件(Middleware):提取特征。
  • 输出层(Dense):存在两个Q网络,每个都输出一个状态-动作对的价值(State Action Value 1 & 2),这是为了减少估计偏差并提高稳定性。

这种结构允许SAC在做出决策时考虑到策略的多样性,并通过两个Q网络来减少值函数的过估计。

整个架构的目的是训练一个智能体,使其能在复杂环境中作出决策,同时通过熵正则化来鼓励探索未知的行为。

目标函数

Q网络更新损失函数:

L Q ( ϕ ) = E ( s i , q i , r i , s i + 1 ) ∼ D , a i + 1 ∼ π θ ( ⋅ ∣ s i + 1 ) [ 1 2 ( Q ϕ ( s i , a i ) − ( r i + γ ( min ⁡ j = 1 , 2 Q ϕ ˙ j ( s t + 1 , a t + 1 ) − α log ⁡ π ( a t + 1 ∣ s t + 1 ) ⏞ Entropy   Iterm ) 2 ] L_Q(\phi)=\mathbb{E}_{(s_i,q_i,r_i,s_{i+1})\sim\mathcal{D},a_{i+1}\sim\pi_{\theta}(\cdot|s_{i+1})}\left[\frac{1}{2}\left(Q_{\phi}(s_i,a_i)-(r_i+\gamma(\min_{j=1,2}Q_{\dot{\phi}_j}(s_{t+1},a_{t+1})\overbrace{-\alpha\log\pi(a_{t+1}|s_{t+1})}^{\textbf{Entropy Iterm}} \right ) ^ 2 \right ] LQ(ϕ)=E(si,qi,ri,si+1)D,ai+1πθ(si+1) 21 Qϕ(si,ai)(ri+γ(minj=1,2Qϕ˙j(st+1,at+1)αlogπ(at+1st+1) Entropy Iterm 2

  • L Q ( ϕ ) L_Q(\phi) LQ(ϕ): 这是Q函数的损失函数,用来训练Q网络的参数 ϕ \phi ϕ
  • E ( s i , a i , r i , s i + 1 ) ∼ D \mathbb{E}_{(s_i, a_i, r_i, s_{i+1}) \sim \mathcal{D}} E(si,ai,ri,si+1)D: 这个期望表示对经验回放缓冲区 D \mathcal{D} D中的样本进行平均,包括状态 s i s_i si、动作 a i a_i ai、奖励 r i r_i ri和下一个状态 s i + 1 s_{i+1} si+1
  • a i + 1 ∼ π θ ( ⋅ ∣ s i + 1 ) a_{i+1} \sim \pi_{\theta}(\cdot|s_{i+1}) ai+1πθ(si+1): 表示根据当前策略 π θ \pi_{\theta} πθ选择下一个动作 a i + 1 a_{i+1} ai+1
  • Q ϕ ( s i , a i ) Q_{\phi}(s_i, a_i) Qϕ(si,ai): Q网络使用参数 ϕ \phi ϕ来估计在状态 s i s_i si下采取动作 a i a_i ai的价值。
  • r i + γ ( min ⁡ j = 1 , 2 Q ϕ ˙ j ( s i + 1 , a i + 1 ) − α log ⁡ π ( a i + 1 ∣ s i + 1 ) ) r_i + \gamma (\min_{j=1,2}Q_{\dot{\phi}_j}(s_{i+1}, a_{i+1}) - \alpha \log \pi(a_{i+1}|s_{i+1})) ri+γ(minj=1,2Qϕ˙j(si+1,ai+1)αlogπ(ai+1si+1)): 这部分计算目标Q值,包括立即奖励 r i r_i ri加上对下一个状态-动作对的Q值的折现(考虑两个Q网络中较小的那个,避免过大偏差估计),再减去与策略熵相关的项,其中 γ \gamma γ是折现因子, α \alpha α是熵正则化的权重。
  • α log ⁡ π ( a i + 1 ∣ s i + 1 ) \alpha \log \pi(a_{i+1}|s_{i+1}) αlogπ(ai+1si+1): 这是熵正则化项, α \alpha α表示其权重。熵项鼓励策略进行探索,防止过早收敛到局部最优策略。

公式的原意

  • Q函数部分:不仅基于当前能得到多少分数来建议你的动作,而且还会考虑到未来可能得到的分数
  • 最大熵部分:让游戏更有趣、多样性(探索),这种考虑未来的方式称为折现,意味着未来的分数在今天看来不那么值钱。

策略网络更新损失函数:

L π ( θ ) = E s t ∼ D , a t ∼ π θ [ α log ⁡ ( π θ ( a t ∣ s t ) ) − Q ϕ ( s t , a t ) ] L_{\pi}(\theta)=\mathbb{E}_{s_{t}\sim\mathcal{D},a_{t}\sim\pi_{\theta}}[\alpha\log(\pi_{\theta}(a_{t}|s_{t}))-Q_{\phi}(s_{t},a_{t})] Lπ(θ)=EstD,atπθ[αlog(πθ(atst))Qϕ(st,at)]

  • L π ( θ ) L_{\pi}(\theta) Lπ(θ): 这是策略网络的损失函数,用于更新策略网络的参数 θ \theta θ
  • E s t ∼ D , a t ∼ π θ \mathbb{E}_{s_t \sim \mathcal{D}, a_t \sim \pi_{\theta}} EstD,atπθ: 这表示对经验回放缓冲区 D \mathcal{D} D中的状态s_t以及根据当前策略 π θ \pi_{\theta} πθ采取的动作 a t a_t at进行平均。
  • α log ⁡ ( π θ ( a t ∣ s t ) ) \alpha \log(\pi_{\theta}(a_t|s_t)) αlog(πθ(atst)): 这是策略熵的加权值, α \alpha α是熵的权重系数。这个熵项鼓励策略多样性,即鼓励策略产生更随机的动作。
  • Q ϕ ( s t , a t ) Q_{\phi}(s_t, a_t) Qϕ(st,at): 这是Q网络评估在状态s_t下采取动作 a t a_t at的价值。

上面提到的两个公式共同工作以优化智能体的行为,但各自负责不同的部分:

  1. Q函数的损失函数 L Q ( ϕ ) L_Q(\phi) LQ(ϕ)

    • 负责更新Q网络,即学习评估在给定状态和动作下预期回报的函数。
    • 通过比较实际的回报(包括立即奖励和折现后的未来奖励)和Q网络的预测来调整网络,以准确估计每个动作的价值。
    • 该过程涉及考虑策略的熵(探索性),确保智能体在追求高回报的同时,也会考虑到策略的多样性。
  2. 策略网络的损失函数 L π ( θ ) L_{\pi}(\theta) Lπ(θ)

    • 负责优化策略网络,即决定智能体在每个状态下应采取的最佳动作。
    • 强调在保持行动的高熵(即多样性和探索性)的同时,选择预期回报最大化的动作。
    • 策略网络通过最小化该损失函数来学习如何在探索和利用之间取得平衡。

L Q ( ϕ ) L_Q(\phi) LQ(ϕ)确保了对动作价值的准确估计,而 L π ( θ ) L_{\pi}(\theta) Lπ(θ)使智能体能够在探索多样动作的同时做出回报最大化的决策。两者共同作用使得智能体在复杂环境中能有效地学习和适应。

重参数化

SAC 策略通常由一个神经网络表示,该网络输出动作的概率分布参数,如高斯分布的均值和方差。

但采样是一个随机过程,是不可导的。

那神经网络就不能用链式法则,计算梯度。

  • 一方面,我们希望有随机性(能探索更多新动作,而不是一直用已知动作)
  • 另一方面,神经网络必须可导

比如控制一个机器人,你可以按一个按钮来让机器人随机选择一个动作,比如跳跃、蹲下、行走、奔跑。

这个随机选择的过程就像掷骰子,你无法预测下一次会是什么,也就是说,从掷骰子这个动作本身,你无法学到如何掷出你想要的数字。

在 SAC 算法中,如果动作选择像掷骰子一样随机,那它就无法直接从这个随机过程中学习,因为随机过程是无法预测和控制的。

重参数化技巧就像是换了一个透明的骰子,你可以看到里面的结构和机制,这样就能预测和控制骰子的结果。

不是直接让机器人随机选择动作,而是让机器人从一个固定的噪声源(就像是一个可预测的骰子)中“计算”出它的动作。

这样一来,即使动作看起来是随机的,但实际上是由一个可以学习和优化的过程决定的。

这使得训练过程既能包含随机性(对探索很重要),又能进行梯度下降优化(对学习很重要)。

  • L π ( θ ) = E s t ∼ D , a t ∼ π θ [ α log ⁡ ( π θ ( a t ∣ s t ) ) − min ⁡ j = 1 , 2 Q ϕ j ( s t , f θ ( ϵ t ; s t ) ⏟ reparameterization ) ] L_{\pi}(\theta)=\mathbb{E}_{s_{t}\sim\mathcal{D},a_{t}\sim\pi_{\theta}}[\alpha\log(\pi_{\theta}(a_{t}|s_{t}))-\min_{j=1,2}Q_{\phi_{j}}(s_{t},\underbrace{f_{\theta}(\epsilon_{t};s_{t})}_{\text{reparameterization}})] Lπ(θ)=EstD,atπθ[αlog(πθ(atst))minj=1,2Qϕj(st,reparameterization fθ(ϵt;st))]

传统采样是从高斯分布的方差和均值中,抽一个具体的数值。

重参数化:让高斯分布采样,变成一个确定性变换。

熵正则化

在 SAC 算法中,选取熵的系数非常重要。

不同状态需要不同大小的熵。

在未知最优动作时,熵要大一些,越明确最优动作,熵要小一些。

为了让 SAC 自动调整熵,就把目标函数变成一个带约束的优化问题:

  • max ⁡ π E π [ ∑ t r ( s t , a t ) ] s . t .   E ( s t , a t ) ∼ ρ π [ − log ⁡ ( π t ( a t ∣ s t ) ) ] ≥ H 0 \operatorname*{max}_{\pi}\mathbb{E}_{\pi}\left[\sum_{t}r(s_{t},a_{t})\right]\mathrm{s.t.~}\mathbb{E}_{(s_{t},a_{t})\sim\rho_{\pi}}[-\log(\pi_{t}(a_{t}|s_{t}))]\geq\mathcal{H}_{0} maxπEπ[tr(st,at)]s.t. E(st,at)ρπ[log(πt(atst))]H0

化简:

  • L ( α ) = E s t ∼ D , a t ∼ π ( ⋅ ∣ s t ) [ − α log ⁡ π ( a t ∣ s t ) − α H 0 ] L(\alpha)=\mathbb{E}_{s_t\sim\mathcal{D},a_t\sim\pi(\cdot|s_t)}[-\alpha\log\pi(a_t|s_t)-\alpha\mathcal{H}_0] L(α)=EstD,atπ(st)[αlogπ(atst)αH0]

 


算法步骤

软策略演算法(Soft Actor-Critic,简称SAC)是一种基于演员-评论家框架的深度强化学习算法。它的核心目标是在探索和利用之间找到平衡,通过引入熵作为奖励的一部分来鼓励探索。这里我将尝试通俗易懂地介绍SAC算法的主要步骤和推导过程。

1. 熵加权奖励

在SAC中,策略的目标是最大化预期奖励和熵。熵是一个衡量策略随机性的度量,高熵意味着高随机性。这导致算法在学习期间更多地探索。

2. 软值函数更新

SAC算法使用两种值函数:软状态值函数 和软动作值函数 。软值函数的更新规则通过Bellman方程来定义,但增加了熵项。

3. 策略改进

在SAC中,策略是通过最大化软Q函数来改进的。这意味着策略不仅试图选择高奖励的动作,还试图选择熵高的动作。策略通常使用神经网络来参数化,并通过梯度上升来更新。

4. 双重Q网络和目标网络

为了稳定学习,SAC通常使用双重Q网络来减少过度估计,并使用目标网络来提供稳定的目标。这些技巧类似于DQN算法中的应用。

5. 自适应熵系数调整

SAC算法通常包括一种机制来自适应地调整熵系数 α \alpha α,以便在不同的学习阶段保持合适的探索级别。

6. 算法流程

  1. 初始化网络:策略网络 π \pi π,两个Q网络 Q 1 , Q 2 Q_1, Q_2 Q1,Q2 和它们的目标网络。
  2. 采集数据:使用当前策略在环境中采集数据。
  3. 更新Q网络:根据软Bellman方程更新Q网络。
  4. 更新策略网络:通过最大化软Q值更新策略网络。
  5. 调整熵系数:如果需要,调整熵系数 α \alpha α
  6. 更新目标网络:定期用Q网络的权重来更新目标网络。

 


代码实现

论文作者:https://github.com/rail-berkeley/softlearning

OpenAI:https://github.com/openai/spinningup

 


声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/334925
推荐阅读
相关标签
  

闽ICP备14008679号