最新进展详解! 模型压缩到模型蒸馏 从架构优化 加速BERT模型有多少种方法 (最新的进展)

文章编号:46133 资讯动态 2024-12-09 蒸馏 模型压缩 BERT

原文作者:Grigory Sapunov

翻译:Camel

原文标题:Speeding up BERT

原文链接:

雷锋网AI科技评论按:BERT 在 NLP 领域的地位正如 ResNet 在 CV 领域的地位一样,属于里程碑的进展。目前,BERT 已经成为 NLP 深度学习管道中的重要组成部分。

加速BERT模型有多少种方法?从架构优化、模型压缩到模型蒸馏,最新进展详解!

但 BERT 并不是完美无瑕的,它最大的问题就是:太大。

BERT-base 模型能够包含一亿个参数,较大的 BERT-large 甚至包含 3.4 亿个参数。显然,很难将这种规模的模型部署到资源有限的环境(例如移动设备或嵌入式系统)当中。

模型太大是其一,BERT 的训练和推理时间也太长了!

在基于 Pod 配置的 4 个 Cloud TPUs(总共 16 个 TPU 芯片)上对 BERT-base 进行训练,或者在 16 个 Cloud TPU(总共 64 个 TPU 芯片)上对 BERT-large 进行训练,每次预训练都需要至少 4 天的时间才能完成。

当然对于最终的用户而言,训练时间通常似乎并不是什么大问题,因为反正只需要训练一次就够了(实际上往往会训练多次,因为你可能要多次重新训练模型,才能获得满意的结果)。不过如果能够加速,当然也是好的,因为迭代越快,你就能越早地解决你的问题。

BERT 的推理时间可能取决于你用的是什么设备(什么型号、多少个),在许多情况下,它会极大地限制你要处理数据的数量、速度以及成本。对于某些实时的应用程序来讲,用 BERT 简直是让人望而却步。

对以上的问题,能够想到的最直接的方法就是优化神经网络。这在神经网络中并不陌生,其他领域(例如计算机视觉)以前也有相同的问题,并且已经开发了几种压缩和加速神经网络模型的方法。大致可以分为几类:

我们来看下 BERT 在这些策略上可以做什么。雷锋网

1、架构和优化改进

大规模分布式训练

加速 BERT 训练能够想到的第一件事(甚至是第零件事)是将其分发到更大的集群当中。虽然最初的 BERT 已经使用了多台机器进行训练,但还有更多针对 BERT 分布式训练的优化解决方案,例如阿里巴巴 [1] 和英伟达 [2] 的一些工作。

加速BERT模型有多少种方法?从架构优化、模型压缩到模型蒸馏,最新进展详解!

英伟达最近使用 NVIDIA DGX SuperPOD(具有 92 个 DGX-2H 节点,共有 1472 个 V100 GPU,理论上可以提供 190PFLOPS)刷新了 BERT 训练的记录,在 53 分钟内训练出了 BERT-large 模型 [3]。当然,这个训练也是非常昂贵的,除了英伟达,其他公司和个人很难去做这样的事情。

加速BERT模型有多少种方法?从架构优化、模型压缩到模型蒸馏,最新进展详解!

还有另外一种更为巧妙优化方案,这是一种被称为 LAMB 的新的分层自适应大批量优化技术 [4],这种技术可以将 TPUv3 Pod 上的 BERT 训练时间从 3 天降低到 76 分钟(1024 个 TPUv3 芯片,可以提供超过 100PFLOPS),显然,训练这个模型也不会便宜。

架构

现在考虑更加架构性的以及更少硬件的解决方案。

加速BERT模型有多少种方法?从架构优化、模型压缩到模型蒸馏,最新进展详解!

有一种基于对自注意层行为的观察来训练 BERT 的渐进式堆叠方法 [5],该方法的分布局部地集中在其位置和 start-of-sentence token 周围,且在浅层模型中的注意力分布与深层模型相似。为此,作者提出了将知识从浅层模型转移到深层模型的堆叠算法,并逐步应用堆栈来加快 BERT 训练的速度。凭借这种方式,作者获得模型的训练时间相比原始 BERT 的训练时间缩短了约 25%,归其原因则在于对于相同数量的步骤,训练一个小的模型需要的计算也相对较少。

还有一种方法是注意力矩阵的稀疏分解(也称 Sparse Transformer,这项研究是由 OpenAI 完成的)[6] 和 block attention[7],它们都属于能够减少内存和计算总量的体系结构改进。

最后不得不提的是,已经提交给 ICLR 2020 的一个 BERT 的后代,被称为 ALBERT(A Lite BERT)[8]。

ALBERT 结合了两种参数降低的技术。

第一种是分解式嵌入参数化,将隐藏层的大小与词嵌入的大小分开。这种分隔使得在不显著增加词汇表嵌入参数大小的情况下能够更容易增加隐藏层的大小。

第二种是跨层参数共享。这种技术可以防止参数随着网络深度的增加而增大。

这两种技术可以显著降低 BERT 的参数数量,而不会严重影响性能,从而提高参数效率。

加速BERT模型有多少种方法?从架构优化、模型压缩到模型蒸馏,最新进展详解!

与 BERT-large 具有相似配置的 ALBERT,其参数能够降低 18 倍,训练速度提高了月 1.7 倍。

加速BERT模型有多少种方法?从架构优化、模型压缩到模型蒸馏,最新进展详解!

相比严格调校的 RoBERTa,ALBERT 则同样更胜一筹 [9]。

2、量化和修剪

加速BERT模型有多少种方法?从架构优化、模型压缩到模型蒸馏,最新进展详解!

量化 会降低模型权重的数值精度。通常情况下,使用 FP32(32 位浮点)来训练模型,然后可以将其量化为 FP16(16 位浮点),INT8(8 位整数),甚至将其量化为 INT4 或 INT1。于是模型尺寸将随之减小 2 倍、4 倍、8 倍或 32 倍。这称为 post-training quantization。

另一个选项是 量化感知训练 (也是较为困难和较为不成熟的)。这种方法的 FP16 训练现在已成为一种普遍的方法。而在 ICLR 2020 提交的论文中有一个比较有趣的工作 [10],它使用 ResNet、GNMT、Transformer 的 8 位浮点表示获得了最先进的训练结果。

修剪 即从模型中删除一些不重要或不太重要的权重(有时会是神经元),从而产生稀疏的权重矩阵(或较小的图层)。甚至还有一些研究直接去除掉与 Transformer 的注意力头相对应的整个矩阵。量化,可以使用 TensorFlow Lite(用于设备上推断的 TensorFlow 的部分)[11] 来执行。TensorFlow Lite 提供了在移动设备、嵌入式设备和 IoT 设备上转换和运行 TensorFlow 模型的工具,它支持训练后量化和量化感知训练。

另一个选择是使用英伟达的 TensorRT 框架 [12]。英伟达 TensorRT 是用于高性能深度学习推理的平台,它包括深度学习推理优化器,并且在运行时能够为深度学习推理应用程序提供低延迟和高吞吐量。

英伟达最近发布了具有最新优化功能的 TensorRT 6[13],它可以在 T4 GPU 上仅用 5.8 毫秒对 BERT-large 进行推理,而在 V100 上甚至只需要 4.2 毫秒,对于 Titan RTX,速度可能会更快。

当批处理数为 1 时,对于 340M 个参数的 BERT-large 模型,仅需 5.84 毫秒;对于 110M 参数的 BERT-Base 模型,则只需 2.07 毫秒。若将批处理数设为 128,你在使用 BERT-large 时甚至可以达到 250 个句子/秒的处理速度。

更多的数据我们这里就不再一一列举了。

PyTorch 最近也宣布了在其 1.3 版本 [14] 中支持量化。尽管目前它还处于实验阶段,但我们已经可以使用它了,因为在其教程中提到他们已经能够将动态量化应用于将模型权重转换为 INT8 的 LSTM 语言模型 [15]。

3、蒸馏

另一个有趣的模型压缩方法是蒸馏,这是一种将大型「teacher」网络的知识转移到较小的「student」网络的技术,训练学生网络来模仿教师网络的行为。

加速BERT模型有多少种方法?从架构优化、模型压缩到模型蒸馏,最新进展详解!

Rich Caruana 及其合作者率先采用了这种策略。在他们先驱性的论文 [17] 中,他们提供了令人信服的证明:大型集成模型所获得的知识可以转移到单个小型的模型中。

Geoffrey Hinton 等人在他们的「Distilling the Knowledge in a Neural Network」{18} 论文中证明了这种技术可以应用于神经网络模型。

DistilBERT

从 Hinton 开始,蒸馏的方法逐渐被应用到了不同的神经网络中,当然你可能也听过 HuggingFace 提出的 DistilBERT,这是一种对 BERT 的蒸馏。这项工作出自论文「DistilBERT, a distilled version of BERT: smaller, faster, cheaper and lighter」[19],目前已经提交到 NeurIPS 2019。

DistilBERT 是一种较小的语言模型,受 BERT 的监督而训练。在该模型中,作者删除了令牌类型嵌入和合并器(用于下一个句子分类任务),并保持体系架构其余部分不变,同时将层数减少了两倍。

您可以在 HuggingFace(以前叫做 pytorch-transformers 和 pytorch-pretrained-bert)的 translators python 软件包的帮助下,使用现成的 DistilBERT。该软件包的 2.0.0 版本支持 TensorFlow 2.0 / PyTorch 互操作。

DistilBERT 的作者还使用了最新 RoBERTa 论文中的一些训练技巧,这些技巧表明 BERT 的训练方式对其最终性能至关重要。

DistilBERT 与 BERT 相比具有出人意料的结果:作者保留了 95%以上的性能,但参数却减少了 40%。

加速BERT模型有多少种方法?从架构优化、模型压缩到模型蒸馏,最新进展详解!

比较 GLUE 基准测试的开发集

在推断时间方面,DistilBERT 比 BERT 快了 60%以上,比 ELMo + BiLSTM 快 120%。

加速BERT模型有多少种方法?从架构优化、模型压缩到模型蒸馏,最新进展详解!

TinyBERT

就在几天前,出现了一种新的 BERT 蒸馏方法,来自华为诺亚方舟实验室的刘群团队提出了 TinyBERT[20]。

为了构建一个具有竞争力的 TinyBERT,作者首先提出了一种新的 Transformer 蒸馏方法,来蒸馏嵌入 BERT 的知识。

加速BERT模型有多少种方法?从架构优化、模型压缩到模型蒸馏,最新进展详解!

具体来说就是,他们设计了几个损失函数来适合 BERT 层的不同表示形式:

1、嵌入层的输出;

2、Transformer 层派生的隐藏状态和注意力矩阵;

3、预测层输出的 logits 输出。

论文中基于注意力的拟合则得益于最近的发现,即 BERT 学习的注意力权重可以捕获大量的语言知识,这意味着语言知识可以很好地从教师 BERT 转移到学生 TinyBERT。而在 BERT 的现有知识蒸馏的方法(如 Distilled BiLSTM_SOFT,BERT-PKD 和 DistilBERT)中却忽略了这一点。

加速BERT模型有多少种方法?从架构优化、模型压缩到模型蒸馏,最新进展详解!

在这项工作中,作者还提出了一种新颖的两阶段学习框架,包括通用蒸馏和特定任务蒸馏。在通用蒸馏阶段,未经微调的原始 BERT 充当教师模型,学生 TinyBERT 通过在通用领域对大型语料库执行通常的 Transformer 蒸馏来学习模仿教师的行为。他们获得了可以对各种下游任务进行微调的通用 TinyBERT。在特定任务蒸馏阶段,他们将数据进行扩充,来提供更多与任务相关的材料供教师-学生学习,然后在增强的数据上重新执行 Tranformer 蒸馏。

这个两阶段方法对于提升 TinyBERT 的性能和泛化能力是必不可少的。

TinyBERY 在实验上取得了非常的成绩,相对于 GLUE 数据集的 BERT-base,其性能并没有下降多少,而推理参数小了 7.5 倍,推理时间快了 9.4 倍。

加速BERT模型有多少种方法?从架构优化、模型压缩到模型蒸馏,最新进展详解!

我们期待他们能够将这种方法应用到 BERT-large 和 XLNet 等大型模型中,同样也期待他们开放源码。

其他蒸馏方法

除了 DistilBERT 和 TinyBERT 外,还有其他一些为大家所熟知的蒸馏方法。

(2019/03)「Distilling Task-Specific Knowledge from BERT into Simple Neural Networks」[21]

这篇论文将 BERT 蒸馏到单层 BiLSTM 中,取得了与 ELMo 可比的结果,同时使用的参数减少了大约 100 倍,推理时间减少了 15 倍。

加速BERT模型有多少种方法?从架构优化、模型压缩到模型蒸馏,最新进展详解!

BiLSTM_SOF 是 TBiLSTM 的蒸馏,后者是在 soft logit 目标上训练出来的。

(2019/08)「Patient Knowledge Distillation for BERT Model Compression」[22]

这篇论文提出了一种耐心知识蒸馏的方法,这是首次尝试使用教师的隐藏状态,而不仅仅是最后一层的输出。他们的学生模型从教师模型的多个中间层「耐心」地学习来获得更多知识。在他们的耐心蒸馏知识框架中,只训练学生模仿中间层的 [CLS] 令牌的表示形式。代码已公开 [23]。

加速BERT模型有多少种方法?从架构优化、模型压缩到模型蒸馏,最新进展详解!

(2019/09)「Extreme Language Model Compression with Optimal Subwords and Shared Projections」

这是最近提交到 ICLR 2020 的一篇论文,这篇论文专注于一种用于训练词汇量显著较小、嵌入和隐藏状态维度较低的学生模型的知识蒸馏技术。作者采用了双重训练机制,可以同时训练教师和学生模型,从而能够获得针对学生词汇的最佳词嵌入。该方法能够将 BERT-base 模型压缩 60 倍以上,而下游任务指标只有很小的下降,从而使得语言模型占用的空间只有不到 7MB。

加速BERT模型有多少种方法?从架构优化、模型压缩到模型蒸馏,最新进展详解!

加速BERT模型有多少种方法?从架构优化、模型压缩到模型蒸馏,最新进展详解!

TinyBERT 的结果似乎更好,但一个 7MB 的类 BERT 模型简直爽的不能再爽!

需要强调,以上所介绍的方法并不互相冲突,所以我们期待能够将这些方法协同起来使用来加速 BERT 模型(或其他相似模型)。

参考资料

[1]

[2]

[3]

[4]

[5]

[6]

[7]

[8]

[9]

[10]

[11]

[12]

[13]

[14]

[15]

[16]

[17]~caruana/compression.kdd06.pdf

[18]

[19]

[20]

[21]

[22]

[23]

[24]

雷锋网报道。

原创文章,未经授权禁止转载。详情见 转载须知 。

加速BERT模型有多少种方法?从架构优化、模型压缩到模型蒸馏,最新进展详解!


本文地址: https://www.gpxz.com/article/c34b82bee3eb0e678a0c.html
全局中部横幅
全局中部横幅
APP上架

一门APP开发平台提供全流程APP上架应用商店服务,包括Appstore上架,谷歌pay上架,华为上架,小米上架,OPPO上架,VIVO上架,魅族上架,应用宝上架,三星上架,360上架,百度上架,阿里上架等APP应用商店上架服务。

上海致达智能科技股份有限公司

上海致达智能科技股份有限公司专注于智能电网/电厂、数字化配电网、企业和园区综合能源服务的高科技企业。公司的使命是为用户提供安全、智能、低碳、节能的数字化电力产品和智慧能源解决方案。

苏州诺绿再生资源有限公司

苏州诺绿再生资源有限公司是一家规模较大、资金雄厚的。公司本着“公平公正、诚实守信、互惠互利、回收利用”的经营理念,以及良好的经营信誉,随着业务的发和壮大,合作伙伴已逐步向全国范围扩大,本公司一贯奉行:守信、保质、快捷、竭诚的服务宗旨,大力提倡“资源再生,绿色环保”的政策,努力开拓,不断创新。

衡阳市蓝天环保有限公司

衡阳市蓝天环保有限公司业务范围:环境影响评价、工业污染治理、畜禽养殖污染治理,环境工程方案设计、施工、环保设施运营管理、能源沼气施工;工程咨询,可行性研究报告、第三方环境监测、检测。

北海招聘网

北海招聘网(https://www.rc0779.com)大品牌的招聘网站,规模大信息真实的专业招聘网站,最新招聘信息,找工作,上北海招聘网!

实验室精密仪器

智维仪器(青岛)有限公司是—家致力于为高分子行业实验室提供实验室精密仪器、实验室规划、试验检测仪器、标准化模具及技术支持的多元化公司,智维仪器与国际知名高端精密仪器生产企业合作,追求让材料检测更加智能、精准。

视频教程

课课家教育是集软件水平考试(软考)、PMP、计算机等级、华为认证、思科认证、一级建造师、二级建造师等考试培训辅导机构,提供软考(信息系统项目管理师、系统集成项目管理工程师、网络工程师等软考所有级别科目)、java、python、php、c、前端、数据库、区块链、运维等各个领域实战培训视频和讲师答疑等于一体的在线教育服务平台,帮助每个渴望成长的IT技术工程师技能提升,学有所成!学IT实战培训课程就上课课家教育。

防水涂料加盟

佛山市国铝五金制品有限公司主营瓷砖背胶、德高防水材料等产品,提供防水涂料加盟和防水涂料批发等业务,是专业的不锈钢线条厂家、瓷砖美缝剂厂家、防水涂料生产厂家。国铝五金是国内规模较大的集研发、生产、销售与一体的大型现代装饰材料高新技术企业。

门窗

苏州瑟盾门窗股份有限公司是一家专门生产门窗,系统门窗,门窗招商加盟的企业,苏州瑟盾门窗倡导、坚固完美的“简约现代”设计风格,在家居装饰领域的应用艺术上,苏州瑟盾门窗有着优秀的设计理念和杰出的生产技术。

当代中国数字传播网

当代中国数字传播网依托我国发展的生动实践,创新对外话语表达方式,运用虚拟现实(VR)、增强现实(AR)等新技术,向世界展现真实、立体、全面的中国,以“让中华文化更好走向世界,让世界更好地了解中国”为目标的国际新型主流媒体平台。

羞辱2

羞辱2游戏专题;提供羞辱2中文版下载,羞辱2攻略大全,羞辱2汉化补丁,羞辱2视频解说,攻略视频,修改器,汉化下载,完美存档,MOD,配置,教学,截图,壁纸等资料。更多《羞辱2》相关内容尽在游侠网。

全局底部横幅