Deep Reinforcement Learning (6) --- Actor-Critic
從 Policy Gradieint 開始說起
在前面的課程筆記 “Deep Reinforcement Learning (1) — Policy Gradient (Review)“ 中,最後我們推導出了 policy gradient 的通式如下 :
$$
\nabla\bar{R}{\theta}\approx\frac{1}{N}\sum\limits{i=1}^{N}\sum\limits_{t=1}^{T}\big(\sum\limits_{t’=t}^{T_n}\alpha^{t’-t} r_{t’}^n-b\big)\nabla\log P_{\theta}(a_t^n|s_t^n)
$$
然而在這樣的通式中,$G_t^n=\sum\limits_{t’=t}^{T_n}\alpha^{t’-t} r_{t’}^n$ 其實是非常不穩定的,因為互動的過程中其實是充滿隨機性的,每一個 $s_t$,會有對應的隨機 $a_t$,隨後又會有一個隨機的 $s_{t+1}$ 出現,這過程中,$r_t$ 便也充滿了隨機性於其中,而 $G_t^n$ 就是這些 $r_t$ 的總和,當然會非常不穩定。
換一個角度來說,我們就是藉由抽樣 $G_t^n$ 來做梯度的估測,但如果我們的抽樣數不夠多 ( 通常都會不夠多 ) 那麼如果我們抽到表現較差的 $G_t^n$,便會很有可能影響到後面的結果。因此要解這一個問題,就必須要想辦法處理 $G_t^n$ 這種不穩定的狀況,再直接一點說,我們能不能直接估出 $G_t^n$ 的期望值來取代 $G_t^n$ ? 既可以有表徵的能力,也可以避免 $G_t^n$ 的震盪來影響結果。
那,$\mathbb{E}\big[G_t^n\big]$ 到底指的是什麼呢 ?
與 Q-Learning 結合
從 $\mathbb{E}\big[G_t^n\big]$ 的定義來看,其實它是等同於 Q-function 的,兩者都是在計算在時間 $t$ 之後獲得 cumulated reward 的期望值是多少。
$$
\mathbb{E}\big[G_t^n\big]=Q^{\pi_{\theta}}(s_t^n,a_t^n)
$$
因此我們可以將 policy gradient 的通式利用 Q-function 來做修改,然後 $b$ 則以 $V^{\pi_{\theta}}(s_t^n)$ 來取代。$V$ 是不考量 action 的 cumulated reward,所以從意義上來看,$V$ 其實是 $Q$ 針對 action 的期望值,因此可以依舊可以確保 $Q^{\pi_{\theta}}(s_t^n,a_t^n)-b$ 這一項不會恆正。
$$
\nabla\bar{R}{\theta}\approx\frac{1}{N}\sum\limits{i=1}^{N}\sum\limits_{t=1}^{T}\big(Q^{\pi_{\theta}}(s_t^n,a_t^n)-V^{\pi_{\theta}}(s_t^n)\big)\nabla\log P_{\theta}(a_t^n|s_t^n)
$$
這種型態結合了 Actor 與 Critic ,便稱為 Actor-Critic。
Advantage Actor-Critic ( A2C )
在上述的實作上,並不會就這樣直接做,原因是因為這樣的結構我們變成要使用兩個 network 來做估測,那也相當於可能會讓誤差變成兩倍。( 兩個網路都可能會造成誤差 )
因此在實作上會稍微做一點調整
$$
Q^{\pi_{\theta}}(s_t^n,a_t^n)=\mathbb{E}\big[r_t^n+V^{\pi_{\theta}}(s_{t+1}^n)\big]\overset{let}{=}r_t^n+V^{\pi_{\theta}}(s_{t+1}^n)
$$
這裡其實是給了一個蠻強的前提在裡面,在直覺上來說稍微可以理解,$r_t^n$ 是單一個步驟的 reward ,因此 variance 較小,有沒有取期望值是可能有機會相等的。其次,在文獻上也可以由實驗發現這樣的前提下做出來的實驗是夠好的。
藉由上面這樣的強假設,我們可以再一次改寫梯度的估測通式
$$
\nabla\bar{R}{\theta}\approx\frac{1}{N}\sum\limits{i=1}^{N}\sum\limits_{t=1}^{T}\big(r_t^n+V^{\pi_{\theta}}(s_{t+1}^n)-V^{\pi_{\theta}}(s_t^n)\big)\nabla\log P_{\theta}(a_t^n|s_t^n)
$$
這樣的改變,我們只需要利用一個 network 來估測梯度,但換來一個不穩定的隨機變量 $r_t^n$,但前面我們也提到,$r_t^n$ 的 variance 其實不大,因此這樣的交易還算划算。
因此我們可以了解整個 A2C 的過程如下圖 :

Tips of A2C
在 A2C 中,我們仍然會使用一些技巧來幫助訓練 :
1. 權重共享
在整個 A2C 中,我們有兩個網路結構需要訓練 : $V$ 與 $\pi$,這兩個網路結構其實都是針對 state 的輸入來進行目標的估測,因此在實務上,會將這兩個網路的前半部分做權重共享來減少訓練參數。
2. 限制 $\pi$ 的輸出 entropy 必須要大於某值
主要原因其實就是為了加強整個網路的探索能力,當 entropy 越高,相對地對於不同 action 的選擇機率就會越接近,這樣可以確保探索到其他的 actions。
Asynchronous Advantage Actor-Critic ( A3C )
說穿了 A3C 就是一個平行運算的應用,利用不同可平行運算的單元同時進行運算並更新權重,這樣可以讓整個訓練速度加快許多。

(圖片來源 : Simple Reinforcement Learning with Tensorflow Part 8: Asynchronous Actor-Critic Agents (A3C))
從上圖來看,我可以同時將兩個網路結構放在不同的運算單元中,同時進行計算,先計算出梯度的就可以先對參數做更新,所以如果 worker 2 先計算出梯度更新參數,那麼比較慢計算出梯度的 worker 1 就會將已經被 worker 2 更新過後的權重再進行更新。
Pathwise Derivative Policy Gradient
這可以看做是一個 Actor-Critic 的特例,可以作為 Q-Learning 解決 Continuous Actor 的方案之一。
前面我們在說 Q-Learning 時,$V$ 或 $Q$ function 都是在評估這樣的 actor 好還是不好,但 Pathwise Derivative Policy Gradient 不只要讓你知道 action 的好壞,還要直接告訴你可以得到最大 cumulated reward 的 action 是什麼。

做法其實就是將 actor 作為 solver 來產出 action 提供給 $Q$ 然後目標要讓 Q 值越大越好。這個結構是否看起來熟悉 ? 這其實就是前一個部分課程的 GAN 架構。我們將原本要找出一個能夠讓 Q 值最大化的 action 這樣的問題轉化為一個 GAN 結構來解決。 actor 相當於 generator 的角色,而 $Q$ 就是一個 discriminator。
Algorithm

- 初始化 Q-funtion $Q$ 與 target function $\hat{Q}=Q$
- 初始化 Actor $\pi$ 與 target function $\hat{\pi}=\pi$
- 在每一個 episode 中 :
- 每 $t$ 個時間段 :
- 當遇見 state $s_t$,利用 entropy constrain 從 Actor $\pi$ 來決定 action $a_t$
- 我們會得到 $r_t$, state 轉換成 $s_{t+1}$
- 將資料 $(s_t,a_t,r_t,s_{t+1})$ 儲存到 buffer 中
- 從 buffer 裡面抽樣一個 batch 的資料 ${(s_i,a_i,r_i,s_{i+1})}_{i=1}^{n}$ 出來
- 利用 $\hat{Q}$ 計算這一個 batch 的 target $y_i=r_i+\hat{Q}(s_i,\hat{\pi}(s_{i+1}))$
- 訓練 $Q$ 使 $Q(s_i,a_i)$ 盡可能地接近 $y_i$
- 訓練 $\pi$ 使 $Q(s_i,\pi(s_i))$ 越大越好
- 更新 $C$ 次後,用 $Q$ 來取代 $\hat{Q}$
- 更新 $C$ 次後,用 $\pi$ 來取代 $\hat{\pi}$
- 每 $t$ 個時間段 :
GAN V.s. Actor-Critic
這一個部分,在論文 “ Connecting Generative Adversarial Networks and Actor-Critic Methods “ 中有非常詳盡的介紹。
其中,作者詳列了 GAN 與 Actor-Critic 中所用到的一些技巧,既然兩者的概念如此接近,或許這些技巧也能互相使用 ?
