(九)演员-评论员算法
??前言:演員-評論員算法又叫actor-critic算法
??先從宏觀上把握下本章的的內容:之前介紹過actor-critic是一種value base和policy base的結合體。首先要說明各自的缺點,再整體介紹一下actor-critic算法本身。最后會介紹幾種基于actor-critic的改進算法。讓我們開始吧!
??actor-critic是一種結合策略梯度(policy base)和時序差分學習(value base)的RL方法。對actor和critic進行下介紹:
??actor指策略函數,即學習一個策略來得到盡量高的回報
??critic指價值函數,即對當前策略的值函數進行估計,評估演員的好壞
??首先來回顧一下單純的policy base和value base有什么問題:
??策略梯度回顧:
??從之前的計算知道策略梯度的表達式是:
??之前說過策略梯度的數據是不能重用的,也就是每次進行參數更新時都要采樣一次。因為評價策略的好壞就是價值,價值在具體的軌跡中就是獎勵。如果用G來表示累計獎勵的話,因為狀態執行動作得到獎勵的隨機性,G本身是有隨機性的。當然采樣足夠多會服從某個分布。但在采樣很少的情況下,G本身的隨機性還是很大的。所以說策略梯度這種方法很不穩定
??深度Q網絡回顧:
??通過網絡訓練可以解決上面的隨機性,一個中心思想就是利用G期望代替采樣值(普遍認為期望的穩定性更好)。那==如何利用期望代替采樣值呢?==方法就是DQN,DQN本身是value-base,兩種value本身計算的都是期望。實際估計實現時可以用MC(更精確)或者TD(更穩定)
??演員-評論家算法
??回想一個Q函數的定義,就是在狀態s執行a并保持策略Π后累計獎勵的期望值。累計獎勵的期望不就是E(G)嗎!所以存在一個等式:
??在策略梯度公式中,表達累計獎勵的是:
??所以對這個進行一次替換,用Q函數來表示。對于后面的baseline,之前講過baseline的計算。有一個普遍認同的做法是用狀態價值函數來表示。狀態價值函數沒有涉及到action,對于同一個策略Π來說,狀態價值函數就會是動作價值函數的期望值。最終會得到下面這個等式:
??回想一下實現原理,用Q函數代表的期望值替換掉策略梯度中隨機性較大的累計獎勵。然后后面的過程按照策略梯度的方式做更新,這就是actor-critic
actor-critic本身是一種方法,但還有三種改進的方法:優勢演員-評論員算法、異步優勢演員-評論員算法、路徑衍生策略梯度
??優勢演員-評論員算法(A2C)
??從上面的actor-critic的算法表達式中得知,Q-V這個計算式中涉及到兩個網絡:Q網絡和V網絡,它們都在進行估計。如果估計不準的話就是兩倍的風險。所以一種想法是:把其中一個網絡用另一個來表示,這就A2C的思想,把Q用V來表示。Q函數可以寫成r+V的期望值,即:
??因為隨機性,總是要取期望才能夠得到Q函數。期望本身是很煩的,直接把期望拿下去:
??期望可以直接拿下去的原因:通過試驗得到的,效果很好
??所以現在的表達式變成了:
??這個式子之前叫做優勢函數,所以這種方法叫做優勢演員-評論家方法。它整體的運作流程如下:
??有一個初始策略Π,初始actor和環境互動收集資料。拿著資料去估計價值函數(MC或TD)。然后利用新的策略梯度表達式更新策略,獲取新策略Π。再和環境互動(上圖是順時針運轉的)
??在A2C實現的時候有兩個小策略:
??1)網絡復用 其中涉及到價值網絡V和策略網絡Π,前面一部分可復用,后面再分開
??2)繼續使用探索機制
??異步優勢演員-評論員算法(A3C)
??RL有一個問題:訓練慢。那==怎么提升訓練速度呢?==這里有一個例子我真的覺得妙極了。就是那魯多當年搓丸子的時候自己練比較慢,于是在提示下用影分身進行訓練。影分身的得到的經驗最后都會給主體。所以相當于并行訓練。A3C也是這個思路,它同時開很多個線程,把策略網絡和價值網絡綁在一起。最開始做復制,然后各自更新。最終把結果反饋給中央的控制中心。實現的原理圖如下:
??不過有一個點需要注意下:在各自進行訓練的時候還是要注意保證多樣性。這樣才能夠得到更好效果(反復訓練一個沒什么意思)。而且對于參數是直接覆蓋,網絡A訓練完之后進行覆蓋原值。網絡B訓練完之后又會覆蓋A值。
??路徑衍生策略梯度(pathwise derivative policy gradient)
??首先明確一下這種方法的兩個作用:
??1)之前的actor-critic中critic只會判斷一個策略好于不好,而路徑衍生的critic會直接告訴更好的策略(從actor-critic角度)
??2)路徑衍生策略梯度可以來解決DQN不適用連續動作的問題(從DQN角度)
??先從actor-critic角度看:
??之前說先學習Q函數(critic),然后確定argmax。在路徑衍生中直接設計一個演員的角色,這個演員的作用是通過學習可以輸出一個動作a使Q函數最大化。它的輸入是狀態,輸出就是動作。
??==但這個演員具體的訓練怎么實現呢?==實際上在訓練時會把Q和演員接起來拼成一個大網絡,固定住Q的參數,只調演員的參數,用梯度上升最大化Q
??從DQN角度
??之前連續動作時,用優化問題解決argmax。路徑衍生中直接設計一個solver。這個solver的作用就是輸入狀態s,輸出能最大化Q的動作a。
??其實從兩個角度看就是都是一件事,重新設計了一個演員/solver。輸入狀態能夠輸出最大化Q的動作a。
??它的算法流程是:最開始演員Π與環境互動,然后估計Q值。估計完后確定Q值,只學習一個演員,接下來的過程就是學習這個演員(策略梯度了~)。流程圖如下:
??把DQN改成路徑衍生策略梯度需要進行四個改變:
??1)把Q換成Π,之前使用Q決定產生動作,現在要換成Π(演員)
??2)存儲緩沖區要計算s(t+1),代表采取動嘴a得到的Q值。之前是用argmax求,但argmax不好求。把任務交給演員。Q函數中有兩個Q網絡:真正Q網絡和目標Q網絡。也對應有兩個演員:真正演員和目標演員。
??3)之前只要學Q,現在還要學一個演員Π
??4)目標Q函數是定期更新的,那目標演員也是要定期更新的
??以上就是關于actor-critic的全部內容啦~來看看課后題吧:
因作者水平有限,如有錯誤之處,請在下方評論區指出,謝謝!
總結
以上是生活随笔為你收集整理的(九)演员-评论员算法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux c 错误码大全及错误的捕获
- 下一篇: 安装redisclient、redis-