硬件中转置神经网络矩阵的制作方法

文档序号:15518904发布日期:2018-09-25 18:56阅读:442来源:国知局

本说明书涉及在硬件中转置神经网络矩阵。



背景技术:

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



技术实现要素:

总体上,本说明书描述一种计算神经网络推理的专用硬件电路。

本说明书中所描述的主题的一个创新方面可用包括以下步骤的动作的方法加以具体实现:接收要在具有矩阵计算单元的硬件电路上针对神经网络执行计算的请求,该请求指定要对与神经网络相关联的第一神经网络矩阵执行的转置运算;以及生成当由硬件电路执行时使硬件电路通过执行第一操作来转置第一神经网络矩阵的指令,其中,第一操作包括重复地执行以下第二操作:对于将第一神经网络矩阵划分成一个或多个当前子矩阵的第一神经网络矩阵的当前细分,通过使用矩阵计算单元来交换当前细分中的每个当前子矩阵的右上象限和左下象限来更新第一神经网络矩阵,以及将当前子矩阵中的每个当前子矩阵细分成相应的多个新的子矩阵以更新当前细分,相应的多个新的子矩阵中的每一个是当前子矩阵的相应的象限。

这个方面的其它实施例包括记录在一个或多个计算机存储设备上的对应的计算机系统、装置和计算机程序,分别被配置成执行方法的动作。一个或多个计算机的系统可被配置成利用安装在系统上的在操作中可以使系统执行动作的软件、固件、硬件或其任何组合来执行特定操作或动作。一个或多个计算机程序可被配置成利用包括当由数据处理装置执行时使装置执行动作的指令来执行特定操作或动作。

这个方面的实施例可以包括以下可选特征中的一个或多个。在一些实施方式中,第一操作包括确定第一神经网络矩阵不是i×i矩阵,其中i是用于硬件电路的矢量长度值;作为响应,通过在执行第二操作的所有迭代之前对第一神经网络矩阵进行零填充来更新第一神经网络矩阵以生成i×i矩阵;以及在执行第二操作的所有迭代之后,通过去除在更新期间填充的零来将第一神经网络矩阵转换为其在更新之前的状况。在一些实施方式中,第一操作还包括获得指示第一神经网络矩阵的一个或多个值是零值的数据;并且更新第一神经网络矩阵包括防止矩阵计算单元对包括第一神经网络矩阵的为零值的一个或多个值中的至少一个的一组值执行任何运算。在一些实施方式中,交换当前子矩阵的右上象限和每个当前子矩阵的左下象限包括:将第一神经网络矩阵的每行乘以一个或多个部分单位矩阵以生成一个或多个矢量,一个或多个矢量其每一个包括其中每个相应的当前子矩阵的右上象限和左下象限的元素被交换的相应行的部分;对于第一神经网络矩阵的每行,将与其中每个相应的当前子矩阵的右上象限和左下象限的元素被交换的第一神经网络矩阵的每个相应行的部分相对应的矢量组合;以及通过组合每个相应行来生成更新的第一神经网络矩阵。在一些实施方式中,矩阵计算单元执行矩阵乘法运算作为一系列矢量乘法运算。在一些实施方式中,第二操作还包括生成第一神经网络矩阵的初始当前细分,其中,初始当前细分包含作为第一神经网络矩阵的初始子矩阵。在一些实施方式中,第一操作还包括将指令发送到硬件电路。

可实现本说明书中所描述的主题的特定实施例以便实现以下优点中的一个或多个。即使在硬件电路不能直接地执行矩阵转置运算的情况下,也可通过专用硬件电路用硬件执行针对矩阵的转置运算。通过使用专用硬件电路来执行转置运算,即使专用硬件电路不直接地支持这种处理,也可执行指定转置运算的神经网络运算或其它运算的处理,而不用将数据传回到主计算机,即,而不用在芯片外执行计算的至少一部分。这允许在不用修改专用硬件电路的硬件架构的情况下对矩阵执行转置运算。也就是说,避免了由在芯片外、用软件或两者执行所述处理的一部分生成的处理延迟。

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

附图说明

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

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

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

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

图5示出脉动阵列内部的cell的示例架构。

图6示出矢量计算单元的示例架构。

图7是用于实现在矩阵上指定转置运算的神经网络的示例过程的流程图。

图8是使用矩阵计算单元来交换子矩阵的右上和左下象限的示例过程的流程图。

图9是用于对神经网络矩阵执行转置运算的计算的示例。

在各个附图中相同的附图标记和名称指示相同的元件。

具体实施方式

可使用具有多个层的神经网络来计算推理。例如,给定一个输入,神经网络可计算该输入的推理。神经网络通过经由神经网络的每层处理输入来计算此推理。每层接收一个输入并且依照用于该层的权重集来处理输入以生成输出。

因此,为了从接收到的输入计算推理,神经网络接收输入并且通过神经网络层中的每一个对它进行处理以生成推理,其中来自一个神经网络层的输出被作为输入提供给下一个神经网络层。神经网络层的数据输入(例如,神经网络的输入或在顺序上位于该层下面的层到神经网络层的输出)可被称为对该层的激活输入。

在一些实施方式中,神经网络的层被按序排列。在一些其它实施方式中,层作为有向图被排列。也就是说,任何特定层可接收多个输入、多个输出或两者。神经网络的层也可被布置为使得层的输出可作为前一层的输入被发送回去。

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

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

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

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

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

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

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

一些神经网络在神经网络矩阵(例如,包括用于神经网络的层的权重值的神经网络矩阵)上指定转置运算。例如,一些神经网络可以在它们的第一列中比它们在后续列中更密集(即,具有更多的有意义值)的矩阵上指定转置运算,以加速对此类矩阵的有意义值的处理。一些神经网络训练算法可能需要转置神经网络矩阵(例如,在反向传播期间)。一些神经网络可能需要矩阵的转置作为从卷积层转变为全连接层的一部分,或者反之亦然。

在硬件电路110上执行矩阵运算的主要硬件单元是矩阵计算单元120,其不能直接地执行矩阵转置运算。因此,集成电路不能直接地对矩阵执行转置运算。为了实现在矩阵上指定转置运算的神经网络,神经网络实现引擎150生成指令,指令当在由神经网络对神经网络输入进行处理处理期间由专用硬件电路110执行时,使硬件电路110使用矩阵乘法单元120和矢量计算单元140来对矩阵执行矩阵转置运算。在下面参考图6至图9对这些指令和其它运算进行更详细的描述。

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

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

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

系统可使用专用硬件电路的矢量计算单元来从累加值生成层输出(步骤208)。在一些实施方式中,矢量计算单元对累加值应用激活函数,将在下面参考图5进一步对此进行描述。层的输出可被存储在统一缓冲器中以用作神经网络中的后续层的输入或者可用于确定推理。当已经通过神经网络的每层处理了接收到的输入以针对所接收到的输入生成推理时,系统完成处理神经网络。

图3示出用于执行神经网络计算的示例专用硬件电路300。系统300包括主机接口302。主机接口302可接收包括用于神经网络计算的参数的指令。参数可包括下列中的一个或多个:多少层应该被处理、用于模型的每层的权重输入的对应集合、激活输入(即,将计算推理的神经网络的输入)的初始集合、每层的对应输入和输出大小、用于神经网络计算的步幅值以及要处理的层的类型,例如,卷积层或全连接层。

主机接口302可将指令发送到定序器306,定序器306将指令转换成控制电路以执行神经网络计算的低电平控制信号。在一些实施方式中,控制信号调节电路中的数据流,例如,权重输入集和激活输入集如何流过电路。定序器306可将控制信号发送到统一缓冲器308、矩阵计算单元312和矢量计算单元314。在一些实施方式中,定序器306也将控制信号发送到直接存储器存取引擎304和动态存储器310。在一些实施方式中,定序器306是生成控制信号的处理器。定序器306可使用控制信号的时序在适当的时间将控制信号发送到电路300的每个组件。在一些其它实施方式中,主机接口302从外部处理器传入控制信号。

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

统一缓冲器308是存储器缓冲器。它可用于存储来自直接存储器存取引擎304的激活输入集和矢量计算单元314的输出。将在下面参考图6更详细地描述矢量计算单元314。直接存储器存取引擎304也可从统一缓冲器308读取矢量计算单元314的输出。

动态存储器310和统一缓冲器308分别可将权重输入集和激活输入集发送到矩阵计算单元312。在一些实施方式中,矩阵计算单元312是二维脉动阵列。矩阵计算单元312也可以是一维脉动阵列或可执行数学运算(例如,乘法和加法)的其它电路。在一些实施方式中,矩阵计算单元312是通用矩阵处理器。专用硬件电路300可使用矩阵计算单元312来执行矩阵转置运算。在下面参考图8至图9对使用矩阵计算单元312来执行矩阵转置运算进行更详细的描述。

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

图4示出了包括矩阵计算单元的示例架构400。矩阵计算单元是二维脉动阵列406。阵列406包括多个cell404。在一些实施方式中,脉动阵列406的第一维度420对应于cell的列,并且脉动阵列406的第二维度422对应于cell的行。脉动阵列可以具有比列多的行、比列多的列或者具有相同数量的列和行。

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

值加载器402可以从统一缓冲器,例如图3的统一缓冲器308,接收激活输入。每个值加载器可以将对应的激活输入发送到阵列406的不同的最左边的cell。例如,值加载器412可以将激活输入发送到cell414。

权重预取器接口408可以接收来自存储器单元例如图3的动态存储器310的权重输入。权重预取器接口408可以将对应的权重输入发送到阵列406的不同的最上部cell。例如,权重预取器接口408可以将权重输入发送到cell414和416。权重预取器接口408进一步能够从存储器单元例如动态存储器310接收多个权重,并且将多个权重并行地发送到阵列406的不同的最上部cell。例如,权重预取器接口408可以同时向cell414和416发送不同的权重。

在一些实施方式中,主机接口,例如图3的主机接口302,沿一个维度,例如向右,遍及阵列406移位激活输入,同时沿另一维度,例如向下,遍及阵列406移位权重输入。例如,在一个时钟周期内,cell414处的激活输入可以移位到在cell414的右侧的cell416中的激活寄存器。类似地,cell416处的权重输入可以移位到在cell414下面的cell418处的权重寄存器。

在每个时钟周期中,每个cell可以处理给定的权重输入、给定的激活输入以及来自相邻cell的累积输出以生成累积输出。累积输出也可以沿着与给定权重输入相同的维度传递到相邻cell。每个cell还可以处理给定的权重输入和给定的激活输入以生成输出,而不处理来自相邻cell的累积输出。输出可以沿着与给定的权重输入和输出相同的维度传递到相邻的cell而不被累积。下面参考图5进一步描述单个cell。

累积输出可以沿着与权重输入相同的列被传递,例如朝向阵列406中的列的下部传递。在一些实施方式中,在每列的下部,阵列406可以包括累积器单元410,累积器单元410当使用具有比行更多的激活输入的层进行计算时存储并累积来自每列的每个累积输出。在一些实施方式中,每个累积器单元存储多个并行累积。累积器单元410可以累积每个累积的输出以生成最终的累积值。最终的累积值可以被传送到矢量计算单元,例如图6的矢量计算单元。在一些其他实施方式中,当使用具有比行更少的激活输入的层处理层时,累积器单元410将累积值传递到矢量计算单元而不执行任何累积。

图5示出了例如图4的脉动阵列406的脉动阵列内的cell的示例架构700。

cell可以包括存储激活输入的激活寄存器506。激活寄存器可以接收来自左相邻cell,即位于给定cell的左侧的相邻cell,或来自统一缓冲器的激活输入,这取决于该cell在脉动阵列内的位置。cell可以包括存储权重输入的权重寄存器502。权重输入可以从上部相邻cell或从权重预取器接口传递,这取决于该cell在脉动阵列内的位置。cell还可以包括寄存器中求和504。寄存器中求和504可以存储来自上部相邻cell的累积值。乘法电路508可以用于将来自权重寄存器502的权重输入与来自激活寄存器506的激活输入相乘。乘法电路508可以将乘积输出到求和电路510。

求和电路510可以将所述乘积和来自寄存器504中的和寄存器中求和504的累积值进行求和以生成新的累积值。求和电路510然后可以将新的累积值发送到位于下部相邻cell中的另一个寄存器中的另一个和求和。新的累积值可以用作下部相邻cell中的求和操作数。求和电路510还可以接收接受来自寄存器504中的和寄存器中求和504的值,并且将来自寄存器504中的和寄存器中求和504的值发送到下部相邻cell,而不将来自寄存器504中的和寄存器中求和504的值与来自乘法电路508的乘积求和。

cell还可以将权重输入和激活输入移位到相邻cell进行处理。例如,权重路径寄存器512可以将权重输入发送到下部相邻cell中的另一个权重寄存器。激活寄存器506可以将激活输入发送到右相邻cell中的另一个激活寄存器。权重输入和激活输入两者因此可以在随后的时钟周期由阵列中的其他cell重新使用。

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

在一些实施方式中,权重被预先移位到权重路径寄存器512中。权重路径寄存器512可以例如从上部相邻cell接收权重输入,并且基于控制信号将权重输入传送到权重寄存器502。权重寄存器502可以静态地存储权重输入,使得随着激活输入例如通过激活寄存器506在多个时钟周期内传送到cell,权重输入保持在cell内并且不被传送到相邻cell。因此,权重输入可以例如使用乘法电路508应用于多个激活输入,并且各个累积值可以被传送到相邻cell。

图6示出了矢量计算单元602的示例架构700。矢量计算单元602可以从矩阵计算单元例如参照图3描述的矩阵计算单元312或图4的矩阵计算单元的累积器410接收累积值的矢量。

矢量计算单元602可以在激活单元604处理累积值的矢量。在一些实施方式中,激活单元包括将非线性函数应用于每个累积值以生成激活值的电路。例如,非线性函数可以是tanh(x),其中x是累积值。

可选地,矢量计算单元602可以使用池化电路608池化例如激活值的值。池化电路608可以将聚合函数应用于一个或多个值以生成池化值。在一些实施方式中,聚合函数是返回值或者值的子集的最大值、最小值或者平均值的函数。

控制信号610可以例如由图1的定序器306传送,并且可以调节矢量计算单元602如何处理累积值的矢量。也就是说,控制信号610可以调节激活值是否被池化、激活值存储在例如统一缓冲器308中的什么位置、或者可以以其它方式调节激活值的处理。控制信号610还可以指定激活或池化函数、以及用于处理激活值或池化值的其他参数,例如步进值。

矢量计算单元602可以将值,例如激活值或池化值,发送到统一缓冲器,例如图3的统一缓冲器308。在一些实施方式中,池化电路608接收激活值或池化值并将激活值或池化值存储在统一缓冲器中。

图7是用于实现指定针对矩阵的转置操作的神经网络的示例过程700的流程图。通常,过程700由包括专用硬件电路(例如,图1的专用硬件电路110)的一个或多个计算机的系统执行。

系统接收在专用硬件电路上实现神经网络的请求(步骤702)。特别地,神经网络包括许多神经网络矩阵,并且在神经网络矩阵的第一神经网络矩阵上指定转置操作。

该系统生成当由专用硬件电路执行时使专用硬件电路转置第一神经网络矩阵(步骤704)的指令。这些指令使得专用硬件电路通过在每次迭代期间更新矩阵的当前细分的每个子矩阵来迭代地转置矩阵。更新当前细分的每个子矩阵包括使用专用硬件电路中的矩阵计算单元交换当前子矩阵的右上象限和子矩阵的左下象限。下面参照图8更详细地描述在每次迭代期间更新当前细分的子矩阵。

矩阵的细分是将矩阵分成一个或多个子矩阵。在每次迭代中,指令使专用硬件电路将矩阵分成一个或多个(例如四个)子矩阵以生成矩阵的当前细分。例如,在第一次迭代中,指令使专用硬件电路110生成仅包括一个当前子矩阵的初始当前细分。换句话说,第一次迭代的当前子矩阵包括整个第一神经网络矩阵作为唯一的子矩阵。在每个随后的迭代中,指令使专用硬件电路通过将当前细分中的每个细分分成一个或多个(例如四个)细分来生成更新的当前细分。

在一些实施方式中,第一神经网络矩阵是2i*2i矩阵,其中i是非负整数,并且更新矩阵包括在每次迭代时将第一神经网络矩阵划分为大小为2j*2j的子矩阵,以及通过不是垂直或水平地与特定子矩阵相邻而是与特定子矩阵在对角线上相邻的一个对应子矩阵交换每个特定子矩阵。在其中一些实施方式中,j的值在第一次迭代中是(i-1),并且在每次迭代中递减。

迭代继续,直到当前细分的子矩阵是第一个神经网络矩阵内的单个值。此时,由于单个值不能再细分为更多的子矩阵,迭代终止。

在一些实施方式中,系统执行矩阵乘法运算作为对具有最大矢量长度的矢量的矢量乘法的组合。最大矢量长度是矩阵计算单元一次(即不将矢量划分为矩阵计算单元的多个输入)可乘以矩阵的矢量的最大长度。例如,如果矩阵计算单元是一维或二维脉动阵列,则最大矢量长度等于单元中的列数或单元中的行数。

在那些实施方式中的一些中,系统获得指示零值已被添加到神经网络矩阵的信息以调整矩阵的维度,使得矩阵可被划分为具有最大矢量长度的矢量。换句话说,神经网络矩阵已被零填充以适应系统的架构配置。响应于该信息,系统可以避免执行逐值乘法运算,其涉及被标识为已经作为零填充的结果而被添加的值,因为这样的操作总是返回零值。结果,该系统可以减少执行这种矢量乘法所需的逐值乘法运算的次数。

系统将指令发送到专用硬件电路(步骤706)。

例如,神经网络实施引擎150可以将指令提供给专用硬件电路110,并且专用硬件电路110可以例如在图3的主机接口302处接收指令。神经网络实施引擎150还可以提供也可以由主机接口302接收的用于神经网络计算的其他指令和/或参数。

图8是用于使用专用硬件电路来更新神经网络矩阵的当前细分的子矩阵的示例过程800的流程图。例如,过程800可以由图1的专用硬件电路110基于从神经网络实施引擎150接收到的指令执行。专用硬件电路通过使用专用硬件电路110中的矩阵计算单元交换子矩阵的右上象限和子矩阵的左下象限,更新当前细分的子矩阵。

专用硬件电路110为神经网络矩阵(802)的每一行创建一个矢量。

专用硬件电路110针对电路110试图生成的交换子矩阵的每个值获得部分单位矩阵(804)。电路110可以使用相同的部分单位矩阵来生成交换子矩阵的两个或更多个值。

部分单位矩阵是仅包含“0”和“1”值的矩阵。部分单位矩阵中的“1”值在策略上被定位使得当乘以包括第一神经网络矩阵的行中的值的矢量时,乘法的输出保留该矢量的某些值而无效(即,输出“0”)其他值。

在一些实施方式中,如果包含神经网络矩阵的行的值的矢量具有维度d,则在乘以该矢量时在结果矢量的j和(j+1)值分别返回该矢量中的i和(i+1)值的部分单位矩阵是在[i,j]和[i+1和j+1]位置具有1值并且在其他地方具有0值的d*d矩阵。

专用硬件电路110将神经网络矩阵的每一行乘以一个或多个部分单位矩阵,以获得来自更新神经网络矩阵所需的行的值,以交换当前细分中每个子矩阵的右上象限和左下象限(806)。

例如,矢量v1=[ab]可以包括神经网络矩阵的第一行的两个值。为了提取矢量的第一值,专用硬件电路将v1乘以下面的部分单位矩阵i1:

v1*i1的输出=[a0]。因此,a的值被保留,而b的值被无效。

专用硬件电路110组合包含更新后的神经网络矩阵的每一行的部分的矢量以生成该行(908)。例如,v1可能是神经网络矩阵m1的第一行:

对应于矩阵m1的更新的矩阵s1的第一行将包括v1的第一元素和矢量v2=[cd]的第一元素,其包括矩阵m1的第二行的值。

换句话说,包含更新矩阵s1的第一行的部分的两个矢量是v1*i1的输出和v2*i1的输出。专用硬件电路110可以组合这两个矢量来生成交换子矩阵s1的第一行。

专用硬件电路110组合神经网络矩阵的每一行以生成更新的神经网络矩阵(810)。

因为交换每个子矩阵的右上和左下象限可以使用矩阵乘法单元来执行(例如,使用一系列矩阵向量乘法和加法,如下面进一步描述的),所以专用硬件电路110可以在不具有用于直接矩阵转置操作的能力的情况下在矩阵上执行转置操作。这样,神经网络实施引擎150可以使用硬件电路110来处理指定矩阵的转置的不兼容层。

图9是用于对神经网络矩阵执行转置操作的计算的示例。可以使用图7的过程和图3的专用硬件电路300来执行图9的示例。

在图9的部分(a)中,专用硬件电路通过创建包括整个矩阵的子矩阵来形成4×4矩阵的当前细分。该电路创建包含神经网络矩阵的每一行的值的矢量。例如,该电路创建包含矩阵的第一行的值的矢量input[0]。

图9的部分(b)描绘了四个部分单位矩阵。每个部分单位矩阵具有由矩阵内的“1”值的位置定义的结构。每个部分单位矩阵的结构被策略性地设计以从部分(a)中所示的矢量提取某些值同时使这些矢量中的其他值无效。例如,专用硬件电路使用部分单位矩阵w1来提取矢量的第一和第二值。

在图9的部分(c)中,专用硬件电路使用部分(a)中描述的矢量和部分(b)中描述的部分单位矩阵执行四组计算。该电路使用每组计算来生成一行更新的神经网络矩阵,该矩阵包括部分(a)中描绘的神经网络矩阵的元素,但是交换每个子矩阵的右上和左下象限。例如,电路使用第一组计算来生成[abij],它是每个子矩阵的右上角和左下象限交换的神经网络子矩阵的第一行。

图9的部分(d)描绘了通过交换神经网络矩阵中的每个子矩阵的右上和左下象限来更新部分(a)中描绘的神经网络矩阵的输出。

在部分(e)中,专用硬件电路将部分(d)中描绘的更新后的神经网络矩阵划分成行。

图9的部分(f)描绘了四个部分单位矩阵。部分(f)中描述的每个部分单位矩阵的结构被策略性地设计为从部分(d)中示出的矢量提取某些值同时使这些矢量中的其他值无效。

在部分(g)中,专用硬件电路使用部分(e)中描述的矢量和部分(f)中描述的部分单位矩阵执行四组计算。当在部分(e)中描绘的神经网络矩阵上执行时,计算导致对部分(e)中描绘的神经网络矩阵的更新,以在神经网络矩阵分成四个子矩阵的新细分中交换每个子矩阵的右上和左下象限。部分(h)所示的新矩阵是部分(a)所示矩阵的转置矩阵。

在图9的部分(d)-(g)中执行的操作是在图9的部分(a)-(c)中执行的操作的重复。然而,在部分(g)之后,在部分(e)中描述的子矩阵构成的新子矩阵是不能再进一步细分为象限的单个值。因此,这些操作将不再重复。

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

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

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

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

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

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

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

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

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

虽然本说明书包含许多具体的实现细节,但这些细节不应被解释为对任何发明或可能要求保护的范围的限制,而应被解释为可能特定于特定发明的特定实施例的特征的描述。本说明书中在单独实施例的上下文中描述的某些特征也可以在单个实施例中组合实现。相反地,在单个实施例的上下文中描述的各种特征也可以在多个实施例中单独地或以任何合适的子组合来实现。此外,尽管上文可以将特征描述为以某些组合起作用并且甚至最初也如此主张,但是来自所要求保护的组合的一个或多个特征在一些情况下可以从组合中删除,并且所要求保护的组合可以针对子组合或子组合的变体。

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

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

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