Soft-Actor-Critic-强化学习算法

Background

SAC算法,它以off-policy方式优化随机策略,从而在随机策略优化和DDPG方式之间建立了桥梁。 它不是TD3的直接后继者,但它包含了裁剪过的double-Q技巧,并且由于SAC策略固有的随机性,它还受益于诸如目标策略平滑之类的东西。

SAC的主要特征是熵正则化entropy regularization。 该策略经过训练,可以最大程度地在预期收益和熵之间进行权衡,熵是策略中随机性的一种度量。 这与探索和利用的权衡关系密切:增加熵会导致更多的探索,从而可以加快以后的学习速度。 它还可以防止策略过早收敛到不良的局部最优值。

Quick Facts

  • SAC是off-policy的
  • Spinningup 版本的SAC仅能用于连续动作空间的环境
  • 对策略更新规则的改变可以使SAC用于处理离散动作空间
  • Spinningup的SAC不能使用并行运算

Key Equations

为了解释“SAC”,我们首先必须介绍熵正则化的强化学习设置。 在熵正则化的RL中,值函数的方程式略有不同。

Entropy-Regularized Reinforcement Learning

熵是一个可以粗略地说出随机变量的随机性的量。 如果对硬币进行加权,使其几乎总是出现正面,那么它的熵就很低。 如果权重均等并且有一半机会出现任一结果,则它具有很高的熵。

x x x为随机变量,服从密度函数 P P P x x x的熵 H H H为: H ( P ) = E x ∼ P [ − log ⁡ P ( x ) ] . H(P) = \underset{x \sim P}E[{-\log P(x)}]. H(P)=xPE[logP(x)].在正则熵的强化学习中,代理在每个时间步都获得与该时间步的策略熵成正比的奖金奖励。 这会将RL问题更改为: π ∗ = arg ⁡ max ⁡ π E τ ∼ π [ ∑ t = 0 ∞ γ t ( R ( s t , a t , s t + 1 ) + α H ( π ( ⋅ ∣ s t ) ) ) ] , \pi^* = \arg \max_{\pi} \underset{\tau \sim \pi}E\bigg[{ \sum_{t=0}^{\infty} \gamma^t \bigg( R(s_t, a_t, s_{t+1}) + \alpha H\left(\pi(\cdot|s_t)\right) \bigg)}\bigg], π=argπmaxτπE[t=0γt(R(st,at,st+1)+αH(π(st)))],其中 α > 0 \alpha>0 α>0是平衡系数。在这里插入图片描述(请注意:我们在这里假定了无限步长的折扣设置,此页面的其余部分中也执行相同的操作。)现在,我们可以在此设置中定义稍有不同的值函数。 V π V^\pi Vπ每个时间步骤的改变都包含熵奖励: V π ( s ) = E τ ∼ π [ ∑ t = 0 ∞ γ t ( R ( s t , a t , s t + 1 ) + α H ( π ( ⋅ ∣ s t ) ) ) ∣ s 0 = s ] V^{\pi}(s) = \underset{\tau \sim \pi}E\bigg[{ \left. \sum_{t=0}^{\infty} \gamma^t \bigg( R(s_t, a_t, s_{t+1}) + \alpha H\left(\pi(\cdot|s_t)\right) \bigg) \right| s_0 = s}\bigg] Vπ(s)=τπE[t=0γt(R(st,at,st+1)+αH(π(st)))s0=s]除了第一次, Q π Q^\pi Qπ的改变也包含熵奖励: Q π ( s , a ) = E τ ∼ π [ ∑ t = 0 ∞ γ t R ( s t , a t , s t + 1 ) + α ∑ t = 1 ∞ γ t H ( π ( ⋅ ∣ s t ) ) ∣ s 0 = s , a 0 = a ] Q^{\pi}(s,a) = \underset{\tau \sim \pi}E\bigg[{ \left. \sum_{t=0}^{\infty} \gamma^t R(s_t, a_t, s_{t+1}) + \alpha \sum_{t=1}^{\infty} \gamma^t H\left(\pi(\cdot|s_t)\right)\right| s_0 = s, a_0 = a}\bigg] Qπ(s,a)=τπE[t=0γtR(st,at,st+1)+αt=1γtH(π(st))s0=s,a0=a]有了这些定义, V π   a n d   Q π V^\pi\ and\ Q^\pi Vπ and Qπ以下面的方式连接: V π ( s ) = E a ∼ π [ Q π ( s , a ) ] + α H ( π ( ⋅ ∣ s ) ) V^{\pi}(s) = \underset{a \sim \pi}E[{Q^{\pi}(s,a)]} + \alpha H\left(\pi(\cdot|s)\right) Vπ(s)=aπE[Qπ(s,a)]+αH(π(s)) Q π Q^\pi Qπ的Bellman方程为: Q π ( s , a ) = E s ′ ∼ P , a ′ ∼ π [ R ( s , a , s ′ ) + γ ( Q π ( s ′ , a ′ ) + α H ( π ( ⋅ ∣ s ′ ) ) ) ] = E s ′ ∼ P [ R ( s , a , s ′ ) + γ V π ( s ′ ) ] . \begin{aligned}Q^{\pi}(s,a) &=\underset{s' \sim P,a' \sim \pi}E\bigg[{R(s,a,s') + \gamma\left(Q^{\pi}(s',a') + \alpha H\left(\pi(\cdot|s')\right) \right)}\bigg] \\ &= \underset{s' \sim P}E\bigg[{R(s,a,s') + \gamma V^{\pi}(s')}\bigg]. \end{aligned} Qπ(s,a)=sP,aπE[R(s,a,s)+γ(Qπ(s,a)+αH(π(s)))]=sPE[R(s,a,s)+γVπ(s)].

我们在熵调整后的设置中设置值函数的方式有些随意,实际上我们可以做得不同(例如,使 Q π Q^\pi Qπ在第一时间步长包括熵奖励)。 关于该主题的论文,定义的选择可能略有不同。

Soft Actor-Critic

SAC同时学习一个策略 π θ \pi_\theta πθ,两个Q-function Q ϕ 1 , Q ϕ 2 Q_{\phi_1},Q_{\phi_2} Qϕ1,Qϕ2,现在有两种SAC的标准版本:一种使用一个固定的熵正则系数 α \alpha α,另一种用一个熵的限制通过在训练过程中正在变化的 α \alpha α.出于简单,Spiningup使用一个固定熵正则的系数,但是一般地实践者更喜欢用限制熵的那个版本.

经过一些时间,SAC算法有些改变,老版本的sac除了Q-functions之外学习一个值函数 V ψ V_{\psi} Vψ;接下来会聚焦于当前版本,即不用额外的值函数.

学习Q.

Q-functions的学习与TD3的相似,但有某些关键地方不同.
相同点:
1.类似TD3, Q-functins都是通过对一个共同目标的回归,用MSBE最小化来学习的.
2.类似TD3,共同的目标使用目标Q-网络计算的,同时目标Q-网络在训练过程中通过polyak averaging Q-网络的参数而得到.
3.类似TD3,共同的目标使用 the clipped doube-Q技巧.
不同点:
1.不同于TD3,目标包含一项从SAC的熵正则项.
2.不同于TD3,下一个状态的动作不是从目标target策略得来的,而是从当前current策略得来的.
3.不同于TD3,它没有明确的目标策略平滑.TD3修炼一个确定性策略,所以它通过加入随机噪声到下一个状态的动作来达到平滑的效果.SAC训练一个随机策略,所以从概率随机性而来的噪声足以获得一个类似的效果.
在我们构建Q-loss之前,讨论一下熵正则的贡献是怎么产生的.我们考虑之前熵正则的 Q π Q^\pi Qπ从循环的Bellman方程开始,用熵定义重写:
Q π ( s , a ) = E s ′ ∼ R , a ′ ∼ π [ R ( s , a , s ′ ) + γ ( Q π ( s ′ , a ′ ) + α H ( π ( ⋅ ∣ s ′ ) ) ) ] = E s ′ ∼ P , a ′ ∼ π [ R ( s , a , s ′ ) + γ ( Q π ( s ′ , a ′ ) − α l o g π ( a ′ ∣ s ′ ) ) ] \begin{aligned}Q^\pi(s,a) &=\underset{s'\sim R,a'\sim\pi}E\bigg[ R(s,a,s')+\gamma\bigg(Q^\pi(s',a')+\alpha H(\pi(\cdot|s'))\bigg)\bigg] \\ & = \underset{s'\sim P,a'\sim\pi}E\bigg[ R(s,a,s')+\gamma\bigg( Q^\pi(s',a')-\alpha log\pi(a'|s')\bigg) \bigg] \end{aligned} Qπ(s,a)=sR,aπE[R(s,a,s)+γ(Qπ(s,a)+αH(π(s)))]=sP,aπE[R(s,a,s)+γ(Qπ(s,a)αlogπ(as))]
RHS是对下一个状态(来自缓冲区)和下一个操作(来自当前current策略,而不是缓冲区)的期望。因为它是一个期望,我们能用样本来近似它: Q π ( s , a ) ≈ r + γ ( Q π ( s ′ , a ~ ′ ) − α l o g π ( a ~ ′ ∣ s ′ ) ) ,    a ~ ′ ∼ π ( ⋅ ∣ s ′ ) . Q^\pi(s,a)\approx r+\gamma(Q^\pi(s',\tilde a')-\alpha log \pi(\tilde a'|s')),\ \ \tilde a'\sim\pi(\cdot|s'). Qπ(s,a)r+γ(Qπ(s,a~)αlogπ(a~s)),  a~π(s).
>用 a ~ ′ \tilde a' a~ 表示下一个动作,而不是 a ′ a' a,即接下来的动作必须从当前策略中重新算出(对比之下, r   和   s ′ r\ 和\ s' r  s是从缓存中得到).

SAC用这种样本对target的近似即对每个Q-function设置MSBE loss,这里唯一还不确定的是使用哪个Q函数来计算样本backup:类似TD3,SAC使用clipped double-Q技巧,以及在两个Q的近似中取最小的Q值.
把这些整合起来,SAC中的Q-网络的损失函数为: L ( ϕ i , D ) = E ( s , a , r , s ′ , d ) ∼ D [ ( Q ϕ i ( s , a ) − y ( r , s ′ , d ) ) 2 ] , L(\phi_i, {\mathcal D}) =\underset{(s,a,r,s',d) \sim {\mathcal D}}{{\mathrm E}}\Bigg[\bigg( Q_{\phi_i}(s,a)-y(r,s',d)\bigg)^2\Bigg], L(ϕi,D)=(s,a,r,s,d)DE[(Qϕi(s,a)y(r,s,d))2],其中目标为: y ( r , s ′ , d ) = r + γ ( 1 − d ) ( m i n j = 1 , 2 Q ϕ t a r g , j ( s ′ , a ~ ′ ) − α l o g π θ ( a ~ ′ ∣ s ′ ) ) ,   a ~ ′ ∼ π θ ( ⋅ ∣ s ′ ) . y(r,s',d)=r+\gamma(1-d)\bigg(\underset{j=1,2}{min}Q_{\phi_{targ,j}}(s',\tilde a')-\alpha log\pi_\theta(\tilde a'|s')\bigg),\ \tilde a'\sim\pi_\theta(\cdot|s'). y(r,s,d)=r+γ(1d)(j=1,2minQϕtarg,j(s,a~)αlogπθ(a~s)), a~πθ(s).

学习策略。

在每个状态中,策略应该以未来回报的期望加上未来熵的期望的最大化去选择动作。即它应最大化 V π ( s ) V^\pi(s) Vπ(s),我们能将其扩展进: V π ( s ) = E a ∼ π [ Q π ( s , a ) + α H ( π ( ⋅ ∣ s ) ) ] = E a ∼ π [ Q π ( s , a ) − α log ⁡ π ( a ∣ s ) ] . \begin{aligned}V^{\pi}(s) &= \underset{a \sim \pi} E[{Q^{\pi}(s,a)} + \alpha H\left(\pi(\cdot|s)\right)] \\ &= \underset{a \sim \pi}E[{Q^{\pi}(s,a) - \alpha \log \pi(a|s)}].\end{aligned} Vπ(s)=aπE[Qπ(s,a)+αH(π(s))]=aπE[Qπ(s,a)αlogπ(as)].我们优化策略的方法利用了重新参数化技巧,其中通过计算状态、策略参数和独立噪声的确定性函数从 π θ ( ⋅ ∣ s ) \pi_\theta(\cdot|s) πθ(s)中抽取样本。 为了说明:按照SAC论文的作者,我们用一个压缩的高斯策略,这意味着根据以下取样: a ~ θ ( s , ξ ) = tanh ⁡ ( μ θ ( s ) + σ θ ( s ) ⊙ ξ ) ,            ξ ∼ N ( 0 , I ) . \tilde{a}_{\theta}(s, \xi) = \tanh\left( \mu_{\theta}(s) + \sigma_{\theta}(s) \odot \xi \right), \;\;\;\;\; \xi \sim \mathcal{N}(0, I). a~θ(s,ξ)=tanh(μθ(s)+σθ(s)ξ),ξN(0,I).

该策略与我们在其他策略优化算法中使用的策略有两个主要区别:
1.压缩函数。 SAC策略中的 tanh可确保将动作限制在有限范围内。 VPG,TRPO和PPO策略中没有此功能。 它还会改变分布:在 tanh 之前,SAC策略像其他算法的策略一样是factored Gaussian,但在 tanh之后却不是。 (不过,您仍然可以以相近的形式计算动作的对数概率:有关详细信息,请参见文章附录。)
2.标准偏差的参数化方式。 在VPG,TRPO和PPO中,我们用与状态无关的参数向量表示log std devs(对数标准差)。 在SAC中,我们将对数标准差表示为神经网络的输出,这意味着它们以复杂的方式依赖状态。 根据我们的经验,具有独立于状态的对数标准差的SAC是无效的。 (您能想到原因吗?或者最好:进行实验以进行验证?)

重新参数化技巧使我们可以将对动作的期望(包含一个痛点:分布取决于策略参数)重写进对噪声的期望(这消除了痛点:现在分布不依赖参数): E a ∼ π θ [ Q π θ ( s , a ) − α log ⁡ π θ ( a ∣ s ) ] = E ξ ∼ N [ Q π θ ( s , a ~ θ ( s , ξ ) ) − α log ⁡ π θ ( a ~ θ ( s , ξ ) ∣ s ) ] E_{a \sim \pi_{\theta}}[{Q^{\pi_{\theta}}(s,a) - \alpha \log \pi_{\theta}(a|s)} ]= E_{\xi \sim \mathcal{N}}[{Q^{\pi_{\theta}}(s,\tilde{a}_{\theta}(s,\xi)) - \alpha \log \pi_{\theta}(\tilde{a}_{\theta}(s,\xi)|s)}] Eaπθ[Qπθ(s,a)αlogπθ(as)]=EξN[Qπθ(s,a~θ(s,ξ))αlogπθ(a~θ(s,ξ)s)]为了得到策略损失,最后一步是我们需要用我们的函数近似器替代 Q π θ Q^{\pi_{\theta}} Qπθ。 与TD3不同(它用 Q ϕ 1 Q_{\phi_1} Qϕ1,即第一个Q近似器),SAC使用 m i n j = 1 , 2 Q ϕ j \underset{j=1,2}{min}{Q_{\phi_j}} j=1,2minQϕj(即两个Q近似中最小的)。 因此,策略的优化根据 max ⁡ θ E s ∼ D , ξ ∼ N [ m i n j = 1 , 2 Q ϕ j ( s , a ~ θ ( s , ξ ) ) − α log ⁡ π θ ( a ~ θ ( s , ξ ) ∣ s ) ] , \max_{\theta} E_{s \sim \mathcal{D} , \xi \sim \mathcal{N}}\bigg[{\underset{j=1,2}{min}{Q_{\phi_j}}(s,\tilde{a}_{\theta}(s,\xi)) - \alpha \log \pi_{\theta}(\tilde{a}_{\theta}(s,\xi)|s)}\bigg], θmaxEsD,ξN[j=1,2minQϕj(s,a~θ(s,ξ))αlogπθ(a~θ(s,ξ)s)],除了min-double-Q技巧,随机性和熵项外,它与DDPG和TD3策略优化几乎相同。

Exploration vs. Exploitation

SAC通过熵正则化训练随机策略,并以on-policy方式进行探索。 熵正则化系数 α \alpha α明确控制探索-利用权衡,较高的 α \alpha α对应于更多的探索,而较低的 α \alpha α对应于更多的利用。 正确的系数(导致学习最稳定/最高奖励的系数)可能因环境而异,可能需要仔细调整。

在测试时,要查看该策略如何充分利用其所学知识,我们将消除随机性,并使用均值动作而不是分布中的一个样本。 这往往会提高原始随机策略的性能。

在训练开始时,我们的SAC使用了一个技巧来改善探索。 对于开始时有固定数量的步骤(使用start_steps关键字参数设置),代理将执行动作,这些动作是从均匀随机分布的有效动作中采样的。 之后,它将恢复为正常的SAC探索。

Pseudocode

在这里插入图片描述## 之前的版本
在这里插入图片描述## 动作离散型

在这里插入图片描述

Documentation

spinup.sac(env_fn, actor_critic=, ac_kwargs={}, seed=0, steps_per_epoch=5000, epochs=100, replay_size=1000000, gamma=0.99, polyak=0.995, lr=0.001, alpha=0.2, batch_size=100, start_steps=10000, max_ep_len=1000, logger_kwargs={}, save_freq=1)

Parameters:

  • env_fn – A function which creates a copy of the environment. The environment must satisfy the OpenAI Gym API.
  • actor_critic – A function which takes in placeholder symbols for state, x_ph, and action, a_ph, and returns the main outputs from the agent’s Tensorflow computation graph:在这里插入图片描述
  • ac_kwargs (dict) – Any kwargs appropriate for the actor_critic function you provided to SAC.
  • seed (int) – Seed for random number generators.
  • steps_per_epoch (int) – Number of steps of interaction (state-action pairs) for the agent and the environment in each epoch.
  • epochs (int) – Number of epochs to run and train agent.
  • replay_size (int) – Maximum length of replay buffer.
  • gamma (float) – Discount factor. (Always between 0 and 1.)
  • polyak (float) – Interpolation factor in polyak averaging for target networks. Target networks are updated towards main networks according to: θ t a r g ← ρ θ t a r g + ( 1 − ρ ) θ \theta_{targ}\leftarrow\rho\theta_{targ}+(1-\rho)\theta θtargρθtarg+(1ρ)θwhere ρ \rho ρ is polyak. (Always between 0 and 1, usually close to 1.)
  • lr (float) – Learning rate (used for both policy and value learning).
  • alpha (float) – Entropy regularization coefficient. (Equivalent to inverse of reward scale in the original SAC paper.)
  • batch_size (int) – Minibatch size for SGD.
  • start_steps (int) – Number of steps for uniform-random action selection, before running real policy. Helps exploration.
  • max_ep_len (int) – Maximum length of trajectory / episode / rollout.
  • logger_kwargs (dict) – Keyword args for EpochLogger.
  • save_freq (int) – How often (in terms of gap between epochs) to save the current policy and value function.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值