今天要介紹RL的另一個家族Policy gradient,policy gradient顧名思義就是直接輸出動作機率,然後經由網路找出好的策略梯度方向進而慢慢改變神經元的權重使得網路輸出的策略達到最佳狀態,因此若此環境有n的動作的話,那麼輸出神經元就有n個,每個神經元的値分別代表不同動作的機率,因此選擇的動作的時候可以依據機率分布來挑選,這樣的學習方式稱為policy gradient,本文從兩個方向來了解PG演算法,分別是整合李弘毅老師的投影片[10]以及karparthy大神的Blog[4],不喜歡數學推導的可以直接跳到第二點。

1.Policy gradient 推導

本推導截自李弘毅老師的投影片,老師先從RL環境開始介紹起,如下圖所示,就是Actor網路與環境互動的過程,環境先給與初始環境s1,Actor網路接收到後預測出動作,之後將此動作輸入環境中又會使環境得到下一個狀態s2。

如此週而復始的循環就會得到一個Trajectory

因此可以假設得到上面這個Trajectory的機率為(得到s1狀態的機率)X(在s1狀態下採取a1這個動作的機率)X(在s1狀態並且採取a1的動作下與環境互動能得到s2的機率)…,一值周而復始的乘下去,數學表示式可以寫成最下面的連乘表示法

Expected reward則是使用期望值的概念來算出,窮舉所有可能出現的Trajectory並且把相對應的值與相對應的機率相乘做加總的動作就是網路採取theda這組參數所得到的Expected reward,PG演算法(Policy gradient)想解決的問題就是找到網路參數theda使得每次與環境互動時都可以得到最佳策略使之獲得的Expected reward能極大化,最後的等式則是論文上常表示的數學式。

因此找出theda的微分方向並且慢慢移動使得Expected reward越來越大就是PG的核心思想,底下用到了數學代換法,就是投影片中藍色的部分,可以在後面的項目同乘上p_theda,之後就可以把後面那一項換成log,這也是為什麼您會在各大教科書或者論文上看到PG這個演算法會出現log的原因。而實際上使用此演算法時並不可能窮舉所有Trajectory,只能Sample一些Trajectory,而Sample的總數就是N,因此可以看到後面的式子中不是用等於而是使用近似於來代表

在Karparthy的部落格中也有推導一模一樣的演算法過程,只是Karparthy寫的比較簡略而老師講解的比較詳細:

 

2.Policy gradient 實作

Andrew karparthy用了另一個觀點來解釋Policy gradient的基礎原理,它從一般圖像分辨任務開始舉例起,如下圖就是一個常見的學習網路示意圖,網路的學習是監督式學習的,因此需要給網路對應的輸入與輸出,輸入即是給RGB圖片資料,輸出給與one-hot label

轉換成RL的問題學習時其實也是同樣的原理,只是這時輸入變成RL中的狀態(S),輸出是該回合的的執行動作(A)。假設這個環境有兩個動作,分別是向上與向下,對RL學習不陌生的朋友應該知道學習的過程中必須持續的收集對環境的反饋,也就是當前狀態(s)採取動作(a)後所得到的下個狀態(s’),以及給予的獎勵(r.)。收集這些資訊是RL的必備要素,假設這次收集的其中一條資訊如下,由於此次動作是採取往上,因此給予學習的label就對應如下

你可能會疑問這樣學習的起來嗎?怎麼可能reward的資訊都沒給就可以學出最好的策略,沒錯,依照上述方式學習是絕不可能學出任何東西的,因此咱們必須告知網路這個動作的好與壞,若是好的話就希望網路提升那個動作的機率,若是不好的話就降低那個動作機率,因此網路的學習模式必須修改如下,底下的Advantage即是要告訴網路的修改參數

這個Advantage function擁有許多模式可以選擇,底下敘述1~6點都是可以選擇的模式,在李宏毅老師的投影片中有詳細的解釋六個模式的來由,強烈推薦讀者去觀看

底下介紹karpathy 部落格中所介紹的Advantage function–Discounting reward。底下是個乒乓球的實驗環境,只要對手沒有接到球就獲得+1的reward,只要錯過了對手打過來的球則得到-1的reward。一個很正常的思考模式,當此回合輸了得到了負的獎勵,我們不應該怪罪這回合的每個動作並且都說是錯的,我們只可能猜測是中間的一個動作表現不好導致最後的輸球,那到底中間的哪個環節錯誤呢?我們無從猜起,一個比較好的策略是使用衰減的reward function,也就是越靠近回合開始的時候對後期的影響力應該越小,因此輸球的reward也應該隨之遞減才對

因此karparthy就使用這個discounted reward來作為剛剛所說的Adavantag function,先收集一整個回合的經驗,然後再計算這個回合中每一步的discounted reward來做為網路判斷動作好壞的依據,底下是一個實際的例子說明,衰減率設為0.9,後面得到的-1 reward經過層層衰減之後來到了-0.81,之後又收到了一個+1的reward,因此-0.81*0.9+1=0.27 ,經過中間補正之後原本負的reward就變成正的了,因此學習的時候演算法即可知道前面這個往上的動作是好的,學習的時候就會調大在這個狀態下往上動作的機率

因此,整個學習過程就是不斷的蒐集經驗,一回合收集完之後就計算discounting reward,然後在給網路學習,周而復始的訓練之後,網路就會學出最好的策略出來

因此,我們可以將policy gradient 更新網路的方法表示如下,負號是因為cross entropy的標準定義,也可以從另外一個角度來想,最大化總體reward (log_p * R)就等於最小化loss function,因此要加個負號

 

 

參考資料:
1.Youtube video :Deep RL Bootcamp Lecture 4A: Policy Gradients
2.Youtube video :Deep RL Bootcamp Lecture 4B Policy Gradients Revisited
3.https://gist.github.com/karpathy/a4166c7fe253700972fcbc77e4ea32c5
4.http://karpathy.github.io/2016/05/31/rl/
5.https://papers.nips.cc/paper/1713-policy-gradient-methods-for-reinforcement-learning-with-function-approximation.pdf
6.https://towardsdatascience.com/an-intuitive-explanation-of-policy-gradient-part-1-reinforce-aa4392cbfd3c
7.https://morvanzhou.github.io/tutorials/machine-learning/reinforcement-learning/5-2-policy-gradient-softmax2/
8.https://towardsdatascience.com/understanding-binary-cross-entropy-log-loss-a-visual-explanation-a3ac6025181a
9.https://medium.com/@thechrisyoon/deriving-policy-gradients-and-implementing-reinforce-f887949bd63
10.DRL Lecture 1: Policy Gradient (Review)
11.http://www0.cs.ucl.ac.uk/staff/d.silver/web/Teaching_files/pg.pdf

tags: learning report
arrow
arrow
    文章標籤
    policy gradient
    全站熱搜

    Darwin的AI天地 發表在 痞客邦 留言(4) 人氣()