1. 程式人生 > >Multi-Agent Actor-Critic for Mixed Cooperative-Competitive Environments 讀書筆記

Multi-Agent Actor-Critic for Mixed Cooperative-Competitive Environments 讀書筆記

1. 介紹

       本文主要是將深度強化學習應用於多智慧的控制。作者提出了一種演員評論方法的改進方法,該方法考慮了其他代理人的行動策略。此外,他們引入了一種培訓方案,該方案綜合考慮每個代理策略,以產生更強大的多代理策略,並能夠成功地學習需要複雜的多智慧體協調的政策

2. 核心

這篇文章我閱讀了原始碼,它的網路架構如圖1所示

 

圖1  MADDPG

        從圖中可以看出主要包含了Q和P網路,這兩個網路是共同同時訓練的。看到這裡可能會有一個疑問,就是Q網路和P網路在訓練時分別扮演的角色是什麼,這個問題先按下不表。首先介紹一下網路,state_i或者action_i是智慧體i的狀態和動作,可以看出是所有的智慧體的動作執行網路都是同一個,最終的訓練結果也是為了得到這一段模型,即P網路中的前一部分全連線層。P網路的後一部分是類似於critic的作用,不同的是它使用了所有的智慧體資訊;Q網路是整體地訓練。那麼按理來說P network就已完成了整個actor-critic的工作了,為什麼還需要Q network呢?

       為了解決這個問題,我們首先看一下MADDPG的演算法描述

       通過觀察我們發現,紅色方框[1]對應的Q網路的更新,也就是整體的狀態和動作的更新,而方框[2]對應的是每一個actor的更新學習。似乎兩者的聯絡仍然不太清楚。

       最終,我在原始碼中的P netword底下找到了這樣一句,reuse=True

q = q_func(q_input, 1, scope="q_func", reuse=True, num_units=num_units)[:,0]

       可以看到其實P_network第二部分的全連線引數和Q_netword是一致的,所以在訓練時,第二部分全連線引數實際上是更新了兩次,而actor的引數更新了一次。這樣P_network和Q_network就關聯了起來。P_network同傳統a-c結構不同的是,它並沒有將actor和critic分開來訓練,而是將a-c視為一個網路訓練,a-c的訓練目標是最大化Q值

q = q_func(q_input, 1, scope="q_func", reuse=True, num_units=num_units)[:,0]
pg_loss = -tf.reduce_mean(q)    # 負號==>最大化Q
loss = pg_loss + p_reg * 1e-3

       注意到q值直接寫成了loss形式,而且加了負號,所以P_network訓練的目的是最大化Q值。

3. 演算法工作方式(自己理解)

       至此,整個MADDPG的結構算是梳理清楚了,基本上和論文提供的虛擬碼一致。那麼為什麼MADDPG對於多智慧體控制問題會行之有效呢?它能成功的原因是什麼?下面談談我的淺見。

       首先是Q_network的更新,如果系統的整體動作達到優化,那麼系統給的獎勵也會更多,所以Q_network的輸出也會更大。那麼如果採用一般的a-c結構,很顯然怎麼選擇actor的輸入和critic的輸入是一個問題。如果輸入總體狀態states,然後輸出是智慧體的所有動作,也就是DDPG的工作方式,很明視訊記憶體在怎樣去協調的問題,而且很難收斂(直觀上),當然作者的實驗結果也表明如此。所以只能獨闢蹊徑,將整體的評價網路分開,也就是創造一個Q_network。Q_network的作用就是評價整體的動作執行好壞。actor的網路的輸入只有一個智慧體的state_i,最後評價這個動作其實利用的是Q_network(因為它和P_network引數共享了),這裡採用了直接增大Q值的優化,而且,很明顯Q值肯定不會無限增大的。

      所以這篇文章的本質依然沒有脫離a-c的思想,不過是針對多智慧體場景對演算法的結構進行了優化。

4. 文章中的證明

      文章中有提到隨著智慧體數量的增加,估計的策略梯度與正確的策略梯度就會越來越偏。下面的式子,其實證明不難,而且我覺得證明有很多地方是牽強附會。雖然,“假設”太牽強,即:本來兩個智慧體執行動作獲得獎勵的概率為0.5*0.5,那麼三個就是0.5*0.5*0.5,這個強假設導致了梯度偏移隨指數增加。但是其內在的邏輯性是成立的,智慧體越多熵越大,越難收斂。