DeFormer(20 ACL)

在这里插入图片描述

 DeFormer: Decomposing Pre-trained Transformers for Faster Question Answering 
 https://github.com/StonyBrookNLP/deformer

Motivation

单塔模型运行速度慢,并且内存密集,本文引入DeFormer,它在较低的层单独处理question和passages,这允许预先计算段落表示,从而大大减少运行时计算。

1.介绍

根据这个事实:

  1. 预训练模型较低的层往往侧重于local现象,如句法方面,而较高的层次侧重于global现象,如与目标任务相关的语义方面。
    2.在一个标准的基于BERT的问答模型中,当改变问题时,文本的低层表示中的差异较小。这意味着在较低的层中,来自问题的信息对于形成文本表示并不重要。

综上所述,这些都表明在Transformer的较低层只考虑局部环境,在较高层考虑全局环境,在效率方面可以以非常小的代价提供加速。因此出现了本文的DeFormer(较低层独立处理问题和上下文文本,较高层共同处理它们):
在这里插入图片描述
假设允许 n n n层模型中的前 k k k个层独立处理问题和上下文文本,并缓存第 k k k层的输出。在运行时,首先通过模型的前 k k k层处理问题,第 k k k层的文本表示从缓存中加载。这两个第 k k k层表示作为输入被馈送到第( k k k + 1)层,并且进一步的处理像在原始模型中一样通过更高层继续。

通过从原始模型中学习,可以进一步降低这种精度损失。但是原文希望Transformer的行为更像原始模型。具体来说,Transformer的上层应该生成与原始模型中相应层捕获相同类型信息的表示。为此增加了两个类似蒸馏的辅助损失,这使得解耦后的模型和原始模型之间的输出级和层级差异最小化。

2 Decomposing Transformers for Faster Inference

为了评估问题token在较低层对形成文本表示的影响,本文测量了文本表达在与不同问题配对时的变化。特别是,当与不同的问题配对时,计算平均段落表示方差。使用通过向量和它们的质心之间的余弦距离来测量方差。如下图所示:

在这里插入图片描述
在较低的层中,文本表示不像在较高的层中那样变化很大,这表明忽略较低层中问题标记的注意力可能不是一个坏主意。

2.1 DeFormer

对于句子对任务,文本 T a T_a Ta T b T_b Tb,token表示:
T a T_a Ta A A A =[ a 1 a_1 a1; a 2 a_2 a2;…; a q a_q aq]
T b T_b Tb B B B = [ b 1 b_1 b1; b 2 b_2 b2;…; b p b_p bp]
对于有 n n n层( L i L_i Li表示第 i i i层)的Transformer:

  1. cross: X X X=[ A A A; B B B], X X X l ^l l + ^+ + 1 ^1 1= L L L i _i i( X l X^l Xl)
    在这里插入图片描述

  2. DeFormer(前k层独立处理 A A A B B B,后几次联合处理):
    在这里插入图片描述

复杂度分析: O O O(( p p p+ q q q) 2 ^2 2) 到 O O O( q 2 q^2 q2+ c c c), c c c表示加载缓存的成本。

2.2 Auxiliary Supervision for DeFormer

由于DeFormer保留了大部分原始结构,因此可以用原始Transformer的预训练权重初始化这个模型,并直接在下游任务上进行微调。DeFormer在较低层的表示中丢失了一些信息。虽然上层可以学习在微调过程中对此进行补偿。但是可以进一步改进:使用原始模型行为作为额外的监督来源。

具体来说:首先用预训练的Transformer的参数初始化DeFormer的参数,并在下游任务中对其进行微调。并添加了辅助loss,使DeFormer预测与上层表示更接近完整的预训练Transformer的预测和相应的层表示。

Knowledge Distillation Loss:

我们希望DeFormer的预测分布更接近完整的预训练Transformer的预测分布。通过最小化DeFormer预测分布 P A P_A PA和完整的预训练Transformer的预测分布 P B P_B PB之间的 K K K L L L散度:
在这里插入图片描述

Layerwise Representation Similarity Loss:

我们希望DeFormer的上层表示更接近完整的预训练Transformer。通过最小化DeFormer和完整的预训练Transformer的上层的token表示之间的欧几里得距离。让 v v v i _i i j ^j j表示在全Transformer的第 i i i层中第 j j j个token,让 u u u i _i i j _j j表示相应的DeFormer表示:
对于上面 k k k + 1到 n n n中的每一层,计算层表示相似性( l l l r r r s s s)损失如下:
在这里插入图片描述
最后将知识蒸馏损失( L L L k _k k d _d d)和层表示相似性损失( L L L l _l l r _r r s _s s)与特定任务监督损失( L L L t _t t s _s s)相加,并通过超参数调整学习它们的相对重要性:
在这里插入图片描述

3 Evaluation

3.1 Datasets

预训练Transformer:BERT-uncase-base 和 large
SQuAD v1.1(QA)
RACE(QA)
BoolQ(QA)
MNLI(sentence pairs)
QQP(sentence pairs)

3.3 Results

下表显示了当使用九个下层和三个上层时的结果:
在这里插入图片描述

BERT、BERT-large和DeFormer-BERT-large的性能、速度和内存:
在这里插入图片描述

在这里插入图片描述

推理时间分析

BERT-base与DeFormer-BERT-base的SQuAD数据集上的推理延迟(以秒为单位),作为在批处理模式下测量的平均值。在GPU和CPU上批量大小为32,在手机上(用*)批量大小为1。
在这里插入图片描述

消融

蒸馏损失和表示相似度损失影响:
在这里插入图片描述
分离层 k k k选择的影响(SQuAD上):
base-bert:3层后F1开始下降
在这里插入图片描述
large-bert:13层后F1开始下降,并还有一段上升趋势。
在这里插入图片描述
下图显示了问题和文章在不同层的平均距离。两个模型的文章和问题的较低层表示保持相似,但较高层表示有显著差异,这支持了缺乏交叉关注在较低层比在较高层影响更小的观点:
在这里插入图片描述
加上辅助loss后平均欧式距离在高层后有明显改进。

Unity Deform是一个Unity引擎的插件,用于在游戏中实现角色或物体的形变效果。通过使用Unity Deform,开发者可以很容易地实现人物的肌肉、衣服的流动以及物体的形状变化等效果。 使用Unity Deform插件的第一步是将其导入到Unity项目中。将插件文件夹拖放到Unity Assets文件夹下,然后在Unity编辑器中刷新资源,即可在工程中看到插件的相关文件。 接下来,我们可以在Unity的场景视图中选择要应用形变效果的物体或角色。然后,通过在Inspector窗口中找到Unity Deform插件的组件来添加形变效果。该组件包括一系列参数,可以用来调整形变效果的强度、速度和范围等。 在Unity Deform插件中,有多种形变效果可以选择。例如,通过使用Skinned Deformer组件,我们可以实现角色的肌肉或脂肪的形变效果。同样地,使用Cloth Deformer组件,我们可以为角色的衣服或物体添加流动的效果。此外,还有其他形变效果,如Mesh Deformer、Bone Deformer等可以根据需求选择使用。 不仅如此,Unity Deform插件还提供了编辑器扩展工具,用于更方便地编辑和调整形变效果。通过调整编辑器中的曲线、控制点等参数,可以实时预览形变效果,并对其进行微调。 总之,Unity Deform插件是一个强大的工具,可以让开发者在Unity游戏中轻松实现形变效果。通过简单的导入和设置,我们可以为角色或物体添加各种形状变化,从而丰富游戏的视觉效果,提升游戏的沉浸感。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值