APP下载

面向神经机器翻译的模型存储压缩方法分析

2019-02-25姜雨帆李恒雨

中文信息学报 2019年1期
关键词:对模型剪枝区间

林 野,姜雨帆,肖 桐,李恒雨

(东北大学 自然语言处理实验室,辽宁 沈阳 110819)

0 引言

当前深层神经网络在很多任务上都取得了巨大的进步[1-3],但随着网络规模的增大,网络中的参数增多,网络变得更冗余和繁重[4],这种冗余的网络不仅会对存储资源造成浪费,还会导致严重的过参数化和过拟合问题[5]。相比传统的统计机器翻译,神经机器翻译在翻译质量上有了显著提升;并占用更少的存储空间,但由于神经网络仍然规模巨大,受网络计算复杂度以及有限内存、有限存储资源、有限能源的限制,高性能的基于深层神经网络的神经机器翻译系统只能在有限的平台下使用,无法移植到资源和能源都有限的小型嵌入式系统当中[6],如何有效减小机器翻译系统模型存储便成了一个亟待解决的问题。

针对此问题,研究人员引入模型压缩方法来进行模型的存储压缩,在降低模型存储需求的同时保证模型的性能不受损害。模型压缩的目标分为两种:(1)减少运行时刻内存/显存消耗,指通常所说的运行时刻模型压缩; (2)减少模型在磁盘上的存储消耗(但是运行内存并不减小),这个方法可以把模型变得更小,有利于模型在设备间的传输。更小存储的模型有很多优点,比如,小的存储空间可以使得很多手机端机器翻译应用使用更小的离线下载包而提升用户体验,减小带宽并提高并行性,本文实验针对第二种目的。

模型压缩方法总体可以分为两大类:第一类方法修改模型结构,减小模型存储大小[7-9],设计更精细的网络结构;第二类方法不改变模型结构,在现有模型基础上减少模型参数以减小模型存储。本文在第二类方法上进行研究。研究人员在对第二类模型压缩方法的研究中提出了很多可行方法,如剪枝[10]、量化[5]、低精度[11]、哈夫曼变长编码[12]、知识精炼[13]等。本文针对现有剪枝、量化和低精度三种方法,基于Transformer和GNMT[14]双层RNN基线系统在NIST12数据集上进行实验,对比分析以上三种模型压缩方法在两种模型上可达到的不同压缩效果及其原因,本文中实验仅针对模型存储空间进行压缩,并未对模型运行内存进行压缩。

实验中,为了分析使用不同模型对每种模型压缩方法效果的影响,我们选取了RNN和Transformer两个基线系统。在最后的实验结果中,对于RNN和Transformer,单独使用剪枝方法可分别剪掉40%和15%模型参数而保持模型性能不变;单独使用量化方法,在保证模型性能的同时可以将RNN最多由32-bit浮点数压缩至4-bit,可以将Transformer的参数最多由32-bit浮点数压缩至6-bit;单独使用半精度方法可将两套模型均压缩至原有大小的50%而没有任何性能损失。由于模型在解码过程中仅需要一部分参数,对其余模型参数我们不进行存储,在仅存储解码相关参数的基础上,使用剪枝、量化、低精度三种方法的组合方法,可在不损失原有模型精度的前提下在Transformer和RNN模型上达到5.8×和11.7×的压缩率。

1 模型压缩方法

本节对本文实验中所使用的模型压缩方法进行具体介绍。模型压缩方法包括剪枝、量化、低精度中的半精度方法。

1.1 剪枝

模型裁剪的方法最早由Cun等人提出[10],是目前模型压缩中使用最广泛的方法,其主要思想是通过减少参数空间中的冗余来缩小模型规模。近年来,在基于卷积神经网络的计算机视觉领域任务中,模型裁剪方法已经取得了不小的成果,有些研究工作甚至可以在完全不损失模型性能的前提下大幅裁剪模型的参数[15]。

我们以RNN模型为例观察模型的参数分布,从图1(a)可以看出,神经网络中绝大部分参数分布在0点附近,在整个参数分布中,裁剪掉越靠近0的参数往往对模型造成的破坏就越小。在实验中,我们可以硬性设置一个阈值,裁剪掉绝对值低于这个阈值的权值或者整个神经元,也可以裁剪掉所有权值绝对值最小的前x%。总体来说,剪枝的整个过程就是一个将稠密的网络变成稀疏网络的过程。

图1 模型参数分布图

本文中实验中采取了Class-blind和Class-uniform两种剪枝策略[16]。Class-blind方法是将模型中所有参数按绝对值大小进行排序,裁剪掉绝对值最小的前x%参数,这种方法可以保证裁剪掉的模型参数值一定最接近0,缺点是导致模型中每层的剪枝比例不均匀。Class-uniform方法首先需对模型中参数分层,在每层中剪掉绝对值最小的前x%参数来保证每层的剪枝比例均匀,缺点是若某一层中参数绝对值普遍偏大或这一层中大部分参数对模型来说都很重要,硬性的分层剪枝会对模型精度造成更大损失。

按Class-blind和Class-uniform方法进行剪枝后模型参数分布如图1(b)和(c)所示,由图中可以看出按Class-blind方法比Class-uniform方法所剪参数分布更集中,Class-uniform方法所剪参数分布范围更广,体现在图中就是图1(b)和图1(c)中间无参数部分宽度相比,图1(c)中间空白部分比图1(b)更宽且更有层次。

1.2 量化

量化方法最早由Oliver等人提出[17],Denil等人的工作将量化方法用于神经网络模型的压缩并证实了神经网络当中的过参数化问题[5]。在神经网络当中,参数都是用32-bit浮点数表示,量化方法实际上就是通过牺牲参数精度的方式减少每个模型参数存储所需要的比特位数。

在进行量化实验时,我们首先需选定量化区间,量化区间是执行量化操作的区域,对于量化区间外的值仍以原值保存,由于神经网络参数总体呈正态分布,选定量化区间以0为中心。以1--bit量化为例,量化过程如图2所示,量化过程即用索引值代替量化区间内原值的过程,当进行n-bit量化时,将选定量化区间分为2n个等长区间,每个区间依次由索引0至2n-1来表示。进行解码时,需将索引值恢复为原区间内的值,本文实验中我们分别将参数值恢复为原区间的左值、中值和右值,并进行对比分析。

经过量化,模型以一个更低精度的形式来保存,使其成功地嵌入到小型设备上成为可能[18]。量化过程中,可以将网络的参数量化至固定的4~12-bit[19],更极端的情况下也可以用1~2-bit来表示模型参数[20]。

图2 量化过程图

1.3 低精度

神经网络中的权值都用浮点数表示,单精度浮点数在计算机中用32-bit表示,其中符号位1-bit,指数位8-bit,尾数位23-bit。在进行模型的训练时,保持权值的高精度可以确保得到更优的模型,而当模型训练完之后,权值精度适度降低一般对模型性能影响不大。低精度与量化方法思想相近,都是通过改变模型参数表示的形式来达到压缩存储的目的,在低精度方法中,通过将浮点数的尾数部分去掉来节省模型参数存储空间。

本文采取低精度中的半精度方法进行实验,在半精度方法中把32-bit单精度浮点数裁剪成16-bit半精度浮点数来进行参数的压缩存储。具体实验时可分为压缩和解压两个步骤,压缩步骤中将原有的32-bit直接舍去尾数位中的16-bit,在解压缩步骤中把舍去的16-bit用0补全恢复为32-bit,压缩和解压过程如图3所示。

图3 半精度方法参数压缩和解压过程

2 基线系统

本文基于Tensorflow开源框架,搭建Transformer和GNMT双层RNN两套基线系统。主要对比分析剪枝、量化和半精度三种方法在Transformer和RNN两种模型上不同的实验效果及出现这些实验现象的原因。

本文中使用Transformer[21]作为实验基线之一。Transformer由Google在2017年提出,此模型摒弃了传统的循环神经网络结构和卷积神经网络结构,是一个完全基于自注意机制的网络结构,模型的优点是提高了模型的可并行程度,减少了模型的训练代价。

Transformer编码器由6个相同的层堆叠而成,每层都有两个子层,第一个子层是多头自注意力机制,第二个子层是一个简单的,对位置敏感的前馈神经网络。解码器同样由6个相同的层堆叠而成,其中每层有三个子层,其中有两个子层和编码器相同,第三个子层是负责处理编码器输出的多头注意力机制。为了减小训练压力并加速模型收敛,在编码器和解码器中每一个子层后都会有残差连接和层正则化操作。

Transformer使用的多头注意力机制(mulit-head attention)的基本单元是按比例的点积注意力(scaled dot-product attention),这种注意力的输入分为K、Q、V,计算过程如下所示

(1)

由于在点积的注意力机制上我们进行了按比例缩放,缩放后每个参数都被映射至更小的值,使模型参数范围压缩至更小的区间内,因此Transformer相较于传统的RNN参数分布范围更小。

表1 Class-blind和Class-uniform剪枝策略对Transformer和RNN的性能影响

2.1 实验设置

本文实验主要在中英翻译任务上进行,评价指标采用Moses公开计算BLEU的脚本multi-bleu.pl,对于Transformer和RNN,实验数据均采用NIST12 OpenMT[注]LDC2000T46,LDC2000T47,LDC2000T50,LDC2003E14,LDC2005T10, LDC2002E18,LDC2007T09,LDC2004T08作为训练集,其中包括39.42MB的中文词和44.92MB的英文词,用NIST2006 (MT06)作校验集和测试集,所有中文句子都采取NiuTrans[22]提供的工具进行分词,长度超过50词的句子都被过滤掉,Transformer和RNN中均使用词频最高的30KB大小的词表,所有词表外的词都用UNK来代替。

模型结构方面,在Transformer中,编码端和解码端各有六层,RNN编码端和解码端各为两层。模型参数方面,Transformer基线系统中训练参数共90MB,训练参数占存储空间大小362MB,RNN训练参数共有134MB,占存储空间大小537MB。

2.2 实现细节

对于Transformer,本工作采用tensor2tensor的1.0.14版本,模型编码端和解码端各有六层,隐藏层维度大小为512,batch大小为4 096,num_heads为8,最大句长为50,残差dropout为0.1,初始学习率设置为0.001,优化器采用Adam,训练15轮,没有采用BPE、Ensemble和Finetune。

对于RNN基线系统,本工作采用GNMT的RNN,模型编码端和解码端各有两层且编码器为单向结构,隐藏层维度大小为1 024,batch大小为128,最大句子长度设为50,dropout为0.2,初始学习率为1.0,优化器采用SGD(stochastic gradient descent),训练步数为150k,没有采用BPE、Ensemble和Finetune。

3 对比分析

3.1 剪枝方法对比分析

本部分实验基于Transformer和RNN两套系统,运用Class-blind和Class-uniform方法进行模型剪枝,主要对比分析两种剪枝方法在两种模型上不同的剪枝效果。在不损失模型性能的前提下,Class-blind方法在Transformer和RNN上分别可以剪枝15%和40%;Class-uniform方法在Transformer和RNN上分别可以剪枝15%和25%。剪枝方法在RNN及Transformer上的实验结果如表1所示,其中剪枝比例为0即代表基线,剪枝过程中模型性能整体变化趋势如图4所示。

图4 Transformer和RNN在Class-blind和Class-uniform剪枝方法下的性能对比

3.1.1 相同剪枝方法在不同模型上的效果分析

此部分主要介绍在相同的剪枝方法下,随着剪枝比例的增大,Transformer和RNN的性能变化趋势。本文中采取Class-blind和Class-uniform两种剪枝策略,具体方法见1.1节。值得注意的是,在进行Class-uniform剪枝实验时,由于需要分层进行剪枝,我们首先将神经网络模型按结构分成五部分,Source embedding、Target embedding、Encoder、Decoder和Softmax,在分层实验时,我们在Encoder和Decoder中进一步按照不同模型结构进行分层,其中Transformer中有6层,RNN中有2层。

从表1实验结果可以看出,随着剪枝比例的增大,BLEU值趋向于变低,剪枝比例越大,BLEU值下降得越快,这与我们的预期相符,被剪枝参数数量越多,必然对模型造成的破坏越大,BLEU值就会越快地降低。

从图4实验结果看出,无论采取Class-blind还是Class-uniform方法,RNN在保持模型精度的条件下剪枝程度都大于Transformer,这说明在剪枝比例相同的情况下,Transformer的性能损失明显大于RNN。从总体剪枝实验情况来看,RNN最高可以剪到40%性能不掉,而Transformer最高只能剪到15%左右。这也从侧面说明了Transformer模型中相较于RNN中冗余参数更少。

造成以上实验现象的原因与RNN和Transformer的参数分布特点有关。虽然二者参数均服从正态分布,但Transformer较RNN参数分布得更集中,导致其参数矩阵的方差更大,因此其对于0点附近的值不敏感,而剪枝时我们剪掉的是0附近的值,因此对于RNN可以剪掉较大比例的参数值而不对模型性能产生影响。Transformer则与RNN相反,其参数分布集中,因此其对于0附近的值比较敏感,导致剪枝对Transformer的影响更大。

由此可见,剪枝方法更适用于压缩方差较大、分布离散的模型。

3.1.2 不同剪枝方法在相同模型中的效果分析

此部分主要介绍Cass-blind和Class-uniform两种剪枝策略分别在Transformer和RNN上进行实验的实验现象以及出现这些现象的原因,剪枝过程中模型性能整体变化趋势如图4所示,剪枝比例小于10%时,两种模型的BLEU值均没有降低,图中两套模型的起始点即为其各自的基线BLEU值。

对于RNN来说,随着剪枝比例的增大,在剪枝比例小于50%时,两种剪枝策略在同一剪枝比例所达到的模型性能相同,当剪枝比例大于50%时,按Class-blind策略进行剪枝的性能明显优于Class-uniform,Class-blind策略剪枝达到性能更接近于基线系统,原因在于RNN在每层之间的参数分布范围差异较大,而且RNN中参数值普遍偏大,运用Class-blind 方法进行剪枝可以保证所剪参数一定是最接近于0,而对于Class-uniform方法,按比例硬性剪掉每层中参数则会导致剪掉RNN中绝对值较大的参数,从而对模型的性能产生影响。

对于Transformer模型来说,随着剪枝比例的增大,当剪枝比例小于15%至20%时,两种方法在性能上无明显差异,当剪枝比例大于这一比例时,按Class-uniform策略进行剪枝的模型性能明显优于Class-blind方法,这与在RNN上实验现象相反,主要是因为Transformer每层间参数分布差异较小,按Class-uniform策略进行剪枝可以发挥该方法的优势,即Class-uniform方法可以使模型的剪枝更加均匀,并在每个分类中都剪掉更多对于模型冗余的参数。

总体来说,对于RNN,由于RNN参数范围偏大且各层间参数分布不均匀,因此用Class-blind方法比Class-uniform剪枝效果好。对于Transformer,由于模型参数范围小且各层间参数分布较均匀,因此在其上用Class-uniform来剪枝效果更好。

3.1.3 相同剪枝方法在相同模型上不同层次效果分析

在进一步分析模型层次对剪枝效果的影响的时候,我们在Transformer和RNN上分别进行实验,实验中统一采取Class-blind方法,在其余层不变的情况下对每一层进行单独剪枝,我们对编码器和解码器中的每一层都单独进行了实验。由于选取的两套基线系统中Transformer层数较多,我们以其为例分析模型层次加深对剪枝效果的影响以得到更有合理性的实验结果,在保持模型性能的前提下各层可以进行剪枝的最大比例如图5所示。

图5 Transformer分层剪枝效果图

从实验结果看出,随着模型层次的加深,在保持模型性能的前提下剪枝比例逐渐减小,原因在于神经网络层与层之间是递进关系,模型更高层中包含前面所有层中信息,也就是说越高层中包含重要的信息越多,因此越高的层次趋向于对剪枝更敏感。

在图5实验结果中发现,对剪枝越敏感的层趋向于有更大的权值,比如此模型中decoder layer 1参数分布范围较大,对剪枝比较敏感。也就是说,在剪枝相同比例的情况下,对参数越大的层进行剪枝对模型造成的损失越大。在实验中发现,模型中每一层的参数大小具有一定随机性,因此具体每一层中剪枝比例缺乏普适性。

在Transformer上进行分层剪枝实验时,若将所有层中保持模型性能的最大比例相结合进行组合剪枝实验,剪枝比例如图5所示,当基线系统BLEU值为41.76时组合剪枝可以达到41.65的BLEU值。当我们在RNN模型上用相同方法进行尝试性实验时,将每层中可以达到基线性能的最大剪枝比例相结合后模型性能却很差,在基线BLEU值为39.55时组合剪枝BLEU值仅达到39.07。产生以上实验现象的一部分原因是由于RNN模型中每层剪枝的幅度比Transformer大,而神经网络层与层之间都联系十分紧密,改变其中任何一层的参数都可能对其他层产生不可预估的影响。另一部分原因是由于RNN模型每层间参数分布没有Transformer分布均匀,对单独层进行剪枝会对其他层产生更大的影响。

3.2 量化方法对比分析

实验中将Transformer和RNN原始训练系统作为基线,运用n-bit量化方法对模型进行压缩,由于仅压缩了存储空间,解码时需将参数恢复为32-bit浮点数。在量化的恢复阶段,我们分别将参数值恢复为区间中左值、中值和右值和进行实验,在进行8-bit量化过程中,两种模型均可在保持模型性能不变的前提下,取到包含全部模型参数99%以上的量化区间。

3.2.1 量化时取值方式对模型性能的影响分析

为了验证量化恢复时取值方式对模型性能的影响,我们在Transformer上进行实验,对于同一量化区间(包含全部参数范围的99.1%),在量化的恢复阶段我们分别将参数值恢复至量化区间中左值、中值和右值,实验结果如图6所示。

图6 Transformer量化时取值方法对模型性能的影响

从图6中可以看出,随着n-bit量化中n的减小,开始时取左值、中值和右值模型性能无明显差异,但当n逐渐减小直至小于5时,取左值和右值对模型性能破坏极大,当n=4或更小时,BLEU值几乎降为0。也就是说随着n的减小,量化恢复时取中值的优势越来越明显,取中值时模型的性能会明显优于取左值和右值。

这也验证了我们的一个想法,一个区间的中值会接近区间中的大部分参数,因此将量化后参数恢复为32-bit时用中值来代替一个区间的参数会更加合理。

3.2.2 Transformer和RNN对量化方法的敏感程度分析

为了验证Transformer和RNN两套模型对量化方法的敏感程度,我们在8-bit量化的基础上对模型进行了更精细的n-bit量化实验,这部分的所有实验在参数恢复阶段都将参数恢复至区间中值,实验结果如图7和表2所示。

图7 Transformer和RNN最大量化区间趋势图

图7显示内容为进行n-bit量化时在保证模型性能不变的情况下所能取到的最大范围的量化区间。从图中可以看出,随着n-bit量化实验过程中n的减小,所取量化区间也逐渐减小,这与我们期望相符。n越小,可以取到索引值的总数2n就越少,量化区间分成等长区间的份数越小,对模型造成的破坏就越大。因此随着n的减小,本文倾向于选择更小范围的量化区间。从图中还可以看出Transformer相较于RNN对量化更敏感,量化为相同的比特数时Transformer的量化区间更小。产生以上实验现象的原因与Transformer模型结构有关,由于Transformer有一个参数矩阵缩放过程,模型参数被缩小到一定范围内,导致模型参数变化对Transformer造成破坏更大。

单独使用n-bit量化方式时,随着n的减小,模型压缩率变化趋势如图8所示。模型压缩率为

(2)

图8 Transformer和RNN n-bit量化模型压缩率变化

其中rquan代表n-bit量化后模型压缩率,xquan代表量化区间占总参数区间的百分比,n代表总模型参数数量,b代表每个模型参数原本需要用来表示的比特位数,bindex代表用来表示模型参数索引需要的比特位数,bmark代表用来区分是否在量化区间外的标志的比特位数。

从图8可以看出,随着n-bit量化中n的减小,模型压缩率均呈现出先增大后减小的趋势。产生以上实验现象的原因主要是由于在模型达到最大压缩程度前,随着n的减小,量化区间内的参数值被极大程度压缩,量化区间外的值所占比例比较小,模型压缩率增大;在模型达到最大压缩程度后,随着n的减小,虽然量化区间内的参数值被压缩,但量化区间缩小后量化外区间参数所占范围增大,整体模型压缩程度减小。

3.3 半精度方法对比分析

在实验中我们发现,无论对于Transformer还是RNN模型,用半精度方法进行全范围参数的压缩均不会对其造成性能上的损失,这也向我们证明了神经网络中存在冗余。由于在半精度方法中通过把32-bit单精度浮点数裁剪成16-bit半精度浮点数来进行参数的压缩存储,因此用半精度方法可以将模型压缩至原有大小的50%而不对模型性能产生影响。

而半精度模型压缩方法在以上两个模型中的使用效果也向我们证明,在神经网络中我们并没有必要使用32-bit单精度浮点数来保存参数,尾数位的后16位对模型性能没有任何意义,用16-bit或更少的比特数来保存参数对神经网络模型就已经足够,多余的比特位会导致网络的冗余,并且对存储资源造成十分不必要的浪费。

基于以上实验结果,本文的下一步工作计划就是尝试使用更低精度的参数,如整数,进行模型的推断和训练,不仅仅可以减少模型的存储空间,还可以节省模型运行内存及更多的计算资源。

3.4 总体压缩程度分析

进行剪枝、量化、半精度三种方法的组合实验的实验结果如表2所示。三种模型压缩方法的参数操作范围为: total=半精度>量化>剪枝,其中total代表全部参数。

表2 模型压缩组合实验的实验结果

对于RNN,在组合实验中,我们采取40%剪枝,4-bit量化(量化区间为98%,其中98%包括剪枝的40%),全范围的半精度压缩,最终能达到11.7×的压缩率;对于Transformer,我们采取15%范围剪枝,6-bit量化(量化区间为98%,98%包括剪枝的15%),全范围的半精度压缩,最终能达到5.8×的压缩率。可以看出,RNN的可压缩程度明显大于Transformer,二者在总体压缩程度上的区别也可反映出Transformer相比于RNN冗余较小。

从表2实验结果可以看出,在剪枝、量化、半精度三种模型压缩方法组合实验过程中,量化方法对整个模型压缩率的影响最大。与剪枝方法相比,量化方法操作的参数区间范围大,与半精度方法相比,量化将参数存储压缩的程度更大,因此在实验过程中量化方法占主要优势,经过量化后,模型被极大地压缩。

3.5 更深层网络分析

为了进一步验证Transformer和RNN之间压缩程度的差异,本文在更深层网络(4层和8层)的GNMT RNN模型上进行实验,在两个更深层RNN上得到的最大压缩率如表3所示。

进行更深层RNN网络的实验进一步证明了我们之前实验结果的普适性,RNN可压缩程度比Transformer更大,从侧面反映出RNN中冗余参数较多。

表3 更深层网络实验结果

4 下一步工作

本文,实验对神经网络模型的压缩进一步证明了神经网络中模型参数的冗余特性。针对该特性,我们在未来工作中会考虑进行神经网络的整数或更低精度的训练和推断,将模型压缩与模型加速相结合,在减小模型存储空间的同时也达到模型加速的目的。

5 结论

本文主要针对如何降低模型参数存储进行实验,对比不同压缩方法在Transformer和RNN上的模型压缩效果。

对于剪枝方法,Transformer这种参数分布范围较小且每层间参数分布较均匀的模型,进行分层剪枝效果更好,RNN这种模型参数分布范围广且每层间参数分布相差较大的模型运用整体剪枝效果更好,越深的层次趋向于对剪枝越敏感。

对于量化方法,参数分布集中的Transformer模型比参数分布离散的RNN模型更敏感,在进行量化时应注意选择合理的量化区间和n值。

对于半精度方法,无论在Transformer还是RNN模型上,半精度方法均可在全参数范围内进行模型的压缩而不会对模型造成任何损失。

在进行剪枝、量化、半精度三种模型压缩方法的组合实验中我们发现,Transformer比RNN可压缩程度小,从侧面反映出Transformer相对于RNN冗余参数较少。

猜你喜欢

对模型剪枝区间
你学会“区间测速”了吗
人到晚年宜“剪枝”
基于YOLOv4-Tiny模型剪枝算法
基于激活-熵的分层迭代剪枝策略的CNN模型压缩
全球经济将继续处于低速增长区间
整体思想在初中数学中的应用
顶风扎点
高效可验证的隐私保护推荐系统
剪枝
区间对象族的可镇定性分析