文章目錄
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
熵是一個可以粗略地說出隨機變量的隨機性的量。 如果對硬幣進行加權,使其幾乎總是出現正面,那麼它的熵就很低。 如果權重均等並且有一半機會出現任一結果,則它具有很高的熵。
令爲隨機變量,服從密度函數。的熵爲:在正則熵的強化學習中,代理在每個時間步都獲得與該時間步的策略熵成正比的獎金獎勵。 這會將RL問題更改爲:其中是平衡係數。(請注意:我們在這裏假定了無限步長的折扣設置,此頁面的其餘部分中也執行相同的操作。)現在,我們可以在此設置中定義稍有不同的值函數。每個時間步驟的改變都包含熵獎勵:除了第一次,的改變也包含熵獎勵:有了這些定義,以下面的方式連接:的Bellman方程爲:
我們在熵調整後的設置中設置值函數的方式有些隨意,實際上我們可以做得不同(例如,使在第一時間步長包括熵獎勵)。 關於該主題的論文,定義的選擇可能略有不同。
Soft Actor-Critic
SAC同時學習一個策略,兩個Q-function ,現在有兩種SAC的標準版本:一種使用一個固定的熵正則係數,另一種用一個熵的限制通過在訓練過程中正在變化的.出於簡單,Spiningup使用一個固定熵正則的係數,但是一般地實踐者更喜歡用限制熵的那個版本.
經過一些時間,SAC算法有些改變,老版本的sac除了Q-functions之外學習一個值函數;接下來會聚焦於當前版本,即不用額外的值函數.
學習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之前,討論一下熵正則的貢獻是怎麼產生的.我們考慮之前熵正則的從循環的Bellman方程開始,用熵定義重寫:
RHS是對下一個狀態(來自緩衝區)和下一個操作(來自當前current策略,而不是緩衝區)的期望。因爲它是一個期望,我們能用樣本來近似它:
>用 表示下一個動作,而不是,即接下來的動作必須從當前策略中重新算出(對比之下,是從緩存中得到).
SAC用這種樣本對target的近似即對每個Q-function設置MSBE loss,這裏唯一還不確定的是使用哪個Q函數來計算樣本backup:類似TD3,SAC使用clipped double-Q技巧,以及在兩個Q的近似中取最小的Q值.
把這些整合起來,SAC中的Q-網絡的損失函數爲:其中目標爲:
學習策略。
在每個狀態中,策略應該以未來回報的期望加上未來熵的期望的最大化去選擇動作。即它應最大化,我們能將其擴展進:我們優化策略的方法利用了重新參數化技巧,其中通過計算狀態、策略參數和獨立噪聲的確定性函數從中抽取樣本。 爲了說明:按照SAC論文的作者,我們用一個壓縮的高斯策略,這意味着根據以下取樣:
該策略與我們在其他策略優化算法中使用的策略有兩個主要區別:
1.壓縮函數。 SAC策略中的 tanh可確保將動作限制在有限範圍內。 VPG,TRPO和PPO策略中沒有此功能。 它還會改變分佈:在 tanh 之前,SAC策略像其他算法的策略一樣是factored Gaussian,但在 tanh之後卻不是。 (不過,您仍然可以以相近的形式計算動作的對數概率:有關詳細信息,請參見文章附錄。)
2.標準偏差的參數化方式。 在VPG,TRPO和PPO中,我們用與狀態無關的參數向量表示log std devs(對數標準差)。 在SAC中,我們將對數標準差表示爲神經網絡的輸出,這意味着它們以複雜的方式依賴狀態。 根據我們的經驗,具有獨立於狀態的對數標準差的SAC是無效的。 (您能想到原因嗎?或者最好:進行實驗以進行驗證?)
重新參數化技巧使我們可以將對動作的期望(包含一個痛點:分佈取決於策略參數)重寫進對噪聲的期望(這消除了痛點:現在分佈不依賴參數):爲了得到策略損失,最後一步是我們需要用我們的函數近似器替代。 與TD3不同(它用,即第一個Q近似器),SAC使用(即兩個Q近似中最小的)。 因此,策略的優化根據除了min-double-Q技巧,隨機性和熵項外,它與DDPG和TD3策略優化幾乎相同。
Exploration vs. Exploitation
SAC通過熵正則化訓練隨機策略,並以on-policy方式進行探索。 熵正則化係數明確控制探索-利用權衡,較高的對應於更多的探索,而較低的對應於更多的利用。 正確的係數(導致學習最穩定/最高獎勵的係數)可能因環境而異,可能需要仔細調整。
在測試時,要查看該策略如何充分利用其所學知識,我們將消除隨機性,並使用均值動作而不是分佈中的一個樣本。 這往往會提高原始隨機策略的性能。
在訓練開始時,我們的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:where 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.