本方法使用兩個網路來達成學習動作,一為Actor網路,主要用來輸出動作,細心的讀者可能會發現這和之前所介紹的policy gradient的網路長的很像,沒錯!Actor網路就是從policy gradient 演化而來的,主要是改進policy gradient回合更新制的缺點,加了Critic網路之後就可以使用TD error當作advantage function做每步更新的步驟了

因此Actor-Critic演算法的核心理論就是

使用TD error當成policy gradient演算法的Advantage function

底下以莫凡python的github程式碼作解釋,有興趣可以自行觀看完整程式碼:

Critic network

 

 

Critic網路是來自於Q-learning,使用TD error當成網路的loss function,訓練的方式很簡單,當收集到一組資訊集的時候$s_t,a_t,s_{t+1},r_t$,分別把$s_t$與$s_{t+1}$送進網路後可以得到相對應的$q_t$與$q_{t+1}$,將網路輸出的數值與$r_t$代入下列公式中算出loss即可一步一步慢慢的更新網路參數使得TD error越來越小

```python=
with tf.variable_scope('squared_TD_error'):
    self.td_error = self.r + GAMMA * self.v_ - self.v
    self.loss = tf.square(self.td_error)    # TD_error = (r+gamma*V_next) - V_eval
with tf.variable_scope('train'):
    self.train_op = tf.train.AdamOptimizer(lr).minimize(self.loss)
```

Actor 網路更新演算法和之前所敘述的policy gradient更新方式一樣,只是Advantage function換成了Critic網路所提供的TD error

 ```python=
with tf.variable_scope('exp_v'):
    # self.a 回傳動作index
    # self.acts_prob 網路輸出的動作機率
    # self.acts_prob[0, self.a] 代表只計算執行動作的那個機率
    log_prob = tf.log(self.acts_prob[0, self.a])
    self.exp_v = tf.reduce_mean(log_prob * self.td_error)  # advantage (TD_error) guided loss

with tf.variable_scope('train'):
    self.train_op = tf.train.AdamOptimizer(lr).minimize(-self.exp_v)  # minimize(-exp_v) = maximize(exp_v)
```

Actor Critic network

因此,完整的Actor Critic網路表示如下,第一步先用Critic網路算出TD error,第二步再使用TD error對Actor網路進行參數更新

若您從書上看應該會看到書中是以底下這張圖來描述Actor Critc的方法介紹,都是闡述著相同的道理,經由TD error來更新Actor網路的策略來使得學習出的策略越來越好

參考資料:

1.https://www.youtube.com/watch?v=j82QLgfhFiY
2.https://www.jianshu.com/p/25c09ae3d206
https://towardsdatascience.com/an-intuitive-explanation-of-policy-gradient-part-1-reinforce-aa4392cbfd3c
3.https://towardsdatascience.com/understanding-actor-critic-methods-931b97b6df3f
4.https://www.youtube.com/watch?v=j82QLgfhFiY&list=PLJV_el3uVTsODxQFgzMzPLa16h6B8kWM_&index=6
5.https://github.com/MorvanZhou/Reinforcement-learning-with-tensorflow/blob/master/contents/8_Actor_Critic_Advantage/AC_CartPole.py

arrow
arrow
    文章標籤
    actor critic
    全站熱搜

    Darwin的AI天地 發表在 痞客邦 留言(0) 人氣()