(2024,综述,Transformer 压缩,修剪、量化、知识蒸馏和高效架构设计,CV,NLP)

A Survey on Transformer Compression

公和众和号:EDPJ(进 Q 交流群:922230617 或加 VX:CV_EDPJ 进 V 交流群)

目录

0. 摘要

1. 简介 

2. Transformer 的概念

3. 架构保留的压缩

3.1 量化

3.1.1 量化概述

3.2 知识蒸馏

3.2.1 知识蒸馏概述

4. 架构自适应的压缩

4.1 修剪

4.1.1 修剪概述

5. 其他方法

6. 结论和未来方向


0. 摘要

基于 Transformer 架构的大型模型在人工智能中发挥着越来越重要的作用,特别是在自然语言处理(NLP)和计算机视觉(CV)领域。模型压缩方法减少它们的内存和计算成本,这是在实际设备上实现 Transformer 模型的必要步骤。鉴于 Transformer 的独特架构,其中包括交替的注意力和前馈神经网络(FFN)模块,需要特定的压缩技术。这些压缩方法的效率也至关重要,因为通常在整个训练数据集上重新训练大型模型是不切实际的。本综述对最近的压缩方法进行了全面的审查,特别关注它们在 Transformer 模型中的应用。压缩方法主要分为修剪、量化、知识蒸馏和高效架构设计。在每个类别中,我们讨论了 CV 和 NLP 任务的压缩方法,突出了共同的基本原则。最后,我们深入探讨了各种压缩方法之间的关系,并讨论了这一领域的进一步发展方向。

1. 简介 

2. Transformer 的概念

标准的 Transformer 架构包含:主要的模块,多头注意力(MHA)和前馈网络(FFN)。 

3. 架构保留的压缩

3.1 量化

3.1.1 量化概述

量化(Quantization)是在各种设备上部署 Transformer 的关键步骤,特别是在为低精度算术设计专用电路的 GPU和 NPU 上。在量化过程中,如方程 4 所示,浮点张量 x 被转换为具有相应量化参数(比例因子 s和零点 z)的整数张量 x_int,然后整数张量 x_int 可以被量化回浮点数 x_quant,但与原始 x 相比会导致一定的精度误差,即,

其中 b 表示位宽,⌊·⌉ 表示舍入函数,'Clamp' 剪切超出给定范围的值。

3.2 知识蒸馏

在本节中,我们将介绍用于压缩基于 Transformer 的基础模型的知识蒸馏框架,包括语言模型和视觉模型。

3.2.1 知识蒸馏概述

知识蒸馏(Knowledge distillation,KD)旨在通过从教师网络中蒸馏 [83],[84],[85] 或传递 [87],[88],[86] 知识来训练学生网络。在本文中,我们主要关注的蒸馏方法是:实现紧凑学生模型的,同时与繁重的教师模型相比保持令人满意的性能。学生模型通常具有较窄且较浅的架构,使它们更适合部署在资源有限的系统上。

我们将首先讨论以下两种不同类型的知识蒸馏:基于 logits 的方法 [87],在 logits 级别传递知识,以及基于 hint 的方法 [89],通过中间特征传递知识。

除了上述两种主流的知识蒸馏方法,我们还将讨论一种基于API 的方法,其中,在当今大型语言模型(LLMs)中只能访问教师生成的输出。 

4. 架构自适应的压缩

4.1 修剪

4.1.1 修剪概述

神经网络修剪(pruning)长期以来一直被认为是缩小模型尺寸和加速模型推断的有效方法。修剪方法的分类可能会相当复杂,包括修剪和模型训练的顺序,结构规范以及确定修剪参数的方式[133]。然而,在本综述的范围内,将源模型限制为用于自然语言处理 [134],[4] 或视觉识别 [12],[26],[135],[136] 的预训练大型 transformer 提出了需要解决的几个具体类别的技术(图 5)。

由于预训练占据了大部分模型在下游任务中的性能,因此在训练后进行修剪(pruning after training,PAT)[137] 成为一个主要选择。在高层次上,整个过程包括预训练、修剪和重新训练性能恢复。然而,预训练的多任务性质和重新训练的巨大计算量也导致了修剪大型 transformer 模型需要解决的关键问题,如后面所详述的。

另一方面,修剪的结构规范将技术分为非结构化(unstructured)和结构化(structured)修剪两类。

  • 前者在最细粒度层次上进行修剪 [138],[139],即权重级别的修剪。虽然非结构化修剪通常可以减小参数大小或内存使用,但由于生成的模型形状往往不规则,因此无法保证加速速度,而且加速需要特定的硬件设计。
  • 相反,将被消除的结构指定为整个层、头部或其他网络单元,会导致结构化修剪 [140],通常可以在标准硬件上缩短延迟。当规范适用于加速(例如非零掩码的特定比例)时,修剪被称为半结构化修剪[141]。

除了网络参数,减小输入大小也是一个吸引人的探索方向。在注意到在视觉 [33] 和语言领域 [142]的 transformer 中都发现了移除标记之间冗余信息的重要性后,这种类型的算法也实现了在未修剪的网络参数下减少计算 FLOPs。

5. 其他方法

除了量化、蒸馏、修剪和新颖的网络架构之外,还有一些其他模型压缩和加速方法。

张量分解(Tensor Decomposition)。张量或矩阵分解的目标是将大型张量或矩阵分解为较小的部分,以节省参数数量和计算成本。 

早期退出(Early Exiting)。早期退出可以动态地为每个输入样本分配不同的资源并保持原始性能。

猜测抽样(Speculative Sampling)。猜测抽样是一种特殊的加速方法,通过并行计算多个标记来加速 transformer  解码。

6. 结论和未来方向

不同压缩方法之间的关系。不同的压缩方法可以结合使用,以获得极为高效的架构。一个常规的顺序是首先定义具有高效操作的新架构。然后去除冗余组件(例如注意力头、层),以得到一个更小的模型。对于实际的硬件实现,将权重或激活量化为较低的位是必不可少的。所需位数的选择不仅取决于误差的容忍度,还取决于硬件设计。例如,Int8 计算在 Nvidia A00 上得到了高效优化,但在较旧的 Tesla P100 上缺乏支持。蒸馏通常作为一种训练策略,适用于修剪和量化的微调阶段。为了追求极高的压缩率,有望探索如何结合不同的压缩策略。尽管在传统模型如 CNN [9],[284] 中已经得到了很好的探索,但变压器模型具有更复杂的架构和更高的计算成本。通过联合搜索找到合适的组合策略具有挑战性。

训练高效的压缩策略

超越 Transformer 的高效架构。 

  • 23
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值