【李巨集毅深度強化學習2018】P2 Proximal Policy Optimization (PPO)
第二講 Proximal Policy Optimization(PPO)
視訊地址:https://www.bilibili.com/video/av24724071
課件地址:http://speech.ee.ntu.edu.tw/~tlkagk/courses_MLDS18.html
第一講:【李巨集毅深度強化學習2018】P1 Policy Gradient(Review)
兩種策略:on-policy 和 off-policy:
所謂 on-policy 指我們學習的 agent(即actor) 和與環境互動的 agent 是相同的,即 agent 一邊和環境互動,一邊學習;
而 off-policy 指我們學習的 agent 與環境互動的 agent 是不同的,即 agent 通過看別人玩遊戲來學習。
注:RL中的 actor/agent 概念和 policy 概念其實有時候會指代同一個東西。因為 policy 即是 actor 要學習的策略,並在是在學習以後用來生成 action 的依據。actor/policy 都可以代表一個網路/函式,一個用來生成 action 的網路/函式。所以下文有時對二者不加以嚴格區分。
off-policy 方法,利用 q 分佈計算 p 分佈下的期望:
上一講提到的 policy gradient 是指 on-policy 的方法,即跟環境互動的 policy 與要 learn 的 policy 是同一個。
整個 actor 網路的目標是學習引數 生成 【能使 reward 最大的 action】。為了使 最大化,我們需要做gradient ascent。而 是上一講提到的做 gradient ascent 時需要計算的梯度。
意味著如果更新引數後,要重新 sample 一堆 trajectory
而 off-policy 的好處就是,我們可以用另一個 對應的 policy 來和環境互動,而用其收集到的資料來訓練,這樣可以把 收集到的資料重複利用。
現在介紹 Importance Sampling 的思想:
代表從分佈 p 中取樣本 x 送入函式 f(x) 並求期望,這可以近似於 sample N 個 ,然後帶入 f(x) 求平均,即。現在假設我們不能從分佈 p 中 sample 資料,只能從分佈 q 中 sample,這樣不能直接套上述近似。而要用:。
就是從 p 中 sample 的期望,現在要改為分佈 q,所以同時乘 q 除 q,最後多出一項即為 importance weight,代表分佈 p 和分佈 q 間的差異。
Importance Sampling 存在的問題:
成立,但是二者的方差(variance)不同,多出來的一項在上圖用紅框圈出。所以如果對於兩個分佈p、q sample 得足夠多,那麼可以用上述公式算期望,但是如果 sample 得不多,二者的方差又相差很大,那麼這樣算就有問題。
這幅圖具體說明了上述問題:藍線代表 p 的分佈,綠線代表 q 分佈,紅線代表 函式,現在我們要從 p、q 分佈中 sample 出 x ,投到 中計算。可以看出 p、q 分佈對於 的計算而言差別是很大的,因為在藍線附近 sample 到的 x 丟到 中算出來的是負值,而綠線附近 sample 到的 x 丟到 中算出的是正值。
現在我們關注右邊 這項,如果對 q 分佈 sample 得不夠多,只在紅線右邊得到 6 個綠點,那麼 、、 都是正的, 恆為正;但是如果 sample 到紅線左邊的 1 個綠點(概率很小),則f(x)為負,同時 乘上的 importance weight 是一個很大的正值,這樣會得到一個比較大的負值,對期望起到平衡作用,期望有可能變成負的。所以我們要求 要比較接近。
現在 off-policy 就是讓 給 做示範,即從 的分佈 sample 資料,同時用 importance weight 做修正。
使用 off-policy,使用梯度做引數更新時要注意的點:
用 off-policy 要注意的一點就是原來 advantage function中 (見第一講) 的 也要改為 ,因為現在是 在和環境互動。
我們估計 =1,因為猜測 state 的出現與 關係不大,況且這一項本來就無法計算,因為state出現的概率我們是不能控制或估計的。
由此可以得到新的目標函式 。上標 代表跟環境互動的是 , 是要更新的引數。
可以直接算, 可以根據 sample 到的資料計算。
PPO / TRPO 演算法:
我們之前提到要求 比較接近,所以提出了 PPO 演算法,在目標函式 後加了一個約束KL散度 ,來保證 的相似性,這個約束就像深度學習中的正則化項。TRPO也是同樣的思想,但是很難計算,建議就用PPO。
KL散度在意的是actor行為上的差距而不是引數上的差距。
TODO
其實和學習率有點類似,需要手動設定。我們可以設定兩個閾值 和 ,如果算出來的 KL散度 大於 ,說明 相差太大,需要加大 ,加大懲罰。反之則減小 ,減小懲罰。
PPO / PPO2 的目標函式公式:
還有一種PPO2,是PPO的簡化。PPO2原始的公式為:
裡面是對 和 取最小值 min。
中 clip 函式的意思是如果 小於 ,則取 ;若 大於 則取 ;若介於兩者之間,則取 。clip函式的影象為:
其中橫軸為 。
現在綜合考慮 min 中的兩項,第二項對應上圖藍色的折線,第一項對應下圖綠色的斜線,若A>0,則取下圖左邊紅線部分,若A<0則取下圖右邊紅色部分。
這個式子其實就是讓 和 不要差距太大。如果A(advantage function)>0,代表當前的action是好的,所以我們希望 越大越好(即橫軸代表的 增大),但是 和 二者不能相差太多,所以設了一個上界 (上圖左邊);A<0,則說明當前的按傳統不好,所以希望 越小越好,但同樣要設一個下界 。
PPO / PPO2 等方法的實驗效果:
上圖給出了PPO在不同任務上的表現(紫色的線)