Soft Actor-Critic
SAC跟soft Q Learning一样在目标函数中引入熵,其目的是希望actor估计得动作在能够完成任务的基础上尽可能随机化。使得actor可以探索更多可能性,以达到近似最优(原文是near-optimal)的多种选择。假设有多个动作差不多一样好,policy应该设置每个动作有差不多一样的概率来选择他们。
本文的关键点:
-
Off-policy方式更新,可以使用以前采样数据。
-
最大化熵可以提高稳定性及探索能力。
算法更新过程为policy iteration:评估policy->计算这个policy的value(使用 value function)->提升policy,使用value function来得到更好的policy(意思是说找到一个新的policy,使其value更大)
目标函数:
在原始的目标函数基础上增加了熵的部分,α控制熵的权重。
这个目标函数有几点好处:
-
激励policy更广阔地探索(熵项),并且放弃无意义没前途的行为(reward项)
-
policy的行为是near-optimal的,意思是多个行为都可以达到optimal。如果多个行为同样好,应该设置多个行为一样的概率。
-
可以提高学习速度。
本文是第一篇在actor-critic上使用最大化熵的RL算法。
对于一个固定的policy,其soft Q-value可以通过迭代来优化,基于soft Q的贝尔曼方程:
其中:
迭代上面两个公式去跟新Q跟V,可以使Q跟V收敛到policy π的soft Q-value。
然后利用Q来更新policy π,期望新的π在某个state下的动作概率分布能够符合Q值的分布。通过KL散度来优化:
右边的Z是所有动作Q值的exp的和,右面的公式就是把动作的Q值概率化,类似softmax。最小化KL散度,期望新的π’的动作分布接近Q值的动作概率分布。这里的,是假设π被限制在某个集合中(假设这个集合里只有几个policy可以选,那就选一个可以使上面KL最小的)。
上面三个公式就是soft policy iteration的更新公式,迭代更新Q、V与policy直到收敛。接下来是将其改到actor-critic上。分别将Q、V与policy参数化成、、,下角标是network的参数。其中policy输出动作的高斯分布的均值与方差。其中V是可以由Q推导出来的(公式3),但实际情况单独训练个V能够让训练过程更稳定。
soft value function通过下面mse目标函数更新:
梯度为:
at用当前policy产生。soft Q function优化下面公式:
V是一个target network。policy可以由下面公式更新:
因为policy是network可以反向求导,所以把上面公式改一下,针对action进行重参数化采样,改成利用采样的方式如下:
KL散度的公式为:
写成期望的形式:
公式(10)就是对action采样,用期望来求KL散度,其中,属于某种分布,假设高斯分布,相当于从高斯分布采样来得到at,把随机参数都拿出来就得到公式(12)。
policy的梯度:
总体SAC流程:
spinningup上的伪代码:
与Soft Q Learning的区别
SAC与SQL是同一个作者写的,两个算法也有很多相似的地方,SAC可以看做是SQL的增强版本。抛开一些trick上的问题(例如SAC使用两个Q),仅从关键的公式上比较两个算法的不同点。
-
两个算法的总目标函数是相同的,都是在reward上加上了带权重的熵项。
-
两个算法都是先更新V再更新Q。更新V的部分是不一样的,SQL中通过下式直接计算V:
这个公式的q(a)就是当前的actor,SQL利用actor采样M个a,然后用上式计算Vsoft(使用target Q),是采样后直接计算出来。上式将log乘进去展开后便与SAC公式(5)中Vφ的target相同,在SAC中,V是个参数化的network,是训练出来的,其target与SQL中计算的Vsoft相同。
- 在有了V之后,Q的更新是相同的,Q函数的target使用target V函数计算,公式相同。
- 更新policy时,SQL使用下面公式:
将上面KL右边的exp写成如下:
由SQL的公式(9)可以得到:
与SAC的公式(10)相同。当然SQL的Vsoft是采样后计算出来的,并不与公式(9)完全相等,只是近似意义上差不多。而且实际上这一项在对policy的参数求导里都没有参与,所以并不影响。最后的求导公式是不同的,SQL里是:
其他Trick
- 类似TD3,训练两个Q,在计算value functional的target是,使用q值最小的Q进行计算。
- policy直接输出的mu跟重参数后的pi,经过tanh压缩输出范围。对应的logp通过下式计算:
其中是tanh之前的mu、pi跟std计算的高斯概率(u的概率)。
自适应alpha
目标公式:
其中entroy的target H可以是 -dim(A),可以看到梯度就是与目标target entroy的差值的平均值。alpha可以通过log函数限制为正值,也就是优化log(alpha),再取exp得到alpha。
来源:CSDN
作者:空苍地樱
链接:https://blog.csdn.net/KongCDY/article/details/102627564