基于多粒度的深度神经网络结构化稀疏系统和方法与流程

文档序号:18756415发布日期:2019-09-24 22:29阅读:165来源:国知局
基于多粒度的深度神经网络结构化稀疏系统和方法与流程
本发明涉及深度神经网络的模型和算法,具体为基于多粒度的深度神经网络结构化稀疏系统和方法。
背景技术
:随着人工智能技术的快速发展,目前已越来越多地适用于实际生产和生活上。当前,人工智能正逐渐发展为新一代通用技术,加快与经济社会各领域渗透融合,已在医疗、金融、安防、教育、交通、物流等多个领域实现新业态、新模式和新产品的突破式应用,带动生产流程、产品、信息消费和服务业的智能化、高附加值转型发展。但是,人工智能技术的优异成就,伴随着巨大的计算负荷。其核心算法之一的深度神经网络,对每个输入需要进行上亿次运算,对硬件计算平台提出了巨大的挑战。为了能够真正地将人工智能技术部署到我们身边各种设备,原来复杂的神经网络模型必须进行精简,同时硬件计算平台也需有专门的特殊设计与优化,以适配这种特殊而复杂的计算模型。为了能够灵活而高效地应对不同的模型和使用场景,传统的计算平台例如cpu(中央处理单元)和gpu(图像处理单元)等,不足以满足使用需求。主要体现在两方面,一方面是计算量/并行性的瓶颈,另一方面是功耗的瓶颈。不同的模型都具有很大的运算量,主要集中在卷积计算的阶段,而在传统的cpu平台上,并行设计一般通过多发射、多核等方法实现,一般计算单元的数量有限,面向神经网络这样特殊的计算框架,计算速度很难达到设备的要求。对于gpu计算平台,虽然它们有很良好的并行性,但是功耗颇大,一般达到上百瓦的量级,不适合在边缘端进行部署;在进行简化后的算法和系统的准确性和稳定性无法满足深度神经网络的使用需求。技术实现要素:针对现有技术中存在的问题,本发明提供基于多粒度的深度神经网络结构化稀疏系统和方法,结构框架简单明晰,设计合理,消耗功耗低,处理速度快,准确性和稳定性满足深度神经网络的使用需求。本发明是通过以下技术方案来实现:基于多粒度的深度神经网络结构化稀疏方法,包括如下步骤,步骤1,对深度神经网络中网络卷积层的输入和权值的量化操作;使用三值网络量化的方法对权重进行表示,同时使用8比特量化深度神经网络的激活输入;所述的三值网络量化时使用-1,+1和0来表示权重,所述的8比特量化时对原始数据和输出数据均采用8比特定点量化,中间临时结果采用16比特量化;步骤2,对深度神经网络中网络卷积层的结构性剪枝;分别进行通道剪枝、滤波器剪枝和滤波器内部权重特殊样式剪枝处理;通过对网络卷积层中输出特征图的去除,实现对应通道剪枝;通过去除特征图之间的部分连接,实现对应滤波器剪枝;若滤波器内部权重特征图的零值具备基本图案或基本图案的旋转或两种及以上基本图案交集的需求,则进行滤波器内部特殊样式剪枝。优选的,利用relu得到的激活输入的稀疏;激活输入通过多播形式广播到多个运算单元,使得运算单元之间在激活输入层级上保持彼此的平衡,当某个激活输入为零值,经过识别模块后16个运算单元都可以同时跳过该激活输入对应的运算周期。优选的,步骤2中,所述的通道剪枝和滤波器剪枝后,最终的通道数为16的整数倍,保持计算单元之间数据负载的平衡性。优选的,步骤2中,利用bn层中的放缩因子,来评价对应通道的重要性,放缩因子越小,对应通道特征图的激活输出相关数据越小,根据通道的剪枝需求从小到大进行剪枝去掉,即对剪枝的通道特征图直接置零。优选的,步骤2中,滤波器剪枝时,先对输出特征图进行分组,然后分别对应连接相同数量的输入特征图,不同输出特征图对应连接不同的输入特征图。优选的,步骤2中,所述的基本图案呈九宫格设置,包括如下四种基本形状:四个零值分别位于九宫格四角;四个零值中两个为一组,两组位于对角呈中心对称设置;四个零值中两个为一组,两组位于邻角呈镜面对称设置;四个零值相互相邻呈正方形四角。优选的,利用交替方向乘子法admm,将步骤1中的量化与步骤2中不同粒度的通道层次剪枝和滤波器内权重剪枝在统一的框架中进行深度神经网络结构化稀疏。进一步,利用交替方向乘子法admm,利用通道层次剪枝和滤波器内权重剪枝同时剪枝进行压缩时,将权重限制在几种不同的限制集合中,分别定义si为稀疏的限制集合,s′i为量化的限制集合;同时,通过示性函数来将两种限制集引入深度神经网络的损失方程gi和hi中,即:以及在admm压缩框架中,联合优化权重和激活层的稀疏,以及权重和激活层的量化四种不同的冗余性,得到的压缩问题如下:subjecttowi∈si,wi∈s′i,i=1,…,n;在上述公式中,分别对应深度神经网络各层的权重,偏置量,被剪枝及量化前的激活层输出和被剪枝及量化后的激活层输出;原relu方程经过激活层剪枝后为称为relu`,q代表提前决定好量化位数的作用于激活层输出的量化方程;激活层输出的剪枝通过调整relu方程自带的阈值实现,采用ste算法训练拥有激活层量化的深度神经网络。基于多粒度的深度神经网络结构化稀疏系统,采用上述任意一项所述的方法,包括稀疏计算主控模块、sram存储系统、激活输入本地寄存器、偏置及权重本地寄存器、输入通道分配器以及若干进行并行计算的稀疏计算模块;所述的sram存储系统用于面向多粒度的深度神经网络结构化稀疏,包括滤波器索引sram、偏置sram、权重sram、数据sram和控制上述sram的存储控制器;激活输入经数据sram输入到激活输入本地寄存器;偏置和权重经偏置sram和权重sram输入到偏置及权重本地寄存器;输入通道分配器内设置有对激活输入进行选择的数据选择器,输入通道分配器的输入端连接激活输入本地寄存器的输出端,用于滤波器层次的剪枝适配性计算;稀疏计算模块中导入偏置及权重本地寄存器内的偏置和权重,输入端分别连接输入通道分配器的输出端,用于滤波器内部权重特殊样式剪枝适配性计算;输出端经多级加法器输出数据到数据sram进行存储;稀疏计算主控模块包括稀疏通道卷积计算控制器、配置字存储单元和滤波器连接索引单元;滤波器连接索引单元中的滤波器连接索引信息由滤波器索引sram提供;稀疏通道卷积计算控制器根据配置字存储单元中的配置信息和滤波器连接索引单元中的滤波器连接索引信息,分别对存储控制器、输入通道分配器和多级加法器进行存储、输入和输出控制,从而标记和识别输入和输出特征图之间的稀疏连接关系。优选的,所述的稀疏计算主控模块,在每层开始计算之前,首先初始化导入该层计算所对应的配置与控制信息,对硬件的计算流进行重构配置。与现有技术相比,本发明具有以下有益的技术效果:本发明将三个粒度层次的权重剪枝以及激活输入的稀疏结合起来进行算法优化和系统架构,能够高效地将深度神经网络部署到边缘设备,在低能耗约束条件下取得可观的性能。通过结合通道层次、滤波器层次和滤波器内剪枝三个层次,同时考虑硬件并行计算的约束,使得通道剪枝和滤波器剪枝的结果,其数目为16的倍数;对于滤波器内的剪枝,通过算法优化使得其形状满足特定要求,从而能够实现在硬件约束下的多粒度剪枝;通过三值网络进行低比特量化,并且与后续的剪枝相结合,不仅保证有可观的准确性和稳定性,还可以很好地实现无乘法器的设计,从而实现低功耗的目的;同时考虑将激活输入进行8比特量化而不使用32比特浮点数,从而实现数据存储的压缩与电路的简化。进一步的,通过将剪枝与三值网络量化的结合剪枝与量化相结合,同时利用admm技术的分析框架,将剪枝与量化有整体性地实现,保证了其对精度和稳定性的要求。本发明所述的系统中,在控制逻辑部分通过多层次的控制与配置指令,简单而高效地对每层计算予以控制,从而避免全部控制交给主控端或者全部逻辑交给加速器本身,提高了整体系统的工作效率和降低了设计难度。附图说明图1为本发明实例中所述多粒度的结构化稀疏方法流程示意图。图2为本发明实例中所述结构性剪枝的示意图。图3为本发明实例中所述滤波器内部剪枝时的四种基本样式。图4为本发明实例中所述分组平衡的滤波器剪枝。图5为本发明实例中所述在gemm框架中对结构性剪枝的描述。图6为本发明实例中所述平衡激活输入工作负载的数据流模式。图7为本发明实例中所述基于配置字的多级配置框架示意图。图8为本发明实例中所述多粒度的结构化稀疏系统框架示意图。具体实施方式下面结合具体的实施例对本发明做进一步的详细说明,所述是对本发明的解释而不是限定。本发明基于多粒度的深度神经网络结构化稀疏方法,如图1所示,包括对深度神经网络中网络卷积层的如下两步操作,一步是结构性剪枝,另一步是分别对输入和权值的量化;其中结构性剪枝包括三个粒度的剪枝处理,即通道剪枝、滤波器剪枝和滤波器内部特殊样式剪枝处理;对输入和权值的量化包括使用三值(ternary)网络量化的方法对权重进行表示,使用8比特量化深度神经网络的激活输入(activation)。其中,面向深度神经网络模型结构冗余的技术称为剪枝(pruning),面向解决深度神经网络数据表达冗余的技术称为量化(quantization)。本发明基于多粒度的深度神经网络结构化稀疏系统,利用低位宽(2比特)数据表征方式,实现计算单元的简化与存储负担的减小,同时确保算法模型的准确性和稳定性,从而设计出一个灵活、高效、低功耗的面向人工智能应用的计算平台。将与算法优化所带来的特殊数据流相适配,从而可以将算法优化带来的效果得到尽可能的发挥。如图8所示,本发明所述系统由面向多粒度稀疏计算的sram存储系统、激活输入本地寄存器、输入通道分配器、稀疏计算主控模块、偏置及权重本地寄存器以及稀疏计算模块构成。在稀疏计算主控模块中,使用多层次的配置字对硬件的整体计算流进行控制;在每层开始计算之前,首先初始化导入该层计算所对应的配置信息,对硬件的计算流进行重构配置,从而高效实现通道层次的剪枝适配性计算。通过激活输入本地寄存器与输入通道分配器结合,可以实现滤波器层次的剪枝适配性计算。通过稀疏计算模块,可以实现滤波器内部权重特殊样式剪枝适配性计算。同时,这两方面的工作不断迭代,这正是软硬件协同设计的核心思想。硬件上的并行性特点对算法优化提供新的约束,同时算法优化的特点要求硬件有新的改进以发挥效力;三值权重量化后能够将硬件中的乘法器更替为简单的选择器。具体的,在剪枝方面,一共有三个层次,第一个层次和第二个层次分别是通道剪枝和滤波器剪枝,如图2所示。图2中显示有网络卷积层,通道剪枝是通过去除第二层l2的第一个特征图实现的,对应线段虚线,通过去除该特征图,可以使得与之相关的所有输入连接和输出连接均去除,这里一共5条连接,粒度最大,剪枝比例最大,同时结构性也更强;剪枝l2中的其他特征图也能够带来相同的效果。因为只需标记该特征图编号即可,在硬件实现起来较为容易。图2中的滤波器剪枝则对应点虚线,它不像通道剪枝直接去除某个特征图,而是通过去除特征图之间的部分连接实现的,粒度相对通道剪枝较小,但是结构性也较强,只需通过标记连接即可,不需要对每个权重都予以标记。第三个层次是滤波器内部特征图特殊样式的剪枝。这一需求主要依赖于硬件的数据并行安排所提出的需求。如图3所示,当滤波器内的零值具备这四种基本图案或它们的旋转或两种及以上的交集,计算耗时即可以有较大的减少。另外,三个层次的剪枝并非一个独立的算法优化工作,需要基于硬件架构的并行性进行约束。在架构的基本框架中,我们设计了以16个输出特征图为一组的并行单元,因此这就对通道剪枝提出了特定的约束,即最终剪枝后的通道应为16个倍数,这样才可以充分利用硬件的计算资源。量化方面,本发明中将使用三值(ternary)网络量化的方法,即使用-1,+1和0来表示权重,同时使用8比特量化激活输入(activation)。所述的系统主要体现在架构设计上,基于软硬件协同设计思想,架构对算法约束的同时,算法也会对硬件有特殊的要求或者改善的机会。主要有以下两点:第一,由于滤波器剪枝的存在,在每一层的计算中,需要有专门的索引值来标记所存储的滤波器属于哪条连接。对于传统的无滤波器剪枝网络来说,它不需要特殊的机制来指示,因为每层网络卷积层的卷积计算的输入和输出特征图总是保持全连接的关系。而在滤波器剪枝的网络中,输入和输出特征图之间的连接是稀疏的。因此我们需要设计专门的存储数据布局以及与之相匹配的识别模块来标记和识别这种连接关系。第二,三值网络给我们的系统架构设计带来了新的简化机会。在传统的网络中,数据为32比特浮点或者8-16比特的定点,这样以来,我们需要有专门的乘法器来进行mac计算。但是在三值网络中,由于权重只有-1,+1和0,因此一个激活输入与之相乘,结果只会有激活输入本身、激活输入和相反数和0。鉴于此,乘法器即可去除,取而代之的只是一个简单的数据选择器。在这样的设计下,逻辑电路本身得到了相当的简化,同时面积也有所减少,另外关键路径也得到了明显的优化,从而有利于提高电路的运行频率,提高计算速度。在三值网络的帮助下,硬件架构可以实现无乘法器的设计,大大地降低了功耗和关键路径的长度,取而代之的是数据选择器,因为三值网络只有+1,-1和0,因此以权重作为数据选择器的选择信号端,直接选择出结果为激活输入、或其相反数或0,从而实现简化的乘法运算。在神经网络模型中,稀疏一共来源于通道层次、滤波器层次、滤波器内部和relu激活函数得到的稀疏化激活输入。在中间两个层次的剪枝上,传统的非结构化方法并不利于并行计算设计,因此它仅仅能通过“时钟门控”来减小功耗,但是很难优化运行时间。因此我们希望通过算法优化,将中间两个层次的剪枝进行结构化优化,从而实现在运行时间和功耗两者共同的优化目标。在通道层级上,因为它本身即具备结构化的特征,因此它可以直接有利于优化运行时间和功耗。通道层次剪枝一般可以利用bn层中的放缩因子,来评价对应通道的重要性,一般来说,放缩因子越小,该特征图的激活输出相关数据越小,因此我们可以将其剪枝去掉,即直接置零。在滤波器层次上,非结构化会带来并行性的缺失,只有当具备一定约束的滤波器层次剪枝才可以最大化发挥效力。如图4所示,左侧圆圈表示输入特征图,右侧圆圈表示输出特征图,中间连线表征不同特征图之间所对应的滤波器连接。原始的情况如图(a)所示,输出和输入特征图之间保持全连接关系(下方两个输出特征图同理,仅无示意出来),经过图(b)的剪枝后,剩下部分的连接(本例中留下一半,即4条连接),且对应相同的输入特征图,以上为一组,即g1。然后对于另外两个输出特征图,同样保持4个连接,但是与g1可以对应不同的4个输入特征图。这样以来,我们可以实现以组为单位的并行计算,同时充分利用剪枝给我们带来运算时间的减少。以上两种层次的剪枝,即通道层次和滤波器层次,示意图可见图5。通过对卷积计算重排为gemm矩阵,可以清晰对应到通道层次剪枝和滤波器剪枝。通道剪枝对应去掉gemm矩阵的一行,滤波器剪枝对应去掉gemm矩阵的一列。通过这两种层次的剪枝,可以大大减小gemm矩阵的规模,从而降低运算时间。在滤波器内部的特定样式形状剪枝中,按照前文图3相关描述进行约束,当滤波器内的零值具备这四种基本图案或它们的旋转或两种及以上的交集,计算耗时即可以有较大的减少。这种层次的剪枝它对应于图5中的gemm矩阵每个点的简化,矩阵中每一个点表示一个滤波器,在这个层次上,可以进一步简化整体的运算规模,从而进一步降低运算时间。利用admm(交替方向乘子法),可实现通道层次剪枝和滤波器内权重剪枝的同时剪枝,同时基本保持推理精度。在本发明中,滤波器内部的形状剪枝是第三层次的剪枝研究,它可以实现多个滤波器保持相同的形状,从而与硬件结合,将可以大幅度提高剪枝下的并行计算效率。最后是利用relu而得到的激活输入的稀疏,这主要利用数据流的设计同时实现了功耗和运算时间的优化。如图6所示,激活输入(即a)通过多播形式广播到多个稀疏计算模块(即pe),不同稀疏计算模块所对应的权重(即w)独立地导入进来。因此通过该数据流,可以使得运算单元之间在激活输入层级上保持彼此的平衡,即一旦当某个激活输入为零值,经过识别模块后16个稀疏计算模块都可以同时跳过该运算周期,从而可以有效地降低运行时间和功耗。基于算法优化给我们带来的要求,基于神经网络计算的基本框架,进行精细的架构设计,其应该满足能够识别出为零的权重和激活输入,从而可以实现跳过相关不必要的周期从而减小耗时或者关闭相关计算单元降低能耗。同时,还需实现对多粒度剪枝的数据流支持,并通过配置字的方式使得硬件具备一定的可重构能力,从而提高其灵活性。量化的软硬件协同设计在量化方面,我们使用三值量化对权重进行量化,这样我们只需要2比特去表征权重参数,相比普通8比特量化数据量减为原来的1/4。同样地,我们主要使用admm对量化进行实现,这种方法有利于在保持比较好的精度下对比特进行尽可能地减少。其中,经过我们研究发现,admm模型压缩框架提供了一种数学上可靠的方法。admm(alternatingdirectionmethodofmultipliers)简称为变换乘子法,通常用于解决以下问题:第一项通常代表一个可导的方程,在此代表的是神经网络的损失方程。第二项通常代表一个不可导的约束方程。使用admm,可以将上述问题转化为下列可用梯度下降法解决的问题。在具体压缩中,我们将权重限制在几种不同的限制集合中。我们分别定义si为稀疏的限制集合,s′i为量化的限制集合。同时,我们通过示性函数来将两种限制集引入神经网络的损失方程中,即:以及在我们的admm压缩框架中,我们联合优化四种不同的冗余性,分别是权重和激活层的稀疏,以及权重和激活层的量化。其问题定义为:subjecttowi∈si,wi∈s′i,i=1,…,n;在上述公式中,分别对应神经网络各层的权重,偏置量,被剪枝及量化前的激活层输出,和被剪枝及量化后的激活层输出。在这个问题中,权重对应的稀疏限制集合为si,权重对应的量化限制集合为s′i。原relu方程经过激活层剪枝后为称为relu`,而q代表提前决定好量化位数的作用于激活层输出的量化方程。激活层输出的剪枝可通过调整relu方程自带的阈值实现,而难点在于训练拥有激活层量化的网络中遇到的后传梯度不准的问题。我们使用经典的算法诸如ste(statethroughestimator)并且将进一步寻找效果更佳的算法来解决这一问题。admm压缩框架在数学上直观,在工程上易复现,并且能够同时处理多种冗余性的优化问题。我们的框架已经在单个冗余性,和多个冗余性达到了业界领先。从表3所示的结果上,我们已经证明了使用admm框架寻找联合冗余性移除方案的优越性。利用admm技术,我们已取得如下表所示的压缩效果:表3:已有稀疏算法进展初步报告网络结构数据集稀疏类型稀疏度acc(top1/top5)baseline(top1/top5)alexnetimagenet非结构性32倍57.6/81.060/82.4resnet18imagenet结构性-卷积形状剪枝2倍69.1/89.169.0/89.0vgg16cifar10结构性-卷积形状剪枝11倍93.592.8在激活输入方面,原始数据和输出数据均采用8比特定点量化,中间临时结果采用16比特量化以保证计算过程中的精度。在每一层的输出前,需要经过一个量化模块。这个模块是用于根据给定的量化模式(即8比特定点数据中,小数点的位置)对16比特的中间数据进行截取,从而最终还原出最终的结果。也就是说,由于每层数据的值域范围、精度需求有所不同,例如有些层需要用更多的比特表示小数部分,有些层则需要用更多比特表示整数部分,因此我们需要用到动态定点的方式表示这些数据。如图7所示,为了能够灵活高效的适配模型和不同层的计算多样性,我们使用多层次的配置字对硬件的整体计算流进行控制。在模型层次中里面主要包含模型整体的信息配置信息,以及各个计算层的配置字包。层配置字包的具体内容对应计算层层次,包含各层的尺寸、输入及输出的通道数,以及用于滤波器层次剪枝计算的连接通道数,另外还包含具体每个操作的配置字包。操作的配置字包对应的则是操作层次,主要指示操作是否需要做池化操作(即pooling),以及对数据的符号、量化形式的描述。在每层开始计算之前,我们会首先初始化导入该层计算所对应的配置信息,对硬件的计算流进行重构配置。我们为了能够高效地进行控制,引入多层级的方案,而非像传统指令那样每条指令是相对处于同一层次的。最后,在硬件架构方面,我们密切跟随算法发展需求,同时积极面向实际生产及生活应用的场景,在支持基本模型的同时,研究适配压缩模型的高效硬件计算平台的架构,同样是针对四个方面的冗余对架构做了专门的设计与优化。针对激活和权重精度的冗余性,我们基于8比特激活和三值权重展开设计,通过将数据选择器来代替传统的乘法器,可大大降低资源开销,同时提高计算速度。中间结果采用16比特来缓存,以使得计算结果的精度得以保证。针对激活数量上的冗余性,我们对激活数据采取多播的数据流方案,在广播前检测激活是否为“非零值”。通过该种方式,可以有效地避免冗余的计算周期,从而有效地提高计算速度,同时也可以降低计算功耗。针对权重数量上的冗余性,我们在三个粒度上对其进行设计与优化。第一个层次是在通道(channel),我们通过片外导入配置字信息,可以灵活地控制具体的计算流,通过改变不同的循环次数,可以高效地适配不同通道剪枝下的计算。第二个层次是在滤波器层次(filter),我们通过对特征图之间的连接进行标记索引,从而来确定稀疏后的权重属于哪部分之间的连接。第三个层次是滤波器内部(weight),我们通过特殊设计的“非零值”检测方案,可以在计算前确定一个卷积窗中的计算哪些周期是有效周期,从而跳过冗余的计算周期,提高计算效率,优化计算时间。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1