強化學習--信賴域系方法:TRPO、PPO(附適合初學者閱讀的完整PPO程式碼連線)
在前面的章節裡,我們已經介紹了基於策略的強化學習演算法,也提到了異策略強化學習需要滿足的條件:由於重要性取樣的關係我們希望每次更新的時候策略分佈之間差距並不是很大,這實際上是一種約束,即我們希望能每次更新的時候不大幅度地改變分佈的形態,基於這種考慮openai的前輩們提出了TRPO演算法,但是TRPO演算法會有一些缺陷,他拿二次函式去近似約束條件,拿一次函式近似待優化的損失函式,這種近似會造成收斂上的困難,於是便有了第二次smart的改進,得到PPO系列的演算法,PPO演算法也是當前openai的預設演算法,是策略演算法的最好實現
PPO的完整程式碼,我已放在我的github
TRPO演算法
回顧策略梯度的方法,根據之前的介紹我們知道在策略梯度中我們的更新滿足如下關係:
策略梯度的硬傷就在於更新步長
,當步長選的不合適的時候更新的引數會更差,因此很容易導致越學越差,最後崩潰,那什麼樣的步長叫做合適的步長呢,試想我們如果能找到一種步長,使他每次更新時都能保證回報函式單調遞增,這樣的步長就是好步長。TRPO的核心就是解決這個問題。
我們用
來表示一個狀態行為序列,或者說一條軌跡,那麼某種策略下的期望回報可以看做是如下式子:
既然TRPO的根本目的是為了使每次更新的回報函式單調不減,那麼一個很自然的想法是將新的策略對應的回報函式分解成原來策略的回報函式加一個其他項,那麼只要保證新的策略的其他項是大於零的,我們就得到了一個一直提升策略的方案。
在這種思想的引導下,我們可以得到如下等式:
其中
整個公式的證明稍許複雜不做詳述。
我們將公式寫開可以得到:
很容易進一步變形得到
其中
注意這裡s是由新分佈產生的,對新分佈有很強的依賴性。這個公式其實在應用中完全無法達到,因為我們是為了得到新的策略,所以這裡的其他項完全無從所知,為此,TRPO採取了一些技巧來解決這個問題。
下面我們來介紹TRPO論文中的四個技巧:
- 在原式中計算 時,我們需要新的策略,而新策略目前還未知,因此,我們可以利用舊策略來代替新策略,因為兩者相差並不是很大。
- 利用重要性取樣處理動作分佈
注意到: