Abstract
动态网络,例如动态卷积(DY-Conv)和专家混合(MoE),已经被广泛地探索,因为它们可以在可接受的计算成本下显著地提高模型的表示能力。实现动态网络的通常做法是将给定的静态层转换为完全动态层,其中所有参数都是动态的(至少在单个层内),并且随输入而变化。然而,这种全动态设置可能会导致参数冗余和部署成本高,从而限制了动态网络对更广泛的任务和模型的适用性。我们工作的主要贡献是挑战动态网络的基本概念,提出了一个部分动态网络,即PAD-Net,将冗余的动态参数转换为静态参数。在此基础上,进一步设计了迭代模式分区,对动态参数和静态参数进行了有效的分区。我们的方法得到了两种典型的先进动态结构(DYConv和MoE)在图像分类和GLUE基准上的大规模实验的全面支持。令人鼓舞的是,在ResNet-50的动态参数仅为30%的情况下,我们超过了完全动态网络的0.7%的top1得分,在BERT的动态参数仅为50%的情况下,语言理解的平均得分为+1.9%
Introduction
深度神经网络一直在不断地推动计算机视觉任务中最先进的性能和自然语言处理(Dai和,以增加培训成本为代价。然而,大多数流行的架构都是静态地进行推理,在训练后计算图和网络参数都是固定的,这限制了表示能力。与静态网络不同,动态网络根据每个具体输入调整其参数或架构,以可接受的计算成本提高模型表示能力,例如switch transformer。实现动态网络的通常做法是将静态网络(或模块)转换为对应的动态网络。例如,Dynamic Convolution (DY-Conv) 采用k个自适应卷积核取代传统卷积;Mixture of Experts (MoE)以并行方式用多个前馈神经网络替代单个全连接层。
动态网络的成功促使从业者设计动态网络,通常遵循完全动态方法,其中所有参数都是动态的(至少在一个单层内),并随输入而变化。之前的研究(Chen et al., 2020b)表明,**动态网络的性能通常优于静态网络,使用更多的动态层会使性能不断提高。**例如,当更多的静态卷积层变成动态卷积层时,动态卷积提高了ImageNet的性能。然而,这些之前的工作并没有解释对完全动态机制的需求,是否将静态参数转换为动态参数以及转换到何种程度仍然不清楚。
另一方面,这种完全动态的方式资源昂贵,可能造成冗余,限制了动态网络的适用性。例如,配备MoE的BERT-Base的总参数为506.3M(8名专家),而vanilla BERT-Base的总参数仅为~108.9M。此外,MoE层也增加了计算量。将静态层转换为动态层似乎是越多越好,但是动态网络中的动态参数呢?这促使我们反思在全动态网络层中是否存在冗余动态参数?在此基础上,我们假设在全动态网络中,动态参数越少越好。
**基于这一假设,我们提出了迭代模式划分(Iterative Mode Partition, IMP)算法,将不太重要的动态参数逐步转换为静态参数,以提高效率,同时保持在竞争水平上的性能。**给定一个以动态模式初始化所有参数的完全动态网络,我们试图从它们中划分出一个静态参数子集。具体地说,我们根据动态参数对损耗值的影响迭代地转换它们。如果动态参数的第i个元素的变换只导致最小的损失差异,我们可以安全地使其静态。给定一个理想的动态比(动态参数的比例),我们可以在动态参数和静态参数之间进行平衡。由于静态参数的部署成本较低,我们在模态划分后删除冗余参数,获得了一个轻量级的体系结构,即部分动态网络(partial Dynamic Networks, PAD-Net),该体系结构包含两种模态参数(动态参数随输入而变化,静态参数在推理过程中是固定的)。
经验上,我们广泛验证了这一假设和我们提出的PAD-Net,包括MoE的GLUE基准和动态卷积的视觉图像分类。实验结果表明,我们成功地将冗余的动态参数转换为静态参数,在轻量级架构下,PAD-Net在所有任务中都取得了最佳的性能。考虑到PAD-Net在有效性和效率上的优势,我们证明了在全动态网络中,少动态是更有效的,成功地验证了上述假设。部分动态的灵感可以扩展到其他动态网络,甚至为未来的高效架构设计提供参考。
简而言之,我们的贡献有三方面:
1.我们假设一个完全动态网络包含部分动态子网,这些子网保持或超过原始网络的表示能力。
2.我们提出了一种新的padnet框架来实现局部动态机制,并设计了一种迭代模式划分(IMP)算法来划分静态和动态参数。
3.我们通过两个代表性的动态网络,包括MoE和动态卷积,在NLP和CV任务上验证了我们的假设和PAD-Net。
Related Work
Dynamic Networks.
动态神经网络是深度学习中一个新兴的研究课题,它可以根据不同的输入调整结构或参数,在准确性和计算效率方面具有显著的优势。Han等人(2021)将动态网络分为两类:动态结构网络和动态参数网络。动态结构网络以每个样本为条件,自适应地调整结构。具体来说,他们根据输入调整网络深度(Wang et al., 2018)、宽度(Mullapudi et al., 2018)或路由(Huang et al., 2018)。动态参数网络没有改变模型结构,而是通过根据输入自适应参数或激活函数来提高表示能力(Yang等人,2019;Liu等人,2021)。现有作品经常将各种类型的静态参数转换为动态版本(Chen et al., 2020b)。其中,动态卷积和混合专家是根据输入动态聚合多个卷积参数(和专家)的典型例子,在计算成本可以忽略的情况下得到显著的改进。
Network Pruning.
过去在网络剪枝方面的工作已经探索了寻找有效子网的有效技术(Lee等人,2019;Evci等人,2020年;他等人,2022),并消除冗余参数。根据Frankle和Carbin(2019)提出的彩票假说(LTH),密集的、随机初始化的前馈网络包含子网络(中奖彩票),在经过相同的迭代训练后,该子网络保持原始网络的测试性能相当。这一假设启发了网络剪枝的一系列后续工作。然而,这些方法往往会因为裁剪参数而牺牲性能。对于动态网络,我们考虑将动态参数改为静态参数,而不是直接剪枝。在5.4节中,我们展示了我们的方法在GLUE基准测试中显著且持续地优于完全动态网络(Wang et al., 2019),而修剪后的模型比原始网络表现更差。
Review of Fully Dynamic Networks
Basic Concept.
动态网络首先调整计算参数,然后使用调整后的参数来计算输入,而不是直接使用intrinsic 参数来计算输入。在全动态网络中,将所有的intrinsic 参数作为动态因子生成计算参数
Θ
^
\hat{\Theta}
Θ^,计算参数
Θ
^
\hat{\Theta}
Θ^取决于两个部分:输入
x
x
x和intrinsic参数
Θ
\Theta
Θ。设
ω
\omega
ω为动力函数,计算参数表示为
Θ
^
=
ω
(
x
,
Θ
)
\hat{\Theta} = \omega(x,\Theta)
Θ^=ω(x,Θ)。给定一个输入样本
x
x
x,对于静态参数的常规网络:
其输出为
y
=
F
(
x
,
Θ
)
y = F(x,\Theta)
y=F(x,Θ);对于动态网络,其输出为
y
=
F
(
x
,
Θ
^
)
y = F(x,\hat{\Theta})
y=F(x,Θ^)。
现有的动态网络虽然使用不同的动态函数,但往往遵循完全动态的方式:网络采用所有固有参数来生成计算参数,其中所有元素都是动态的,并随输入而变化。我们称这种网络为完全动态网络,并在下文中分别介绍来自动态架构网络(即专家混合网络)和动态参数网络(即动态卷积网络)的实例
Mixture of Experts.
我们通过专家的混合(MoE)来讨论动态结构网络作为实例。MoE准备m个并行静态专家,参数为
Θ
(
i
)
(
i
=
1
,
2
,
3
,
…
…
,
m
)
\Theta^{(i)}(i = 1,2,3,……,m)
Θ(i)(i=1,2,3,……,m),只选取n个得分最高的专家(n≤m)。给定特定的输入,我们表示
G
(
x
)
G(x)
G(x)为门控的输出得分,
T
T
T为被选专家的指标。对于第i个被选中的专家,我们将分数
G
T
i
(
x
)
G_{T_{i}}(x)
GTi(x)和参数
Θ
(
T
i
)
\Theta^{(T_{i})}
Θ(Ti)的组合表示为
w
(
T
i
)
=
{
G
T
i
(
x
)
,
Θ
(
T
i
)
}
w^{(T_{i})}= \{G_{T_{i}}(x),\Theta^{(T_{i})}\}
w(Ti)={GTi(x),Θ(Ti)}。MoE的动态函数可以表示为:
Dynamic Convolution.
作为动态参数网络的一个典型例子,dynamic Convolution (Chen et al., 2020b)准备了
k
k
k个并行静态核
Θ
(
i
)
(
i
=
1
,
2
,
…
,
k
)
\Theta^{(i)}(i = 1,2,…, k)
Θ(i)(i=1,2,…,k)作为内在参数,利用它们的线性组合作为聚合的核。线性尺度通过一个基于通道的注意块(Hu et al., 2018)动态聚合(记为attention),因此动态函数可以写成:
Limitation Discussions.
主流动态网络通常用全动态层取代静态层,动态参数的所有要素都需要相应的动态因子与输入样本协同工作。然而,这种情况导致了参数冗余和部署成本高,将动态网络的适用性限制在资源受限的情况和大规模模型的边界范围。对于这种完全动态的方式,我们提出了两个问题:(1)是否需要付出大量的参数和计算的代价来聚合动态参数?(2)是否需要将所有计算参数动态化,以保持性能的提高?我们提出了混合了动态和静态参数的部分动态网络(PAD-Net)来回答上述问题。
Methodology
PAD-Net: Partially Dynamic Network
针对全动态网络的局限性,我们质疑是否有必要使所有参数都是动态的。为此,我们尝试检测不太重要的动态参数,并将它们转换成与输入无关的静态参数。具体来说,我们利用了一个掩模
M
i
(
i
=
1
,
2
,
…
,
m
)
M_{i}(i = 1,2,…,m)
Mi(i=1,2,…,m)表示
Θ
^
\hat{\Theta}
Θ^的第
i
i
i个元素是动态的还是静态的:
M
i
=
1
M_{i} = 1
Mi=1表示
Θ
^
\hat{\Theta}
Θ^的第
i
i
i个元素是动态的,反之亦然。我们使用
Θ
~
∈
R
m
\tilde{\Theta}\in\mathbb{R}^{m}
Θ~∈Rm表示动态参数,
Θ
ˉ
∈
R
m
\bar{\Theta}\in\mathbb{R}^{m}
Θˉ∈Rm表示静态参数,计算参数
Θ
^
\hat{\Theta}
Θ^重新表述为:
其中
Θ
^
(
i
)
(
i
=
1
,
2
,
…
,
m
)
\hat\Theta_{(i)}(i = 1,2,…, m)
Θ^(i)(i=1,2,…,m)表示
Θ
^
\hat{\Theta}
Θ^的第i个元素,
Θ
\Theta
Θ表示动态因子。在我们的体系结构中,内在参数包括动态因素
Θ
\Theta
Θ和静态参数
Θ
ˉ
\bar{\Theta}
Θˉ。注意,M将计算参数划分为两个不重叠的部分,形成了一个只有部分参数是动态的网络,即部分动态网络(partial dynamic network, PAD-Net)。图1显示了从intrinsic生成计算参数的过程的详细信息。
为了克服上述挑战和限制,我们提出了一种新的网络结构,部分动态网络(PAD-Net)。为了有效地建立该模型,我们设计了一种新的迭代模式划分算法。
此外,我们设置了两个尺度因子,分别用
λ
s
\lambda_{s}
λs和
λ
d
\lambda_{d}
λd的大小来描述这些子网络的相对强度。有了这些尺度因子,我们将我们的方法分解成一个更一般的公式:
其中我们限制
λ
s
+
λ
d
=
2
(
λ
s
,
λ
d
>
0
)
\lambda_{s}+\lambda_{d}=2(\lambda_{s},\lambda_{d}>0)
λs+λd=2(λs,λd>0),方程3是
λ
s
\lambda_{s}
λs和
λ
d
\lambda_{d}
λd都等于1时的特殊情况。类似于动态卷积中的约束
Σ
i
=
1
k
π
i
\Sigma^{k}_{i=1}\pi_{i}
Σi=1kπi(Chen et al., 2020b),该约束压缩了参数空间,显著简化了尺度因子与对应参数的联合优化。
Iterative Mode Partition
在上一节中,我们介绍了PAD-Net的体系结构,其中包括动态参数和相应的静态参数。接下来,我们进一步讨论了如何生成指示码来划分动态和静态参数的方法。让我们首先将这个划分表述为一个优化问题,我们的目标是最小化损失值L。给定数据集
D
=
{
(
x
i
,
y
i
)
}
i
=
1
n
\mathcal{D}=\{(x_{i},y_{i})\}^{n}_{i=1}
D={(xi,yi)}i=1n,以及期望的动态比
k
k
k of
M
M
M,我们简单地将模式划分为以下约束优化问题:
式中,
ℓ
(
⋅
)
\ell({\cdot})
ℓ(⋅)为标准损耗函数(如交叉熵损耗),
Θ
^
\hat{\Theta}
Θ^为神经网络计算参数集,
∣
∣
⋅
∣
∣
0
||\cdot||_{0}
∣∣⋅∣∣0为标准
L
0
L_{0}
L0范数,
m
m
m为参数总数。优化上述问题的传统方法是添加稀疏强制惩罚项M (Carreira-Perpinán和Idelbayev, 2018),但通常需要大量调整超参数设置和多次试验。另一方面,LTH-based (Chen et al., 2020a;Evci等人,2020)方法通过多次迭代找到掩模,但它非常耗时。此外,考虑到大规模动态网络,无需部署冗余参数。
我们倾向于在训练前对两种模式进行分割,以剔除冗余参数,避免耗时的训练迭代。受Lee等人(2019)基于梯度的剪枝策略的启发,我们提出了一种算法,将过多的动态参数变成静态的。我们利用小批量的训练数据
D
b
=
{
(
x
i
,
y
i
)
}
i
=
1
b
∼
D
\mathcal{D}_{b} = \{(x_{i},y_{i})\}^{b}_{i=1} \sim \mathcal{D}
Db={(xi,yi)}i=1b∼D来检测冗余的动态参数。给定
Θ
^
\hat{\Theta}
Θ^第j个元素处的动态参数
Θ
^
j
\hat{\Theta}_{j}
Θ^j,根据
Θ
^
j
\hat{\Theta}_{j}
Θ^j为静态(将
M
j
M_{j}
Mj的值由1改为0)造成的损失差
Δ
L
j
\Delta{L_{j}}
ΔLj计算其动态重要性:
其中
t
j
t_{j}
tj是
M
M
M的第
j
j
j个元素的指示向量(即,除索引
j
j
j处为1外,处处为零)。我们只考虑将多余的动态参数转换为静态参数,因此
Θ
^
j
\hat{\Theta}_{j}
Θ^j为静态时,损失差
Δ
L
j
\Delta{L_{j}}
ΔLj为零。请注意,计算每个动态参数的
Δ
L
j
\Delta{L_{j}}
ΔLj非常昂贵,因为它通常需要在数据集上进行数百万次转发,因此我们求助于一个简单而有效的近似替代方案。具体来说,我们释放M的二元约束,使其可微,利用
L
L
L对
M
j
M_{j}
Mj的导数近似
Δ
L
j
\Delta{L_{j}}
ΔLj:
式中
g
j
(
Θ
,
D
^
)
g_{j}(\hat{\Theta,\mathcal{D}})
gj(Θ,D^)为导数
g
(
Θ
,
D
^
)
g(\hat{\Theta,\mathcal{D}})
g(Θ,D^)的第
j
j
j个元素。我们使用自动微分将所有
j
j
j的导数向前向后累积一次。请注意,如果
g
i
g_{i}
gi的大小很高,这本质上意味着使参数
Θ
^
j
\hat{\Theta}_{j}
Θ^j静态对损失有相当大的影响,而且它必须是动态的。相反,如果
g
i
g_{i}
gi的大小很低,则该参数应该是静态的。因此,我们取
g
g
g的导数的归一化幅度作为准则:
给定动态比率
κ
\kappa
κ,以
s
s
s的
κ
−
t
h
\kappa-th
κ−th百分位
s
κ
s_{\kappa}
sκ作为阈值,对评分在0以下的掩膜元素进行变换:
其中
1
[
⋅
]
\mathbb{1}[·]
1[⋅]是一个元素指示函数,如果条件[·]满足,则输出为1,否则为零。注意指示码掩码
M
M
M分别删除动态参数
Θ
~
\tilde{\Theta}
Θ~和静态参数
Θ
ˉ
\bar{\Theta}
Θˉ中的冗余参数。此外,为了减少生成的动态参数,我们还可以利用二进制掩码来删除冗余的动态因子。
以MoE为例,
M
M
M可以直接应用于并行专家:
Θ
(
i
)
←
M
⨀
Θ
(
i
)
,
∀
i
∈
{
1
,
2
,
3
,
…
…
,
k
}
\Theta^{(i)}\gets M\bigodot \Theta^{(i)},\forall i \in \{1,2,3,……,k\}
Θ(i)←M⨀Θ(i),∀i∈{1,2,3,……,k}。此外,我们可以降低基于动态因素生成的计算成本。
受迭代策略在初始化剪枝中成功的启发(Verdenius et al., 2020;de Jorge et al., 2021),我们从一个全动态网络出发,采用如图2所示的迭代策略,将动态参数逐步转化为静态参数,其中
M
M
M的零比以指数方式增加。在第5.3节中对模态划分和迭代模态划分的有效性进行了实验验证。