Chen_AdaMV-MoE_Adaptive_Multi-Task_Vision_Mixture-of-Experts 译文
摘要
稀疏激活的专家混合(MoE)正在成为多任务学习(MTL)的一个有前途的范例。 MoE 不是将多个任务的知识压缩到单个模型中,而是分离参数空间,仅利用给定任务类型及其输入的相关模型片段,从而提供稳定的 MTL 训练和超高效推理。然而,当前的 MoE 方法对所有任务采用固定的网络容量(例如,通常是两个专家)。它可能会导致简单任务的过度拟合或具有挑战性的场景的欠拟合,特别是当任务的复杂性显著不同时。在本文中,我们提出了一种用于多任务视觉识别的自适应 MoE 框架,称为 AdaMV-MoE。基于训练动态,它自动确定每个任务的激活专家数量,避免了费力地手动调整最佳模型大小。为了验证我们的建议,我们在 ImageNet 分类和 COCO 对象检测和实例分割上对其进行了基准测试,由于它们之间的差异,它们很难协同学习。与具有共享主干的 MTL 和最近最先进的 (SoTA) MTL MoE 方法相比,针对各种视觉transformers的大量实验证明了 AdaMV-MoE 具有卓越的性能。
- Introduction
图 1. 各种 ViT 架构在 ImageNet 分类(y 轴)、COCO 对象检测和实例分割(x 轴)基准上的多任务视觉识别性能。报告检测 AP (%) 和分割 APmask (%) 的平均结果。标记 ✫ 和 ❍ 分别表示我们的方法和基线方法。标记越大表示用于推理的浮点运算 (FLOP) 越多。 ViT-Small* 是一种具有半transformers层的精简主干变体。
FLOPS:注意全大写,是floating point operations per second的缩写,意指每秒浮点运算次数,理解为计算速度。是一个衡量硬件性能的指标。
FLOPs:注意s小写,是floating point operations的缩写(s表复数),意指浮点运算数,理解为计算量。可以用来衡量算法/模型的复杂度。
多任务视觉识别旨在同时解决多个目标,这在实际应用中通常是需要的。例如,机器人[64]需要学习如何同时拾取、放置、覆盖、重新排列和对齐对象;自动驾驶车辆[42]预计将同时执行可行驶区域估计、车道检测、行人检测等。经典的多任务学习(MTL)方法[52,60,28,48,67,85,51]学习不同任务之间的共享表示并附加任务具体的头。遵循视觉识别的通用趋势,最近的 MTL 作品利用视觉 Transformers (ViTs) [25,68,49,10] 作为新的统一主干 [7, 5]。
然而,这种具有单一主干的 MTL 模型存在训练不稳定和推理效率低下的问题。正如[56,81,17]所指出的,共享参数可能会收到来自不同目标的冲突更新方向,这种负面竞争通常会导致训练收敛性差、表示有偏差和性能较差。与此同时,现有的 MTL 机制通常会激活整个网络主干,无论出现什么任务。它会造成潜在的计算浪费,因为各种现实世界的 MTL 系统 [64] 在每个时刻执行一项或多项任务,这可能只需要相关的模型片段。稀疏激活的专家混合 (SMoE) 是解决这两个 MTL 瓶颈的令人鼓舞的补救措施。具体来说,一项开创性研究[46]将 SMoE 层插入到 MTL ViT 中,方法是用一系列稀疏的前馈网络替换其密集的前馈网络用一系列的激活MOE(例如,多层感知(MLP))。然后,执行与任务相关的路由策略来选择任务相关专家的子集。 MTL MoE [46] 证明了令人印象深刻的结果。
尽管进行了这些初步调查,构建有效的 MTL 系统仍然存在关键挑战:如何为 MTL 中的每个任务确定适当的网络容量?通过将其视为超参数,由于任务之间的纠缠,对每个任务执行手动调整是费力且不可行的。因此,所有任务的固定模型大小是现有 MTL 方法的常规设置(例如,在 [46] 中始终使用 4 个专家)。然而,这种僵化和次优的设计可能会牺牲某些任务的学习,因为网络容量过多或不足会分别导致简单或复杂场景中的过度拟合或欠拟合[72]。当优化任务复杂性差异很大的多个任务时,缺点将进一步放大。以图像分类和目标检测任务为例。首先,常见的分类基准具有较低的输入分辨率,例如 CIFAR [40] 的输入分辨率为 32 × 32,ImageNet [24] 的输入分辨率为 224 × 224,而目标检测通常在分辨率为 640 ×640或892×892的 COCO [47] 数据集上进行评估。其次,为了获得令人满意的性能,用于检测的常规网络[9]通常大于用于分类的网络[69],例如ResNet-101[34]与ResNet-50。第三,就任务目标而言,目标检测既包含目标定位又包含目标识别,因此比本质上可以视为子任务的分类更为复杂。正如[18, 33]中所发现的,他们不匹配的学习目标强调不同的特征属性(即位置不变[8]与敏感)。鉴于任务复杂性的这种异质性,这两个任务很难在共享特征提取器和统一模型大小的情况下一起学习。因此需要一种自适应机制。
在本文中,我们提出 AdaMV-MoE,通过无缝定制当前最先进的 (SOTA) MTL MoE [46] 来解决上述关键障碍。具体来说,提出了一种自适应专家选择机制来自动确定不同视觉任务所使用的专家数量(或模型容量)。我们监控验证损失,以自适应地确定激活更多/更少的专家,以防止欠拟合/过度拟合。我们的贡献总结如下:
⋆ 我们针对多任务视觉识别问题,解决为不同任务选择合适的网络容量的关键挑战。根据训练动态,我们的算法以自适应和自动的方式控制特定于任务的模型大小。
⋆ 我们引入了定制的MoE来同时解决图像分类、对象检测和实例分割的问题,这对于MTL来说曾经是一个麻烦的组合。提供了我们学习到的特定于任务的路由决策的可视化,并公开了专业化模式,特别是对于图像内容。
⋆ 进行了大量的实验来揭示 AdaMV-MoE 在 MTL 中的有效性,如图 1 所示。例如,我们的方法通过共享特征提取器超越了普通的 MTL ViT,显着的性能裕度为 {6.66% ∼ 7.39%准确率,0.87% ∼ 1.13% AP,0.84% ∼ 0.89% APmask},在具有 UViT-Base 主干的 ImageNet 和 COCO 数据集上{图像分类、对象检测、实例分割}[16]。
- 相关工作
多任务学习(MTL)。 MTL 解决多个目标并为输入样本生成相应的预测。它已经被研究了很长的历史,并且提出了许多解决方案,从经典的学习算法[78,36,89,4,80,43,23,41]到现代深度神经网络。深度学习方法生成共享特征表示来对跨任务的公共信息进行建模,这些任务可以分为两组,即以编码器为中心的管道和以解码器为中心的管道。前者[52,60,28,48]允许编码器中的任务交互,并将特定于任务的头附加在其顶部作为独立的解码器。例如,[52]和[48]分别提倡使用线性组合和注意力机制来学习任务之间共享的编码器表示。后者[77,87,86,70]首先从解码器创建初始的任务相关特征,然后将它们聚合以形成最终的每任务预测。此类管道消耗大量计算,因为它们至少需要为初始解码器功能执行一次所有任务,这限制了它们在资源受限场景中的实际使用。在本文中,我们主要研究以编码器为中心的架构。
传统的编码器架构是卷积神经网络(CNN)[48,63,84,85]。随着 ViT 的出现,IPT [11] 利用基于 Transformer 的模型来解决多个低级视觉任务。 [54]和[61]分别对视频中的{对象检测,语义分割}和{场景和动作理解,分数预测}任务采用类似的架构。 [7] 进一步涉及 3D 领域的视觉任务。我们的工作考虑使用基于 ViT 的模型联合学习分类、对象检测和实例分割。请注意,这是非常重要的,因为分类和检测和分割分别强调位置不变[8]和敏感特征,这可能相互矛盾。此外,MTL 的另一个主题研究如何共享和分离参数空间,分别用于学习任务无关和特定知识 [66,71,55,6,46]。
混合专家 (MoE)。 MoE 将一些网络组件复制成一系列副本(称为专家)并以依赖于输入的方式包含条件计算[37,39,12,82]。 MoE 的最早变体密集地激活每个输入的所有专家,因此它是计算密集型的 [26]。后来,[62,44,27]提倡使用稀疏激活的专家方式,称为稀疏 MoE (SMoE)。它极大地降低了训练和推理阶段的成本,从而提供了令人印象深刻的可扩展性,甚至允许具有数万亿参数的巨大语言模型[27]。 SMoE 的有效性已在各种 NLP [62,44,91,88,93,38] 和视觉 [58,26,2,30,74,79,1,57] 任务中得到广泛证明。特别是,开创性的工作[58]为图像识别任务提供了第一个基于视觉transformer的SMoE。
随着进一步的调查,SMoE 的几个缺点被揭示出来,包括: i) 训练不稳定。 [92]对SMoE的训练稳定性和质量之间进行了权衡研究,他们展示了许多经典技巧,如梯度裁剪稳定训练,但牺牲了性能,而路由器z-loss [92]似乎带来了双赢的情况。 ii) 专业化程度低。 SMoE 的理想结果是通过与选定的专家一起解决每个问题来分治某些任务 [3,32,51,53,15]。然而,除非明确强制专业化并减少专家之间的冗余[13],例如预先定义多样化的专家分配[22]或涉及多个路由策略[32],否则很难实现这一目标。 iii) 代表性崩溃。训练有素的 SMoE 很容易出现负载不平衡的情况,例如,只有少数专家被频繁使用,而其他专家则很少被激活。为了缓解这个问题,[62]在路由器网络中添加了高斯噪声; [44, 27]提出辅助损失作为正则化; [45]制定并解决了平衡线性分配问题; [91]为每个专家分配top-k相关输入; [59, 93]采用确定性哈希和随机路由;和[14]分别促进训练期间的多样性。在本文中,我们不仅研究了上述瓶颈,还研究了路由器的新特性,例如策略收敛。Convergence
最近的几项研究还探讨了 SMoE 在 MTL 场景中的可能性。具体来说,[51,3,32,31,90]使用任务相关的路由器网络为每个任务选择具有固定大小的模型的相关部分。它们在医疗信号分类 [3]、数字图像 (MNIST) [32] 和推荐系统 [51] 等小规模应用中显示出积极的结果。 [46] 使用与 SMoE 共同设计的模型加速器来研究高效的设备上 MTL。
- 方法
3.1。重新审视稀疏的专家组合
SMoE [62] 建议扩大模型容量,同时保持较低的每次推理成本。在这项工作中,我们考虑 ViT 的 SMoE [25, 58],它将 SMoE 层插入到每个其他transformer块中。 SMoE层包含路由器网络R和若干专家f1,f2,····,fE,其中E为专家数量。专家模块可以是一些完全连接的 [62, 58] 或卷积层 [73],我们将多层感知 (MLP) 复制为专家网络,如图 2 所示。请注意,ViT 中的 MLP 包含大约 2/3总参数计数,[29, 20] 证明了它们作为存储大量知识的记忆网络的重要性。
SMoE 层中的另一个关键组件,即 R,激活具有与输入嵌入 x 相关的最大分数 R(x)i 的前 k 个专家网络,其中 i 是专家索引。通常,所选专家的数量 k 是固定的,并且远小于专家总数 E,这表明 SMoE 的稀疏激活方式。专家分布可以正式描述如下:
其中 fi(x) 代表专家 fi 产生的特征表示,由 R(x)i 加权形成最终输出 y。网络 g 是路由器 R 内的可学习部分,通常是一层或几层 MLP [62, 27]。 TopK是一个丢弃排在k之后的小元素的函数。为了减少不平衡负载(或表示崩溃[19])的负面影响,我们遵循[58]中的设计和默认超参数,引入正则化项来平衡专家分配。
3.2. AdaMV-MoE:混合专家的自适应多任务视觉识别
AdaMV-MoE 概述。 我们提出的框架,即 AdaMV-MoE,由任务相关的路由器网络和自适应专家选择(AES)机制组成。如图 2 所示,input token embeddings 根据任务类型输入相应的路由器网络。然后,任务相关路由器选择最相关的专家,并针对不同的任务聚合他们的特征。所选专家的数量是根据 AES 的实时训练动态动态决定的。
任务相关的路由策略。令 Rj 代表任务 j 的路由器,所有专家网络 {fi}|E i=1 都在任务之间共享。配备任务相关路由器网络的SMoE定义为:
其中 kj 和 yj 分别是特定于任务的激活专家数量和输出。正如第 4 节所支持的,不同路由策略之间的差异带来了参数空间的纠缠,从而减轻了 MTL 的梯度冲突并提高了性能。
自适应专家选择(AES)。由于任务复杂性的差异,各种视觉识别任务的最佳网络大小可能会发生显着变化。如果不经过艰苦的尝试和错误,很难手动得出结论。相反,我们采用自动算法 AES 以数据驱动的方式确定 kj。如算法 1 所示,它首先计算验证集上特定于任务的目标 Lj val。如果 Lj val 在接下来的 Δn 迭代中没有衰减,那么我们通过更新 kj = kj + 1 来扩展激活的模型大小。现有文献[76]指出,适当的网络扩展为逃离功能空间中的鞍点创造了可能性,并进一步降低了目标值。同时,如果Lj val大于之前的最佳验证损失Lj val(best),则将所选专家数量减少kj = kj − 1。最后,固定kj,在达到训练目标数量的情况下继续训练模型迭代。对所有任务重复上述过程。
- 实验
4.1。实施细节
网络骨干网。我们的实验集中在基于 ViT 的主干上,包括 ViT [25] 及其高级变体 - UViT [16]。改变模型大小,我们建立了四个ViT:{ViT-Small*、ViT-Small、ViT-Base、UViT-Base},其详细信息如表2所示。
主干网络首先从分类和检测数据集中获取输入图像,然后提取将由特定于任务的模块进一步处理的特征。我们的实验中选择了 Cascade Mask-RCNN [9] 的线性分类层以及检测和分割头。按照[58],ViT和SMoE层交替排列。更多详细信息请参见 A1 部分。
表 1.我们提出的 AdaMV-MoE 的多任务视觉识别性能。报告 ImageNet-1k 上的分类 (CLS)、对象检测 (OD) 和 {准确率 (%)}、{AP (%)、AP50(%)、AP75(%)} 和 {APmask(%)}分别在 COCO 上进行实例分割(IS)。 # 参数(M)表示自适应分配的网络容量。采用ViT-Small*/Small/Base [25]和UViT-Base [16]骨干网,其详细信息记录在表2中。ViT-Small*是ViT-Small的简化变体,具有半变压器层。与基线 MTL-ViT 和最近最先进的 MTL 方法 TAPS 进行比较 [71]。我们的 AdaMV-MoE 中的专家 E 总数为 8。{Dense 和 Large Dense、Sparse} 表示 {整个、部分}网络分别用于训练和推理阶段的每个任务。 N.A. 表示“不适用”。
数据集和任务。我们在 ImageNet [24] 和 MS COCO 2017 [47] 数据集上检查我们的方法,分别用于分类和【检测 分割】任务。 ImageNet 包含 1, 000 个类别的 1.28M 训练图像和 50K 测试图像,而 MS COCO 2017 包含 118K 训练图像和 5K 验证图像。用于分类的输入分辨率为 224 × 224,用于对象检测和实例分割的输入分辨率为 640 × 640。
基线。为了支持我们建议的有效性,我们考虑三组比较基线:(1)用于单任务学习(STL)的密集 ViT,即 CLS 的 ViT 和 OD & IS 的 ViT。 (2)用于多任务学习的密集ViT,即MTL-ViT。它共享完整的特征提取器和附加的任务特定头。大密集意味着强化基线,具有更大的隐藏维度和更多的参数计数,如附录 A1 所示。 (3) TAPS [71],一种最近的state of the art的多任务方法,提倡任务自适应参数共享。
训练和评估详细信息。单任务学习基线的训练批量大小为 1,024 和 256 分别用于分类、对象检测和实例分割。对于 MTL 训练,两个任务的批量大小分别为 1、024 和 128。在训练期间,数据增强适用于这两项任务。对于分类,我们使用 CutMix [83] 和 MixUp [65]。至于检测和分割,采用随机缩放增强来增强输入样本。
我们的 ViT 使用 AdamW [50] 进行优化,权重衰减为 {6 × 10−3, 1 × 10−4, 5 × 10−4},初始学习率 (LR) 为 3 × 10−3,{20, 2, 10}K 次迭代预热,以及 {CLS, OD & IS, MTL} 的余弦 LR 衰减时间表。 模型训练涉及多种损失函数,例如用于分类的交叉熵损失以及用于检测和分割的 Mask-RCNN 的{class, box, mask}损失。在我们的例子中,[16]的默认超参数是继承的。至于AdaMV-MoE,我们添加了两个辅助损失项重要性和负载正则化[58]用于路由器网络学习。这两个损失的系数设置为 5 × 10−3 [58]。应用AES时,将Δn的值设置为2000,并随机保留1%的训练样本来构造AES的验证集Dval。对于 TAPS 和 AdaMV-MoE,我们首先训练网络来解决 300K 步骤的分类任务,并同时训练两个任务(CLS 和 OD & IS),额外增加 200K 步骤。对于{Dense、Large Dense},它经过 200K 次迭代的训练。训练步骤的消融研究见附录 A2。每个实验使用 16 ∼ 64 和 8 个 TPU-v3 进行训练和推理。
为了评估经过训练的 ViT 的性能,我们报告了分类的测试准确性、对象检测任务的验证 {AP, AP50, AP75} [16] 以及实例分割的验证 APmask [16]。此外,还可以计算激活参数的数量(以百万为单位)表示每项任务所使用的模型容量。
4.2. AdaMV-MoE 卓越的多任务视觉识别性能
STL 和 MTL 方法的比较。
我们选择 ViT-Small*/Small/Base 和 UViT-Base 网络架构,考虑到它们的普通(密集)、加宽(大密集)和 SMoE(稀疏)变体。所有方法都在 ImageNet 分类和 COCO 对象检测和实例分割的基准上进行检查。比较结果收集在表 1 中,其中可以得出以下观察结果: ❶ 与具有共享 ViT 特征提取器(即(Dense、Large Dense)MTL)的 MTL 基线相比,我们的 AdaMV-MoE 表现出巨大的优势,具有明显的性能裕度-ViT。具体来说,AdaMV-MoE获得{(4.69%, 2.67%)、(2.69%, 1.30%)、(1.75%, 0.79%)}、{(9.06%, 6.54%)、(0.73%, 0.09%)、 (0.87%, 0.05%)}, {(4.41%, 4.18%), (0.07%, 0.23%), (0.19%, 0.26%)}, {(7.39%, 6.66%), (1.13%, 0.87% ViT-Small*/Small/Base 和 UViT-Base 的{准确度 (%)、AP (%)、APmask (%)} 改进分别为 (0.84%, 0.89%)}。它验证了我们建议的有效性。 ❷ AdaMV-MoE 通过激活不同数量的模型参数,自适应地分配足够的网络容量来解决分类、检测和分割任务。例如,我们的建议在 CLS 上花费较少的参数数量,而在具有挑战性的 OD 和 IS 任务上花费更多的参数预算,例如,在 ViT-Small 的情况下为 29.65M 和 34.97M,这与我们的直觉一致。 ❸ 此外,AdaMV-MoE 在 ImageNet 和 COCO 数据集上始终超越了最近的 SoTA MTL 方法,即 TAPS [71],准确率达到 0.14% ∼ 3.78%,AP 0.29% ∼ 4.78%,APmask 0.17% ∼ 3.38%跨越四个 ViT 主干网。同时,与单任务学习基线相比,ViT-Small* 取得了有竞争力的结果,进一步显示了我们算法的优越性。
AdaMV-MoE 的消融研究。
为了研究 AdaMV-MoE 中每个组件的贡献,使用 ViT-Small* 在多任务视觉识别上进行了综合实验。如表3和表4所示,我们对路由器设计、MTL期间自适应网络容量的需求以及采用AdaMV-MoE时的专家数量进行了消融。
▷ 任务无关路由器与任务相关路由器 R。表 3 中的结果表明,任务相关路由策略比任务无关路由策略受益更多,并且与 MTL-ViT 基线相比,性能增益更大。
▷ 带或不带自适应专家选择 (AES)。配备 AES,激活的模型大小针对不同任务进行了优化,从而显着提升了 MTL 性能。具体来说,我们的 w. AES 优于其变体 w.o. AES 的{0.95% 准确度、0.43% AP、0.53% APmask} 改进,以及最近发明的 MTL-MoE [46] 的{0.92% 准确度、0.51% AP、0.52% APmask} 增益,这证明了定制化的必要性每个任务的网络容量。请注意,我们两个都没有。 AES 和 MTL-MoE [46] 在所有视觉任务中采用固定且统一的模型大小(或 # 个选定的专家),这可能会导致较差的结果。
▷ 专家数量。作为 SMoE 设计中最重要的超参数之一,E 大致反映了允许通过动态路由进行探索的整体参数空间的大小。表 4 报告了 AdaMV-MoE 在 {1, 4, 8, 16, 32} 位专家的情况下的结果,其中如果设置 E = 1,AdaMV-MoE 就会退化为 MTL-ViT。我们发现 AdaMV-MoE 的性能在超过 8 个专家的情况下饱和。专家认为,E = 8 似乎是我们的多任务视觉识别基准测试中的“最佳点”。
4.3. AdaMV-MoE 的深入剖析
鉴于 AdaMV-MoE 的优越性,我们通过研究其 i) 专业化、ii) 路由质量、iii) 引入 SMoE 层的足够位置以及 iv) 缓解措施进一步提供深入剖析多个训练目标对梯度冲突的影响。
Q1:专家的选择是否针对不同的任务、类别和图像内容?是的。 AdaMV-MoE 的一个关键优势是,它优化了 MTL 期间为每个任务和输入样本激活多少(即自适应网络容量)和哪些(即动态路由)专家。我们研究了从粗粒度到细粒度的路由专业化的三重级别,包括任务、类和补丁级别。
▷ 任务级专业化。从图4(左)中,我们发现❶专家之间的负载总体均衡,这表明所有模型参数都得到了充分利用; ❷ 相对而言,根据频率,CLS 更喜欢专家 1 和 6,OD 和 IS 更喜欢专家 1、3 和 7。
▷ 等级级别专业化。图 4(右)显示了 AdaMV-MoE 中最后一个 SMoE 层的按类别专家使用情况进行分类,我们观察到大多数类别首选专家 6,而其他专家选择似乎与类别类型相关,这与[58]中的研究结果一致。 OD 和 IS 也存在类似的观察结果,如附录 A2 所示。
▷ 补丁级专业化。在图 3 中,我们可视化了 AdaMV-MoE w 的专家分配。每个输入补丁的 ViT-Small。具体来说,激活专家的top-1和top-2分别由补丁边界和内容的颜色表示,其中不同的颜色代表不同的专家。 ❶ 对于分类,背景中的大多数斑块被分配给与黑色斑块边界和红色斑块内容相关的两个特定专家,而利用不同的专家来处理前景中的主要对象。 ❷ 对于对象检测和实例分割,呈现出清晰的补丁式专业化。例如,不同的图像内容(例如对象边界、对象主体和背景)由独特且特定的专家子集处理。这样,任务就分工攻克了。
Q2:学习到的路由策略的质量如何?高品质体现在较少的路由崩溃和良好的政策收敛性方面。我们从崩溃[19]和收敛[21]的角度研究AdaMV-MoE的路由策略。 ❶ 为了研究其路由崩溃,我们绘制了路由器网络隐藏特征的多样性,如图 5 所示。CLS 和 OD & IS 的热图显示了均匀分布的隐藏状态,表明平衡的专家分配和较少的表示崩溃 [19]这与图 4 中得出的观察结果一致。 ❷ 对于策略收敛,我们选择 ViT-Small* 的浅 SMoE 层和深 SMoE 层,并在图 4 中显示来自不同训练迭代的路由决策之间的汉明距离6. 我们注意到,在前 25K 次迭代后,路由收敛得很好,浅 SMoE 层具有更高的收敛速度,具有更小的路由波动和更好的样本效率 [21]。这种高质量的路由策略可能解释了 AdaMV-MoE 的优越性。
Q3:我们应该在哪里插入 SMoE 层?后来的层。对于视觉转换器,有多种选项可以用 SMoE 层替换原始 ViT 层。我们比较了不同的设计选择,例如在早期、中期、后期和每两层采用 SMoE,其中每个 AdaMV-MoE 变体都有一半 ViT 和一半 SMoE 层。表 5 中的结果表明,仅对早期层实施 SMoE 会导致 MTL 性能较差。一个可能的原因是早期层通常负责学习基本形状或颜色等共同特征,这些特征应该在视觉识别任务期间跨类共享。
Q4:AdaMV-MoE 是否可以缓解不同任务的梯度冲突问题?是的。首先,由于其稀疏和条件计算方式,AdvMV-MoE 自然地解开了不同任务的参数空间。其次,如图 7 所示,对于所有任务的通用参数,我们的建议通常会减少梯度冲突,例如,CLS 和 OD 的训练梯度之间的负余弦距离较小,正余弦距离较大。
5.结论在本文中,我们提出了一种自适应多任务视觉识别框架,旨在自动设计用于独特任务的网络容量。我们的建议无缝定制当前的 SoTA MTL Mixtureof-Experts,并通过自适应激活或停用专家来优化特定于任务的模型大小。对各种 ViT 架构的广泛调查一致证明了我们的方法在 ImageNet 分类和 COCO 对象检测和实例分割的挑战性基准上的性能改进。未来的工作包括扩展“Pathway”系统等多模式多任务学习。
相关文章:
Chen_AdaMV-MoE_Adaptive_Multi-Task_Vision_Mixture-of-Experts 译文
摘要 稀疏激活的专家混合(MoE)正在成为多任务学习(MTL)的一个有前途的范例。 MoE 不是将多个任务的知识压缩到单个模型中,而是分离参数空间,仅利用给定任务类型及其输入的相关模型片段,从而提供…...
多线程下使用数据库 - 20241124
问题 并发性较低,每秒千次但是较高一致性,比如利用数据库中的数据进行判断是否执行某个操作 存在的问题是,如何只锁定判断相关的数据,而不影响数据库操作无关数据。脏读/不可重复读/幻读 解决方案 利用数据InnoDB引擎的LBCC和…...
GMAN解读(论文+代码)
一、注意力机制 注意力机制与传统的卷积神经网络不同的是,前者擅长捕获全局依赖和长程关系,权重会动态调整。而后者对于所有特征都使用同一个卷积核。关于更多注意力机制内容,详见: 注意力机制、自注意力机制、多头注意力机制、通…...
《文件操作》
一 . 文本文件和二进制文件 根据数据的组织形式,数据文件被分为了二进制文件和文本文件 数据在内存中是以二进制的形式存储,如果不加转换的输出到外存的文件中,就是二进制文件。 如果要求在外存上以ASCII 码的形式存储,则需要再存…...
【君正T31开发记录】8.了解rtsp协议及设计模式
前边搞定了驱动,先不着急直接上手撸应用层的代码,先了解一下大致要用到的东西。 设计PC端先用vlc rtsp暂时H264编码(vlc好像不支持h265,这个后边我试试)的视频流,先需要支持上rtsp server,了解rtsp协议是必…...
C++菜鸟教程 - 从入门到精通 第三节
上节课的题 上节课的题,大家都做出来了吗? 看一下这道题: 题目描述 N!1*2*...*N; 例5!1*2*3*4*5120. 编程求1!2!3!...N!. 输入 输入一行,只有一个整数n (1<n<10) 输出 输出只有一行(这意味着末尾有一个回车符号),包括1…...
原生JS和CSS,HTML实现开屏弹窗
开屏弹窗常应用于打开游戏,或者打开网站的时候,跳出来在正中间,来显示一些信息,并可以设置今日不再显示 CSS代码如下 <style>#box {width: 100vw;height: 100vh;background-color: rgba(0, 0, 0, 0.2);position: relative…...
微软发布Win11 24H2系统11月可选更新KB5046740!
系统之家11月22日报道,微软针对Win11 24H2系统推出2024年11月最新可选更新补丁KB5046740,更新后系统版本后升至26100.2454,此次更新后修复当应用程序以PDF和XLSX格式导出图表对象时停止响应、无法使用API查找旋转信息等问题。以下小编将给大家…...
【Rabbitmq篇】高级特性----TTL,死信队列,延迟队列
目录 一.TTL 1.设置消息的TTL 2.设置队列的TTL 3.俩者区别 二.死信队列 定义: 消息成为死信的原因: 1.消息被拒绝(basic.reject 或 basic.nack) 2.消息过期(TTL) 3.队列达到最大长度 编辑 …...
【Linux】gcc/g++使用
编译 我们知道,gcc只能编译C,g既能编译C,也能编译C。 由于两者的选项是相同的,这里我们使用gcc来说明。 这就是一个我们在linux中gcc编译一段代码后会自动生成一个a.out为名的可执行文件,然后我们./a.out,…...
IDEA2023 SpringBoot整合MyBatis(三)
一、数据库表 CREATE TABLE students (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(100) NOT NULL,age INT,gender ENUM(Male, Female, Other),email VARCHAR(100) UNIQUE,phone_number VARCHAR(20),address VARCHAR(255),date_of_birth DATE,enrollment_date DATE,cours…...
Java网络编程 - cookiesession
cookie 之前学习了 Okhttp3 库可以调用API、抓取网页、下载文件。但是这些操作都是不要求登录的,如果 API、网页、文件等内容要求登录才能访问,就需要学习新的 cookie 相关的知识。 下面以豆瓣为例,使用 Java 程序读取“我的豆瓣”页面内容…...
100.【C语言】数据结构之二叉树的堆实现(顺序结构) 1
目录 1.顺序结构 2.示意图 编辑 从物理结构还原为逻辑结构的方法 3.父子节点编号的规律 4.顺序存储的前提条件 5.堆的简介 堆的定义 堆的两个重要性质 小根堆和大根堆 6.堆的插入 7.堆的实现及操作堆的函数 堆的结构体定义 堆初始化函数HeapInit 堆插入元素函…...
《Python基础》之循环结构
目录 简介 一、for循环 1、基本语法与作用 2、使用 range() 函数配合 for 循环 3、嵌套的for循环 二、while循环 1、基本语法与作用 2、while 循环嵌套 (1)、while循环与while循环嵌套 (2)、while循环与for循环嵌套 简介 …...
使用JDBC操作数据库
文章目录 使用JDBC操作数据库1. JDBC访问数据库步骤2. Statement与PreparedStatement区别3. JDBC的内容4. JDBC封装4.1 为什么进行JDBC封装4.2 实现JDBC封装4.3 什么是DAO4.4 配置数据库访问参数4.5 配置数据库连接池使用之JNDI的方式 5. 单例模式5.1 懒汉模式5.2 饿汉模式 使用…...
轻松解析 PDF 文档:深入了解 Python 的 pdfplumber 库
轻松解析 PDF 文档:深入了解 Python 的 pdfplumber 库 PDF 是一种常见的文件格式,广泛用于报告、文档、表单等领域。然而,如何高效解析 PDF 内容(尤其是文本和表格),一直是开发者面临的挑战。pdfplumber 是…...
实验五 时域采样与频域采样
时域采样理论的验证 【实例3-1】近似绘制x (n) R4n 在(0,2 π \pi π ) 上的幅频响应曲线( F T [ x ( n ) ] FT[x(n)] FT[x(n)] )。 x [1, 1, 1, 1]; N 64; xk fft(x, N); figure; subplot(2, 1, 1); stem(0:3, x, .); subplot(2, 1, 2); k 0:N-1; plot(2*k/N, abs(x…...
爬虫cookie反爬------加速乐(jsl)
加速乐 反爬虫技术:加速乐采用了包括OB混淆、动态加密算法和多层Cookie获取等高级反爬虫技术,确保整体校验的严密性。关键校验字段位于Cookie中的 __jsl_clearance_s,其验证过程通常涉及三次关键的请求,有效抵御恶意爬虫的侵扰。…...
设计模式——解释器模式
定义: 解释器模式是一种行为设计模式,它给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。在这种模式中,通常会将一个复杂的表达式(如数学表达…...
sorted()函数
sorted(iterable, keyNone, reverseFalse)iterable: 需要排序的可迭代对象(如列表、元组、字符串等)。 key: 一个函数,用于从每个元素中提取排序的依据。如果未指定,默认直接比较元素本身。 reverse: 一个布尔值,Tru…...
动静态分析
静态分析 获取哈希值: 查壳: 导出函数: 获取资源信息: 通过发现dos头和pe头,来确定它是个可执行程序。 动态分析...
2024年信号处理与神经网络应用国际学术会议(SPNNA 2024)
重要信息 会议时间:2024年12月13-15日 会议地点:中国武汉 会议官网:www.spnna.org 会议简介 2024年信号处理与神经网络应用国际学术会议(SPNNA 2024)将于2024年12月13日至15日在中国武汉召开。本次会议旨在为全球研…...
winfrom快速自适应
在软件界面设计中,我们通常需要添加各种布局器和规则来实现界面布局,但对于不太熟练的工程师来说,这可能存在一定难度。这里要分享一种自适应布局的方法,它可以根据界面比例自动缩放内容控件,在较短时间内完成软件布局…...
VMware16安装macOS12【详细教程】
因为在应用上线IOS应用商店时,需要用到mac系统进行,于是就在VMware16pro虚拟机进行安装macOS12系统,安装的过程做了一个记录,希望对你有所帮助! 前言 首先需要下载好下面工具: VMware workstation pro 16…...
【设计模式】【创建型模式(Creational Patterns)】之单例模式
单例模式是一种常用的创建型设计模式,其目的是确保一个类只有一个实例,并提供一个全局访问点。 单例模式的原理 单例模式的核心在于控制类的实例化过程,通常通过以下方式实现: 私有化构造函数,防止外部直接实例化。…...
【1.2 Getting Started--->Installation Guide】
NVIDIA TensorRT DOCS 此 NVIDIA TensorRT 10.6.0 安装指南提供安装要求、TensorRT 包中包含的内容列表以及安装 TensorRT 的分步说明。 安装指南 摘要: 本 NVIDIA TensorRT 10.3.0 安装指南提供了安装要求、TensorRT 软件包中包含的内容列表以及安装 TensorRT 的…...
Vue 中 data 属性为函数的深度剖析:原理、区别与实践
在 Vue.js 中,data 属性通常是一个 函数 而不是一个对象,这背后有一系列设计上的原因和原理,尤其是与 Vue 的组件系统、实例化机制、以及响应式数据的管理有关。下面我将详细解答这个问题,并结合实际项目示例和代码分析,进行全面讲解。 1. Vue 中 data 为什么是一个函数而…...
【漏洞复现】H3C 用户自助服务平台 dynamiccontent.properties.xhtml 远程命令执行
免责声明: 本文旨在提供有关特定漏洞的信息,以帮助用户了解潜在风险。发布此信息旨在促进网络安全意识和技术进步,并非出于恶意。读者应理解,利用本文提到的漏洞或进行相关测试可能违反法律或服务协议。未经授权访问系统、网络或应用程序可能导致法律责任或严重后果…...
【技术支持】vscode不使用插件,两种方式重命名html标签对
1. 使用 VS Code 内置功能 VS Code 内置支持 HTML/XML 标签对的重命名功能。步骤如下: 将光标放置在标签名上(如 <div> 或</div>)。按下快捷键 F2(重命名符号)。输入新的标签名,按 Enter&…...
【Seed-Labs 2.0】The Kaminsky Attack Lab
说在前面 本实验属为Seed-Labs 的DNS LAB 中的第二个实验,是第一个实验的延伸,从攻击者和受害者同一个LAN中变成不在同一个LAN中,该系列一共有五个实验: Local DNS Attack LabThe Kaminsky Attack LabDNS Rebinding Attack LabDNS Infrastr…...
node.js中使用express.static()托管静态资源
express.static()定义 express.static(root, [options])是一个中间件函数,负责为Express应用提供静态资源服务。它允许你指定一个或多个目录作为静态资源的根目录,当客户端请求这些资源时,Express会查找并返回对应的文件。 安装express npm i…...
SQL MAX() 函数深入解析
SQL MAX() 函数深入解析 概述 SQL(Structured Query Language)是一种广泛使用的数据库查询语言,它允许用户从数据库中检索、更新和管理数据。在SQL中,MAX() 函数是一个常用的聚合函数,用于从数据集中找出某一列的最大…...
WPF——自定义ToolTip
问题 前一天制作的图标按钮,在测试的过程中发现一个问题:为图标按钮添加的提示如下图所示,它的显示效果非常差,甚至不能看清文本内容,并且其字体与颜色也不是愚所希望的。 产生原因 此是由于tooltip有一个默认的样式…...
linux基本命令(1)
1. 文件和目录操作 ls — 列出目录内容 ls # 显示当前目录的文件和目录 ls -l # 显示详细的文件信息(权限、大小、修改时间等) ls -a # 显示所有文件(包括隐藏文件) ls -lh # 显示详细信息并以易读的方式显示文件大小 cd — 改…...
从0-1逐步搭建一个前端脚手架工具并发布到npm
前言 本文介绍的案例已同步到github,github地址。 vue-cli 和 create-react-app 等 cli 脚手架工具用于快速搭建应用,无需手动配置复杂的构建环境。本文介绍如何使用 rollup 搭建一个脚手架工具。 脚手架工具的工作流程简言为:提供远端仓库…...
开发者视角下的鸿蒙
鸿蒙操作系统(HarmonyOS)是华为公司自主研发的一款面向未来、面向全场景的分布式操作系统。它旨在为用户提供一个无缝的智能生活体验,支持多种终端设备,如智能手机、平板电脑、智能穿戴设备、智能家居等。鸿蒙操作系统的出现&…...
docker基础命令
目录 1、docker拉取镜像 2、查看镜像 3、运行镜像 4、查看容器 5、停止、启动、容器和删除容器 6、进入容器 7、删除镜像 8、保存镜像 9、加载镜像 10、镜像标签 11、制作镜像 12、镜像上传 1、docker拉取镜像 docker pull 用户名/镜像名:tag不加tag(版本号) 即…...
订单日记为“惠采科技”提供全方位的进销存管理支持
感谢温州惠采科技有限责任公司选择使用订单日记! 温州惠采科技有限责任公司,成立于2024年,位于浙江省温州市,是一家以从事销售电气辅材为主的企业。 在业务不断壮大的过程中,想使用一种既能提升运营效率又能节省成本…...
C++共享智能指针
C中没有垃圾回收机制,必须自己释放分配的内存,否则就会造成内存泄漏。解决这个问题最有效的方式是使用智能指针。 智能指针是存储指向动态分配(堆)对象指针的类,用于生存期的控制,能够确保在离开指针所在作用域时,自动…...
数学建模学习(138):基于 Python 的 AdaBoost 分类模型
1. AdaBoost算法简介 AdaBoost(Adaptive Boosting)是一种经典的集成学习算法,由Yoav Freund和Robert Schapire提出。它通过迭代训练一系列的弱分类器,并将这些弱分类器组合成一个强分类器。算法的核心思想是:对于被错误分类的样本,在下一轮训练中增加其权重;对于正确分类…...
sqlite-vec一个SQLite3高效向量搜索扩展--JDBC环境使用
最近要用SQLite3,之前放出来了SQLiteUtile工具,方便操作。今天发现AIGC方面,RAG知识库需要使用向量数据库,来存储知识信息。一般呢都是用mysql,但无奈的是mysql就是不让用。突然又发现SQLite3有向量库扩展组件…...
Spark SQL操作
Spark SQL操作 文章目录 Spark SQL操作一、DataFrame的创建与保存1.前提操作2.数据准备3.创建4.保存DataFrame 二、DataFrame的操作1.printSchema2.show3.select4.filter5.groupBy(filed)6.sort(field) 三、临时表操作1.创建临时表2.通过临时表及SQL语句进行查询 四、从RDD转换…...
【大模型】LLaMA: Open and Efficient Foundation Language Models
链接:https://arxiv.org/pdf/2302.13971 论文:LLaMA: Open and Efficient Foundation Language Models Introduction 规模和效果 7B to 65B,LLaMA-13B 超过 GPT-3 (175B)Motivation 如何最好地缩放特定训练计算预算的数据集和模型大小&…...
聚焦AI存储,联想凌拓全力奔赴
【全球存储观察 | 科技热点关注】 每一个时代,都有每一个时代的骄傲。 在信息化时代,NAS文件存储肩负着非结构化数据管理与存储的重任,NetApp以其创新实力,赢得了全球存储市场的极高声誉。 在数智化时代,…...
ansible常用模块
一.ansible常用模块 ansible [主机or组列表] -m 模块 -a "参数"1.shell:类似于在终端上直接输入命令,支持bash特性2.command(默认模块):使用的变量需要事先定义好,不支持bash特性,如管道、重定向3.script: 执行脚本,支持python,shell脚本4.file:用于在被控…...
window11编译pycdc.exe
一、代码库和参考链接 在对python打包的exe文件进行反编译时,会使用到uncompyle6工具,但是这个工具只支持python3.8及以下,针对更高的版本的python则不能反编译。 关于反编译参考几个文章: Python3.9及以上Pyinstaller 反编译教…...
C语言——break、continue、goto
目录 一、break 二、continue 1、在while循环中 2、在for循环中 三、go to 一、break 作用是终止循环,在循环内遇到break直接就跳出循环。 注: 一个break语句只能跳出一层循环。 代码演示: #include<stdio.h>void test01() {for (…...
实战OpenCV之人脸识别
基础入门 随着计算机视觉技术和深度学习的发展,人脸识别已经成为一项广泛应用的技术,涵盖了从安全监控、身份验证、智能家居到大型公共安全项目等多个领域。 人脸识别技术通常包括以下几个主要步骤。 图像采集:通过摄像头或其他图像采集设备,捕获包含人脸的图像或视频帧。 …...
记录第一次安装laravel项目
window系统 Laravel中文文档:https://laravel-docs.catchadmin.com/docs/11/getting-started/installation 1.使用composer安装全局laravel composer global require laravel/installer2.安装完成后在命令行输入laravel,如果报错:laravel不是…...
AWTK-WEB 快速入门(1) - C 语言应用程序
先安装 AWTK Designer 用 AWTK Designer 新建一个应用程序 2.1. 新建应用程序 这里假设应用程序的名称为 AwtkApplicationC,后面会用到,如果使用其它名称,后面要做相应修改。 在窗口上放置一个按钮将按钮的名称改为 “close”将按钮的文本改…...