COMA(二):Counterfactual Multi-Agent Policy Gradients 论文讲解
Counterfactual Multi-Agent Policy Gradients
論文鏈接:https://arxiv.org/pdf/1705.08926.pdf
1. 問題提出(解決了什么問題?)
在現實世界中,有非常多的問題需要多個單位之間的“合作”才能完成任務,這就需要學習一種非中心式策略的控制系統,即每個agent有著屬于自己的決策大腦,而非靠擁有全局信息的決策系統下達指令(畢竟有時候全局的信息量過于龐大,并且agent到中心網絡的通信不一定每時每刻都穩定,因此中心式的決策系統很難實現)。因此,該論文提出了一種方法用于學習非中心式的、部分可觀測的多智能體協同的控制策略。
COMA利用全局評價網絡(critic)來評價Q值,利用非全局行為網絡(actor)來決定agent的行為。由于在訓練時使用的是全局網絡進行評價,并且采用參數共享的方式,使得agent能夠在做行為選擇的時候參考其他agent的狀態再做決定,這就加入了“協同”的功能。
2. 介紹
該論文分為以下三個部分:
- 提出傳統的RL算法在協同任務中不足
若使用傳統的RL算法來解決多智能體的問題,則會存在以下三個不足之處:
- COMA中的主要思想
COMA是一種基于actor-critic的變種方法,其中actor是依照critic評估出來的梯度值進行更新學習的。整個算法共有三個比較核心的思想:
- 驗證場景及其結果分析
3. 背景
3.1 數學建模
論文中將多智能體協同任務想象成一個隨機決策的游戲,這個游戲 GGG 包含以下幾個因素:
G=<S,U,P,r,Z,O,n,γ>G = <S, U, P, r, Z, O, n, \gamma> G=<S,U,P,r,Z,O,n,γ>
其中,
-
S→S \quad \rightarrow \quadS→ 環境狀態集: ?s∈S\forall s \in S?s∈S.
-
U→U \quad \rightarrow \quadU→ 所有動作樣本空間:在每一時刻,每個agent采取一個行為 uta∈Uu_t^a \in Uuta?∈U,并組成聯合動作空間 u∈U\textbf{u} \in Uu∈U.
-
P→P \quad \rightarrow \quadP→ 狀態轉移函數:根據當前狀態sss和聯合動作空間u\textbf{u}u,計算一時刻狀態s′s's′,P(s′∣s,u)P(s'|s, \textbf{u})P(s′∣s,u).
-
r→r \quad \rightarrow \quadr→ 全局回報值:r(s,u)r(s, \textbf{u})r(s,u).
-
Z→Z \quad \rightarrow \quadZ→ 局部觀測集:單個agent在每一時刻有一個局部觀測 z∈Zz \in Zz∈Z.
-
O→O \quad \rightarrow \quadO→ 局部觀測函數:Agent aaa 的局部觀測 zzz 是根據全局環境信息 sss 通過 OOO 函數計算得來,z=O(s,a)z = O(s, a)z=O(s,a).
-
n→n \quad \rightarrow \quadn→ agent的個數,共有 nnn 個.
-
γ→\gamma \quad \rightarrow \quadγ→ 折扣因子,用于指定計算未來回報時的衰減強弱.
此外,每個agent有一個 action-observation 的歷史記錄 τa\tau^aτa,actor在做決策的時候是基于歷史信息做的決策 πa(ua∣τa)\pi^a(u^a|\tau^a)πa(ua∣τa). 其實這里基于歷史記錄做決策可以理解為:之前在做update決策網絡參數的時候,是基于之前的歷史信息做的更新,所以用更新后的actor去做決策就可以看作是記住了歷史經驗后做的決策了。
3.2 基本概念回顧
這里在回顧一下DQN中的一些基本概念,后續內容會用的到:
累計回報: Rt=∑l=0∞γlrt+lR_t = \sum_{l=0}^\infty{\gamma^lr_{t+l}}Rt?=∑l=0∞?γlrt+l?,其中 γ\gammaγ 是折扣因子;
評價函數分為兩個:對當前狀態的評價函數 Vπ(st)V^\pi(s_t)Vπ(st?),對當前狀態下當前聯合動作空間的評價函數 Qπ(st,ut)Q^\pi(s_t, u_t)Qπ(st?,ut?);
Vπ(st)=E[Rt∣st]Qπ(st,ut)=E[Rt∣st,ut]V^\pi(s_t) = E[R_t|s_t] \qquad Q^\pi(s_t, \textbf{u}_t) = E[R_t|s_t, \textbf{u}_t] Vπ(st?)=E[Rt?∣st?]Qπ(st?,ut?)=E[Rt?∣st?,ut?]
優勢函數: Aπ(st,ut)=Qπ(st,ut)?Vπ(st)A^\pi(s_t, \textbf{u}_t) = Q^\pi(s_t, \textbf{u}_t) - V^\pi(s_t)Aπ(st?,ut?)=Qπ(st?,ut?)?Vπ(st?).
Policy Gradient :Value-Based中主要使用的更新方法——梯度上升法,梯度 ggg 可以表示為:
g=∑t=0TRt▽θπlogπ(ut∣st)g = \sum_{t=0}^TR_t\bigtriangledown_{\theta^\pi}log\pi(u_t|s_t) g=t=0∑T?Rt?▽θπ?logπ(ut?∣st?)
關于Actor-Critic模型:
AC模型中,actor是根據critic所求得的梯度來進行學習的。因為RtR_tRt?是一個期望值,無法求得精確的值,因此需要用其他的表達式來近似替代RtR_tRt?。替代RtR_tRt?一共有兩種方式:
如何訓練中心評價網絡critic:
在這篇論文中,作者訓練了一個中心評價網絡fc(?,θc)f^c(·, \theta^c)fc(?,θc),網絡參數為 θc\theta^cθc,使用一種稍微改變了下的TD法進行學習——TD(λ)TD(\lambda)TD(λ) 將nnn 步的reward值進行綜合來得到一個平均值 Gt(n)=∑l=1nγl?1rt+l+γnfc(?t+n,θc)G_t^{(n)} = \sum_{l=1}^n\gamma^{l-1}r_{t+l} + \gamma^nf^c(·_{t+n}, \theta^c)Gt(n)?=∑l=1n?γl?1rt+l?+γnfc(?t+n?,θc)。使用梯度下降的方法來更新網絡參數θc\theta^cθc,LtL_tLt?表示ttt時刻的損失函數:
Lt(θc)=(y(λ)?fc(?t,θc))2L_t(\theta^c) = (y^{(\lambda)} - f^c(_{·t}, \theta^c)) ^ 2 Lt?(θc)=(y(λ)?fc(?t?,θc))2
其中:
y(λ)=(1?λ)∑n=1∞λn?1Gt(n)Gt(n)=∑l=1nγl?1rt+l+γnfc(?t+n,θc)y^{(\lambda)} = (1-\lambda)\sum_{n=1}^\infty \lambda^{n-1}G_t^{(n)} \\ G_t^{(n)} = \sum_{l=1}^n\gamma^{l-1}r_{t+l} + \gamma^nf^c(·_{t+n}, \theta^c) y(λ)=(1?λ)n=1∑∞?λn?1Gt(n)?Gt(n)?=l=1∑n?γl?1rt+l?+γnfc(?t+n?,θc)
因此,整個公式也可以表示為:
Lt(θc)=((1?λ)∑n=1∞λn?1(∑l=1nγl?1rt+l+γnfc(?t+n,θc))?fc(?t,θc))2L_t(\theta^c) = ((1-\lambda)\sum_{n=1}^\infty \lambda^{n-1}(\sum_{l=1}^n\gamma^{l-1}r_{t+l} + \gamma^n {\color{red}f^c(·_{t+n}, \theta^c)}) - f^c(·_{t}, \theta^c)) ^ 2 Lt?(θc)=((1?λ)n=1∑∞?λn?1(l=1∑n?γl?1rt+l?+γnfc(?t+n?,θc))?fc(?t?,θc))2
Note:公式中一共有兩個 fc(?,θc)f^c(·, \theta^c)fc(?,θc) 網絡,但是前一個fc()f^c()fc()是estimate出來的目標值 y(λ)y^{(\lambda)}y(λ),為了加快模型的收斂速度,第一個的 fc()f^c()fc() 中的θc\theta^cθc 應該被fix住(式子中的紅色部分),若干個steps后再被update,這和target network的思路是一樣的。
4. 算法分析
4.1 Independent Actor-Critic
IAC方法指每一個agent學習一個獨立的actor-critic,在這篇論文中采用參數共享的方法,使得所有agent共用一個actor和一個critic。在學習的時候,critic只能根據agent自身的local observation進行估計值,并且也只能估計該agent的單個動作uau^aua的效用,而不是聯合動作空間u\textbf{u}u的效用。
論文中對傳統的IAC算法有兩處改變:
IAC的缺陷在于,訓練時只能依據單個agent的局部觀測和單個action的效用評定,這樣很難學出一套好的協同策略。
4.2 Counterfatual Multi-Agent Policy Gradient
COMA的主要思想有三個:中心式評價網絡,使用反事實準為每一個行為分配不同的reward值,高效計算每一個不同的reward值,下面對每一個思想進行介紹講解。
- Center critic
在IAC算法中,訓練評價網絡時只用到了單個agent的history τa\tau^aτa。既然這個評價網絡只會在訓練的時候使用,那么我們完全可以把全局狀態 sss 輸入用于訓練,若全局觀測不可獲得,則將當前所有agent的"action-observation"的歷史記錄 τ\tauτ代替全局狀態 sss,如下圖所示:
圖中,每一個Actor都會給出此刻的決策行為 utu_tut?,并且環境也會給出此時環境的全局信息 sts_tst? 以及此刻的回報值 rtr_trt?。
一種很簡單的方式是直接使用TD-Error來進化這個網絡:
g=▽θπlogπ(u∣τta)(r+γV(st+1)?V(st))g = \bigtriangledown_{\theta_\pi}log\pi(u|\tau_t^a)(r+\gamma V(s_{t+1}) - V(s_t)) g=▽θπ??logπ(u∣τta?)(r+γV(st+1?)?V(st?))
但是,這樣的方法不能解決 Individual Reward Assignment 的問題,因為TD算出來的Reward是一個全局Reward ,無法推算出每一個action的單獨Reward值。為此,論文提出了"反事實準則"。
- Counterfatual baseline
反事實準則(Conuterfatual Baseline)允許為不同的action獨立分配一個不同的獨立reward。這個獨立reward DaD^aDa 需要根據當前情況下的全局reward和將該agent行為替換為一個'默認行為'后的全局reward兩個值進行計算,
Da=r(s,u)?r(s,(u?a,ca))D^a = r(s, \textbf{u}) - r(s, (\textbf{u}^{-a}, c_a)) Da=r(s,u)?r(s,(u?a,ca?))
其中,u?a\textbf{u}^{-a}u?a 代表聯合動作空間除去當前Agent aaa 這一時刻采取的行為。(u?a,ca)(\textbf{u}^{-a}, c_a)(u?a,ca?) 代表當前Agent aaa 采取"默認行為" cac_aca? 后所有Agent的聯合動作空間。在學習過程中,agent會想辦法最大化回報值 DaD^aDa,這其實就是在想辦法最大化全局的reward r(s,u)r(s, \textbf{u})r(s,u),因為式子的后項跟agent當前采取什么行為是沒有關系的。關于DaD^aDa這個式子可以這樣理解:回報值DaD^aDa其實計算的是Agent aaa采取行為 uuu 會比采取默認行為 cac_aca? 要更好(DaD^aDa > 0)還是更壞(DaD^aDa < 0)。
這個想法是正確的,但是要想計算出每一個動作的DaD^aDa值,就需要將每個動作都替換成默認行為cac_aca?去與環境互動一次得到最終結果,這樣采樣次數會非常多;此外,默認行為的選取也是無法預測的,到底選擇哪一個行為當作默認行為才是最合適的也是比較難決定的。因此,文中提出使用"函數擬合"的方式來計算DaD^aDa。
前面提到,中心評價網絡可以評價一個聯合動作空間 u\textbf{u}u 在一個狀態 sss 下的 QQQ 值。由于默認行為很難定義,于是我們把采取 “默認行為” 得到的效用值近似為采取一個Agent “所有可能行為” 的效用值總和。因此,DaD^aDa 就可以用以下等式進行計算:
Aa(s,u)=Q(s,u)?∑ua′πa(u′a∣τa)Q(s,(u?a,u′a))A^a(s, \textbf{u}) = Q(s, \textbf{u}) - \sum_{u_a'}\pi^a(u'^a|\tau^a)Q(s, (\textbf{u}^{-a}, u'^a)) Aa(s,u)=Q(s,u)?ua′?∑?πa(u′a∣τa)Q(s,(u?a,u′a))
其中,Aa(s,u)A^a(s, \textbf{u})Aa(s,u) 就是 DaD^aDa 的等效近似。
- Efficient evaluation of baseline
盡管baseline的方式解決了獨立回報的問題,但是如果要建立一個網絡,接收s,us, \textbf{u}s,u兩個輸入,輸出為所有agent的所有action的話,那么輸出神經元的個數就等于 ∣U∣n|U|^n∣U∣n(n個agent有|U|個動作)。當agent數目很多或動作空間很大的時候就會造成輸出層無法實現。為此,COMA構造了一種網絡,該網絡接收 ut?a,st,ota,a,ut?1?a\textbf{u}^{-a}_t, s_t, o_t^a, a, \textbf{u}^{-a}_{t-1}ut?a?,st?,ota?,a,ut?1?a? 等參數,輸出為Agent aaa 每一個action的Q-value值,輸出維度由 ∣U∣n|U|^n∣U∣n 降到了 ∣U∣|U|∣U∣ ,如下圖所示。
5. 實驗
5.1 實驗場景
該論文使用星際爭霸游戲作為實驗場景,讓算法控制的小隊和游戲AI控制的小隊進行對戰,并計算勝率。算法小隊中,每一個作戰單位都由一個去中心式的controller進行控制。為了提升游戲難度,比賽加入了 “部分可觀測” 條件的限制,視野范圍等于攻擊范圍。這意味著當敵人沒有進入攻擊范圍內時,作戰單位是不知道敵人位置信息的,因此agent不僅要學會如何去探索敵方目標,還需要與隊友共享敵方目標的位置信息。為了證明加入 “部分可觀測” 限制后問題變得有多復雜,作者做了實驗對比:當不加入觀測限制時,普通的啟發式算法能夠到達98%的勝率;加入限制后,勝率降到了66%。
5.2 動作空間及回報值
每個agent都有著相同的動作空間:{ move[direction],attack[enemy_id],stop,noop }。
一次Episode下的全局Reward為:對敵人造成的傷害 DeD_eDe? 減去我方受到的傷害 DuD_uDu? 除以2,此外,若擊毀一個敵方單位獲得10點的回報,即:
R(t)=De?Du2+10nR(t) = D_e - \frac{D_u}{2} + 10n R(t)=De??2Du??+10n
其中,nnn為摧毀敵方單位數。若有一方將敵方團滅,則獲得的回報值為全隊剩余血量+200。
5.3 狀態特征
算法一共有兩個網絡:actor 和 critic。其中actor接收agent的局部觀測信息;critic接收全局狀態信息。
- 局部觀測信息
由于作戰單位的視野范圍等于攻擊范圍,因此觀測到的視野是以該單位為中心的一個圓。局部觀測信息是指在視野圓圈內,每一個單位(包括敵方和友方)的以下幾個信息:distance,relative x,relative y,unit type,shield。其中 unit type 是指作戰單位是何種兵種,shield是為了模擬平A的冷卻(因為t切割的很小,每一時刻Agent都有可能選擇平A這個動作,所以在平A還沒有冷卻好的時候,敵方單位會套上一個無敵的盾來抵消這一次平A受到的傷害)。
疑問:觀測范圍中的單位數量應該是隨時間變化而變化的,但網絡的輸入層神經元應該是固定的,怎么解決變長的問題?(未解決)
- 全局觀測信息
全局觀測信息包含了所有單位的relative x,relative y,unit type,shield,healthy point,cooldown信息,其中 relative 的坐標信息是相對據地圖中心的相對坐標,不再是針對于某一個特定目標的坐標。
5.4 實驗結果
實驗結果如下圖所示,其中3m,5m分別指代一個作戰小隊中包含3個,5個marine(一種兵種);2d_3z指代一個作戰小隊中包含2條龍和3個狂熱者。
總結
以上是生活随笔為你收集整理的COMA(二):Counterfactual Multi-Agent Policy Gradients 论文讲解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: COMA(一): Learning to
- 下一篇: RNN入门笔记