魏競毅,賴 俊,陳希亮
(陸軍工程大學(xué) 指揮控制工程學(xué)院,江蘇 南京 210007)
近年來隨著深度強化學(xué)習(xí)[1-2]開始不斷發(fā)力,在各項自主學(xué)習(xí)任務(wù)中,不斷取得進(jìn)展,但由于環(huán)境復(fù)雜度的提高,發(fā)現(xiàn)學(xué)習(xí)的參數(shù)會隨著狀態(tài)變量的增加而成指數(shù)增加,引發(fā)維度災(zāi)難,為減少學(xué)習(xí)訓(xùn)練的復(fù)雜度,分層深度強化學(xué)習(xí)應(yīng)運而生。當(dāng)前大多數(shù)強化學(xué)習(xí)完成任務(wù)是根據(jù)智能體動作獲取的獎勵來進(jìn)行優(yōu)化,實現(xiàn)最大化動作獎勵來實現(xiàn)優(yōu)化策略,例如經(jīng)典的DQN[3]、DDPG[4]、PPO[5]等。為了能學(xué)習(xí)到更多不同的策略,算法DIAYN[6]、DADS[7]通過引入互信息的理念,依據(jù)對智能體和環(huán)境狀態(tài)變化來對策略進(jìn)行分類,使得智能體能夠不僅僅依靠環(huán)境即時收益來學(xué)習(xí)策略,同時根據(jù)智能體和環(huán)境的狀態(tài)變化來進(jìn)行策略學(xué)習(xí),最終在導(dǎo)航和機械臂的實驗中取得良好效果。在戰(zhàn)場環(huán)境中,有些策略在當(dāng)時并不會產(chǎn)生即時的獎勵,但對于任務(wù)的完成會起到助推作用,同時在戰(zhàn)場環(huán)境中這種前期埋下伏筆的策略對整體戰(zhàn)場形勢會在后期產(chǎn)生很大的作用,當(dāng)智能體僅依靠即時獎勵時就會忽視這種策略。該文為訓(xùn)練智能體不受限于即時收益,可以學(xué)習(xí)具有長遠(yuǎn)收益有利于任務(wù)完成的策略,通過引入互信息[8](Mutual Information)的概念,依據(jù)環(huán)境和智能體的不同狀態(tài)來進(jìn)一步對策略進(jìn)行分類,使得智能體能夠發(fā)現(xiàn)更多的策略,不僅僅發(fā)現(xiàn)能獲得獎勵的策略,同時對于這些有利于任務(wù)完成的策略也進(jìn)行保留,使得任務(wù)的完成率得到提升,并對智能體動作采用了option分層[9]的思想,對動作進(jìn)行了劃分。為了加快智能體的訓(xùn)練效率,采用分布式的訓(xùn)練方式,與A3C[10](Asynchronous Advantage Actor-Critic)算法進(jìn)行結(jié)合,稱這一算法為MI-A3C。
基于互信息的智能博弈算法是在A3C算法的基礎(chǔ)上,通過引入互信息的概念來進(jìn)一步增強智能體的探索能力,將環(huán)境和智能體的狀態(tài)與互信息理論相結(jié)合,來促使智能體學(xué)到的策略,可以使環(huán)境狀態(tài)有較大變化同時保證不同策略的環(huán)境狀態(tài)變化也不同,以此來增強策略的有效性和多樣性。最終學(xué)習(xí)到的算法不僅僅可以依靠環(huán)境的即時收益來進(jìn)行參數(shù)更新,同時策略的互信息也會影響算法的參數(shù)更新,下面針對算法的一些基礎(chǔ)理論和整體結(jié)構(gòu)進(jìn)行介紹。
信息熵是一個隨機變量不確定性的度量值,對于一個離散型隨機變量X~p(x),公式表示為:
(1)
一個隨機變量的信息熵越大,也就意味著不確定性就越大,包含的信息量也就越大,必然事件的信息熵為0,隨機概率均等事件的信息熵為1。
互信息(Mutual Information)[11]是衡量隨機變量之間相互依賴程度的度量,是信息論中的一個重要概念,表示為I(X;Y),公式表示為:
I(X;Y)=H(X)-H(X|Y)
(2)
其中,H(X)表示隨機變量X的信息熵,H(X|Y)表示在條件Y的情況下,隨機變量X的信息熵,互信息I(X;Y)表示當(dāng)知道已經(jīng)發(fā)生Y時,隨機變量X的信息量減少多少,具體表示為圖1。
圖1 互信息與信息熵的文氏圖
將互信息這一概念應(yīng)用在強化學(xué)習(xí)中,通常將X表示為狀態(tài),Y表示為動作,當(dāng)使得互信息最大化為目標(biāo)函數(shù)時,也就表示當(dāng)采取這一動作后,環(huán)境的信息熵會增大,也就使得動作策略具有更多探索性,這也就增大了對環(huán)境的探索能力,使得環(huán)境狀態(tài)具備更多的可能性,會產(chǎn)生更多的策略。
A3C算法是對基于策略梯度(Policy Gradient)的算法AC的優(yōu)化,該算法采用的是異步的訓(xùn)練方式。如圖2所示,在A3C算法中有一個全局網(wǎng)絡(luò)(Global Network),這個網(wǎng)絡(luò)是一個公共的神經(jīng)網(wǎng)絡(luò)模型,包含公共Actor網(wǎng)絡(luò)和Critic網(wǎng)絡(luò),同時下面有n個線程,每個線程都會獨立地與環(huán)境進(jìn)行交互并得到經(jīng)驗,這些線程之間獨立互不干擾,收集完經(jīng)驗后,獨立完成訓(xùn)練并得到參數(shù)更新量,之后異步更新到全局網(wǎng)絡(luò)的模型參數(shù)中。下次訓(xùn)練時,各線程的模型參數(shù)與全局網(wǎng)絡(luò)進(jìn)行同步,再次進(jìn)行訓(xùn)練。
圖2 A3C算法結(jié)構(gòu)框圖
AC算法的優(yōu)勢函數(shù)定義為:
A(s,a)=Q(s,a)-V(s)=r+γV(s')-V(s)
(3)
A3C算法為了使訓(xùn)練能夠在早期更快收斂,采取了n步回報估計法,優(yōu)勢函數(shù)變?yōu)椋?/p>
A(s,a)=Rt+γRt+1+…+γn-1Rt+n-1+
γnV(S')-V(S)
(4)
同時為了增加模型的探索性,A3C算法在模型的目標(biāo)函數(shù)中加入策略的熵,熵越大也意味著隨機策略擁有越多的信息,也使得模型可以擁有更強的多樣性。策略梯度的計算公式為:
(5)
采用互信息來實現(xiàn)智能體的策略發(fā)現(xiàn)主要有三點要求:(1)使智能體具有更強的探索性,可以對環(huán)境進(jìn)行更多的探索,使智能體與環(huán)境交互產(chǎn)生更多樣的狀態(tài)s;(2)通過狀態(tài)s來對策略進(jìn)行區(qū)分,當(dāng)一系列動作沒有對環(huán)境產(chǎn)生影響時,認(rèn)為這些動作是無用,而是將一系列對環(huán)境產(chǎn)生影響的動作劃分為策略;(3)有用的策略可以控制智能體到達(dá)不同的狀態(tài),所以策略是具有可分辨性的可劃分的。目前采用互信息的算法有DIAYN[6]、DADS[7],在導(dǎo)航和機械臂的實驗中取得了良好的效果。
針對這三點要求,著重對目標(biāo)函數(shù)進(jìn)行了構(gòu)建,在已知狀態(tài)s的條件下,下一個狀態(tài)s'和當(dāng)前策略z的互信息,公式表達(dá)為:
I(s';z|s)=H(z|s)-H(z|s',s)
(6)
I(s';z|s)=H(s'|s)-H(s'|s,z)
(7)
公式(6)中第一項表示在當(dāng)前狀態(tài)下選擇不同策略的熵,值越大說明策略越多樣,第二項表示當(dāng)前狀態(tài)s轉(zhuǎn)移到下一狀態(tài)s'的策略z的熵,這個值越大則說明很多策略都可以實現(xiàn)兩個狀態(tài)的轉(zhuǎn)變,策略區(qū)分度很小。當(dāng)兩個值都很大時則說明策略很多,但策略的相似度很大,兩個值都很小時則說明策略很少,策略區(qū)分度很大。所以前大后小是所需要的理想情況,能夠?qū)崿F(xiàn)既有較多的策略,同時狀態(tài)的轉(zhuǎn)換也不同。
公式(7)與公式(6)采用不同的計算方式,第一項表示狀態(tài)轉(zhuǎn)移的多樣性,值越大則說明可轉(zhuǎn)移的狀態(tài)越多,第二項表示在當(dāng)前狀態(tài)s的情況下采取策略z所能到達(dá)下一狀態(tài)的可能性,值越小則說明策略z對轉(zhuǎn)移狀態(tài)s'的確定性就越高,即策略的區(qū)分度也就越大。在保證前大后小的情況下,依舊可以實現(xiàn)互信息的最大化,使得策略的多樣性和區(qū)分度有良好的保證。
MI-A3C算法通過改進(jìn)A3C算法來增強算法的探索與發(fā)現(xiàn)能力[6],不僅通過原本的收益函數(shù)來進(jìn)行梯度的更新,同時通過加入互信息內(nèi)容重新構(gòu)造目標(biāo)函數(shù),聯(lián)合價值函數(shù)來一同對Actor神經(jīng)網(wǎng)絡(luò)參數(shù)實現(xiàn)更新,如公式(8)所示:
dθ←dθ+▽θ′logπθ′(si,ai)(Q(s,i)-
V(Si,w'))+c▽θ′I(s';z|s)
(8)
神經(jīng)網(wǎng)絡(luò)的輸入主要為當(dāng)前環(huán)境狀態(tài)sc以及智能體i狀態(tài)值si,隨后神經(jīng)網(wǎng)絡(luò)通過訓(xùn)練的參數(shù)來輸出對智能體采取的動作at,隨后智能體與環(huán)境再次進(jìn)行交互,同時在此基礎(chǔ)上采用option分層[12-14]的思想,將動作進(jìn)行抽象。將策略z集合定義為一個三元組(A,s,s'),A可以理解為抽象的動作序列是一段時間內(nèi)多個動作集合,s,s'是采取動作的先后的狀態(tài),根據(jù)動作在與環(huán)境的交互中,狀態(tài)變化的程度來轉(zhuǎn)換為策略,當(dāng)前后狀態(tài)變化的互信息較大時,就說明策略執(zhí)行后產(chǎn)生的影響也較大,在對互信息進(jìn)行優(yōu)化時也就是對采取的策略進(jìn)行不斷調(diào)整,再加上獎勵的變化,從而對整體網(wǎng)絡(luò)的參數(shù)進(jìn)行優(yōu)化調(diào)整。
算法:ML-A3C算法。
初始化公共部分神經(jīng)網(wǎng)絡(luò)參數(shù)θ,ω,全局共享迭代輪數(shù)T,最大迭代次數(shù)Tmax,單線程內(nèi)最大迭代次數(shù)tmax,隨機策略
1.更新時間序列t=1
2.重置Actor和Critic的梯度更新量:dθ←0,dω←0
3.將公共部分神經(jīng)網(wǎng)路參數(shù)同步到本線程:θ'=θ,ω'=ω
4.tstart=t,初始化狀態(tài)st
5.基于策略π(A|s,z)選取動作
6.執(zhí)行新動作A,獲得獎勵rt和新狀態(tài)st+1
7.計算t=t+1,T=T+1
8.如果st是終止?fàn)顟B(tài),或t-tstart=tmax,則進(jìn)入步驟9,否則返回步驟5
9.計算最后一個時間序列位置st的Q(s,t)
10.fori∈(t-1,…,tstart)
11.計算每一時刻的Q(s,i):Q(s,i)=ri+γQ(s,i+1)
12.根據(jù)公式(7)計算每一個狀態(tài)的互信息
13.累積Actor的梯度更新:
14.dθ←dθ+▽θ′logπθ′(si,ai)(Q(s,i)-V(Si,w'))+c▽θ′I(s';z|s)
15.累積Critic的梯度更新:
17.End
18.更新全局神經(jīng)網(wǎng)絡(luò)參數(shù):
19.θ=θ+αdθ,ω=ω+βdω
20.如果T>Tmax則算法結(jié)束,輸出公共部分的A3C神經(jīng)網(wǎng)絡(luò)參數(shù)θ,ω,否則進(jìn)入步驟3
21.結(jié)束
實驗硬件設(shè)置為Intel SSD PEKKW 256G + NVIDIA Quadro RTX 5000 +32G內(nèi)存,軟件環(huán)境為windows10+TensorFlow2.0,超參數(shù)設(shè)置如表1所示。
表1 超參數(shù)設(shè)置
實驗仿真環(huán)境采用的是自主研發(fā)的深度強化學(xué)習(xí)仿真訓(xùn)練平臺DRL-STP,其程序是基于TensorFlow2.0,采用了統(tǒng)一的算法框架,支持Unity3D ml-agents和Gym,能夠完成單智能體和多智能體的訓(xùn)練與測試。
采用的環(huán)境是基于Unity3D平臺安裝ml-agents插件構(gòu)建的,用于多智能體智能對抗戰(zhàn)場作戰(zhàn)環(huán)境[15],具備坦克、裝甲車、偵察車、火炮和武裝直升機等多個智能體作戰(zhàn)單元,作戰(zhàn)元素圖像如圖3所示,作戰(zhàn)單元屬性如表2所示。作戰(zhàn)環(huán)境地形包括平原、道路、橋梁、房屋、森林、灌木、丘陵、山脈等。戰(zhàn)場地圖是采用六邊形地圖(如圖4所示),采用六邊形地圖約束每個作戰(zhàn)單元每次可以移動的方向有6個,相對減少其移動動作的復(fù)雜度,地圖大小為64*64,其包含多個地形場景,作戰(zhàn)單元雙方可根據(jù)實際情況進(jìn)行靈活設(shè)置,每個智能體除了采取移動的動作外,依舊具備攻擊和原地待命的兩個動作。
圖3 環(huán)境包含的作戰(zhàn)元素
圖4 戰(zhàn)場環(huán)境地圖
智能體對周圍環(huán)境的感知,其可以獲取周圍六個格子的通行狀態(tài)和消耗的時間,對于敵方單位可以獲取可視范圍內(nèi)能觀察到的敵人數(shù)量,敵方智能體的距離所處地形,武器類型、生命值和是否可以攻擊等狀態(tài),對于己方單位可以獲取所有友方的數(shù)量、位置、武器類型和生命值,這一系列內(nèi)容作為其神經(jīng)網(wǎng)絡(luò)的輸入,來進(jìn)行學(xué)習(xí),智能體的移動方向、攻擊狀態(tài)、攻擊目標(biāo)作為輸出值。
在對戰(zhàn)雙方進(jìn)行交火時,也人工定義一些交戰(zhàn)規(guī)則。對戰(zhàn)雙方出現(xiàn)在射程之內(nèi)才可以采取攻擊動作,在智能體移動結(jié)束后發(fā)現(xiàn)敵人并在攻擊的有效范圍即可以開火,同時根據(jù)攻擊目標(biāo)所處位置,攻擊方擊中被攻擊者的概率會有所不同,空曠地域擊中概率為70%,在其他有遮蔽屬性的地形中會減少擊中概率,在表2和表3中射程與擊中概率都有描述。同時針對智能體的攻擊行為,也進(jìn)行特定情況設(shè)定,如果炮管與目標(biāo)夾角在60°以內(nèi),消耗2個T完成射擊,60°~120°之間,消耗3個T完成射擊,大于120°,需要消耗4個T完成射擊?;鹋陂g瞄射擊,需要10個T完成射擊,所有agent在攻擊期間不接受其他指令,這一系列規(guī)則是為了使環(huán)境能夠更貼合現(xiàn)實戰(zhàn)爭中的場景。
表2 作戰(zhàn)單元屬性情況
算法與環(huán)境通過運用ML-Agents工具包中的Python Low-Level API和通信交互(External Communicator)這兩個組件來實現(xiàn)與python訓(xùn)練算法的對接。Python Low-Level API主要包含用于交互和操縱學(xué)習(xí)環(huán)境的低級Python界面。與學(xué)習(xí)環(huán)境不同,Python API不是Unity的一部分,而是在外面通過通信器與Unity溝通,此API包含在專用Python包mlagents_envs中,用于在訓(xùn)練期間的通信和控制。通信交互模塊是將學(xué)習(xí)環(huán)境與Python Low-Level API連接起來,Python首先通過環(huán)境參數(shù)模塊獲取仿真環(huán)境初始值,并獲知了智能體的序號,將此序號發(fā)送給環(huán)境。Python在接下來的正式訓(xùn)練之前,環(huán)境首先依據(jù)剛才的序號發(fā)送環(huán)境狀態(tài)數(shù)據(jù)以及當(dāng)前各個智能體可用的動作列表,Python據(jù)此選擇一個動作進(jìn)入環(huán)境執(zhí)行,環(huán)境執(zhí)行并獲取新的狀態(tài)和獎勵返回Python,同時還有額外的敵我雙方剩余兵力等信息,隨后Python中的智能算法通過不斷的信息交互,不斷提升智能體策略規(guī)劃能力。
主要將兩種作戰(zhàn)任務(wù)作為目標(biāo),第一是摧毀所有敵方作戰(zhàn)元素,在仿真環(huán)境中,擊中敵人+1分,消滅一個+5分,被摧毀-5分,全部殲滅敵人+15分,全部被殲滅則-15分;第二是占領(lǐng)奪控點,奪控點分為主要奪控點和次要奪控點,占領(lǐng)主要奪控點得30分,次要奪控點得20分,環(huán)境獎勵設(shè)置如表3所示。
表3 環(huán)境獎勵設(shè)置
同時為了使訓(xùn)練的每一個動作都是有效的,不會出現(xiàn)智能體為了避免懲罰而原地不動的情況,通過公式(8)設(shè)置獎勵會隨時間變化而逐漸減少,每一局進(jìn)行的時間越長獎勵會成比重的進(jìn)行相應(yīng)的扣除:
(8)
在實驗中智能體分為藍(lán)方和紅方,藍(lán)方智能體的戰(zhàn)術(shù)規(guī)則,主要通過人工定義。藍(lán)方規(guī)則的設(shè)定對于紅方的訓(xùn)練效果起著重要的作用。當(dāng)藍(lán)方規(guī)則智能體的規(guī)則較為完善時,具有的戰(zhàn)斗能力就越強,這樣可以通過訓(xùn)練使紅方智能體具有更優(yōu)秀的策略規(guī)劃能力,但是訓(xùn)練的難度也會變大,訓(xùn)練時間也會更長;另一種情況當(dāng)藍(lán)方規(guī)則智能體的規(guī)則較為簡單時,藍(lán)方具有的戰(zhàn)斗力會變?nèi)?,相對的紅方訓(xùn)練的難度會變小,訓(xùn)練時間會更短,但是訓(xùn)練出的戰(zhàn)術(shù)策略沒有什么特別的價值。所以針對這種情況,在對規(guī)則的構(gòu)建時,首先保證了藍(lán)方智能體具有較強的對抗強度,但在開始訓(xùn)練的一段時間里,減少藍(lán)方智能體的進(jìn)攻性,給紅方智能體探索學(xué)習(xí)的時間,在紅方智能體能夠開始獲得有效收益后,加強進(jìn)攻性以及對抗強度,增強紅方智能體所學(xué)習(xí)到策略的有效性。
分別使用MI-A3C算法、A3C算法以及經(jīng)典DQN算法在相同場景下進(jìn)行對比實驗。實驗主要采用平均回報(Average Reward)來評價算法效能,平均回報越高則算法效能越好。
圖5展示了不同算法的平均收益。為了更清楚地表現(xiàn)智能體收益曲線的增長,對數(shù)據(jù)圖像進(jìn)行平滑處理,展示了采用不同算法的智能體在對抗任務(wù)中收益曲線對比。根據(jù)圖像我們可以明顯看出,在200輪的訓(xùn)練后,MI-A3C算法的平均回報提升速度相比A3C算法有了顯著的提升,這也就表明紅方智能體策略逐漸學(xué)到了能夠有效獲取獎勵的策略,能夠逐漸有效摧毀敵方單位并開始前往占領(lǐng)奪控點,并可以發(fā)現(xiàn)其隨后開始了一個收益快速增長的階段,而A3C算法也在逐漸增長但增長速度相對較為緩慢,通過對實驗環(huán)境的觀察發(fā)現(xiàn),這一階段的增長是智能體學(xué)習(xí)到了迅速到達(dá)某一奪控點的策略,其能夠迅速獲得占領(lǐng)奪控點的收益,而A3C算法由于其探索效率的問題,相對學(xué)到這一策略的速度更慢。DQN算法收益曲線相對較低,通過觀察其訓(xùn)練場景發(fā)現(xiàn),其在最初階段能夠逐漸學(xué)習(xí)到前往奪控點,但無法學(xué)習(xí)到摧毀敵方元素的有效策略,甚至始終無法找到第二個奪控點,而敵方單位是規(guī)則操控對奪控點進(jìn)行占領(lǐng)以及攻擊,面對此情況采用DQN算法的智能體經(jīng)常損失慘重,始終沒有學(xué)習(xí)到有效應(yīng)對的方式,傳統(tǒng)的深度學(xué)習(xí)方法在此種對抗場景下效果較差。
圖5 算法收益曲線對比
從最終的收益可以看出MI-A3C算法相較DQN和A3C算法都有較大的優(yōu)勢,其最終收益能穩(wěn)定到65左右,能夠占領(lǐng)兩個奪控點,并殲滅所有敵方元素,自身損失1到2個單位,可以較好地完成所有任務(wù)。因此可以得出結(jié)論,ML-A3C算法在智能指揮控制上,能夠通過增加智能體的探索性,獲得更多的技能來提升智能對抗的效能。
通過觀察到MI-A3C算法收益曲線發(fā)現(xiàn),智能體在某一時刻會產(chǎn)生收益下降的情況,通過分析實驗情況發(fā)現(xiàn),當(dāng)出現(xiàn)收益下降的時刻是智能體學(xué)到了一種策略,但此種策略在此刻并未立即獲得收益,例如集群行動,隨后的動作因為策略是新的,所以之后智能體的動作會與之前的不同,也就會出現(xiàn)無法更好完成任務(wù)的情況,于是出現(xiàn)收益下降。在經(jīng)過長時間的學(xué)習(xí)后,智能體學(xué)會如何更好地采取這一策略后,任務(wù)完成情況就會順利,收益也隨之上升,這樣也證明了學(xué)到的策略是有效的。
針對智能對抗環(huán)境下的智能決策問題,提出了一種基于互信息策略發(fā)現(xiàn)的A3C改進(jìn)算法ML-A3C。該算法通過互信息使得智能體能夠通過狀態(tài)的變化來發(fā)現(xiàn)更多具有長遠(yuǎn)收益的策略,同時采用option分層的方式,將策略z動作進(jìn)行劃分,并將其互信息與神經(jīng)網(wǎng)絡(luò)參數(shù)進(jìn)行互聯(lián)。最終通過實驗證明,對智能體穩(wěn)定后的數(shù)據(jù)進(jìn)行了統(tǒng)計(見表4),通過訓(xùn)練的智能體在對抗實驗中能夠?qū)崿F(xiàn)更有利的策略,來保存己方兵力,摧毀敵方單元。MI-A3C算法可以為復(fù)雜環(huán)境多兵種聯(lián)合對抗進(jìn)行仿真模擬,為智能指揮決策提供理論依據(jù),對現(xiàn)實戰(zhàn)場中的應(yīng)用具有一定的參考意義。
表4 穩(wěn)定后不同算法的實驗數(shù)據(jù)
但該算法也存在一定的局限性,算法的仿真試驗平臺所開發(fā)的地圖環(huán)境能夠較好地貼近現(xiàn)實地圖環(huán)境,但實驗的元素依舊較少,屬于小分隊形式的戰(zhàn)場對抗,MI-A3C算法在小規(guī)模的戰(zhàn)場中能夠取得良好的效果,但并未進(jìn)行大規(guī)模的戰(zhàn)場模擬試驗,所以對大規(guī)模的對戰(zhàn)能否取得良好的效果仍需進(jìn)一步進(jìn)行證明,同時算法增強了對環(huán)境探索的能力,當(dāng)環(huán)境復(fù)雜度較高時,學(xué)習(xí)到有效策略的時長會增加。