Hi!请登陆

BERT轻量化:最优参数子集Bort,大小仅为BERT-large16%

2020-11-24 36 11/24

近期,亚马逊 Alexa 团队发布了一项研究成果:研究人员对 BERT 模型进行参数选择,获得了 BERT 的最优参数子集—— Bort。

研究结果表明,Bort 大小仅为 BERT-large 的 16%,但是在 CPU 上的速度却快了 7.9 倍,在 NLU 基准测试上的性能也优于 BERT-large。

这是在 NLP 模型快速 " 膨胀 ",模型轻量化迫切需求的背景下,一次比较成功的结果。

NLP 模型大小 △图源:DistilBERT

与 ALBERT、MobileBERT 进行的模型结构优化不同,Bort 是在原本的模型架构上进行最优子集选择。

简单来说就是:「瘦身」。

那么,研究人员又是怎么给 BERT「瘦身」的呢?

接下来便让我们带大家来仔细看看。

FPTAS 助力「瘦身」

首先需要明确的是,这并不是研究人员第一次尝试给 BERT「瘦身」了。

因为 BERT 的规模大,推理速度慢,并且预处理过程复杂,所以先前已经有部分研究人员便尝试对其进行瘦身,取得了一定的成果:保持了其前身的相同性能、简化了预训练过程同时减少了推理时间。

不过,在准确性上,瘦身后的子集总是不太尽如人意——达不到原本 BERT 的性能。

而这次的研究,研究人员使用了完全多项式时间近似算法(FPTAS)进一步优化这个问题,因为该算法最近被证明:在某些条件下,能够有效地提取此类最优子集。

对此,研究人员说道:

这种条件被称为strong AB^nC propert,我们证明了 BERT 满足了这一组条件。

研究人员列举了三个指标:推理速度,参数大小和错误率,在使用 FPTAS 下,从一个高性能的 BERT 中提取一个最优子集,这便是 Bort。

在随后初步的测试中,Bort 有着不俗的表现。在 CPU 上,其执行推理的速度比 BERT-large 快了 7.9 倍。

此外,在相同的硬件上,对相同的数据集进行预训练,Bort 只花费了 288 个 GPU hours。而相比之下,BERT-large 花费了 1153 个 GPU hours,而 RoBERTa-large 则需要 25764 个 GPU hours。

「瘦身」成功!

变「瘦」了,也变强了

瘦身后,是不是就像之前类似的研究一样,能力下降了呢?这是一个非常关键的问题。

为了验证 Bort 的泛化能力,研究人员在 GLUE 和 SuperGLUE 基准以及 RACE 数据集上对 Bort 同其他模型进行了测试。

首先是在GLUE上测试:

Bort 在几乎所有任务中都取得了优异的成绩:除了 QQP 和 QNLI 之外,它的性能都比其他几个同样基于 BERT 的同类模型好得多。

值得一提的是,对于 BERT-large 而言,Bort 的性能提高了 0.3%至 31%。

其次是在SuperGLUE上的测试:

Bort 同样取得了不错的成绩,除了一项任务(ReCoRD)之外,其他所有任务上都展现了优于或等同于 BERT-large 的性能。

最后,是在 RACE 上的测试:

总的来说,Bort 获得了良好的结果,在这两项任务上的性能比 BERT-large 高出 9-10%。

对于 NLU 测试结果,研究人员总结道:

在 GLUE,SuperGLUE 和 RACE 的 NLU 基准测试上,Bort 相对于 BERT-large 在各个方面的性能都有着提升,范围从 0.3%到 31%不等。

最后,研究人员还在 Github 公布了 Bort 的代码。论文和代码地址如下,需要的读者自取哦。

论文链接:

https://arxiv.org/pdf/2010.10499.pdf

代码地址:

https://github.com/alexa/bort

相关推荐