1. 程式人生 > >Policy Gradient在MXNet下的手記

Policy Gradient在MXNet下的手記

tro 現場 沒有 ict 過程 工作 操作 github sta

Preface

AIC現場回來後,做了一些Policy Gradient的工作。主要是覺得RL是一個有意思的領域,而深度網絡逼近對這個問題提供了良好的可預期的解決方案。本來想找些程序先做個參考,發現都是些打遊戲場景;之前看textbook的時候,對Figure 17.1(Artificial Intelligence: A Modern Approach)的例子印象深刻,覺得是個良好的案例,於是用這個場景;另外,做的過程中開始轉gluon,在這個例子上試了下,發現還挺順手的,就把之前的symbol接口全改了。

Code

程序是github上的Task1

Policy Gradient

正式的說明自有大牛闡述,這裏只是為了保持結構完整。RL的兩種途徑分別是Value-Based

Policy-BasedPolicy的好處在於其簡潔性,直接將state映射到action

Works

而Ploicy Gradient,在做的過程中,給我一種和以前的label-data learning極為相似的感覺,相當於都是通過試錯法來了解數據,只不過label-data的對應結構關系不同。
所以,最開始時,對backward那部分的想法是,通過在最末接入一個SoftmaxCrossEntropyLoss,將選出來的action作為label,通過將outgrad作為reward的函數,控制優化的方向和幅度。最後的版本裏面,Loss被刪除,直接用sotmax作激活函數得到action

的概率分布,然後用具有one_hot型編碼的outgrad進行backward(這要感謝gluon的功能)。

另一個需要說明的是exploration-exploitation,之前在看一些非正式的介紹時,看到這一段,總會習慣性地認為需要采取類似於遺傳算法的概率操作:設定一個閾值,確定是否放棄系統給出的action,如果放棄,再隨機選一個action出來。
將這兩種想法結合起來,發現最後沒有收斂到理想方向(第一個commit便是)。於是,在後面debug時,Loss那部分就被砍掉了。但給我感覺,對系統影響最大的應該是exploration-exploitation那部分,後面查看Reinforcement Learning: An Introduction第13章,發現應該是進行采樣

(實際上,如果按照統計學習的慣性思維,也應該是使用采樣的樣本代替期望)。

Result

後面把結果打出來,發現收斂得還行,對比了一下R=-0.04時的結果,textbook上的結果是這樣的:


技術分享圖片
Figure 1. Ground Truth

系統的預測結果:

1 2 3 4
+1
Wall -1

Tab 1. Net Prediction

可以看到,存在一些出入,但這個結果和-0.4278<R<-0.0850的情況下的ground truth 是相同的,這似乎就是說的Policy Gradient容易陷入local optima的情況。

Policy Gradient在MXNet下的手記