1. TRPO和PPO都用到了Importance Sampling技術,不應該是Off-policy的嗎? 對比之下,使用了Importance Sampling的Monte Carlo演算法就是off-policy的
  2. TRPO和PPO用舊策略採樣得到的樣本可以用來更新多個Epoch,那麼在更新第二個Epoch開始,我們用於採樣的採樣策略(舊策略)和我們要更新的策略(已經在第一個Epoch中被更新過一次的新策略)就不是同一個策略了,那不就是Off-Policy的所定義的嗎?
  3. 那麼為什麼我在所有的論文中都說TRPO和PPO屬於On-Policy呢?
  4. 同時,A3C因為是非同步的,那麼嚴格來說是不是也是Off-policy的?比如剛開始worker1,woker2,中央網路策略相同。worker1更新了中央網路,然後worker2再去更新中央網路,那麼這個時候worker2的採樣策略和中央網路的策略(已被worker1更新)就不一樣了,which is Off-Policy。

請問我是哪裡理解錯了嗎?


先解釋on policy off policy。

policy iteration分兩步,policy evaluation和policy improvement。在monte carlo policy iteration中,存在兩種policy,一種做採樣完成第一步,也就是在採樣的traj上算value或者advantage,第二種是需要improve的policy。

on-policy在這裡指,採樣策略和改進策略是同一個,off-policy則相反,採樣和需要改進的策略不相同,但是policy evaluation目的是估計改進策略的值,所以在policy improvement會用到importance sampling。

你犯的錯誤是把importance sampling和off-policy劃等號了。

上面說的方法objective是maximize return,但是trpo和ppo的objective不是這個,他們間接地maximize return improvement: R(theta_prime)-R(theta)。R表示return,theta是策略的參數,prime指更新後的參數。在trpo和ppo推導中使用的importance sampling是為了把對pi(theta_prime)的期望換成pi(theta)的,理由是theta_prime是更新後的density我們是不知道的。

trpo和ppo是on policy的,因為做過importance sampling之後,期望是對改進策略的,即採樣就是用當前策略。

希望這個回答有幫助。手機打字見諒。


題主的提問很值得思考,嘗試按我的思考回答一下,可能存在問題,歡迎指正。

先嘗試回答第一個問題:PPO、TRPO為什麼是on-plicy?

TRPO本身是on-policy的,看似和off-policy演算法一樣根據old policy的分佈做importance sampling,區別在於,off-policy的演算法可以使用任意的策略的數據來更新當前的策略,TRPO卻是使用[公式]採樣的數據來更新 [公式][公式] ,符合on-policy的定義,只不過更新中優化的目標函數(surrogate objective function)中有未知的action分佈(與需要優化求解的策略 [公式] 有關),使用了[公式]採集的數據和importance sampling係數來估計和表示。

更直觀的比較如下:

off-policy 策略更新

[公式]

TRPO策略更新

[公式]

off-policy演算法的策略更新是帶importance sampling係數的策略梯度上升,而TRPO的每步更新則是一個優化問題,這個優化問題TRPO論文採用的方法是泰勒展開目標函數和約束,然後根據拉格朗日對偶和線性搜索得到?,如下圖所示。

TRPO的優化步驟能否用梯度上升來做呢,當然可以,不過TRPO本身就是為瞭解決策略梯度法步長難以確定的問題,如果引入梯度法,梯度法的步長又成為新的問題,所以TRPO沒有採用。但是PPO就是用的多步的梯度上升來優化clip的目標函數,瞭解了TRPO就知道PPO也是使用[公式]採樣的數據來更新[公式][公式],屬於on-policy的演算法,但由於使用了多步的梯度上升進行優化,看起來更像off-policy策略更新了,但其實優化過程中的 [公式] ?只是優化過程的中間產物,並沒有用於採樣新的trajectory。

參考資料:

TRPO:https://arxiv.org/abs/1502.05477

PPO:https://arxiv.org/abs/1707.06347

OpenAI Spinningup:https://spinningup.openai.com/en/latest/algorithms/trpo.html

第二個問題:A3C為什麼是on-policy?

這個答案應該是顯然的,A3C的每個worker獨立的使用Advantage Actor Critic方法進行數據採集和梯度計算,然後傳給global worker更新global worker的網路參數,global worker更新後copy給worker進行下一次採樣和梯度計算,如下圖所示,每個worker都是on-policy更新的,採集數據的策略和計算梯度更新的策略相同。題主的問題是,global worker的參數和actor的參數不同會怎麼樣,答案是本身就可以不一樣,global worker本身不直接參與採樣,只是起到一個融合多個worker的更新梯度的功能,而真正採樣和梯度計算是在各個woker的部分。

參考資料:

A3C:https://arxiv.org/pdf/1602.01783.pdf


個人理解,trpo和ppo只是假裝用了off policy,因此他的update不能離原policy太遠,否則會變得很不stable。update之後sample就全扔了,然後用新的policy來collect sample,本質上還是on policy。而真正的off policy像ddpg,sac所有sample都是可以一直留著的。


狹義的On和off的區別僅僅在於,你用來更新策略的樣本分佈是否與策略生成的分佈嚴格相同。注意是嚴格相同。

在trpo和ppo裏,用來更新策略的樣本都是由策略生成的,用完就扔了,所以是on policy的。至於為什麼是on policy,因為理論推導時,有一些步驟依賴於on policy 的採樣才嚴格成立。具體可參見trpo附錄。

樓上說的trpo前後策略約相等,是推導出策略的單調優化的必要條件。跟on policy和off policy無關。

廣義的on policy可以理解為對策略梯度的無偏估計,比如用最基本的trick importance sampling。還有一些相對更新的方法,比如q prop的gradient estimator。


PPO是來自於TRPO思想的,能夠問出這個問題,估計沒有仔細檢查TRPO的推導過程。在TRPO推導的時候,有一些近似是必須在on-policy假設下才有效的。


題主應該是發現PPO的更新有多個epoch,minibatch,然後又有importance sampling的形式,導致了覺得PPO是off-policy的錯覺。這裡一條一條回答下題主的問題。

  1. importance sampling不等於off-policy,如果PPO更新的epoch=1,minibatch=1,不管有沒有用IS,很典型的這裡就是on-policy,應該沒有疑問。
  2. 擴展到多個epoch和minibatch的情況下,論文應該寫的很清楚:

只是為了better performence的一個trick,這個trick在深度學習中可以直接用,因為樣本的分佈一直是不變的,而在這裡按道理來說一個epoch的更新之後分佈就變了,就不能用這個trick了,但是由於trpo的推導裡面做了更新前後策略距離很近的假設,因此可以近似認為epoch更新前後樣本分佈基本沒變,所以可以沿用這個深度學習的trick。但當epoch太大或者lr太大時這個效果就被破壞了。這裡的理論依據依然是與IS無關的,所以整體上還是on-policy。

4. A3C是on-policy是毫無疑問的,其他答主已經說得很清楚了。


個人理解:PPO在小範圍內,也就是採樣時所採取的策略與train時的策略相差不大時,通過重要性採樣的原理,實際上是帶有off-policy的性質的。但是這並不完全符合off-policy的定義,所以它本質還是屬於on-policy的演算法。


推薦閱讀:
相關文章