---
# System prepended metadata

title: RL 筆記

---

# RL 筆記

## 馬可夫決策過程
### 表示方法
馬爾可夫決策過程（Markov Decision Processes, MDP）是強化學習（Reinforcement Learning， RL）的基礎，因而首先簡單介紹。
1.  $S$    表示狀態集（states）
2.  $A$   表示動作集（Actions）
3.  $P^{s'}_{s,a}$    表示狀態 $s$   下采取動作 $a$   之後轉移到狀態 $s'$  狀態的概率
4.  $R_{s,a}$     表示狀態 $s$   下采取動作 $a$   獲得的獎勵；  
5.  $\gamma$    代表衰減因子，表示動作影響隨著時間的推移產出的衰減

與馬爾可夫過程的區別在於，馬爾可夫決策過程不僅考慮狀態，還需考慮動作，即系統下一個時刻的狀態不僅與當前的狀態有關，也與當前採取的動作有關

### 策略和價值
策略（Policy）就是針對狀態S採取的動作。但是有如下約束條件：
1. 考慮轉移概率$P_{s,a}$
2. 獲得當前較大的獎勵$R$
3. 避免因此策略（動作）導致系統進入死胡同（致命懲罰）

為了滿足這些條件，用數學公式表達的目標函數就是這樣的一個最大化遞減獎勵期望：
$$E_\pi[\sum^\infty _{k=0}\gamma ^kR_k]=E_\pi[R_0+\gamma R_1+...]$$
其中$\gamma$為衰減因子，用於平衡當前獎勵和遠期獎勵的重要性，同時也避免在實現過程中計算無窮盡的可能。

當策略實施以後，就會對應一個動作，這樣把原有價值的概念擴展到狀態-動作對上，狀態-動作的**價值**的定義如下：
$$q(s,a)=R_{s,a}+E_\pi[\sum^\infty _{k=1}\gamma ^kR_k]$$

## RL
總共有兩個角色 : 
1. Actor(Agent) : 
    接受Environment給予的Observation，並根據Observation來做出對應的Action。目的是讓獲得的Reward最大
3. Environment : 
    給予Actor Observation﹑並針對Actor給出的Action給予Reward 

例子 : ![](https://i.imgur.com/zHc2Irk.png)

### 步驟
如一般的機器學習，一樣分成三步:

**1. Function with unknown**
![](https://i.imgur.com/JEC1FKF.png)
用一個Network來當我們的Actor，而這個Network就是我們要解的Function，對應不同的問題會有不同的Neural network，像是如果是圖像辨識則使用CNN。
* Input of neural network : The observation of machine represented as a vector or a matrix
* Output of neural network : Each action corresponds to a neuron in output layer


**2. Define Loss**
![](https://i.imgur.com/yr64SQG.png)

* Reward : 每次observation一次之後的Reward。
* Return : 所有Reward的總和，越大越好。
* Loss : 負的Return，越小越好。
* Episode : 全部跑過一次，並達到結束的目標，稱為一個episode。

**3. Optimize**
![](https://i.imgur.com/V1I2tLT.png)


## Some Properties & Examples

### Version 0

![](https://i.imgur.com/4XDeTMw.png)
![](https://i.imgur.com/5U0a3T8.png)

* An action affects the subsequent observations and thus subsequent rewa\rds
* *Rewards delay* : Actor has to sacrifice immediate reward to gain more long-term reward
* In the game "*大戰外星人*", only "fire" yield positive reward, so vision 0 will learn an actor that always "fire" 

### Version 1
![](https://i.imgur.com/vP4ppY0.png)
* Reward 是到了最後整個Episode(多個${s_N,a_N}$集合在一起，成為一個Episode)結束之後才做整個加總計算
* 缺點 : 把最後的$r_N$歸功於$a_1$不太合理 $\rightarrow$ 增加衰減因子$\gamma$ 

### Version 2
![](https://i.imgur.com/U1D7nzB.png)
* 讓$\gamma$作為衰見因子，讓距離時間久的動作影響較少 
Ex : $a_1$執行過後，$r_N$對於$G_1'影響相當少$。
* 缺點 : 這樣是否代表越早的動作就會有越多的分數?

### Version 3
![](https://i.imgur.com/eVIdY9t.png)
* 需要一個baseline，使不會全部的reward都是大於0的
* 該如何設定baseline ?



---
## Policy

### Policy Gradient
![](https://i.imgur.com/5daDnaP.png)

* Initialize actor network parameters $\theta^0$ ，隨機初始化
* For training iterations i=1 to T
    1. Using actor $\theta^{i-1}$ to interact
    2. Obtain data (**Trajectory**) $\{s_1, a_1\}, \{s_2, a_2\}, ...,\{s_N, a_N\}$
    3. Compute $A_1,A_2,...,A_N$
    4. Compute loss $L$
    5. $\theta^i \leftarrow \theta^{i-1}-\eta\nabla L$

其中1~3點都是在FOR迴圈中發生的，跟一般機器學習不同，會耗費較多時間


---

### On-policy vs Off-policy
這二者之間的區別，不在於選擇action的方式，而在於更新網絡參數的數據的收集方式。
* On-policy : The actor to train and the actor for intercasting is the same. 
只能使用當前正在優化的policy生成的數據來進行訓練，當你使用一條(state, action, reward, new_state)的數據對policy網絡的參數進行了更新之後，這個“正在優化”的policy立即就變了，於是，你就要用它來生成新的一條數據，再繼續進行後面的訓練，並且你剛才用於訓練的那條數據已經“過時”了，不能再使用，需要丟棄掉。
**讓$\theta ^i$只根據$\theta^{i}$的資料來進行學習，並且用完就丟，換下一個**

* Off- policy : The actor to train and the actor for interacting is different.
**讓$\theta ^i$根據$\theta^{i-1}$的資料來進行學習。**

---

### PPO
**Proximal Policy Optimization**
簡單來說，the actor to train 應該要知道他跟actor to interact的差距。