SAC、TD3、DDPG

本文不讲理论上的东西,只说实现上的不同。

事实上,如果单从实现来看,SAC和DDPG的差别不大。从 stable-baselines3 看,区别仅仅在于,SAC在训练critic和actor时,多在reward上加了一个熵值,而这也正是SAC的特性来源。

关于什么是熵,可以参见 https://blog.woyou.cool/posts/100/。简单来说,它就是一个值,与事件发生的概率呈负相关关系。因为在reward上加了这个值,也就是说,action发生的概率越小,这个值越大,额外奖励就越多,也就能达到鼓励模型进行探索。当然不仅仅是鼓励探索,本质上还有很多其他的作用,但这里简单先这样认为就够了。

SAC的训练仍然是同DDPG,在每轮训练中,先优化critic的参数,然后基于优化后的critic来优化actor的参数,区别仅仅是reward多了一项。

TD3是DDPG的改进,就像qlearning中引入dqn一样,使用两个critic网络,但是这两个网络独立更新,每次选择q值的时候就从两个网络中选择较小的那个,防止q值被高估。再者,TD3不会像DDPG那样每次迭代都同时更新critic和actor网络,而是critic每次都更新,但隔一段时间才更新actor。另一点就是引入了噪声增加鲁棒性

一些参考:

openAI关于强化学习的教程:https://spinningup.openai.com

openAI给出的各种强化学习基本实现,第三方优化版本 Stable Baselines3:https://github.com/DLR-RM/stable-baselines3/tree/master

Soft Actor-Critic Demystified,这篇文章给出了早期SAC的迭代公式并配有相应pytorch实现,早期的SAC有 Value network、Q network、Policy network 三个网络需要更新,而现在基本只更新 value 和 policy 两个网络:https://towardsdatascience.com/soft-actor-critic-demystified-b8427df61665,这个是他的代码:https://github.com/vaishak2future/sac/blob/master/sac.ipynb

深度解读Soft Actor-Critic 算法:https://zhuanlan.zhihu.com/p/70360272

Leave a Comment