Bert finetune和压缩的关系研究:Compressing BERT: Studying the Effects of Weight Pruning on Transfer Learning

在这里插入图片描述在这里插入图片描述

Abstract

低水平的修剪(30-40%)根本不会影响训练前的损失或转移到下游任务。中等水平的剪枝会增加训练前的损失,并防止有用的训练前信息传递给下游任务。高水平的调整还会阻止模型适应下游数据集,从而导致进一步的退化。最后,我们观察到对特定任务的BERT进行微调并不能提高其可裁剪性。我们的结论是,在训练前可以对每项任务分别进行一次修剪,而不会影响训练成绩。

1 Introduction

我们选择了“量级权重修剪”(magnitude weight Pruncing),它通过将权重移到接近0的位置来压缩模型,因为它是最细粒度和最有效的压缩方法之一,而且还有许多有趣的方法可以进行压缩。
最后,我们观察到对特定任务的BERT进行微调并不能提高其可裁剪性,也不会改变修剪的顺序。据我们所知,以前的工作并没有表明是否可以以任务通用的方式压缩BERT,保持预训练的好处,同时避免与压缩和重新训练BERT多次相关的昂贵实验。也没有显示BERT是否可以被过度删减,以便在内存/精度上进行权衡,从而将其配置到低资源设备上。
在这项工作中,我们得出结论:在不影响其普遍性的前提下,可以在分布前对bert进行剪枝,并且可以在预训练期间对某些任务进行适当的精度权衡。

2 Pruning: Compression, Regularization,Architecture Search

神经网络剪枝包括检查一个未修剪的网络,并删除某些启发式显著判别认为不必要的部分。一个人可以移除权重、神经元、层、通道、注意头等,这取决于使用了什么启发式方法。下面,我们描述三种不同的方法,我们可以通过它们来解释修剪。

Compression

剪枝神经网络减少了规范模型所需的参数数量,从而减少了存储模型所需的磁盘空间。这使得大型模型可以部署在智能手机等边缘计算设备上。剪枝还可以提高推理速度,如果整个神经元或卷积通道被修剪,这减少了GPU的使用。

Regularization

修剪一个神经网络也可以使其规则化。我们可以考虑修剪成bea形式的永久性dropout(Molchanov et al.,2017)或基于启发式的L0正则化器(Louizoset al.,2018)。通过这个镜头,剪枝降低了网络的复杂度,因此也减少了它可以表达的功能范围。L0或L1正则化与权值剪枝的主要区别在于,前者是通过对损失函数的惩罚来诱导的,而损失函数是通过随机松弛在梯度下降过程中学习到的。目前尚不清楚哪种方法更有原则或更可取。

Sparse Architecture Search

最后,我们可以将神经网络修剪看作是一种结构稀疏搜索。Liu等人(2019b)和Frankleand Carbin(2019)表明,他们可以精心地将重新初始化的修剪架构训练到与密集网络相似的性能水平。在这种情况下,随机梯度下降(SGD)诱导了网络稀疏性,而剪枝只是使稀疏性显化。这些稀疏的体系结构,加上适当的初始化,有时被称为彩票(lottery tickets)。

2.1 Magnitude Weight Pruning

在这项工作中,我们将重点放在权值修剪上,因为它是最细粒度和最有效的修剪方法之一。它还有一个竞争性标准(Han et al.,2015):如果一个权重为零,那么它的输入将被有效忽略,这意味着权重可以被修剪。
量级权重修剪本身就是一个简单的过程:

  1. 选择要修剪的权重的目标百分比,例如50%。
  2. 计算一个阈值,使50%的权重值在这个阈值之下。
  3. 删除这些权重。
  4. 继续训练网络以恢复丢失的准确性。
  5. 选择返回到步骤1并增加被修剪的权重的百分比。

计算阈值和剪枝可以对所有网络参数整体进行(全局剪枝),也可以对每个权重矩阵单独进行(矩阵局部剪枝)。两种方法都将修剪到相同的稀疏度,但在全局修剪中,稀疏度可能在权重矩阵上不均匀分布。我们使用矩阵局部修剪,因为它在社区中更受欢迎。5关于其他修剪技术的信息,我们推荐 Galeet al. (2019) and Liu et al. (2019b)。

3 Experimental Setup

3.1 Implementing BERT Pruning

BERT-Base由12个编码层组成,每个编码层包含6个prunable矩阵:4个用于多头自注意,2个用于输出前馈网络。
回想一下self-attention第一个映射层通过线性投影将层输入投影到键、查询和值嵌入层中。虽然每个注意力头都有一个单独的键、查询和值投影矩阵,但实现通常会堆叠来自每个注意力头的矩阵,从而只产生3个参数矩阵。一个用于键投影,一个用于值投影,还有一个用于查询投影。我们分别对这些矩阵进行修剪,计算出每个矩阵的阈值。我们还修剪了线性输出投影,它将每个注意力头的输出合并成单个嵌入。我们用同样的方法修剪单词嵌入,我们修剪前向网络和自我注意参数。理由是相似的:如果一个单词嵌入值接近于零,我们可以假设它是零,然后将其余的存储在一个稀疏矩阵中。这很有用,因为token / subword嵌入往往占自然语言模型内存的很大一部分。特别是对于BERT-Base,嵌入部分占模型内存的21%

BERT-Base中几乎每个矩阵的权重都近似地呈正态分布,均值为0,方差在0.03和0.05之间(表A)。这种相似性可能意味着,全局剪枝的执行与矩阵-局部剪枝相似。
我们可以为整个自我注意层或每个注意头分别计算一个阈值。类似于全局修剪和矩阵局部修剪,目前还不清楚哪一个更适合。
有趣的是,修剪单词嵌入比修剪其他矩阵更容易解释。图8显示了嵌入量的特征图,图中显示短子词(sub-word)比长子词更容易被删减,并且在某些维度上几乎从未在任何子词中被删减。

3.3 Disentangling Complexity Restrictionand Information Deletion

剪枝包括两个步骤:通过将权重设置为0来删除存储在权重中的信息,然后通过防止该权重在进一步训练过程中发生变化来调整模型。为了解决这两个影响(模型复杂度限制和信息删除),我们用相同的预训练设置重复了第3.2节中的实验,但是我们没有修剪,而是将权重简化为0,并允许它们在下游训练期间变化。这会删除与权重相关的预训练信息,但不会阻止模型在下游训练期间保持权重为零来拟合下游数据集。

3.4 Pruning After Downstream Fine-tuning

我们可能认为,在进行下游微调之后,BERT将更易于压缩。直观地说,下游任务所需的信息是训练前所学信息的子集;有些任务需要更多的语义信息而不是句法信息,反之亦然。我们应该能够丢弃“额外”信息,只保留我们需要的,比如, parsing
对于量权剪枝,我们可以期望下游训练能改变参数矩阵中权重的分布。这反过来又改变了这些权重的绝对值的排序顺序,从而改变了我们修剪它们的顺序。这个新的修剪顺序,假设,将不会降低我们的具体下游任务。

5 Downstream Fine-tuning Does Not Improve Prunability

由于训练前的信息删除在过度剪枝时对性能下降起主要作用,我们可以预期下游微调通过使重要权重更显著(增加它们的数量)来提高可剪枝性。然而,图1显示,尽管实现了类似的训练损失,但在下游微调之后构建的模型并不能通过预训练期间修剪的模型的开发精度。图3显示了微调更改,其中权重被修剪了不到6%。为什么微调没有改变哪些权重被删除了很多?从表2可以看出,权值的放大率排序顺序基本保持不变,按照排序顺序,权值平均距离开始位置移动0-4%。我们还可以看到大小权重比较小的权重更稳定(图6)。我们的实验表明,在修剪前对下游数据进行训练是一种不利于提高可修剪性的工具。即使如此,我们也可以考虑简单地对下游任务进行更长时间的培训,这会增加修剪权重的差异。然而,图4显示,即使经过一段时间的下游微调,权重也会迅速以新的排序顺序重新稳定,这意味着较长的下游训练对权重的删减只会产生边际效应。实际上,图3显示了为60%修剪选择的权重快速稳定,并且在修剪前进行更多的训练并不能提高评估精度。
在这里插入图片描述
finetune不会大幅度改变要剪枝的参数。

6 Related Work

第5节表明,下游的微调不会增加可剪枝性。然而,有人提出了几种替代的压缩方法来处理非特定任务的信息。Li和Eisner(2019)利用信息瓶颈来丢弃非句法信息。Tang等人。(2019)使用Bert作为知识提炼教师,将相关信息压缩到更小的Bi LSTM中,而Kuncoro等人。(2019)采用了类似的蒸馏方法。虽然微调并不能提高可裁剪性,但任务特定的知识可以通过其他方法从BERT中提取出来。

Attention Head Pruning

以前通过修剪完整的注意力头,在transformer模型中显示出了丰富性。Michel等人。(2019)表明,在对MNLI进行微调后,在不影响测试精度的情况下,可以从BERT中剪除多达40%的注意力头。在对单个下游任务进行微调后,它们在bert中显示出冗余;相比之下,我们的工作强调压缩和迁移学习在许多任务中的相互作用,在微调前后进行修剪。此外,量值权重剪枝还允许我们对BERT中的前馈网络和子词嵌入进行额外的修剪(不仅仅是自我注意),这占BERT总内存使用量的72%。
我们认为,注意头修剪和权重修剪可以消除bert的不同冗余。图4表明,对于整个模型,权重剪枝不会比剪枝率更大地剪除任何特定的注意头。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值