《Multi-Agent Actor-Critic for Mixed Cooperative-Competitive Environments》論文解讀


目錄

一、摘要

  文章探索了多智能體(multi-agent)領域的強化學習方法。
  由於多智能體的環境狀態由多個agent的行為共同決定,本身具有不穩定性(non-stationarity),Q-learning算法很難訓練,policy gradient算法的方差會隨着智能體數目的增加變得更大。
  作者提出了一種actor-critic方法的變體MADDPG,對每個agent的強化學習都考慮其他agent的動作策略,進行中心化訓練和非中心化執行,取得了顯著效果。此外在此基礎上,還提出了一種策略集成的訓練方法,可以取得更穩健的效果(Additionally, we introduce a training regimen utilizing an ensemble of policies for each agent that leads to more robust multi-agent policies.)。

二、效果展示

  • 追捕環境
      四個紅色的agent追捕兩個綠色的agent獲得回報。綠色的agent躲避追捕,到達藍色點(表示水源)處獲得回報。黑色點表示障礙物。


      在上述環境中,MADDPG分別訓練了圖中四個紅色的agent和兩個綠色的agent。可以看到,紅色agent已經學會了組隊追捕綠色agent,同時綠色agent也學會了分散躲避追捕並跑向藍色點。
  • MADDPG與DDPG效果比較
      該環境也是追捕環境,其中淺綠色大圓表示森林,其他含義同上。其中一個紅色agent貌似負責總體指揮(含義不明)。



      其中紅色agent分別用MADDPG和DDPG訓練得到,其中MADDPG訓練得到的agent捕獲了更多的綠色agent,也更會合作。

三、方法細節

  • 問題分析
      傳統強化學習方法很難用在multi-agent環境上,一個主要的原因是每個agent的策略在訓練的過程中都是不斷變化的,這導致對每個agent個體來說,環境都是不穩定的,即有\(P(s'|s,a,\pi_1,...,\pi_N) \not = P(s'|s,a,\pi_1',...,\pi_N')\)對任意的\(\pi_i \not = \pi_i'\)。某種程度上來說,一個agent根據這種不穩定的環境狀態來優化策略是毫無意義的,在當前狀態優化的策略在下一個變化的環境狀態中可能又無效了。這就導致不能直接使用經驗回放(experience replay)的方法進行訓練,這也是Q-learning失效的原因。對於policy gradient方法來說,隨着agent數量增加,環境復雜度也增加,這就導致通過采樣來估計梯度的優化方式,方差急劇增加。作者還證明了在一個包含\(N\)個agent的二值動作空間上,假設\(P(a_i=1)=\theta_i,\ where\ \ R(a_1,...,a_N)=\textbf1_{a_1=...=a_N}\),取\(\theta_i=0.5\),那么梯度估計方向的正確性正比於\(0.5^N\),即\(P(\langle \hat{\nabla} J,\nabla J\rangle>0)\propto (0.5)^N\)。其中\(\hat{\nabla} J\)是估計梯度,\(\nabla J\)是真實梯度。(PS:我仔細看了這個證明,表述有一點瑕疵,但結論是對的,我寫在最后幫助大家理解。)
      這些問題歸根到底,是因為agent之間沒有交互,不知道隊友或者對手會采取什么策略,導致只根據自己的情況來選擇動作,而忽略了整體。作者提出的解決方法也很簡單:采用中心化的訓練和非中心化的執行。即在訓練的時候,引入可以觀察全局的critic來指導actor訓練,而測試的時候只使用有局部觀測的actor采取行動。
      此外作者還采取了兩種改進方式,個人感覺不是重點。1. 不假設訓練的時候知道其他agent的策略,而是通過預測的方式獲得。2. 采用策略集成的方法提升穩定性。
  • 具體方法
      該方法和DDPG方法其實很類似,這里先畫一個簡圖來說明DDPG結構的輸入輸出:

      當策略訓練好后,只需要actor與環境交互,即只需要綠色的循環,其中actor的輸入為環境狀態\(S\),輸出為具體動作\(a\)。而在訓練過程中,需要critic獲得當前的環境狀態和actor采取的動作,組成狀態動作對\((S,a)\)作為輸入,輸出狀態動作對的價值\(v\)來評估當前動作的好壞,並幫助actor改進策略。這里首先假設對DDPG有了解,不細說更新方法。具體推薦博客:
        Deep Reinforcement Learning - 1. DDPG原理和算法
        深度強化學習——連續動作控制DDPG、NAF
      說清楚了DDPG的輸入輸出,MADDPG就很清楚了。以兩個agent為例,同樣畫出輸入輸出的簡圖如下:

      當模型訓練好后,只需要兩個actor與環境交互,即只需要綠色的循環。這里區別於單個agent的情況,每個agent的輸入狀態是不一樣的。環境輸出下一個全信息狀態\(S_{all}\)后,actor1和actor2只能獲取自己能夠觀測到的部分狀態信息\(S_1,S_2\)。而在訓練過程中,critic1和critic2可以獲得全信息狀態,同時還能獲得兩個agent采取的策略動作\(a_1,a_2\)。也就是說,actor雖然不能看到全部信息,也不知道其他actor的策略,但是每個actor有一個上帝視角的導師,這個導師可以觀測到所有信息,並指導對應的actor優化策略。

      整個過程為中心化的訓練和去中心化的執行。這種改進,理論上將之前環境不穩定的問題得以緩解。即\(P(s'|s,a,\pi_1,...,\pi_N) \not = P(s'|s,a,\pi_1',...,\pi_N')\)對任意的\(\pi_i \not = \pi_i'\)。轉變為\(P(s'|s,a_1,...,a_N,\pi_1,...,\pi_N)=P(s'|s,a_1,...,a_N)=P(s'|s,a_1,...,a_N,\pi_1',...,\pi_N')\ \ for\ any\ \pi_i \not=\pi_i'\)
  • 偽代碼
      我們放上MADDPG和DDPG的偽代碼進行比較。



      可以很明顯的看到,從actor網絡的初始化和噪聲擾動方法,到critic網絡的更新方法,以及actor網絡的梯度提升方法,最后target網絡的更新,幾乎一模一樣。唯一的區別就在於\(Q\)函數的輸入從單個的動作\(a\)變成了所有agent的動作\(a_1,a_2,...,a_N\)
  • 網絡結構
      作者使用了最簡單的兩層全連接和relu激活函數,每層64個神經元。對於離散動作的場景使用了Gumbel-Softmax進行估計。優化器Adam,學習率0.01,\(\tau=0.01,\gamma=0.95\),replay buffer \(10^6\),batch size 1024。
      到此,方法介紹完畢。

四、實驗結果

  • 其他環境效果展示
    • Physical deception
      兩個紫色agent合作到達一個地方(只要一個agent到達即可),同時掩飾他們的真正目的地以迷惑對手。

    • Cooperative communication
      灰色agent告訴agent需要到達的目標,另一個agent執行。

    • Cooperative navigation
      三個agent分別到達不同目標獲得最大回報。

  • MADDPG、DDPG效果比較
      在多個環境中分別用MADDPG的agent對抗DDPG的agent,得分如下圖。

  • 策略預測效果
      作者嘗試了通過訓練的方式去預測其他agent的動作,再用來計算Q值,而不是直接給critic真正的動作值。發現可以達到同樣的合作效果,但是另一方面動作預測的效果其實很不理想。這就有點讓人費解了,到底是什么原因使得agent之間學會合作的?

  • 其他
    其他實驗結果具體參考原論文。

五、總結

  這篇文章效果顯著,思想也順理成章,文章還證明了policy gradient方法失效的原因。
  但我個人從另一方面YY,這個方法思想淺顯且效果顯著,其他學者應該也想到了類似方法,最終卻沒有做出效果,可見這其中的trick應該不少。另外上述的策略預測效果的實驗結果圖,也間接說明了其他agent的策略信息對訓練有多少實質性的幫助並不清楚。

附錄

  • Proposition 1
    先把證明原文打出,再解釋其中一些問題




      前面部分只是一些小瑕疵,最費解的是最后一步,這里依次列一下。
    • (10)中第二個等式少了一個括號,應該為\(R(a_1,...,a_N)\frac{\partial}{\partial\theta_i}\sum\limits_i(a_i\log\theta_i+(1-a_i)\log(1-\theta_i))\)
    • For \(\theta_i=0.5\) we have:\(\frac{\hat{\partial}}{\partial\theta_i}J=R(a_1,...,a_N)(2a_i-1)\) 應為\(\frac{\hat{\partial}}{\partial\theta_i}J=R(a_1,...,a_N)(4a_i-2)\),只有當后面的假設\(R(a_1,...,a_N)=\textbf1_{a_1=...=a_N=1}\)成立時,才有前面的式子。
    • 求期望的式子中,\(E(R)\)是關於動作\(a\)的期望,而之后\(E(\frac{\hat{\partial}}{\partial\theta_i}J)\)是關於參數\(\theta\)的期望
    • 最后一步
      We have:\(\langle\hat{\nabla J,\nabla J}\rangle=\sum\limits_i\frac{\hat{\partial}}{\partial\theta_i}J\times(0.5)^N=(0.5)^N\sum\limits_i\frac{\hat{\partial}}{\partial\theta_i}J\),so \(P(\langle \hat{\nabla}J,\nabla J\rangle>0)=(0.5)^N\).
        這里是最讓人迷惑的地方,最開始我一直以為這里的因果關系so是因為前面的系數\((0.5)^N\)。但是轉念一想這個\(\langle \hat{\nabla}J,\nabla J\rangle>0\)的概率和系數\((0.5)^N\)是無關的,不管\(N\)是多少\((0.5)^N\)只是乘在前面的一個大於0的常數,不影響兩個梯度內積的正負。后來終於明白,這個概率的關系來自第二項\(\sum\limits_i\frac{\hat{\partial}}{\partial\theta_i}J\)
        由前面可知,當\(R(a_1,...,a_N)=\textbf1_{a_1=...=a_N=1}\)時,有\(\frac{\hat{\partial}}{\partial\theta_i}J=R(a_1,...,a_N)(2a_i-1)\),則\(\sum\limits_i\frac{\hat{\partial}}{\partial\theta_i}J=\sum\limits_i R(a_1,...,a_N)(2a_i-1)\)。注意看這個式子,雖然是\(N\)個回報的和,但是要想這個求和大於0的唯一解只有當\(a_1=a_2=...=a_N\)時,其他時候回報都為0。也就是說這個求和其實只有兩個值,要么為0要么為\(N\)
        而每個\(a_i\)是一個伯努利分布且獨立,所以\(a_1=a_2=...=a_N=1\)的概率即相當於求二項分布\(X=\sum\limits_ia_i\)使得\(X=N\)的概率。又二項分布概率公式為\(P(X=k)=\binom{N}{k}p^k(1-p)^{N-k},\ \ where\ \ (p=0.5,k=0,...,N)\)。則有\(P(X=N)=(0.5)^N\),這才得到前面的so,\(P(\langle \hat{\nabla}J,\nabla J\rangle>0)=(0.5)^N\)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM