MAPPO算法是PPO算法专用于多智能体环境的变体。PPO作为on-policy算法,在多智能体环境下有着与其他off-policy的算法相比有着相同的采样效率,并在大多数场景下有着更好的表现。MAPPO算法可以同时作为CTDE(集中训练,分散执行, 有集中的价值函数)算法或分散学习算法(分散的价值函数)。
名词解释:
DEC-POMDP: decentralized observable Markov decision processes
GAE: Generalized Advantage Estimation
homogeneous/heterogeneous agents: 同质/异质 智能体
文章中研究是的分散部分可观察马尔科夫决策过程 (DEC-POMDP),并假设环境中的智能体都是同质智能体并通过共享参数 θ \theta θ的策略 π θ ( a i ∣ o i ) \pi_{\theta}(a_i|o_i) πθ(ai∣oi) 通过局部观察 o i o_i oi产生动作 a i a_i ai,并优化累积奖励函数 J ( θ ) = E a t , s t [ ∑ t γ t R ( s t , a t ) ] J(\theta)=\mathbb{E}_{a^t,s^t}[\sum_t \gamma^t R(s^t, a^t)] J(θ)=Eat,st[∑tγtR(st,at)].
建议一:利用值正规化来稳定值的学习.
建议二:将特定智能体的局部特征加入全局状态,并保证状态空间的维度不会变得更大.
建议三:避免使用过多的训练epoch和将数据分割为mini-batches.
训练数据的使用:
PPO算法使用重要性采样来对经验进行采样重用,从而将on-policy策略转换为off-policy策略。并用采样得到的数据用于多次epoch的训练。通常为10个epoch和每个epoch大约64个mini-batch。而在MAPPO中,频繁的采样会导致性能的下降,所以在难的任务中epoch为5,而简单的任务中为15。使用更多的数据用于估计梯度能够提高实际的性能,所以并不将mini-batch设为默认的64,而是更小(在SMAC中为2)。
建议四:为了更好的PPO算法性能,通过调整裁剪率 ϵ \epsilon ϵ 来权衡训练的稳定性和快速的收敛.
PPO裁剪:
在PPO算法中,通过裁剪后的重要性比率(importance ratio)和价值损失(value loss)来限制策略和价值函数在迭代时的剧烈变化。
建议五:对于已经“死亡”的智能体,将取0的状态值和智能体的ID作为价值网络的输入.
“死亡”隐藏:在多智能体博弈中,一个智能体可能在博弈终止之前“死亡”。在多智能体策略梯度(PG)中,可以使用全局博弈状态来为“死亡”的智能体计算一个特定的全局状态。使得可以在接下来的timestep中继续使用包含已经“死亡”智能体的信息。但这样会放大学习到的价值函数(value function)的偏差(bias)。对“死亡”智能体价值的预测误差就会随着GAE的计算而累积,从而阻碍仍然“存活”智能体策略的学习。
MAPPO算法细节
MAPPO训练两个独立的神经网络:
a
c
t
o
r
actor
actor 网络的参数为
θ
\theta
θ,值函数网络
c
r
i
t
i
c
critic
critic的参数为
ϕ
\phi
ϕ。同质的多智能体之间可以共享同一个
a
c
t
o
r
actor
actor网络和
c
r
i
t
i
c
critic
critic网络,但也可以拥有各自的
a
c
t
o
r
actor
actor网络和
c
r
i
t
i
c
critic
critic网络。
c
r
i
t
i
c
critic
critic网络表示为
V
ϕ
V_{\phi}
Vϕ,网络的输入为
S
S
S,而输出为
R
\mathbb{R}
R。
a
c
t
o
r
actor
actor 网络表示为
π
θ
\pi_{\theta}
πθ,输入为智能体的观察
o
t
(
a
)
o^{(a)}_{t}
ot(a),输出为离散动作空间中的分类分布( categorical distribution)或是在连续动作空间进行采样的多元高斯分布(Multivariate
Gaussian Distribution)的均值(mean)和标准差(standard deviation)向量。
a
c
t
o
r
actor
actor网络的训练目标是最大化训练目标:
L
(
θ
)
=
[
1
B
n
∑
i
=
1
B
∑
k
=
1
n
min
(
r
θ
,
i
(
k
)
A
i
(
k
)
,
c
l
i
p
(
r
θ
,
i
(
k
)
,
1
−
ϵ
,
1
+
ϵ
)
A
i
(
k
)
)
]
+
δ
1
B
n
∑
i
=
1
B
∑
k
=
1
n
S
[
π
θ
(
o
i
(
k
)
)
]
L(\theta)=[\frac{1}{B_n} \sum^{B}_{i=1} \sum^{n}_{k=1} \min(r^{(k)}_{\theta, i}A^{(k)}_{i},clip(r^{(k)}_{\theta,i},1-\epsilon,1+\epsilon)A^{(k)}_{i})]+\delta\frac{1}{B_n}\sum^{B}_{i=1} \sum^{n}_{k=1} S[\pi_{\theta}(o^{(k)}_{i})]
L(θ)=[Bn1∑i=1B∑k=1nmin(rθ,i(k)Ai(k),clip(rθ,i(k),1−ϵ,1+ϵ)Ai(k))]+δBn1∑i=1B∑k=1nS[πθ(oi(k))]
其中
r
θ
,
i
(
k
)
=
π
θ
(
a
i
(
k
)
∣
o
i
(
k
)
)
π
θ
o
l
d
(
a
i
(
k
)
∣
o
i
(
k
)
)
r^{(k)}_{\theta,i}=\frac{\pi_\theta(a^{(k)}_i | o^{(k)}_{i})}{\pi_{\theta_{old}}(a^{(k)}_{i} | o^{(k)}_{i})}
rθ,i(k)=πθold(ai(k)∣oi(k))πθ(ai(k)∣oi(k))
A
i
(
k
)
A^{(k)}_{i}
Ai(k) 是使用GAE计算的优势值,
S
S
S是策略的熵,
d
e
l
t
a
delta
delta是熵系数超参数。
c
r
i
t
i
c
critic
critic网络的训练目标是最小化损失函数:
L
(
ϕ
)
=
1
B
n
∑
i
=
1
B
∑
k
=
1
n
(
max
[
V
ϕ
(
s
i
(
k
)
−
R
^
i
)
2
,
(
c
l
i
p
(
V
ϕ
(
s
i
(
k
)
)
,
V
ϕ
o
l
d
(
s
i
(
k
)
)
−
ϵ
)
,
V
ϕ
o
l
d
(
s
i
(
k
)
)
+
ϵ
)
−
R
^
i
)
2
]
)
L(\phi)=\frac{1}{B_n} \sum^{B}_{i=1}\sum^{n}_{k=1}(\max[V_{\phi}(s^{(k)}_{i} - \widehat{R}_{i})^{2}, (clip(V_{\phi}(s^{(k)}_{i}),V_{\phi_{old}}(s^{(k)}_{i})-\epsilon), V_{\phi_{old}}(s^{(k)}_{i})+\epsilon)-\widehat{R}_{i})^2])
L(ϕ)=Bn1∑i=1B∑k=1n(max[Vϕ(si(k)−R
i)2,(clip(Vϕ(si(k)),Vϕold(si(k))−ϵ),Vϕold(si(k))+ϵ)−R
i)2])
其中
R
^
i
\widehat{R}_{i}
R
i是折扣的奖励,
B
B
B指的是batch size ,
n
n
n指的是智能体的数量。如果
c
r
i
t
i
c
critic
critic网络使用RNN,则损失函数随时间相加,通过BPTT (Backpropagation Through time)对网络进行训练。
MAPPO算法的共同超参数
作为比较的MADDPG算法和QMIX算法的共同超参数
MAPPO,MADDPG和QMIX算法在MPE环境中使用的共同超参数
MAPPO算法的大致结构(根据light_mappo)
文章中的局限性:
-
只考虑了合作的环境,没有竞争环境
-
只考虑了离散的动作空间,没有考虑连续的动作空间(如果你的任务是连续动作空间,可以自己修改为多元高斯分布的方法,在mappo原有代码上修改为连续动作空间的效果并不好)
-
考虑的问题中,绝大多数都只包含同质多智能体,未考虑异质多智能体
[1] 官方github仓库
[2] 文章地址
[3] 多智能体强化学习(二) MAPPO算法详解 - 小小何先生的文章 - 知乎
[4] mappo算法的代码实现