(开始整理一些以前读过的文章)
现在,MoE 的概念已经很常见了。对于这个概念进行追溯,这篇文章就是源头。
原文链接:https://arxiv.org/abs/1701.06538
1. Introduction
文章首先指出,当数据集足够大时,增加模型参数数量可以提高预测精度,但随着模型大小和训练样本数量的增加,训练成本将二次增长。为了减少计算成本,这篇文章提出 MoE (Mixture-of-Experts) 作为一个组件加入到神经网络中。
具体来说,MoE由多个专家组成,每个专家都是一个简单的前馈神经网络。门控网络 (Gating Network) 用于选择专家的稀疏组合来处理每个输入。结构如图
(本文中,主要针对机器翻译任务,默认在堆叠的LSTM层之间卷积地应用 MoE)
2. The Structure of the Mixture-of-Experts Layer
MoE层由n个专家 E 1 , . . . , E n E_1,...,E_n E1,...,En 以及一个门控网络 G G G 组成( G G G 输出一个n维的系数向量用于控制启用n个专家中的哪几个专家),每个专家是一个单独的网络,参数不相同。
对于给定的输入
x
x
x,
G
(
x
)
G(x)
G(x) 和
E
i
(
x
)
Ei(x)
Ei(x) 表示门限网络的输出和第i个专家网络的输出。MoE模块的输出y为各专家输出的加权和:
y
=
∑
i
=
1
n
G
(
x
)
i
E
i
(
x
)
y=\sum^{n}_{i=1}G(x)_iE_i(x)
y=i=1∑nG(x)iEi(x)
由于对于不同的任务实例,只需激活上千个专家中的一小部分(由G(x)输出的稀疏性实现),当
G
(
x
)
i
=
0
G(x)i = 0
G(x)i=0 时,第i个专家没有被激活,则不需要计算
E
i
(
x
)
Ei(x)
Ei(x),故可以节省计算。可以看到,MoE与dropout有异曲同工。
对于门控网络,可以有不同的选择:
- Softmax Gating:将输入乘权重矩阵后使用sofmax函数
G σ = S o f t m a x ( x ⋅ W g ) G_{\sigma}=Softmax(x\cdot W_g) Gσ=Softmax(x⋅Wg) - Noisy Top-K Gating:在Softmax Gating中的softmax函数之前添加高斯噪声,保留top-k个值,其余置-1(经过softmax函数之后权值变为0)
- Training the Gating Network:使用简单的反向传播来训练门控网络
3. Addressing Performance Challenge 性能问题
传统的并行策略是让每个batch的数据对应k个不同设备上的专家处理。随着专家数量的增多,平均每个专家处理的样本减少,导致对于同一数据量来说使用的效率降低。
本文提出“混合数据并行和模型并行”,让每个专家都接收来自所有数据并行输入的batch的组合batch,从而增大了batch的数据规模。
4. Balancing Expert Utilization 平衡专家利用率
由于门控网络对于不同的任务实例倾向于收敛到给相同的专家较大权重的“不平衡”局面。且权重大的专家训练更快,导致其更加容易被门控网络激活,从而进一步加强这种“不平衡”,最终导致退化。
本文采取了软约束方法 (具体见 Bengio et al. 2015 ) ,定义损失项
L
i
m
p
o
r
t
a
n
c
e
L_{importance}
Limportance ,相当于正则项,加入到模型的总损失上。该损失项等于所有专家重要度的方差的平方,再加上一个手工调节的比例因子。如下
其中,
I
m
p
o
r
t
a
n
c
e
(
X
)
Importance(X)
Importance(X) 是对于一个batch训练样本的专家重要度,即该专家在一个batch上被门控网络分配的权重
G
(
X
)
G(X)
G(X) 的和。
C
V
CV
CV 及
w
i
m
p
o
r
t
a
n
c
e
w_{importance}
wimportance 都可以理解为超参数。
这个损失项会鼓励所有专家具有相同的重要度。
进一步地,专家接收的仍可能差异较大。于是引入第二个损失正则项 L l o a d L_{load} Lload ,用于平衡负载。
总之,这篇文章第一次提出了 Mixture of Experts 的概念,让不同的Experts负责不同的任务实例,从而通过这种“分工”,在降低计算成本的同时使任务聚焦,思想比较清晰易懂。