软性演员-评论家算法 SAC

发布时间:2024年01月03日

?


软性演员-评论家算法 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)=b?exp(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,2?Q?˙?j??(st+1?,at+1?)?αlogπ(at+1?st+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,2?Q?˙?j??(si+1?,ai+1?)?αlogπ(ai+1?si+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+1?si+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π?(θ)=Est?D,at?πθ??[αlog(πθ?(at?st?))?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}} Est?D,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(πθ?(at?st?)): 这是策略熵的加权值, α \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π?(θ)使智能体能够在探索多样动作的同时做出回报最大化的决策。两者共同作用使得智能体在复杂环境中能有效地学习和适应。

重参数化

熵正则化

代码实现

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

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

?


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