用于深度神经网络的加速器的制作方法

文档序号:16852600发布日期:2019-02-12 22:52阅读:418来源:国知局
用于深度神经网络的加速器的制作方法

本说明书大体上涉及神经网络,并且更具体地说,涉及用于深度神经网络(dnn)的加速器,所述加速器通过去除或跳过乘法的输入为零的最无效操作而实现性能和能量的改进。

发明背景

深度神经网络(dnn)是许多识别任务(诸如物体和语音识别)中的最先进的技术。dnn包括层的前馈布置,每个层展现出高计算需求和并行性,所述层通常通过使用图形处理单元(gpu)来利用。然而,dnn的高计算需求和对较高能量效率的需要已激发了专用架构的开发和提出。然而,处理速度继续成为一些dnn设计中的限制因素,尤其是对于较复杂的应用。

因此,此项技术中仍需要改进。



技术实现要素:

根据本发明的方面,提供一种用于深度神经网络的加速器,所述加速器通过去除或跳过最无效操作来实现性能和能量的改进,在所述最无效操作中,乘法的输入为零或在一些实施方案中低于阈值以便接近于零。

根据本发明的实施方案,提供一种用于神经网络中的层的计算的系统,所述系统包括:用于执行神经网络中的计算的一个或多个片,每个片接收输入神经元、偏移和突触并生成输出神经元,其中每个输入神经元具有相关联的偏移;激活存储器,所述激活存储器用于存储神经元并且经由调度器和编码器与所述一个或多个片通信,其中所述调度器从所述激活存储器读取神经元与其相关联的偏移并且将所述神经元与其相关联的偏移传输到所述一个或多个片,并且其中所述调度器从存储器读取突触并且将所述突触传输到所述一个或多个片,并且其中所述编码器从所述一个或多个片接收所述输出神经元、对所述输出神经元进行编码并且将所述输出神经元传输到所述激活存储器;并且其中通过所述片处理所述偏移以便仅对非零神经元执行计算。

根据另一个实施方案,本发明提供一种包括用于在计算神经网络中的层过程中使用的加速器的集成电路,所述集成电路包括:用于执行神经网络中的计算的一个或多个片,每个片接收输入神经元、偏移和突触,其中每个输入神经元具有相关联的偏移并生成输出神经元;激活存储器,所述激活存储器用于存储神经元并且经由调度器和编码器与所述一个或多个片通信,其中所述调度器从所述激活存储器读取神经元与其相关联的偏移并且将所述神经元与其相关联的偏移传输到所述一个或多个片,并且其中所述调度器从存储器读取突触并且将所述突触传输到所述一个或多个片,并且其中所述编码器从所述一个或多个片接收所述输出神经元、对所述输出神经元进行编码并且将所述输出神经元传输到所述激活存储器;并且其中通过所述片处理所述偏移以便仅对非零神经元执行计算。

根据另一个实施方案,本发明提供一种用于在神经网络中执行计算过程中减少无效操作的方法,所述方法包括:识别神经元流中的非零神经元并且为每个神经元产生偏移值;将每个神经元的所述偏移值与所述神经元一起传输到处理所述神经元的所述片;所述片使用所述偏移值来识别所述非零神经元以执行计算;所述片仅对所述非零神经元执行计算并生成输出神经元;以及将输出神经元存储在激活存储器中。

本领域的普通技术人员在结合附图阅读了本发明的实施方案的以下描述之后,根据本申请的其它方面和特征将变成显而易见的。

附图说明

现在将参看附图,所述附图仅举例示出本发明的实施方案以及可以如何将其付诸实践,并且其中:

图1是示出为零的卷积层乘法输入神经元值的平均分数的条形图;

图2a至图2c示出将滤波器应用于输入神经元阵列以产生输出神经元阵列的根据现有技术的步骤;

图3a至图3d示出现有技术的dadiannaodnn加速器的操作;

图4a和图4b示出根据本发明的一个实施方案的神经功能单元中的神经元的处理;

图5a是现有技术的dadiannao神经功能单元(nfu)的图,并且图5b是根据本发明的一个实施方案的单元的图;

图6a是示出现有技术的dadiannao加速器中的处理次序和工作指派的图,并且图6b是示出根据本发明的一个实施方案的加速器中的处理次序和工作指派的图;

图7是示出在本发明的实施方案中使用的无零神经元阵列格式(zfnaf)的图;

图8是根据本发明的一个实施方案的调度器;

图9是卷积神经网络的表格;

图10是示出本发明的实施方案相较于基线的加速的条形图;

图11是示出执行活动的分裂的条形图;

图12是示出基线和根据本发明的一个实施方案的架构的面积分裂的条形图;

图13是示出基线中和根据本发明的一个实施方案的平均功率消耗的分裂的条形图;

图14是示出对于能量延迟积和能量延迟平方积,本发明的一个实施方案相较于dadiannao的改进的条形图;

图15是示出准确性与由剪切神经元导致的加速之间的权衡的图;

图16是示出无损的无效神经元阈值的表格;

图17是根据一个实施方案示出检测和跳过块缓冲器和调度器中的无效激活的图;以及

图18a至图18c示出本发明的另一个实施方案的操作的实例。

相同的附图标记在图式中指示相同或对应的元件。

具体实施方式

深度神经网络(dnn)由于其从复杂的信息片段(诸如文字、图像或语音)提取有意义的特征的极好能力而变成普遍存在的。dnn并且尤其是卷积神经网络(cnn)与可选的物体识别或图像分类算法相比提供非常好的识别质量。dnn受益于在商品计算平台(诸如通用图形处理器)中可用的计算能力。

很可能将来的dnn将需要为更大的、更深的、处理更多输入,并且用于以较快速度(包括实时)来执行比现有dnn更复杂的分类任务。因此,需要改进硬件计算能力,同时减少每操作的能量并且可能这样做以实现较小外形尺寸的装置。

如下文进一步讨论,dadiannao加速器设法通过利用dnn的规则访问模式和计算结构来改进dnn性能。它使用在数百个乘法通道的组中同时操作的宽simd(单指令多数据)单元。

根据一个实施方案,可以通过识别由dnn操作的内容来加速dnn执行。明确地说,由深度神经网络执行的计算的大部分本质上是无效的,因为所述计算涉及输入中的一者为零的乘法。在dnn中由主要计算执行的操作中的平均44%可能属于这个类别。无效操作中的较大比例在不同输入间看起来没有显著改变,表明无效积可能是dnn的固有性质的结果。实施结果对最终结果不会有很大贡献的这些操作浪费了大量的时间、能量和计算资源。

dadiannao加速器的组织不允许神经元通道独立地移动。结果,这类加速器无法利用dnn内容,因为它不能“跳过”零值输入。

如下文更详细地讨论,本发明的实施方案提供一种dnn加速器,所述dnn加速器遵照基于值的方法来动态地去除最无效的操作。这可以在无损准确性的情况下相较于dadiannao加速器改进性能和能量。

本发明的实施方案采用分层数据并行单元,允许通道的组最大程度地独立地行进,使得其能够跳过无效计算。协同设计的数据存储格式存储相关层的输入和输出并对计算去除决定进行编码。这将这些决定从关键路径去除,同时避免数据并行单元中的控制发散。也修改了对数据并行单元的工作指派。组合起来说,所述单元和数据存储格式导致数据并行架构,所述数据并行架构维持对其存储器分层结构的宽的、对准的访问并且独立于输入中的零的分布使其数据通道大多数时间保持繁忙。

一旦跳过零操作数乘法的能力就位,便可以放宽或放松无效操作识别标准以在无准确性损失的情况下实现进一步改进。如果准确性的些微损失是可接受的,那么可以通过权衡准确性与标准的进一步放宽来获得性能和能量效率的更进一步改进。

本发明的实施方案是针对dnn的卷积层。在dnn中,卷积层决定执行时间,因为卷积层执行大部分的计算。卷积层对三维输入应用若干三维滤波器。这是在输入元素或神经元和滤波器权重或突触间需要成对乘法的内积计算。接着使用加法将这些积减少到单个输出神经元中。

实际上,神经元值中的许多变成零,因此对应的乘法和加法不会对最终结果有贡献并且可以被免去。因此,这个部分描述了在公众可获得的普通dnn的卷积层中等于零的输入神经元的分数。对于这些测量结果,使用dnn对来自imagenet数据集的一千个图像分类。

图1报告为在所有卷积层和所有输入中具有零值的神经元输入的乘法操作数的平均总分数。这个分数在从37%(对于nin)一直到50%(对于cnns)的范围内变化,并且跨越所有网络的平均值是44%。误差条示出输入图像间的极少变化,并且考虑到1,000个图像的样本集是相当大的,零神经元的相对较大的分数是由于网络的操作而非输入的特性所致。

网络为何产生如此多的零神经元的一个解释是dnn的性质和结构。在高层级,dnn被设计成使得每个dnn层试图确定输入是否并且在何处含有某些学习“特征”,诸如线、曲线或更复杂的构造。特征的存在被编码为正值神经元输出,并且缺少被编码为零值神经元。因此,当特征存在时,最可能的情况是,它们将不会全部出现在输入上。此外,不是所有特征都将存在。dnn使用卷积层来检测特征的存在以产生用数值对特征在特定位置处存在的可能性进行编码的输出。负值表明特征不存在。卷积层后面可以跟着校正器或relu层,所述校正器或relu层让正值通过,但将任何负输入转换成零。

虽然存在许多零值神经元,但是其位置取决于输入数据值,并且因此对于静态方法来说去除对应计算将是个挑战。明确地说,在所有输入中没有神经元总是零。即便可以去除有很高概率为零的神经元,但是也不会太多。举例来说,仅0.6%的神经元有99%的概率为零。下文进一步描述的架构在运行时检测和去除此类计算。

由于计算卷积层所需的时间随着所处理的元素的数目几乎线性地增加并且由于卷积层决定执行时间,因此这些测量结果可以指示设法跳过与零值神经元对应的计算的架构的潜在性能改进的上限。

已展示了神经元中的许多者为零,本发明的实施方案可以通过以下操作来跳过对应的计算:1)通道解耦,和2)在运行中将输入按促进零值输入的去除的适当格式来存储。

卷积层的计算

计算cnn过程中涉及的操作与dnn中涉及的操作具有相同性质。主要差异是在前者中,重复权重以便寻找在输入(即,图像)中的不同点处的特征。传入卷积层的输入是尺寸的实数的3d阵列ix×iy×i。这些数值是第一层中的输入数据以及用于后续层的、前一层的神经元的输出。在此工作的其余部分中,它们可以被标示为“输入神经元”。每个层沿着层输入的x和y维度在多个位置处应用n个滤波器。每个滤波器是尺寸的3d阵列fx×fy×i,所述阵列含有突触。所有滤波器具有相同尺寸并且其深度与输入神经元阵列相同。所述层产生尺寸的3d输出神经元阵列ox×oy×n。所述输出的深度与滤波器的数目相同。

为了计算输出神经元,在一个窗口或具有与滤波器fx×fy×i相同的尺寸的输入神经元阵列的子阵列内应用一个滤波器。令n(x,y,z)和o(x,y,z)分别为输入和输出神经元,并且sf(x,y,z)为滤波器f的突触。在激活函数之前,位置(k,l,f)处的输出神经元计算如下:

每窗口和滤波器有一个输出神经元。在使用恒定步幅s沿着x和y维度移动的不同窗口内重复地应用滤波器以产生所有输出神经元。因此,输出神经元阵列尺寸是ox=(ix-fx)/s+1以及oy=(iy-fy)/s+1。图2示出用3×3×2输入神经元阵列、单个2×2×2滤波器和单元步幅产生输出神经元阵列2×2×1的实例。

当输入神经元是零时,可以去除对应的乘法和加法以在没有更改输出值的情况下节省时间和能量。

如图2a中所示,通过对具有原点n(0,0,0)的输入的2×2×2窗口应用滤波器来产生在位置(0,0,0)或o(0,0,0)处的输出神经元。每个突触s(x,y,z)乘以对应的输入神经元n(x,y,z),例如,n(0,0,0)×s(0,0,0)和n(0,1,0)×s(0,1,0),获得总共2×2×2或八个积。使用加法将所述八个积减少到单个输出神经元中。接着,使所述窗口沿着x维度首先滑动s以使用原点n(1,0,0)处的神经元输入窗口来产生o(1,0,0)。举例来说,现在将s(0,0,0)乘以n(1,0,0)并且将s(1,1,0)乘以n(2,1,0)。

一旦第一尺寸被用尽,那么使窗口沿着y维度滑动s并且再次沿着x维度开始扫描等等,如图所示。总计,结果是2×2×1输出神经元。深度是一,因为仅有一个滤波器。

图2b和图2c示出具有两个2×2×2滤波器的卷积层。输出现在是2×2×2阵列,其中每个滤波器产生所述输出的两个平面或层中的一者。如图2b所示,第一滤波器产生输出元素o(x,y,0)。图2c示出第二滤波器产生输出神经元o(x,y,1)。

简化的基线架构(dadiannao)

基线架构是基于由chen等人提出的最先进的dadiannao加速器。这个部分举例阐释了这种架构的简化单元如何计算卷积层以及为何按目前情况其无法跳过零值输入神经元。

在图3中示出了dadiannao加速器的操作。在图3(a)中,通过两个2×2×2滤波器将3×3×2神经元阵列与单元步幅进行卷积,产生2×2×2输出神经元阵列。在图3(b)中,示例性单元包括:1)两个神经元通道140,和2)各自含有两个突触子通道160的两个滤波器通道150。对每个神经元通道140和突触子通道分别馈入来自输入神经元缓冲器(nbin)120通道和突触缓冲器(sb)110通道的单个元素。在每个循环中,每个神经元通道140向两个对应的突触子通道160广播其神经元,导致四对神经元和突触,每突触子通道一对。每突触子通道一个乘法器171将神经元和突触输入相乘。每滤波器通道一个加法树173将两个积减少为部分和,所述部分和累积到每滤波器的输出神经元缓冲器(nbout)130中。

利用层计算的结构,所述单元将所有神经元通道和滤波器通道耦合,使得其按锁步方式行进。假设应当要执行如果不是全部也是大部分的计算,如果仅考虑计算的结构,那么上述情况是足够的。然而,照原样,这个单元无法跳过零神经元。在这个实例中,遗憾的是,两个神经元通道中的零与非零神经元耦合。有四个乘法可以稳妥地被免去,潜在地改进性能和能量。

在图3的实例中,完整滤波器的计算将利用一个额外循环,此处仅示出前三个循环。仅为清楚起见,两个滤波器的元素具有带有相反的正负号的相同值。在图3a中,存在输入神经元和突触的部分集。图3b至图3d示出处理的三个循环。顶部部分示出正在处理哪些神经元和突触,并且底部部分是单元处理。

在图3b中,在循环0中,来自nbin(1和0)的前两个神经元乘以两个滤波器((1,2)和(-1,-2))的相应突触,每滤波器的每个积对通过加法而减少并存储在nbout(1和-1)中。sb指针前进一,并且将所述神经元从nbin丢弃。

在图3c和图3d中,在循环1和2中,为下一个输入神经元与滤波器突触对示出相同的动作序列。读取nbout部分和并将所述部分和用作加法树的额外输入,继续计算最终输出神经元。

基线架构

虽然上文描述了一次处理两个输入神经元和两个滤波器的两个突触的dadiannao基线单元的简化版本,但是每个dadiannao芯片或节点含有16个神经功能单元(nfu)或简称为单元。图5a示出一个这样的单元。在每个循环中,所述单元处理16个输入激活或神经元、来自16个滤波器的256个权重或突触,并产生16个部分输出激活或神经元。详细地,所述单元具有16个神经通道、各自具有16个突触通道160(总计256个)的16个滤波器通道150,并且产生16个输出神经元的16个部分和。所述单元的sb110具有馈给256个突触通道的256个通道(16×16),nbin120具有馈给16个神经元通道的16个通道,并且nbout130具有16个通道。每个神经元通道连接到16个突触通道160,16个滤波器通道150中的每一者各一个。所述单元具有256个乘法器和16个17输入加法树(16个积加上来自nbout的部分和)。每单元神经元通道和滤波器的数目是可以改变的设计时间参数。所有通道都是以锁步方式操作。

设计dadiannao的意图是最小化片外带宽以及最大化片上计算利用。节点的所有16个单元所需的总的每循环突触带宽是每循环4k突触,或8tb/秒,假设1ghz时钟和16位突触。总sb110容量被设计成足以存储正被处理的层的所有突触(每单元32mb或2mb),因此避免从片外取来突触。可以并行地处理高达256个滤波器,每单元16个。除了初始输入和最终输出之外的所有层间神经元输出也存储在适当大小的中央edram或神经元存储器(nm)中。nm在所有16个单元间共享并且对于原始设计是4mb。在外部看到的唯一业务是用于初始输入、用于每层载入突触一次以及用于写入最终输出。

通过从外部存储器读取以下各项来开始处理:1)滤波器突触,和2)初始输入。将所述滤波器突触相应地分配给sb,而将神经元输入馈给nbin。层输出通过nbout存储到nm并且接着馈给nbin,用于处理下一个层。在必要时,从外部存储器载入下一组突触可以与当前层的处理重叠。可以使用多个节点来处理未放入在单个节点中可用的nm和sb中的较大dnn。使用edram来实施nm和sb,因为容量越大,在没有迫使外部存储器溢出和过多的片外访问的情况下单个芯片可以处理的神经元和滤波器就越多。

图6(a)示出dadiannao架构如何处理同时应用256个滤波器的输入神经元阵列。每个单元处理16个滤波器,其中单元0处理滤波器0至15,并且单元15处理滤波器240至255。为简单起见,该图仅示出元素在i维度上的位置(例如,滤波器7的位置(0,0,15)将示出为s715)。在每个循环中,将具有16个输入神经元(各为16位长)的获取区块馈给所有16个单元。所述获取区块含有用于每单元的16个滤波器通道中的每一者的每突触通道的一个神经元。举例来说,在循环0中,所述获取区块将含有神经元n(0,0,0)至n(0,0,15)。神经元n(0,0,0)将在单元0中乘以突触s0(0,0,0)至s15(0,0,0),并且在单元15中乘以突触s240(0,0,0)至s255(0,0,0)。神经元n(0,0,1)在单元0中乘以突触s0(0,0,1)至s15(0,0,1)等等。将所述突触按图中所示的次序存储在sb中,使得所述单元可以并行地获取适当的突触。举例来说,单元0中的sb的第一条目(列)含有以下256个突触:s0(0,0,0)-s0(0,0,15),...,s15(0,0,0)-s15(0,0,15)。

一旦已处理完当前窗口,便可以开始下一个窗口,因为给出坐标便可以直接计算对应神经元开始的位置。由于窗口必须要通过所有滤波器进行处理,因此其它工作指派是可能的。所选择的指派在神经元级使输入在通道间交错,像也可以在图中看到那样。由于未尝试跳过零,因此从nm的单个16神经元宽的获取可以为所有单元中的所有通道提供工作,实现100%的利用率。

概括起来,dadn会处理所有激活,而不管其值如何。dadn是大规模的数据并行架构。在每个循环中,dadn处理16个激活值以及来自高达256个滤波器的权重。具体地说,对于每个滤波器,dadn将16个激活值乘以16个权重并将结果累积到部分输出激活中。这个过程一直重复,直到对于每个所要输出激活已处理完所有必要的激活值为止。

根据本发明的实施方案的简化架构

为了利用神经元流中占了较大分数的零,对所有神经元通道都耦合在一起的现有技术的结构进行改变。本发明的实施方案将神经元通道解耦,允许其独立地行进。图4示出本发明的实施方案的等效的简化设计以及其在两个循环内如何行进。dadiannao单元现在分为1)含有加法树和nbout230的后端,和2)含有神经元通道280、突触子通道260和乘法器的前端。虽然后端保持不变,但是前端现在分成两个子单元205,每神经元通道280一个。每个子单元205含有一个神经元通道280和来自两个滤波器250中的每一者的突触子通道260。在每个循环中,每个子单元在乘法器271处生成两个积,每滤波器一个。如前将积馈入到两个加法树273中,产生部分输出神经元和。就这种组织来说,神经元通道280现在能够彼此独立地行进并且因此具有跳过零的可能性。

替代在零神经元出现在输入中时使神经元通道280主动地跳过零神经元,根据本发明的实施方案,可以使用动态硬件方法,其中在前一层的输出处去除零神经元。结果,仅非零神经元出现在nbin220中。为此,如下文进一步描述,按无零神经元阵列格式(zfnaf)来存储输入神经元阵列。在此,我们提出此格式的简化版本,来阐释所述格式如何允许单独的神经元通道仅看到独立于其它神经元通道行进的非零神经元。一旦去除零神经元,便将每个非零神经元与适当sb条目匹配。为此,zfnaf用偏移来扩增每个非零输入神经元。举例来说,如果原始的神经元流是(1,0,0,3),那么其将被编码为((1,0),(3,3))。偏移285可以调整sb子通道的索引,使得其可以访问适当的突触列。根据本发明的实施方案中,可以在运行中生成zfnaf。

在图4中,根据本发明的实施方案的简化单元仅用两个循环就可以产生与图3的现有技术的单元相同的输出。仅为清楚起见,两个滤波器的元素具有带有相反正负号的相同值。

在图4a中,在循环0中,子单元0读取下一个nb神经元值1以及其偏移0。使用所述偏移,对与滤波器0和1对应的适当sb突触1和-1编索引。使用专用的加法树将所得积1和-1加到对应滤波器的输出神经元。类似地,子单元1将获取具有偏移1的神经元2并乘以突触4和-4,馈给滤波器的对应加法树。

在图4b中,在循环1中,操作如前重复,其中子单元0在偏移2处获取神经元3并且子单元1在偏移2处获取神经元4。仅用两个循环就能计算出与基线中相同的结果(48,-48)。

根据本发明的实施方案的架构

图5b示出根据一个实施方案的可以提供与dadiannao单元相同的计算带宽的单元。包括神经元通道280和对应突触通道260的前端被划分成16个独立操作的子单元205,每个子单元含有单个神经元通道280和16个突触通道260。每个突触通道260处理总共16个的不同滤波器。在每个循环中,每个子单元205从nbin获取单个(神经元,偏移)对,使用偏移285对来自其sbin的对应条目编索引以获取16个突触并产生16个积,每滤波器250一个。后端不变。后端接收来自16个子单元205的16×16个积,使用加法树273来减少所述积。加法树273产生16个部分输出神经元,所述单元使用64个nbout230条目来累积所述部分输出神经元,可以通过编码器235对所述条目进行编码并传输到激活存储器。子单元nbin的深度是64个条目,其中每个条目含有16位定点值加上偏移字段。按照原始dadiannao设计,总sb容量保持为每单元2mb,其中每个子单元具有128kb的sb。每个子单元sb条目含有对应于16个突触的16×16个位。总的来说,每个子单元对应于单个神经元通道并处理16个突触,每滤波器一个。共同地,所有子单元具有16个神经元通道、256个突触通道并产生16个部分输出神经元,所述部分输出神经元各自来自不同的滤波器。

根据本发明的实施方案的单元可以用于处理编码的与卷积的神经元阵列。通过软件为每个层设立的配置标志控制所述单元是否将使用神经元偏移字段。

根据本发明的实施方案的设计执行以下操作以相较于基线改进性能:1)在运行中生成编码神经元阵列;2)使所述单元和所有通道保持繁忙;以及3)维持对中央edram的有序、宽的访问。实现此功能性的、本发明的实施方案的结构特征是用于对输入神经元阵列进行编码的格式以及在单元间分配工作的方式。

这种格式是图7中所示的无零神经元阵列格式(zfnaf)。zfnaf使得本发明的实施方案能够避免具有零值神经元的计算。仅存储非零神经元,所述非零神经元各自具有指示其原始位置的偏移。zfnaf允许本发明的实施方案将处理哪些神经元的决定从关键路径移走并且将其放到前一层的末尾。因此,zfnaf有效地实施原本控制流决定的那些事物。

具体地说,zfnaf将神经元编码为被称作块的组中的(值,偏移)对。每个块对应于dadiannao设计的获取区块,所述获取区块是沿着输入特征的维度i对准的、连续的、16个神经元的组,即,所述神经元全都具有相同的x和y坐标。在块的第一神经元按经过调整以虑及偏移字段的常规3d阵列格式存储的位置处开始存储所述块并用零填补。块中的分组维持按处理每个层必需的粒度对激活阵列编索引的能力。

因此,在zfnaf中,仅存储有效激活,所述有效激活各自具有指示其原始位置的偏移。在前一层的输出处生成zfnaf,其中产生每个激活通常将会使用几十个循环或更多循环。

zfnaf编码含有与压缩稀疏行(csr)格式的某些类似性。然而,csr像以具有极端水平的稀疏性的矩阵为目标的大多数稀疏矩阵格式一样具有两个目标:仅存储非零元素以及减小存储器占地面积,zfnaf仅分享第一者。在csr中,易于确定每个行开始的位置;然而,为了使单元保持繁忙,本发明的实施方案允许以较细粒度进行直接编索引,但牺牲了任何存储器占地面积节约。

此分组具有对本发明的实施方案有用的两个特性:1)其维持仅使用块的第一神经元的坐标按块粒度编索引到神经元阵列中的能力,以及2)使偏移字段的大小保持为短并且因此减少用于存储偏移的开销。第一个特性允许独立地将工作指派给子单元并且还允许本发明的实施方案容易地确定窗口开始的位置。块使得本发明的实施方案能够使所有子单元保持繁忙并且彼此独立地行进并且因此在需要时跳过零或开始处理新的窗口。图7示出zfnaf的实例。由于本发明的实施方案可以使用具有16个神经元的块,因此偏移字段需要为4位宽,25%的容量开销用于nm或1mb用于所研究配置。假定大部分面积被sb占据(32mb),那么总的所得面积开销证明是小的,为4.49%。

如上文所描述,dadiannao获取每循环16个神经元的单个获取区块,dadiannao向所有16个单元广播所述获取区块。这个区块含有256个滤波器中的所有突触通道的工作。对于本发明的实施方案,神经元通道中的相同工作分配不足以使所有单元保持繁忙。如图6b所示,zfnaf中的获取区块含有单个块,就基线工作指派来说,只有对应的原始神经元阵列组不含有零神经元,所述单个块才会含有用于所有神经元通道的工作。

为了使神经元通道尽可能多地保持繁忙,本发明的实施方案以不同方式将工作指派给各种神经元通道。具体地说,虽然如原来所描述,dadiannao使用输入神经元到神经元通道的神经元交错指派,但是本发明的实施方案使用块交错指派。

举例来说,在dadiannao中,如果神经元通道0被给予激活a(x,y,i),那么神经元通道一将被给予a(x,y,i+1)。根据本发明的实施方案,如果神经元通道正在处理在a(x,y,i)处开始的激活块,那么神经元通道1将被给予在a(x,y,i+16)处开始的块。

如图6b所示,本发明的实施方案将窗口均匀地分割成16个切片,每神经元通道一个。每个切片对应于所述窗的完全垂直厚块(所有的块具有相同的起始z坐标)。在每个循环中,获取每切片一个神经元,导致一组16个神经元,每通道一个,因此使所有通道保持繁忙。举例来说,令e(x,y,z)为存储于zfnaf中的输入阵列的位置(x,y,z)处的(神经元,偏移)对。在循环0中,将获取位置e(0,0,0),e(0,0,16),...,e(0,0,240)处的编码神经元并且向所有单元广播所述编码神经元并分别通过神经元通道0至15来进行处理。只要所有16个块具有第二非零神经元,那么在循环1中,将处理e(0,0,17),...,e(0,0,241)。如果举例来说块0仅具有一个非零神经元,那么在下一个循环中,将获取的第一神经元将是e(1,0,0),假设输入神经元深度i是256。

由于每个神经元通道基于每个块含有多少个非零元素而独立地行进,因此每神经元通道具有不同的获取指针。简单的实现方式将每循环执行16次单个神经元访问,使nm负担过大。下文描述的调度器提出了简单的扩展,所述扩展需要与dadiannao相同数目的16神经元宽的和对准的nm访问。

由于在输入神经元指派给单元中的神经元通道的次序已改变,因此如图6b中所示将突触存储在sb中的次序也改变。举例来说,在循环0中,如果j是e(0,0,0)的偏移,那么单元0的子单元0将需要s0(0,0,j)至s15(0,0,j),单元0的子单元15将需要s15(0,0,240+j)至s15(0,0,240+j),并且单元15的子单元0将需要s240(0,0,j)至s255(0,0,j)。这证明为等效于按子单元输送sb存储次序。由于突触是预先知道的,因此可以用软件静态地完成此重新布置。因此,按子单元并行地访问适当突触是简单的。

此工作指派不会改变每个单元生成的输出神经元值,所述神经元值保持与dadiannao相同。所述指派仅改变处理输入神经元以产生输出神经元的次序。

为了避免每循环执行16个独立的单个神经元宽的nm访问,cnv使用调度器单元,所述调度器单元对nm进行16神经元宽的访问,同时使所有神经元通道保持繁忙。为此,将nm天生就包括的子阵列分组成16个独立的存储体并且按存储体给输入神经元切片静态地分配一。虽然调度器实际上分布在nm存储体上,但是如果将其视为集中式单元,阐释其操作则将较容易。

图8示出调度器具有16条目块缓冲器(bb),其中每个条目可以保持单个块。每个bb条目经由16神经元宽的总线连接到一个nm存储体并且经由单个神经元宽的连接来馈给所有单元中的神经元通道中的一者。举例来说,bb[0]从nm存储体0接收神经元块并且可以向所有单元中的神经元通道0广播其神经元中的任一者。最初,调度器从总共16个神经元块的每个存储体并行地读取一个块。在后续循环中,调度器广播非零神经元,一次从每个bb条目中获取单个神经元,总共16个神经元,每bb条目一个神经元,并且因此在每个循环中每神经元通道一个神经元。在已将块的所有非零神经元发送到单元之前,调度器从对应的nm存储体获取下一个块。为了避免停下来等待nm的响应,由于每个块的起始地址和处理次序是预先知道的,所以可以如所愿尽早开始按存储体获取按处理次序为下一个的块。由于每个bb将抽取的速率将取决于每块遇到的非零神经元的数目而改变,因此调度器维持每nm存储体获取指针。

调度器可以同时发出高达16个nm请求,每切片/存储体一个。在最坏的情况中,当块碰巧仅具有零值神经元时,nm存储体将必须每循环供应新的块。实际上这很少发生,并且nm存储体相对较大并且被分成子存储体以维持此最坏情况的带宽。

在dadiannao中,使用单个16神经元宽的互连来向所有16个单元广播获取区块。根据本发明的实施方案,互连结构保持不变,但是宽度增大以容纳神经元偏移。

传入所研究的dnn的初始输入是使用常规3d阵列格式来处理的图像。第一层将其当作3特征深度神经元阵列来处理,其中每个颜色平面是一个特征。所有其它卷积层使用zfnaf,本发明的实施方案在运行中在前一层的输出处生成所述zfnaf。

根据本发明的实施方案,如在dadiannao中,在输出神经元可以作为输入馈入到另一个层之前,将输出神经元从nbout写入到nm。由于edramnm喜欢宽的访问,因此这些写入保持为16神经元宽。然而,在写入到nm之前,按zfnaf,将每个16神经元组编码成块。这由编码器子单元完成。根据本发明的实施方案,每单元可以存在一个编码器子单元。

虽然本发明的实施方案可以按与dadiannao不同的次序来处理输入神经元阵列,但是根据本发明的实施方案的单元仍可以产生与dadiannao相同的输出神经元。通过使用一个滤波器来处理整个窗口来产生每个输出神经元。根据本发明的实施方案,滤波器到单元的指派保持相同。因此,由根据本发明的实施方案的单元产生的输出神经元可以对应于输出神经元阵列的块。编码器单元所要做的全部事情就是将非零神经元封装在块内。

编码器使用16神经元输入缓冲器(ib)、16编码神经元输出缓冲器(ob)和偏移计数器。通过将16神经元条目从nbout读取到ib中同时清除所有ob条目来开始转换。在每个循环中,编码器从ib读取下一个神经元并且使其偏移计数器递增。只要所述神经元非零,便将神经元复制到下一个ob位置。也写入偏移计数器的当前值,使编码神经元对完整。在处理完所有16个ib神经元后,ob含有zfnmf中的块并且可以被发送到nm。使用与dadiannao中相同的互连,所述互连变宽以容纳偏移字段。编码器可以串行地进行编码,因为:1)以慢得多的速率来产生输出神经元,和2)需要用于下一个层的编码块。

在dadiannao中,所有单元处理来自同一个窗口的神经元,并且只有在处理了当前窗口之后,处理下一个窗口才会进行。本发明的实施方案可以遵照这种方法,避免对单元的后端和控制的进一步修改。在神经元通道独立地处理其块时,除非所有切片具有完全相同数目的非零神经元,否则一些神经元通道将会比其它神经元通道较早地完成处理其窗口切片。这些神经元通道将保持空闲,直到所有其它通道完成其处理为止。

评估方法

评估使用如图9中提供的表格中所示的普通和最先进的卷积神经网络的集合。这些网络对ilsvrc12数据集执行图像分类,所述数据集含有跨越1000个类别的256×256个图像。实验使用1000个图像的随机选择的集合,每个类别一个。所述网络是作为发布的部分或在caffemodelzoo处可获得、针对caffe预训练。

使用基线加速器和根据本发明的实施方案的循环精确模拟器。所述模拟器与caffe框架集成以实现层输出神经元的运行中验证。通过合成实现方式来测量本发明的实施方案和dadiannao的面积和功率特性。所述两种设计在verilog中实施并且经由具有tsmc65nm库的synopsis设计编译器来合成。使用artisan单端口寄存器文件存储器编译器使用双抽运来对nbin、nbout和偏移sram缓冲器建模,以允许按循环进行读取和写入。通过destiny来对edram面积和能量建模。

性能

图10示出本发明的实施方案相较于基线的加速。第一个条(cnv)示出在仅考虑零神经元时的加速,而第二个条(cnv+剪切)示出在不影响网络总体准确性的情况下还跳过额外神经元时的加速。这个部分的其余部分集中于第一个条。

平均来说,本发明的实施方案使性能改进了37%,至多改进55%(cnns)并且至少改进24%(google)。性能改进不仅取决于零值神经元的分数,而且还取决于对应的层(本发明的所评估实施方案不会使第一层加速)所花费的总执行时间的分数以及取决于在子单元闲下来等待当前的窗口被所有其它子单元处理的可能损失。虽然google展现出高于平均值的零神经元的分数,但是其第一层相较于其它网络具有相对较长的运行时间,占了总运行时间的35%相对于如在基线中测得的平均21%。google也花费了其时间中的较大部分来计算其它层。

可以通过查看如图11中所示的每网络在基线(b)和本发明的实施方案(c)中的时间去哪儿了的分裂来更好地理解网络的性能结果。将执行活动分成以下类别:1)处理非卷积层(其它)、2)执行第一卷积层(卷积1)、3)处理非零神经元(非零)、4)处理零神经元(零)以及5)空闲(暂停)。无法将时间单元(这是循环)唯一地指派给每个类别。举例来说,在同一个循环期间,在基线中,一些神经元通道可能正在处理零神经元,而其它神经元通道可能正在处理非零神经元。另外,在本发明的实施方案中,一些神经元通道可能是空闲的,等待所有其它神经元通道完成处理当前窗口。因此,该图报告了执行活动的分裂,所述分裂按循环单独地考虑到了每个神经元通道(等效于本发明的实施方案中的子单元)。所考虑的事件的总数是:单元×(神经元_通道/单元)×循环,导致与执行时间成正比并且允许每个事件指派给单个类别的矩阵。

所述结果证实了包括第一层的卷积层决定了基线上的所有网络中的执行活动。本发明的实施方案的子单元是空闲的活动占相对较小分数论证了所述实施方案设法利用所存在的最大可能性来去除零值神经元。

面积

图12示出基线架构和根据本发明的实施方案的架构的面积分裂。总之,本发明的实施方案相较于基线使总面积仅增加4.49%,小的开销被给予所测得的性能改进。在所述两种架构间进行面积比较,如下:1)对于两种架构,滤波器存储器(sb)决定总的面积。虽然根据本发明的实施方案在子单元中分割sbin,但是这样做的开销是可忽略不计的,因为每个厚块保持为较大(每子单元128kb)。2)根据本发明的实施方案使神经元存储器(nm)面积增加了34%,因为a)需要多25%的存储器来用于偏移和b)使用16个存储体。3)在单元逻辑中根据本发明的实施方案的额外成本可忽略不计。4)根据本发明的实施方案使sram面积增加15.8%。这是由于专用于存储偏移的额外缓冲器空间所致。

功率

图13示出在基线和根据本发明的实施方案中的平均功率消耗的分裂。为每种架构示出对应于静态功率、动态功率和总功率的三个条。在nm、sb、逻辑和sram中进一步划分每个类别。逻辑包括数据路径、控制逻辑、编码器和存储器调度器,而sram包括nbin和nbout。在根据本发明的实施方案中,nm功率比基线高53%。这是所预期的,因为nm更宽并且分成存储体。然而,在基线中,nm仅占了总芯片功率的22%,因此总功率成本较小。在所述单元中分裂nbin并添加逻辑的开销仅使其功率增加2%。重新组织sb对其功率成本具有很少影响,并且由于在暂停子单元时不读取突触,因此sb的动态功率减少了18%。总之,32mb的sb占了总功率消耗的大多数,并且动态sb能量的节省超过了nm、逻辑和sram中的开销。结果,本发明的实施方案的功率成本平均比基线低7%。

edp和ed2p

这个部分报告了两种架构的能量延迟积(edp)和能量延迟平方积(ed2p)。虽然关于将能量和性能考虑在内如何恰当地比较两种系统没有达成一致意见,但是两种常用的矩阵是edp和ed2p(et2)。图14报告了本发明的实施方案相较于基线的edp和ed2p改进。平均来说,根据本发明的实施方案的edp改进了1.47×,并且ed2p改进了2.01×。

移除更多无效神经元

剪切是神经网络中的移除无效突触或神经元的计算减少技术。本发明的实施方案的架构可以通过将神经元值设为零使得跳过其计算来允许某一形式的动态神经元剪切。为了论证此能力,这个部分考虑简单的剪切方法,其中在接近零的神经元的量值低于预先指定的每层阈值时,将接近零的神经元设为零。基线设计合并了用于最大池化的比较器,本发明的实施方案重复使用所述比较器来进行阈值比较。预先确定阈值并且将阈值与层元数据(诸如输入尺寸、填补和步幅)一起传输。

为了找到接近最佳的每层阈值配置,使用梯度下降来完成研究,梯度下降类似于在先前工作中用于找到每层精确性要求的方法。为简单起见,利用两个阈值的幂,然而,硬件可以支持任何定点阈值。在来自imagenet验证集的5000个图像中测量网络准确性,所述图像是在每个类别中均匀地取样。

图15示出在使用每层阈值对神经元动态地进行剪切时的准确性(y轴)与性能(x轴)之间的权衡。示出了每个网络的所利用配置的帕累托边界。每个网络的最左边的点对应于图10中的根据本发明的实施方案,其中仅移除零值神经元。大体上,所有网络展现出其中可以剪切神经元而不会影响准确性的初始区。这个区在图15中用实线示出。在无损准确性的情况下的最大加速还报告为图10中的(cnv+剪切)。图16中的表格示出在无损准确性的情况下得到最高加速的阈值。平均地,剪切可以使加速增大到1.52×,增加了11%。对于google,改为按’开端模块(inceptionmodule)’来指定阈值。

对于所有网络,性能可以进一步改进但是有损准确性,其中准确性随着性能改进而以指数方式衰减。举例来说,容许相对准确性下降高达1%使平均性能改进相较于基线增加到1.60×,而允许相对准确性下降高达10%相较于基线得到1.87×的加速。

如上文所描述,zfnaf格式通过将有效神经元值封装在块容器的开头来对所述有效神经元值进行编码。对于16个值的块,使用每值4个位单独地对其偏移进行编码。这表示用于16位值和16个元素的块的25%开销。根据一个实施方案,可以提供减少存储器开销的可选的激活阵列格式。为清楚起见,下面的讨论使用仅零值激活被视为无效的实例。然而,所述标准实际上可以更宽松。

raw或编码格式(roe)

这种编码每块容器仅使用一个额外的位,代价是不能够对无效值的所有可能组合进行编码。具体地说,所述块的第一个位指定所述块是否被编码。当所述块被编码时,使用其余的位来存储神经元值以及其偏移。只要有效激活的数目使得所述有效激活放入块容器中,便可以对所述块进行编码。否则,将所有激活值按原样存储,并且对于特定块,跳过无效激活的能力将不可用。举例来说,提供大小为4以及具有16个位值的块。总计,每个这样的块需要4×16=64个位。可以使用65个位来对含有值(1,2,0,0)的块进行编码,如下:(1,(0,1),(1,2))。第一个1表示所述块被编码。接下来的(偏移,值)=(0,1)为偏移使用两个位并且为值使用16个位。总计,前述块需要1+2×(16+4)=41个位,可以放入可用的65个位内。含有值(2,1,3,4)的块无法放入65个位内并且因此将使用65个位按原始格式存储:(0,2,1,3,4),其中第一个1是指示所述块的其余部分未编码的单个位并且每个值的长度是16位。

向量无效激活识别符格式(viai)

可选编码使激活值处于适当位置并且使用额外的16位位向量i来编码哪些激活值是无效的并且因此可以被跳过。举例来说,假设4个元素的块,含有(1,2,0,4)的块可以按原样编码,加上含有(1101)的4位i向量。对于各自为16位的16个激活的块,这种格式带来16/256或6.25%的开销。可选地,可以将非零元素封装在一起,并且可以使用所述向量来得出其原始偏移。举例来说,含有(1,2,0,4)的块将被存储为(1,2,4,0),加上含有(1101)的4位向量。这种方法的优点是有可能避免存储或传输零激活。

仅存储有效激活

另一种格式建立在仅存储有效值的viai。举例来说,在viai中,(1,0,0,4)的4元素激活块将被存储为(1001,1,0,0,4)。在压缩viai中,其将改为被存储为(1001,1,4)。此处,两个无效零激活不存储于存储器中。由于块在现在不再具有固定大小,因此需要间接层来支持对任意块的获取。如果原始的激活阵列维度是(x,y,i),那么这个间接阵列ir将具有(x,y,[i/16])指针。可以在前一层的输出处生成这些指针。

通过以减小的精度存储激活,存储器存储的进一步减小可以是可能的。举例来说,使用patrickjudd、jorgealbericio、taylerhetherington、toraamodt、natalieenrightjerger、raquelurtasun和andreasmoshovos在“reduced-precisionstrategiesforboundedmemoryindeepneuralnets”(2016年,公众可经由cornell大学图书馆在https://arxiv.org/abs/1511.05236处在线访问)中描述的方法,可以基于概述来预先确定每层的精度。有可能以较细粒度来调整精度。然而,指针与精度说明符是减少可能的占地面积减少的开销。

在原始cnv实施方案中,在前一层的输出处“移除”无效激活。zfnaf引致存储器存储开销,并且激活偏移值的写入和读取需要额外能量。这个部分描述了在将无效激活从nm取出时并且在将这些激活值传输到片之前“去除”无效激活的可选调度器设计。

具体地说,通过如先前所描述使调度器取出16个激活块(每神经元通道一个块)来开始层的处理。调度器接着使用每块16个比较器(每激活值一个)来立即计算i(如先前在viai格式中所描述)向量。

调度器接着继续以每循环一个的速率来传输有效激活。当传输激活值时,调度器还将发送其容纳块内的激活的偏移。举例来说,如果输入激活块含有(1,0,0,4),那么在两个循环内,调度器先将(00b,1)((偏移,值))发送到片,再发送(11b,4)。在已将所有有效激活值传输到片后,调度器可以接着继续处理特定神经元通道的另一个块。关于检测无效激活的标准将是什么,存在许多选项。举例来说,可以使用与零的简单比较、与任意阈值的简单比较或与为二的幂的阈值的比较。

图17示出在调度器中的激活跳过的示例性、详细的块缓冲器实现方式。为清楚起见,该图仅示出16个块缓冲器335中的一者并且假设块仅含有八个激活。每激活通道(未图示)的第二块缓冲器335可以使来自当前块的有效激活的检测和传输与下一个块的获取重叠。完全隐藏nm330的延迟可能需要更多这样的块缓冲器335。

在图17中,示出刚好放入块缓冲器335中的激活块340。紧挨着每个块缓冲器335的条目,存在“无效激活”(被示出为标为“in?”的六边形)检测器345。这些检测器345识别那些无效的激活。如所示,如果激活无效,那么将输出设为零。这些检测器的共同输出形成e向量350,所述e向量得到“为1的引导位”检测器355。这个检测器355的输出是第一有效激活的偏移,所述偏移驱动从块缓冲器335读出激活值的解码器320。接着向片广播所述激活值以及其偏移。用于此激活的e向量350位置被重设,并且用下一个有效激活来继续所述过程。对于这个实例,传输四个有效激活值将需要四个循环。

跳过无效突触(权重)

这个部分描述了也可以跳过无效权重的、本发明的另一个实施方案。已知大部分的权重或突触是无效的。举例来说,在按照patrickjudd、jorgealbericio、taylerhetherington、toraamodt、natalieenrightjerger、raquelurtasun和andreasmoshovos在“reduced-precisionstrategiesforboundedmemoryindeepneuralnets”(2016年,公众可经由cornell大学图书馆在https://arxiv.org/abs/1511.05236处在线访问)中描述的方法按层来调整精度后,大部分的权重变成零。最有可能的是,额外权重是无效的,例如,其值接近于零的权重。已示出了也可以对网络进行训练以增加无效的权重的分数的其它工作。与激活不同,权重值是预先可获得的,并且因此可以静态地完成识别哪些权重是无效的。可以预先对此信息进行编码并将此信息传送到硬件,所述硬件接着可以在运行时甚至在对应的激活值非零(或大体上为有效,这取决于用于将激活分类为无效的标准)时跳过对应的乘法。

如早先所描述,在每个循环中,本发明的实施方案在每单元的16个滤波器中并行地处理16个激活。每单元的激活和滤波器的数目是可以相应地进行调整的设计参数。将假设,对于跳过无效权重的本发明的此另一个实施方案,激活和滤波器的数目都是16。

在不失去一般性的情况下,输入神经元阵列可以具有为256的深度以及为1的窗口步幅。为清楚起见,使用nb(x,y,i)来表示含有n(x,y,i)...n(x,y,i+15)的激活块,并且其中(imod16)=0。类似地,令sbf(x,y,i)表示含有滤波器f的权重sf(x,y,i)...sf(x,y,i+15)的权重块,并且其中同样(imod16)=0。

另外假设,对于每个输入激活块nb(x,y,i),16位向量ib(x,y,i)是可用的,其中的位j指示激活n(x,y,i+j)是否为无效的。每输入激活块有一个i(x,y,i)向量,因此i可被16除尽。关于zfnaf,可以在前一层的输出处或在运行时计算所述i向量,因为按照前一部分的讨论,从nm读取激活块。对于每个权重块,类似的is向量是可用的。具体地说,对于每个权重块sbf(x,y,i),其中f是滤波器,存在16位的位向量isbf(x,y,i),所述向量指示哪些权重是无效的。举例来说,isb0(x,y,i)中的位j指示权重s0(x,y,i+j)(滤波器0)是否为无效的。所述is向量可以是预先计算的并且存储于sb的扩展中。

在不失去一般性的情况下,假如在某一循环c时,在本发明的实施方案中开始处理其16个神经元通道中的16个激活块的以下集合:神经元通道0将处理激活nb(x,y,0),而神经元通道15将处理nb(x,y,240)。如果所有的激活值都是有效的,那么将需要16个循环来处理这16个激活块。然而,在本发明的早先描述的实施方案中,对激活块进行编码,使得仅处理有效激活。

在该种情况中,所有神经元通道在继续处理块的下一个集合之前将会等待具有最有效激活的激活块。等效地,如果使用前述的i向量对每块的有效激活的位置进行编码,那么相同的情况是可能的。调度器按神经元通道对i向量执行前导零检测以识别所述通道中要处理的下一个有效激活是哪个。接着继续处理i单元中的下一个零位,直到已处理完所述通道的所有有效激活。当所有神经元通道都已经处理完其有效激活时,所有神经通道都继续处理块的下一个集合。

由于现在is向量也是可用的,因此调度器需要做的所有事情就是将其纳入考虑以确定是否应当传输激活。具体地说,由于每个激活与16个权重组合,所述权重各自来自不同的滤波器,因此如果所有对应的权重是无效的,那么可以跳过有效激活。也就是说,每个神经元通道可以将其单个i向量与对应的权重块的16个is向量组合以确定其将处理哪些激活。具体地说,处理nb(x,y,i)的神经元通道计算canskip16位向量中的每个位j,如下:

并且其中所述运算是布尔运算:积是“与”,并且和是“或”。也就是说,如果激活由i(激活向量)指定为无效的或如果所有对应的权重都是无效的,那么可以跳过激活值。同时处理的滤波器的数目越高,将跳过否则为有效的激活的概率越低。对于使用16个滤波器各自的16个片的原始dadiannao配置,256个权重(每滤波器一个)将必须为无效的以使所述激活被跳过。然而,已知剪切能够识别无效权重,并且已知重新训练会增加无效权重的数目。根据本发明的早先描述的实施方案,所述两种情况都将会增加跳过可能的神经元以外的额外神经元的机会。此外,其它配置可以同时处理较少的滤波器,因此具有将激活与全为无效的权重组合的较大概率。

可以观察到,在上述方程式中,所有is积项是常数。如本发明的早先描述的实施方案中所描述,将在不同的窗口内同时处理同一组16个权重块。因此,可以预先计算is积(和的第一项),并且仅需要存储最终结果并将其传输到硬件。对于为16的块大小并且对于同时处理16个滤波器的片,开销从每块16个位下降到每16个块16个位。假设16位权重,开销从1/16下降到1/256。

图18a至图18c示出跳过无效权重的本发明的此另一个实施方案的操作的实例。为清楚起见,所述实例假设块大小是4并且示出并行地处理两个滤波器和每滤波器两个权重(突触)的片。如部分(b)所示,处理所有输入块要采用3个循环,因为激活(神经元)块nb(x,y,i+12)含有3个有效激活。然而,如图18c所示,这些有效激活中的一者,具体地说是n(x,y,13)=6,已与均为零的权重s0(x,y,13)和s1(x,y,13)组合,并且因此是无效的。本发明的此另一个实施方案跳过此计算,并且现在,仅用两个循环就能全部处理完所述输入激活块。也跳过额外的有效激活,因为所述有效激活与无效权重组合。

根据一个实施方案,加速器还可以通过选择性地跳过接近于零的值来加速反向传播训练程序。为了训练神经网络,加速器可以实施一种方法,其中分类误差被反向传播并且相应地更新网络的权重。在性能取决于值大小的实施方案中,通过根据某一设定标准对误差设阈值来避免小的更新可能是有利的。以此方式,引擎可以完全跳过处理这些值。取决于神经网络的具体情况和设阈值标准,情况可能是,由于一些权重更新被省去,因此需要更多的训练步骤来实现某一分类准确性,但执行这些步骤中的每一者所用的时间较少,导致总体较快的训练程序。根据一个实施方案,可以提供一种用于神经网络训练的系统,其中基于动态地或静态地设定的阈值将反向传播误差值设为0,并且另外,所述系统可以省去误差值为0的权重更新计算。

还请注意,虽然上文的描述和相关联的图式的多个部分可能描述或表明了硬件的使用,但是本发明可以在处理器(诸如gpu(图形处理单元))上用软件来仿真并且可以产生类似的性能增强。此外,已知如所使用的术语“激活”和“神经元”在本领域和文献中是可互换,并且相同的情况在本文中也适用,而没有限制。根据所要实现方式,上文讨论的神经元存储器(nm)可以是专用的、共享的、分布式的或其组合。

在不脱离本发明的精神或实质特性的情况下,本发明可以体现为其它特定形式。本发明的某些调整和修改将是本领域的技术人员显而易见的。因此,目前讨论的实施方案被视为说明性而非限制性的,本发明的范围由所附权利要求而非前文的描述指示,并且因此,属于权利要求的等效物的含义和范围内的所有改变意欲包含于其中。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1