18年的SAC算法,这篇论文读了一遍,在看openai的spinup的时候,回来再读一遍,结合两者,提出一些要点。
首先要指出现在存在的问题:
1:现在多数model free的算法需要的样本sample的复杂度过高。
2:然后就是需要大强度调参数,参数对performance影响很大。
对于on policy的算法,比如TRPO,PPO,A3C,都存在样本sample的巨大复杂度,并且会随着人物复杂度的提高而提高
对于off policy的算法,虽然可以use past exp,但是高维空间与nn的非线性拟合以及off policy的结合使得算法的变得更加unstability和难以convergence,在连续的空间中更加严重。像DDPG虽然样本效率很高,但是他的超参数和不稳定性使得他难以使用。
所以这篇文章的目的就是为了找出一个能在连续状态和动作空间下既 smaple effective,又stable的算法。
文章提到以前有过带有最大熵的算法:
第一个是on policy的一个算法,缺点显而易见
另一个是off policy的算法 ,但是在连续空间里需要十分复杂的推理过程。
SAC是基于AC的算法,也是基于SQ的算法。然后变种。(这篇文章里还提到了TD3,下篇博客,我把TD3的论文写一下)
SAC三大要素:带有policy和value NN的AC架构
一个off policy架构reuse past exp
最大熵保持稳定性与探索
SAC :
Our method instead combines off-policy actor-critic training with a stochastic actor, and further aims to maximize the entropy of this actor with an entropy maximization objective
直接给出修改后的expected sum of reward的公式:
(policy iteration formulation:alternates between policy evaluation --computing the value function for a policy and
policy improvement using the value function to obtain a better policy)
首先介绍的是soft policy Evaluation,然后给出公式:
以及
以上公式都是显而易见的结论
随后给出lemma1:详细证明略
随后给出了策略提升公式(我对这个公式到现在还是不是很了解,有了解的可以解释一下)
于是就有了lemma2:
但是文章里给出了,如果使用这两个步骤:策略估计与策略提升来达到收敛的话,需要很大的计算量,因此
拟合解决了这个问题。
于是就提出了三个网络,两个拟合Q(我怀疑这个是受TD3的影响),一个拟合V,一个拟合Policy
,,
下面给出上面几个函数的loss的公式:
Vaule NN的:
Q NN的:
最后是策略的:
因为就说使用了重参数技巧,改写了上面的公式:这个我不大理解
这里面还加入了noise:(服从高斯分布或者其他)。
这就是SAC论文的表述,我对论文里一些证明还存在一些疑惑,因为阅读的论文有限,导致一些引用结论无法直接利用。
不过最大的疑惑还是在policy提升的公式那里。
spinningup对重参数这一部分的解释,
至于使用tanh是为了将无界的高斯动作分布,转化为有界限的【-1,1】之间。原文解释:
再来说一下openai的spinup的阐述:
他的阐述比较精炼,是一个深度的总结。公式也很相似,下面贴上原文:
最后说一下代码:
伪代码如下:
SAC原文的代码,里面对policy的初始化模型包括了GMM,Guassion,Latent space Dis(第一个和第三个我还是第一次见,尤其是第三个,于是特意找了以下论文,看看如何使用,会在以后的文章中讲到)
对比了以下两者代码,原文代码里有许多许多的小技巧,在论文中没有提到。
相比之下spinningup关键地方与原文处理一模一样,代码量相对少很多。
我列举一下不同点:
actor里面提供policy KL loss的重参数与没有重参数的版本:(我对这两个还是有点迷惑)
重参数版本与spinningup完全相同,未重参数的版本,如下:
这里的蓝色部分就是相比于重参数版本多出的部分。(加上了一个当前状态的value -先验动作概率)
这一部分在论文中也没有提到(或者我没找到)
同时policy loss 还加入了一个L1正则项目。
value function的loss还加上了一个:
先验概率,我对这个先验概率一致表示很不理解。有空的话,我去请教一下别人,有人知道也可以告知一下
先验概率得到的方法,也就是说是normal的时候才有效。
Critic的两个Q完全相同。
总结一下,原文章的policy的KL公式我没明白他的出处,随后对他进行的重参数的,我也不太明白。如果有知道可以提醒以下。
再然后就是那个动作的先验概率,之前没遇到过,有知道的可以提示一波。