---
# System prepended metadata

title: 李宏毅_ATDL_DRL Lecture 8
tags: [NTU, Hung-yi Lee, Deep Reinforcement Learning]

---

# 李宏毅_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。
