# 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
例子 : 
### 步驟
如一般的機器學習,一樣分成三步:
**1. Function with unknown**

用一個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**

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

## Some Properties & Examples
### Version 0


* 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

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

* 讓$\gamma$作為衰見因子,讓距離時間久的動作影響較少
Ex : $a_1$執行過後,$r_N$對於$G_1'影響相當少$。
* 缺點 : 這樣是否代表越早的動作就會有越多的分數?
### Version 3

* 需要一個baseline,使不會全部的reward都是大於0的
* 該如何設定baseline ?
---
## Policy
### Policy Gradient

* 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的差距。