# 李宏毅_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  環境中有一個固定的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  [資料連結_Training Agent for First-Person Shooter Game with Actor-Critic Curriculum Learning](https://openreview.net/forum?id=Hk3mPK5gg¬eId=Hk3mPK5gg) 上面範例是facebook訓練玩德軍總部的測試,殺敵人會得到positive reward,被殺則是negative reward。論文中提到,他們設置一些額外的reward讓機器學習的更好(簡報表格)。 有趣的是第一點,只要存活就會扣分,應該是希望訓練機器可以主動殺敵人,而不是躲避。 簡報下圖機械手臂則是openai的範例,過程中要訓練機器人可以將藍色板子套入柱子,這非常困難。如果加入reward shaping,讓板子靠近柱子的時候就加分,這依然無法成功,這時候需要的就是domain knowledge。 ### Curiosity  [論文連結_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  原始架構如下: * 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  要避免機器去探索不重要的事情,要加入另一個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  Curriculum Learning並非RL獨有的概念,在很多機器學習都可以用的到。意思即是,你為機器學習做規劃,給它的訓練資料是有順序的。就好像教小朋友,先教99乘法,然後再教微積分,由簡單到難的概念。已經有文獻說明,訓練RNN的時候,由短的sequence到長的sequence,通常可以有比較好的訓練效能。 以FB所訓練的德軍總部的Agent來說,他們的訓練方式就是從簡至難,分八種等級訓練。不同等級敵人血量、速度是不同的。論文中特別提到,如果直接以Class7訓練是無法成功的,一定要從Class0一路上去。 以機臂拿板為例,可能一開始就讓板子在柱內,機器只要學習簡單的壓下去。第二階段再提高板子的高度,也許機器會學到,只要板子太高就要壓下去,循序漸近就有機會學習放板子進去。 ### Reverse Curriculum Generation   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  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  實際案例,架構是一個上層的agent提出願景,下層的agent負責執行: * 上圖:藍色是agent,目標是走到黃色格子 * 由左至右是告訴藍色的agent先走到紅色(左一),走到之後再給定一個新的願景,讓它再走到下一個目標紅色(左二)... * 下圖:單擺是agent,目標是碰到黃色的球 * 由左至右一樣,紅色是上層提出的願景,單擺先到之後再往下一個願景移動,最後走到黃色位置
×
Sign in
Email
Password
Forgot password
or
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.