1. 程式人生 > 實用技巧 >深度強化學習task05

深度強化學習task05

1. 稀疏獎勵

如果環境中的 reward 非常 sparse,reinforcement learning 的問題就會變得非常的困難,但是人類可以在非常 sparse 的 reward 上面去學習。我們的人生通常多數的時候,我們就只是活在那裡,都沒有得到什麼 reward 或是 penalty。但是,人還是可以採取各種各式各樣的行為。所以,一個真正厲害的 AI 應該能夠在 sparse reward 的情況下也學到要怎麼跟這個環境互動。
解決這個問題可從以下3個方向開始:

  1. 第一個方向是 reward shaping。Reward shaping 的意思是說環境有一個固定的 reward,它是真正的 reward,但是為了讓 agent 學出來的結果是我們要的樣子,我們刻意地設計了一些 reward 來引導我們的 agent。舉例來說,如果是把小孩當成一個 agent 的話。那一個小孩,他可以 take 兩個 actions,一個 action 是他可以出去玩,那他出去玩的話,在下一秒鐘它會得到 reward 1。但是他在月考的時候,成績可能會很差。所以在100 個小時之後呢,他會得到 reward -100。然後,他也可以決定要念書,然後在下一個時間,因為他沒有出去玩,所以他覺得很不爽,所以他得到 reward -1。但是在 100 個小時後,他可以得到 reward 100。但對一個小孩來說,他可能就會想要 take play 而不是 take study。我們計算的是 accumulated reward,但也許對小孩來說,他的 discount factor 會很大,所以他就不太在意未來的reward。而且因為他是一個小孩,他還沒有很多 experience,所以他的 Q-function estimate 是非常不精準的。所以要他去 estimate 很遠以後會得到的 accumulated reward,他其實是預測不出來的。所以這時候大人就要引導他,怎麼引導呢?就騙他說,如果你坐下來念書我就給你吃一個棒棒糖。所以,對他來說,下一個時間點會得到的 reward 就變成是positive 的。所以他就覺得說,也許 take 這個 study 是比 play 好的。雖然這並不是真正的 reward,而是其他人騙他的reward,告訴他說你採取這個 action 是好的。Reward shaping 的概念是一樣的,簡單來說,就是你自己想辦法 design 一些 reward,它不是環境真正的 reward。在玩 Atari 遊戲裡面,真的 reward 是遊戲主機給你的 reward,但你自己去設計一些 reward 好引導你的 machine,做你想要它做的事情。
    在這裡插入圖片描述

Reward shaping 是有問題的,因為我們需要 domain knowledge,舉例來說,機器人想要學會的事情是把藍色的板子從這個柱子穿過去。機器人很難學會,我們可以做 reward shaping。一個貌似合理的說法是,藍色的板子離柱子越近,reward 越大。但是 machine 靠近的方式會有問題,它會用藍色的板子打柱子。而我們要把藍色板子放在柱子上面去,才能把藍色板子穿過柱子。 這種 reward shaping 的方式是沒有幫助的,那至於什麼 reward shaping 有幫助,什麼 reward shaping 沒幫助,會變成一個 domain knowledge,你要去調的。

在這裡插入圖片描述
接下來就是介紹各種你可以自己加進去,in general 看起來是有用的 reward。舉例來說,一個技術是給 machine 加上 curiosity,所以叫 curiosity driven reward。如上圖所示,我們有一個 reward function,它給你某一個 state,給你某一個 action,它就會評斷說在這個 state 採取這個 action 得到多少的 reward。那我們當然希望 total reward 越大越好。
在這裡插入圖片描述
2. 第二個方向是 curriculum learning 。Curriculum learning 不是 reinforcement learning 所獨有的概念,其實在 machine learning,尤其是 deep learning 裡面,你都會用到 curriculum learning 的概念。舉例來說,curriculum learning 的意思是說,你為機器的學習做規劃,你給他喂 training data 的時候,是有順序的,通常都是由簡單到難。就好比說,假設你今天要交一個小朋友作微積分,他做錯就打他一巴掌,這樣他永遠都不會做對,太難了。你要先教他九九乘法,然後才教他微積分。所以 curriculum learning 的意思就是在教機器的時候,從簡單的題目教到難的題目。就算不是 reinforcement learning,一般在 train deep network 的時候,你有時候也會這麼做。舉例來說,在 train RNN 的時候,已經有很多的文獻都 report 說,你給機器先看短的 sequence,再慢慢給它長的 sequence,通常可以學得比較好。那用在 reinforcement learning 裡面,你就是要幫機器規劃一下它的課程,從最簡單的到最難的。
在這裡插入圖片描述
3. 第三個方向是分層強化學習(hierarchical reinforcement learning,HRL)。分層強化學習是說,我們有好幾個 agent。然後,有一些 agent 負責比較 high level 的東西,它負責訂目標,然後它訂完目標以後,再分配給其他的 agent,去把它執行完成。

在這裡插入圖片描述
這邊是舉一個例子,就是假設校長、教授和研究生通通都是 agent。那今天假設我們只要進入百大就可以得到 reward。假設進入百大的話,校長就要提出願景告訴其他的 agent 說,現在你要達到什麼樣的目標。那校長的願景可能就是說教授每年都要發三篇期刊。然後接下來這些 agent 都是有分層的,所以上面的 agent,他的動作就是提出願景這樣。那他把他的願景傳給下一層的 agent,下一層的 agent 就把這個願景吃下去。如果他下面還有其他人的話,它就會提出新的願景。比如說,校長要教授發期刊,但其實教授自己也是不做實驗的。所以,教授也只能夠叫下面的研究生做實驗。所以教授就提出願景,就做出實驗的規劃,然後研究生才是真的去執行這個實驗的人。然後,真的把實驗做出來,最後大家就可以得到reward。那現在是這樣子的,在 learn 的時候,其實每一個 agent 都會 learn。那他們的整體的目標就是要達到最後的reward。那前面的這些 agent,他提出來的 actions 就是願景這樣。你如果是玩遊戲的話,他提出來的就是,我現在想要產生這樣的遊戲畫面。但是,假設他提出來的願景是下面的 agent 達不到的,那就會被討厭。舉例來說,教授對研究生都一直逼迫研究生做一些很困難的實驗,研究生都做不出來的話,研究生就會跑掉,所以他就會得到一個 penalty。所以如果今天下層的 agent 沒有辦法達到上層 agent 所提出來的 goal 的話,上層的 agent 就會被討厭,它就會得到一個 negative reward。所以他要避免提出那些願景是底下的 agent 所做不到的。那每一個 agent 都是把上層的 agent 所提出來的願景當作輸入,然後決定他自己要產生什麼輸出。

2. 思考題

  1. Q:解決sparse reward的方法有哪些?
    A:Reward Shaping、curiosity driven reward、(reverse)curriculum learning 、Hierarchical Reinforcement learning等等。
  2. Q:reward shaping方法存在什麼主要問題?
    A:主要的一個問題是我們人為設計的reward需要domain knowledge,需要我們自己設計出符合environment與agent更好的互動的reward,這需要不少的經驗知識,需要我們根據實際的效果進行調整。