---
# System prepended metadata

title: '深度強化學習 Ch5 : Actor-Critic Model'
tags: [reinforcement learning]

---

###### tags: `reinforcement learning`
# 深度強化學習 Ch5 : Actor-Critic Model
<br>

## 1. 簡介

Actor-Critic 綜合了策略梯度法以及 Q-Learning 的特性，
會利用 **[價值函數]** 來評估 s 狀態的價值 (注意，這邊價值為狀態價值 $V_{\pi}$ )
並利用 **[策略函數]** 輸出 s 狀態動作的分布機率來決定 action，
執行動作後，再利用得到的 Return 和剛預測的價值計算 "advantage" 來衡量動作好壞

可以把 actor critic 看成兩個神經網路，分別代表以下功能 : 
:clown_face: - Actor(演員) : 也就是 [策略函數]，用來決定接下來的動作
:female-teacher: - Critic (評論家) : [價值函數] 用來評估狀態的價值 

利用 actor 和 critic 相互評估學習後得到更好的模型
概念上與 GAN 雷同 !
<br>

## 2. Advantage 優勢值
優勢值可以說是用來衡量在 "某個狀態" 做 "某個動作" 的好壞 (不跟價值搞混所以稱"優勢")，
用以下舉例來解說 : 
當我們在 [ 狀態t ] 時，此狀態資料會被做兩件事情
會分別送入兩神經網路 (actor、critic) 計算價值
(如下圖)
![](https://i.imgur.com/2OVAJdS.png)

當我們有 [狀態價值] 和 [動作的 Return] 後就可以計算 advantage

:::warning
$Advantage = (R - V^{\pi}(s) )$
:::

直觀意義就是，實際這個狀態下產生的價值，減去預測的價值

## 3. 演算法步驟
概念程式碼
```python=
gamma = 0.9
for i in epochs:
    state = environment.get_state()
    # Critic
    state_value = crtic(state)
    
    # actor
    policy = actor(state)
    action = policy.sample()    # 選擇動作
    next_state, reward = environment.take_action(action)
    
    # 計算 advantage
    value_next = crtic(new_state)
    advantage = (reward + gamma*value_next) - state_value
    
    # 計算並最小化 loss
    loss = -1 * policy.logprob(action) * advantage
    minimize(loss)
```


!!!! 概念上還在研讀 (停耕)


