Model Compression and Hardware Acceleration for Neural Networks A Comprehensive Survey

神经网络的模型压缩和硬件加速:综述

摘要

由于摩尔定律的可预见的终结,在通用处理器的改进速度下降的背景下,特定领域的硬件正成为一个有前途的话题。机器学习,尤其是深度神经网络(DNN),因为其在各种人工智能(AI)任务中的成功应用,已成为了最受瞩目的领域。DNN的无与伦比的准确性是通过消耗大量的内存以及较高的计算复杂性来实现的,这极大地阻碍了它们在嵌入式系统中的部署。因此,自然而然地提出了DNN压缩概念,并将其广泛用于节省内存和计算加速。在过去的几年中,涌现了大量压缩技术,以在计算效率和应用准确性之间寻求令人满意的折衷。最近,这一浪潮已经蔓延到神经网络加速器的设计中,以获取超高的性能。但是,相关工作量巨大以及报告的方法差异很大。这项混乱的研究促使我们对在高效压缩和执行DNN而不损害准确性的目标方面的最新进展进行全面的综述,涉及高级算法及其在硬件设计中的应用。在本文中,我们回顾了主流的压缩方法,例如紧凑模型,张量分解,数据量化和网络稀疏化。我们解释了它们的压缩原理,评估指标,敏感性分析和联合使用方法。然后,我们回答了如何在神经网络加速器的设计中利用这些方法的问题,并提出了最新的硬件架构。最后,我们讨论了几个问题,例如公平比较,测试工作负载,自动压缩,对安全性的影响以及框架/硬件级别的支持,并给出了该领域中研究方向以及可能遇到的挑战。本文试图使读者快速建立起神经网络压缩和加速的概况,清楚地评估各种方法,并自信地以正确的方式开始。

1. 简介,动机与概述

2. 神经网络概论

3. 神经网络压缩:算法

在本节中,我们首先介绍本文针对各种神经网络压缩方法的总体分类,然后逐一详细介绍特定的方法。

A. 压缩方法分类法

图3展示了我们对神经网络压缩中的不同方法进行了分类的分类法。
Fig_3

注意,这里为了清晰起见,该图中未包括采用多种方法进行的联合压缩。对于任何压缩方法,如果其目的是从一组候选对象自身创建基本模型,则该方法被认为是紧凑模型方法。相比之下,其他三种方法修改了给定的基本模型以减少内存和计算成本。具体来说,如果将神经网络中的原始张量拆分为更小的张量,我们将其称为张量分解。否则,我们必须做进一步的识别:如果减少了数据表示的位宽,那应该是数据量化的方法;而如果使用较少的有效权重和/或神经元对计算图进行稀疏化,则它属于网络稀疏化方法。

除了四种压缩方法外,第二节还提到了三种网络:MLP(多层感知器),CNN(卷积神经网络)和RNN(循环神经网络)。鉴于以下原因,我们不基于网络类型进行分类。首先,针对不同网络类型的方法有很多重叠之处。FC层(全连接层)可被视为具有1×1特征图大小的Conv层(卷积层)。因此,Conv层的许多压缩方法也可以在具有FC层的MLP或RNN中应用。例如,在张量分解,数据量化和网络稀疏化中,我们认为大多数方法可以在不同的网络之间共享。而在紧凑模型中,尽管CNN的空间相关性与RNN的单元级设计不兼容,但CNN的信道相关性与RNN的网络级设计在某种程度上相似。第二,关于RNN和MLP的研究比CNN的研究少得多的原因主要是因为CNN在当前的AI任务中越来越流行,并且在CNN系列中用于比较的基准更加标准化,而不是方法不兼容;此外,CNN的FC层可以包含MLP结构,因此只有很少的工作研究MLP的压缩。最后,如果我们将不同的网络类型划分为不同的子部分,则由于在许多情况下使用共享方法,因此必须在每种方法中重复使用四种压缩方法,这可能会导致混乱。考虑到所有这些问题,我们将不同的压缩方法用作更高级别的分类法,并将不同网络上的工作插入每种方法中。

B. 压缩模型

  1. 紧凑的CNN-空间和通道相关性:自AlexNet在图像分类的重大突破以来,CNN已经迭代了许多架构和模型,它们实现了越来越高的准确性。此外,它们的应用还扩展到其他计算机视觉任务,例如目标检测和语义分割,甚至具有一维卷积的顺序任务和具有三维卷积的视频流任务。但是,性能的改善主要是由更深和更广的网络带来的,这些网络增加了参数和操作(例如乘法和累加),这通常会减慢它们的执行速度,尤其是在移动设备上。这激励了紧凑型模型的设计,从而减少了开销,同时尽可能地保持了准确性。
    虽然针对每个具体任务可以采用不同的技术获得紧凑的网络,但是典型的和一般的趋势是更深层的结构,扩展的特征图,更复杂的分支拓扑,更灵活的Conv算法。在本节中,我们从图4所示的两个方面总结了二维Conv的代表性方法:Fig_4
  • Conv层内的空间相关性,其中特征图与多个权重核卷积

  • 层内和层间通道相关性,其中特征图由不同的拓扑聚合。具体来说,每个输出特征图对应于多个权重核,其中每个核可以通过卷积操作从输入特征图中提取一种类型的局部特征。然后,通过聚合从多个输入特征图提取的特征,使输出特征图产生对输入数据的更高特征抽象。以类似的方式,多输出特征图通过不同的权值核产生不同的特征。特征传播逐渐提高了从局部到全局的抽象水平,最终使得图像识别等网络决策成为可能。
    a. 空间相关性以扩大感受野:与MLP相比,CNN的关键特征是具有共享权重的局部连接,这导致感受野内的高空间相关性以及空间变换的不变性。因此,设计有效的感受野对于Conv层的表示能力至关重要,这由权重核大小和权重核模式共同确定。
    即使可以通过使用较大的内核大小简单地增大感受野,但这也会导致参数和运算的二次方增长。两个3×3Conv(C3×3)层的堆叠的有效射频大约为C5×5,但参数和操作减少了28%(表2)。可以将其视为对原始5×5卷积核施加正则化,然后将其分解为两个3×3卷积核的子集,并在其间注入非线性。使用3×3卷积核的原则在现代CNN中得到了广泛的应用。一个直观的问题出现了:我们可以积极使用较小的卷积核大小,例如3×1(不对称卷积核)或2×2(偶数卷积核)吗?
    对于非对称情况,可以将 n × n n×n n×nConv分解为 n × 1 n\times 1 n×1Conv和 1 × n 1×n 1×nConv,因此参数和运算从 O ( n 2 ) O(n^2) O(n2)急剧减少到 O ( 2 n ) O(2n) O(2n)。实验表明,不对称的Conv在尺寸为12–20的特征图上可以得到良好的结果。而对于2×2内核的情况,将C3×3分解为两个C2×2只会节省11%的开销。此外,偶数大小的内核必定会使零填充不对称,并导致半像素偏移的结果。堆叠多个偶数大小的Conv层时,这种位置偏移会累积,最终将空间信息压缩到原始输入特征图的某个角落。因此,在ShiftNet中,作者通过将3×3卷积核替换为各向同性的特征图移位,然后是1×1逐点转换,来直接利用移位效应并扩大感受野,然后在无需参数和MAC的情况下实现空间相关性。
    扩大感受野的另一种方法是使用atrous Conv,也称为空洞卷积。如图5所示,atrous Conv使用具有孔,空洞或分散组织的不规则内核。空洞卷积支持不会降低分辨率或覆盖范围感受野的指数扩展。空洞算法可以使用不同的膨胀因子将相同的卷积核应用于不同的范围,从而在不影响分辨率的情况下聚合多尺度上下文信息。空洞卷积有效地扩大了感受野,而无需增加参数和MAC的数量,这特别适合于密集预测任务,例如语义分割,语音生成和机器翻译。Deformable Conv是atrous Conv的推广,它通过附加的二维偏移量并直接从目标任务中学习偏移量,从而增加了卷积核的空间采样位置。因此,可变核更加针对特定的任务,大大提高了对几何变换的建模能力。
    Fig_5
    b. 通道相关性-拓扑技术:除了扩大感受野之外,大多数关于紧凑型CNN的研究都集中在网络结构上,即卷积层内或卷积层间的通道聚合拓扑。
    在VGG-Net中,层间拓扑非常简单,其中多个Conv层从头到尾依次堆叠。然而,随着网络的加深,在实践中准确度会饱和并迅速下降,这被称为退化问题。在这种情况下,SGD优化器似乎很难找到更好的解决方案。为了解决这个问题,Inception-V1添加了两个额外的辅助分类器,这些分类器连接到中间层,以帮助将梯度传播回去。
    一种更有效,更优雅的方法是捷径连接,其中一个Conv层的输入和几个堆叠的Conv层之后的输出通过门或恒等函数连接。具体来说,可以将ResNet[参见图6(a)]中使用的恒等连接的示例表示为
    x l + 2 = C o n v l + 1 ( C o n v l ( x l ) ) + x l x_{l+2}=Conv_{l+1}(Conv_l(x_l))+x_l xl+2=Convl+1(Convl(xl))+xl
    其中 x l x_l xl是第 l l l层的输入, C o n v l ( ⋅ ) Conv_l(·) Convl()表示该层内的卷积操作和激活函数。ResNet通过减少梯度消失并因此极大地增加了深度(超过100层)来获得精度提高。ResNet的一种解释是,超深层网络由恒等连接分解,并形成为相对较浅的网络的集合使其更加容易训练。与ResNet相似但又不同,DenseNet通过紧密连接的块
    x l + 1 = C o n v l ( [ x 0 , x 1 , . . . , x l ] ) x_{l+1}=Conv_l([x_0,x_1,...,x_l]) xl+1=Convl([x0,x1,...,xl])
    构造捷径连接,其中 [ x 0 , x 1 , . . . , x l ] [x_0,x_1,...,x_l] [x0,x1,...,xl]是指由所有先前的层产生的特征图的串联[见图6(b)]。通过特征重用来挖掘网络潜力,从而生成更多高参数效率的压缩模型。
    Fig_6
    上述网络由相对简单的层和模块依次组成。网络深度或宽度的进一步增加通常会导致性能增益递减(例如,一个1202层的ResNet的性能比110层的ResNet差),同时成本和参数和操作都呈二次增长。
    Conv层(层间)内的通道拓扑旨在减少标准Conv的开销。对于每个输出通道,Conv可以分为两个步骤(参见图4):

    • 对于每个输入通道,通过与权重核(空间相关性)卷积来获得Conv结果
    • 线性聚合来自不同输入信道的所有Conv结果(信道相关性)。
      第一个想法是显式地利用线性信道相关性,或网络中的网络(NIN)中使用的逐点C1×1。尽管C1×1本质上是所有输入特征图上的线性投影,而没有任何空间相关性,但它可以减少通道数量而不会产生负面影响。该原则后来形成为瓶颈结构[见图6©]:瓶颈结构不是使用具有 n n n个扇入FM和 n n n个扇出FM的单个标准C3×3,而是首先使用C1×1将n个FM投影到 n / k n/k n/k个FM,然后执行 k k k次标准的C3×3降低尺寸,最后通过另一个C1×1将 n / k n/k n/kFM投影回 n n n个FM。瓶颈架构也有逆版本[请参见图6(e)]。
      减少Conv开销的另一种方法是Group Conv。群卷积的实现很简单,即将 n n n个扇入FM和 n n n个扇出FM分为 k k k个单独的群,其中每个群具有 n / k n/k n/k个扇入FM和 n / k n/k n/k个扇出FM[请参见图[6(d)]。计算如下:
      x l + 1 = [ C o n v l 1 ( x l 1 ) , C o n v l 2 ( x l 2 ) , . . . , C o n v l k ( x l k ) ] x_{l+1}=[Conv^1_l(x^1_l),Conv^2_l(x^2_l),...,Conv^k_l(x^k_l)] xl+1=[Convl1(xl1),Convl2(xl2),...,Convlk(xlk)]
      其中 k k k表示群索引。Group Conv特别适合在每个GPU内存不足的情况下在多个GPU上进行分布式训练。ResNeXt是ResNet的分组转换版本,可提高准确性。Condensenet在原始DenseNet的基础上引入了一个learned group Conv。在训练期间,learned group Conv会去除C1×1连接,并在推理过程中重新排列它们,以便将所得模型实现为标准的一对一群卷积。堆叠多个群卷积的副作用是,某个通道的输出仅来自某组输入通道。此特性强烈地正则化了信道相关性,并削弱了网络的表达能力。ShuffleNet通过通道洗牌操作克服了这一问题,它可以重新排列FM并链接不同组之间的通道。高等人提出了一种通道级的Conv融合来自不同通道组的信息。在[39]中对Group Conv进行了进一步的研究,其中每个Conv块由多个交错的群卷积(IGC)组成,并且每个卷积具有不同的置换策略和卷积核大小。
      群卷积的极端情况是深度卷积,其中组数等于通道数。实际上,通常在深度卷积之后是一个点状卷积,耦合为深度可分离卷积[见图6(f)]。深度可分离卷积背后的基本假设是,空间和通道相关性可以充分解耦,并且可以分别实现。与标准卷积相比,MobileNet表明,使用深度可分离卷积在ImageNet上精确度仅降低了1%,却可以节省大量参数和MAC。深度可分离卷积已成为紧凑型CNN的流行组件。在表3中,现代的紧凑型模型倾向于使用更多的C1×1,这些C1×1可以占据绝大多数参数和操作,例如,在MobileNet中约占95%。因此,如何稀疏或减少C1×1的开销对于将来的工作非常重要。
      Table_3
  1. 紧凑的RNN-单元和网络级别:众所周知,RNN单元的内部结构很复杂,这可以从(2)和(3)中定义的LSTM和GRU单元中看出。此外,RNN模型中的信息沿时空两个维度传播,这也很复杂。因此,在这一部分中,我们将讨论RNN的最新进展,旨在通过在单元或网络级别上设计紧凑的RNN来提高执行效率。
    a. 单元级别:LSTM旨在通过减轻梯度爆炸或消失的问题来改善对无特色的RNN的长期依赖性。尽管LSTM在各种任务中表现良好,但门的复杂设计带来了相当多的参数和操作。同样不清楚的是,LSTM中的所有组件是否都是必不可少的。对LSTM的门搜索和演化的研究表明,遗忘门是最关键的组成部分,输入门相对重要,而输出门不重要。
    基于上述考虑,提出了GRU,并广泛用作LSTM的简化版本。它删除了peephole连接,并将输入和遗忘门耦合到更新门。此外,S-LSTM和JANET仅包含一个遗忘门。最小门控单元(MGU)耦合GRU的复位门和更新门。这些架构试图简化门并且拥有比常规LSTM少得多的参数。实验表明,这些紧凑型单元可显着降低模型复杂度,但不会降低性能。与简化门相反,相控LSTM通过添加额外的时间门扩展了LSTM单元,该门由参数化振荡控制,并对存储单元产生稀疏更新,因此比常规LSTM方法具有更快的收敛速度和更好的性能。图7说明了这些紧凑型RNN单元的详细拓扑。
    还有一些工作超出了门的优化。比如提出了一种独立的RNN(IndRNN)算法,在不增加门的情况下,避免了梯度爆炸和消失问题。在IndRNN中,同一层的神经元相互独立,连接方式为
    h t = s i g m o i d ( W x t + u ⊙ h t − 1 + b ) h_t=sigmoid(W_{x_t}+u\odot h_{t-1}+b) ht=sigmoid(Wxt+uht1+b)
    其中u是矢量格式的参数。IndRNN可以看作是GRU的无门版本。准RNN(QRNN)用门计算中的前一个输入 x t − 1 x_{t-1} xt1替换了前一个隐藏状态 h t − 1 h_{t-1} ht1,以遗忘门为例:
    f t = σ ( W f [ x t , x t − 1 + b f ] ) f_t=\sigma (W_f[x_t,x_{t-1}+b_f]) ft=σ(Wf[xt,xt1+bf])
    通过这种方式,可以沿着时间和小批量维度并行执行最繁重的计算。受QRNN的启发,简单递归单元(SRU)用向量格式参数和原胞状态即 V ⊙ c t − 1 V\odot c_{t-1} Vct1的轻型Hadamard乘积代替 W h t − 1 Wh_{t-1} Wht1,使 c t c_t ct的计算变得独立并且可并行化。单一RNN(uRNN)探索了在内存受限条件下正交和单一权重矩阵的使用。
    b. 网络级别:探索紧凑型RNN的另一条途径是简化堆叠层,这在许多方面都遵循了与CNN的通道相关性相似的灵感,并延伸到了空间和时间维度。Sak等人引入了线性递归投影层以减小隐藏状态的维数,即 r t = W r h t r_t=W_rh_t rt=Wrht,其中 r t r_t rt的长度小于 h t h_t ht的长度,并用较短的 r t − 1 r_{t-1} rt1反馈回去以替换较长的 h t − 1 h_{t-1} ht1。具体来说,门运算变为
    g a t e t = σ ( W x x t + W h r t − 1 + b ) gate_t=\sigma (W_xx_t+W_hr_{t-1}+b) gatet=σ(Wxxt+Whrt1+b)
    其中gate代表任何特定的门。因此,新的线性递归LSTM模块可以更有效地使用模型参数。分解的LSTM将LSTM的每个权重矩阵分解为两个较小的矩阵,并将它们提供给两个子向量。然后将各个组的输出合并为最终输出。LSTM组可以使用最少量的参数和更少的收敛时间来实现最新的复杂度。以下式为例:
    ( i t f t o t g t ) = ( ( σ σ σ θ ) T 1 ( x t 1 h t − 1 1 ) , ( σ σ σ θ ) T 2 ( x t 2 h t − 1 2 ) ) \left( \begin{array}{c} i_t\\f_t\\o_t\\g_t \end{array} \right)= \left( \left( \begin{array}{c} \sigma \\ \sigma \\ \sigma \\ \theta \end{array} \right)T^1 \left( \begin{array}{c}x^1_t\\h^1_{t-1}\end{array}\right),\left( \begin{array}{c} \sigma \\ \sigma \\ \sigma \\ \theta \end{array} \right)T^2 \left( \begin{array}{c}x^2_t\\h^2_{t-1}\end{array}\right)\right) itftotgt=σσσθT1(xt1ht11),σσσθT2(xt2ht12)
    与原始大矩阵相比,分解后的矩阵 T 1 T^1 T1 T 2 T^2 T2总共少了2倍的参数。受ResNet的启发,Wu等人在其八层LSTM中添加了残差连接,用于进行机器翻译。根据他们的实验,一个简单的堆叠LSTM网络只需要四层就可以很好地工作。跳接RNN是一种类似但不同的方法,其中跳过连接被显式添加到RNN图中,以通过允许非连续时间步之间的直接信息传输来提高性能。在Grid LSTM中,LSTM单元排列在三维网格中:序列的时间维,网络的垂直维和深度。Grid LSTM在多维状态投影中堆叠层,具有灵活的权重分配,也就是说,权重可以沿任何单个维度甚至所有维度共享。整个网络可以应用于处理图像等高维数据。张量化的RNN和LSTM将隐藏状态表示为张量,并通过跨层卷积对其进行更新。通过增加张量大小并在张量中的不同位置共享参数,可以在不增加参数的情况下有效地扩展网络。这里需要强调的是,它们将中间状态数据张量化,而不是权值化,以简化计算,此外,还使用参数共享而不是分解(将在III-C节中介绍),以便将层间拓扑结构更改。具体地,以RNN为例,可以将输入激活向量 ( W x x t + b x ) ∈ R M (W_xx_t+b_x)\in \mathbb{R}^M (Wxxt+bx)RMP(堆叠层数)隐藏状态向量 h t p ∈ R M h^p_t\in \mathbb{R}^M htpRM串联成 H t c a t ∈ R ( P + 1 ) × M H^{cat}_t\in \mathbb{R}^{(P+1)\times M} HtcatR(P+1)×M。然后可以以共享格式将相应的循环权重定义为 W h ∈ R K × M × M W_h\in \mathbb{R}^{K\times M\times M} WhRK×M×M,其中K称为核大小。最后,可以通过跨层卷积函数更新隐藏状态
    H t = θ ( H t − 1 c a t ⊛ W h , b h ) H_t=\theta (H^{cat}_{t-1}\circledast {W_h,b_h}) Ht=θ(Ht1catWh,bh)
    其中 b h ∈ R M b_h\in \mathbb{R}^M bhRM表示偏置向量。
    通常,网络级别的紧凑型RNN更加关注LSTM单元与整个网络体系结构之间的拓扑,而不是单个单元的边界。所提及的一些示例在图8中示出。实质上,在单元级别和网络级别上的紧凑设计没有相互冲突,也就是说,可以设计一个单元简洁、网络结构紧凑的RNN模型。但是,实际证据仍然缺乏。我们假设单元和层之间存在耦合效应。因此,如果一个紧凑的RNN单元在单元级别已经很紧凑,那么我们压缩网络级冗余的空间可能就很小。无论如何,我们希望未来的研究可以得出最终结论,以证实这一点或通过充分利用不同级别的技术来开发新的紧凑型RNN。
    Fig_8
  2. 神经网络架构搜索:略

C. 张量分解

4. 神经网络压缩:硬件

5. 总结与讨论

本科毕业论文-文献翻译

本次翻译的两篇论文为:

  1. Sze V, Chen Y H, Yang T J, et al. Efficient processing of deep neural networks: A tutorial and survey[J]. Proceedings of the IEEE, 2017, 105(12): 2295-2329.
  2. Deng L, Li G, Han S, et al. Model Compression and Hardware Acceleration for Neural Networks: A Comprehensive Survey[J]. Proceedings of the IEEE, 2020, 108(4): 485-532.

因为论文里公式较多,使用了Markdown作为原始编辑格式,随后使用Pandoc转换为Microsoft Worddocx格式并按照学校要求的论文格式排版提交。

在翻译过程中,译者力争将论文内容翻译准确易懂,如文中的英文专有名词翻译为业内通用中文专有名词,但由于自身局限性造成翻译不当等瑕疵之处,还请读者批评指正。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值