总结
核心:multi-task的moe思想迁移到multi-agent上(学习distilled agent),基于DQN,提出适合multi-agent的trajectory,改进了single agent,学习并使用distilled agent
p.s. 同时存储agent的trajectory图画得真好啊
背景
real-world的任务partial observability,因此提出partial observability情况下的multi-task, multi-agent,从单个任务的policy中蒸馏出统一的policy在所有任务上使用
multi-agent
本文是cooperative setting,agents共享joint return
MARL可以分为joint action learners(JALs)和independent learners(ILs),前者会观察所有agent的action,后者只观察local action。受partial observability影响,本文基于ILs
multi-task
强化学习视角下的multi-task希望能学到一个通用的policy,在所有related task上perform well。这种方式最适合shared common feature tasks
mmoe
细节
rl用在multi-task上,主要是相关的task,agents share characteristics
本文是multi-agent,cooperative,independent,joint reward。
agent是deep recurrent q-networks,multi-task通过concurrent experience replay trajectories来实现
变量定义
每个agent做出动作
a
i
∈
A
i
a_i \in \mathcal{A}_i
ai∈Ai,joint action为
a
=
[
a
1
,
a
2
,
…
,
a
n
]
\bold{a} = [a_1, a_2, \dots, a_n]
a=[a1,a2,…,an]
环境从state
s
∈
S
s \in \mathcal{S}
s∈S进行转移,转移概率为
P
(
s
′
∣
s
,
a
)
=
T
(
s
,
a
,
s
′
)
P(s'|s, \bold{a}) = \mathcal{T}(s, \bold{a}, s')
P(s′∣s,a)=T(s,a,s′)
在每个timestamp里,每个agent得到观测值
o
i
∈
Ω
i
o_i \in \Omega_i
oi∈Ωi,同时有joint obs为
o
=
[
o
1
,
o
2
,
…
,
o
n
]
\bold{o} = [o_1, o_2, \dots, o_n]
o=[o1,o2,…,on],其概率为
P
(
o
∣
s
′
,
a
)
=
O
(
o
,
s
′
,
a
)
P(\bold{o}|s', \bold{a}) = \mathcal{O}(\bold{o}, s', \bold{a})
P(o∣s′,a)=O(o,s′,a)
CERTs/concurrent experience replay trajectoris:本文提出的改进后的buffer,用于MARL下的experience replay
HDRQN:
Q
i
(
o
t
i
,
h
t
−
1
i
,
a
i
;
θ
i
)
Q^i(o_t^i, h_{t-1}^i, a^i; \theta^i)
Qi(oti,ht−1i,ai;θi),在DQN的基础上,用2个学习率
α
,
β
\alpha, \beta
α,β,其中
0
<
β
<
α
<
1
0 < \beta < \alpha < 1
0<β<α<1
用target网络计算误差:
δ
t
b
=
y
t
b
−
Q
b
(
o
t
b
,
h
t
−
1
b
,
a
b
;
θ
i
)
\delta_t^b = y_t^b - Q^b(o_t^b, h_{t-1}^b, a^b; \theta^i)
δtb=ytb−Qb(otb,ht−1b,ab;θi),当
δ
≥
0
\delta \geq 0
δ≥0时,用
α
\alpha
α,否则用
β
\beta
β
multi-agent实现方式
MARL一般不用replay buffer,是因为如果单独存agent的buffer,可能会让agent学到不同步的动作。experience replay对于网络稳定性非常有用,所以本文还是用了experience replay,只不过做了改进,改进为CERTs/concurrent experience replay trajectoris,在buffer中存储所有agent的数据
CERTs如下图,可以看到buffer里是存了所有agent同步的动作
每次学习时,从buffer里随机取t开始,
t
∈
{
−
τ
+
1
,
…
,
H
e
}
t \in \{ -\tau + 1, \dots, H_e \}
t∈{−τ+1,…,He},其中
τ
\tau
τ表示每次选的时长,
H
e
H_e
He是最后一个t,上图的(b)
,从上至下开始的时间分别是+1, -1, +2
。对于超过有效的长度,用0在后面填充
multi-task实现方式
每个agent把sample出的结果以及q值保存下来(长度
τ
\tau
τ),凑满batch个后,有一个minibatch的结果:
B
=
{
<
o
t
0
b
,
Q
t
0
b
>
,
…
,
<
o
t
0
+
τ
−
1
b
,
Q
t
0
+
τ
−
1
b
>
}
b
=
{
1
,
…
,
B
}
\mathcal{B} = \{ <o_{t_0}^b, Q_{t_0}^b>, \dots, <o_{t_0+\tau - 1}^b, Q_{t_0 + \tau - 1}^b> \}_{b = \{1, \dots, B\}}
B={<ot0b,Qt0b>,…,<ot0+τ−1b,Qt0+τ−1b>}b={1,…,B}。训练1个distilled DQRN,其损失函数为KL散度:
L
K
L
=
E
∑
a
=
1
A
i
s
o
f
t
m
a
x
a
(
Q
t
b
T
)
ln
s
o
f
t
m
a
x
a
(
Q
t
b
T
)
s
o
f
t
m
a
x
(
Q
t
,
R
b
)
L_{KL} = \mathbb{E} \sum_{a=1}^{A^i}softmax_a(\frac{Q_t^b}{T})\ln \frac{softmax_a(\frac{Q_t^b}{T})}{softmax(Q^b_{t,R})}
LKL=Ea=1∑Aisoftmaxa(TQtb)lnsoftmax(Qt,Rb)softmaxa(TQtb)
其中:
- Q t , R b Q^b_{t,R} Qt,Rb是distilled HDRQN输入与分任务agent相同的输入时的输出
- T T T是softmax temperature
这个损失函数实际上就是希望能让distilled HDRQN在specific task上的输出和specific agent的输出相近
实验
single-task实验
baseline:Dec-DRQN,分开比较了single-agent和multi-agent
multi-task实验