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}\)

GAN V.s. Actor-Critic

這一個部分,在論文 " Connecting Generative Adversarial Networks and Actor-Critic Methods " 中有非常詳盡的介紹。

其中,作者詳列了 GAN 與 Actor-Critic 中所用到的一些技巧,既然兩者的概念如此接近,或許這些技巧也能互相使用 ?