NLP模型压缩方法综述

字幕组双语原文:NLP 模型压缩方法综述

近年来,基于Transformer的语言模型在神经机器翻译,自然语言推理,and 其他一揽子自然语言理解任务中取得了实质性进展。 采用不同语言建模损失进行自监督的预训练,意味着模型可以通过大规模语料来提高许多下游任务的性能。 然而,海量参数和长计算轨迹意味着BERT及其变体在生产部署中困难重重。 值得庆幸的是,在过去2年里,我们看到了各种各样的技术的发展,它们缓解了这些苦痛并加速了模型的预测。具体来说,本文将重点介绍下面这套模型预训练后可以打的组合拳,这能降低模型预测的计算成本:

网络层合并与计算图优化

我觉得渐进式模块替换方法十分诱人的部分原因是,它打开了用实验方法提高其他模型吞吐量的大门, 而以前模型通常需要从零开始重新训练。 对于独立研究员和小公司来说,从头开始重新训练Transformer模型的成本通常是难以承受的,所以哪些提出了更高效模型的好点子但没发布预训练模型的论文就很难复现。

虽然所有这些方法本身都很意思(结构化层丢弃在实际应用中表现出巨大的前景),但我对那些可以在部署应用并仍然提升性能的方法更感兴趣。这类方法通常基于”模型中只有一部分是解决具体任务所必需的”这一事实。

通过门控在精调过程中剪枝

NVIDIA已经发布了一套与浮点精度缩减相关的通用基准——在实践中,这种方法可以实现高达3倍的加速。

在Squad 2.0上剪枝模型的注意力头和前馈激活的鲁棒性。

他也常常被问到有关阅读的问题。阅读往往有快速阅读和细读等几种类型,由于时间、地点等因素的限制,人们会迅速阅读。纸质书在手,则可以精确查询感兴趣的内容,反复阅读。

之所以出书,马未都说,图书具有视频和音频所不可替代的优势,因为呈现在书里的文字更严谨,同时书里还配有大量插图,读者在阅读文字的同时,可以获得更加直观的认识。

相异模型架构的知识蒸馏

这图要是做成T-shirt的话我必穿来游街。

需要注意的是,当前柬埔寨机场中转区无法提供核酸、血清IgM抗体检测服务,未持有效柬埔寨签证的中国公民不能入境柬埔寨做检测,且机场中转区内不具备生活条件。如出发地已实施“双阴性”证明登机措施,赴柬转机难度将大幅提升,滞留风险极高。请中国、外籍乘客尽量避免赴柬埔寨转机赴华。因转机产生的滞留、遣返等后果由个人承担。

忒修斯BERT的GLUE跑分结果

核酸检测应于乘客登机前2天内在中国驻柬埔寨使馆认可的检测机构完成。

例如,中国驻菲律宾使领馆已通知将于11月7日起实施“双阴性”证明登机措施,则自菲律宾当地时间11月7日0时起从菲律宾出发的赴柬中转乘客,均需按新规在柬接受第二次检测。11月7日0时前从菲律宾出发的中转乘客可继续按现行规定凭核酸码或健康状况声明书在柬转机。

《国宝100》新书首发的时候,他在抖音开直播,“现在这种带有自媒体特色的,它是适应科技的发展。其实它就是个工具,至于你用什么方式来传播你的文化,每个时代都有每个时代的不同,相同的是文化。”

(六)以上政策涉及所有乘客,包括婴儿、儿童。

知识蒸馏有助于恢复剪枝过程中丢失的信息。 

较不精确的数值表示法能够从两个方面加速计算:

论文作者用线性学习率进行了实验,他发现随着时间的推移,线性增加模块的替换率比恒定的替换率效果要好。

在前面讨论的”Structured Pruning of a BERT-based Question Answering Model” 中作者利用知识蒸馏方法,将未剪枝的教师模型中的知识迁移到剪枝后的学生模型上。 在中立问题数据集(Natural Questions)上,教师模型在长回答和短回答上的F1值分别为70.3和58.8。剪枝50%左右的注意力头和前馈激活后,F1分别下降为67.8和55.5 ——平均下降了约2.5。 如果在微调过程中用蒸馏损失来代替交叉熵损失,F1则可以恢复1.5到2个点,F1分别达到了69.3和58.4。

上图中,将跳连的求和操作与层标准化的缩放和偏置合并.  

我很想看看忒修斯BERT提出的渐进式模块替换, 是否能够很好地替换

他们实验发现, 用稀疏性惩罚来微调比”Are 16 Heads Really Better than 1 “中提出的重要性估计方法更胜一筹,并且他们发现可以多去掉近50%的前馈激活,而对短问题回答任务(他们视之为基准任务)的性能影响可以忽略不计。

原生半精度指令 更紧凑的表示使得批尺寸(batch size)更大

(一)建议通过直飞航班赴华,避免选择经其他国家中转。如需中转,请提前认真了解拟中转国家入境规定以及中转国家机场涉及核酸、血清IgM抗体检测等相关要求,以免乘机受阻。

“Are Sixteen Heads Really Better than One?”, 一文中,Paul Michel、Peter Levy和Graham Neubig迭代地从BERT中减少头的数量. 他们使用基于梯度检测的方法(梯度是在下游任务上估计出来的)来估计每个头的重要性,并以头剪枝百分比作为性能的函数来评估模型对头剪枝的鲁棒性。

如长信宫灯是满城汉墓出土的重要文物,它是墓主人生前使用的灯具,能反映当时汉代社会最高的艺术成就,一个生活中的用灯都做得如此精美、合理,对今天的人来说真是叹为观止。

忒修斯BERT的替换率的比较实验

谈感悟:有知识时才觉得生活充实

写作之外,他尝试过许多传播文化的方式。1997年年初,马未都创办的观复博物馆正式开馆;从2014年开始,制作了互联网视频脱口秀《观复嘟嘟》,讲一些小知识或者人生道理。

直播结束,收获超过50万个赞。马未都半认真半调侃地总结出个人感受:直播时间太长,不知道怎么跟读者们聊天……但这没太影响和网友互动,看到有关写作、文物方面的问题,他都尽量回答。

在实践中,作者发现20 – 40%的头可以剪枝,它们对精度的影响可以忽略不计。

如今,人们也享受了很多现代科技带来的好处。马未都觉得,我们今天处在什么时代,就要感知这个时代,感知这个时代就要感谢这个时代,这叫铭感在心。有这样一个心态,才能正确对待自己的人生。(完)

在J.S. McCarley和Rishav Chakravarti以及Avirup Sil的”Structured Pruning of a BERT-based Question Answering Model”中,作者探索了一种更通用的模型剪枝方法。 作者没有只关注注意力头,还对每一层的输入以及每个BERT层的前馈层的激活进行了门控。他们探索了几种机制来选出要剪枝的网络元素——包括Michel等人提出的方法——最终确定了一种L0正则化项,它可以用在精调期间,提高模型的稀疏性。为了使这个L0正则化项可微,他们采用了类似于变分自编码器中的重参数化技巧。

其中,在提到的100件国宝中,对青铜、陶瓷、玉器、书画等等都有所选择,标准是代表这一领域比较尖端的作品,就是选博物馆收藏的。

有意思的是,在3日晚的直播中,“人生”是马未都后来提到的一个高频词。

“我年轻的时候是文学编辑,唐诗宋词是我的基本功。我写这个书,一天写一个诗人,总体上是强调了时代背景、个人的身世,强调了他‘技术能量’。”马未都解释。

Transformer网络大部分的都可以简单地转换为16位浮点权重和激活,而不会产生精度问题。 而网络剩下的一小部分——特别是softmax操作这部分——必须坚持使用32位浮点数。 这是因为大量小数值(对数计算产生的)的和可能会累积出很大误差。因为同时使用了float16和float32,这种方法通常被称为”混合精度”.

换言之,不要老觉得别人“不行”,而是要知道别人一定“比你行”,这样这个社会才会变得非常丰富。他举出了例子:今天我们是一个相互帮忙的社会,你有多少事儿依赖别人?叫个外卖那么简单?

(四)所有乘坐直航航班赴华的乘客,无需通过防疫健康码国际版微信小程序上传“核酸检测阴性结果”(注有采样日期)、“核酸检测阴性证明”(加盖有柬卫生部红色印章),否则将对使馆正常审核转机人员检测证明造成干扰。

在前文提到的论文中,教师模型和学生基本架构是相似的,教师模型的权重通常用来初始化学生模型的权重。然而,即使在教师模型和学生模型架构差异巨大的情况下,也可以应用知识蒸馏损失。在 “Training Compact Models for Low Resource Entity Tagging using Pre-trained Language Models”一文中, 英特尔AI实验室的Peter Izsak、Shira Guskin和Moshe Wasserblat将一个在命名实体识别任务上训练的BERT教师模型(约330M个参数)蒸馏成了一个明显更紧凑高效的CNN-LSTM学生模型(约3M个参数)。 这样的学生模型以最少的精度损失在CPU硬件上的提速高达2个数量级。

列表中的最后一篇文章有两个与众不同之处:一是采用了比较新颖的模型压缩方法,二是文章里有这么张图:

简单来说,你可以选择一个缩放比例和偏移量,使得一组校准输入上的全部浮点数激活都不会被映射到8位整型值表示范围(-128,127)的端点值上。 然而,在这样做的过程中,为了适应极端的值我们牺牲了一些精度。 相反,像TensorRT这样的框架会选择规模和偏移值,来最小化32位浮点版本和8位整型版本的模型激活输出之间的KL散度,这使得我们原则上可以权衡好范围和精度。 由于KL散度就是不同编码下的信息损失量,所以它完美符合计算需求.

后辈模块是低配的先辈模块——下图这种情况里,单个Transformer的层替换掉了一个双层Transformer组成的块  。 与知识蒸馏不同的是,模块替换中没有使用损失来鼓励后辈模块模仿先辈模块。 实际上,是通过后辈和先辈模块的互换使用来鼓励后辈学习模仿先辈的行为。

(二)从柬埔寨出发、经第三国(如第三国已实行搭乘航班赴华人员须凭核酸检测和血清IgM抗体检测“双阴性”证明乘机政策)中转乘机赴华人员,须在柬埔寨进行第一次核酸检测,在中转国(赴华直飞航班起飞国)进行第二次核酸检测和血清IgM抗体检测,并分别向驻柬埔寨使馆和中转国(赴华直飞航班起飞国)使领馆申领带“HS”标识的绿色健康码或健康状况声明书。其中,第一次检测在柬埔寨进行,须于登机前2天内完成采样、检测,获得核酸检测阴性证明;第二次检测在中转国(赴华直飞航班起飞国)进行,并于中转地登机前2天内完成采样、检测,获得核酸检测、血清IgM抗体检测阴性证明。

《国宝100》是马未都今年出版的新书,以选出的100件中华文明瑰宝为主线,以100件国宝、100个故事,讲述中国历史的魅力。

不只是《国宝100》,近年来,马未都常有新书出版,比如《醉文明》《茶当酒集》《观复猫:我们的二十四节气》等等。还在写一本有关唐诗宋词解析的书。

软件优化还可以让我们重组一些矩阵乘法,以更好地利用并行性。 特别是,这可以将自注意力层的查询、键和值投影合并到一次矩阵乘法中去。

《国宝100》书封。长江新世纪供图

除了浮点缩减和量化,操作合并也为更高效的预测提供了一个实用而通用的选择。合并的基本原理是将一些网络层执行的操作结合起来,以更高效少次地访问设备内存。 通过将多种操作合并到一个核(kernel)中,可以大幅提高访问内存的速度。

“和别人讲国宝不同的是,我讲的是一个生动的故事。”他说,“我在文物领域待了一辈子,对文物领域都比较熟知,所以表达相对来说更加个性化。”

(二)日前,中国驻部分国家使领馆陆续发布通知,将实施登机前2天内核酸、血清IgM抗体检测“双阴性”证明登机措施。据此,自该国实施相关政策后出发经柬埔寨转机的所有乘客,需在出发地进行第一次核酸、血清IgM抗体“双检测”,赴柬埔寨后进行第二次检测,否则无法登机。

他也提到,古人对成人的标准是知羞耻、知恐惧、知艰难,“很多人没有这个感触,老觉得别人容易。当你知道别人做事不易的时候,你才成人。”

知识蒸馏是由Geoffrey Hinton, Oriol Vinyals, 和Jeff Dean在2015年的工作”Distilling the Knowledge in a Neural Network”中提出的, 知识蒸馏是指到将一个网络(”教师”)中包含的知识通过特定的修正损失迁移到另一个网络中去(”学生”)。  首先想象一下,我们有一大堆无标记的样本。如果我们信赖教师模型的预测,但其模型太过庞大或计算成本太高而无法在实际环境中使用,那我们就用教师模型来分类无标记的样本,并将这些分类信号作为监督信号馈给学生模型。 然而如果不将对应类别的最大似然作为最终目标,而是在所有可能的类别上产生一个概率分布,那么学生模型就可以获得信息更丰富的监督信号。直觉上,学生模型所犯的某些错误比其他错误更合理——把勺子的图认成哈士奇明显就走远了,但把哈士奇误分为一只阿拉斯加就比较想得通了。所以损失函数应该反映出错误的严重程度。通过惩罚教师预测和学生预测之间的差异(鼓励对数匹配),学生可以从教师网络也觉得可能的类别中学习有用信息。作者认为,在原任务上用仅3%的训练数据就可以几乎实现教师网络的性能。

为获得性能提升而进行剪枝对结构化的稀疏性有所要求。 简单地将奇异权重归零并不能有效产生性能提升,因为我们没有实际的方法来利用这种稀疏性。 所以我们必须剪掉网络中更大的部分,才能产生实际的性能提升。

为进一步加速模型,作者的还推荐使用下一个技术——”知识蒸馏”

“书的形式感超越视频和音频”

不幸的是,关于这种图优化所带来的速度提升幅度的细节很少,但我的乐观估计是,这种改进是渐进但不可忽视的——它会在吞吐量上提升10%。

马未都调侃,纸质书可以搁到书架上,提示自己还是文化人,“文化是它要有这个内容,还要有形式感,我觉得书的形式感超越视频和音频。”

有证据表明,大量参数可能是样本利用率高的关键,而且在同样时长内把大型语言模型训练到某个困惑度也可能比训练一个等效的紧凑模型更有高效,因此,高效地将这些习得的知识迁移到紧凑的学生模型上的方法拥有光明的未来。

那些流传下来的瑰宝凝聚了工匠的智慧和汗水,也汇集了当时的艺术审美、生活故事与人文精神。从某种层面而言,文物本身便是故事的起源,亦是走向未来的载体。

很多人也许会这样看待自己:觉得自己有能力,怀才不遇,但觉得别人不行。他觉得这种心态其实不好,“我有一个为人处世的原则可以告诉大家,叫‘高看别人,低看自己’。”

下面的资料介绍了如何使用NVIDIA的TensorRT将8位整型值量化应用到自己的模型中:

这种隐式行为的一个好处是,我们不再需要选择如何用目标模型损失来加权各种知识蒸馏损失——因为它通常需要一个超参数α,使得模型损失的形式为L=αLKD+(1-α)LCEL=αLKD+(1-α)LCE。 与TinyBERT不同的是,它没有二次预训练这一步——模型压缩与下游精调是同时进行的。 最后,渐进式模块替换方法也适用于模型架构不同的情况——它在设计中就没有利用Transformer的任何具体特征。

为了测试其方法的鲁棒性,作者在GLUE跑分的时候在BERT-base上用了”忒修斯压缩”,这轻松超越了几种基于知识蒸馏方法的性能,在将原始模型压缩到50%大小的情况下,仅仅落后BERT-base不到1个百分点。

有样东西和两个完全不一样。图源维基百科,遵循CC BY-SA 3.0协议发布。

为什么要讲国宝故事?

(五)领取“核酸检测阴性结果”(注有采样日期)、“核酸检测阴性证明”(加盖有柬卫生部红色印章)时,请认真核对和确保其上面的姓名、性别、出生日期、旅行证件(须为现持有效证件)号码等个人信息准确无误。如有错误,请立即联系核酸检测机构予以改正,否则会导致登机受阻。

人生每时每刻都在付出,也每时每刻都有收获。在他眼中,每个人从出生那天起,就不断地成长,一直到有一天离开,完成自己完整的一生。这一生中最大的乐趣是什么?是你获取知识,人只有在有知识的时候,才觉得生活充实。

图片由NVIDIA开发者博客提供

(一)从柬埔寨搭乘直飞航班赴华的人员,包括赴柬中转乘客,应在登机前2天内在中国驻柬使馆认可的检测机构完成核酸采样、检测,并凭检测机构出具的“核酸检测阴性结果”(注有采样日期)、“核酸检测阴性证明”(加盖有柬卫生部红色印章)原件直接登机。中国籍乘客无需申请健康码,外国籍乘客无需申请健康状况声明书。

数值精度缩减: 通过减少浮点数精度和量化来加快速度 操作合并: 在计算图中合并所选节点 剪枝: 识别并删除网络中的非必要部分 知识蒸馏: 训练高效的小规模学生模型,以模仿表达力更强、开销更大的老师模型 模块替换: 通过替换来降低模型的复杂性或深度

浮点类型存储三种的数值信息——符号、指数和分数。 传统的32位浮点数表示法用8位表示指数,用23位来表示尾数。 而传统的16位浮点数表示法(即NVIDIA硬件使用的格式)将32位表示法中的指数和尾数位差不多减少了一半。TPU则用了一种名为 bfloat16 的表示方法,它将部分比特位从尾数移至指数,以部分精度为代价换取了更大的数值表示能力。

将32位浮点值量化为8位整型值也是可能的,但应用起来颇为微妙。 特别是,为了确保8位整型值的计算尽可能地接近32位浮点值的计算,训练后必须要增加一个校准步骤.如果你知道一个网络的激活值可能在什么样的区间内,你可以把这个区间划分成256个离散的块,并将每个块分配给一个整数。 只要你记得了缩放因子和区间范围,就可以用整数近似值进行矩阵乘法,并在输出的时候结果恢复为浮点值.

“纸质图书的好处,第一是翻阅便利。”马未都说,“比如说你随便想到一个东西,你查询很容易查到,如果在视频和音频中呢,寻找起来比较麻烦。”

马未都。长江新世纪供图

数值精度缩减可能是加速模型预测的最通用方法。在过去的几年里,GPU硬件对16位浮点数运算的支持不佳,这意味着降低权重和激活函数的计算精度往往效果适得其反,但带有Tensor Core的NVIDIA Volta和Turing 架构的引入意味着现代GPU现在已经具备了高效的16位浮点数运算能力。

忒修斯BERT是对 “忒修斯之船 “悖论的延展,这个悖论探讨的是一艘船在经过不断的细小维修和升级后,是否还是那一艘船。 忒修斯BERT将这种渐进式替换的思想应用在了模型压缩上。