---
# System prepended metadata

title: 'MIT Intro to Deep Learning: Lecture 5 Reinforcement Learning'
tags: [course, ' Deep learning']

---

---
tags: course, Deep learning
---

# MIT Intro to Deep Learning: Lecture 5 Reinforcement Learning


[Course link](https://www.youtube.com/watch?v=nZfaHIxDD5w&list=PLtBw6njQRU-rwp5__7C0oIVt26ZgjG9NI&index=5)

[Lab](https://github.com/aamini/introtodeeplearning/blob/master/lab3/RL.ipynb)

## Introduction

之前講的都是讓模型在固定的資料集之中學習，但這堂要講的是讓它在環境中自行學習，當它在環境中行動時，就等於是在探索整個環境並學習如何去解決task。


強化學習已經在自駕車、機器手臂、圍棋與遊戲上有許多應用
![](https://i.imgur.com/bWKNzl7.jpg)

## Class of learning problems

* 監督式學習是讓模型可以學習如何輸入x，然後輸出我們要的y
* 非監督式學習是要讓模型可以學習到資料中的結構(Structure in the data)
* 強化學習是輸入state-action pairs，state是對系統的觀察或者輸入，action是agent想要在環境中做的行動，目標則是最大化reward

## Key concept of RL

RL有很多專有名詞，最好了解一下之後的學習會比較順利

**Agent**就是我們想訓練的神經網路模型，也就是採取行動的那個東西，在現實世界中，你們都是agent，如果一個自駕車想學習如何駕駛，自駕車就是agent

**Environment**其實就是agent採取action的世界，現實世界中，The world is your environment

**action**就是agent送到environment的指令，簡單來說就是agent可以從一個有限集合中取得一個action並在環境之中執行

![](https://i.imgur.com/etA6uf0.jpg)


**state**，環境接收到action之後會傳回**observation**給agent，這個observation就是state。可以想成是agent做出行動之後對自己狀態改變的情況，比如你往前走出一步，自己(agent)就會知道你剛剛往前走出一步(action)，而知道自己的位置(state)有所改變，並且基於這個更新後的state而走出下一步

![](https://i.imgur.com/elXwNll.jpg)


**Reward**，RL的就目標在於agent要最大化環境的reward。在做出行動，agent會從環境中收到reward，也就是判斷agent的行動是成功或者失敗的回饋。你不必讓agent每次做出行動都要得到reward，reward可能會delay，或是整個過程中只有在最後得到一個reward。reward就是用來評估agent的行動，所以如果reward達到最大，就代表agent的行動已經做到最好

![](https://i.imgur.com/asHtdch.jpg)


Total Reward
![](https://i.imgur.com/KGFLwsv.jpg)


Discount Reward
![](https://i.imgur.com/BFaldNP.jpg)

* discount factor介於0到1之間
* 例子:你要選擇我今天給你五塊錢或是在未來十年我給你五塊錢?
  * 你會選前者，這是因為你認為在時間的推移下，五塊錢可能不會像現在這樣有價值


## Q function

利用剛剛的Discount Total Reward概念，可以推出Q function。

![](https://i.imgur.com/b5rj8s0.jpg)

* Q function將在時間點t的state和action作為input，並輸出**Expected total future reward**，也就是在那個時間點，agent所期望獲得的reward

* Q越高，表示這個action越是我們想要的，所以我們會想要採取能造成最高Q的action

* 現在的問題是，agent要如何利用這個Q function去採取action?
(開放式問題)


![](https://i.imgur.com/4HzdNsY.jpg)

* **Policy**就是幫助agent能從所有action之中選擇出這個最大化Q的action的策略


## Deep Reinforcement Learning algo

實際上有三種，Value-based, Policy-based, Model-based

這堂只講前面兩種

![](https://i.imgur.com/uBQAU7y.jpg)

* Value-based是去學出Q function，並用這個Q function來決定我們的Policy
* Policy-based是跳過Q function，直接去學出Policy

## Value Learning 

以Atari breakout為例
![](https://i.imgur.com/tcQFsj1.jpg)

* Q function代表的是在某個時間點採取某個行動所能擊落的方塊，但實際情況下其實不一定可以非常直覺的估計出Q function
* 比如A、B兩種情況下，你認為哪種可以得到比較高的Q呢?

* A是一個比較保守的(s,a) pairs，當球落下的時候他會利用板子的中間去接住球

![](https://i.imgur.com/iMZmqTO.gif)

* B則是會利用板子的邊緣去盡力接住球

![](https://i.imgur.com/bhKu6wf.gif)


B會比較好的原因是它可以處理到邊邊的方塊


## Deep Q Network (DQN)

* 實際上我們要怎麼利用Deep learning來model出Q function呢?
* 這個NN要能接收state和action，並輸出Q Value
* 在這個情況下，你得執行這個NN很多很多次，最後總結才會知道哪一個NN才能產生出最高的Q
![](https://i.imgur.com/rDeaxt0.jpg)

* 或者你可以訓練一個輸入state，輸出很多種不同的Q value的NN，而這些Q都是由**相同的state與不同的action**所產生
* 這樣你只需要執行這個NN一次，就可以得到很多Q value了，並且可以從中選擇最大的Q與其對應的action，最後選擇這個action去執行

![](https://i.imgur.com/47nH4tM.jpg)

訓練agent需要Ground Truth，而DQN的Ground Truth就是Target return
* Target return是指你**在這個時間點做了最好的action，並且能在未來的每一個時間點都做最好的action，再加入合適的discount**，這整個過程中所產生的Q，就是所謂的**true Q value**，也就是Ground truth
![](https://i.imgur.com/mqjDkGX.jpg)


* Predicted Q value就是NN的輸出
![](https://i.imgur.com/4OgDbyY.jpg)


* Loss function
  * 將Predicted Q和True Q相減平方就可以得到mean square error of Q 
![](https://i.imgur.com/HEWNXQJ.jpg)

## Deep Q Summary

* Summary
![](https://i.imgur.com/SU4BMgV.jpg)

* DQN Atari的input是圖片的pixel，output是應該要採取的action
![](https://i.imgur.com/DLnUcVE.jpg)
![](https://i.imgur.com/WMZ60Tx.jpg)

## Downsides of Q-learning

* Q-learning的主要缺點是沒辦法做出複雜的action，像是如果你有一個很大的action space或是連續的action space的時候，Q-learning都無法處理
* 另一個問題是它沒辦法隨機學習
![](https://i.imgur.com/05ywC4b.jpg)
* Policy learning可以解決上述Q-learning的問題


## Policy Learning


不同於Q learning，Policy learning會直接輸出當下那個state應該做的policy，或者說，輸出一個action space的機率分布

![](https://i.imgur.com/d0TztFT.jpg)

並且我們會針對這個policy去做優化

* 下圖表示在累積很多經驗之後，action 1會產出最大的reward，而2跟3通常是不好的action
* 每次在不同時間點要採取行動的時候，只需要從這個機率分布中取出一個最佳action來做

![](https://i.imgur.com/vMhH0Zz.jpg)

* 這樣做的好處是，由於輸出是一個機率分布，所以其實action可以是連續的

* 原本的discrete的action space的問題會是，該往右/左走還是待著不動?
![](https://i.imgur.com/237wWcM.jpg)

* continuous的action space則是，該以甚麼速度往右/左走，而速度的值當然是連續的
![](https://i.imgur.com/uDD7EVZ.jpg)

* 有趣的是，一旦這樣做之後，我們可以把這個機率分布假設為常態分布，並由此輸出它的平均值和變異數
* 之後就可以透過從這個機率分布之中取樣獲得我們要的速度
![](https://i.imgur.com/bxwmzkp.jpg)

## Training Policy Gradients: Case study

以自駕車為例
![](https://i.imgur.com/rSt6GgB.jpg)


* 訓練的步驟如下
  * 前三個步驟是初始化、執行policy、紀錄state, action, reward
![](https://i.imgur.com/gtlfEDr.jpg)
  * 然後要把bad action(紅色)做懲罰，降低做這種action的機率，以免之後還會做到這樣的action並且獎勵good action(綠色)
  ![](https://i.imgur.com/iBaYHM9.jpg)

* 訓練結束後，更有趣的是我們明明沒有教他道路的邊緣在哪裡，他就可以自己走出不會撞牆的路線了
* 問題在於.....，最後兩步驟怎麼做?
![](https://i.imgur.com/ZBu8gwB.jpg)

### Loss function

* 舉例來說，如果reward很高而action的機率也很高，表示這個action非常好(loss越低越好)
* 但若是reward很低而action的機率卻很高的情況下，loss會很高，而在下一個迭代的時候就會想讓loss變小
* 利用這樣的loss機制來學習，就是所謂的**policy gradient**
![](https://i.imgur.com/Sjbf4Wc.jpg)

## RL in real life

到目前為止我們還沒有看到RL出現在各種真實世界上並獲得應用的原因是其中一個步驟有非常嚴重的限制

* 也就是我們不能在一個很安全的地方一直嘗試我們的policy
* 但模擬又沒辦法真的做到完全真實，所以將模擬的模型遷移到真實世界常常不太可行
![](https://i.imgur.com/6ldCUhS.jpg)

* 解法就是用一個全新的路況模擬器
  * VISTA就是利用真實的路況影片來訓練一個虛擬的agent，這樣就不需要做任何的遷移了 
![](https://i.imgur.com/1uvjnuS.gif)
![](https://i.imgur.com/NcdBTLn.gif)
* 這是第一次能不需要遷移就可以訓練好一個RL模型

## Deep Reinforcement Learning Applications

* Alpha Go
![](https://i.imgur.com/J4VKQLC.jpg)
![](https://i.imgur.com/BtBjxQs.jpg)
![](https://i.imgur.com/hIzpVHX.jpg)

* Alpha Zero - Entirely self play
![](https://i.imgur.com/0koh5tA.jpg)
![](https://i.imgur.com/c7aaSiY.jpg)
![](https://i.imgur.com/CWK0DDH.jpg)

## Summary

![](https://i.imgur.com/x51Q23B.jpg)
