曹士杰 张宸作者

细粒度稀疏也能取得高加速比:神经网络模型压缩与加速的新思路

编者按: 深度神经网络人工智能在多个领域获得了极大的进步,但随着模型日益变大、变复杂,深度神经网络的低延迟推理对应用落地来说至关重要。为此,微软亚洲研究院系统与网络组从模型的稀疏性入手解决计算力需求增长与供应之间的矛盾,通过利用权重稀疏性(weight sparsity)和特征图稀疏性(feature map sparsity)同时达到高准确率,高模型压缩率和加速比。

当前人工智能在图像、语音等领域取得的成功很大程度上归功于大型多层的深度神经网络模型。为了达到更好的效果或解决更复杂的问题,这些模型还在日益变大、变复杂。然而,在人工智能的多数应用领域,例如机器翻译语音识别、自动驾驶等等,用户对人工智能系统的响应速度都非常敏感,有些甚至关乎生命安全。因此深度神经网络的低延迟推理是人工智能应用落地场景中一个非常关键的问题

为了解决计算需求不断增长的问题,学术界和工业界都进行了大量的努力。一个直接的方法是通过定制化专用计算硬件(例如GPU、FPGA、ASIC),通过对深度神经网络进行领域特定体系结构设计(domain specific architecture design)提升神经网络的计算效率和速度,例如GPU中的Tensor Cores和 TPU中基于脉动阵列的矩阵乘法单元。然而,这种方法仍然满足不了日益增长的需求,深度学习模型还在增大,同时对于很多部署在移动端的AI应用,因为受到功耗和电源供应的限制,移动端处理器计算力的增长更是相对缓慢。

于是,我们希望用另一个方法解决计算力需求增长与供应之间的矛盾:模型的稀疏性。许多实验证明,神经网络模型都是过参数化的(over-parameterized),许多参数都是冗余的,恰当的删除这些参数对模型最终的结果几乎没有影响。模型剪枝(model pruning)就是一个很好的例子。神经网络中存在很多数值为零或者数值接近零的权值,合理的去除这些“贡献”很小的权值,再经过对剩余权值的重训练微调,模型可以保持相同的准确率。对于很多神经网络来说,剪枝能够将模型大小压缩10倍以上,这就意味着可以减少10倍以上的模型计算量,结合定制硬件的计算力提升,最终可能达到更高的性能提升。 

尽管听起来非常美好,现实并不尽如人意。模型剪枝带来的的稀疏性,从计算特征上来看非常的“不规则”,这对计算设备中的数据访问和大规模并行计算非常不友好。例如对GPU来说,我们使用cuSPARSE稀疏矩阵计算库来进行实验时,90%稀疏性(甚至更高)的矩阵的运算时间和一个完全稠密的矩阵运算时间相仿。也就是说,尽管我们知道绝大部分的计算是浪费的(90%稀疏性意味着性能提升的上限是10倍),却不得不忍受“不规则”带来的机器空转和消耗。

顺着这个思路,许多研究开始探索通过给神经网络剪枝添加一个“规则”的约束,使得剪枝后的模型更加适合硬件计算,但这种方法通常会牺牲模型的准确率和压缩比。我们认为 “非规则”的剪枝契合了神经网络模型中不同大小权值的随机分布,这对深度学习模型的准确度至关重要。而这种随机分布是深度学习模型为了匹配数据特征,通过训练后所得到的固有结果,为了迎合计算需求而设定的特定稀疏分布会增加破坏模型表达能力的风险,降低模型的准确度和压缩比。大量的实验也验证了这个观点。

从计算的角度来看,“随机”与“规则”是一对矛盾的概念,非此即彼。如果要两者兼顾,就不得不各自有所损失。然而,我们认为 “随机”是特征上的随机和权值分布上的随机,并不完全等于计算上的随机。模型剪枝中特征上的“随机”与计算上的“规则”并不是一个绝对矛盾的概念,这就给调和这一对矛盾提供了空间,让我们得以取得既快又准的稀疏化模型。我们提出了一种在特征上“ 随机”但非常适合FPGA与GPU计算的稀疏化方法,并验证了其数学上与非规则稀疏的相似性。相关论文发表在FPGA 2019 和 AAAI 2019。

另一方面,神经网络的稀疏性并不仅仅存在于参数中,我们进一步探索了深度神经网络中特征图(每层神经网络的输入输出)的稀疏性,例如图像中的背景等对当前任务不重要的感知域,经过激活函数(如ReLU)后未被激活的部分特征图等。这意味着人工神经网络神经元并不会对每一张图像都产生响应。通过在主流模型和数据集上的实验,我们发现,尽管不同层展现出的稀疏性各不相同,特征图的稀疏性平均超过了50%,有一些层甚至高达95%。然而与模型剪枝不同的是,特征图响应的稀疏性是随着每一张输入图像动态变化的,因此对加速提出了更多的挑战。我们在CVPR 2019的工作提出了一种创新的方法利用特征图的稀疏性

Bank-Balanced Sparsity(BBS):高模型准确率且硬件友好的块平衡稀疏模式

权值剪枝是一种非常有效的对深度神经网络引入稀疏性的方法。权值剪枝一般使用预先定义好的阈值来指导对权值的剪枝,绝对值小于这个阈值的权重将会被丢弃。完成剪枝后,模型的准确率会有所下降,通过重训练和微调剩余权重可以恢复模型的准确率。这种对每一个独立权值进行剪枝的方法称为细粒度剪枝(fine-grained pruning),这种方法可以在不损失模型准确率的情况下压缩网络模型大小。但是对于硬件计算来说,细粒度剪枝的一个缺点是将权值矩阵变成了不规则的稀疏矩阵,例如图1中最左侧的权值矩阵所示(这里我们以全连接层为例)。稀疏矩阵运算虽然需要更少的绝对计算量,但是不规则的内存访问和计算模式会增加存储访问延迟,破坏计算的并行性。后续的研究工作提出了粗粒度的剪枝方法(coarse-grained pruning),这种方法以block为剪枝对象,用block的平均值或最大值来代表整个block的重要性,例如图1示例中以2,3,4位block size。粗粒度剪枝方法使得权值矩阵更加规则,更加有利于硬件加速,但难以达到和细粒度剪枝相同的模型准确率或稀疏度(即相同稀疏度时,准确率低;相同准确率时,稀疏度低)。因此对于深度神经网络中权值的稀疏性来说,存在模型准确率和硬件加速比的权衡。

图1:不同剪枝方法对应的权值矩阵

Bank-Balanced Sparsity 

在这项工作中,我们思考了如何在稀疏神经网络中同时实现高模型准确率和高硬件执行效率,提出了Bank-balanced sparsity, 即块平衡稀疏,简称 BBS,一种用于模型剪枝的、可保持高模型准确率且硬件友好的稀疏模式。

我们首先介绍块平衡剪枝方法,如图2所示。对于一个稠密权值矩阵,我们首先将矩阵中的每一行分割成多个大小相同的bank。然后在每一行的每一个bank中采用细粒度剪枝方法。同时为了使每一个bank达到相同的稀疏度,对每一个bank的细粒度剪枝均采用相同的百分比作为阈值。图2示意了块平衡剪枝先对bank进行切分后,对每一个bank进行细粒度剪枝的过程。

图2:块平衡剪枝方法框架图

由于我们在每个bank内使用细粒度剪枝,因此能够很大程度地保留那些数值较大的权值,保持权值的随机分布,从而保持高模型准确率。同时这种方法得到的稀疏矩阵模式将矩阵进行了平衡的分割,这有利于硬件解决不规则的内存访问,并对矩阵运算实现高并行度。

可达到的模型准确率和稀疏度

为了验证块平衡稀疏的效果,我们可视化了使用块平衡剪枝后的权值分布,并和细粒度剪枝和粗粒度剪枝后得到的稀疏模式进行了比较,如图3所示。图中三个示例所选取的是相同的一块权值矩阵,并达到了相同的稀疏度。结果显示,块平衡稀疏的模式非常接近于细粒度剪枝后的无结构限制的稀疏模式。而粗粒度剪枝因为限制了非零权值的位置,所以稀疏模式有很大的不同。

图3:细粒度剪枝(a)、块平衡剪枝(b)和粗粒度剪枝(c)后得到的稀疏模式对比

同时我们也验证了该方法分别在RNN和CNN模型上所能达到的准确率和稀疏度,如图4所示的LSTM模型在PTB数据集上使用不同的稀疏模式的准确率和稀疏度。图中,块平衡稀疏和非结构化稀疏的准确率-稀疏度曲线是非常接近的,在不降低模型准确率的情况下都可以达到80%的稀疏度,表明块平衡稀疏可以达到和非结构话稀疏几乎相同的模型压缩效果。而结构化稀疏在不降低模型准确率的情况下只能达到40%的稀疏度,在相同稀疏度的情况下,与非结构化稀疏和块平衡稀疏相比模型准确率更低。

图4:LSTM模型在PTB数据集上使用不同的稀疏模式的准确率和稀疏度

硬件加速器设计

由于块平衡稀疏具有天然的行平衡和块平衡特性,我们可以为之设计一种高并行的稀疏矩阵运算加速器。在块平衡稀疏模式中,权值矩阵的每一行和每一块都有相同数目的非零权值。因此当我们按照行和块去切分矩阵,并将其对应的计算映射到并行的硬件模块或线程时,负载均衡被自然保证。同时,在上述并行计算的过程中,每一个块内有且只有一个权值元素需要内存访问其对应被乘元素(如特征图中的对应元素)。因此我们采用了分块的存储器设计来缓存这些特征元素,来消除内存访问冲突,最大化利用存储带宽。在分块的存储器设计中,每一个memory bank都有一个独立的内存访问随机访问接口,因此可以支持每个时钟周期同时随机访问多个内存地址。

我们分别将上述硬件加速器设计方法实现在了FPGA和GPU中。基于FPGA的加速器针对的是batch size 为1的LSTM网络推断,如图5所示。设计核心是一个高并行度的稀疏矩阵向量乘法加速单元。相比于之前的基于FPGA的LSTM加速器,BBS加速器实现了7.0-34.4倍的延迟降低和2.3-3.7倍的能效提升。

图5:稀疏矩阵运算加速器框架图

基于GPU的加速器设计充分利用了GPU体系结构中,shared memory也是分块组织的。因此我们也将该加速器设计映射到了多线程的cuda实现。实验结果表明,相较于非机构化稀疏和结构化稀疏,块平衡稀疏模式和定制的GPU实现达到了更好的硬件加速与模型准确率之间的平衡。

图6:PTB数据集中不同稀疏模式下的模型准确率和推理时间

相关研究成果已发表在FPGA 2019和AAAI 2019。更多细节请参考论文:

Efficient and Effective Sparse LSTM on FPGA with Bank-Balanced Sparsity. 

Shijie Cao, Chen Zhang, Zhuliang Yao, Wencong Xiao, Lanshun Nie, Dechen Zhan, Yunxing Liu, Ming Wu, Lintao Zhang. (FPGA 2019). 

论文链接:https://www.microsoft.com/en-us/research/uploads/prod/2019/05/FPGA2019_final.pdf

Balanced Sparsity for Efficient DNN Inference on GPU. 

Zhuliang Yao, Shijie Cao, Wencong Xiao, Chen Zhang and Lanshun Nie. (AAAI 2019).

论文链接:https://arxiv.org/abs/1811.00206

SeerNet:通过低比特量化方法预测卷积神经网络的特征图稀疏性

这篇论文关注的是卷积神经网络中输出特征图的稀疏性。例如,在卷积神经网络中,每个卷积层后通常会连接ReLU层或者Max-pooling层。经过ReLU或Max-pooling层后,卷积层的大部分输出被置为零或丢弃。从计算的角度考虑,如果能够省略零值输出和丢弃输出所对应的先导卷积计算,则可以大大减少卷积层的计算量。

由此我们提出了SeerNet。“Seer” 是“预见/先知”,文如其名,我们利用极低比特网络以极低的代价预测输出特征稀疏性,通过稀疏的高精度计算加速神经网络计算。SeerNet可以直接应用于预训练好的模型中,而无需对原始模型做任何修改或重训练。图7简述了本文的核心思想,对于每层卷积神经网络,首先使用量化后的低比特(例如4比特,2比特,1比特)网络预测输出特征的稀疏分布,然后利用稀疏分布信息引导原始精度的模型推理,即只进行有效输出(非零输出)所对应的卷积计算。

图7:SeerNet模型框架图

通过针对硬件优化的稀疏算法设计,本文基于CPU的实现在卷积层上取得了最高5.79x的加速,并且在端到端的模型推理中取得1.2x-1.4x的加速。同时,由于新型的AI硬件对混合精度的计算提供了更好的支持,SeerNet会有更大的用武之地,例如NVIDIA最新发布的Turing架构支持16/8/4-bit 混合精度张量计算单元,Xilinx和Altera的FPGA提供了任意精度整数计算的支持。这些硬件平台对低比特操作的支持可以降低预测过程的额外开销,同时定制的算法和体系结构可以最大化地加速稀疏计算。

图8:SeerNet在ResNet和VGG的不同层取得的sparsity和speedup

相关研究成果已经发表在CVPR 2019。更多细节请参考论文:

SeerNet: Predicting Convolutional Neural Network Feature-Map Sparsity through Low-Bit Quantization.  

Shijie Cao, Lingxiao Ma, Wencong Xiao, Chen Zhang, Yunxin Liu, Lintao Zhang, Lanshun Nie, Zhi Yang. (CVPR 2019). 

论文链接:https://www.microsoft.com/en-us/research/uploads/prod/2019/05/CVPR2019_final.pdf

微软研究院AI头条
微软研究院AI头条

专注科研19年,盛产黑科技

理论深度神经网络神经网络模型压缩神经网络模型
2
相关数据
微软亚洲研究院机构

微软亚洲研究院于1998年在北京成立,是微软公司在亚太地区设立的基础及应用研究机构,也是微软在美国本土以外规模最大的一个研究院。微软亚洲研究院从事自然用户界面,智能多媒体,大数据与知识挖掘,人工智能,云和边缘计算,计算机科学基础等领域的研究,致力于推动计算机科学前沿发展,着眼下一代革命性技术的研究,助力微软实现长远发展战略。通过与微软产品部门紧密合作,微软亚洲研究院将众多创新技术转移到了微软的核心产品中,如Office、Windows、Azure、Bing、Visual Studio、Xbox Kinect以及小冰、Cortana和Microsoft Translator等人工智能产品。

https://www.msra.cn/
微软机构

微软是美国一家跨国计算机科技公司,以研发、制造、授权和提供广泛的计算机软件服务为主。总部位于美国华盛顿州的雷德蒙德,最为著名和畅销的产品为Microsoft Windows操作系统和Microsoft Office办公室软件,以及Xbox的游戏业务。微软是美国《财富》杂志2015年评选的世界500强企业排行榜中的第95名。

https://www.microsoft.com/en-us/about
深度学习技术

深度学习(deep learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。 深度学习是机器学习中一种基于对数据进行表征学习的算法,至今已有数种深度学习框架,如卷积神经网络和深度置信网络和递归神经网络等已被应用在计算机视觉、语音识别、自然语言处理、音频识别与生物信息学等领域并获取了极好的效果。

激活函数技术

在 计算网络中, 一个节点的激活函数定义了该节点在给定的输入或输入的集合下的输出。标准的计算机芯片电路可以看作是根据输入得到"开"(1)或"关"(0)输出的数字网络激活函数。这与神经网络中的线性感知机的行为类似。 一种函数(例如 ReLU 或 S 型函数),用于对上一层的所有输入求加权和,然后生成一个输出值(通常为非线性值),并将其传递给下一层。

权重技术

线性模型中特征的系数,或深度网络中的边。训练线性模型的目标是确定每个特征的理想权重。如果权重为 0,则相应的特征对模型来说没有任何贡献。

感知技术

知觉或感知是外界刺激作用于感官时,脑对外界的整体的看法和理解,为我们对外界的感官信息进行组织和解释。在认知科学中,也可看作一组程序,包括获取信息、理解信息、筛选信息、组织信息。与感觉不同,知觉反映的是由对象的各样属性及关系构成的整体。

VGG技术

2014年,牛津大学提出了另一种深度卷积网络VGG-Net,它相比于AlexNet有更小的卷积核和更深的层级。AlexNet前面几层用了11×11和5×5的卷积核以在图像上获取更大的感受野,而VGG采用更小的卷积核与更深的网络提升参数效率。VGG-Net 的泛化性能较好,常用于图像特征的抽取目标检测候选框生成等。VGG最大的问题就在于参数数量,VGG-19基本上是参数量最多的卷积网络架构。VGG-Net的参数主要出现在后面两个全连接层,每一层都有4096个神经元,可想而至这之间的参数会有多么庞大。

人工智能技术

在学术研究领域,人工智能通常指能够感知周围环境并采取行动以实现最优的可能结果的智能体(intelligent agent)

参数技术

在数学和统计学裡,参数(英语:parameter)是使用通用变量来建立函数和变量之间关系(当这种关系很难用方程来阐述时)的一个数量。

剪枝技术

剪枝顾名思义,就是删去一些不重要的节点,来减小计算或搜索的复杂度。剪枝在很多算法中都有很好的应用,如:决策树,神经网络,搜索算法,数据库的设计等。在决策树和神经网络中,剪枝可以有效缓解过拟合问题并减小计算复杂度;在搜索算法中,可以减小搜索范围,提高搜索效率。

张量技术

张量是一个可用来表示在一些矢量、标量和其他张量之间的线性关系的多线性函数,这些线性关系的基本例子有内积、外积、线性映射以及笛卡儿积。其坐标在 维空间内,有 个分量的一种量,其中每个分量都是坐标的函数,而在坐标变换时,这些分量也依照某些规则作线性变换。称为该张量的秩或阶(与矩阵的秩和阶均无关系)。 在数学里,张量是一种几何实体,或者说广义上的“数量”。张量概念包括标量、矢量和线性算子。张量可以用坐标系统来表达,记作标量的数组,但它是定义为“不依赖于参照系的选择的”。张量在物理和工程学中很重要。例如在扩散张量成像中,表达器官对于水的在各个方向的微分透性的张量可以用来产生大脑的扫描图。工程上最重要的例子可能就是应力张量和应变张量了,它们都是二阶张量,对于一般线性材料他们之间的关系由一个四阶弹性张量来决定。

机器翻译技术

机器翻译(MT)是利用机器的力量「自动将一种自然语言(源语言)的文本翻译成另一种语言(目标语言)」。机器翻译方法通常可分成三大类:基于规则的机器翻译(RBMT)、统计机器翻译(SMT)和神经机器翻译(NMT)。

神经网络技术

(人工)神经网络是一种起源于 20 世纪 50 年代的监督式机器学习模型,那时候研究者构想了「感知器(perceptron)」的想法。这一领域的研究者通常被称为「联结主义者(Connectionist)」,因为这种模型模拟了人脑的功能。神经网络模型通常是通过反向传播算法应用梯度下降训练的。目前神经网络有两大主要类型,它们都是前馈神经网络:卷积神经网络(CNN)和循环神经网络(RNN),其中 RNN 又包含长短期记忆(LSTM)、门控循环单元(GRU)等等。深度学习是一种主要应用于神经网络帮助其取得更好结果的技术。尽管神经网络主要用于监督学习,但也有一些为无监督学习设计的变体,比如自动编码器和生成对抗网络(GAN)。

卷积神经网络技术

卷积神经网路(Convolutional Neural Network, CNN)是一种前馈神经网络,它的人工神经元可以响应一部分覆盖范围内的周围单元,对于大型图像处理有出色表现。卷积神经网路由一个或多个卷积层和顶端的全连通层(对应经典的神经网路)组成,同时也包括关联权重和池化层(pooling layer)。这一结构使得卷积神经网路能够利用输入数据的二维结构。与其他深度学习结构相比,卷积神经网路在图像和语音识别方面能够给出更好的结果。这一模型也可以使用反向传播算法进行训练。相比较其他深度、前馈神经网路,卷积神经网路需要考量的参数更少,使之成为一种颇具吸引力的深度学习结构。 卷积网络是一种专门用于处理具有已知的、网格状拓扑的数据的神经网络。例如时间序列数据,它可以被认为是以一定时间间隔采样的一维网格,又如图像数据,其可以被认为是二维像素网格。

准确率技术

分类模型的正确预测所占的比例。在多类别分类中,准确率的定义为:正确的预测数/样本总数。 在二元分类中,准确率的定义为:(真正例数+真负例数)/样本总数

映射技术

映射指的是具有某种特殊结构的函数,或泛指类函数思想的范畴论中的态射。 逻辑和图论中也有一些不太常规的用法。其数学定义为:两个非空集合A与B间存在着对应关系f,而且对于A中的每一个元素x,B中总有有唯一的一个元素y与它对应,就这种对应为从A到B的映射,记作f:A→B。其中,y称为元素x在映射f下的象,记作:y=f(x)。x称为y关于映射f的原象*。*集合A中所有元素的象的集合称为映射f的值域,记作f(A)。同样的,在机器学习中,映射就是输入与输出之间的对应关系。

神经元技术

(人工)神经元是一个类比于生物神经元的数学计算模型,是神经网络的基本组成单元。 对于生物神经网络,每个神经元与其他神经元相连,当它“兴奋”时会向相连的神经元发送化学物质,从而改变这些神经元的电位;神经元的“兴奋”由其电位决定,当它的电位超过一个“阈值”(threshold)便会被激活,亦即“兴奋”。 目前最常见的神经元模型是基于1943年 Warren McCulloch 和 Walter Pitts提出的“M-P 神经元模型”。 在这个模型中,神经元通过带权重的连接接处理来自n个其他神经元的输入信号,其总输入值将与神经元的阈值进行比较,最后通过“激活函数”(activation function)产生神经元的输出。

语音识别技术

自动语音识别是一种将口头语音转换为实时可读文本的技术。自动语音识别也称为语音识别(Speech Recognition)或计算机语音识别(Computer Speech Recognition)。自动语音识别是一个多学科交叉的领域,它与声学、语音学、语言学、数字信号处理理论、信息论、计算机科学等众多学科紧密相连。由于语音信号的多样性和复杂性,目前的语音识别系统只能在一定的限制条件下获得满意的性能,或者说只能应用于某些特定的场合。自动语音识别在人工智能领域占据着极其重要的位置。

深度神经网络技术

深度神经网络(DNN)是深度学习的一种框架,它是一种具备至少一个隐层的神经网络。与浅层神经网络类似,深度神经网络也能够为复杂非线性系统提供建模,但多出的层次为模型提供了更高的抽象层次,因而提高了模型的能力。

暂无评论
暂无评论~