Policy Gradient在MXNet下的手記
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
的好處在於其簡潔性,直接將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下的手記