# 李宏毅_ATDL_DRL Lecture 7 ###### tags:###### tags: `Hung-yi Lee` `NTU` `Deep Reinforcement Learning` [課程撥放清單](https://www.youtube.com/playlist?list=PLJV_el3uVTsODxQFgzMzPLa16h6B8kWM_) ## DRL Lecture 7: Sparse Reward [課程連結](https://www.youtube.com/watch?v=-5cCWhu0OaM&list=PLJV_el3uVTsODxQFgzMzPLa16h6B8kWM_&index=7) 當我們用RL訓練agent的時候,多數情況下並沒有辦法得到reward,這種情況下要訓練agent是非常困難的。即使應用exploration技巧讓action擁有随機性還是難以得到reward。課程上會提到三種方法來處理Sparse Reward的問題。 ### Sparse Reward ![](https://i.imgur.com/P3W8f6o.jpg) 環境中有一個固定的reward,它是真正的reward,但我們為了要讓機器可以學習,因此設置一些reward來引導agent。 舉例來說,如果小孩是agent,他有兩個選擇: * 玩:玩的當下很high,會得到reward-$r_{t+1}=1$,但考試的時候考不好,因此reward-$r_{t+100}=-100$ * 讀書:玩的當下很不開心,會得到reward-$r_{t+1}=-1$,但考試的時候考很好,因此reward-$r_{t+100}=100$ 但小孩基本上只看的到眼前,想不到未來,因此需要大人引導他,如果你乖乖讀書我就給你棒棒糖,這時候讀書所得的reward就會變成是positive,即reward-$r_{t+1}=1$,但這reward並不是過程中真正的reward,而是為了引導他所設置出來的。 ### Reward Shaping ![](https://i.imgur.com/LeBbBe6.jpg) [資料連結_Training Agent for First-Person Shooter Game with Actor-Critic Curriculum Learning](https://openreview.net/forum?id=Hk3mPK5gg&noteId=Hk3mPK5gg) 上面範例是facebook訓練玩德軍總部的測試,殺敵人會得到positive reward,被殺則是negative reward。論文中提到,他們設置一些額外的reward讓機器學習的更好(簡報表格)。 有趣的是第一點,只要存活就會扣分,應該是希望訓練機器可以主動殺敵人,而不是躲避。 簡報下圖機械手臂則是openai的範例,過程中要訓練機器人可以將藍色板子套入柱子,這非常困難。如果加入reward shaping,讓板子靠近柱子的時候就加分,這依然無法成功,這時候需要的就是domain knowledge。 ### Curiosity ![](https://i.imgur.com/R4Qd8Zk.jpg) [論文連結_Curiosity-driven Exploration by Self-supervised Prediction](https://arxiv.org/abs/1705.05363) 我們可以自己加入看起來是有用的reward,其中一個作法就是幫機器加入Curiosity<sub>(好奇心)</sub>,因此稱為curiosity driven reward。 作法上,我們在原始rewrad function之外再加入一個額外的rewrad function,稱為ICM<sub>(intrinsic curiosity module)</sub>,用來幫機器加上好奇心: * input: state-$s_1$、action-$a_1$、state-$s_2$ * output: $r^i_t$ * total reward: $R(\tau)=\sum_{t=1}^T r_t + r_t^i$ 這時候訓練不再只是單純的希望$r$愈大愈好,也希望從ICM中得到的reward-$r^i$愈大愈好。 ### Intrinsic Curiosity Module ![](https://i.imgur.com/TAK8j9T.jpg) 原始架構如下: * input: state-$s_t$、action-$a_t$、state-$s_{t+1}$,output: $r^i_t$ * ICM中的`nn`會take $a_t$與$s_t$,然後output-$\hat{s}_{t+1}$ * 根據$a_t$與$s_t$來predict接下來會看到的$\hat{s}_{t+1}$ * 接下來比較根據機器預測的$\hat{s}_{t+1}$與真實的$s_{t+1}$像不像,越不像reward就愈大,鼓勵冒險的概念,愈難以預測得到的reward就愈大。 ICM中的`nn`是另外訓練出來的,給定$a_t, s_t$情況下,如何預測$\hat{s}_{t+1}$,在agent互動的時候,這個`nn`要fix住。 這其中的一個問題是,有一些state不好預測,但它也不見得是好的,也許這些state是不應該被嚐試的,覺有好奇心是不夠的,還要讓機器知道什麼樣的事情是真正重要的。 ### Intrinsic Curiosity Module ![](https://i.imgur.com/MIXvXMt.jpg) 要避免機器去探索不重要的事情,要加入另一個module,learn一個feature extractor<sub>(簡報中黃色格子)</sub>: * input: state-$s_t$,output: feature vector * 我們希望feature extractor可以將state中沒有意義的東西濾掉,像是遊戲過程中的一些背景資訊。 這時候給定Network1的就是給定action-$a_t$,以及state-$s_t$的feature representation,output則是state-$\hat{s}_{t+1}$的feature representation,再看這個預測的結果與真正state-$s_{t+1}$的feature representation是否相似,愈不像reward愈大。 feature extractor的訓練方法: * 利用另一個`nn`-Network2,以兩個feature extractor的feature representataion vector做為input * output為action-$\hat{a}_t$,目標是希望預測的action-$\hat{a}$與真正的action-$a$愈接近愈好 * 預測要從state-$s_t$跳到state-$s_{t+1}$要採取那一個action才能做到 這麼做的好處是,因為要用抽出的feature預測action,因此如果本質上是跟action無關的資訊就會被濾掉,自然不會出現在feature representation。 ### Curriculum Learning ![](https://i.imgur.com/D8I6oxO.jpg) Curriculum Learning並非RL獨有的概念,在很多機器學習都可以用的到。意思即是,你為機器學習做規劃,給它的訓練資料是有順序的。就好像教小朋友,先教99乘法,然後再教微積分,由簡單到難的概念。已經有文獻說明,訓練RNN的時候,由短的sequence到長的sequence,通常可以有比較好的訓練效能。 以FB所訓練的德軍總部的Agent來說,他們的訓練方式就是從簡至難,分八種等級訓練。不同等級敵人血量、速度是不同的。論文中特別提到,如果直接以Class7訓練是無法成功的,一定要從Class0一路上去。 以機臂拿板為例,可能一開始就讓板子在柱內,機器只要學習簡單的壓下去。第二階段再提高板子的高度,也許機器會學到,只要板子太高就要壓下去,循序漸近就有機會學習放板子進去。 ### Reverse Curriculum Generation ![](https://i.imgur.com/qRmOu6a.jpg) ![](https://i.imgur.com/dBWSyZF.jpg) Reverse Curriculum Generation,一種比較通用幫機器設計課程的方法: * 假設有一個最理想的結果goal state-$S_g$ * 以剛才的手臂拿板進柱的範例來說,把板子放進去柱子就是goal state * 根據goal state來找尋其它接近goal state的state,假設為$S_1$ * 這必需根據任務來設計怎麼從$S_g$來sample出$S_1$ * 由$S_1$開始互動,看是不是能夠達到$S_g$,每一個state在互動之後都會得到reward-$R(S_1)$ * 利用reward將極端的case去掉,reward過大代表太簡單,代表機器已經會了,過小代表太難,代表機器現在學不會,這種極端情況通通去掉 * 利用對機器比較剛好的case再sample更多的state ### Hierarchical Reinforcement Learning ![](https://i.imgur.com/FspG6wv.jpg) Hierarchical Reinforcement Learning,我們有很多個agent,有的負責high-level,負責訂目標,再分配給其它agent來執行。 假設校長、教授、菸酒生都是agent,reward的設定:只要進入百入就可以得到reward: * 校長提出願景,要達到什麼樣的目標,舉例,教授每年要發三篇期刊 * 教授收到校長的願景之後叫下面的苦命研究生做實驗 * 菸酒生才是真正做實驗的人 * 最後大家得到reward 如果下層的agent無法達成上層所提出的goal的話,上層的agent就會被討厭而得到一個penalty。因此,上層的output就是下層的input,下層再決定自己的output。論文裡面一個很有趣的論點,假設原本要教授寫期刊,結果變成Youtuber,那就將上層校長的願景也改成Youtuber,那就知道成為Youtuber要怎麼做了。這是Hierarchical Reinforcement Learning可以訓練起來的一個技巧。 ### Hierarchical Reinforcement Learning ![](https://i.imgur.com/nYsTxmA.jpg) 實際案例,架構是一個上層的agent提出願景,下層的agent負責執行: * 上圖:藍色是agent,目標是走到黃色格子 * 由左至右是告訴藍色的agent先走到紅色(左一),走到之後再給定一個新的願景,讓它再走到下一個目標紅色(左二)... * 下圖:單擺是agent,目標是碰到黃色的球 * 由左至右一樣,紅色是上層提出的願景,單擺先到之後再往下一個願景移動,最後走到黃色位置