【李宏毅深度強化學習筆記】1、策略梯度方法(Policy Gradient)
【李宏毅深度強化學習筆記】2、Proximal Policy Optimization (PPO) 算法
【李宏毅深度強化學習筆記】3、Q-learning(Basic Idea)
【李宏毅深度強化學習筆記】4、Q-learning更高階的算法
【李宏毅深度強化學習筆記】5、Q-learning用於連續動作 (NAF算法)
【李宏毅深度強化學習筆記】6、Actor-Critic、A2C、A3C、Pathwise Derivative Policy Gradient
【李宏毅深度強化學習筆記】7、Sparse Reward(本文)
【李宏毅深度強化學習筆記】8、Imitation Learning
-------------------------------------------------------------------------------------------------------
【李宏毅深度強化學習】視頻地址:https://www.bilibili.com/video/av63546968?p=7
課件地址:http://speech.ee.ntu.edu.tw/~tlkagk/courses_MLDS18.html
-------------------------------------------------------------------------------------------------------
在強化學習的訓練過程中,當環境的reward很少時(指出現的次數),這樣對agent的訓練是很不利的。比如,讓一個機器人拿起螺絲刀,再把螺絲擰進去才能得到reward。這一系列操作組合起來對於一個一開始什麼都不懂的機器人無疑是很難的,因爲它一開始不管做什麼動作都不會得到reward,即便有exploration也只有極小的機率能成功獲得reward。
所以下面介紹幾種方法來處理這種Sparse Reward的方法。
1、Reward Shaping
既然環境的reward很稀疏,那我們就自己設定一些假的reward去引導agent往我們想要的方向。
舉個例子,這裏agent是這個小孩。它有兩個動作,如果選擇出去玩,短時間內能得到reward +1,但是之後的考試可能很很差(reward -100);如果選擇學習,短時間內可能會不爽,所以reward是-1,但是之後能獲得reward +100。
所以,爲了引導這個小孩(agent)能往去好好學習,就會騙他說坐下來念書給棒棒糖吃,所以對他來說下一個時間點的reward就變成+1。然後他就會選擇學習這個動作,即便這個reward不是實際存在的。
這是一個比較簡單的例子,所以比較容易假設。而在現實中要引導agent需要設定正確的reward才能得到好的訓練效果,這個reward可能不是很直觀就能想到的。
所以下面要介紹一些比較通用的可以加進去reward。
Curiosity
由於環境中的reward很少,導致agent不知道要幹嘛,一直在裏面瞎轉。所以要製造一些reward使這個agent去探索一些沒做過的事情,其實這是一種exploration的技術。
以論文(https://arxiv.org/pdf/1705.05363.pdf)中的提到的例子,在Mario遊戲中,智能體(Mario)純粹利用好奇心進行探索,而不從殺死敵人或者躲避危險中得到任何激勵信號。這樣的智能體仍然學會了如何殺死敵人和躲避攻擊。原因是因爲被敵人殺掉會導致智能體只能看到一小部分的遊戲空間,從而迅速導致其好奇心飽和。爲了保持"好奇心",智能體必須學會殺死敵人和躲避危險,以到達更多更新的遊戲空間。(此段落參考博文:https://blog.csdn.net/triplemeng/article/details/84912694)
下面看具體的過程:
左圖是之前的圖,以在執行獲得。然後累加整個過程的作爲total reward。
右圖是加入Curiosity技術的ICM模塊的圖,ICM以,,爲輸入,輸出一個,然後累加整個過程的,的總和作爲total reward。所以現在不僅希望越大越好,還希望也越大越好。
ICM的設計
輸入到ICM的,作爲模塊中的一個網絡Network 1的輸入,去預測接下來會遇到的狀態,然後和實際下一個狀態去作對比。預測的狀態和實際的狀態越不像,這個reward就越大,所以agent就會越傾向於去冒險以滿足自己的好奇心。
注意:其中的Network 1是另外訓練出來的,訓練好後在ICM中運用的時候,它的參數是被固定住的。
這是ICM最原始的樣子,但是這是不夠的。因爲在實際中,有一些state雖然難預測,但是不代表就要讓agent往這些state靠近,有可能這些state是無關緊要的。比如agent站下樹下看樹葉飄動,而樹葉飄動很難預測,但是由於好奇心驅使就導致agent一直站在原地看樹葉飄動了。。
所以需要讓agent知道哪些事情纔是應該要關注的。
在剛纔的基礎上,再增加Feature Ext這個網絡,Feature Ext先把、 變爲 、(這一步可以理解爲把狀態輸入CNN後把遊戲畫面變成電腦看得懂的東西),再送到Network 2去預測由跳到需要執行的動作。把和實際做的動作作對比,如果比較接近則說明、是有用的狀態;如果相差較大,則說明、是和agent要採取的動作無關的沒用場景,這時就把這些狀態過濾掉。
2、Curriculum Learning
給agent安排學習計劃,先從簡單的題目開始學,學會以後再學習難的題目,就像我們從小學讀到大學這樣。
以Facebook的vizdoom爲例子,他們讓agent和不同等級的怪物打鬥,先從速度慢血量薄的訓練起,再慢慢和更強的怪物打鬥。他們也有嘗試過一開始直接讓agent和最強的boss打,然後發現完全訓練不了。
知道讓agent從簡單學起,但是還要知道如何給它設計課程,這時就可以用Reverse Curriculum Generation。
Reverse Curriculum Generation
- 假設是目標狀態(完成任務的狀態),先從附近找出一些點,讓agent從這些地方出發,往靠近。
- 到達後算出各點的reward
- 刪掉reward最大(agent已經學會的,就沒必要再學)的點和reward最小(目前還是萌新的agent覺得太難)的點
- 根據剛纔刪掉後剩下的點,繼續尋找越遠的點,再學習靠近。
3、Hierarchical RL
把一個大的任務,通過上層agent的不斷分解,讓下層的agent去完成子任務。
以上圖爲例子:校長爲了學校的建設,讓教授每年發3篇期刊;而教授把實驗規劃做好後,就讓下面的研究生去幹活(太真實了)。
其中注意一點,如果上層agent一直弄一些很難的任務給下層agent,導致下層agent沒辦法完成,上層的agent就會得到負的reward(你沒看錯)。
另一點要注意的是,如果下層的agent到達一個錯誤的目標,那爲了下層做過的action不被浪費掉,就把上層原來目標改爲這個錯誤的目標。以上圖爲例子,原本校長要求教授發期刊,但是教授後來經過探索卻變成YouTubers,那校長就只能把原來的目標改成要求教授成爲YouTubers。
再舉例子就是這個,紫色點代表下層的agent,粉色點代表上層agent的願景,黃色點代表目的地。
這個任務中,把紫色點到目的地(黃色點)的路線,拆成4個子任務,讓下層的agent(紫色點)跟着上層agent的願景(粉色點)走,最終到達目的地(黃色點)。