美文网首页
深度强化学习(16)Soft Actor-Critic (SAC

深度强化学习(16)Soft Actor-Critic (SAC

作者: 数科每日 | 来源:发表于2022-02-19 12:20 被阅读0次

本文参考 OpenAI Spin


文本介绍的 Soft Actor-Critic (SAC)算法, 它喝上一章介绍的 TD3 算法有些相似。 在阅读本章之前, 最好能够先搞清楚 TD3。

TD3 是一个Deterministic 的算法, 为了引入不确定性,以探索 Policy 空间 TD3使用了高斯噪音。 而 SAC 使用了另外一个办法引入不确定性: 熵。 SAC 吧 熵当做一个对算法的 Regularization, 增加其不确定性,进而增强对 Policy 的探索。

SAC 特点

  • SAC 是 Off Policy 算法
  • 本文介绍的SAC 用于连续型 Action ,但是稍微修改以后,SAC 可用于离散型 Action。

Entropy Regularization

如果对熵(Entropy) 不太清楚, 可以参考一下这篇文章: 信息熵 Entropy --- 不确定性的单位

在SAC 计算 Policy的熵, 写成 H(\pi(\cdot \mid s_{t})) , 意思是, 计算在 s_{t} 时, policy \pi 给出 Action a 的熵。 公式中 \cdot 代表所有的Action。 熵越高,系统中不确定越强,也就是说Policy给出的 Action 不确定性越大。 为了控制这项熵对 Policy 的影响, SAC引入了一个超参数 \alpha 来调控它。 最终 Entropy Regularization 写作:

\alpha H(\pi(\cdot \mid s_{t}))

Policy:
Policy
Q Value:
Q Value
V Value:
V Value
Q 值的Bellman equation:
Bellman equation

SAC 和 TD3的异同

相同点:
  • 都有2个Q Fucntion Q_{\phi_{1}}, Q_{\phi_{2}}
  • 都用 MSBE 优化 Q Fucntion
  • 都用 Target Q Function, 都是用polyak averaging 更新 Q Function
不同点:
  • SAC 用了entropy regularization
  • SAC 用 Current Policy 而不是 Target Policy 来生成 next action
  • SAC 是Stochastic Policy , 他不用加噪声
Q Fucntion

我们尝试用 Bellman equation 来展开 Q Fucntion。 首先吧 Entropy Regularization 的公式带入 Q Fucntion :

Bellman equation For SAC Q Fucntion

因为是期望, 在实际中,我们可以用 Sample 来近似。 那么就可以得到:

Sample for Q Fucntion

其中:

  • s^{\prime} : 下一个时刻的 state, 从Replay Buffer 中拿出来的 Sample (transition) 就有。
  • a^{\prime} : 下一个时刻的 action, 从 Current Policy 中计算得到
  • \tilde{a}^{\prime} : 其实就是 a^{\prime} , 这样写是为了强调 Action 使用 Policy 中sample 出来的。

训练 SAC

Q Fucntion 的 Loss 函数
Loss

其中 y(r, s^{\prime}, d) :

Target
Reparameterization Trick

训练 Policy 的目标是 让期望 Reward 最大, 也就是

Value

SAC 中在计算 Policy Loss 的时候, 使用了 reparameterization trick。在计算 Policy Loss 选择 Action的时候, 并不是直接使用 Policy \mu_{\theta}(s)计算出来的值, 而是使用:

reparameterization trick

这是 OpenAI 的从论文里面拿出来的,有点难理解, 写成伪 Python 代码:

看了几份代码,都有不一样的地方, 推荐大家自己看一下Stable Baseline3 的实现。

stable_baselines3 SAC
torch.nn.Hardtanh

actions = actor(state)

mean = np.mean(actions)
std =  np.std(actions)

normal = Normal(0, 1)
z      = normal.sample()

action = torch.nn.Hardtanh(mean+ std*z, -2, 2)

这样的话, 优化 Policy 要做的事情就是 :

优化Policy

这个很类似 TD3, 不过多加了一个 Entropy, 之所以 Entropy 之前是 - 号, 因为后面的 log 项是负值, 实际是加上 Entropy。

伪代码

image.png

相关文章

网友评论

      本文标题:深度强化学习(16)Soft Actor-Critic (SAC

      本文链接:https://www.haomeiwen.com/subject/onnulrtx.html