参与王子嘉 一鸣 路雪

参数少一半,效果还更好,天津大学和微软提出Transformer压缩模型

由于在自然语言处理任务中的突出表现,基于 Transformer 的预训练语言模型是 NLP 领域的研究重点。考虑到模型参数量过大,导致其训练困难,部署不方便,研究人员一直在探究压缩模型的方法。近日,天津大学联合微软亚洲研究院提出了 Transformer 的压缩方法,不仅减少了近一半的参数量,模型在语言建模和神经机器翻译任务的表现也有所提升。这一研究可帮助在一些算力资源较小的环境中部署预训练语言模型。

引言

近来,预训练语言模型在很多 NLP 任务中表现良好。特别是基于 Transformer 的预训练语言模型,它完全基于自注意机机制,在自然语言处理(NLP)各项任务中取得了突破。

然而,在这些模型中,Transformer 的核心结构——多头注意力机制限制了模型的发展。多头注意力本身带来了大量的模型,这可能使训练中出现问题,而部署模型、导入庞大数量的参数也需要较高的资源支持。因此,压缩大型神经预训练语言模型一直是 NLP 研究中的重要问题。

为了解决这一问题,基于张量分解和参数共享的思想,本文提出了多头线性注意力(Multi-linear attention)和 Block-Term Tensor Decomposition(BTD)。研究人员在语言建模任务及神经翻译任务上进行了测试,与许多语言建模方法相比,多头线性注意力机制不仅可以大大压缩模型参数数量,而且提升了模型的性能。

论文地址:https://arxiv.org/pdf/1906.09777.pdf

Transformer 的张量化

在 Transformer 中,多头注意力是一个很重要的机制,由于 Query、Key 和 Value 在训练中会进行多次线性变换,且每个头的注意力单独计算,因此产生了大量的冗余参数。为了更好地压缩多头注意力机制中的参数,目前主要有两个挑战:

  • Transformer 的自注意函数是非线性函数,难以压缩;

  • 压缩后的注意力模型难以直接集成到 Transformer 的编码器-解码器框架中。

为了解决这些问题,研究人员提出的方法结合了低秩近似和参数共享的思想,因此实现了更高的压缩比。虽然可以重建 Transformer 中的自注意力机制(缩放点积注意力),但他们并没有这么做,而是选择了分割三阶张量(即多线性注意力的输出),这样更利于提高实验准确率。

研究采用的压缩方法如图所示:

  • 在图 2(左)中,研究人员将多头注意力重建为一个单块注意力(Single-block attention),采用的 Tucker 分解是一种低秩分解方法。

  • 在图 2(右)中,为了压缩多头注意力机制中的参数,研究人员提出了一种基于 Block-Term 张量分解的多线性注意力机制。这种机制在多个块之间共享因子矩阵(参数共享)。

图 2:模型的压缩方法:左图为使用 Tucker 分解构建单块注意力。右图则构建了新的注意力机制——多头线性注意力。

压缩多头自注意力

模型压缩遇到的第一个问题是压缩多头自注意力中的参数数量。为了解决这个问题,研究人员首先证明了正交基向量可以线性地表示自注意力机制。然后,通过初始化低秩的核张量,重建新的注意力表示。为了构建多头注意力机制并压缩模型,他们使用了 Block-Term 张量分解(BTD),这是一种 CP 分解和 Tucker 分解的结合。Q、K、V 在构建每个三阶块张量的时候共享,因此可以降低许多参数。

图 2(左)展示了单块注意机制的结构。首先,Query、Key 和 Value 可以映射成三个因子矩阵 Q、K、V,它们由三组正交基向量组成。然后通过初始化一个可训练的三阶对角张量 G 来构建一个新的注意力机制(单块注意机制)。在图 2(左)中,R 是张量的秩,N 是序列的长度,d 是矩阵的维数。利用 Tucker 分解,可以计算出单块注意力的表达式:

集成多头线性注意力

为了将压缩后的单块注意力张量集成在 Transformer 中,首先,研究人员计算了每个块张量的平均值。其次,将张量分割为矩阵,然后将这些矩阵级联,作为 Transformer 中下一层的输入,这样就可以集成在 Transformer 的编码器-解码器结构中。

在图 2(右)中,为了完成多头机制并压缩多组映射参数的参数,研究人员使用一组线性映射,并共享线性映射的输出。所学习的线性投影可以将 Query、Key 和 Value 映射到由基向量组成的三个矩阵。在此基础上,利用 Block-Term 张量分解来建立多头机制。研究人员将这个模型命名为多线性注意力,可将其表示为:

这是一个压缩模型。在对 Transformer 的多头注意力进行压缩后,实现了张量化的 Transformer。多线性注意力可以被融合到 Transformer 中。

实验结果

为了检验在 Transformer 中对多头注意力所作调整的效果,研究人员在语言建模 (LM) 和神经机器翻译 (NMT) 两个任务中进行了实验。

语言建模

语言建模的任务是预测句子中下一个单词。研究采用了语言建模的标准设置——根据前一个 token 预测下一个 token。选择了小型数据集 PTB,中等数据集 WikiText-103 和大型数据集 One-Billion。在预处理中,所有单词变为小写。新行被替换为<eos>。词汇表使用的是常见的单词,未出现的单词由 [UNK] 来表示。模型的评估基于困惑度(PPL),即每个单词的平均对数似然。PPL 越低,模型越好。

实验采用了最新的开源语言建模体系结构 Transformer,并将标准的多头注意力层替换为多线性注意力层。然后,我们在 PTB、WikiText-103 和 One-Billian 单词基准数据集上测试不同的模型配置,结果如表 1 和表 2 所示。

表 1:在 One-Billion 数据集上,模型的参数数量和其困惑度分数。Core-1 表示模型使用了单核张量。而 Core-2 表示使用了两个块张量(block term tensor)。

表 2:在 PTB 和 WikiText-103 两个数据集上,模型的参数数量和其困惑度分数。「-」表示没有该模型的表现报告。「*」表示为研究人员自己实现的模型结果。

神经机器翻译

在这个任务中,研究人员在 WMT 2016 英译德数据集上对 Transformer 模型进行了训练。在实验中,使用多头线性注意力替换了每个注意层。为了评估,使用集束搜索,限定大小为 5,长度惩罚 α= 0.6。结果与 Transformer 进行了比较,如表 3 所示。*表示研究人员自己实现的结果。

表 3:模型参数数量和对应的 BLEU 分数。

理论Transformer
1
相关数据
神经机器翻译技术

2013 年,Nal Kalchbrenner 和 Phil Blunsom 提出了一种用于机器翻译的新型端到端编码器-解码器结构 [4]。该模型可以使用卷积神经网络(CNN)将给定的一段源文本编码成一个连续的向量,然后再使用循环神经网络(RNN)作为解码器将该状态向量转换成目标语言。他们的研究成果可以说是神经机器翻译(NMT)的诞生;神经机器翻译是一种使用深度学习神经网络获取自然语言之间的映射关系的方法。NMT 的非线性映射不同于线性的 SMT 模型,而且是使用了连接编码器和解码器的状态向量来描述语义的等价关系。此外,RNN 应该还能得到无限长句子背后的信息,从而解决所谓的「长距离重新排序(long distance reordering)」问题。

注意力机制技术

我们可以粗略地把神经注意机制类比成一个可以专注于输入内容的某一子集(或特征)的神经网络. 注意力机制最早是由 DeepMind 为图像分类提出的,这让「神经网络在执行预测任务时可以更多关注输入中的相关部分,更少关注不相关的部分」。当解码器生成一个用于构成目标句子的词时,源句子中仅有少部分是相关的;因此,可以应用一个基于内容的注意力机制来根据源句子动态地生成一个(加权的)语境向量(context vector), 然后网络会根据这个语境向量而不是某个固定长度的向量来预测词。

推荐文章
暂无评论
暂无评论~