Soft Actor-Critic(论文笔记)

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优化下面公式:

Soft Actor-Critic(论文笔记)_第1张图片

 V是一个target network。policy可以由下面公式更新:

 因为policy是network可以反向求导,所以把上面公式改一下,针对action进行重参数化采样,改成利用采样的方式如下:

KL散度的公式为:

Soft Actor-Critic(论文笔记)_第2张图片

 写成期望的形式:

 公式(10)就是对action采样,用期望来求KL散度,其中属于某种分布,假设高斯分布,相当于从高斯分布采样来得到at,把随机参数都拿出来就得到公式(12)。

policy的梯度:

Soft Actor-Critic(论文笔记)_第3张图片

 总体SAC流程:

Soft Actor-Critic(论文笔记)_第4张图片

spinningup上的伪代码:

Soft Actor-Critic(论文笔记)_第5张图片

 与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。

你可能感兴趣的:(强化学习,论文阅读)