# 李宏毅_ATDL_DRL Lecture 8 ###### tags: `Hung-yi Lee` `NTU` `Deep Reinforcement Learning` [課程撥放清單](https://www.youtube.com/playlist?list=PLJV_el3uVTsODxQFgzMzPLa16h6B8kWM_) ## DRL Lecture 8: Imitation Learning [課程連結](https://www.youtube.com/watch?v=rl_ozvqQUU8&list=PLJV_el3uVTsODxQFgzMzPLa16h6B8kWM_&index=8) 課程說明:如果今天連Reward都沒有,那該如何處理? ### Introduction ![](https://i.imgur.com/skixZLr.jpg) Imitation Learning又稱為learning by demonstration,或稱apprenticeship<sub>(學徒)</sub>learning。 在imitation learning中的setup: * 手上有expert demonstration * 機器與環境互動,但無法得到reward,只能透過expert demonstration來學習什麼是好,什麼是不好 * 多數情況下難以定義reward * 自駕車為例,撞死人或動物很難定義reward,但可以透過expert demonstration來確定學習狀況 * chat-bot難以定義怎麼樣的對話是好的,但可以利用大量人類對話記錄來估測好壞 如果現實上難以定義reward,但是可以收集很多人、專家的範例,那就可以考慮使用imitation learning,課程會說明兩種方法: 1. Behavior Cloning 2. Inverse Reinforcement learning(inverse optimal control) ### Behavior Cloning ![](https://i.imgur.com/fow1gRC.jpg) Behavior Cloning與supervised learning是一樣的,以自駕車為例,可以收集行車記錄器的資料,當看到什麼樣的景色,人採取什麼樣的行為,那機器就跟著做就可以。 模型的架構也很簡單,訓練資料就是當看到什麼樣的state-$s$(input),希望它的action-$a$(output)與人類愈接近愈好,因此這只是一個很簡單的supervised learning的問題。 ### Behavior Cloning ![](https://i.imgur.com/O8Bhc0o.jpg) 但behavior cloning的問題在於,如果只單純的看過expert的資料,那整個observation(state)是受限的。 以自駕車為例,人類都知道,要過彎就是順利紅線開就可以,但如果遇到一個很笨的agent沒有跟著過彎,遇到要撞牆的時候,機器就不知道該如何處理,因為訓練資料集可能沒有撞牆的資料。 因此單是觀察expert的資料是不夠,需要再引入Data Aggregation的技術,我們會希望擁有expert在各種極端情況下會有的各種行為 ### Behavior Cloning ![](https://i.imgur.com/Rb9n6uo.jpg) 以自駕車為例,假設一開始的actor為$\pi_1$,$\pi_1$在開車的過程中,expert不斷的告訴actor要怎麼做,但這時候$\pi_1$是會自己做自己的事,雖然expert一直說要右轉,但$\pi_1$還是去撞牆。這邊主要記錄的是,expert在$\pi_1$看到的observation會有什麼樣的反應,再拿著這些資料來訓練,得到$\pi_2$。 如此反覆下去,這樣子的方法即為Data Aggregation [影片連結](https://www.youtube.com/watch?v=j2FSB3bseek) ### Behavior Cloning ![](https://i.imgur.com/GvqQsmP.jpg) Behavior Cloning裡面比較重要的一點在於,對機器而言,什麼該學,什麼不該學?如果是以上面的影片-謝爾頓學中文的範例來說,老師在教的時候邊說邊有手勢,如果謝爾頓有學到語音,那可能沒什麼問題,但是如果只學到手勢,那就有問題了。 ### Mismatch ![](https://i.imgur.com/LxSQWqh.jpg) Behavior Cloning的另一個問題在於,訓練資料與測試資料是mismatch,這可以用data aggregation來稍微解決這個問題。 要知道,實作上,訓練、測試資料的分佈是不一樣的。在RL裡面,action會影響接下來看到的state,實作Behavior Cloning的時候,機器只能夠觀察到expert的state-action的pair(訓練資料,假設為$\hat{\pi}$)。 那如果希望可以learn一個actor來cloning expert,$\pi^*$,希望它跟$\hat{\pi}$愈接近愈好。如果它們可以完全的一模一樣,那訓練與測試時候所看到的state就會是一樣,所採取的action也是一樣。但是問題在於很難learn出一個與$\hat{\pi}$一模一樣的$\pi^*$,在RL中,只要差一點就是整個不一樣的結果。 因此,Behavior Cloning並沒有辦法完全解決imatation learning的問題。 ### Inverse Reinforcement Learning ![](https://i.imgur.com/diqY3L5.jpg) ![](https://i.imgur.com/fJY2ITg.jpg) 原始的RL中,有ENV,有Reward function,然後利用RL可以learn出一個Optimal actor。但IRL是相反的,沒有Reward function,只有一堆expert的demonstration-$\hat{\tau}$與ENV。 IRL中的$\hat{\tau}$就是expert的歷程記錄,如果是電玩的話就是每一場遊戲的記錄,自駕車的話就是人開車的記錄。在機器與環境的互動過程中,機器並沒有辦法得到reward,因為reward必需由expert的demonstration推論出來,反推出reward function,推論expert因為什麼樣的reward function來採取這樣的行為。有了reward function就可以套用一般的RL來找出optimal actor。 因此,IRL是先找出reward function,再利用reward function來找出Optimal actor。這麼做的好處在於,有時候簡單的reward function可以推導出複雜的行為。 ### Framework of IRL ![](https://i.imgur.com/cCo4B1x.jpg) 實作流程: * 有一個expert-$\hat{\pi}$ * expert與環境互動,得到很多的記錄$\left\{ \hat{\tau_1}, \hat{\tau_2}, \hat{\tau_N} \right\}$ * 如果是遊戲的話就讓高手玩幾場遊戲,並記錄state-action的sequence * 有一個actor-$\pi$ * actor也跟環境互動,也有N場遊戲的記錄 * 利用兩造的記錄來反推reward function * 原則上,expert就是最棒的,先射箭再畫靶的概念 * expert得到的分數一定會比actor的分數還要高,即$\sum_{n=1}^N R(\hat{\tau}_n) > \sum_{n=1}^N R(\tau)$ * 得到reward function-$R$之後,就可以套用一般的RL來訓練actor * actor就會當前的reward function來maximize reward * reward function可以是一個`nn`,input-$\tau$,output-分數。也可以就input state-action pair,然後output分數,再將整個sequence的state-action pair分數加起來 * reward function會給expert高分,而給actor低分,actor再想辦法利用reward function來maximize reward * 最終的結果,reward function無法分辨出誰的分數比較高,也就是兩個一樣好,那這時候actor就跟expert一樣好 基本上,只要把actor想成generator,reward function想成discriminator,那它就是一個GAN,因此收斂上會有所困難,這部份取決於$R$的定義。 ### GAN vs IRL ![](https://i.imgur.com/iKSVTmy.jpg) 觀念上IRL與GAN是一樣的,只是換個方式來說明。 ### Parking Lot Navigation ![](https://i.imgur.com/3tyWZ0K.jpg) 利用IRL可以學會各種不同的開車風格。 IRL訓練過程中不需要太多的訓練資料,通常只有少許的exper demonstration,實際上機器還是可以跟環境互動非常多次,因此文獻上都用少數的資料就可以訓練出有趣的結果。 這個範例是教車子在停車場停車,每個row的左邊四張圖是demonstration,最右邊的紅色路徑是機器開車的結果。 ### Robot ![](https://i.imgur.com/7vKjuNb.jpg) ![](https://i.imgur.com/1hNs9Pa.jpg) ![](https://i.imgur.com/k7e7Ohr.jpg) [影片連結](http://rll.berkeley.edu/gcl/) 影片是人拉機器的手去擺盤、學會倒水,教20次,每次放置位子不同。 ### Third Person Imitation Learning ![](https://i.imgur.com/1kpZ3uU.jpg) [論文連結_Third-Person Imitation Learning](https://arxiv.org/abs/1703.01703) 在教機器的時候有一點很重要,就是機器所看的跟人所看的視野是不一樣的。人拉著機器手臂學,那是第一人稱的學習,如果要教機器人打高爾夫球,可能就是讓機器看著人打,這是第三人稱的視角,也就是機器看著打球的視野跟它真的上場的時候的視野是不同的。要怎麼讓機器在第三人稱視野所看的東西應用在第一人稱視野,就需要用到Third Person Imitation Learning。 ### Third Person Imitation Learning ![](https://i.imgur.com/LJBMpIl.jpg) 這是一個除了Imitation learning之外還有Domain-Adversarial Training的技術。Domain-Adversarial Training應用在GAN的時候,我們希望透過一個feature extractor讓兩個不同domain的image通過之後,讓機器無法分辨它是來自那一個domain。 在Third Person Imitation Learning也是一樣的道理。希望利用feature extractor讓機器的第一人稱、第三人稱視野所看到的東西一樣,只抽出重要的資訊。 ### Recap: Sentence Generation & Chat-bot ![](https://i.imgur.com/F6C08rF.jpg) Sentence Generation & Chat-bot也可以想成是imitation learning。把寫出來每一個word都視為一個action,所有的word合起來就是一個episode。 如果你要機器寫詩,那就給它看唐詩三百首,這個唐詩三百首就是expert demonstration,每一個詞彙就是一個action。如果是Chat-bot,那人類的對話記錄就是expert demonstration。 課程上所提過,Maximum likelihood對應到Imitation learning就是behavior cloning,但光這樣是不足的,應該用Sequence GAN,而Sequence GAN對應到的就是IRL。