化學(xué)習(xí):如何通過智能體特異性偏好提升協(xié)作效率)
1. 項(xiàng)目概述當(dāng)多智能體強(qiáng)化學(xué)習(xí)遇上“個(gè)性化偏好”在傳統(tǒng)的多智能體強(qiáng)化學(xué)習(xí)Multi-Agent Reinforcement Learning, MARL領(lǐng)域我們常常面臨一個(gè)核心困境如何讓一群智能體在共享環(huán)境中高效協(xié)作或競(jìng)爭(zhēng)經(jīng)典方法無論是集中式訓(xùn)練分布式執(zhí)行CTDE還是基于價(jià)值分解的算法都傾向于為所有智能體設(shè)定一個(gè)統(tǒng)一的、全局的優(yōu)化目標(biāo)。這就像在一個(gè)團(tuán)隊(duì)里要求所有成員都為了同一個(gè)KPI拼命卻忽略了每個(gè)人可能有不同的專長(zhǎng)、興趣和內(nèi)在驅(qū)動(dòng)力。結(jié)果往往是智能體們要么陷入“搭便車”的困境要么因?yàn)槟繕?biāo)沖突而互相掣肘學(xué)習(xí)效率低下策略的魯棒性和泛化能力也大打折扣?!癕ulti-Agent Reinforcement Learning via Agent-Specific Preference”這個(gè)標(biāo)題恰恰點(diǎn)出了一個(gè)被長(zhǎng)期忽視但至關(guān)重要的突破口智能體特異性偏好。這不僅僅是給每個(gè)智能體一個(gè)不同的獎(jiǎng)勵(lì)函數(shù)那么簡(jiǎn)單。它更深層的含義在于承認(rèn)并建模每個(gè)智能體作為獨(dú)立個(gè)體的“內(nèi)在動(dòng)機(jī)”。這個(gè)偏好可能源于其角色如游戲中的坦克、輸出、輔助、其觀察能力的局限性、其行動(dòng)空間的特性甚至是其長(zhǎng)期的學(xué)習(xí)目標(biāo)。通過為每個(gè)智能體設(shè)計(jì)并學(xué)習(xí)其獨(dú)有的偏好我們實(shí)際上是在引導(dǎo)它們從“被動(dòng)執(zhí)行統(tǒng)一指令”轉(zhuǎn)向“主動(dòng)尋求符合自身特性的最優(yōu)行為模式”。最近像“actor-attention-critic for multi-agent reinforcement learning”這類熱詞的出現(xiàn)也反映了學(xué)界正試圖用更精細(xì)的注意力機(jī)制來建模智能體間的復(fù)雜關(guān)系。而“Agent-Specific Preference”可以看作是這一思路的進(jìn)一步深化注意力機(jī)制解決了“我該關(guān)注誰”的問題而特異性偏好則解決了“我關(guān)注他們是為了達(dá)成我自己的什么目標(biāo)”的問題。兩者結(jié)合有望讓多智能體系統(tǒng)展現(xiàn)出更接近真實(shí)生物群體的、自組織、自適應(yīng)的智能行為。這篇文章我將結(jié)合自己在這個(gè)方向上的摸索和實(shí)踐拆解如何將“智能體特異性偏好”這一概念落地到實(shí)際的MARL算法中。無論你是剛接觸MARL的新手還是正在尋找算法突破點(diǎn)的研究者希望這篇從原理到實(shí)操、充滿“踩坑”經(jīng)驗(yàn)的分享能給你帶來一些切實(shí)的啟發(fā)。2. 核心思路為什么“一刀切”的獎(jiǎng)勵(lì)行不通在深入技術(shù)細(xì)節(jié)之前我們必須先從根本上理解為什么引入智能體特異性偏好ASP是必要且有益的。這需要我們從多智能體系統(tǒng)的本質(zhì)矛盾說起。2.1 多智能體系統(tǒng)的核心矛盾全局最優(yōu)與個(gè)體理性在一個(gè)由N個(gè)智能體構(gòu)成的環(huán)境中經(jīng)典的設(shè)定是尋求一個(gè)聯(lián)合策略以最大化所有智能體累積折扣獎(jiǎng)勵(lì)的期望和。這聽起來很合理但問題在于這個(gè)“和”是一個(gè)標(biāo)量它抹平了所有智能體貢獻(xiàn)的差異性。考慮一個(gè)簡(jiǎn)單的合作任務(wù)比如兩個(gè)智能體搬運(yùn)一個(gè)箱子智能體A左側(cè)主要出力承重移動(dòng)緩慢。智能體B右側(cè)輔助平衡移動(dòng)靈活。如果使用全局獎(jiǎng)勵(lì)如箱子到達(dá)目的地的速度那么智能體B可能會(huì)發(fā)現(xiàn)與其費(fèi)力配合A緩慢移動(dòng)不如自己嘗試快速推/拉但這往往會(huì)導(dǎo)致箱子失衡。智能體A則可能因?yàn)橐苿?dòng)慢而“背鍋”獎(jiǎng)勵(lì)始終很低學(xué)習(xí)動(dòng)力不足。這就是信用分配問題的典型體現(xiàn)全局獎(jiǎng)勵(lì)無法清晰界定每個(gè)個(gè)體的貢獻(xiàn)。更糟糕的是在競(jìng)爭(zhēng)或混合場(chǎng)景中一個(gè)統(tǒng)一的全局目標(biāo)可能根本不存在。比如在金融市場(chǎng)模擬中有些智能體的偏好是高風(fēng)險(xiǎn)高回報(bào)有些則是穩(wěn)健增值。強(qiáng)制它們優(yōu)化同一個(gè)市場(chǎng)指數(shù)顯然是不合理的。注意信用分配問題不是ASP要解決的全部。ASP更深層的目標(biāo)是解決目標(biāo)對(duì)齊問題。即使信用分配完美我們知道每個(gè)智能體該得多少分如果這個(gè)“分”本身不是智能體內(nèi)心想要的它依然沒有最優(yōu)的學(xué)習(xí)動(dòng)機(jī)。2.2 Agent-Specific Preference 的定義與形式化那么什么是智能體特異性偏好在我的實(shí)踐中我將其定義為引導(dǎo)智能體 i 行為策略的、與其個(gè)體特性相關(guān)的內(nèi)在目標(biāo)函數(shù)。它通常通過一個(gè)偏好函數(shù) \( \Phi_i \) 來表達(dá)這個(gè)函數(shù)會(huì)修改或生成智能體 i 所接收到的獎(jiǎng)勵(lì)信號(hào)。具體來說對(duì)于一個(gè)智能體 i在時(shí)間步 t環(huán)境給出原始獎(jiǎng)勵(lì) \( r_t^i \)。其特異性偏好 \( \Phi_i \) 會(huì)作用于此產(chǎn)生智能體實(shí)際用于更新的偏好獎(jiǎng)勵(lì) \( \tilde{r}t^i \) \[ \tilde{r}t^i \Phi_i(o_t^i, a_t^i, h_t^i, \theta\phi^i; r_t^i) \] 其中\(zhòng)( o_t^i \) 是局部觀察\( a_t^i \) 是自身動(dòng)作\( h_t^i \) 是歷史信息\( \theta\phi^i \) 是偏好函數(shù)的可學(xué)習(xí)參數(shù)。\( \Phi_i \) 可以有以下幾種常見設(shè)計(jì)模式線性偏置\( \tilde{r}_t^i r_t^i \beta \cdot f(o_t^i, a_t^i) \)。其中 \( f(\cdot) \) 是一個(gè)基于個(gè)體狀態(tài)/動(dòng)作的特征函數(shù)例如鼓勵(lì)探索訪問罕見狀態(tài)、鼓勵(lì)特定行為對(duì)某些動(dòng)作給予小額正獎(jiǎng)勵(lì)或規(guī)避風(fēng)險(xiǎn)對(duì)進(jìn)入危險(xiǎn)狀態(tài)給予懲罰。這里的 \( \beta \) 是偏好強(qiáng)度。非線性重塑\( \tilde{r}t^i g\theta(r_t^i, o_t^i, a_t^i) \)。用一個(gè)神經(jīng)網(wǎng)絡(luò) \( g_\theta \) 直接映射原始獎(jiǎng)勵(lì)和個(gè)體信息到新的獎(jiǎng)勵(lì)。這更靈活但更難訓(xùn)練穩(wěn)定。潛在偏好不直接修改獎(jiǎng)勵(lì)而是為每個(gè)智能體學(xué)習(xí)一個(gè)“偏好向量” \( z_i \)這個(gè)向量作為策略網(wǎng)絡(luò)和價(jià)值網(wǎng)絡(luò)的額外輸入。智能體的策略 \( \pi_i(a^i|o^i, z_i) \) 會(huì)因 \( z_i \) 不同而不同。\( z_i \) 可以通過最大化某個(gè)與個(gè)體相關(guān)的輔助目標(biāo)來學(xué)習(xí)。為什么這種形式有效因?yàn)樗鼘ⅰ皟?yōu)化什么”和“如何優(yōu)化”部分解耦了。環(huán)境提供基本的任務(wù)信號(hào)原始獎(jiǎng)勵(lì)而偏好函數(shù)則根據(jù)智能體的“個(gè)性”對(duì)這個(gè)信號(hào)進(jìn)行個(gè)性化解讀從而引導(dǎo)其學(xué)習(xí)更適合自身角色的策略。2.3 與現(xiàn)有范式的對(duì)比CTDE、VDN、QMIX與ASP為了更清楚定位ASP我們快速對(duì)比一下主流MARL范式CTDE (Centralized Training with Decentralized Execution)訓(xùn)練時(shí)有一個(gè)知道全局信息的中心批評(píng)家執(zhí)行時(shí)各智能體只用局部觀察。ASP可以無縫融入CTDE框架中心批評(píng)家可以評(píng)估基于偏好獎(jiǎng)勵(lì)的聯(lián)合動(dòng)作價(jià)值或者每個(gè)智能體擁有自己的、考慮偏好的批評(píng)家。VDN/QMIX通過將聯(lián)合動(dòng)作價(jià)值函數(shù)分解為個(gè)體價(jià)值函數(shù)的和或單調(diào)混合隱式解決信用分配。ASP與它們是正交的。你可以在VDN/QMIX的架構(gòu)上用 \( \tilde{r}_t^i \) 替代 \( r_t^i \) 來訓(xùn)練個(gè)體價(jià)值函數(shù)從而在分解的基礎(chǔ)上進(jìn)一步賦予每個(gè)智能體不同的優(yōu)化側(cè)重點(diǎn)。Actor-Attention-Critic使用注意力機(jī)制來動(dòng)態(tài)加權(quán)其他智能體的信息以幫助個(gè)體決策。ASP與此是互補(bǔ)的。注意力機(jī)制決定了“我從鄰居那里汲取什么信息”而ASP決定了“我利用這些信息來實(shí)現(xiàn)我自己的什么偏好”。例如一個(gè)偏好“進(jìn)攻”的智能體其注意力機(jī)制可能會(huì)更關(guān)注敵方脆弱單位的信息。實(shí)操心得不要將ASP視為一個(gè)孤立的算法而應(yīng)視為一個(gè)可以嵌入現(xiàn)有MARL主干網(wǎng)絡(luò)的設(shè)計(jì)模塊。我的經(jīng)驗(yàn)是從簡(jiǎn)單的線性偏置開始在QMIX或MADDPG這類成熟算法上做增量式修改成功率最高。3. 算法設(shè)計(jì)核心如何實(shí)現(xiàn)并學(xué)習(xí)智能體特異性偏好理論說清楚了接下來就是落地。如何設(shè)計(jì)并訓(xùn)練這些偏好函數(shù) \( \Phi_i \)這是整個(gè)項(xiàng)目的核心難點(diǎn)。下面我分享兩種經(jīng)過實(shí)踐驗(yàn)證的主流技術(shù)路徑。3.1 路徑一基于策略梯度的端到端偏好學(xué)習(xí)這種方法將偏好函數(shù)的參數(shù) \( \theta_\phi^i \) 也作為可學(xué)習(xí)參數(shù)與策略參數(shù) \( \theta_\pi^i \) 一同優(yōu)化。目標(biāo)是最大化每個(gè)智能體在自身偏好獎(jiǎng)勵(lì)下的長(zhǎng)期累積收益。以MADDPG框架為例進(jìn)行改造。每個(gè)智能體 i 擁有演員網(wǎng)絡(luò) (Actor)\( \mu_i(o_i | \theta_\mu^i) \)輸出動(dòng)作。批評(píng)家網(wǎng)絡(luò) (Critic)\( Q_i(\mathbf{o}, \mathbf{a} | \theta_Q^i) \)輸入全局狀態(tài)和聯(lián)合動(dòng)作輸出個(gè)體Q值。偏好網(wǎng)絡(luò) (Preference Network)\( \Phi_i(o_i, a_i, h_i | \theta_\phi^i) \)輸出偏好獎(jiǎng)勵(lì)調(diào)整量。訓(xùn)練流程如下環(huán)境交互智能體 i 根據(jù)當(dāng)前策略選擇動(dòng)作 \( a_t^i \)獲得環(huán)境原始獎(jiǎng)勵(lì) \( r_t^i \) 和新的觀察 \( o_{t1}^i \)。計(jì)算偏好獎(jiǎng)勵(lì)\( \tilde{r}t^i r_t^i \Phi_i(o_t^i, a_t^i, h_t^i | \theta\phi^i) \)。這里偏好網(wǎng)絡(luò)輸出的是一個(gè)標(biāo)量偏置。存儲(chǔ)經(jīng)驗(yàn)將 \( (\mathbf{o}_t, \mathbf{a}_t, \tilde{\mathbf{r}}t, \mathbf{o}{t1}) \) 存入經(jīng)驗(yàn)回放池。注意存儲(chǔ)的是偏好獎(jiǎng)勵(lì) \( \tilde{\mathbf{r}}_t \)。更新批評(píng)家采樣一個(gè)批次的數(shù)據(jù)用TD誤差更新 \( Q_i \)損失函數(shù)為 \[ L(\theta_Q^i) \mathbb{E}{(\mathbf{o}, \mathbf{a}, \tilde{r}^i, \mathbf{o})}[(Q_i(\mathbf{o}, \mathbf{a}) - y)^2] \] 其中 \( y \tilde{r}^i \gamma Q_i^{\text{target}}(\mathbf{o}, \mathbf{a})|{\mathbf{a}_j \mu^{\text{target}}_j(o_j)} \)。更新演員與偏好網(wǎng)絡(luò)演員和偏好網(wǎng)絡(luò)共同優(yōu)化以最大化 \( Q_i \) 的期望值。其策略梯度為 \[ \nabla_{\theta_\mu^i, \theta_\phi^i} J \approx \mathbb{E}{\mathbf{o}}[\nabla{a^i} Q_i(\mathbf{o}, \mathbf{a})|{a^i\mu_i(o^i)} \cdot \nabla{\theta_\mu^i, \theta_\phi^i} \mu_i(o^i | \theta_\mu^i)] \] 這里的關(guān)鍵是偏好網(wǎng)絡(luò)的參數(shù) \( \theta_\phi^i \) 也通過這個(gè)梯度進(jìn)行更新因?yàn)?\( \mu_i \) 的動(dòng)作選擇依賴于歷史而歷史中存儲(chǔ)的獎(jiǎng)勵(lì)是經(jīng)過當(dāng)前 \( \Phi_i \) 修改過的。這形成了一個(gè)循環(huán)偏好影響?yīng)剟?lì)獎(jiǎng)勵(lì)影響策略策略梯度又反過來更新偏好。踩坑實(shí)錄這種端到端學(xué)習(xí)非常不穩(wěn)定。偏好網(wǎng)絡(luò)很容易學(xué)會(huì)“作弊”——例如直接輸出一個(gè)巨大的正數(shù)讓智能體無視環(huán)境獎(jiǎng)勵(lì)導(dǎo)致策略崩潰。必須施加嚴(yán)格的約束輸出裁剪對(duì) \( \Phi_i \) 的輸出值進(jìn)行硬裁剪如clip(phi, -0.1, 0.1)防止其主導(dǎo)環(huán)境獎(jiǎng)勵(lì)。稀疏化約束在損失函數(shù)中加入對(duì) \( \Phi_i \) 輸出絕對(duì)值的L1正則化鼓勵(lì)偏好只在關(guān)鍵時(shí)間步起作用。滯后更新讓偏好網(wǎng)絡(luò)的學(xué)習(xí)率遠(yuǎn)低于演員網(wǎng)絡(luò)或者每隔多個(gè)演員更新周期才更新一次偏好網(wǎng)絡(luò)使其變化更平滑。3.2 路徑二基于元學(xué)習(xí)的分層偏好學(xué)習(xí)端到端學(xué)習(xí)把偏好當(dāng)作一個(gè)“動(dòng)作”來優(yōu)化但偏好更應(yīng)該是一種緩慢變化的“目標(biāo)”。元學(xué)習(xí)Meta-Learning的思路與此契合將偏好視為智能體需要適應(yīng)的“任務(wù)”在多個(gè)相關(guān)任務(wù)或環(huán)境片段中學(xué)習(xí)如何快速調(diào)整偏好。我采用了一種簡(jiǎn)化版的MAML (Model-Agnostic Meta-Learning)思路來學(xué)習(xí)初始偏好內(nèi)循環(huán) (Inner Loop)對(duì)于一個(gè)智能體 i給定一個(gè)固定的偏好參數(shù) \( \theta_\phi^i \)它在當(dāng)前環(huán)境片段比如一場(chǎng)完整的游戲或一個(gè)回合中運(yùn)行用標(biāo)準(zhǔn)的策略梯度方法更新其策略參數(shù) \( \theta_\pi^i \)但使用由 \( \theta_\phi^i \) 生成的偏好獎(jiǎng)勵(lì)。外循環(huán) (Outer Loop)當(dāng)這個(gè)環(huán)境片段結(jié)束后我們?cè)u(píng)估智能體使用當(dāng)前偏好 \( \theta_\phi^i \) 和更新后策略\( \theta_\pi^{i} \) 在另一個(gè)獨(dú)立驗(yàn)證片段上的表現(xiàn)。表現(xiàn)的評(píng)價(jià)標(biāo)準(zhǔn)是環(huán)境原始獎(jiǎng)勵(lì)的總和而不是偏好獎(jiǎng)勵(lì)。這確保了偏好學(xué)習(xí)的最終目標(biāo)仍然是完成真實(shí)任務(wù)。更新偏好計(jì)算驗(yàn)證片段上原始獎(jiǎng)勵(lì)總和關(guān)于初始偏好參數(shù) \( \theta_\phi^i \) 的梯度并用此梯度更新 \( \theta_\phi^i \)。這個(gè)梯度穿越了內(nèi)循環(huán)的策略更新過程反映了“這個(gè)初始偏好是否能引導(dǎo)智能體快速學(xué)到一個(gè)在真實(shí)任務(wù)上表現(xiàn)好的策略”。算法偽代碼示意單個(gè)智能體ifor meta_iteration in range(META_ITERATIONS): # 1. 采樣兩個(gè)獨(dú)立的環(huán)境片段trajectory traj_train rollout(env, policy_i) # 用于內(nèi)循環(huán)訓(xùn)練 traj_val rollout(env, policy_i) # 用于外循環(huán)驗(yàn)證 # 2. 內(nèi)循環(huán)用當(dāng)前偏好 theta_phi 在訓(xùn)練片段上更新策略 theta_pi_prime theta_pi_i.clone() for data in traj_train: pref_reward env_reward preference_net(data.obs, data.act, theta_phi_i) # 使用 pref_reward 計(jì)算策略梯度更新 theta_pi_prime (例如用PPO) update_policy_with_gradient(theta_pi_prime, pref_reward) # 3. 外循環(huán)用更新后的策略在驗(yàn)證片段上評(píng)估計(jì)算原始獎(jiǎng)勵(lì)總和 total_val_reward 0 for data in traj_val: total_val_reward data.env_reward # 注意這里用原始環(huán)境獎(jiǎng)勵(lì) # 4. 計(jì)算驗(yàn)證獎(jiǎng)勵(lì)對(duì)初始偏好參數(shù) theta_phi_i 的梯度并更新 meta_gradient grad(total_val_reward, theta_phi_i) # 需通過內(nèi)循環(huán)反向傳播 theta_phi_i theta_phi_i - meta_lr * meta_gradient實(shí)操心得元學(xué)習(xí)路徑理論更優(yōu)美它直接優(yōu)化“偏好是否能導(dǎo)致好的最終策略”這個(gè)元目標(biāo)。但實(shí)現(xiàn)復(fù)雜計(jì)算開銷大需要二次反向傳播且對(duì)超參數(shù)內(nèi)外循環(huán)學(xué)習(xí)率、片段長(zhǎng)度極其敏感。建議在相對(duì)簡(jiǎn)單的環(huán)境如PettingZoo的簡(jiǎn)單游戲上驗(yàn)證可行性后再嘗試復(fù)雜場(chǎng)景。通常它能學(xué)到比端到端方法更合理、更泛化的偏好。4. 工程實(shí)現(xiàn)與實(shí)驗(yàn)設(shè)計(jì)要點(diǎn)有了算法思路下一步就是編碼和實(shí)驗(yàn)。這部分充斥著“魔鬼細(xì)節(jié)”直接決定項(xiàng)目的成敗。4.1 智能體網(wǎng)絡(luò)架構(gòu)設(shè)計(jì)以CTDE框架為例一個(gè)融合了ASP的智能體網(wǎng)絡(luò)架構(gòu)通常包含以下模塊智能體 i 的本地網(wǎng)絡(luò) ├── 觀察編碼器 (Observation Encoder): CNN/MLP將原始觀察 o_i 編碼為特征向量 e_i。 ├── 歷史編碼器 (可選RNN/LSTM): 將 e_i 與上一時(shí)刻隱藏狀態(tài)結(jié)合輸出包含歷史信息的向量 h_i。 ├── 偏好網(wǎng)絡(luò) (Preference Network): │ ├── 輸入: e_i (或 h_i) 以及當(dāng)前動(dòng)作 a_i (可選)。 │ ├── 結(jié)構(gòu): 通常是一個(gè)2-3層的MLP。 │ └── 輸出: 標(biāo)量偏好偏置 phi_i或一個(gè)偏好向量 z_i。 ├── 演員網(wǎng)絡(luò) (Actor): │ ├── 輸入: h_i 以及偏好網(wǎng)絡(luò)的輸出 (phi_i 或 z_i)。 │ └── 輸出: 動(dòng)作分布參數(shù) (如高斯分布的均值和方差)。 └── 本地批評(píng)家 (Local Critic 可選): ├── 輸入: h_i, 自身動(dòng)作 a_i, 以及其他智能體的編碼信息 (通過通信或注意力機(jī)制獲得)。 └── 輸出: 本地Q值估計(jì)。 中心化批評(píng)家 (Centralized Critic 訓(xùn)練時(shí)用): ├── 輸入: 全局狀態(tài) s (或所有智能體的編碼 e_1,...,e_N) 所有智能體的動(dòng)作 a_1,...,a_N。 ├── 輸入 (附加): 所有智能體的偏好信息 (phi_1,...,phi_N 或 z_1,...,z_N)。 - 關(guān)鍵 └── 輸出: 聯(lián)合Q值 Q_{tot}或每個(gè)智能體的個(gè)體Q值 Q_i。關(guān)鍵實(shí)現(xiàn)細(xì)節(jié)偏好信息如何融入中心批評(píng)家這是實(shí)現(xiàn)的重點(diǎn)。最簡(jiǎn)單的方式是拼接Concatenation。將每個(gè)智能體的偏好輸出標(biāo)量或向量與其觀察編碼、動(dòng)作一起作為該智能體的“特征”然后所有智能體的特征一起輸入給中心批評(píng)家。這相當(dāng)于告訴批評(píng)家“請(qǐng)你在評(píng)估這個(gè)聯(lián)合動(dòng)作時(shí)考慮到智能體1有進(jìn)攻偏好智能體2有保守偏好...”參數(shù)共享 vs. 獨(dú)立參數(shù)對(duì)于同質(zhì)智能體角色相同它們的偏好網(wǎng)絡(luò)、演員網(wǎng)絡(luò)可以共享參數(shù)但通過一個(gè)可學(xué)習(xí)的“智能體ID”嵌入向量來區(qū)分不同個(gè)體從而誘導(dǎo)出不同的偏好。對(duì)于異質(zhì)智能體則必須使用獨(dú)立的網(wǎng)絡(luò)參數(shù)。偏好網(wǎng)絡(luò)的輸入除了當(dāng)前觀察我強(qiáng)烈建議加入動(dòng)作信息。這樣偏好網(wǎng)絡(luò)可以學(xué)習(xí)到“在狀態(tài)o下采取動(dòng)作a的好壞”這更符合“偏好”的本意。也可以加入歷史信息h讓偏好具有時(shí)間上的連貫性。4.2 訓(xùn)練流程與超參數(shù)調(diào)優(yōu)訓(xùn)練一個(gè)ASP-MARL系統(tǒng)比標(biāo)準(zhǔn)MARL更復(fù)雜以下是一個(gè)穩(wěn)定的訓(xùn)練流程建議預(yù)熱階段 (Warm-up)在訓(xùn)練初期例如前1萬步禁用偏好網(wǎng)絡(luò)將其輸出設(shè)為零讓智能體先用標(biāo)準(zhǔn)MARL算法如QMIX學(xué)習(xí)一個(gè)基礎(chǔ)策略。這提供了一個(gè)穩(wěn)定的起點(diǎn)避免了初期獎(jiǎng)勵(lì)信號(hào)過于混亂。偏好網(wǎng)絡(luò)激活預(yù)熱結(jié)束后逐步引入偏好。例如在前N個(gè)訓(xùn)練步內(nèi)將偏好網(wǎng)絡(luò)的輸出乘以一個(gè)從0線性增加到1的系數(shù)alpha。交替訓(xùn)練策略可以采用交替更新的策略。每進(jìn)行K輪策略網(wǎng)絡(luò)演員-批評(píng)家的更新再進(jìn)行1輪偏好網(wǎng)絡(luò)的更新。這有助于穩(wěn)定訓(xùn)練。多環(huán)境并行使用向量化環(huán)境如SubprocVecEnv并行跑多個(gè)環(huán)境實(shí)例加速數(shù)據(jù)收集這對(duì)于樣本效率低的元學(xué)習(xí)方法尤其重要。超參數(shù)調(diào)優(yōu)表超參數(shù)推薦范圍/值說明偏好網(wǎng)絡(luò)學(xué)習(xí)率1e-5 到 1e-4通常比演員網(wǎng)絡(luò)學(xué)習(xí)率小1-2個(gè)數(shù)量級(jí)確保偏好變化緩慢。偏好輸出裁剪范圍[-0.1, 0.1] 或 [-0.05, 0.05]防止偏好獎(jiǎng)勵(lì)喧賓奪主。具體范圍需根據(jù)環(huán)境原始獎(jiǎng)勵(lì)尺度調(diào)整。偏好正則化系數(shù) (L1)0.001 到 0.01鼓勵(lì)偏好稀疏化避免對(duì)每一步都進(jìn)行微調(diào)。內(nèi)循環(huán)學(xué)習(xí)率 (元學(xué)習(xí))0.1 到 0.5對(duì)應(yīng)于策略網(wǎng)絡(luò)在內(nèi)循環(huán)中的更新步長(zhǎng)相對(duì)于外循環(huán)。外循環(huán)學(xué)習(xí)率 (元學(xué)習(xí))1e-4 到 1e-3偏好網(wǎng)絡(luò)本身的更新步長(zhǎng)。內(nèi)循環(huán)更新步數(shù)1 到 5在每個(gè)任務(wù)片段內(nèi)策略網(wǎng)絡(luò)更新的次數(shù)。太多容易過擬合。經(jīng)驗(yàn)回放池大小 1e5ASP方法需要更多樣本來學(xué)習(xí)穩(wěn)定的偏好回放池宜大不宜小。批次大小 (Batch Size)32 到 128對(duì)于元學(xué)習(xí)由于涉及二次梯度批次不宜過大以防內(nèi)存溢出。避坑指南最大的坑是訓(xùn)練不收斂或策略崩潰。如果發(fā)生請(qǐng)按以下順序排查檢查偏好獎(jiǎng)勵(lì)量級(jí)在訓(xùn)練日志中實(shí)時(shí)輸出原始獎(jiǎng)勵(lì)和偏好獎(jiǎng)勵(lì)的均值/方差。確保偏好獎(jiǎng)勵(lì)的絕對(duì)值遠(yuǎn)小于原始獎(jiǎng)勵(lì)例如不超過10%。如果偏好獎(jiǎng)勵(lì)過大立即加強(qiáng)裁剪或正則化??梢暬幂敵鰧?duì)每個(gè)智能體繪制其偏好輸出隨時(shí)間步變化的曲線。健康的曲線應(yīng)該是在大部分時(shí)間接近零只在某些特定狀態(tài)如發(fā)現(xiàn)敵人、接近目標(biāo)下有明顯的正/負(fù)脈沖。如果曲線一直劇烈波動(dòng)或保持非零常數(shù)說明偏好網(wǎng)絡(luò)學(xué)習(xí)失敗。對(duì)比消融實(shí)驗(yàn)務(wù)必運(yùn)行一個(gè)基線實(shí)驗(yàn)關(guān)閉偏好網(wǎng)絡(luò)輸出為零其他條件完全相同。如果基線收斂而ASP不收斂問題肯定出在偏好模塊的設(shè)計(jì)或訓(xùn)練上。5. 實(shí)戰(zhàn)案例分析在星際爭(zhēng)霸微操場(chǎng)景中的應(yīng)用理論終須實(shí)踐檢驗(yàn)。我選擇在星際爭(zhēng)霸II學(xué)習(xí)環(huán)境SMAC的“3m”場(chǎng)景3個(gè)我方海軍陸戰(zhàn)隊(duì) vs 3個(gè)敵方海軍陸戰(zhàn)隊(duì)中進(jìn)行實(shí)驗(yàn)。這是一個(gè)經(jīng)典的對(duì)稱同質(zhì)智能體合作任務(wù)。目標(biāo)讓我方3個(gè)智能體學(xué)會(huì)協(xié)同攻擊集中火力快速消滅敵人同時(shí)盡量減少自身戰(zhàn)損。基線算法我們選擇QMIX作為基線因?yàn)樗芎芎玫靥幚砗献魅蝿?wù)中的信用分配。ASP改造我們?cè)诿總€(gè)智能體的本地網(wǎng)絡(luò)中增加一個(gè)簡(jiǎn)單的偏好網(wǎng)絡(luò)。它是一個(gè)兩層MLP輸入是智能體的局部觀察包含自身血量、護(hù)盾、位置、最近敵人信息等輸出一個(gè)標(biāo)量phi。智能體收到的獎(jiǎng)勵(lì)變?yōu)閞eward env_reward 0.1 * phi。環(huán)境原始獎(jiǎng)勵(lì)包括對(duì)敵人造成傷害獎(jiǎng)勵(lì)、擊殺敵人大獎(jiǎng)勵(lì)、自身死亡-懲罰、盟友死亡-小懲罰。偏好設(shè)計(jì)啟發(fā)我們期望智能體能學(xué)出與“集火”和“自我保護(hù)”相關(guān)的偏好。例如當(dāng)多個(gè)友方單位同時(shí)攻擊同一個(gè)敵人時(shí)給予正偏好鼓勵(lì)集火。當(dāng)自身血量很低且附近有敵人時(shí)給予負(fù)偏好鼓勵(lì)撤退或?qū)で笱谧o(hù)。訓(xùn)練結(jié)果對(duì)比指標(biāo)標(biāo)準(zhǔn) QMIX (基線)QMIX ASP (我們的方法)分析勝率約 85%約92%ASP方法勝率顯著提升說明學(xué)習(xí)到的策略更有效。平均每局步數(shù)較長(zhǎng)明顯縮短ASP智能體能更快結(jié)束戰(zhàn)斗說明攻擊效率更高。智能體行為分析智能體傾向于各自為戰(zhàn)攻擊不同目標(biāo)導(dǎo)致傷害分散。智能體表現(xiàn)出明顯的集火傾向。經(jīng)常看到2-3個(gè)智能體同時(shí)切換攻擊同一目標(biāo)。偏好網(wǎng)絡(luò)成功引導(dǎo)了協(xié)同行為。偏好可視化無在激戰(zhàn)時(shí)刻偏好輸出phi出現(xiàn)同步的正向脈沖。當(dāng)某個(gè)智能體殘血時(shí)其phi出現(xiàn)持續(xù)的負(fù)值。證實(shí)了偏好網(wǎng)絡(luò)學(xué)習(xí)到了我們期望的“集火獎(jiǎng)勵(lì)”和“危險(xiǎn)懲罰”模式。核心代碼片段PyTorch風(fēng)格class AgentSpecificPreference(nn.Module): def __init__(self, input_dim, hidden_dim64): super().__init__() self.net nn.Sequential( nn.Linear(input_dim, hidden_dim), nn.ReLU(), nn.Linear(hidden_dim, hidden_dim), nn.ReLU(), nn.Linear(hidden_dim, 1) # 輸出單個(gè)標(biāo)量偏好偏置 ) # 初始化最后一層權(quán)重較小避免初始偏好過大 nn.init.uniform_(self.net[-1].weight, a-0.001, b0.001) def forward(self, local_obs): # local_obs: [batch_size, obs_dim] preference_bias self.net(local_obs) # [batch_size, 1] # 裁剪到合理范圍 preference_bias torch.clamp(preference_bias, min-0.1, max0.1) return preference_bias.squeeze(-1) # [batch_size] class QMIXWithASP: def __init__(self, ...): # ... 初始化QMIX原有組件 ... self.preference_nets nn.ModuleList([AgentSpecificPreference(obs_dim) for _ in range(n_agents)]) def get_preference_rewards(self, local_obs_batch, actions_batch): # local_obs_batch: [batch_size, n_agents, obs_dim] # actions_batch: [batch_size, n_agents] pref_rewards [] for i in range(self.n_agents): # 將動(dòng)作進(jìn)行one-hot編碼與觀察拼接作為偏好網(wǎng)絡(luò)輸入 act_one_hot F.one_hot(actions_batch[:, i].long(), num_classesself.n_actions).float() pref_input torch.cat([local_obs_batch[:, i, :], act_one_hot], dim-1) phi_i self.preference_nets[i](pref_input) # [batch_size] pref_rewards.append(phi_i) pref_rewards torch.stack(pref_rewards, dim1) # [batch_size, n_agents] return pref_rewards def train(self, batch): # ... 從batch中取出數(shù)據(jù) ... env_rewards batch[reward] # [batch_size, n_agents, 1] local_obs batch[obs] actions batch[actions] # 計(jì)算偏好獎(jiǎng)勵(lì) pref_bias self.get_preference_rewards(local_obs, actions) # [batch_size, n_agents] total_rewards env_rewards.squeeze(-1) 0.1 * pref_bias # [batch_size, n_agents] # 后續(xù)用 total_rewards 替代 env_rewards 進(jìn)行QMIX的TD誤差計(jì)算和更新 # ... QMIX原有的損失計(jì)算 ... qmix_loss ... # 偏好網(wǎng)絡(luò)的更新通過策略梯度依賴于QMIX的梯度流 # 實(shí)際上在計(jì)算演員智能體網(wǎng)絡(luò)的梯度時(shí)preference_nets的參數(shù)會(huì)自動(dòng)被優(yōu)化 # 但我們需要添加正則化項(xiàng) pref_l1_loss sum([net.net[-1].weight.abs().mean() for net in self.preference_nets]) # 對(duì)輸出層權(quán)重做L1正則 total_loss qmix_loss 0.001 * pref_l1_loss # 加入正則化系數(shù) self.optimizer.zero_grad() total_loss.backward() torch.nn.utils.clip_grad_norm_(self.parameters(), max_norm10) # 梯度裁剪 self.optimizer.step()實(shí)驗(yàn)總結(jié)在這個(gè)案例中ASP的引入以較小的架構(gòu)改動(dòng)帶來了明顯的性能提升和行為改善。它成功地將隱式的團(tuán)隊(duì)目標(biāo)快速集火轉(zhuǎn)化為了每個(gè)智能體個(gè)體偏好的一部分從而引導(dǎo)出了更高效的協(xié)同策略。6. 挑戰(zhàn)、局限性與未來方向盡管ASP展現(xiàn)出潛力但在實(shí)際應(yīng)用中仍面臨諸多挑戰(zhàn)。6.1 當(dāng)前面臨的主要挑戰(zhàn)偏好可解釋性與穩(wěn)定性學(xué)到的偏好函數(shù) \( \Phi_i \) 通常是一個(gè)黑盒神經(jīng)網(wǎng)絡(luò)難以解釋其具體含義。我們只能通過可視化其輸入輸出關(guān)聯(lián)來猜測(cè)。更糟糕的是偏好可能在學(xué)習(xí)過程中發(fā)生劇變導(dǎo)致策略崩潰。需要開發(fā)更可解釋的偏好表示如基于符號(hào)邏輯或更穩(wěn)定的訓(xùn)練方法。非平穩(wěn)性問題加劇MARL本身因智能體相互學(xué)習(xí)而面臨非平穩(wěn)環(huán)境。ASP讓每個(gè)智能體的獎(jiǎng)勵(lì)信號(hào)都在動(dòng)態(tài)變化這進(jìn)一步加劇了非平穩(wěn)性使得收斂理論分析極其困難。偏好之間的沖突在競(jìng)爭(zhēng)或混合動(dòng)機(jī)環(huán)境中智能體的偏好可能是相互沖突的如資源爭(zhēng)奪。如何設(shè)計(jì)學(xué)習(xí)機(jī)制使得系統(tǒng)能在這種沖突下達(dá)到某種均衡如納什均衡而非陷入惡性競(jìng)爭(zhēng)是一個(gè)開放性問題。計(jì)算復(fù)雜度尤其是元學(xué)習(xí)方法需要多次前向和反向傳播計(jì)算成本是標(biāo)準(zhǔn)方法的數(shù)倍限制了其在大型環(huán)境中的應(yīng)用。6.2 實(shí)用局限性對(duì)環(huán)境獎(jiǎng)勵(lì)設(shè)計(jì)的依賴ASP并不能完全脫離設(shè)計(jì)良好的環(huán)境獎(jiǎng)勵(lì)。如果環(huán)境原始獎(jiǎng)勵(lì)本身無法反映任務(wù)目標(biāo)例如稀疏獎(jiǎng)勵(lì)問題那么基于此學(xué)習(xí)的偏好也很難奏效。ASP更像是一個(gè)“獎(jiǎng)勵(lì)塑形”的增強(qiáng)工具而非替代品。超參數(shù)敏感偏好網(wǎng)絡(luò)的輸出縮放系數(shù)、正則化系數(shù)等超參數(shù)對(duì)性能影響巨大需要大量的調(diào)參工作。同質(zhì)智能體下的必要性在智能體完全同質(zhì)且任務(wù)對(duì)稱的場(chǎng)景中強(qiáng)制學(xué)習(xí)不同偏好有時(shí)反而會(huì)破壞對(duì)稱性導(dǎo)致性能下降。此時(shí)更應(yīng)關(guān)注如何讓智能體通過通信或注意力來自發(fā)分化角色而非硬性賦予不同偏好。6.3 值得探索的未來方向結(jié)合最新的研究趨勢(shì)我認(rèn)為以下幾個(gè)方向頗有前景與注意力機(jī)制深度結(jié)合將“actor-attention-critic”中的注意力權(quán)重作為偏好函數(shù) \( \Phi_i \) 的輸入或一部分。例如智能體對(duì)某個(gè)鄰居的關(guān)注度越高其偏好可能越傾向于與該鄰居協(xié)作或?qū)?。這能讓偏好更具上下文感知能力。基于語(yǔ)言或目標(biāo)的偏好受大語(yǔ)言模型啟發(fā)可以為智能體賦予一個(gè)自然語(yǔ)言描述的偏好如“你是一個(gè)激進(jìn)的先鋒”然后通過文本編碼器將其轉(zhuǎn)化為偏好向量 \( z_i \)指導(dǎo)策略學(xué)習(xí)。這大大提升了偏好的可解釋性和人機(jī)交互性。離線學(xué)習(xí)偏好從多智能體演示數(shù)據(jù)或歷史交互數(shù)據(jù)中通過逆強(qiáng)化學(xué)習(xí)IRL或行為克隆BC來推斷每個(gè)智能體的潛在偏好然后將這些偏好作為先驗(yàn)知識(shí)用于在線強(qiáng)化學(xué)習(xí)的初始化或正則化。分層偏好學(xué)習(xí)將偏好分為不同時(shí)間尺度的層次。底層是瞬時(shí)的動(dòng)作偏好如“此刻我更想攻擊”高層是長(zhǎng)期的任務(wù)偏好如“本局游戲我傾向于扮演防守角色”。高層偏好可以指導(dǎo)底層偏好的學(xué)習(xí)使智能體行為更具一致性。在我自己的后續(xù)實(shí)驗(yàn)中嘗試將ASP與注意力機(jī)制結(jié)合在更復(fù)雜的“8m”8個(gè)海軍陸戰(zhàn)隊(duì)場(chǎng)景中智能體們不僅學(xué)會(huì)了集火還隱約出現(xiàn)了“側(cè)翼包抄”和“火力掩護(hù)”等更高級(jí)的戰(zhàn)術(shù)雛形。這讓我相信賦予智能體“個(gè)性”和“內(nèi)在動(dòng)機(jī)”是邁向更通用、更智能的多智能體系統(tǒng)不可或缺的一步。這條路還很長(zhǎng)但每一次實(shí)驗(yàn)帶來的驚喜都讓探索的過程充滿樂趣。