在硬件中执行平均池化的制作方法

文档序号:15589323发布日期:2018-10-02 18:45阅读:426来源:国知局

本说明书涉及在硬件中计算神经网络推断。



背景技术:

神经网络是机器学习模型,其采用一层或多层来为所接收的输入生成输出,例如分类。除了输出层之外,一些神经网络还包括一个或多个隐藏层。每个隐藏层的输出用作网络中下一层(即网络的下一个隐藏层或输出层)的输入。网络的每个层根据相应参数集的当前值从接收到的输入生成输出。



技术实现要素:

总体来说,本说明书描述了计算神经网络推断的专用硬件电路。

总体来说,本说明书中描述的主题的一个创新性方面包括接收在硬件电路上处理神经网络的请求的系统和方法,该神经网络包括平均池化(pooling)神经网络层,并且作为响应,生成指令,当硬件电路运行该指令时,使得硬件电路在由神经网络处理网络输入期间,通过执行以下操作来生成与平均池化神经网络层的输出等价的层输出张量:执行到平均池化神经网络层输入张量和具有与平均池化神经网络层的窗口相等的大小以及由每个均是单位矩阵的元素组成的核的卷积,以生成第一张量,并执行操作以使得第一张量的每个元素除以平均池化神经网络的窗口中的元素的数量以生成初始输出张量。

实现可以包括以下一个或多个特征。在一些实现中,主题的创新性方面包括由第一缩放因子重新缩放初始输出张量的边缘元素,并且由第二缩放因子重新缩放初始输出张量的角元素以生成输出张量。第一缩放因子是基于在执行卷积时与核的元素相乘以生成第一张量的边缘元素的输入张量的元素的数量,并且第二缩放因子基于在执行卷积时与核的元素相乘以生成第一张量的角元素的输入张量的元素的数量。在一些实现中,创新性方面包括通过第三缩放因子重新缩放第一张量的边缘相邻元素,并通过第四缩放因子重新缩放第一张量的角相邻元素以生成输出张量。

实现还可以包括一个或多个以下特征。执行输入张量和核的卷积以生成第一张量包括:零填充输入张量以生成零填充输入张量,以及执行零填充输入张量和核的卷积以生成第一张量。执行操作以使得第一张量的每个元素除以平均池化神经网络层的窗口中的元素的数量以生成初始输出张量包括:执行第一张量的每个元素乘以第一因子的第一乘法,第一因子是(i)在执行卷积以生成输出张量的角元素时与具有与平均池化神经网络层的窗口相等的大小的核的元素相乘的输入张量的元素的数量,(ii)在执行卷积以生成输出张量的边缘元素时,与具有与平均池化神经网络层的窗口相等的大小的核的元素相乘的输入张量的元素的数量,以及(iii)平均池化神经网络层的窗口中的元素的数量的最小公分母,并且执行第一张量的每个元素乘以一个或多个第二因子的第二乘法,每个第二因子基于在执行卷积以生成第一张量的相应元素时与核的元素相乘的输入张量的元素的数量。执行第一乘法的结果元素具有比第一张量的元素的位分辨率更高的位分辨率。

实现还可以包括一个或多个以下特征。执行操作以使得第一张量的每个元素除以平均池化神经网络层的窗口中的元素的数量以生成初始输出张量包括:生成掩码张量,其中掩码张量的大小由输入张量的大小确定,并且其中掩码张量的元素由平均池化神经网络层的窗口的大小确定,并且将第一张量的每个元素和掩码张量的每个相应元素执行按元素相乘(element-wisemultiplication)。生成掩码张量包括平铺(tiling)存储在存储器中的一个或多个掩码张量片段。输入张量存储在硬件电路的统一缓冲器处,并且掩码张量存储在硬件电路的动态存储器处,并且其中执行操作以使得第一张量的每个元素除以平均池化神经网络层的窗口中的元素的数量以生成初始输出张量包括:将输入张量从统一缓冲器发送到在硬件中实现的硬件电路的矩阵计算单元,将掩码张量从动态存储器发送到硬件电路的矩阵计算单元,并且由硬件电路的矩阵计算单元执行输入张量和掩码张量的按元素相乘以生成第一张量。

实现还可以包括一个或多个以下特征。输入张量存储在硬件电路的统一缓冲器中,并且核存储在硬件电路的动态存储器中,并且其中执行输入张量和核的卷积以生成第一张量包括:将输入张量从统一缓冲器发送到硬件实现的硬件电路的矩阵计算单元,将核从动态存储器发送到硬件电路的矩阵计算单元,并由硬件电路的矩阵计算单元执行输入张量和核的卷积生成第一张量。执行卷积并执行使得第一张量的每个元素被除的操作被执行为对存储在整数寄存器中的值的定点操作。

可以实现本说明书中描述的主题的特定实施例,以便实现以下优点中的一个或多个。即使在硬件电路不能直接处理输入张量来执行平均池化的情况下,也可以由专用硬件电路在硬件中生成与平均池化神经网络层对应的输出张量。通过使用专用硬件电路生成适当的输出,可以执行平均池化神经网络层的处理,而不会将数据传回主计算机,也即,在不执行片外计算的至少一部分的情况下,即使专用硬件电路也不直接支持平均池化。这允许在不修改专用硬件电路的硬件架构的情况下有效地确定包括平均池化层的神经网络的推断。也就是说,避免了由在片外、软件或两者中执行部分处理所导致的处理延迟。

本说明书中描述的主题还涉及使用所公开的用于有效执行神经网络计算中的平均池化的方法和硬件的图像识别或分类的方法和系统。

本说明书的主题的一个或多个实施例的细节在附图和下面的描述中阐述。通过描述、附图和权利要求,主题的其它特征、方面和优点将变得显而易见。

附图说明

图1示出了示例性神经网络处理系统。

图2是用于对神经网络的给定层执行计算的示例性方法的流程图。

图3示出了示例性神经网络处理系统。

图4示出了包括矩阵计算单元的示例性架构。

图5示出了收缩阵列内的单元的示例性结构。

图6是用于教导神经网络处理系统对神经网络的平均池化层进行计算的示例性方法的流程图。

图7是用于对神经网络的平均池化层进行计算的示例性方法的流程图。

图8(a)-(c)是用于神经网络的平均池化层的计算的示例。

图9(a)-(c)是用于在神经网络的平均池化层中重新缩放边缘元素的计算的示例。

各附图中的相同附图标记和标号指示相同的元素。

具体实施方式

可以使用具有多个层的神经网络来计算推断。例如,给定输入,神经网络可以计算针对该输入的推断。神经网络通过处理通过神经网络的每个层的输入来计算该推断。每层接收输入并根据该层的加权集来处理该输入以生成输出。

因此,为了从所接收的输入计算推断,神经网络接收输入并通过神经网络层中的每一个对其处理以生成推断,来自一个神经网络层的输出被提供为下一个神经网络层的输入。神经网络层的数据输入,例如,神经网络的输入或顺次的层的下层到神经网络层的输出,可被称为对该层的激活输入。

在一些实现中,神经网络的层顺次排列。在一些其他实现中,层被排列成有向图。也就是说,任何特定的层可以接收多个输入、多个输出或两者。神经网络的层也可以被布置为使得可以将层的输出作为输入向回发送到之前的层。

一些神经网络从一个或多个神经网络层输出以生成用作后续神经网络层的输入的池化值。在一些实现中,神经网络通过确定输出组的最大值、最小值或平均值并使用最大值、最小值或平均值作为该组的池化输出来将一组输出池化。将输出池化可以保持一定的空间不变性,因此以各种配置排列的输出可以被处理以具有相同的推断。在一些实现中,将输出池化还可以减小在后续神经网络层处接收的输入的大小或维度,同时在池化之前保持输出的期望特性,这可以在不显著损害由神经网络生成的推断的质量的情况下提高效率。

本说明书描述了处理神经网络层的专用硬件电路,并且可选地对一个或多个神经网络层的输出执行池化。

图1示出了示例性神经网络处理系统100。神经网络处理系统100是被实现为在一个或多个位置中的一个或多个计算机的系统的示例,其中可以实现以下描述的系统、组件和技术。

神经网络处理系统100是使用专用硬件电路110执行神经网络计算的系统。硬件电路110是用于执行神经网络计算的集成电路,并且包括在硬件中执行矢量矩阵乘法的矩阵计算单元120。硬件电路110还包括矢量计算单元140。下面参考图3更详细地描述示例性的专用硬件电路120。

特别地,神经网络处理系统100接收在专用硬件电路110上实现神经网络的请求,在专用硬件电路110上实现神经网络,并且一旦实现了给定的神经网络,就使用专用集成电路110来处理神经网络的输入以生成神经网络推断。

也就是说,神经网络处理系统100可以接收指定了用于处理输入的神经网络的神经网络架构的请求。该神经网络架构定义了该神经网络中层的数量和配置、以及具有参数的每个层的参数值。

为了在专用集成电路110上实现神经网络,神经网络处理系统100包括神经网络实现引擎150,其被实现为在一个或多个物理位置中的一个或多个计算机上的一个或多个计算机程序。

神经网络实现引擎150生成指令,当专用硬件电路110运行该指令时,使得硬件电路110执行由神经网络指定的操作以从所接收的神经网络输入生成神经网络输出。

一旦由神经网络实现引擎150生成了指令并将其提供给硬件电路110,神经网络处理系统100就可以接收神经网络输入,并且可以通过使得硬件电路110运行生成的指令,使用神经网络来处理神经网络输入。

然而,一些神经网络包括一个或多个不相容的神经网络层。本说明书中使用的术语“不兼容的神经网络层”是指指定了不能由专用硬件电路110在硬件中直接执行的操作的神经网络层。为了在硬件电路110上实现这些神经网络,神经网络网络实现引擎150生成指令,当硬件电路110运行指令时,使得硬件电路110通过在硬件中执行如下操作来生成用于不兼容的神经网络层的输出,该操作不同于由神经网络层指定的那些操作,但是该操作所导致的层输出的结果满足不兼容神经网络层的规范,也即,层输出与通过直接执行由该层所指定的操作而生成的输出相同。

特别地,一些神经网络包括平均池化层。这样的神经网络层定义了用于执行平均池化的窗口。在概念上,为了生成平均池化层的输出张量的元素,识别出具有窗口的维度的输入张量的区域,并且确定该区域内的元素的平均。窗口通过输入张量被移动,即一个跨度,以生成输出张量。在这种情况下,输出张量将具有与输入张量的维度相匹配的维度。然后可以将输出张量提供为神经网络的推断,或作为神经网络的后续层的输入张量来提供。

一些神经网络可以包括其他类型的池化层,其通常生成张量,其中每个元素是应用于输入张量的元素的子集的操作(例如代数操作)的结果。例如,最大池化层或最小池化层可以指定用于最大或最小池化的窗口,其中由池化层生成的输出张量中的每个元素是输入张量的元素的对应区域的相应最大值或最小值。

因为在专用硬件电路110上执行矩阵操作的主要硬件单元是矩阵计算单元120,并且尽管专用硬件电路110可以包括在硬件中执行其他神经网络操作的其他电路,但专用硬件电路110不能直接计算平均池化层的输出。为了实现包括平均池化层的神经网络,神经网络实现引擎150生成指令,当在神经网络输入的神经网络的处理期间由专用硬件电路110运行该指令时,使得专用硬件电路110在硬件中执行其他操作以生成满足神经网络的平均池化层的规范的输出张量。具体地,可以使用指令来生成控制信号用于控制矩阵乘法单元120和矢量计算单元140以执行导致满足平均池化层规范的张量的输出的操作。这些指令和其他操作在下面参照图6至图10更详细地描述。

图2是使用专用硬件电路对神经网络的给定层执行计算的示例性处理200的流程图。为了方便起见,将相对于具有执行方法200的一个或多个电路的系统来描述方法200。可以对神经网络的每个层执行方法200,以便从所接收的输入计算推断。

该系统接收给定层的加权输入集(步骤202)和激活输入集(步骤204)。可以分别从专用硬件电路的动态存储器和统一缓冲器接收加权输入集和激活输入集。在一些实现中,可以从统一缓冲器接收加权输入集和激活输入集两者。

该系统使用专用硬件电路的矩阵乘法单元,从加权输入和激活输入生成累加值(步骤206)。在一些实现中,累加值是加权输入集和激活输入集的点积。也就是说,对于作为该层中所有加权的子集的一个加权集,系统可以将每个加权输入与每个激活输入相乘,并将积加在一起以形成累加值。然后,系统可以计算其他加权集和其他激活输入集的点积。

该系统可以使用专用硬件电路的矢量计算单元从累加值生成层输出(步骤208)。在一些实现中,矢量计算单元对累加值应用激活函数,这将在下面参考图5进一步描述。该层的输出可以存储在统一的缓冲器中,用作神经网络中后续层的输入,或者可以用于确定神经网络的推断。在一些实现中,神经网络层可以是平均池化层,并且该系统可以对累加值执行附加处理,以获得与平均池化层的输出相等的层输出张量。当所接收的输入已经通过神经网络的每一层进行处理以生成针对所接收的输入的推断时,该系统完成对神经网络的处理。

图3示出了用于执行神经网络计算的示例性专用硬件电路300。电路300包括主机接口302。主机接口302可以例如从主机计算机或外部处理器接收指令,其包括用于神经网络计算的参数。这些参数可以包括以下的一个或多个:应该处理多少层、模型的每个层的对应的加权输入集、初始激活输入集,也即,从其计算推断的神经网络的输入、每层的相应输入和输出的大小、用于神经网络计算的跨度值、以及要处理的层的类型,例如卷积层、池化层或完全连接层。

主机接口302可以将指令发送到定序器306,定序器306将指令转换成控制电路执行神经网络计算的低级控制信号。在一些实现中,控制信号调节电路中的数据流,例如,加权输入集和激活输入集如何流过电路。换句话说,控制信号指定输入张量的元素如何被提供为例如到执行平均池化计算的矩阵计算单元312的输入,并且其中存储所得到的输出。定序器306可以将控制信号发送到统一缓冲器308、矩阵计算单元312和矢量计算单元314。在一些实现中,定序器306还向直接存储器访问引擎304和动态存储器310发送控制信号。在一些实现中,定序器306是生成控制信号的处理器。定序器306可以使用控制信号的时序,以在适当的时刻将控制信号发送到电路300的每个部件。在一些其他实现中,主机接口302从外部处理器传入控制信号。

主机接口302可以向直接存储器访问引擎304发送加权输入集和初始激活输入集。直接存储器访问引擎304可以在统一缓冲器308处存储激活输入集。在一些实现中,直接存储器访问将加权集存储到可以是存储器单元的动态存储器310。在一些实现中,动态存储器位于电路之外。

统一缓冲器308是存储器缓冲器,例如存储由专用硬件电路300正在处理的数据的存储器缓冲寄存器,该数据包括从动态存储器310接收的或将要存储在动态存储器310中的数据。其可用于存储来自直接存储器访问引擎304的激活输入集和矢量计算单元314的输出。直接存储器访问引擎304还可以从统一缓冲器308读取矢量计算单元314的输出。

动态存储器310和统一缓冲器308可分别向矩阵计算单元312发送加权输入集和激活输入集。在一些实现中,矩阵计算单元312是二维收缩阵列。矩阵计算单元312还可以是可以执行数学运算(例如乘法和相加)的一维收缩阵列或其他电路。在一些实现中,矩阵计算单元312是通用矩阵处理器。

矩阵计算单元312可以处理加权输入和激活输入,并向矢量计算单元314提供输出的矢量。在一些实现中,矩阵计算单元312向矢量计算单元314发送输出矢量,矢量计算单元314向统一缓冲器308发送输出矢量。矢量计算单元314可以处理输出矢量并将经处理的输出矢量存储到统一缓冲器308。经处理的输出矢量可以用作矩阵计算单元的激活输入312,例如,用于神经网络中的后续层。下面将参照图4更详细地描述矩阵计算单元312。

为了处理矢量,例如从矩阵计算单元312接收的输出矢量,矢量计算单元314可以包括激活单元、归一化单元或其它单元中的一个或多个。矢量计算单元314的激活单元可以包括将非线性函数应用于从矩阵计算单元312接收的累加值的电路,例如tanh(x),其中x是累加值。激活单元可以包括具有8位或16位宽度的整数寄存器或缓冲器。矢量计算单元314的归一化单元可以包括用于限制从矩阵计算单元312接收的累加值的电路,以避免可能通过经过后续神经网络层传递非归一化累加值而引入的计算误差。用于对累加值执行其他操作的电路也可以包括在矢量计算单元314中。

图4示出了包括矩阵计算单元的示例性架构400。矩阵计算单元是二维收缩阵列406。阵列406包括多个单元404。在一些实现中,收缩阵列406的第一维度420与单元的列对应,并且收缩阵列406的第二维度422与单元的行对应。收缩阵列可以具有比列更多的行、比行更多的列或相等数量的列和行。

在所示的示例中,值装载器402将激活输入发送到阵列406的行,并且加权提取器接口408将加权输入发送到阵列406的列。然而,在一些其他实现中,激活输入被传送到列并且加权输入被传送到阵列406的行。

值装载器402可以从统一缓冲器,例如图3的统一缓冲器308,接收激活输入。每个值加载器可以将相应的激活输入发送到阵列406的不同的最左单元。例如,值加载器412可以向单元414发送激活输入。值加载器还可以将激活输入发送到相邻的值装载器,并且激活输入可以在阵列406的另一个最左单元处使用。这使得激活输入被移动以用于阵列406的另一个特定单元。

加权提取器接口408可以从存储器单元(例如,图2的动态存储器310)接收加权输入。加权提取器接口408可以将对应的加权输入发送到阵列406的不同的顶部单元。例如,加权提取器接口408可以向单元414和416发送加权输入。

在一些实现中,主机接口(例如图3的主机接口302)沿着一个维度(例如向右)贯穿阵列406移动激活输入,同时沿着另一个维度(例如底部)贯穿阵列406移动加权输入。例如,在一个时钟周期,单元414处的激活输入可以移动到单元416中的激活寄存器,其位于单元414的右侧。类似地,单元416处的加权输入可以移动到单元418的加权寄存器,其位于单元414之下。

在每个时钟周期,每个单元可以处理给定的加权输入、给定的激活输入和来自相邻单元的累加输出以生成累加的输出。累加的输出也可以沿与给定的加权输入相同的维度传递到相邻的单元。每个单元还可以处理给定的加权输入和给定的激活输入以生成输出,而不处理来自相邻单元的累加输出。输出可以沿着与给定加权输入和输出相同的维度传递到相邻的单元,而不被累加,例如,对加权和激活输入集执行按元素相乘。以下参考图5进一步描述单个单元。

在一些实现中,可以将单位矩阵(即在主对角线上为1以及其它位置为0的矩阵)传递到阵列406,从而将在值装载器402处提供的输入传递到累加器410而不进行修改。这可以用于执行两个输入的按元素相乘,其中在累加器处的第一输出可以被表示为输出=matmul(输入1,单位矩阵),其中matmul是用于矩阵运算单元执行矩阵乘法的指令,以及与按元素相乘结果对应的第二输出表示为输出*=matmul(输入2,单位矩阵)。

在一些实现中,输入和单位矩阵之间的矩阵乘法不需要与整个单位矩阵相乘,因为单位矩阵中的许多值是零。例如,为了执行768×768矩阵和对应的768×768单位矩阵的矩阵乘法,768×768单位矩阵可以由矩阵计算单元处理为9个256×256矩阵的块(tile)。在这种情况下,256×256矩阵中只有3个将包含除零之外的值,即包括768×768单位矩阵的主对角线的那些块,且另外6个块是仅包括零的矩阵。为了降低处理要求,矩阵乘法单元可以仅使用包括非零值矩阵的3个块来执行矩阵乘法,以获得正确的乘法结果。

累加的输出可以沿着与加权输入相同的列传递,例如朝向阵列406中的列的底部。在一些实现中,在每列的底部,阵列406可以包括累加器单元410,其当执行具有比行更多的激活输入的层的计算时,存储和累加来自每列的每个累加输出。累加器单元可以具有存储单元404的输出的32位整数寄存器或缓冲器。在一些实现中,每个累加器单元存储多个并行的累加。累加器单元410可以累加每个累加的输出以生成最终累加值。最终累加值可以被传送到矢量计算单元,例如图3的矢量计算单元。在一些其他实现中,当处理具有比行更少的激活输入的层时,累加器单元410将累加值传递到矢量计算单元,而不执行任何累加。

图5示出了收缩阵列(例如图4的收缩阵列406)内的单元的示例性架构500。

单元可以包括存储激活输入的激活寄存器506。激活寄存器可以基于收缩阵列内的单元的位置从左相邻单元(即位于给定单元左侧的相邻单元)或从统一缓冲区接收激活输入。单元可以包括存储加权输入的加权寄存器502。可以根据收缩阵列内的单元的位置,从顶部相邻单元或从加权提取器接口传送加权输入。单元还可以在寄存器504中包括和。寄存器504中的和可以存储来自顶部相邻单元的累加值。乘法电路508可以用于将来自加权寄存器502的加权输入与来自激活寄存器506的激活输入相乘。乘法电路508可以将乘积输出到求和电路510。

求和电路510可以将乘积和来自寄存器504中的和的累加值相加以生成新的累加值。求和电路510然后可以将新的累加值发送到位于底部相邻单元中的寄存器中的另一个和。新的累加值可以用作底部相邻单元中的求和的操作数。

求和电路510还可以接受来自寄存器504中的和的值,并将来自寄存器504中的和的值发送到底部相邻单元,而不将来自寄存器504中的和的值与来自乘法电路508的乘积相加。例如,为了执行按元素相乘,单元可以接收寄存器504中的和处的值,并且所接收的值可以被输出到相邻的单元,即,求和电路510不将乘积与所接收的值相加。单元还可以将由乘法电路508生成的乘积(与由单元按元素相乘对应),提供到相邻的单元而不对乘积和寄存器504中的和处接收到的值求和。结果是收缩阵列406可以提供与激活输入和加权的按元素相乘对应的输出矢量。

单元还可以将加权输入和激活输入移动到相邻的单元进行处理。例如,加权寄存器502可以将加权输入发送到底部相邻单元中的另一个加权寄存器。激活寄存器506可以将激活输入发送到右相邻单元中的另一激活寄存器。因此,加权输入和激活输入两者都可以在随后的时钟周期被阵列中的其他单元重新使用。

在一些实现中,单元还包括控制寄存器。控制寄存器可以存储控制信号,该控制信号确定单元是否应将加权输入或激活输入移动到相邻单元。在一些实现中,移动加权输入或激活输入需要一个或多个时钟周期。控制信号还可以确定激活输入或加权输入是否传送到乘法电路508,或者可以确定乘法电路508是否对激活和加权输入进行操作。控制信号也可以被传递到一个或多个相邻的单元,例如使用导线。

在一些实现中,加权被预先移动到加权路径寄存器512中。加权路径寄存器512可以接收例如来自顶部相邻单元的加权输入,并且基于控制信号将加权输入传送到加权寄存器502。加权寄存器502可以静态地存储加权输入,使得经过多个时钟周期将激活输入传送到单元(例如通过激活寄存器506),加权输入保持在单元内并且不被传送到相邻单元。因此,加权输入可以应用于多个激活输入,例如使用乘法电路508,并且相应的累加值可被传送到相邻单元。

图6是用于对神经网络的平均池化层执行计算的示例性处理600的流程图。通常,处理600由包括专用硬件电路的一个或多个计算机的系统执行,例如图1的系统。

系统接收在专用硬件电路(602)上实现神经网络的请求。特别地,神经网络包括平均池化层。该请求可以指定用于实现神经网络的参数(诸如使用神经网络处理的网络输入)、用于存储通过使用神经网络处理网络输入而生成的推断的位置、或其他参数。一些参数可以特定于神经网络的平均池化层,比如定义应该应用平均池化的窗口维度的参数。

该系统基于请求生成在处理神经网络的平均池化层中使用的计算张量(604)。例如,基于接收到实现神经网络的请求,其指定神经网络的网络输入的和神经网络的平均池化层的窗口,系统生成池化核、用于处理平均池化层的零填充输入张量、用于处理平均池化层的掩码张量和用于处理平均池化层的可选的第三张量。

用于计算平均池化层的第一计算张量是一个池化核。通常,核是在对输入矩阵的计算中使用的通常具有比输入矩阵更小的维度的矩阵。池化核由单位矩阵组成,且具有与为平均池化层指定的平均池窗口匹配的维度。例如,对于3x3窗口,池化核将是3x3核,其中核的每个元素都是具有dxd维度的单位矩阵,其中d是由神经网络的平均池化层处理的输入张量的深度。每个单位矩阵由诸如1和0的值组成,使得池化核与输入张量的区域的卷积将导致元素具有与在特定深度的区域内元素的和相等的值。

例如,在输入张量的深度为1的情况下,即输入张量是二维输入张量,单位矩阵将是1×1的一矩阵,即值为1的标量元素。因此,池化核将是由1组成的二维矩阵,因为池化核的每个元素都是1x1的一矩阵,即值为1的标量值。然而,如果输入张量深度为3,则池化核将是具有平均池化窗口的指定大小的二维张量,其中池化核的每个元素是具有主对角线为1以及其他位置为0的3x3单位矩阵。因此,可以并行地处理输入张量的多个维度。

神经网络计算单元150可以生成单位矩阵和由单位矩阵组成的池化核,并且可以将单位矩阵和/或核存储在专用硬件电路110可访问的位置,例如在动态存储器。或者,神经网络计算引擎150可以向专用硬件电路110提供单位矩阵和/或池化核,或者可以向专用硬件电路110提供用于生成池化核的指令,例如,池化核或用于生成池化核的指令可以由主机接口302接收。

在计算平均池化层时使用的第二计算张量可以是零填充输入张量。例如,系统可以接收实现包括平均池化层的神经网络的请求,并且基于该请求,系统可以零填充由该请求指定的网络输入张量或者平均池化层的输入张量,以生成零填充的输入张量。可以基于为神经网络的平均池化层指定的窗口来生成零填充的输入张量。在一些实现中,系统的神经网络实现引擎150可以零填充输入张量,并且可以将零填充的输入张量提供给专用硬件电路110。或者,神经网络实现引擎150可以生成指令用于控制专用硬件电路110以生成零填充输入张量。指令和输入张量可以由专用硬件电路的主机接口302接收,并且基于接收到的指令的控制信号可以控制矢量计算单元314、直接存储器访问引擎304或者其他组件专用硬件电路在统一缓冲器308处存储输入张量的零填充版本。

在由专用硬件电路110执行零填充的一些实现中,通过首先将输入张量复制到输出的适当部分(例如在统一缓冲器308中),然后在存储器中的适当位置处写入零来获得零填充输入张量来实现零填充。例如,对于平均池化层的3x3窗口和8x8输入张量,零填充输入张量将是10×10张量。假设用于零填充的输入和输出两者的数据的光栅扫描排序,零填充输出张量将被构造为与输入矩阵的零填充的第一行对应的初始10个零,随后是8行,每行由左填充的一个零、来自输入张量的一行的八个值和右填充的另一个零,之后是与零填充的最后一行对应的另外10个零。

为了实现这种零填充,输入张量可以从统一缓冲器308加载到矩阵计算单元312中,例如基于从来自于神经网络实现引擎150的指令生成的控制信号。输入张量和单位矩阵的乘法在矩阵计算单元312处执行,以将输入张量的激活值加载到累加器中,然后在累加器中可以将它们存储在统一缓冲器308中的适当位置用于零填充输入张量。矢量计算单元314然后可以在统一缓冲器308处写入适当的零,以生成零填充输入张量。

在一些实现中,系统还可以生成用于处理神经网络的平均池化层的第三计算张量。第三张量由每个均与平均池化神经网络层的窗口中元素数量的倒数相等的元素组成。神经网络实现150可以基于接收到的实现神经网络的请求来生成第三张量。例如,神经网络实现引擎150可以生成与神经网络的平均池化层的输入张量相同大小的第三张量,并且可以使用与针对平均池化层指定的窗口中的元素数量的倒数相等的值来填充张量。生成的第三张量可以存储在专用硬件电路110可访问的存储器位置,或者可以被提供给专用硬件电路110用于计算平均池化层。或者,专用硬件电路110可以基于从神经网络实现引擎150接收的指令来生成第三张量。

在一些实现中,由系统生成的第四计算张量是掩码张量。通常,掩码张量由用于在神经网络的平均池化层的计算中执行重新缩放操作的值组成。具体地,掩码张量的值可以基于到平均池化层的输入张量的维度和针对平均池化层指定的窗口的大小来确定,使得每个值反映被平均以生成相应的输出张量值的输入张量值的数量。

掩码张量的大小可以基于指定的网络输入的维度或到神经网络的平均池化层的输入张量的预期大小来确定。掩码张量中的元素的值可以基于平均池化层的指定窗口以及到平均池化层的网络输入或输入张量的维度来确定。掩码张量的元素被设置为允许在执行平均池化计算中生成的元素重新缩放,例如重新缩放在平均池化层的处理期间生成的初始输出张量的边缘和角元素。如果神经网络包括多于一个的平均池化层,则系统可以针对平均池化层中的每一个生成掩码张量。在一些实现中,系统通过平铺存储在存储器中的一个或多个掩码张量片段来生成掩码张量。例如,元素行或元素行的段可以被平铺以生成掩码张量,例如,被布置成形成由掩码张量片段组成的更大的掩码矢量或矩阵。在一些实现中,系统可以在例如存储器中存储掩码矩阵库,并且可以从库中选择掩码矩阵。

掩码张量可以由神经网络实现引擎150生成,或者可以生成用于控制专用硬件电路110以生成掩码张量的指令。例如,神经网络实现引擎150可以基于实现神经网络的请求生成掩码张量,并将掩码张量存储在专用硬件电路110可访问的存储器位置中,例如在动态存储器310处。为了生成掩码张量,神经网络实现引擎150可以访问张量片段并且可以汇编张量片段以在存储器中生成掩码张量。或者,神经网络实现引擎150可以生成掩码张量并且向专用硬件电路110提供该掩码张量,其可由主机接口302被接收。在其他实现中,神经网络实现引擎150可以提供指令到专用硬件电路110,用于控制专用硬件电路110以生成掩码张量。例如,指令可以控制专用硬件电路110,例如从动态存储器110可访问的张量片段生成掩码张量,并将掩码张量存储在例如动态存储器110。

该系统生成指令,当该指令由系统的专用硬件电路运行时,使得专用硬件电路在由神经网络处理网络输入的处理期间生成与平均池化神经网络层(606)的输出等价的层输出张量。例如,响应于该请求,图1的系统的神经网络实现引擎150生成指令,该指令引导或控制专用硬件电路110以生成输出张量(即,输出矢量),该输出张量与专用硬件电路110如果通过对输入张量执行平均池化来处理来输入张量,应该生成的输出等价。

系统将指令和计算张量发送到专用硬件电路(608)。例如,神经网络实现引擎150可以向图1的系统的专用硬件电路110提供指令。并且专用硬件电路110可以接收指令,例如在专用硬件电路的主机接口302处。神经网络实现引擎150还可以将计算张量提供给专用硬件电路110,例如,其可以由主机接口302接收。或者,提供给专用硬件电路110的指令可以使得专用硬件电路110生成或访问例如在存储器中的用于计算平均池化层的计算张量。神经网络实现引擎150还可以提供用于神经网络的计算的其他指令和/或参数,其可由专用硬件电路110接收。通过向专用硬件电路110提供指令、掩码张量和/或参数,专用硬件电路110可以以非常低的延时来计算神经网络的平均池化层,以减少后续神经网络层计算的延迟。

图7是用于计算神经网络的平均池化层的示例性过程700的流程图。在一些实现中,过程700可以基于从神经网络实现引擎150接收的指令,由图1的系统的专用硬件电路110执行。

例如,如图6所描述的,可以向专用硬件电路110提供由神经网络实现引擎150生成的指令,并且可以基于指令执行过程700。指令可以由专用硬件电路的主机接口302接收并发送到专用硬件电路的定序器306,其中定序器306可将指令转换成低级控制信号,其控制专用硬件电路的组件来执行平均池化层计算。

基于接收到的指令,专用硬件电路执行到平均池化神经网络层的输入张量、以及作为具有与平均池化神经网络层的窗口相等的大小的池化核的核的卷积,以生成总和输出张量(702)。例如,基于接收到的指令生成的控制信号控制专用硬件电路,以执行到神经网络的平均池化层的输入张量(例如,网络输入或之前的神经网络的输出)和池化核的卷积。如果神经网络的平均池化层是神经网络中的第一层,则平均池化层将处理到神经网络的网络输入,例如,代表包括与数字图片的像素对应的元素的数字图像的输入。否则,如果神经网络的平均池化层不是神经网络中的第一层,则输入张量可以是神经网络的之前层的输出张量。

为了执行卷积,输入张量可以位于统一缓冲器308中,例如,如果输入张量是神经网络的之前层的输出,或者可以被接收并存储在统一缓冲器308中,例如,如果输入张量是网络输入。输入张量然后可以从统一缓冲器308发送到矩阵计算单元312。另外,如图6所讨论的,可以生成或接收池化核,即具有单位矩阵作为其元素的矩阵,并且存储在动态存储器310中。基于平均池化层的窗口来确定池化核的大小。例如,如果平均池化层指定平均池化的3×3窗口,则可以例如在主机接口302处接收3×3池化核并且发送到动态存储器310,或者可以在动态存储器310中识别,例如,当动态存储器310存储了不同维度的一组池化核时。池化核的元素,即单位矩阵,从动态存储器310发送到矩阵计算单元312。

矩阵计算单元312执行输入张量和池化核的卷积以生成总和输出张量。将输入张量与池化的核进行卷积,得到具有与输入张量相匹配的大小的总和输出张量。在一些实现中,可以使用在公开号wo2016/186811的pct申请中公开的技术执行卷积,该pct申请通过引用整体并入本文。总和输出张量的每个元素与当应用于输入张量的相应元素时由窗口定义的输入张量的区域内的输入张量的元素之和等价。如果输入张量具有大于1的深度d,使得池化核的元素每个都是dxd单位矩阵的情况下,输入张量和池化核的卷积使得输入张量的不同深度可以被并行处理以生成总和输出张量。以这种方式,可以减少计算总和输出张量的延时。总和输出张量可以存储在统一缓冲器308中。在一些示例中,矩阵计算单元312可以向矢量计算单元314提供总和输出张量,并且矢量计算单元314将总和输出张量存储在统一缓冲器308中。

在一些实现中,执行输入张量和池化核的卷积涉及执行零填充输入张量和池化核的卷积。例如,如关于图6所讨论的,可以生成输入张量的零填充版本,并且可以对零填充输入张量和池化核卷积以生成总和输出张量。为了执行卷积,可以生成零填充输入张量并将其存储在统一缓冲器308上。然后可以执行类似于上述的卷积处理,以生成与输入张量具有相同大小的总和输出张量。例如,零填充输入张量和池化核可以被提供给矩阵计算单元312,其中矩阵计算单元312可以执行卷积运算,并将得到的值发送到统一缓冲器308,以被存储为总和输出张量。

在一些实现中,卷积运算利用定点运算。为了保持分辨率,可以在矩阵计算单元的累加器410处维持卷积的结果。因为在一些实现中,每个累加器为32位宽,所以卷积的结果(即池化窗口内的输入张量的元素的和)将不会溢出累加器410。因此,可以在平均池化计算的这一步维持分辨率。

基于所接收的指令,专用硬件执行操作以使得总和输出张量的每个元素除以平均池化神经网络层的窗口中的元素数量以生成初始输出张量(704)。例如,控制信号可以由定序器306基于在主机接口302处从神经网络实现引擎接收的指令来生成,用于将总和输出张量的每个元素乘以与平均池化神经网络层的窗口的倒数相等的因子。

在一些实现中,控制信号使得专用硬件电路通过将总和输出张量和由每个与平均池化神经网络层的窗口的元素数量的倒数相等的元素组成的张量执行按元素相乘来生成初始输出张量。如关于图6所讨论的,专用硬件电路可以例如在主机接口302处接收这样的矩阵,并且可以将矩阵存储在动态存储器310中。或者,专用硬件电路可以执行操作以生成矩阵,并且将矩阵存储在动态存储器310中。矩阵可以具有与总和输出张量的大小匹配的大小,其也与输入张量的大小匹配。例如,如果将平均池化层指定为具有3×3窗口(即9个元素的窗口),则具有值为1/9(或约0.11)并且具有总和输出张量的维度的元素的矩阵可以由专用硬件电路的主机接口302接收。矩阵可以存储在动态存储器310中。或者,这样的矩阵可能已经存储在动态存储器310中,并且可以由专用硬件电路来识别。

为了执行总和输出矢量和矩阵的按元素相乘,可以从统一缓冲器308向矩阵计算单元312提供总和输出矢量,并且另一矩阵可以从动态存储器310提供到矩阵计算单元312。可以执行矩阵的按元素相乘,并且按元素相乘的输出可以存储在统一缓冲器308中。例如,矩阵计算单元312可以基于所接收的控制信号执行按元素相乘,并将结果初始输出张量提供给矢量计算单元314,其然后可以将初始输出张量存储在统一缓冲器308处。

或者,可以通过执行总和输出矢量与因子的标量乘法来实现总和输出矢量的元素乘以与窗口中的元素的数量的倒数相等的因子。例如,可以从矩阵计算单元312向矢量计算单元314提供总和输出矢量,并且矢量计算单元314可以对总和输出矢量应用函数,将总和输出矢量的元素乘以因子以生成初始输出矢量。然后,矢量计算单元314可以将初始输出矢量存储在统一缓冲器308。

虽然这里被讨论为通过乘法来执行,但是在一些实现中,可以执行其他操作以获得初始输出矢量。因此,专用硬件电路可以执行将总和输出矢量的元素除以平均池化层的指定窗口中的元素的数量的操作以获得初始输出矢量,而不是专用硬件电路将总和输出矢量的元素乘以平均池化层的指定窗口的元素数量的倒数,即其中专用硬件电路能够执行除法。

虽然执行步骤702和704使得专用硬件电路能够提供对于平均池化层总体上精确的输出,但是输出将具有不是适当的平均值的某些元素。例如,当将具有3×3窗口的平均池化层应用于输入张量的角元素时,输出张量的相应角元素的值将仅是输入张量的相应角元素和输入张量中的3个相邻元素的平均值,即仅4个元素的平均值。然而,通过将总和输出矢量的角元素乘以3×3窗口的元素数量的倒数,即乘以1/9,对于该元素,初始输出张量中所计算的平均值可能是不正确的。

为了解决这个问题,系统可以重新缩放初始输出张量的元素以生成输出张量(706)。为了执行重新缩放,如关于图6的步骤604所讨论的专用硬件电路110可以接收或生成掩码张量。掩码张量可以由专用硬件电路访问,例如在动态存储器310处,并且可以被提供给矩阵计算单元312。可以执行初始输出张量和掩码张量的按元素相乘以生成与神经网络的平均池化层的输出对应的输出张量。输出张量可以例如由矢量计算单元314存储在统一缓冲器308处。

如关于过程600的步骤604所讨论的,掩码张量可以具有与输入张量的大小相对应的大小,其也与总和输出张量和初始输出张量的大小对应。可以基于输入张量的维度和针对神经网络的平均池化层指定的窗口来确定掩码张量的值,使得每个值反映被平均以生成输出张量的对应值的输入张量值的数量。例如,对于3×3平均窗口和大小为3×3或更大的二维输入张量,掩码张量将包括针对角元素的9/4因子和针对边缘元素的9/6因子,掩码张量的值的剩余值是1。因此,在乘以与窗口中元素数量的倒数相等的因子(即1/9)之后,以9/4的比例将角元素重新缩放将导致总和输出张量的角值除以4,这是合适的,因为将3x3池化核应用于输入张量的角元素,导致输入张量的4个元素被相加以生成总和输出张量的角元素。

在其他实现中,系统可以首先针对被求和以生成求和输出张量的每个值的输入张量的激活值的数量确定最小公分母,而不是执行将总和输出张量的元素除以平均池化层的窗口中的元素的数量的操作。因此,对于3×3窗口和3×3或更大的二维输入张量,将输入张量的4个元素相加以生成总和输出张量的角元素,将输入张量的6个元素相加以生成总和输出张量的边缘元素,并且将输入张量的9个元素相加以生成输入张量的其他元素。因此,最小公分母将是36。为了生成平均池化层的适当值,可以确定掩码张量在角元素处具有9,在边缘元素处具有6,在其他地方具有4。执行操作以将总和输出张量的每个元素除以最小公分母,随后使用掩码张量重新缩放,然后将生成用于平均池化层的精确输出的输出张量。也就是说,执行总和输出张量和由最小公分母的倒数(即1/36或约0.03)组成的矩阵的按元素相乘,结合与掩码张量的按元素相乘,将得到是神经网络的平均池化层的精确输出的输出张量。

其中执行整数乘法而不是分数乘法的这种技术在某些实现中被采用,以保持在整个计算中生成的值的分辨率。如所讨论的,在一些实现中,矩阵计算单元312的累加器410是32位宽,而例如在矢量计算单元314的激活单元处的激活是8位或16位宽。该系统可以使用32位、8位或16位寄存器执行定点运算,以便在产生平均池化层输出时执行计算。但是,只有激活才能执行分数操作。因为激活具有较低的分辨率,即8位或16位对32位,所以希望执行整数计算以在可能的情况下维持分辨率。一旦例如由矢量计算单元314的激活单元对存储在32位累加器中的值执行激活操作,则结果值的分辨率将被丢失。

因此,使用整数执行按元素相乘,与在激活中使用分数执行按元素相乘相比,可以在累加器中以更高的分辨率来保持结果。在其中仅使用整数运算(即,不使用分数乘法)来执行平均池化操作的情况下,可以维持最高分辨率。如果必须执行至少一些分数运算,减少在激活中执行的分数运算操作的数量可以减少使用较低分辨率激活产生的量化结果。

图8描绘了神经网络的平均池化层的计算的示例。可以由图3的专用硬件电路使用图7的过程来执行图8的示例。通过表述的方式,图8的示例将平均池化层应用于激活值的二维8×8阵列。神经网络的平均池化层可以具有3×3窗口,例如,实现神经网络的请求可以指定平均池化层具有3×3窗口,这意味着平均池化层的输出的每个元素将是输入张量的相应元素和与输入张量的相应元素相邻的输入张量的8个元素的数值平均。图8所示的8×8输入张量可以表示作为网络输入输入到神经网络的图像的8×8部分,或者可以表示另一输入张量的8×8部分,例如与神经网络的之前层的输出对应的输入张量。

在图8的部分(a)中,执行8×8输入张量和池化核的卷积以生成总和输出张量。如图所示,池化核是为1的3x3核。这是因为输入张量是二维的(即具有深度一),使得池化核的每个元素是1x1单位矩阵,即标量值为1。输入张量和池化核的卷积导致总和输出张量,其中总和输出张量的每个元素与输入张量的相应元素和与输入张量的相应元素相邻的八个元素的和对应,即,当以矩阵格式写入时,围绕输入张量的相应元素的8个元素。由于输入张量可以以光栅扫描顺序存储在存储器中(即在均匀缓冲器308中),所以相加以生成总和输出张量的元素的输入张量的元素可能不会在存储器中相邻。虽然图8中未示出,但输入张量也可以是如关于图7的过程700所描述的零填充输入张量。

对于图8的部分(a)中所示的具体示例,3x3池化核被应用于输入张量以生成与总和输出张量的(1,1)位置对应的总和输出张量的元素。因此,总和输出张量的(1,1)元素是与输入张量的矩阵位置(0,0)、(1,0)、(2,0)、(1,0)、(1,1)、(1,2)、(2,0)、(2,1)和(2,2)对应的元素的和。因此,对于部分(a)中所示的值,与总和输出张量的(1,1)位置相对应的元素是36。相似地计算总和输出张量的其他元素,但是在图8的示例中未示出。

在图8的部分(b)中,总和输出张量的元素乘以与平均池化神经网络层的窗口中的元素数量的倒数相等的因子,以生成初始输出张量。为了执行乘法,生成具有与总和输出张量的大小相等的大小的掩码张量,其也与输入张量的大小相同。掩码张量的元素与平均池化神经网络层窗口中元素数量相等的倒数。因此,如图8所示,掩码张量是每个值等于1/9的8×8阵列,如图8所示,近似为0.11。

总和输出张量和掩码张量的按元素相乘导致初始输出张量,其中初始输出张量的每个元素等于总和输出张量的相应元素与掩码张量的相应元素的乘积。因此,基于36*(1/9)=4,位于初始输出张量的(1,1)位置的元素是4。可以类似地计算初始输出张量的其他元素,但是未在图8中示出。另外,尽管在图8中被示出为通过按元素相乘来执行,但是在一些实现中,初始输出张量可以通过执行总和输出张量和与平均池化层的窗口中的元素数量的倒数相等的因子的标量乘法来实现。因此,对于图8中所示的示例,例如由矢量计算单元314执行的总和输出张量和1/9的标量乘法,将导致初始输出张量。

在图8的部分(c)中,初始输出张量的元素被重新缩放以生成针对神经网络的平均池化层的输出张量。为了执行重新缩放,在初始输出张量和第二掩码张量之间执行按元素相乘。第二掩码张量的大小与初始输出张量的大小相匹配,这也与总和输出张量和输入张量两者的大小相同。基于在图8的部分(a)中执行卷积时与池化核的元素相乘的输入张量的元素的数量来确定第二掩码张量的元素。因此,在图8的示例中,将3x3加权矩阵应用于输入张量的角元素,导致池化核的9个元素中的4个乘以输入张量的元素,并将3x3池化核应用于输入张量的边缘元素导致池化核的9个元素中的6个乘以输入张量的元素。对于输入张量的所有其他元素,应用3x3池化核会导致池化核的所有9个元素与输入张量的元素相乘。

因此,第二掩码张量的元素被设置为使得乘以平均池化层的窗口的元素的数量的第一乘法和乘以重新缩放因子的第二乘法将导致适当的平均计算被应用于输出张量。因此,对于输入张量的角元素,其中当池化核被施加到角元素时,输入张量仅有4个元素被平均,总和输出张量的相应元素如部分(b)所示的先乘以1/9(即0.11),然后乘以9/4,导致总和输出矢量的角元素有效地除以4。换句话说,重新缩放因子是例如基于对在初始输出张量中的特定元素做出贡献的加数的数量确定的。

在一些实现中,部分(b)的掩码张量和部分(c)的第二掩码张量由图1的神经网络实现引擎150生成,并提供给专用硬件电路110。专用硬件电路110可以接收生成的掩码张量,例如在主机接口302处,并且可以存储掩码张量用于平均池化层的计算,例如通过在动态存储器310处存储掩码张量。或者,神经网络实现引擎150可以向专用硬件电路110提供指令,该指令使得专用硬件电路在动态存储器310生成和/或存储掩码张量,例如通过使得专用硬件电路110平铺张量片段来生成掩码张量,并将所生成的掩码张量存储在动态存储器310中。

初始输出张量和第二掩码张量的按元素相乘导致输出张量,然后可以将该输出张量存储在统一缓冲器308中作为神经网络的平均池化层的输出。对于图8所示的示例,池化核的所有9个元素被应用于具有位置(1,1)的输入张量的元素,因此第二掩码张量的相应因子为1。因此,输出张量的(1,1)位置元素与初始输出张量的相应元素相同,具有值4。对于初始输出张量的所有其他元素可以执行相同的按元素乘法,以生成输出张量。

在某些情况下,例如在矢量计算单元314的激活单元的激活中执行在图8所示的总和输出张量和掩码张量以及初始输出张量和第二掩码张量的按元素相乘。当按元素相乘的操作都是定点运算时,这可能发生,在一些实现中,可以由激活处理,而不是由累加器来处理。

图9描绘了神经网络的平均池化层的计算的另一示例。图9的示例可以由图3的专用硬件电路使用图7的过程来执行。通过表述的方式,图9的示例将平均池化层应用于8x8激活值阵列。神经网络的平均池化层可以具有3×3窗口,例如,实现神经网络的请求可以指定平均池化层具有3×3窗口,这意味着平均池化层的输出的每个元素将是输入张量的相应元素和输入张量的相应元素的8个相邻元素的数值平均值。图9中所示的8×8输入张量可以表示作为网络输入输入到神经网络的图像的8×8部分,或者可以表示另一个输入张量的8×8部分,例如与神经网络的之前层的输出对应的输入张量。

在图9的部分(a),对神经网络的平均池化层的输入张量已经被零填充以生成零填充输入张量。提供给专用硬件电路的指令可用于生成控制信号,以控制专用硬件电路对输入张量进行零填充。零填充可以如下达到,例如通过将来自统一缓冲器308的输入张量提供给矩阵计算单元312,在矩阵计算单元312处将输入矩阵与单位矩阵相乘,将输出存储在统一缓冲器308,然后例如通过矢量计算单元314执行激活操作,以将零写入统一缓冲器308中的适当位置,以生成零填充输入张量。所得的零填充输入张量是10×10矩阵,其具有10个零的第一行,每行具有第一个零、来自输入张量的一行的8个值、以及在该行的末尾具有第二个零的8行,10个零的最后一行。

零填充输入张量与核进行卷积,该核是具有与针对神经网络的平均池化层指定的窗口的大小相等的池化核。因此,对于图9中所示的示例,由1x1单位矩阵(即1)组成的3×3核与零填充输入张量进行卷积以生成总和输出张量。如图所示,将零填充输入张量与池化核进行卷积生成总和输出张量,其中,总和输出张量的每个元素与零填充输入张量的相应元素和与零填充输入张量的相应元素相邻的8个元素的和相等。因此,图9中所示的总和输出张量的(0,0)元素等于8,即和0+0+0+0+0+1+0+3+4=8。可以执行类似的过程以获得总和输出张量的其他元素中的每一个,图9中未示出。

在图9的部分(b),执行总和输出张量和掩码张量的按元素相乘。图9的掩码张量可以通过首先确定针对神经网络的平均池化层指定的窗口中的元素的数量,以及用于生成总和输出张量的每个元素的输入张量的元素的数量的最小公分母来确定。对于图9的示例,最小公分母因此为36,即,9(也即3×3窗口中的元素数量)、4(也即被相加以生成和输出张量的角元素的输入张量的元素的数量)、以及6(也即被相加以生成总和输出张量的边缘元素的输入张量的元素的数量)的最小公分母。

然后基于最小公分母以及被相加以生成总和输出张量的相应元素的输入张量的元素数量来确定掩码张量的因子。这些因子将允许总和输出张量的元素与最小公分母的倒数相乘,以及乘以因子,以生成一个值,该值是总和输出张量元素除以被相加以生成总和输出张量的输入张量元素的数量所得到的值。因此,掩码张量的角元素是9,即,由于总和输出张量的角元素乘以9并且乘以1/36将导致角元素被适当地除以4。掩码张量的边缘元素是6,即,由于总和输出张量的边缘元素乘以6并乘以1/36将导致角元素被适当地除以6。掩码张量的其他元素是4,即,由于总和输出矢量的相应元素乘以4和1/36将导致被适当的除以9。

总和输出张量和掩码张量的按元素相乘导致图9的部分(b)所示的初始输出张量。例如,总和输出张量可以从统一缓冲器308提供给矩阵计算单元312,并且由专用硬件电路接收或生成的掩码张量可以从动态存储器310提供给矩阵计算单元312。矩阵计算单元312执行按元素相乘以生成初始输出张量。例如,等于8的总和输出张量的角元素和值为9的掩码张量的相应元素的按元素相乘导致初始输出张量的角元素的值为72。执行类似的过程以生成初始输出张量的其他元素,为简化起见,在图9中未示出。

在图9的部分(c),初始输出张量乘以第二掩码张量以生成输出张量。第二掩码张量是具有与初始输出张量相同大小、并且由每个等于所确定的最小公分母的倒数(即1/36或约0.03)的元素组成的矩阵。执行初始输出张量和第二掩码张量的按元素相乘以生成输出张量。例如,初始输出张量可以存储在统一缓冲器308处,并且可以从统一缓冲器308提供给矩阵计算单元312。第二掩码张量可以存储在动态存储器310中,并且还可以被提供给矩阵计算单元312,其中执行按元素相乘以生成输出张量。例如,具有值为72的初始输出张量的角元素与值为1/36的第二掩码张量的相应元素的按元素相乘导致输出张量的相应角元素具有值2。可以执行按元素相乘以生成输出张量的其他元素,其在图9中未示出。或者,可以例如由矢量计算单元314将标量乘法函数应用于初始输出张量。所得到的输出张量可以存储在统一缓冲器308中。

值得注意的是,图9中执行的计算可能限制量化误差的发生。通过使用整数来执行部分(b)所示的按元素相乘,可以在累加器中而不是在激活中执行计算。因此,当累加器具有比激活更高的分辨率时,部分(b)计算的输出可以保持在较高的分辨率。在部分(b)计算处的这种增加的分辨率将因此增加由部分(c)计算生成的输出张量的精度。

本说明书中描述的主题和功能操作的实施例可以在数字电子电路中、在有形实施的计算机软件或固件中、在计算机硬件中,包括本说明书中公开的结构及其结构等同物、或者它们的一个或多个的组合中实现。本说明书中描述的主题的实施例可以被实现为一个或多个计算机程序,即,在有形的非暂态程序载体上编码的一个或多个计算机程序指令的模块,用于由数据处理的装置运行或控制数据处理的装置。或者地或另外地,程序指令可以被编码在人工生成的传播信号上,例如机器生成的电、光或电磁信号,其被生成以编码信息以便发送到合适的接收机装备以供数据处理设备运行。计算机存储介质可以是机器可读存储设备、机器可读存储基板、随机或串行存取存储器件、或它们中的一个或多个的组合。

术语“数据处理装置”包括用于处理数据的各种装置、设备和机器,包括例如可编程处理器、计算机或多个处理器或计算机。该装置可以包括专用逻辑电路,例如fpga(现场可编程门阵列)或asic(专用集成电路)。除了硬件之外,该设备还可以包括为所述计算机程序创建执行环境的代码,例如构成处理器固件的代码、协议栈、数据库管理系统、操作系统或它们一个或更多的组合。

计算机程序(也可以被称为程序、软件、软件应用程序、模块、软件模块、脚本或代码)可以以任何形式的编程语言编写,包括编译或解释语言,或声明性或程序性语言,并且可以以任何形式部署,包括作为独立程序或适用于计算环境的模块、组件、子程序或其他单元。计算机程序可以但不一定与文件系统中的文件对应。可以将程序存储在保存其他程序或数据的文件的一部分中(例如存储在标记语言文档中的一个或多个脚本)、在专用于所述程序的单个文件中、或者存储在多个协调文件中(例如,存储一个或多个模块、子程序或代码部分的文件)。可以将计算机程序部署为在一个计算机上、或者位于一个站点上或分布在多个站点上并由通信网络互连的多个计算机上执行。

本说明书中描述的过程和逻辑流程可以由运行一个或多个计算机程序的一个或多个可编程计算机执行,以通过对输入数据进行操作并生成输出来执行功能。处理和逻辑流程也可以由专用逻辑电路(例如fpga(现场可编程门阵列)或asic(专用集成电路))执行,并且装置也可以被实现为专用逻辑电路(例如fpga(现场可编程门阵列)或asic(专用集成电路))。

适用于运行计算机程序的计算机可以包括,例如,基于通用或专用微处理器或两者、或任何其它类型的中央处理单元。通常,中央处理单元将从只读存储器或随机存取存储器或两者接收指令和数据。计算机的基本元素是用于执行或运行指令的中央处理单元以及用于存储指令和数据的一个或多个存储器件。通常,计算机还将包括或可操作地耦合以从例如磁、磁光盘或光盘的一个或多个用于存储数据的大容量存储设备接收数据或传输数据到一个或多个用于存储数据的大容量存储设备、或同时接收数据和传输数据。但是,计算机不需要具有这样的设备。此外,计算机可以嵌入在另一设备中,例如移动电话、个人数字助理(pda)、移动音频或视频播放器、游戏控制台、全球定位系统(gps)接收器或便携式存储设备,例如通用串行总线(usb)闪存驱动器,仅举几例。

适用于存储计算机程序指令和数据的计算机可读介质包括所有形式的非易失性存储器、介质和存储器件,包括:例如半导体存储器件(例如eprom、eeprom和闪速存储器件)、磁盘(例如内部硬盘或可移动盘)、磁光盘、以及cdrom和dvd-rom磁盘。处理器和存储器可由专用逻辑电路补充或并入其中。

为了发送与用户的交互,本说明书中描述的主题的实施例可以在具有用于向用户显示信息显示设备(例如crt(阴极射线管)或lcd(液晶显示器)监视器)、以及用户可以通过其向计算机发送输入的键盘以及指示设备(例如鼠标或轨迹球)的计算机上实现。也可以使用其他类型的设备发送用于与用户的交互;例如,提供给用户的反馈可以是任何形式的感知反馈,例如视觉反馈、听觉反馈或触觉反馈;并且可以以任何形式接收来自用户的输入,包括声音、语音或触觉输入。此外,计算机可以通过向用户使用的设备发送文档并从其接收文档来与用户进行交互;例如,通过响应于从网络浏览器接收的请求,将网页发送到用户的客户端设备上的网络浏览器。

本说明书中描述的主题的实施例可以实现为包括后端组件(例如,作为数据服务器)、或包括中间件组件(例如,应用服务器)、或者包括前端组件(例如,具有用户可以通过其与本说明书中描述的主题进行交互的图形用户界面或web浏览器的客户端计算机)、或者一个或多个这样的后端、中间件或前端组件的任何组合的计算系统。系统的组件可以通过数字数据通信的任何形式或介质,例如通信网络互连。通信网络的示例包括局域网(“lan”)和广域网(“wan”),例如因特网。

计算系统可以包括客户端和服务器。客户端和服务器通常彼此远离,并且通常通过通信网络进行交互。客户端和服务器之间的关系是由于在相应的计算机上运行的并且彼此之间具有客户端-服务器关系的计算机程序而出现的。

虽然本说明书包含许多具体的实现细节,但是这些细节不应被解释为对任何发明的范围或所要求保护的范围的限制,而应被解释为对特定发明的特定实施例的特定特征的描述。在本说明书中,在分离的实施例的环境中所描述的某些特征也可以在单个实施例的组合中实现。相反,在单个实施例的环境中描述的各种特征也可以分开地或以任何合适的子组合在多个实施例中实现。此外,虽然特征在某些组合中可以如上被描述为动作并且甚至最初这样要求保护,但是在某些情况下,可以从所要求保护的组合中去除组合的一个或多个特征,并且所要求保护的组合可以指向子组合或子组合的变化。

类似地,虽然在附图中以特定次序描绘操作,但是这不应被理解为要求以所示的特定次序或按顺序执行这些操作,或者执行所有所示的操作以获得期望的结果。在某些情况下,多任务和并行处理可以是有利的。此外,上述实施例中的各种系统模块和组件的分离不应被理解为在所有实施例中需要这种分离,并且应当理解,所描述的程序组件和系统通常可以集成在单个软件产品中或打包成多个软件产品。

已经描述了主题的具体实施例。其他实施例在所附权利要求的范围内。例如,权利要求中所记载的动作可以以不同的顺序执行,并且仍然实现期望的结果。作为一个示例,附图中描绘的过程不一定需要所示的特定次序或顺序来实现期望的结果。在某些实现中,多任务和并行处理可以是有利的。

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