美文网首页
SAC算法解析

SAC算法解析

作者: 金色暗影 | 来源:发表于2021-05-30 21:01 被阅读0次

上一篇文章介绍了利用确定策略来解决连续控制问题的DDPG,现在再来介绍一种非常牛的用随机策略来做连续控制的方法Soft Actor Critic (SAC) 。它是一种以off-policy的方式来优化随机策略的算法,它的核心特点是熵正则化, 策略的训练在最大化预期回报和最大化熵之间作了个权衡,在这一点上实际也跟exploration还是exploitation有重大关系,增加熵会导致更多探索,这可以加速之后的学习,还可以防止策略过早地收敛到一个糟糕的局部最优。

熵和随机策略

为了防止有些人不太清楚熵的概念,在正式开始讲SAC之前,我稍微介绍一下熵的概念,以及随机策略的好处。

这里的熵指的是信息熵H(X),它代表一个随机变量X所有可能取值的自信息I(x) 的加权求和:
H(X) = \int_X I(x) dx = \int_X -log(P(x))P(x) dx
正如上式所示,随机变量越是随机,熵就越大。根据热力学第二定律,自然界本身无时无刻不处在于一个熵增的过程之中,即不断走向混沌,而人类的奋斗进程则是对抗自然的熵减过程,他期望变得明确和有序,强化学习的过程也是如此。

一般的,强化学习的目标在于最大化奖励,即最大化动作状态价值Q_\pi(s,a) ,确定策略可以直接选择最大Q_\pia 来行动,但是这样就会使得操作模式是固化的,比如训练一个机械臂去捡东西,实际运动轨迹可以多种多样,而确定策略就会使这个动作变得很单调。 并且如果是在对抗的环境中,这种固定化的操作也容易被对手利用而存在漏洞,而基于策略\pi(a|s) 随机采样的动作 a 来行动就可以有效避免这一点,并且 \pi 的熵越大,也便代表动作越随机,越能在同一情况下做出不同的动作,让对手无法轻易预测,当然在训练时鼓励熵增带来的探索优化的好处也是不言而喻的。

随机策略的Actor Critic方法

actor-critic方法依赖于策略梯度,目标是利用梯度上升来让J(\theta) = \mathbb{E_S}[V_\pi(S)]最大化,因为期望不好求,于是就用蒙特卡洛方法来近似:
\begin{align} \frac {\partial~J(\theta)}{\partial~\theta} =& \mathbb{E} [\frac {\partial~ log ~\pi(A|s;\theta)}{\partial ~ \theta} · Q_\pi(s, A)] \\ \approx & \frac{\partial~log ~\pi(a|s;\theta)}{\partial~\th} · Q_\pi(s, a) \end{align}
假设动作an 维的,那么策略\pi 使用n个高斯分布N(\mu, \sigma) 连乘的方式来近似\pi
\pi(a|s) = \prod^n_{i=1} \frac{1}{\sqrt {2\pi} \sigma_i} · exp(-\frac{(a_i-\mu_i)^2}{2\sigma_i^2})
而其中的\sigma\mu 使用神经网络来近似:

近似高斯分布参数
然后根据得到的n个高斯分布来采样得到行动a, 将其代入上面的\pi, 便可以得到 \frac{\partial~log ~\pi(a|s;\theta)}{\partial~\th} , 现在还剩下 Q_\pi(s, a) 需要求。这个我们使用actor-critic中的critic对应的价值网络q(s, q; w) 来近似,于是整个网络可以表示为:
连续控制问题的随机策略actor-critic
然后用td算法来最小化target-q 和 q的差距来优化价值网络的参数,整个训练过程就算跑通了。

熵正则化

相对于A3C之类的算法只给策略网络增加了熵正则,SAC给价值网络也增加了熵正则,这样鼓励产生更多的状态空间,进一步增加了探索性,使得模型更具鲁棒性。它的做法是通过修改了普通策略学习的目标函数,在每一步的回报中增加了策略的熵,于是目标就变成了
J(\theta) = \mathbb{E} [ V_\pi(S) + \alpha H(\pi (·|S)) ]
于是策略梯度就变成了:
\begin{align} \frac {\partial~J(\theta)}{\partial~\theta} =& \mathbb{E} [\frac {\partial~ log ~\pi(A|s;\theta)}{\partial ~ \theta} · Q_\pi(s, A)] \\ \approx & \frac{Q_\pi(s, a) - \alpha ·log~\pi(a|s; \theta ) - \alpha }{\partial~\th} · log~ \pi(a|s; \theta ) \end{align}
然后训练方式基本和普通的actor-critic架构一致...

处理高估问题

如果只是像上面那样的网络来训练,很明显会存在高估的问题,在最大化Q值时会导致高估,而在通过自身网络来计算TD目标的时候又将高估无限传导进一步导致了高估。因此,为了解决高估问题,我们必须要斩断这种传导以及最大化带来的高估。SAC采用了一个一个类似TD3算法中的clipped double-Q 技巧。


SAC网络结构

如上图所示,SAC使用两个Q网络,并通过取最小的Q值的方式来避免最大化带来的高估,并且使用延迟的价值网络(通过Polyak平均)来缓解bootstraping带来的高估无限传递。具体是这样一个训练过程:

  • 通过策略网络采样动作进行游戏,记录transition(state,action,reward,next_state)到 play buffer中
  • 从play buffer获取训练数据,计算策略网络和两个Q网络,通过td算法来更新Q网络,使用Q值中较小的那个来更新V网络,再得到的V值后再使用梯度上升来更新策略网络,最后再用使用Polyak平均更新目标V网络。

另外,注意一点,上面提到的那个策略熵平衡系数\alpha 可以手工设置超参数,也可以使用自动的方式调整的,工业上倾向于自动的方式。

参考资料

相关文章

  • SAC算法解析

    上一篇文章介绍了利用确定策略来解决连续控制问题的DDPG,现在再来介绍一种非常牛的用随机策略来做连续控制的方法So...

  • SAC

    SAC:Soft Actor-Critic原文:《Soft Actor-Critic:Off-Policy Max...

  • pandas SAC机制使用案例总结

    SAC介绍:pandas非常实用的SAC机制,SAC指的是分组操作中的Split-Apply-Combine 3个...

  • 1.6 地球物理软件的安装

    相关软件 参考: GMT参考手册 GMT4 SAC学习笔记(一)——SAC安装 1.SAC的安装 1.1 下载软件...

  • 学习资料汇总

    GeoHash核心原理解析 GeoHash算法学习讲解、解析及原理分析

  • 算法 | 解析算法

    【算法思想】 找出问题的条件与结果之间的数学表达式,再通过表达式的计算来实现问题求解。 【算法实例】 输入已知三角...

  • 共识算法:Raft

    共识算法:RaftRaft 官网Raft 原理动画 (推荐看看Raft 算法解析图片来源

  • sac_2045

    周六花时间把sac_2045看了,不喜欢其3D效果,虽然看久了习惯了但对比起来还是不太喜欢,除此之外我觉得还不错,...

  • LRU Cache理解

    LRU Cache 1. 概念解析,LRU Cache算法 Lru Cache算法就是Least Recently...

  • Ubuntu 20.04 安装64位SAC,提示缺少libncu

    解压sac压缩包 设置环境变量 运行sac,报错: 解决方法: 参考: https://blog.csdn.net...

网友评论

      本文标题:SAC算法解析

      本文链接:https://www.haomeiwen.com/subject/tnipsltx.html