英伟达提出AdaViT:出于DeiT而又快于DeiT

©作者 |小欣

01 简介

自从Vision Transformer(ViT)被提出以来,Transformer已经成为一种流行的神经网络架构,并广泛的应用到计算机视觉领域之中,如图像分类、目标检测、图像生成和语义分割等任务。

但是,Transformer目前最主流的模式仍然是ViT通过将图像分割成一系列有序的Patches来形成Token,并通过在Token之间建模来解决CV底层问题。

目前使用ViT处理图像的计算成本仍然很高,主要是原因是因为Token之间交互计算带来了二次方的计算复杂度。因此,在大量的计算和内存资源中,在服务端或边缘计算端部署ViT是一个具有挑战性的任务。

AdaViT主要研究如何根据输入图像的复杂度自动调整ViT的计算量。目前几乎所有主流的ViT在推理过程中都有一个独立于输入的固定开销。然而,预测任务的难度随着输入图像的复杂性而变化。

例如,从具有同质背景的图像中对汽车和人进行分类是相对简单的;而在复杂的背景下区分不同品种的狗则更具挑战性。即使是在一张图像中,包含物体详细特征的Patch比那些来自背景的Patch提供的信息要多得多。

针对神经网络的输入依赖问题在以前的工作中已经得到了研究。Graves提出ACT,将神经网络模块的输出作为一个mean-field模型定义的Halt分布。

ACT将离散的暂停问题松弛为一个连续的优化问题,使总计算的上限最小化;最近,随机方法也被应用于解决这个问题,利用几何模型的输出分布,让一些层在训练前期便停止更新。

fignov等人提出了一种ACT的空间扩展,它沿着空间而不是残差层暂停卷积操作。

这种方法并不会带来更快的推理,因为高性能硬件仍然依赖于密集计算;AdaViT作者遵循ACT提出了一种基于输入的ViT自适应推理机制,其中对残差层中的所有Token同时停止计算。作者还观察到,这种方法仅仅减少了计算的一小部分,但造成了不小的精度损失。

为了解决上述精度问题,作者提出了AdaViT,一种空间自适应推理机制,它在不同深度暂停不同Token的计算,以动态的方式保留有价值的Token参与计算。

与卷积特征映射中的逐点ACT不同,AdaViT可以直接由高性能硬件支持,因为停止的Token可以有效地从底层计算中移除。

此外,在不引入额外参数的情况下,可以利用模型中已有的参数来学习整个自适应机制。

02 AdaViT方法

假如让一张图像

作为输入,并通过下式进行预测,得到输出结果y:

其中,编码网络

将x的图像patch标记为token

,K为token的总数,E为每个token的嵌入维数。C是class token的后处理,而L中间Transformer则通过Self-Attention对输入进行转换。

考虑第l层的Transformer Block,它通过以下方式转换第l-1层的所有token:

其中

表示所有K个待更新的token。

ViT为各个层中的所有token使用一致的特征维度E。这使得学习以联合方式监视所有层的全局Halt机制变得很容易。

这也使得Transformer的Halt设计比CNN的Halt设计更容易,后者需要明确处理不同的架构尺寸,例如不同深度的通道数量。

为了自适应Halt tokens,这里为每个token引入一个依赖于输入的Halt Score,作为Token k在第l层的Halt概率

为:

其中H为Halt模块。与ACT类似,将每个token的Halt Score强制在[0,1]范围内,并在推理深入到更深层次时使用累加进行Halt token。

为此,在累计Halt Score超过

时进行token halt:

其中

是一个比较小的正常数,这里允许在一层之后Halt。

同时,为了进一步减轻对相邻层之间动态Halt Token的依赖,如果一旦它被Halt,则将为所有剩余深度

mask为一个标记

,主要是通过以下方式:

(i)  将token值归零

(ii)阻止其对其他token的注意,屏蔽其对

的影响。

这里定义

来强制所有Token在最后一层Halt。

Token mask使训练的计算成本与原始ViT的训练成本相似。然而,在推理时从计算中删除Halt Token以获得的实际加速。

通过在MLP层中分配单个神经元来H合并到现有的ViT Block中。因此,不需要引入任何额外的可学习参数。

更具体地说,作者观察到每个token的嵌入维数E有足够的容量来适应自适应Halt学习,使得Halt score计算为:

β 和 γ 是在应用非线性之前调整嵌入的平移和缩放参数。注意,这两个标量是所有token在所有层中共享的。

这里仅仅使用嵌入维数E中的一个项进行Halt计算。从经验上看,观察到e=0的简单选择表现良好,而不同的指标并不会改变原来的表现。

通过实验观察到Halt机制在没有引入额外的参数或子网络的情况下效果超过2个标量参数β和γ所带来的效果。

为了进一步跟踪各层Halt概率,每个token计算余数如下:

随后形成一个Halt概率如下:

给定h和r的范围,每个token在每一层的Halt概率总是限制为

建议早期Halt的整体损失是通过辅助变量r (reminder)表示的:

对每个token的

进行平均。ViT使用一种特殊的class token 

来产生分类预测

这个token类似于其他输入token,在所有层中都进行更新。并通过采用mean-field公式将输出token生成为

,并将相关的任务损失表示为:

其中

表示思考损失。算法1描述了整个计算流程,图2描述了用于视觉解释的相关Halt机制。

在这个阶段,目标函数鼓励在不同深度下考虑不同token时进行精度-效率权衡,从而实现自适应控制。

图2 AdaViT案例

式10中的一个关键因素是

,它平衡了目标应用程序的Halt强度和网络性能。

更大的

值带来更大的惩罚,因此学会了更早地Halt Token。尽管在减少计算方面有效果。

但之前在自适应计算方面的工作发现,训练对

的选择很敏感,其值可能不能提供精确-效率权衡的精细控制。

在ViT中也观察到了类似的现象。为了解决上述问题,在

正则化之前引入了一个分布,使得token在目标深度能够均匀地被Halt。

在这种情况下,对于无限数量的输入图像,期望token的深度在分布先验中变化。相似的先验分布最近被证明是稳定收敛在随机思考。

为此,定义一个Halt Score分布:

在网络的每一层上为所有token计算的平均的Halt Score。

并使用这个平均值作为一个估计将Halt概率分布在各层,这里使用KL散度正则化这个分布到一个预定义的先验。形成新的分布先验正则项为:

这里KL指的是Kullback-Leibler散度,还有

表示带有指导Halt层的目标Halt Score分布。

这里用高斯分布的概率密度函数来定义以预期的Halt深度为中心

的bell-shaped分布

直观地说,这鼓励每个token的Halt Score之和触发退出条件

最终的损失函数表示为:

其中

是一个标量系数,平衡了分布的正则化和其他损失项。

算法1

03 实验

图3 AdaViT可视化结果

图3显示了在使用AdaViTT对ImageNet1K验证集进行推断时自适应控制的token深度。值得注意的是,自适应token halt为高度区分和突出的区域(通常与目标类相关)启用了更长的处理时间。

此外,对相对不相关的token及其相关计算的非常有效的halt。例如,在动物类上的方法保留了眼睛、纹理和目标对象的颜色,并对它们进行深度分析,同时使用较少的图层处理背景(例如,鸟周围的天空,海洋周围的海洋动物)。注意,即使被标记为不重要的背景token仍然积极地参与初始层的分类。

此外,自适应token可以很容易地跟踪重复的目标对象,如图3中最后一行的第一张图所示,甚至可以完全屏蔽不相关的对象(见最后一行的第二张图)。

实验结果显示,AdaViT将DeiT-S的吞吐量提高了62%,DeiT-T的吞吐量提高了38%,而在ImageNet1K上的准确率只下降了0.3%。

私信我领取目标检测与R-CNN/数据分析的应用/电商数据分析/数据分析在医疗领域的应用/NLP学员项目展示/中文NLP的介绍与实际应用/NLP系列直播课/NLP前沿模型训练营等干货学习资源。

你可能感兴趣的:(英伟达提出AdaViT:出于DeiT而又快于DeiT)