SAC算法解析

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

熵和随机策略

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

这里的熵指的是信息熵,它代表一个随机变量所有可能取值的自信息 的加权求和:

正如上式所示,随机变量越是随机,熵就越大。根据热力学第二定律,自然界本身无时无刻不处在于一个熵增的过程之中,即不断走向混沌,而人类的奋斗进程则是对抗自然的熵减过程,他期望变得明确和有序,强化学习的过程也是如此。

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

随机策略的Actor Critic方法

actor-critic方法依赖于策略梯度,目标是利用梯度上升来让最大化,因为期望不好求,于是就用蒙特卡洛方法来近似:
\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}
假设动作 是 维的,那么策略 使用个高斯分布 连乘的方式来近似 :

而其中的 和 使用神经网络来近似:

近似高斯分布参数

然后根据得到的 个高斯分布来采样得到行动 , 将其代入上面的 , 便可以得到 , 现在还剩下 需要求。这个我们使用actor-critic中的critic对应的价值网络 来近似,于是整个网络可以表示为:
连续控制问题的随机策略actor-critic

然后用td算法来最小化target-q 和 q的差距来优化价值网络的参数,整个训练过程就算跑通了。

熵正则化

相对于A3C之类的算法只给策略网络增加了熵正则,SAC给价值网络也增加了熵正则,这样鼓励产生更多的状态空间,进一步增加了探索性,使得模型更具鲁棒性。它的做法是通过修改了普通策略学习的目标函数,在每一步的回报中增加了策略的熵,于是目标就变成了

于是策略梯度就变成了:
\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网络。

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

参考资料

  • Soft Actor-Critic
  • Soft Actor-Critic: Off-Policy Maximum Entropy Deep Reinforcement Learning with a Stochastic Actor, Haarnoja et al, 2018
  • Soft Actor-Critic Algorithms and Applications, Haarnoja et al, 2018
  • Learning to Walk via Deep Reinforcement Learning, Haarnoja et al, 2018

你可能感兴趣的:(SAC算法解析)