SAC
SAC:Soft Actor-Critic
原文:《Soft Actor-Critic:
Off-Policy Maximum Entropy Deep Reinforcement
Learning with a Stochastic Actor》
代码:https://github.com/rail-berkeley/softlearning (原作者实现)
其他代码实现: vitchyr/rlkit、openai/spinningup、hill-a/stable-baselines、pytorch-soft-actor-critic(OAC作者的参考代码)
简介:
SAC属于Continuous State Space、Continuous Action Space领域
而连续领域中最有效的三类方法:
- TRPO,PPO:目标都是在PG算法的优化过程中,使得性能单调上升,并使得上升的幅度尽量大。
- DDPG及其拓展(D4PG,TD3等):DPG的critic用于寻找最优策略(准确度非常影响策略),actor用于优化当前策略,因为需要Q对action求导,所以不适合用于离散动作空间的任务,引入critic可以更加off-poicy;D4PG引入分布式critic,并使用多个actor共同与环境交互;TD3参考了double Q的思想来优化ctitic,延缓actor的更新,并计算critic的优化目标时在action上加一个小扰动使得Q(s,a)函数对a更平滑。
- Soft Q-Learning, Soft Actor-Critic
简单说说PPO
- 在传统的PG算法中引入AC框架,但更接近PG,用于stochastic policy,本身就具有探索能力不需要加扰动,所以critic仅仅是预测状态好坏的工具,影响policy调整的是真正的return,所以不需要求Q(s,a)对a的导数,用V(s)来代替return即可,还便于计算单步决策的Advantage。
- 引入 importance sampling技巧,使PG算法成为可以利用过往数据的off-policy的算法,但实际上严格约束了策略参数的更新速度,更新步伐不能太大,所以学者们认为PPO还是一种on-policy的算法,需保证训练的policy和生成数据的policy一致,对过往policy生成的数据难以再利用,所以sample effciency这个指标比较低(这个指标是衡量RL的重要指标)
- 使用了GAE,batch training,replay buffer 等提高算法性能的技巧
- PPO在OpenAI Five上取得了巨大成功。
SAC
- 出自BAIR和Google Brain,作者Tuomas Haarnoja是Pieter Abbeel和Sergey Levine的学生。这是他们ICML2018工作的扩展。
- SAC宣称是第一个off-policy + actor critic + maximum entropy的RL算法。(最早应该是ACER有结合所有这些概念)
- SAC的基于最大熵强化学习框架MER,他的熵增目标函数包含了策略和来自真实系统的动力学性能,不仅优化最大化期望(第一项),还优化最大化期望的熵(第二项):
- α=0就是传统的预期汇报目标函数
- α>0可以将熵看做策略的先验,或者正则项,或者探索和利用之间的平衡
- 两个网络:一个参数化高斯策略,一个参数化Q函数。
SAC 特点
- (1)Actor-critic框架(用两个网络分别近似policy和value function/Q function)
- (2)Off-policy(提高样本效率)。对标on-policy效率低,对标fully off-policy的DDPG很难应用到高维任务中,同时对超参很敏感难以泛用到大量具体问题也不用玉座AlphaStar。而SAC结合了off-policy和stochastic actor。
- (3)最大化entropy(熵)来保证稳定性和exploration。对标A3C只是把entropy当做正则项
最大化熵强化学习(Maximum Entropy Reinforcement Learning)MERL
- 什么是entropy:SAC中的熵可以理解为混乱度,无序度,随机程度,熵越高就表示越混乱,其包含的信息量就更多。比如硬币正反面概率分别为0.1和0.9,那么结果的确定性高一些,熵就低一些,正反面概率分别为0.5和0.5,那么结果就很不确定,熵就相对较高。引入熵可以让策略(policy)尽可能随机,agent可以更充分地探索状态空间,避免早早落入局部最优。
- 这是一种尝试让预期回报最大化(标准的强化学习目标),同时也让策略熵最大化的框架。熵更高的策略具有更高的随机性,这意味着最大熵强化学习更偏向取得高回报策略中随机性最高的策略。
- 为什么这种方法用在机器人学习中很好呢?最重要的原因是,最大熵优化的策略鲁棒性更高(更稳定):如果策略在训练过程中能够允许高度随机的动作,那么它在测试时候也就更有可能顺利地应对预期之外的扰动。不过更机智的是,最大熵训练不仅可以提高算法对超参数的鲁棒性(稳定性),也可以提高采样效率。
- 引入熵之前,普通RL算法目标:
- 引入熵之后,SAC算法目标:
- α是温度参数,控制优化目标更关注奖励还是熵,好处1:鼓励exploration,好处2:学到near-optimal行为
Energy Based Policy(EBP)
MERL采用了独特的策略模型。为了适应更复杂的任务,MERL中的策略不再是以往的高斯分布形式,而是用基于能量的模型(energy-based model)来表示策略。让EBP与值函数联系起来,设定能量函数
- 基于能量的模型在面对多模态(multimodal)的值函数Q(s,a)时,具有更强的策略表达能力,而一般的高斯分布只能将决策集中在Q值更高的部分,忽略其他次优解。
-
曲线很明显的说明了stochastic policy的重要性,面对多模的(multimodal)的Q function,传统的RL只能收敛到一个选择(左图),而更优的办法是右图,让policy也直接符合Q的分布。
高斯分布策略(左)与基于能量的策略(右)的区别
理论推导思路
- soft policy iteration再tabular情况下的收敛性理论推导:先证明Qk会收敛到policy的soft Q,再证明π_new比π_old有改进,最后证明重复交替使用soft policy ecaluation和soft policy improvement,最终policy会收敛到最优。
- tabular可以收敛,那么使用神经网络去近似 soft Q-function和 policy 也能有比较好的收敛性质。
- 实现思路和EM算法很像,先固定policy去提升Q,再固定Q去优化policy
SAC更新方式
-
soft Q function的更新和普通Q learning的方法一样是更新Bellman残差,只不过V(s)包含了entropy项,有点像 one-step sarsa加了个entropy
Q网络
Policy网络的更新方法是最小化上面提到的KL-散度。
Policy 网络 -
Policy网络输出的是高斯分布的均值和协方差,但只是根据均值和协方差去采样action是不可导的,这里用到一个variational autoencoder里常用的reparameterization trick。简单来说就是不直接根据均值和协方差采样,而是先从一个高斯分布里采样,然后再把采样值乘于协方差再加上均值(如下图)。这样网络就变成可导的了。
reparameterization trick - 所以,近似梯度就是
SAC的自动熵调整(Automating Entropy Adjustment)
- SAC 借鉴了一些前人的trick来提升性能,比如 double Q network, target network。但最重要的一个改进是自动熵调整
- 熵应该在不同的状态下有不一样大小的熵:
(1)比如在最优动作还没确定的状态熵应该比较大
(2)在最优动作已经能确定的状态下熵应该取比较小的值。 - 作者把优化问题构造为一个带约束的优化问题:最大化Returns的同时,保持策略的熵大于一个阈值。用到了拉格朗日乘子法和动态规划来求解最好的温度系数α
- 虽然理论上要精确地解决这个问题需要迭代优化上面提到的带约束优化问题。可是实际中,他们还是通过函数近似和随机梯度下降来近似求解。
SAC的实际算法
- 为了减少policy improvement时的偏差,他们采用了一个常用的trick,两个网络去近似Soft Q-function
- 在优化Actor参数的时候,使用Q值比较小的网络作为Critic来减少偏差和高估
- 温度参数 (也就是上一节优化问题中的拉格朗日乘子),则通过最小化下式求解:
- 神经网络结构图
- SAC同时学习几个网络:
(1)action value Q:采用TD3的double Q方法,选取最小值供V和π使用,减弱高估计
(2)state value V 和 target V,供Q学习使用
(3)policy π:学习分布的高斯参数,实际产出action需要从分布中采样。
https://nervanasystems.github.io/coach/components/agents/policy_optimization/sac.html
SAC总结
- 细究之前,可以认为SAC是RL+熵正则项,让动作更随机,熵再PPO和A3C里都有见过
- 但是SAC有完备的理论作为支撑,加上了熵的L2正则项和不加是两类问题,但理想的基于能量的策略模型依然没有在实际上实现,只能用复杂的方式去近似EBP,最终实际的策略模型还是用的高斯分布式。
SAC表现
- 谷歌在两个任务中对算法进行了评估:1)Ghost Robotics 环境中 Minitaur 四足机器人的行走;2)用一个三指Dynamixel Claw转动阀门。
- 要求:高样本学习,鲁棒性强(遇到扰动也稳定)
参考资料
https://zhuanlan.zhihu.com/p/52526801
https://zhuanlan.zhihu.com/p/85003758
推导细节和实现细节:https://zhuanlan.zhihu.com/p/70360272
https://spinningup.openai.com/en/latest/algorithms/sac.html
SAC实验任务和表现:https://blog.csdn.net/jiawoxuexiqq30294961/article/details/87304961
强化学习算法SAC的学习探究及基于百度PARL的实战(非常简洁):https://www.huaweicloud.com/articles/1d0333fd58123a05695ddcc8b4532c86.html