连续动作的强化学习算法——SAC

Soft Actor-Critic

  目前来说,关于连续动作的强化学习算法,经常使用到的就是PPO、DDPG和SAC以及在此基础上的改进算法,这里主要说一下SAC算法。

介绍

  首先SAC算法是基于Off-Policy的,因此会用到Replay Buffer,使用过去的样本经验进行学习,这会使得算法的稳定性和收敛性有一定的困难,特别是在连续的状态和动作空间下。然后是基于Actor-Critic的,同时基于值和策略进行评估,可以实现单步更新。SAC则是在此基础上,要求最大化期望的同时最大化策略分布的熵,以确保策略足够的随机。

算法

  和DDPG不同的是,SAC使用随机的策略做连续控制,核心就是熵的正则化,在最大化预期回报和最大化熵之间找到了一个临界值。熵是表示混乱程度的变量,自然情况下会趋向于混乱,就是一个熵增的过程。
  在这我们可以用 H ( X ) H(X) H(X)来表示信息熵来表示数据信息量的大小,其中 X X X表示一个随机变量所有可能取值的自信息 I ( x ) I(x) I(x)的加权和, P ( x ) P(x) P(x)表示事件 x x x发生的概率:
     H ( X ) = ∫ X I ( x ) d x = − ∫ X l o g ( P ( x ) ) P ( x ) d x H(X) = \int_XI(x)dx = -\int_Xlog(P(x))P(x)dx H(X)=XI(x)dx=Xlog(P(x))P(x)dx

  KL散度(相对熵): 表示两个概率分布之间差异的非对称性度量,相对熵等价于两个概率分布的信息熵。
     D K L ( p ∥ q ) = ∑ i = 1 n [ p ( x i ) l o g p ( x i ) − p ( x i ) l o g q ( x i ) ] D_{KL}(p∥q)=\displaystyle\sum_{i=1}^{n} [p(x_i)logp(x_i )−p(x_i)logq(x_i)] DKL(pq)=i=1n[p(xi)logp(xi)p(xi)logq(xi)]

随机策略

  A-C算法中,利用梯度上升来实现期望的最大化,如果动作 a a a n n n 维的,那么策略 π \pi π 使用 n n n个高斯分布 N ( μ , σ ) N(\mu, \sigma) N(μ,σ) 连乘的方式来近似$\pi& :
     π ( a ∣ s ) = ∏ i = 1 n 1 2 π σ i e − ( a i − μ i ) 2 2 σ i 2 \pi(a|s) = \displaystyle\prod_{i = 1}^n\frac{1}{\sqrt{2\pi\sigma_i}}e^{-\frac{(a_i-\mu_i)^2}{2\sigma_i^2}} π(as)=i=1n2πσi 1e2σi2(aiμi)2
  公式中的 σ \sigma σ μ \mu μ可以用神经网络来近似逼近。
  然后根据得到的 n n n个高斯分布来采样得到行 a a a,将其代入上面的 π \pi π, 便可以得到 ∂ log ⁡ π ( a ∣ s ; θ ) ∂ θ \frac{\partial \log ^{\pi(a|s;\theta)}}{\partial^\theta} θlogπ(as;θ), 现在还剩下 Q π ( s , a ) Q_\pi(s, a) Qπ(s,a) 需要求。这个我们使用actor-critic中的critic对应的价值网络 q ( s , q ; w ) q(s, q; w) q(s,q;w)来近似,然后用时间差分算法来最小化 q t a r g e t q_{target} qtarget q q q的差距来优化价值网络的参数,这就是整个的训练过程。

熵正则化

   SAC中通过实现熵正则化,可以进一步提高探索能力,得到更多的状态空间,在增大熵的同时,保证期望的增加,通过修改了普通策略学习的目标函数,可以在每一步的回报中增加策略的熵,目标如下:
     J ( θ ) = E [ V π ( S ) + α H ( π ( . ∣ S ) ) ] J(\theta)=\mathbb{E}[V_\pi(S)+\alpha H(\pi(.|S))] J(θ)=E[Vπ(S)+αH(π(.S))]
  策略梯度近似如下:
     ∂ J ( θ ) ∂ θ = E [ ∂ l o g π ( A ∣ s ; θ ) ∂ θ ⋅ Q π ( s , A ) ] ≈ Q π ( s , a ) − α ⋅ l o g π ( a ∣ s ; θ ) − α ∂   θ l o g π ( a ∣ s ; θ ) \frac {\partial^{J(\theta)}}{\partial^\theta}=\mathbb{E}[\frac {\partial^log^{\pi(A|s;\theta)}}{\partial^\theta} · Q_\pi(s, A)]\approx \frac{Q_\pi(s, a)-\alpha ·log^{\pi(a|s; \theta ) - \alpha}}{\partial~\theta}log^{\pi(a|s; \theta )} θJ(θ)=E[θlogπ(As;θ)Qπ(s,A)] θQπ(s,a)αlogπ(as;θ)αlogπ(as;θ)

SAC网络

   在SAC中使用到了两个Q网络,并通过取最小的Q值来避免最大化带来的高估,求期望是对下一个状态(来自于replay buffer)和下一个动作(来自于当前策略而不是replay buffer)求期望,(这里的动作需要强调指出,不是从replay buffer采样得到的,而是基于当前策略计算得到的新的action),因此可以使用样本进行近似估算Q值,训练过程如下:
通过策略网络采样动作进行游戏,记录transition(state,action,reward,next_state)到 replay buffer中
从replay buffer获取训练数据,计算策略网络和两个Q网络,通过时间差分算法来更新Q网络,使用Q值中较小的那个来更新V网络,再得到的V值后再使用梯度上升来更新策略网络,最后再用使用梯度下降算法Polyak平均更新目标V网络。

你可能感兴趣的:(强化学习基础,算法,机器学习,深度学习)