# Learning to Communicate with Deep Multi-Agent Reinforcement Learning
目的:解決 agent 間如何發展語言和溝通的問題
方法:首先提出需要 agent 互相溝通的任務;制定不同的算法來應對這些任務;最後進行分析
結果:研究結果顯示, agent 間確實出現了好的溝通協議
----------------
### 設置
所有 agent 的目的是提升所有人的共享 reward 總和 R_t.
所有智能體都無法觀察 underlying Markov state s_t, 但都會接收到與 s_t 相關的 private observation o^a_t.
每個時間步, 智能體選擇一個影響環境的動作 u ∈ U, 以及一個會被其他 agent 觀察的通信動作 m ∈ U, 這個通訊動作不會對環境或 reward 有直接影響.
起初智能體之間無法理解對方傳過來的訊息, 必須開發並就此通過協議達成共識以提高 reward, 而要怎麼學習到一個有效的協議就是難題.
另外, 由於通訊動作的接收方要能理解該訊息並且採用, 這時才可能會對Rt有正面的影響, 才會對通訊動作的學習有獎勵, 所以積極溝通的獎勵是稀疏的, 所以溝通是難學的
## 方法
### Reinforced Inter-Agent Learning
每個 agent 的 Q network 使用 表示, a代表 agent 的 index, h^a_t-1 代表 hidden state of the network

每個智能體所做出了動作 u 和 m 會做為下一個時間步的輸入, 分別輸入至環境和其他 agent. 以上是非集中式的示意圖
#### Parameter Shsring
RIAL 可以擴展以利用集中式學習的機會, 通過在智能體之間共享參數來實現.
多加一個參數 a 讓輸入可以特殊化, 所以在參數共享下智能體學習兩個Q 函數和 
這樣可以促進共同策略的學習, 同時允許進行專業化, 且加快學習.
在分散式執行期間, 每個智能體使用自己學習的網路副本, 演化自己的隱藏狀態 h, 選擇自己的動作, 並僅通過通信通道與其他智能體進行通信.
### Differentiable Inter-Agent Learning
DIAL背後的主要見解是,集中式學習和Q網絡的結合使得不僅可以共享參數,而且可以通過通信通道將梯度從一個智能體傳遞到另一個智能體。
因此,雖然RIAL在每個智能體內部是端到端可訓練的,但DIAL是跨智能體端到端可訓練的。讓梯度從一個智能體流向另一個智能體給予了它們更豐富的反饋,減少了通過試錯學習所需的學習量,並促進了對有效協議的發現。
DIAL的工作方式如下:在集中式學習期間,通信動作被替換為一個智能體網絡輸出到另一個智能體輸入的直接連接。
C-net 有兩個輸出, 一個是用於環境動作的Q值, 另一個是傳送給其他智能體的訊息, 不需要經過 action select, 而是通過 discretise/regularise unit, DRU 會在分散是執行期間將訊息離散化.
## Model Architecture

每個 agent 由一個 RNN 組成, 上圖是在 T 個時間步做展開, 該網路維護 internal state h, 具有用於生成任務嵌入 Z 的輸入網路, 和用於 Q 值和 訊息 m 的輸出網路.
a 和 用於查表, 通過 1 層的 MLP 獲得, 通過一個特定於任務的網絡進行處理
