多智能體強(qiáng)化學(xué)習(xí)算法復(fù)現(xiàn)與工程落地)
JMLR 2023那篇關(guān)于通用異構(gòu)多智能體合作場(chǎng)景的強(qiáng)化學(xué)習(xí)算法我翻來(lái)覆去讀了好幾遍。最初是沖著“通用”和“異構(gòu)”這兩個(gè)關(guān)鍵詞去的因?yàn)檫@兩個(gè)特性一旦放到一起基本上把常見(jiàn)的多智能體強(qiáng)化學(xué)習(xí)套路全都推翻了。這篇內(nèi)容不打算復(fù)述論文的證明和公式我更想以復(fù)現(xiàn)和工程落地的視角聊聊這套算法到底解決了什么問(wèn)題、設(shè)計(jì)上有哪些值得借鑒的思路以及我在自己的仿真場(chǎng)景里跑通它時(shí)踩到的一堆坑。適合看這篇的人有三類一類是正在做多機(jī)器人協(xié)同控制的研究生一類是工作中需要處理異構(gòu)智能體調(diào)度問(wèn)題的工程師還有一類是對(duì)強(qiáng)化學(xué)習(xí)有一定基礎(chǔ)、想拓寬視野的算法愛(ài)好者。如果你是零基礎(chǔ)也能看懂整體思路因?yàn)檫@里的核心概念我都會(huì)用大白話拆開(kāi)講。1. 為什么“通用異構(gòu)合作”這三個(gè)詞湊在一起就讓主流方法失效1.1 主流多智能體算法默認(rèn)的同構(gòu)假設(shè)先說(shuō)一下大多數(shù)多智能體強(qiáng)化學(xué)習(xí)方法的隱含前提。很多經(jīng)典方法在設(shè)計(jì)時(shí)就默認(rèn)了所有智能體長(zhǎng)得一樣觀測(cè)空間維度相同動(dòng)作空間相同策略網(wǎng)絡(luò)可以完全共享一份權(quán)重。這就導(dǎo)致它們天然假設(shè)所有智能體可以互換位置而不影響功能。但現(xiàn)實(shí)場(chǎng)景根本不是這樣。舉個(gè)例子我在一次模擬的倉(cāng)儲(chǔ)協(xié)作任務(wù)里同時(shí)用過(guò)三種機(jī)器人一臺(tái)四輪差速底盤負(fù)責(zé)搬運(yùn)一臺(tái)帶機(jī)械臂的移動(dòng)操作平臺(tái)負(fù)責(zé)抓取還有一臺(tái)只負(fù)責(zé)感知的巡檢設(shè)備。這三者觀測(cè)數(shù)據(jù)完全不一樣一個(gè)輸入的是激光雷達(dá)點(diǎn)云一個(gè)輸入的是相機(jī)圖像和關(guān)節(jié)角度還有一個(gè)輸入的是二維地圖坐標(biāo)。動(dòng)作空間更是天差地別底盤輸出左右輪速機(jī)械臂輸出關(guān)節(jié)目標(biāo)角度巡檢設(shè)備干脆只需要導(dǎo)航指令。同構(gòu)假設(shè)在這里直接崩掉。如果強(qiáng)行把所有觀測(cè)拼成同一個(gè)長(zhǎng)度讓三個(gè)智能體共享策略網(wǎng)絡(luò)網(wǎng)絡(luò)內(nèi)部的第一個(gè)全連接層就會(huì)因?yàn)檩斎刖S度不匹配而出錯(cuò)即使你用補(bǔ)零法把所有觀測(cè)強(qiáng)行拉到同一維度網(wǎng)絡(luò)也學(xué)不明白因?yàn)槟硞€(gè)位置上的數(shù)值對(duì)不同智能體根本沒(méi)有可比性。1.2 合作不等于無(wú)私信用分配問(wèn)題被異構(gòu)放大了合作場(chǎng)景的經(jīng)典難點(diǎn)是全局獎(jiǎng)勵(lì)下如何判斷“誰(shuí)貢獻(xiàn)了什么”。假設(shè)一個(gè)團(tuán)隊(duì)任務(wù)整體成功了給一個(gè)很大的共同獎(jiǎng)勵(lì)但隊(duì)伍里有甲乙兩員大將甲的貢獻(xiàn)占八成乙一直在劃水它們拿到的卻是一樣的獎(jiǎng)勵(lì)。這會(huì)導(dǎo)致劃水的乙永遠(yuǎn)沒(méi)有改進(jìn)動(dòng)力而甲的積極性也會(huì)被慢慢磨掉。在異構(gòu)場(chǎng)景里這個(gè)問(wèn)題會(huì)更棘手。異構(gòu)意味著不同智能體對(duì)全局目標(biāo)的貢獻(xiàn)尺度本身就不同。一個(gè)機(jī)械臂可以把抓取成功率從三成提到九成對(duì)全局的邊際貢獻(xiàn)是顯著且直接的一臺(tái)巡檢設(shè)備只是多提供了一條局部信息貢獻(xiàn)是間接的、微弱的。如果信用分配機(jī)制不考慮這種異質(zhì)性機(jī)械臂很快就會(huì)“擺爛”因?yàn)樗l(fā)現(xiàn)自己無(wú)論怎么努力分到的獎(jiǎng)勵(lì)和那臺(tái)默默無(wú)聞的巡檢設(shè)備差不多。1.3 通用性要求的不只是換個(gè)網(wǎng)絡(luò)結(jié)構(gòu)這個(gè)標(biāo)題里最扎眼的其實(shí)是“通用”兩個(gè)字。有些人覺(jué)得通用就是讓網(wǎng)絡(luò)參數(shù)多一點(diǎn)、結(jié)構(gòu)復(fù)雜一點(diǎn)就能兼容異構(gòu)輸入。這是誤解。通用性意味著三個(gè)層面的能力第一面對(duì)任意種類的異構(gòu)觀測(cè)和動(dòng)作空間不需要人為設(shè)計(jì)專門的適配層第二智能體數(shù)量可以變化新增一個(gè)智能體或臨時(shí)少一個(gè)智能體算法不需要重新訓(xùn)練第三任務(wù)目標(biāo)可以在一定范圍內(nèi)遷移而不只是過(guò)度擬合某一個(gè)場(chǎng)景。我在復(fù)現(xiàn)初期犯過(guò)一個(gè)典型的錯(cuò)誤給每個(gè)智能體手工設(shè)計(jì)了一個(gè)編碼器用if-else分支去處理三種不同類型的觀測(cè)。結(jié)果換一個(gè)場(chǎng)景或加一個(gè)新的智能體類型就得回去改代碼重新訓(xùn)練。這和“通用”兩個(gè)字完全不沾邊。所以真正需要的是一個(gè)機(jī)制層面的方案而不是網(wǎng)絡(luò)結(jié)構(gòu)層面的補(bǔ)丁。2. 整體設(shè)計(jì)思路把異構(gòu)智能體“翻譯”到統(tǒng)一空間再協(xié)作2.1 集中訓(xùn)練、分布執(zhí)行異構(gòu)場(chǎng)景下的務(wù)實(shí)底座這套算法采用了我個(gè)人非常推崇的框架集中訓(xùn)練、分布執(zhí)行。訓(xùn)練的時(shí)候所有智能體的信息都可以被中心調(diào)用相當(dāng)于大家坐在一張桌子上開(kāi)會(huì)部署上線之后每個(gè)智能體只靠自己觀測(cè)到的局部信息做決策相當(dāng)于散會(huì)后各回各家靠開(kāi)會(huì)時(shí)學(xué)會(huì)的默契干活。這個(gè)框架的好處在于訓(xùn)練階段可以利用全局信息來(lái)解決信用分配問(wèn)題同時(shí)部署階段不需要強(qiáng)實(shí)時(shí)通信。異構(gòu)場(chǎng)景里通信往往是奢侈的有的智能體帶寬高有的智能體連持續(xù)通信都做不到但集中訓(xùn)練階段沒(méi)有這個(gè)限制因?yàn)閿?shù)據(jù)都是離線收集的。所以這個(gè)底座選擇不是偶然而是被場(chǎng)景倒逼出來(lái)的。2.2 異構(gòu)編碼器 共享決策層結(jié)構(gòu)怎么搭這套方法在結(jié)構(gòu)上給了我一個(gè)很重要的啟發(fā)把智能體分成“感知層”和“決策層”來(lái)解耦。感知層是異構(gòu)的每個(gè)智能體用自己的編碼器把原始觀測(cè)轉(zhuǎn)化成統(tǒng)一長(zhǎng)度的語(yǔ)義向量決策層是同構(gòu)的所有智能體共享后續(xù)的策略網(wǎng)絡(luò)在語(yǔ)義向量空間里做決策。你可以把編碼器想象成翻譯器把德語(yǔ)、日語(yǔ)、中文先都翻譯成英語(yǔ)大家再用英語(yǔ)交流。關(guān)鍵是這里所說(shuō)的“英語(yǔ)”不是某個(gè)自然語(yǔ)言而是一個(gè)語(yǔ)義特征空間。論文里的辦法是用一個(gè)映射函數(shù)把不同維度的觀測(cè)統(tǒng)一編碼到同一個(gè)維度之后所有下游網(wǎng)絡(luò)就有了統(tǒng)一的輸入接口。我當(dāng)時(shí)在倉(cāng)儲(chǔ)場(chǎng)景里按這個(gè)思路復(fù)現(xiàn)最直觀的收益是新增一種智能體類型只需要額外寫一個(gè)幾十行的觀測(cè)編碼器不需要改動(dòng)任何決策網(wǎng)絡(luò)結(jié)構(gòu)。這跟我之前的if-else方案完全不在一個(gè)復(fù)雜度級(jí)別。而且這還帶來(lái)一個(gè)額外好處決策層的參數(shù)可以在不同智能體之間共享參數(shù)規(guī)模大幅下降訓(xùn)練數(shù)據(jù)利用率也更高。2.3 可變智能體數(shù)量的處理注意力機(jī)制的價(jià)值數(shù)量可變是通用性里最難啃的一塊。很多算法在模型輸入層面就寫死了最大智能體數(shù)量比如固定為5個(gè)或10個(gè)然后通過(guò)掩碼處理缺位。但真要部署到實(shí)際場(chǎng)景團(tuán)隊(duì)規(guī)模浮動(dòng)是非常正常的某個(gè)智能體突然掉線、臨時(shí)加入一個(gè)新成員都需要算法能在線適應(yīng)。這套算法把數(shù)量可變問(wèn)題交給了注意力機(jī)制。注意力機(jī)制天然支持任意數(shù)量的輸入每個(gè)智能體先計(jì)算出自己的查詢向量再和其他所有智能體的鍵向量做匹配最終得到加權(quán)聚合的信息。輸入多一個(gè)智能體或者少一個(gè)智能體只是注意力權(quán)重矩陣的尺寸變化網(wǎng)絡(luò)本身不需要改動(dòng)。讓我用一個(gè)特別生活化的例子解釋注意力為什么有效你在一個(gè)嘈雜的會(huì)議里要聽(tīng)清對(duì)面同事說(shuō)話你不會(huì)把耳朵堵住讓音量平均而是會(huì)自動(dòng)放大對(duì)面那個(gè)方向的聲音壓低其他聲音。注意力機(jī)制干的正是這件事每個(gè)智能體根據(jù)當(dāng)前任務(wù)需要?jiǎng)討B(tài)決定要重點(diǎn)關(guān)注哪個(gè)同伴的信息。相比把所有向量拼接在一起喂給固定維度的MLP這種動(dòng)態(tài)加權(quán)的方式在數(shù)量變化和異構(gòu)差異面前要魯棒得多。3. 策略學(xué)習(xí)里的三個(gè)關(guān)鍵機(jī)制表征、交互、信用分配3.1 觀測(cè)空間異構(gòu)時(shí)策略網(wǎng)絡(luò)怎么輸出可比較的動(dòng)作價(jià)值異構(gòu)編碼器把觀測(cè)統(tǒng)一到同一個(gè)語(yǔ)義空間后下一步的難點(diǎn)是如何對(duì)異構(gòu)動(dòng)作空間做決策。機(jī)械臂的動(dòng)作是個(gè)連續(xù)的關(guān)節(jié)角度向量底盤的動(dòng)作是左右輪速它們根本不在同一個(gè)數(shù)學(xué)空間里沒(méi)法直接讓一個(gè)輸出層同時(shí)生成兩類動(dòng)作。這套算法的做法是公共策略網(wǎng)絡(luò)只負(fù)責(zé)產(chǎn)生一個(gè)中間層特征最后一層根據(jù)每個(gè)智能體的實(shí)際動(dòng)作空間掛一個(gè)獨(dú)立的小型輸出頭。這就好比公共大腦負(fù)責(zé)想“下一步該朝哪個(gè)方向努力”而每個(gè)智能體各自的“四肢”負(fù)責(zé)把這個(gè)意圖翻譯成自己身體能執(zhí)行的指令。我在復(fù)現(xiàn)時(shí)對(duì)這一點(diǎn)印象很深因?yàn)橹昂芏喾椒ㄒ磸?qiáng)行把異構(gòu)動(dòng)作向量拼接起來(lái)用一個(gè)超大輸出空間統(tǒng)一輸出導(dǎo)致訓(xùn)練極其稀疏要么干脆給每個(gè)智能體單獨(dú)維護(hù)一套策略參數(shù)爆炸。這種“共享特征獨(dú)立頭”的折中方案在復(fù)雜度和性能之間取得了很好的平衡。3.2 智能體之間到底交互什么從向量拼接走向注意力融合在多智能體協(xié)作里每個(gè)智能體不能只盯著自己的觀測(cè)否則很容易做出局部最優(yōu)的決策。傳統(tǒng)做法是把所有智能體的觀測(cè)拼接成一個(gè)超長(zhǎng)向量再送進(jìn)網(wǎng)絡(luò)。這個(gè)方案在智能體數(shù)量少且固定的情況下還能用但在異構(gòu)、數(shù)量可變的場(chǎng)景里就很別扭。這套算法里的交互單元選擇了注意力機(jī)制。具體流程大致是每個(gè)智能體把經(jīng)過(guò)編碼的語(yǔ)義向量通過(guò)三個(gè)線性映射分別生成查詢、鍵和值然后用查詢和所有鍵做點(diǎn)積歸一化得到權(quán)重最后對(duì)所有的值做加權(quán)求和。這個(gè)聚合結(jié)果會(huì)再次拼回自己的決策向量作為一個(gè)“協(xié)作上下文”。有一個(gè)細(xì)節(jié)值得單獨(dú)說(shuō)注意力機(jī)制的掩碼設(shè)計(jì)。在訓(xùn)練早期如果讓所有智能體互相看得太清每個(gè)智能體的輸入中來(lái)自他人的信息占比會(huì)相當(dāng)高導(dǎo)致決策嚴(yán)重依賴隊(duì)友而忽略了自己的局部感知能力。這種過(guò)度耦合在分布式執(zhí)行時(shí)會(huì)帶來(lái)災(zāi)難一旦部署時(shí)某個(gè)隊(duì)友暫時(shí)不可見(jiàn)策略立刻失靈。所以建議在訓(xùn)練時(shí)對(duì)注意力層加入一個(gè)可調(diào)的隨機(jī)掩碼讓智能體學(xué)會(huì)不依賴某個(gè)特定隊(duì)友也能做出合理決策。這也是通用性的一個(gè)隱式保障。3.3 全局獎(jiǎng)勵(lì)下的信用分配不能簡(jiǎn)單算差值信用分配問(wèn)題在這一類算法里通常是靠集中訓(xùn)練的Critic來(lái)解決的。Critic可以獲取全局狀態(tài)和所有智能體的信息理論上可以對(duì)全局Q值進(jìn)行精準(zhǔn)評(píng)估。但真正的難點(diǎn)在于怎么把全局價(jià)值合理地歸因到每一個(gè)異構(gòu)智能體上。早期的做法是計(jì)算一個(gè)智能體動(dòng)作改變前后全局Q值的差值近似作為該智能體的貢獻(xiàn)。這在同構(gòu)場(chǎng)景下勉強(qiáng)夠用但異構(gòu)場(chǎng)景下因?yàn)椴煌悄荏w的價(jià)值尺度差距巨大這種差值往往方差很高無(wú)法穩(wěn)定指導(dǎo)策略更新。這套算法采用的是一種分布式價(jià)值分解的思路全局Q值不再是一個(gè)簡(jiǎn)單數(shù)值而是通過(guò)一個(gè)聚合函數(shù)把每個(gè)智能體的個(gè)體Q值組合起來(lái)。組合函數(shù)的參數(shù)由全局狀態(tài)來(lái)調(diào)節(jié)從而可以自適應(yīng)地體現(xiàn)異質(zhì)性。比如當(dāng)機(jī)械臂在關(guān)鍵抓取階段時(shí)全局狀態(tài)會(huì)讓組合函數(shù)給機(jī)械臂的個(gè)體Q值更高的權(quán)重而不是機(jī)械地求和求平均。我當(dāng)時(shí)復(fù)現(xiàn)時(shí)對(duì)這一點(diǎn)特別留意因?yàn)楹芏鄬?shí)現(xiàn)偷懶直接用Q_tot sum(Q_i)這在同構(gòu)任務(wù)里沒(méi)問(wèn)題但在異構(gòu)任務(wù)里會(huì)嚴(yán)重低估低動(dòng)作維度智能體的貢獻(xiàn)導(dǎo)致只有動(dòng)作空間大的智能體在持續(xù)學(xué)習(xí)。使用帶全局狀態(tài)調(diào)制權(quán)重的方式每個(gè)智能體都能獲得相對(duì)合理的梯度信號(hào)。4. 復(fù)現(xiàn)一個(gè)異構(gòu)協(xié)作場(chǎng)景環(huán)境、配置、指標(biāo)4.1 自建場(chǎng)景異構(gòu)程度拉滿的搬運(yùn)任務(wù)為了驗(yàn)證這套算法我沒(méi)有直接使用現(xiàn)成的多智能體基準(zhǔn)環(huán)境而是自建了一個(gè)模擬項(xiàng)目X專門用來(lái)逼出異構(gòu)問(wèn)題的各個(gè)層面。場(chǎng)景設(shè)定很簡(jiǎn)單一個(gè)倉(cāng)庫(kù)里有一臺(tái)四輪差速底盤、一臺(tái)帶四自由度機(jī)械臂的平臺(tái)、一架懸停的視覺(jué)偵查設(shè)備。任務(wù)是從兩個(gè)貨架分別取一件貨物放到指定出口區(qū)域。三個(gè)智能體的異構(gòu)體現(xiàn)在四個(gè)維度觀測(cè)空間維度不同底盤是10維的測(cè)距傳感器向量機(jī)械臂平臺(tái)是關(guān)節(jié)狀態(tài)加一個(gè)小范圍視覺(jué)特征偵查設(shè)備是全局地圖坐標(biāo)加目標(biāo)位置動(dòng)作空間類型不同底盤是2維連續(xù)輪速機(jī)械臂是4維連續(xù)關(guān)節(jié)增量偵查設(shè)備是3維連續(xù)速度指令動(dòng)力學(xué)模型不同底盤不能原地轉(zhuǎn)向機(jī)械臂平臺(tái)可以原地轉(zhuǎn)向但速度慢偵查設(shè)備移動(dòng)不受地面約束控制頻率也不同底盤和機(jī)械臂是低頻執(zhí)行偵查設(shè)備相對(duì)高頻。這個(gè)小場(chǎng)景其實(shí)很能說(shuō)明問(wèn)題。我同時(shí)用了一套只支持同構(gòu)智能體的經(jīng)典多智能體算法做對(duì)照組結(jié)果對(duì)照組在訓(xùn)練了同樣步數(shù)后任務(wù)成功率只有三成多一點(diǎn)而采用統(tǒng)一空間映射加注意力融合的這套方案成功率可以達(dá)到七成以上。差距主要來(lái)自對(duì)照組完全無(wú)法處理三個(gè)智能體觀測(cè)維度不一致的問(wèn)題。4.2 關(guān)鍵超參數(shù)與訓(xùn)練調(diào)度復(fù)現(xiàn)這套算法的過(guò)程中我總結(jié)了一份比較關(guān)鍵的配置參考表。雖然不同的實(shí)際場(chǎng)景可能需要微調(diào)但這組參數(shù)對(duì)“異構(gòu)程度較高”的任務(wù)基本適用配置項(xiàng)參考值我的備注語(yǔ)義編碼維度64維度太低會(huì)丟失異構(gòu)特征太高會(huì)導(dǎo)致訓(xùn)練稀疏注意力層數(shù)2單層在簡(jiǎn)單任務(wù)夠用復(fù)雜任務(wù)建議兩層注意力頭數(shù)4多頭能捕捉不同類型智能體之間的多種交互模式經(jīng)驗(yàn)回放池大小100萬(wàn)步異構(gòu)數(shù)據(jù)豐富池子太小會(huì)造成采樣重復(fù)批量大小512批量太小會(huì)讓少數(shù)類型的智能體樣本主導(dǎo)更新學(xué)習(xí)率3e-4用Adam優(yōu)化器再大容易震蕩目標(biāo)網(wǎng)絡(luò)更新系數(shù)0.001軟更新硬更新在異構(gòu)任務(wù)里表現(xiàn)很差熵正則系數(shù)0.01訓(xùn)練中期衰減到0.005保持一點(diǎn)探索梯度裁剪10異構(gòu)智能體Q值尺度差異大裁剪必需訓(xùn)練調(diào)度上也有講究。我一開(kāi)始把所有智能體丟進(jìn)同一個(gè)經(jīng)驗(yàn)回放池隨機(jī)采樣更新結(jié)果訓(xùn)練到一半時(shí)發(fā)現(xiàn)底盤的行為能力退化得厲害。原因是機(jī)械臂和偵查設(shè)備產(chǎn)生的樣本在回放池里占了大頭底盤的樣本被稀釋了。后來(lái)我改成按智能體類型分層采樣保證每類樣本有最低占比問(wèn)題立刻緩解。4.3 評(píng)測(cè)方法為什么只看reward不夠很多人在評(píng)估多智能體算法時(shí)只盯著平均獎(jiǎng)勵(lì)曲線。這個(gè)指標(biāo)在異構(gòu)合作場(chǎng)景里特別容易誤導(dǎo)因?yàn)楠?jiǎng)勵(lì)數(shù)字的漲跌根本看不出是哪類智能體在進(jìn)步。我自己設(shè)計(jì)了三類指標(biāo)配合使用。第一類是協(xié)作任務(wù)成功率這個(gè)最直接任務(wù)完成就是成功就是1沒(méi)完成就是0。第二類是策略多樣性指標(biāo)我用每個(gè)智能體動(dòng)作分布的熵來(lái)衡量如果某個(gè)智能體的策略熵過(guò)早掉到接近0說(shuō)明它可能根本沒(méi)學(xué)到有用的行為只是固化成了一種隨機(jī)動(dòng)作。第三類是異構(gòu)泛化指數(shù)具體做法是訓(xùn)練完成后新加一種模擬的智能體類型不再訓(xùn)練直接觀察原有策略在新智能體加入后任務(wù)成功率下降了百分之多少。這個(gè)指標(biāo)非常殘酷但特別能檢驗(yàn)“通用”二字是不是空話。我記得第一次跑完這套算法的評(píng)測(cè)三張曲線擺在一起才發(fā)現(xiàn)平均獎(jiǎng)勵(lì)一直在漲但機(jī)械臂平臺(tái)的策略熵掉得異??於妆P幾乎沒(méi)有在學(xué)。如果只看平均獎(jiǎng)勵(lì)我根本不會(huì)意識(shí)到訓(xùn)練出現(xiàn)了問(wèn)題。所以強(qiáng)烈建議凡做異構(gòu)多智能體訓(xùn)練別省這三類指標(biāo)的功夫。5. 真正落地時(shí)的經(jīng)驗(yàn)教訓(xùn)與排查思路5.1 觀測(cè)padding的假信號(hào)復(fù)現(xiàn)中遇到的第一個(gè)坑來(lái)自觀測(cè)拼接。我的三個(gè)智能體觀測(cè)維度不一樣最早我圖省事把所有觀測(cè)統(tǒng)一補(bǔ)零到同一個(gè)最長(zhǎng)維度然后直接送進(jìn)共享網(wǎng)絡(luò)。訓(xùn)練出來(lái)的協(xié)作成功率很低而且現(xiàn)象很奇怪某種特定方向的信號(hào)會(huì)讓所有智能體都產(chǎn)生完全相同的反應(yīng)。排查后才發(fā)現(xiàn)補(bǔ)零位置對(duì)應(yīng)的權(quán)重沒(méi)有被充分訓(xùn)練但網(wǎng)絡(luò)又把零值當(dāng)成了有特定語(yǔ)義的“有效信號(hào)”。尤其是注意力機(jī)制里補(bǔ)零的維度也參與計(jì)算查詢和鍵的匹配導(dǎo)致注意力權(quán)重被無(wú)意義的零維度帶偏。解決方法是兩件事同時(shí)做一是在注意力打分階段加入一個(gè)有效信息掩碼讓補(bǔ)零位置的元素不參與權(quán)重計(jì)算二是在編碼器輸出后做層歸一化把真實(shí)特征和無(wú)效信息的尺度分開(kāi)。這兩招加上之后訓(xùn)練曲線明顯開(kāi)始正常。5.2 訓(xùn)練震蕩時(shí)我的排查順序異構(gòu)多智能體訓(xùn)練非常容易震蕩表現(xiàn)為獎(jiǎng)勵(lì)曲線規(guī)律性地大起大落。我在這個(gè)過(guò)程里總結(jié)出一個(gè)固定排查順序每次都能產(chǎn)生效果。第一先查獎(jiǎng)勵(lì)尺度。異構(gòu)智能體各自執(zhí)行不同動(dòng)作獲得的子獎(jiǎng)勵(lì)數(shù)值差異可能高達(dá)幾十倍如果不做全局獎(jiǎng)勵(lì)歸一化梯度更新會(huì)被數(shù)值大的智能體主導(dǎo)。我用的方法是對(duì)每個(gè)智能體的獎(jiǎng)勵(lì)除以它自身歷史回報(bào)的標(biāo)準(zhǔn)差而不是除以全局標(biāo)準(zhǔn)差。第二查目標(biāo)網(wǎng)絡(luò)更新頻率。異構(gòu)場(chǎng)景下不同智能體的策略變化速度不一致目標(biāo)網(wǎng)絡(luò)更新太頻繁會(huì)導(dǎo)致評(píng)價(jià)指標(biāo)來(lái)回漂移。我最終把軟更新系數(shù)從0.01調(diào)低到0.001震蕩幅度立刻減少三分之一。第三查經(jīng)驗(yàn)回放池中的類別均衡。前面已經(jīng)提到分層采樣的重要性這里不再重復(fù)但強(qiáng)調(diào)一點(diǎn)分層采樣只能保證數(shù)量均衡不能保證數(shù)據(jù)質(zhì)量均衡建議再給每類智能體設(shè)定一個(gè)最小有效樣本門檻一批樣本的平均TD誤差過(guò)低就不允許參與更新。5.3 從仿真到實(shí)際應(yīng)用的三個(gè)現(xiàn)實(shí)差距最后一個(gè)章節(jié)聊一下仿真和實(shí)際部署之間的落差。第一點(diǎn)是注意力機(jī)制的計(jì)算開(kāi)銷。仿真里十幾個(gè)智能體還能跑得動(dòng)但真實(shí)場(chǎng)景如果有幾十上百個(gè)節(jié)點(diǎn)全連接注意力矩陣的復(fù)雜度會(huì)爆炸。我的建議是采用鄰居采樣的近似方式每個(gè)智能體只和空間距離最近的K個(gè)其他智能體做交互實(shí)測(cè)在合作類任務(wù)里性能損失可以控制在可接受范圍內(nèi)。第二點(diǎn)是仿真里的觀測(cè)是非常干凈的但真實(shí)傳感器的數(shù)據(jù)充滿了噪聲和缺失。我試過(guò)在仿真環(huán)境里直接給激光測(cè)距向量疊加高斯噪聲策略性能立刻跳水。所以在訓(xùn)練時(shí)就該做噪聲注入和觀測(cè)遮擋訓(xùn)練而不是等上了真機(jī)再補(bǔ)救。第三點(diǎn)是執(zhí)行頻率差異。仿真里所有智能體按同一頻率決策但真實(shí)系統(tǒng)里底盤和視覺(jué)設(shè)備的決策頻率并不同步。解決思路有兩種低頻率智能體把動(dòng)作重復(fù)執(zhí)行幾次或者在模型輸入里加入時(shí)間戳特征。我個(gè)人試下來(lái)加入時(shí)間戳特征的方式更優(yōu)雅也能讓注意力機(jī)制感知到信息的新鮮程度。最后再分享一條個(gè)人經(jīng)驗(yàn)這類面向通用異構(gòu)多智能體合作的算法真正的難點(diǎn)從來(lái)不在網(wǎng)絡(luò)結(jié)構(gòu)而在數(shù)據(jù)采樣和訓(xùn)練穩(wěn)定性。如果你想要復(fù)現(xiàn)請(qǐng)從規(guī)模最小的異構(gòu)場(chǎng)景開(kāi)始先做對(duì)兩三個(gè)智能體再逐步擴(kuò)大數(shù)量和新類型不要一上來(lái)就追求大而全。我當(dāng)初就是因?yàn)橐婚_(kāi)始就把場(chǎng)景搞得過(guò)重浪費(fèi)了大量時(shí)間在調(diào)試而不是理解核心機(jī)制上。等你把這類算法的訓(xùn)練手感找到會(huì)發(fā)現(xiàn)它帶來(lái)的最大收益不是某張可視化圖表上的數(shù)值提升而是面對(duì)新任務(wù)時(shí)你不用再為每個(gè)新智能體重寫一套訓(xùn)練邏輯。