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

熵是一個可以粗略地說出隨機變量的隨機性的量。 如果對硬幣進行加權,使其幾乎總是出現正面,那麼它的熵就很低。 如果權重均等並且有一半機會出現任一結果,則它具有很高的熵。

xx爲隨機變量,服從密度函數PPxx的熵HH爲:H(P)=ExP[logP(x)].H(P) = \underset{x \sim P}E[{-\log P(x)}].在正則熵的強化學習中,代理在每個時間步都獲得與該時間步的策略熵成正比的獎金獎勵。 這會將RL問題更改爲:π=argmaxπEτπ[t=0γt(R(st,at,st+1)+αH(π(st)))],\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],其中α>0\alpha>0是平衡係數。在這裏插入圖片描述(請注意:我們在這裏假定了無限步長的折扣設置,此頁面的其餘部分中也執行相同的操作。)現在,我們可以在此設置中定義稍有不同的值函數。VπV^\pi每個時間步驟的改變都包含熵獎勵:Vπ(s)=Eτπ[t=0γt(R(st,at,st+1)+αH(π(st)))s0=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]除了第一次,QπQ^\pi的改變也包含熵獎勵:Qπ(s,a)=Eτπ[t=0γtR(st,at,st+1)+αt=1γtH(π(st))s0=s,a0=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]有了這些定義,Vπ and QπV^\pi\ and\ Q^\pi以下面的方式連接:Vπ(s)=Eaπ[Qπ(s,a)]+αH(π(s))V^{\pi}(s) = \underset{a \sim \pi}E[{Q^{\pi}(s,a)]} + \alpha H\left(\pi(\cdot|s)\right)QπQ^\pi的Bellman方程爲:Qπ(s,a)=EsP,aπ[R(s,a,s)+γ(Qπ(s,a)+αH(π(s)))]=EsP[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πQ^\pi在第一時間步長包括熵獎勵)。 關於該主題的論文,定義的選擇可能略有不同。

Soft Actor-Critic

SAC同時學習一個策略πθ\pi_\theta,兩個Q-function Qϕ1,Qϕ2Q_{\phi_1},Q_{\phi_2},現在有兩種SAC的標準版本:一種使用一個固定的熵正則係數α\alpha,另一種用一個熵的限制通過在訓練過程中正在變化的α\alpha.出於簡單,Spiningup使用一個固定熵正則的係數,但是一般地實踐者更喜歡用限制熵的那個版本.

經過一些時間,SAC算法有些改變,老版本的sac除了Q-functions之外學習一個值函數VψV_{\psi};接下來會聚焦於當前版本,即不用額外的值函數.

學習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從循環的Bellman方程開始,用熵定義重寫:
Qπ(s,a)=EsR,aπ[R(s,a,s)+γ(Qπ(s,a)+αH(π(s)))]=EsP,aπ[R(s,a,s)+γ(Qπ(s,a)αlogπ(as))]\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}
RHS是對下一個狀態(來自緩衝區)和下一個操作(來自當前current策略,而不是緩衝區)的期望。因爲它是一個期望,我們能用樣本來近似它:Qπ(s,a)r+γ(Qπ(s,a~)αlogπ(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').
>用a~\tilde a' 表示下一個動作,而不是aa',即接下來的動作必須從當前策略中重新算出(對比之下,r  sr\ 和\ 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],其中目標爲:y(r,s,d)=r+γ(1d)(minj=1,2Qϕtarg,j(s,a~)αlogπθ(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').

學習策略。

在每個狀態中,策略應該以未來回報的期望加上未來熵的期望的最大化去選擇動作。即它應最大化Vπ(s)V^\pi(s),我們能將其擴展進:Vπ(s)=Eaπ[Qπ(s,a)+αH(π(s))]=Eaπ[Qπ(s,a)αlogπ(as)].\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}我們優化策略的方法利用了重新參數化技巧,其中通過計算狀態、策略參數和獨立噪聲的確定性函數從πθ(s)\pi_\theta(\cdot|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).

該策略與我們在其他策略優化算法中使用的策略有兩個主要區別:
1.壓縮函數。 SAC策略中的 tanh可確保將動作限制在有限範圍內。 VPG,TRPO和PPO策略中沒有此功能。 它還會改變分佈:在 tanh 之前,SAC策略像其他算法的策略一樣是factored Gaussian,但在 tanh之後卻不是。 (不過,您仍然可以以相近的形式計算動作的對數概率:有關詳細信息,請參見文章附錄。)
2.標準偏差的參數化方式。 在VPG,TRPO和PPO中,我們用與狀態無關的參數向量表示log std devs(對數標準差)。 在SAC中,我們將對數標準差表示爲神經網絡的輸出,這意味着它們以複雜的方式依賴狀態。 根據我們的經驗,具有獨立於狀態的對數標準差的SAC是無效的。 (您能想到原因嗎?或者最好:進行實驗以進行驗證?)

重新參數化技巧使我們可以將對動作的期望(包含一個痛點:分佈取決於策略參數)重寫進對噪聲的期望(這消除了痛點:現在分佈不依賴參數):Eaπθ[Qπθ(s,a)αlogπθ(as)]=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)}]爲了得到策略損失,最後一步是我們需要用我們的函數近似器替代QπθQ^{\pi_{\theta}}。 與TD3不同(它用Qϕ1Q_{\phi_1},即第一個Q近似器),SAC使用minj=1,2Qϕj\underset{j=1,2}{min}{Q_{\phi_j}}(即兩個Q近似中最小的)。 因此,策略的優化根據maxθEsD,ξN[minj=1,2Qϕ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],除了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:θtargρθtarg+(1ρ)θ\theta_{targ}\leftarrow\rho\theta_{targ}+(1-\rho)\thetawhere ρ\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.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章