矩阵的空间局部变换
文献发布时间:2023-06-19 11:35:49
技术领域
本公开内容总体上涉及矩阵计算,并且具体地涉及矩阵的空间局部变换。
背景技术
现代神经网络包括多个层。每一层可以包括大量的输入值,这些输入值随后被变换以生成输出(即,激活),输出用作后续层的输入。通常,这些输入值和输出值被表示为矩阵(例如,具有一维至多维的值的阵列)。对这些输入值执行的常见变换是卷积。卷积将核应用于输入中的相邻值以生成输出值,核包括权重值并且还可以被表示为矩阵。对输入中的所有值重复该操作(如通过权重进行修改),以生成一组输出值。然而,由于核因必须多次读入相邻值而将多次跨过或滑过相同的输入值以生成多个输出,因此使用朴素的方法执行时在计算上会非常昂贵。
因此,期望如下系统,其能够更有效地计算通过核的权重修改的输入值的卷积以生成输出值。
附图说明
图1示出了根据一个实施方式的用于通过核的空间局部变换(SLT)对输入张量进行卷积以生成输出激活的系统100。
图2是根据一个实施方式的通过核对二维输入进行卷积的示例。
图3是示出根据一个实施方式的展平输入张量的方法的流程图。
图4示出了根据一个实施方式的在一维核的情况下展平输入张量的示例。
图5A示出了根据一个实施方式的在二维核的情况下展平输入张量的示例的第一部分。
图5B示出了根据一个实施方式的在二维核的情况下展平输入张量的示例的第二部分。
图5C示出了根据一个实施方式的对于多个输入通道展平输入张量的示例。
图6A示出了根据一个实施方式的在三维核的情况下展平输入张量的示例的第一部分。
图6B示出了根据一个实施方式的在三维核的情况下展平输入张量的示例的第二部分。
图7是示出根据一个实施方式的生成扩展核的方法的流程图。
图8示出了根据一个实施方式的在一维核的情况下生成扩展核的示例。
图9A示出了根据一个实施方式的对于不同的二维核生成扩展核的示例。
图9B示出了根据一个实施方式的使用列优先(column-major)扩展来生成扩展核的示例。
图9C示出了根据一个实施方式的在多个核过滤器的情况下生成扩展核的示例。
图10A示出了根据一个实施方式的在三维核的情况下生成扩展核的示例的第一部分。
图10B示出了根据一个实施方式的在三维核的情况下生成扩展核的示例的第二部分。
图10C示出了根据一个实施方式的在三维核的情况下生成扩展核的示例的第三部分。
图11是示出根据一个实施方式的生成控制模式的方法的流程图。
图12A示出了根据一个实施方式的用于生成控制模式的概念基础的示例的第一部分。
图12B示出了根据一个实施方式的用于生成控制模式的概念基础的示例的第二部分。
图13A示出了根据一个实施方式的二维核的控制模式的值的生成的一部分的示例。
图13B示出了根据一个实施方式的三维核的控制模式的值的生成的一部分的示例。
图13C示出了根据一个实施方式的不同维度的核的生成的控制模式的示例。
图14是示出了根据一个实施方式的使用展平的输入、扩展核和控制模式来生成卷积的输出的方法的流程图。
图15A示出了根据一个实施方式的在一维核的情况下使用展平的输入、扩展核和控制模式生成输出激活的示例的第一部分。
图15B示出了根据一个实施方式的在一维核的情况下使用展平的输入、扩展核和控制模式来生成输出激活的示例的第二部分。
图15C示出了根据一个实施方式的在一维核的情况下使用展平的输入、扩展核和控制模式来生成输出激活的示例的第三部分。
图16A示出了根据一个实施方式的在二维核的情况下使用展平的输入、扩展核和控制模式生成输出激活的示例的第一部分。
图16B示出了根据一个实施方式的在二维核的情况下使用展平的输入、扩展核和控制模式来生成输出激活的示例的第二部分。
图16C示出了根据一个实施方式的在二维核的情况下使用展平的输入、扩展核和控制模式生成输出激活的示例的第三部分。
图16D示出了根据一个实施方式的在二维核的情况下使用展平的输入、扩展核和控制模式生成输出激活的示例的第四部分。
图16E示出了根据一个实施方式的在二维核的情况下使用展平的输入、扩展核和控制模式来生成具有多个通道的输出激活的示例。
图16F示出了根据一个实施方式的在二维核的情况下使用展平的输入、扩展核和控制模式来生成具有多个通道的输出激活的示例的第二部分。
图17A示出了根据一个实施方式的在三维核的情况下使用展平的输入、扩展核和控制模式生成输出激活的示例的第一部分。
图17B示出了根据一个实施方式的在三维核的情况下使用展平的输入、扩展核和控制模式生成输出激活的示例的第二部分。
图18A示出了根据一个实施方式的用于生成扩展核的示例性部件的硬件图。
图18B示出了根据一个实施方式的用于生成扩展核的示例性部件中使用的示例性移位器电路的硬件图。
图19示出了根据一个实施方式的用于生成控制模式的示例性部件的硬件图。
图20示出了根据一个实施方式的用于执行乘法加法运算以生成输出激活的示例性部件的硬件图。
图21示出了根据一个实施方式的在机器学习处理器中用于计算输出激活的示例性部件布局。
图22A示出了根据一个实施方式的示例机器学习处理器。
图22B示出了根据另一个实施方式的示例机器学习处理器。
图23是示出如下示例计算机器的部件的框图:该示例计算机器能够从计算机可读介质读取指令并在处理器(或控制器)中执行指令。
仅出于说明的目的,附图描绘了并且具体实施方式描述了各种非限制性实施方式。
具体实施方式
附图和以下描述仅通过说明的方式涉及优选实施方式。本领域技术人员可以将本文公开的结构和方法的替选实施方式视为可行的替选方案,可以在不脱离所公开的原理的情况下采用这些替选方案。
现在将详细参考几个实施方式,其示例在附图中示出。要注意的是,在可行的地方,附图中可以使用相似或相同的附图标记,并且这些附图标记可以指示相似或相同的功能。这些附图仅出于说明的目的描绘了所公开的系统(或方法)的实施方式。本领域技术人员将从以下描述中容易地认识到,在不脱离本文描述的原理的情况下,可以采用本文所示的结构和方法的替选实施方式。
示例性系统
图1示出了根据一个实施方式的用于通过核的空间局部变换(spatial localitytransform,SLT)对输入张量进行卷积以生成输出激活的系统100。在一个实施方式中,系统100包括输入张量102、核110、输入流生成器122、展平的输入流124、扩展核生成器126、扩展核128、控制模式生成器134、控制模式136、乘法加法单元140以及输出激活142。然而,在其他实施方式中,系统100包括不同的元素,以及/或者系统100包括不同数量的所示元素。
输入张量102是输入值108的集合,输入值108通过核110在卷积运算中被修改以生成输出激活142。在一个实施方式中,输入张量102由矩阵表示。矩阵可以具有一个、二个、三个或多于三个的维度,并且可以作为阵列存储在存储器中。阵列的维度数量可以等于矩阵的维度数量。在另一个实施方式中,输入张量102具有多个输入通道104A-104N(通常称为输入通道104)。每个输入通道104包括一个或更多个维度的矩阵,例如所示的输入通道104A中的矩阵的维度1 106A至维度3 106C。
在卷积运算中将核110应用于输入张量102以生成输出激活,例如输出激活142。下面参照图2描述关于卷积运算的其他细节。核110可以由一维或更多维矩阵表示。矩阵包括核值114,在神经网络的情况下,核值114表示应用于输入张量102的输入值108的权重。输入张量102的维度数量,具体地每个输入通道104的矩阵的维度数量,应当至少等于或大于核110的维度数量。尺寸(即,遍及每个维度的核110的元素的数量)可以小于或大于输入张量102。如果核110大于输入张量102,则输入张量102可以被填充成使得核110的尺寸小于或等于填充的输入张量102,从而允许卷积运算发生。所得的输出激活142是与(填充的)输入张量102尺寸相同的矩阵。
在一个实施方式中,核110包括一个或更多个核“过滤器”112A-112M(通常称为核过滤器112)。核过滤器112的数量不需要等于输入通道104的数量。每个核过滤器112包括一组子过滤器核,子过滤器核本身是过滤器并且等于输入通道104的数量。使用每个子过滤器核对每个输入通道104执行卷积运算,并且对得到的输出矩阵求和以生成单个输出激活特征矩阵或输出特征144A-144M(通常被称为输出特征114)。对于每个核过滤器112重复该操作。所生成的输出特征144的数量等于核110中存在的核过滤器112的数量。因此,例如,如果核110包括一个核过滤器112,则生成单个输出特征144。然而,如果核110包括五个核过滤器112,则输出激活142将具有五个输出特征144。这使得神经网络能够将不同的核权重应用于输入的不同部分(即,不同的输入通道104),并且将结果组合成新的输出(即,不同的输出特征144),然后可以将该输出用作神经网络的另一层中的进一步的输入。下面参照图16E至图16F描述关于使用多个输入通道104和多个核过滤器112的其他细节。
输入流生成器122将输入张量102转换成展平的输入流124。为了更有效地读入输入张量102,并且避免当核110跨越输入张量102时多次读取相同值的输入张量102,输入流生成器122将输入张量102转换成展平的输入流124,展平的输入流124然后可以被馈送至缓存器或其他存储器中,以供乘法加法单元140以下述有效方式访问,该方式大大减少了读取必要的输入值的次数。
为了执行输入张量的转换,输入流生成器122可以首先填充输入张量102。输入张量102可以被填充成使得其尺寸是核110的尺寸的模(即,倍数)。另外,核110具有“焦”点。该焦点是核110的在其处生成与该核110的卷积的输出值的位置。输入流生成器122填充输入张量102,以便核110在跨越输入张量102时到达输入张量102中的每一个输入值。因此,例如,如果核是3×3核,其中焦点是核的中心,则输入张量102的二维矩阵在被填充至核的模后还可以使用填充值的单个向量在矩阵的外部边界周围进一步被填充,以允许核的焦点滑过输入张量102的外部边缘处的输入值。
最后,输入流生成器122也可以填充输入张量102,以满足用于执行卷积的处理器的任何要求。由于总线的尺寸、平行处理器的数量、存储器尺寸或其他约束,输入流生成器122还可以用填充值填充输入张量102,使得输入张量102在被展平以变成展平的输入流124之后满足处理器的约束。在一个实施方式中,输入流生成器122使用其尺寸等于核110的尺寸(或每个核过滤器122的每个子过滤器核的尺寸)的填充值来填充输入张量102(或输入张量102的每个输入通道104)的每个维度的一侧(例如,尾边缘)。在此描述的填充值可以是任何空填充值、零填充值或标准填充值。
在填充输入张量102之后,输入流生成器122利用填充将输入张量102划分或分段成图块。每个图块是核110的尺寸。因此,输入张量102的填充的矩阵被划分成多个单独的较小矩阵,每个较小矩阵的尺寸与核102的尺寸相同。尽管输入张量102在此被描述为是被划分的,但这并不意味着输入流生成器122对于每个图块必定生成新矩阵。相反,输入流生成器122可以简单地在输入张量102的矩阵中描绘每个图块的边界。
在多个输入通道104的情况下,输入流生成器122将每个输入通道104的矩阵划分成其自身的一组多个图块。每个输入通道104的图块的尺寸等于应用于该输入通道104的每个核过滤器112的子过滤器核的尺寸。
在划分输入张量102之后,输入流生成器122识别展平顺序。这是读取输入张量102中的每个图块的值的顺序。该顺序可以是任何顺序,并且可以包括行优先顺序、列优先顺序、对角线优先顺序、通道优先顺序等。按照行优先顺序,以特定顺序(例如,从左至右)读取每一行中的值,并且也以特定顺序(例如,从上至下)依次读取每一行。按照列优先顺序,代替读取每一行,以特定的顺序(例如,从左到右)读取每一列,并且对于每一列以特定的顺序(例如,从上到下)读取每一行中的值。按照对角线优先顺序,可以沿着对角线读取图块。如果图块包括多于一层,则可以连续处理每一层。其他顺序也是可行的,只要随后在扩展核128的生成和控制模式136的生成中使用相同的排序模式即可。
输入流生成器122以所识别的展平顺序读取每个图块的值,并且按照在单个向量上对于每个图块被读取的方式来布置这些值,从而“展平”该图块。输入流生成器122读取输入张量102的所有图块并生成相应数量的向量。这些向量彼此平行放置以生成展平的输入流124。输入流生成器122可以按特定顺序例如行优先顺序、列优先顺序等读取图块。只要在扩展核128和控制模式136的生成中反映出图块的顺序,就可以使用任何顺序,并且可以通过乘法加法单元140生成有效输出。
如果输入张量102包括多个输入通道104,则分别处理每个输入通道104的矩阵,以生成每个输入通道104的每个矩阵的展平的输入流。可以将多个展平的输入流组合在一起以形成(组合的)展平的输入流124。可以通过将多个展平的输入流“堆叠”在一起、将它们串联在一起或通过一些其他组合方法来组合多个展平的输入流。
展平的输入流124是输入流生成器122展平输入张量102的结果。不管输入张量102的维度数量是多少,输入张量102的每个矩阵的展平的输入流124为(最多)二维。这是因为:如上所述,输入张量102的每个图块被转换成向量,并且向量彼此平行放置。在一个实施方式中,如果输入张量102包括多个输入通道104,则可以通过(在计算机可读存储器中)将每个展平的输入流竖直地或水平地铺设成彼此相邻,而将从每个输入通道104的每个矩阵生成的展平的输入流与其他输入通道104的其他矩阵的展平的输入流进行组合。组合的展平的输入流也可以三维表示,其中从每个输入通道生成的每个展平的输入流堆叠在彼此的顶部上。在存储器中,这可以使用深度第一存储方法来表示,其中沿着三维展平的输入流的深度的值作为优先顺序被存储。
展平的输入流124可以被馈送至缓存器中或被存储在存储器中。展平的输入流124可以被乘法加法单元140读取并根据展平的输入流124中的每个向量对应的图块编号被引用。在所示的示例中,展平的输入流124的图块的范围是从0到K到J。这里,图块#1+K表示原始输入张量102中的图块,即第二行(或列)图块上的第一图块。值K表示填充的输入张量102的行或列中的图块数量(取决于读取图块的顺序),并根据输入张量102的宽度而变化。例如,如果核并且由此图块是3×3矩阵,则填充宽度为9的输入张量的K值将为3。在这种情况下,三个图块沿着输入张量的宽度拟合,因此第二行上的第一图块(即,整体第四个图块)的编号将是图块编号3,因为图块计数从0开始。如果张量102包括附加维度,则对于该维度的每个第二系列的值的第一图块指示额外的标记。例如,如果输入张量102包括三个维度,则单独的标记M将指示输入张量102的单个层中的图块的数量,并且图块#1+M将指示输入张量102的第二层中的第一图块的索引值。如下所述,这些标记以及图块编号可以被乘法加法单元用来使用控制模式136中的指示符来引用或指向展平的输入流124中的正确图块。替选地,包括标记的图块编号可以用作允许乘法加法单元140使从包括展平的输入流124的缓存器中读取值延迟的时钟周期延迟值。这使得乘法加法单元140能够类似地引用展平的输入流124中的特定图块。
如以下进一步详细描述的,与其中将需要输入张量中的一些值的读取等于核110中的值的数量的标准卷积相比,这种访问方法结合系统100的其他部件允许系统100仅对输入张量102进行2
扩展核生成器126生成扩展核128,扩展核128与展平的输入流124和控制模式136一起被乘法加法单元140使用以生成输出激活142。扩展核128从核110生成。如下所示,“扩展”核的目的是使得可以使用简单的点积将展平的输入流124的输入值的选择的向量与扩展核128的向量(例如,列、行、通道)相乘,而不必使原始核110跨越输入张量102。这显著简化了输出激活142的生成。核110的扩展遵循特定模式,包括以分级方式生成核110的旋转组合。在以下描述中,参考第一维度、附加维度和最后维度。这仅仅是一种以有组织的方式参考核的维度的方法,因为核可能具有一个至很多个维度,并且不旨在指示每个维度的排序或尺寸。例如,如果核是三维的,则核的最后一个维度不一定指核的某些三维表示,而仅仅是指核的维度编号3,只要它具有3个不同的维度编号(例如,维度1、维度2和维度3)。
在一个实施方式中,扩展核生成器126采用核110的第一维度(或一个核过滤器112或核过滤器112的子过滤器核),并且生成核的每个单维向量的方形值块,该方形值块包括该单维向量的所有旋转。通过将旋转中的每个旋转放置成平行于每个单维向量来生成该块。例如,3×3的二维核对于维度1将具有三个3×1的单维向量。对于这些向量中的每个向量,生成该向量的所有可能的旋转,从而各自创建两个附加的单维向量。这些向量被放置成平行于用于生成附加向量的单维向量,从而对于每个单维向量创建方形块。这些方形块可以称为循环矩阵。
此后,对于核的每个附加维度,前一个维度区域或较低维度区域的块被分组成集合。每个集合都包括前一个维度的沿着与该维度的轴平行的向量对准的块。因此,回到3×3矩阵的示例,如果先前生成的方形块放置在与生成它们的源(即单维向量)相同的位置,那么对于维度2,向量可以通过所有生成的块。因此,维度2的集合包括在先前操作中生成的所有块。在3×3核中,这包括三个块,核的每个向量一个块。
对于所生成的每个集合,扩展核生成器126生成该集合中的块的所有旋转。使用先前的示例,在维度2的唯一集合中有三个块。因此,该集合的旋转会生成三个块的两个附加组合,总共9个块。与上面对单维向量所述的方法类似,这两个附加组合平行于集合中的块放置。这里,考虑到二维核的所有维度,扩展核生成器126结束扩展核的生成,并且9个块的组合结果被输出为扩展核128。
然而,如果核110包括附加维度,则重复上述过程,导致不同的块集合被旋转和组合。这最终导致考虑所有维度,并且将所有块与较低维度的块的所得组合输出为扩展核128。因此,随着维度的增加,集合的数量也增加。在每个附加维度中,在使前一维度的如上所述沿着向量对准的块旋转之后,将经旋转的块的组合放置在新的块中。这些新块用于下一附加维度的计算,并以各种旋转方式组合在一起。这一直持续到最后一个维度,该维度的维度数量等于核的维度的总数量。在最后一个维度上,执行最后一组旋转,然后将所得的旋转组合输出为扩展核。因此,对于每个要处理的附加维度,块集合的数量在数量上减少了,并且在处理了最终维度的旋转之后,仅剩下了单个集合的输出块。
扩展核128的向量(例如,行或列)的数量还等于核中的元素的数量,或者输入张量102的图块中的元素的数量。扩展核128自身的实际尺寸取决于核110的尺寸。二维扩展核128的每个维度的尺寸等于核110的每个维度的尺寸值的乘积。例如,如果核是2×2×2矩阵,则扩展核128将具有八个向量(2^3),因此尺寸为8×8,因为核的维度的值的乘积为8。
如本文中所描述,所生成的扩展核128可以在与展平的输入流124的选择的值的点积中使用,以生成输出激活142。如前所述,可以使用控制模式136的指示经由延迟或指针来选择展平的输入流124中的值。在选择这些值之后,可以通过将扩展核128的每个向量乘以从展平的输入流124中选择的不同值将选择的值与扩展核128的选择的向量组合以生成输出激活142的输出值。由于扩展核128的向量数等于图块中的元素数量(如前所述与核110的尺寸相同),因此输出值的数量也等于每个图块的元素的相同数量,因此包括输出激活142的图块(或者在多个核过滤器的情况下为值的输出矩阵)。图块在输出激活142的矩阵中的位置具有与输入张量102的矩阵的相同位置图块对应的位置。
在此描述的系统100允许计算每个输出图块中的值,而不必像朴素方法(例如图2中所描述的那样)多次重新读取输入值。当核110滑过输入张量102至与输出图块中的位置对应的每个位置时,代替通过重复读取输入张量中的某些值,而是通过扩展核的一次遍历和从展平的输入流124单次选择值来生成每个输出图块。
在多个核过滤器112的情况下,类似于上述过程,将对于每个核过滤器112生成扩展核,并将其应用于输入。在多个输入通道104的情况下,每个核过滤器112具有多个子过滤器核,每个子过滤器核对应于一个输入通道104。在这种情况下,将对于每个子过滤器核生成一个扩展核,并且将从每个子过滤器核生成的每个扩展核施加至展平的输入流124的与输入通道104对应的相关部分,对于该输入通道104,子过滤器核已经被应用在朴素的卷积实现中。下面参照图7至图10C来描述关于扩展核的生成的附加细节。
控制模式生成器134基于关于核尺寸输入132中的核尺寸的信息来生成控制模式136。核尺寸指示核110(或每个核过滤器)的每个维度的尺寸。控制模式生成器134获取该信息并生成对于相同尺寸和维度的核相同的控制模式136。控制模式生成器134基于该位置的坐标(例如,行号、列号)以及核的维度的尺寸生成控制模式136的每个位置的值。对于每个位置,控制模式生成器134执行一个或更多个测试不等式(等于核的维度的数量)。每个测试不等式是控制模式136中的该位置的行号的取模运算与列号的取模运算之间的不等式。测试不等式的结果(即,真或假)被用于参照控制模式值的表,以生成控制模式中该位置的值。
尽管在此将控制模式生成器134描述为使用编程方法基于核尺寸输入132生成控制模式136,但在其他实施方式中,控制模式生成器134从存储器、非易失性存储器、程序指令栈或其他源访问控制模式136的预生成的版本,并且基于核尺寸输入132从该源中选择正确的预生成的控制模式136。
控制模式136是如下矩阵:该矩阵向乘法加法单元140指示要从展平的输入流124的哪些部分中进行选择来生成与扩展核128的向量相乘(使用点积)以生成每个输出值的选择的值。在朴素的卷积实现中,对于核110每次跨越输入张量102上的某个位置,如通过核中相应的值(在相同位置)加权,通过将表示核的当前焦点的位置附近的值与焦点自身处的值相加来执行卷积运算。所得总和是与该焦点对应的位置的输出值。因此,对于每个焦点位置,选择输入张量102的不同值进行求和。由于展平的输入流124被划分成不同的图块,因此使用与输出图块相同位置的输入图块的值或相邻输入图块中的输入值的值来计算每个输出位置,尤其是输出图块中的每个输出位置。因此,控制模式136对于图块中的每个输出位置向乘法加法单元140指示不同的特定输入图块,从该特定输入图块中提取输入值以执行卷积计算,即,先前提到的点积。特别地,控制模式136的每个向量对应于输出图块中的不同位置,并且指示输入矩阵的从其选择输入值以用于计算输出位置的值的图块。
由于逐图块生成输出,因此控制模式136可能仅需要指示具有与正在处理的当前输出图块的位置对应的位置的输入图块,以及具有与正在处理的当前输出图块的相邻位置对应的位置的输入图块。例如,在输入张量102的二维矩阵中,图块与正在处理的当前输出图块水平地和竖直地相邻。在三维矩阵中,这可以包括相邻层中的图块。对于更高维度的矩阵,这将包括“相邻”的其他图块。因此,由控制模式136指示的图块位置的数目是输入矩阵的维度尺寸的2的幂。控制模式136的尺寸与从核110生成的扩展核128的尺寸相同。
控制模式136根据展平的输入流124中的每个图块的图块编号来指示图块。由于与输入图块相邻的图块在图块编号上不一定相邻,所以控制模式136中的指示符不直接通过图块编号指示图块,而是通过相对于当前正在处理的图块的图块编号的相对位置指示图块。因此,例如,相对位置可以指示当前图块、当前图块下方(或右侧)的行(或列)、或当前图块后面的层。由于已知输入张量102的矩阵的宽度/高度和深度,因此可以基于该信息来计算相对位置。例如,在当前图块下方一行的图块将是当前图块的图块编号加上矩阵的宽度。因此,控制模式136可以对于这样的图块指示行宽度的值,或者指示行宽度的指针或参考。在当前图块下方且在其右边一行的图块将由当前图块编号加上行宽度加1表示。因此,控制模式136可以对于这样的图块指示行宽度+1,或者行宽度+1的指示符。在一个实施方式中,行宽度是如上所述的变量K。指示符的这些组合中的每一个可以由一个或更多个位指示。因为控制模式136具有分形模式,所以控制模式136的矩阵的每个子部分可以由单个优先位指示,另外的子部分由另外的位指示,并且该子部分中的各个值具有第二位。单个值和该值所属的子部分的组合指示相对的图块位置。
在多个核过滤器112的情况下,如果核过滤器或子过滤器核具有不同的维度,则可以选择多个控制模式136。对于不同维度的每个核,将根据上述方法选择或生成对应的控制模式136。对应的控制模式136将用于从展平的输入流124的部分中选择值。有关控制模式136的生成及其特性的其他细节将在下面参照图11至图13进行描述。
乘法加法单元140使用展平的输入流124、扩展核128和控制模式136来执行最终计算,以生成输出激活142。如上面更详细地描述的,乘法加法单元140使用来自控制模式136的指示符从展平的输入流124中选择值。如上所述,控制模式136中的每个向量指示用于访问输入值的展平的输入流124的特定图块。控制模式136中的每个位置处的标识符对应于从展平的输入流124的哪个图块即哪个向量中选择输入值的指示。控制模式136的向量内的位置也对应于展平的输入流124中包括正确输入值的所选向量的位置。通过解析控制模式136的整个向量,乘法加法单元140生成选择的输入值的向量。
乘法加法单元140还选择与用于从展平的输入流124中选择值的控制模式136的向量的位置(例如,行号或列号)匹配的扩展核128的相应向量。乘法加法单元140在扩展核128的所选向量与包括展平的输入流124的所选值的向量之间执行点积,以生成单个输出值。单个输出值被放置在与当前正在处理的输入图块的位置匹配的输出图块上。此外,单个输出值在输出图块中的位置对应于用于生成该单个输出值的控制模式136(或扩展核128)中的向量的位置编号。
乘法加法单元140对控制模式136(和扩展核128)中的所有向量重复在此描述的过程,从而生成等于输出图块内的位置的数量的输出值的总数。这允许乘法加法单元140对于输入张量102的每个输入图块生成输出激活142的输出图块。乘法加法单元140还对于输入张量102的所有输入图块重复该过程,以生成用于输出激活142的相同数量的输出图块。在生成整个输出图块集合之后,乘法加法单元140输出完整的输出图块集合作为输出激活142的最终输出。
在多个输入通道104的情况下,乘法加法单元140使用对于该输入通道104指定的特定子过滤器核或核110的核分量来对于每个输入通道104生成“预输出”。每个预输出以与上述输出相同的方式生成。然而,在对于每个输入通道生成所有预输出之后,乘法加法单元140将预输出的值求和到单个输出矩阵中,该单个输出矩阵可以是输出激活142。
在多个核过滤器112的情况下,乘法加法单元140还将每个核过滤器112应用于输入张量102,并且如果存在多个输入通道104,则乘法加法单元140将每个核过滤器112应用于上述所有输入通道104,并对预输出求和。这对于每个核过滤器112创建了单独的输出特征144。每个输出特征144是与输入通道104尺寸相同的矩阵。所有输出特征144的集合表示输出激活142,并且可以用作为神经网络的下一层中的输入通道104(即,一层的输出激活142成为神经网络的下一层的输入张量102)。下面参照图14至图17B描述关于乘法加法单元140的附加细节。
示例卷积运算
图2是根据一个实施方式的通过核对二维输入进行卷积的示例。尽管本文中描述的输入值202和输出值214是使用矩阵表示的,但实际上,它们可以简单地使用阵列、平面文件、树或其他方法来表示,而不需要被布置为矩阵,只要计算结果一样即可。
为了对一组输入值202执行卷积,可以首先将填充应用于输入值202,使得可以将核的“焦点”应用于输入值202的边缘处的值,以允许输出值214的尺寸与输入值的尺寸相同。然而,在其他情况下,填充不应用于输入值202,在这种情况下,输出值214的尺寸小于输入202的尺寸。与输入值202的尺寸相比,输出值214的每一侧缩小了等于在核的以下边缘与核的焦点之间的元素数量的元素数量,所述边缘在核的与输出值214的侧相同的侧上。输入值202的边缘从概念上讲是表示输入值202的矩阵的外边界周围的位置,因此没有其他值比该边缘上的值距矩阵中心更远。如上所述,核的“焦点”(也可以称为“原点”)是核的如下位置:其在概念上在当前输出像素上方。通常,它将对应于核中的值/元素之一的位置,并且对于对称核(例如所示示例中的3×3核),焦点通常是中心元素。
因此,为了使输出值214的位置与输入值202的位置匹配,将填充添加到输入值,使得核的焦点在跨越输入值中的第一位置时导致该焦点在输入值202的与输入值202的矩阵上的边缘值匹配的位置上,并且随后生成的输出值214具有与这些边缘值的位置匹配的位置。这确保了输出值214的尺寸与输入值202的尺寸相同。
因此,在所示的示例中,在表示输入值202的矩阵的边缘周围添加了宽度为1的填充204。这里,被填充的输入值202的尺寸是核210的尺寸的倍数,因此不需要额外的填充即可使尺寸变为核的尺寸的倍数。
在填充之后,将核210应用于输入值202。通过使核210跨越(即,移动)整个输入值202来应用核210。使核根据步幅值跨过输入值202。步幅值是确定每个步幅将核移动多远的值。如果该值为1,则核的焦点跨过输入值202的每个可能位置。由于填充,核210在任何时候都不会超过填充的输入值202的边界,而是核的焦点可以与输入值202的每个原始值重叠。注意,如果跨越值超过1,则核的焦点不会应用于输入值202的每个值。
对于作为核210的焦点的每个输入值,对概念上在核210下的输入值202进行卷积运算212。因此,在所示的示例中,核的焦点是选择的卷积点208。这里,如围绕选择的卷积点208的加权深色方形框206所示,选择了总共9个值,它们等于核210的尺寸并围绕选择的卷积点208。如果核210的焦点不在其中心,则将相应地使该框移位,使得该框的位置将使其对应的焦点位置为选择的卷积点208。例如,如果焦点在核210的左上角,则该框将向下移一个点,右移一个点,以使选择的卷积点208在该框的左上角。
卷积运算212取上述边界框206下的输入值202中的每一个,并在该框下的输入值202与核210的值之间执行点积运算,以生成输出值214的单个输出值。如图所示,当核210的焦点位于选择的卷积点208时,对于核210和输入值202,该输出为“8”。这里,由于填充和选择的焦点位置,输出值的位置与输入值202中的选择的卷积点208的位置相同。
然后,使核跨过输入值202中的一个位置(水平地或竖直地),并重复卷积运算212。当核212的焦点已经访问了所有可能的输入值202时,卷积运算212就完成了。这将创建一组完整的输出值,其尺寸与输入值(无填充)的尺寸相同。这种卷积运算允许输入值通过权重(核)来修改,并与输入中的其他值组合以生成新的输出。
在数学上,卷积运算可以被表示为:
这里,A可以是核,B可以是核,并且c是卷积结果。
该卷积运算允许神经网络处理复杂数据并基于该数据生成期望的输出。然而,如此处所示,这导致相同的输入值(例如示例重复读取的值218)在核210跨越输入值202时被多次读取。在输入值的一次卷积期间,在所示示例中示例重复读取的值218将被读取九次,因为九个核位置将与该值重叠。如果如上所述将其他核应用于输入值202,则将对该相同值218进行甚至更多重复读取。因此,尽管卷积运算212是机器学习中的强大工具,但在如此处所示的朴素方法中,其会潜在地产生非常大量的读取,即,非常大量的I/O操作,当输入值202增加并且卷积数目增加时,这会成为问题。因此,如本文所公开的,提供了一种更优化的方法,其可以显著减少重复读取输入值的次数。如上所述,读取次数可以减少至2
展平的输入流生成
图3是示出根据一个实施方式的使输入张量展平的方法的流程图300。尽管示出的流程图可以示出操作的顺序,但是可以以任何顺序执行所示出的操作,并且可以具有更多或更少数量的操作。在一个实施方式中,图3所示的操作可以由输入流生成器122执行。
输入流生成器122接收310输入张量,以通过核进行卷积。该输入张量可以是输入张量102。核可以是核110。在一个实施方式中,输入流生成器122用填充值填充输入张量,使得使用核进行的输入张量的卷积的输出的尺寸与输入张量的尺寸相同。在一个实施方式中,对于每个填充的输入张量维度,具有填充值的输入张量的尺寸为核的对应维度的整数倍。在又一个实施方式中,输入流生成器122使用以下填充值来填充输入张量的每个维度的尾边缘,所述填充值的宽度等于核在相应维度中的尺寸。每个维度的尾边缘是输入张量的具有最大索引值的边缘(即面或另一端)。填充值可以是零或空,或其他一些值。
输入流生成器122将输入张量划分320成一个或更多个图块,每个图块的尺寸等于核的尺寸。因此,如果核是3×3×核,则9×9输入张量(包括填充)将被划分成9个(二维或2D)图块。类似地,在给定3×3×3核的情况下,9×9×9输入张量将被划分成27个(三维或3D)图块。在一个实施方式中,核不具有方形维度,并且在这种情况下,输入流生成器122以与核跨越输入张量的方向对准的顺序划分输入张量。因此,如果核以行优先的方式(从左到右)跨越,则将沿着每一行划分输入张量,然后再进入下一行,依此类推。替选地,在另一个实施方式中,输入流生成器122以与核跨越输入张量的方向正交的顺序划分输入张量。因此,在上面的示例中,首先沿着每列(从上到下,然后到下一列)划分输入张量。
输入流生成器122将一个或更多个图块中的值展平330成向量,以生成展平的输入流。对于输入张量的一个或更多个图块中的每一个,这可以包括:以定义的顺序访问图块的值;根据定义的顺序将值布置在向量中;以及以平行布置来布置与一个或更多个图块中的每一个对应的一个或更多个向量,以生成展平的输入流。该定义的顺序可以是行优先顺序、列优先顺序或通道优先顺序。通道优先顺序首先沿着对应于三维(3D)图块深度的轴访问3D图块中的元素,随后沿着对应于3D图块的宽度和高度的轴访问3D图块中的元素。尽管在此将展平的输入显示为二维,但在其他实施方式中,它包括了更多的维度。
展平的输入流可以被存储在缓存器中。缓存器可以由硬件加速处理器读取,以使用1)通过控制模式选择的展平的输入流中的值以及2)核的扩展来执行乘法加法运算,以如本文中所述在不将输入张量的值多次加载到缓存器中的情况下生成卷积运算的输出。
另外,输入张量具有多个通道,其中,核具有多个过滤器,并且其中,输入通道与每个核过滤器卷积以生成具有多个输出通道的输出。
下面对于不同维度的核关于图4、图5A至图5C和图6A至图6B提供展平输入流的附加示例。
图4示出了根据一个实施方式的在一维核的情况下展平输入张量的示例400。在一个实施方式中,这里描述的过程可以由输入流生成器122执行。
在401处,输入流生成器122接收输入420。在所示示例中,输入420是6×3的一组输入值,被表示为矩阵。在402处,输入流生成器122基于核尺寸填充输入420。输入流生成器122填充输入420,使得核422的焦点(即,中心值b)可以对应于输入420的相同位置,以便如前所述生成相同尺寸的输出。这使得输入流生成器122添加填充426A。输入流生成器122还填充输入420,使得它是核尺寸的倍数(模)。这在填充426B中添加了两列填充。最终,在一个实施方式中,由于硬件要求,输入流生成器122以等于核的宽度的填充来填充输入420的尾边缘。在此,核422的宽度为3,因此宽度为3的填充被添加到输入420的末端,从而在填充426C处产生了三列附加的填充。
在403处,输入流生成器122将现在填充的输入424划分成其尺寸等于核422的尺寸的图块,以创建分块的输入428。由于核是3×1尺寸的矩阵,因此填充的输入424被划分成每个尺寸为3×1的图块。这将产生12个图块。在此,以行优先的形式对图块进行划分和排序,使得填充的输入424被逐行划分。然而,图块也可以被逐列划分,在这种情况下,图块1为[0,0,0],图块2为[1,7,13],依此类推。只要后续操作也遵循相同的取向,则产生的输出将是相同的。
在404处,输入流生成器122将分块的输入428变换成展平的输入430。这里,输入432的方向指示展平的输入430被输入到下一步骤(乘法加法单元140)的方向。因此,首先放置图块1,然后放置图块2,直到图块12。将每个图块变换成单个向量,并与从其他图块变换的其他向量平行放置。由于此处的图块已经是向量,因此不会进行其他变换。然而,如后续示例中所示,图块可能并不总是向量,而在这种情况下,它们会被展平成为向量。
该展平的输入430可以被存储为阵列、树或其他结构,并且可以被存储在缓存器、存储器或其他存储介质中。可以使用参考指针、存储器地址或根据时钟周期延迟来访问图块中的每个值。在时钟周期延迟的情况下,可以一次在一个向量中读取展平的输入430,并且可以将不同的读取延迟一定数量的时钟周期,以便访问展平的输入430中的不同向量。例如,可以通过将访问延迟七个时钟周期来访问图块7。
图5A示出了根据一个实施方式的在二维核的情况下展平输入张量的示例500的第一部分。与图4中的示例相反,在图5A至图5B中,使用二维核,从而产生了二维图块。在一个实施方式中,可以通过输入流生成器122执行该过程。
在501处,输入流生成器122接收输入,并基于核尺寸对其进行填充以生成填充的输入520。如前所述,填充满足三个要求:1)为了使输出值的尺寸能够与输入值的尺寸相同,可以基于核的焦点添加填充;2)可以进一步填充输入,使其成为核的尺寸的模;以及3)在某些实施方式中,由于硬件要求,将附加核宽度的填充添加到输入的尾边缘。
因此,在所示示例中,将向量宽度的填充添加到输入的外部,并将附加核宽度的填充添加到输入的右侧和底部(尾边缘)。由于核522是3×3核,因此附加填充在右侧为3个单元宽,在底部为3单元高。
在502处,输入流生成器122将填充的输入520划分成其尺寸等于核的图块。由于核为3×3,因此每个图块的尺寸为3×3。这创建了分块的输入524。使用变量K指示分块的输入524的行尺寸,该变量K随后用于从正在处理的图块索引到第二行中的图块。因此,分块的输入524的第二行上的第一图块是图块1+K,而其右边的图块是图块1+K+1。注意,如果第一个图块从“0”开始索引,则将K设置为[行图块尺寸]+1,而不是行图块尺寸。
在图5B中进一步描述该过程,图5B示出了根据一个实施方式的在二维核的情况下展平输入张量的示例的第二部分。
在503处,输入流生成器122根据特定的图块顺序将图像中的图块展平成向量。在此,展平顺序是行优先的,如对于单个图块530示例的展平顺序532所指示的。换言之,对于每个图块,如方向箭头所示,逐行读取该图块中的值,并将其放置在展平的输入528中的该图块的向量中。该向量,类似于用于展平的输入430的向量,被放置成平行于对于其他图块生成的向量(根据相同的展平顺序),并根据输入534的方向用作到乘法加法单元140中的输入。虽然向量被示出为是竖直的,但是在其他实施方式中,取向可以不同。
在另一个实施方式中,替代地,展平顺序538是列优先的,这意味着每个图块中的值被逐列读取,然后放置在单个向量中,并且被放置成与从填充输入的其他图块生成的其他向量平行。因此,与展平的输入528(其中,图块1的向量排序为[0,0,0,0,1,2,0,11,12])相反,此处替代地图块1的向量排序为[0,0,0,0,1,11,0,2,12],因为图块1中的值是逐列读取的,而不是逐行读取的。精确的展平顺序538不会影响输出,只要在输出值的生成中其他过程的顺序对应于相同的顺序即可。
图5C示出了根据一个实施方式的展平多个输入通道的输入张量的示例。在一个实施方式中,输入张量102可以具有如图1所示的多个输入通道104A-104N。多个输入通道与核卷积。将这些与核的卷积的输出求和在一起以生成输出激活。如果核中有多个核过滤器,则将每个核过滤器与多个输入通道进行卷积以生成输出特征。每个输入通道可以对应于输入的不同分量,例如颜色通道等。在一个实施方式中,可以由输入流生成器122执行该过程。
在504处,输入流生成器122对具有第一展平的输入的任何附加的输入通道进行分块。为了清楚起见,核542被示为2×2核。因此,每个图块是2×2,每个向量是1×4向量。在此,每个输入通道540A(统称输入通道540)类似于来自501的输入,因此输入流生成器122填充每个输入通道540并将其展平,从而生成展平的输入通道544A至544N。在一个实施方式中,然后将它们“堆叠”在彼此的顶部上以生成展平的输入流546。然而,在其他实施方式中,它们可以不同地组合,诸如经由级联、以3D阵列放置等。在这些情况的任一种中,展平的输入流546是各种展平的输入通道544的组合,并且可以将展平的输入通道544中的每一个的对应图块一起引用到展平的输入流546中。由此,例如,使用展平的输入流546(无论是通过延迟时钟周期还是其他方式)对图块5的引用将能够在包括展平的输入流546的所有展平的输入通道544中引用图块5。
图6A示出了根据一个实施方式的在三维核的情况下展平输入张量的示例的第一部分。与图4至图5C一样,在一个实施方式中,可以由输入流生成器122执行在此描述的过程。
在601处,类似于上面参照图4至图5C所描述的方法,输入流生成器122接收三维输入并且填充该输入以生成填充的输入626。为了清楚起见,这里仅示出了填充628的单个宽度。另外,为清楚起见,这里未示出实际输入值630,因为它们在透视图表示中会重叠。相反,填充628的值被示为具有深灰色图案的立方体,并且输入值630被示为白色立方体。核632和核值634也是如此。注意,填充的输入626具有三个维度106:维度1 106A、维度2 106B和维度3 106C。在某些情况下,维度1可以被称为宽度,维度2可以被称为高度,维度3可以被称为深度。此外,维度1可以被称为具有列,维度2可以被称为具有行,维度3可以被称为具有通道或层。
在602处,输入流生成器122将填充的输入626分块成其尺寸等于核632的尺寸的图块以生成分块的输入626。由于示例性核632的尺寸为2×2×2,并且可以由三维矩阵表示,因此图块的尺寸也为2×2×2。除了指示分块的输入的行中的图块数量的K变量636之外,三维输入还包括指示分块的输入的层中的图块数量的M变量。当计算具有对应于当前图块的位置的输出值时,可能需要来自当前图块后面一层的图块以及当前图块下方的图块的输入(与2D输入的情况一样)。因此,除了可以用于指示当前图块下方的图块的位置的K参数之外,还可以使用指示当前图块后面的图块的M参数。尽管提及了诸如下面和后面的方向,但实际上,输入图块可能不如在此所示那样进行几何布置,而是可以在数据结构中抽象指示。然而,将应用相同的K和M参数。由于填充输入626的宽度为6且高度为6,每层图块包括9个图块,核的2×2层平均划分九次划分成填充的输入626的6×6层。因此,在示例中M参数为9,并且K参数为3。
该过程在图6B处继续,图6B示出了根据一个实施方式的在三维核的情况下展平输入张量的示例的第二部分。在此,在603处,类似于上面参照图4和图5B所描述的过程,输入流生成器122根据示例展平顺序640将每个图块展平成向量,并且将向量彼此平行放置。由于单个图块的尺寸现在为2×2×2,因此它包括8个值。建立顺序,使得根据该顺序读取这八个值,并将其布置在单个向量中。在此,示例展平顺序640首先逐行(行优先),然后是每个层/通道(通道优先)读取单个图块。在示出了单个图块的分解图的示例展平顺序640中,该顺序由粗体和斜体数字指示。因此,首先读取由“1”指示的图块位置处的值,接着读取由“2”指示的图块位置处的值,依此类推,以读取在由“8”指示的图块位置处的值结束。根据图块的尺寸,可以建立不同的顺序。与以前的顺序一样,只要顺序在整个过程中保持一致,则无论使用哪种顺序,输出值都将相同。
通过输入流生成器122进行展平的结果是展平的输入642。示例展平顺序640用展平的输入的每个向量中的顺序644指示。因此,对于每个向量,由顺序644指示的“1”位置具有来自对应图块的处于该图块的示例展平顺序640的“1”位置的位置的值。这里,与图6A一样,深灰色区域指示填充值,并且白色区域指示输入值。例如,图6A中的图块3包括4个输入值和4个填充值。在遵循示例展平顺序640之后,将其变换成在展平的输入642处在图块#3处指示的向量,其中输入值与填充值交替。与图4和图5B中的展平的输入一样,该展平的输入被发送到乘法加法单元140进行进一步处理以生成输出值。
扩展核生成
图7是示出根据一个实施方式的生成扩展核的方法的流程图700。尽管示出的流程图可以示出操作的顺序,但是可以以任何顺序执行示出的操作,并且可以具有更多或更少数量的操作。在一个实施方式中,图7所示的操作可以由扩展核生成器126执行。
扩展核生成器126接收710用于对输入张量进行卷积的核。该核可以是核110。对于核的第一(最小)维度,扩展核生成器126生成核的每个单维向量的方形值块(循环矩阵),该方形值块包括该单维向量的所有旋转。在此,每个单维向量都是作为核的行、核的列、核的对角线或核的通道的独特的向量。核的通道是核的沿着与核的深度(在该情况下,第三维度)对应的轴对准的向量。
如果核110具有多个核过滤器112,则根据本文中所示的流程图分别处理每个核过滤器。如果每个核过滤器都包括子过滤器核,那么也将根据流程图单独处理该子过滤器核。尽管在此维度被称为“第一”或“最小”,但这并不旨在表示核的维度具有特定的顺序或尺寸关系。替代地,可以将核的任何维度选择为第一维度。例如,在图6A的三维核中,沿着X轴620的维度(X维度)、沿着Y轴622的维度(Y维度)或沿着Z轴624的维度(Z维度)都可以被选为第一维度。
类似地,核与单通道或多通道输入张量卷积生成单个输出通道。如果核包括多个过滤器,则将每个过滤器应用于输入张量以生成单独的输出激活。
在处理第一维度之后,对于核的每个附加维度,扩展核生成器126将前一个维度的块分组740成块集合,每个块集合包括前一个维度的沿着平行于(附加)维度的轴的向量对准的块。平行于维度的轴的向量是平行于当前正在处理的维度的轴的向量。因此,使用上面的示例,如果X维度是第一维度,则要处理的下一个维度可以是Y维度(尽管也可以是Z维度)。沿着Y维度,可以绘制与Y轴平行并且还与来自在前维度的块对准的一个或更多个向量。这是因为在在前维度(X维度)中生成了四个块,并且这些块中的每一个如果从概念上“定位”在与生成这些块的位置相同的位置处,则将形成两“列”块。这些“列”中的每一个都与平行于Y轴的向量对准或通过与平行于Y轴的向量。对准的块被分组在一起。
对于附加维度,扩展核生成器126还生成750一个或更多个值块,每个块包括前一个维度的块集合中的每一个内的块的所有旋转。因此,在以上示例中,每一列的块都使该列内的块旋转以生成新的方形值块。对于Y维度,这将生成两个方形值块。为了旋转向量或块集合,扩展核生成器126旋转该行或该集合中的块中的值(例如,将值进行桶形移位),以对于每次旋转生成新的向量或块的排序。一旦生成了所有可能的旋转,就将所生成的向量或块的排序的组合“堆叠”在一起以生成包括基础向量或基础块集合的所有旋转的输出块。
继续该示例,当处理下一个维度Z维度时,向量平行于Z轴。在这种情况下,两个块是根据两个块各自的前两“列”的旋转生成的。因此,这两个块在被“定位”时以与向量对准的方式旋转。不存在不通过该向量的其他块,因此这是唯一需要的块。然而,如果核具有更高的维度(即,大于3个维度),则可能存在附加的与该向量不对准的块,因此需要附加向量来对附加块进行分组。
当处理所有维度时,扩展核生成器126输出760对应于核的附加维度中的最后一个维度的值块作为扩展核。使用前面的示例,从Y维度旋转两个块之后,剩下一个块。该块作为扩展核输出。
因此,如示例中那样,三维核具有扩展核,该扩展核包括第一向量集,每个第一向量具有第一块组中的第一块的旋转排列。第一块组中的每个第一块对应于第二向量集中的第二向量,并且每个第二向量对应于第二块组中的第二块。第二块组中的每个第二块对应于核中的向量(核向量),并且每个第二块具有第三向量集,这些第三向量表示该第二块的相应核向量的所有旋转排列,每个第三向量表示相应核向量的一个旋转排列。在此,每个第二向量集包括对应的第二块组中的第二块的所有旋转排列。另外,第一向量集包括第一块组中的第一块的所有旋转排列。
在一个实施方式中,代替如示例中的三维核,该核是一维(1D)矩阵,并且扩展核包括多个平行向量,多个平行向量中的每个向量是核的不同旋转排列。在此,扩展核是方形矩阵,其每个维度的尺寸等于核的尺寸。
在另一个实施方式中,核是二维(2D)矩阵,因此扩展核包括第一向量集,每个第一向量具有块组中的块的旋转排列。块组中的每个块对应于核中的向量(核向量),并且每个块具有第二向量集,这些第二向量表示相应核向量的所有旋转排列。每个第二向量表示相应核向量的一个旋转排列,并且第一向量集包括块组中的块的所有旋转排列。
扩展核一旦生成,便是二维方形矩阵,其长度等于用于生成扩展核的相应核的维度的尺寸的乘积。下面参照图8、图9A至图9C和图10A至图10C描述生成用于一维核、二维核和三维核的扩展核的附加示例。
图8示出了根据一个实施方式的在一维核的情况下生成扩展核的示例800。在一个实施方式中,可以由扩展核生成器126执行在此描述的过程。
在801处,扩展核生成器126接收核820。在所示的示例中,核820的尺寸为3×1(小写字母表示核值)。因此,它是一维核。遵循上面在图7中描述的过程,在802处,扩展核生成器126使核820的每个单维向量旋转。由于核820仅具有单个向量,即[a,b,c],因此仅该向量可旋转。旋转该向量会生成总共三个组合,原始核820([a,b,c])和旋转822([c,a,b]和旋转824([b,c,a))中示出的组合。产生旋转的方法由802中所示的箭头指示。这些组合被分组在一起以形成循环矩阵。在803处,由于不需要处理核820的其他额外维度,因此,扩展核生成器126将旋转期间生成的分组的向量作为扩展核826输出。
由于扩展核包括核的各种旋转,因此如控制模式(例如,控制模式136)所选择的那样,扩展核的不同行可以对照展平的输入流的图块在点积中使用。代替使原始核在输入中的单个值上跨越多次,而是在此处扩展核,使得可以将上述核以2
图9A示出了根据一个实施方式的对于不同的二维核生成扩展核的示例。与图8一样,在一个实施方式中,可以由扩展核生成器126执行在此描述的过程。
在901处,扩展核生成器126接收核。在此示出了具有不同尺寸的二维核920A至920C的三个示例。核920A的尺寸为3×2,核920B的尺寸为2×3,而核920C的尺寸为3×3。在902A处,使用行优先顺序以核旋转922A至922C旋转核920的单维向量,即,单维向量对应于被旋转的核的行。如图所示,根据核的尺寸,单维向量的数量会有所不同。例如,具有三行的核920B在核旋转922B中具有三个旋转集合,而核920A仅具有两个旋转集合。
在903A处,旋转附加维度,即第二维度。在此,如图7所示,选择与第二维度的轴对准的向量,并且使通过每个向量的那些块一起旋转。在核920A的示例中,在核旋转922A中生成了两个块926A至926B,并且这些块与沿着第二维度轴的单个向量对准。通过组合行[a,b,c]的旋转来生成块926A,并且通过组合行[d,e,f]的旋转来生成块926B。这两个块在核旋转924A中旋转以生成扩展核932A。由于核中没有更多维度,因此不会再旋转。
对于核920B执行类似的处理。然而,这次有三个块928A至928C。因此,在核旋转924B中,三个块928A至928C被旋转并组合以生成扩展核932B。在核920C的情况下,在核旋转922C中还生成了三个块930A至930C(因为核920C具有三行)。这些块930A至930C在核旋转924C处在第二维度中旋转,以生成扩展核932C。每个扩展核沿着两个维度具有相等的尺寸(例如,方形矩阵),并且沿着每个维度的尺寸等于该核的每个维度的尺寸的乘积。例如,核920B具有3×2的尺寸,因此其扩展核932B的每个维度的尺寸是3×2=6。
图9B示出了根据一个实施方式的使用列优先扩展来生成扩展核的示例。代替如图9A中那样使用行优先顺序,这里示出的示例使用列优先顺序。
在902B处,扩展核生成器126获取核920C并且旋转每个单维向量。然而,代替地,将单维向量选择为核920C的列。因此,在此显示的第一向量具有对应于图中标记的第1列的值[a,d,g],而不是具有值[a,b,c]的向量。其余的两个向量对应于标记的第2列和第3列。
在903A处,来自902B的旋转向量(形成为块938A至938C)在核旋转936中旋转,该旋转类似于图9A中所示的核旋转924。这生成了扩展核940,尽管使用了相同的核,但这生成了与扩展核932C不同的扩展核940。然而,如果还考虑到该列优先顺序来生成控制模式,则在应用卷积后输出值将不会不同。
图9C示出了根据一个实施方式的在多个核过滤器的情况下生成扩展核的示例。如果核具有多个核“过滤器”,则将以与前面对于单个核所描述的方式相同的方式扩展每个核过滤器。如果每个过滤器都具有其他子过滤器核,则也将以相同的方式扩展这些子过滤器核。因此,如图所示,核过滤器942A至942N被扩展为扩展核过滤器944A至944N。
图10A示出了根据一个实施方式的在三维核的情况下生成扩展核的示例1000的第一部分。与图8和图9A至图9C一样,在一个实施方式中,可以由扩展核生成器126执行在此描述的过程。
在1001处,扩展核生成器126接收核1026。在所示的分解图中,可以看到核1026具有层1028A和1028B。每层具有不同的核值“a”至“h”,从而对于2×2×2核1026生成八个值。
在1002处,扩展核生成器126旋转核1026的所有单维向量(在该示例中使用行优先顺序)。在核1026中有四个向量,对应于核1026中的四行,在每一层1028上有两行。因此,四个旋转集合生成核旋转1030[或者:通过???生成]。
在1003A处,扩展核生成器126通过对在核旋转1030中生成的块进行分组来旋转第二维度(即下一个维度)。在此,来自核旋转1030的沿着平行于正在处理的当前维度(即第二维度)的轴的向量对准的那些块被分组在一起。在此,形成集合1034A的块沿着与第二维度轴即Y轴1022平行的向量(即向量1032A)对准。形成由与集合1032A中的层不同的层上的值形成的集合1034B的块也沿着与第二维度轴平行的向量(即向量1032B)对准。
尽管在此绘制了两个向量,但是它们被呈现以示出如何对块进行分组的概念性推理。实际上,没有绘制向量,并且扩展核生成器126通过确定从其生成维度的索引来对这些块进行分组。例如,集合1034A的块是从层1028A(可以具有索引“0”)生成的,集合1034B的那些块是从层1028B生成的。因此,扩展核生成器126知道分别旋转从这些不同层生成的块。对于后续维度,将重复执行该过程,当前维度的索引值被用于对在先前维度中生成的块进行分组。
该过程在图10B中继续,图10B示出了根据一个实施方式的在三维核的情况下生成扩展核的示例的第二部分。
在此,在1003B处,扩展核生成器126生成来自在前生成的已被分组成集合1034A-1034B的块的旋转。每个集合的块分别被旋转。如图所示,这产生了两个块,由集合1034A的两个块的旋转产生的块,以及由集合1034B的两个块的旋转产生的块。
在1004A处,扩展核生成器126重复步骤1003A,但是对于下一个维度,即第3维度,它也是三维核1026的最后一个维度。这里,扩展核生成器126将沿着与维度轴对准的向量对块进行分组。如图所示的向量是向量1040,并且轴是Z轴1024。在1003B中生成的每个块都是由核的不同层上的块生成的,因此,在概念上,在1003B中生成的块也位于不同层上。向量1040与所生成的两个块对准(即,可以通过这两个块),因此,这些块被分组到集合1038A中。由于没有其他要分组的块,因此这是第三维度的独特的集合。
该过程在图10C中继续,图10C示出了根据一个实施方式的在三维核的情况下生成扩展核的示例的第三部分。在此,在1004B处,扩展核生成器126生成在处理先前维度时生成的块集合中的块的所有旋转。在所示的示例中,仅存在一个集合1038A,因此该集合中的块被旋转以生成最终的扩展核1044,因为这是核1026的维度的最后一个维度。
控制模式生成
图11是示出根据一个实施方式的生成控制模式的方法的流程图1100。尽管示出的流程图可以示出操作的顺序,但是可以以任何顺序执行示出的操作,并且可以具有更多或更少数量的操作。在一个实施方式中,可以由控制模式生成器134执行图7所示的操作。
控制模式生成器134接收1110核的维度中的每一个的一个或更多个尺寸,该核与输入张量卷积以生成输出激活。该核可以是图1中的核110。核可以是一维、二维、三维或更多维。核的每个维度都有尺寸,并且这由控制模式生成器134接收。
在1120处,对于控制模式的每个位置,控制模式生成器134基于位置在控制模式中的定位以及核的维度中的每一维度的一个或更多个尺寸生成1130该位置的值。
一旦生成了所有位置的值,则控制模式生成器134就输出1140完整的控制模式方形矩阵。控制模式的每个维度的尺寸等于核的宽度和高度的乘积。另外,控制模式的每个位置的值指示如下位置,从该位置可以访问与核卷积的展平的输入张量中的值。
在一个实施方式中,控制模式的每个位置具有行号和列号,并且每个值的生成包括对于核的每个维度,基于核的每个维度的行号、列号以及一个或更多个尺寸来确定测试的结果。每个测试生成指示从其访问展平的输入流的值的相对偏移量的二进制输出,如上所述,该值是通过展平的输入张量的核尺寸大小的图块来从输入张量生成的。对于核的每个维度,将控制模式的该位置的值作为测试的二进制输出的组合来生成。每个测试可以是不等式测试,该不等式测试将使用位置的行号的第一取模运算与使用位置的列号的第二取模运算进行比较。第一取模运算是在行号与核的维度中的每个维度的一个或更多个尺寸之间的取模。第二取模运算是列数与核的维度中的每个维度的一个或更多个尺寸之间的取模。在二维核的情况下,第一个测试是r mod h 在一个实施方式中,控制模式包括多个向量,多个向量中的向量的数量对应于输出激活的核尺寸大小的图块中的输出值位置的数量。多个向量的每个向量内的值对应于延迟值,其中每个延迟值指示访问展平的输入流中的各个输入值的延迟量。如上所述,展平的输入流包括从输入张量生成的一组平行向量,并且延迟量指定了展平的输入流内的平行向量之一。 在一个实施方式中,通过对于与要生成的输出值对应的输出值位置选择控制模式中与该输出值位置对应的向量将延迟值用于对于输出激活的核尺寸大小的图块的每个输出值位置生成输出值。访问控制模式的选定向量中的延迟值,每个延迟值指示从其访问用于生成输出值的每个输入值的展平的输入流中的平行向量。在访问的输入值与扩展核的向量之间执行点积,以生成输出激活的核尺寸大小的图块中的输出值位置处的输出值。在一个实施方式中,通过将核修改成包括分层块集合来生成扩展核,其中该分层块集合中的每个块包括作为该块的节点的块的所有旋转排列。分层块集合的其余的块是包括核的各个向量的所有旋转排列的块,并且分层块集合中的每个块都具有如下节点,这些节点是与平行于0核中该块表示的维度的轴的向量对准的块。 在一个实施方式中,控制模式是二维方形矩阵,其长度等于用于对输入张量进行卷积的对应核的维度的尺寸的乘积。 在一个实施方式中,控制模式中的延迟值的排列顺序基于所定义的其中输入张量的核尺寸大小的图块被访问以生成展平的输入流的顺序。 在一个实施方式中,定义的顺序是行优先顺序、列优先顺序或通道优先顺序。通道优先顺序首先沿着与3D图块深度对应的轴,然后沿着与3D图块宽度和高度对应的轴,访问输入张量的三维(3D)核尺寸大小的图块中的元素。 尽管以上流程图示出了根据核的维度的尺寸生成控制模式的方法,但是在另一个实施方式中,用于各种核尺寸的各种控制模式被存储在存储器中,并根据所使用的核尺寸来检索。下面参照图12至图13描述关于控制模式的生成的附加细节。 图12A示出了根据一个实施方式的用于生成控制模式的概念基础的示例1200的第一部分。 如前所述,控制模式的目的是从展平的输入流中的正确图块中选择值,以与扩展核组合以生成输出值。当核在朴素的卷积实现中跨越输入值时,会从输入中读取不同的值,并将其与核中的权重合并以生成输出。控制模式可以通过从不同的输入值所处的位置选择不同的图块来模拟这种情况,以生成正确的输出值。然而,与朴素的实现相反,输入值不会被多次读取,而只会进行最少次数的读取。为了确定控制模式中的指示要从哪个图块进行选择的模式,可以使用以下方法。然而,尽管可以使用以下方法来生成控制模式,但是实际上,硬件将可能使用单独的方法,例如上面参照图11所述的方法,因为在此描述的方法可能缺乏效率。因此,本文描述的方法可以更多地用于提供对控制模式的概念性理解。 在1201处,类似于上面参照图4至图6描述的方法,将输入展平。这里的输入张量的尺寸为4×4,并且由于核1220的尺寸为2×2,因此每个图块的尺寸为2×2,并且总共有4个图块(此处不应用填充)。展平的输入1218因此具有四个向量,每个向量表示一个图块。类似于上面参照图7至图10描述的过程,核也被扩展以生成扩展核1224。 在1202处,将展平的输入1218中的第一图块即图块1(1222A)与扩展核相乘以生成逐元素乘积1226A。因此,图块1 1226A中的“1”与对应行中扩展核1224中的四个核值“a”、“b”、“c”和“d”中的每一个相乘以生成四个乘积“a1”、“b1”、“c1”和“d1”。对图块的其余值以及其他图块2至4(1222B-1222C)重复此操作。如图所示,这创建了逐元素乘积1226A-1226D。 该过程在图12B中继续,图12B示出了根据一个实施方式的用于生成控制模式的概念基础的示例的第二部分。由于生成了逐元素乘积1226A-1226D,在1203处,确定对于在原始输入的单个图块上重叠的核的每个位置,生成逐元素卷积乘积所需的那些图块值(在所示示例中使用核的逐行跨越)。因此,在位置1(1230A)处,其中核的位置位于输入的最左上角,如核位置边界框1232所示,覆盖在输入上的核值“a”、“b”、“c”和“d”与输入的核值覆盖的下面的值相乘。因此,“a”与输入中的“1”相乘,“b”与“2”相乘,“c”与“3”相乘,以及“d”与“4”相乘,以生成如图所示的位置1(1234A)的逐元素乘积对。根据分别使用行优先还是列优先格式生成展平的输入流或扩展核,这些乘积对在所示示例中显示为列,但也可以转换成显示为行。 基于逐元素对1234A,确定可以从这些逐元素对1226A-1226D中的哪一个中定位这些逐元素对。在位置1(1230A)的第一个示例中,所有这些对都可以位于逐元素乘积1226A中,并被标记为”A”。因此,在分析位置1之后的控制模式在1236A处被示为所有“A”的列。在此A可以表示当前正在处理的图块,可以将其概括成图块X。 对于位置2(1230B),核位置1232向右移动一个,不过它仍与输入中的第一个图块重叠。逐元素乘积对1234B是“a2”、“b5”、“c4”和“d7”。由于核中的“d”现在超过输入中的值“7”,因此无法在逐元素乘积1226A中找到此“d7”乘积对,而是在逐元素乘积1226B中找到,用“B”表示。因此,在1236B处表示的控制模式的下一列在与逐元素乘积对1234B中的位置“d7”对应的最后值处具有“B”。此外,此处的B对应于当前图块X加1或图块X+1。 在位置3处,核位置1232向下移动一个并且向左移动一个。核不会再向右移动,因为如果发生这种情况,它将不再与第一个图块重叠。这是不必要的,因为生成了控制模式以仅从展平的输入流中确定那些值,这些值用于生成与输入(即当前图块)中的相同图块位置对应的单个图块的输出值。额外的图块是单独计算的。因此,当系统逐图块地计算输出值时,在此描述的过程仅与核在所讨论的单个块上重叠的那些核位置有关。另外,由于在所示示例中核1220的焦点是核1220的左上位置(由“a”指示),所以核在当前图块上的位置1232是核的焦点覆盖在当前图块的每个输入值上的关注位置。因此,位置3是这样一个位置,其中核的焦点覆盖在当前图块中的第三个值上(使用逐行顺序)。在这种情况下,核从当前图块读取,也从当前图块下方的图块读取,该图块是图块X+K,其中K(如前所述)是行(或列)中图块的数量。这些值与核组合以生成逐元素乘积对1234C。如逐元素乘积对1234C所示,“c9”和“d10”包括来自当前图块下方图块的值,并且可以在逐元素乘积1226C中找到,即“c9”和“d10”可以位于逐元素乘积1226C的值之一中。前两个乘积对“a3”和“b4”可以在逐元素乘积1226A中找到,因为它们仅包括当前图块中的值。因此,如1236C所示,位置3之后的控制模式的下一列具有两个“A”和两个“C”,字母的顺序与乘积对的顺序对应。 最后,在位置4(1230D)处,覆盖在输入上的核的位置1232触摸当前图块以及当前图块周围的所有其他三个图块的值。因此,乘积对1234D是“a4”、“b7”、“c10”和“d13”。这些可以分别在逐元素乘积1226A-1226D中的每一个中被识别。因此,控制模式的最后一列(如1236D中所示)分别使用字母“A”至“D”指示所有四个逐元素乘积1226A-1226D。这里,D表示当前图块X,加上行尺寸变量K加1,或者X+K+1,因此是指当前图块下方和右侧的图块。 如此处所示,因为控制模式中的值指示当前图块周围的哪些图块要对于其检索值以计算当前图块上核焦点位置的卷积,所以其也可以用于从展平的输入流中选择值,然后将其与扩展核的相应向量组合以生成输出中的相应焦点位置的输出值。 图13A示出了根据一个实施方式的用于二维核的控制模式的值的生成的一部分的示例1300。在一个实施方式中,在此描述的过程由控制模式生成器134执行。 在1131处,控制模式生成器134生成控制模式1320的所有值。这里,控制模式1320的大多数值已经生成,但是还没有生成其余值1324来说明该过程。如图所示,该值1324在第0行和第8列。在1312,控制模式生成器134使用该位置的行号和列号/坐标来确定该位置的测试结果。测试结果参考不等式测试1330。测试次数等于核维度数量。由于此处的核是二维的,因此生成了两个测试。每个测试对应于移位变量之一,该移位变量用于标识输入张量中每个维度的展平尺寸。例如,K表示在第一维度上,即每一行的图块的尺寸或数目,而M表示在第二维度上,即每一层的图块的数目。替选地,可以将特定维度的每个移位变量定义为等于该维度的图块化尺寸的乘积与任何先前维度的图块化尺寸的乘积。此处的图块化尺寸表示横跨与输入张量中的维度平行的长度的图块数量。 另外,对于第一维度生成测试,该测试不对应于移位变量,而是对应于当前图块。因此,在此生成了test_k和test_1。替选地,这些可以被称为delay_k和delay_1,因为如上所述,移位变量可以被用来指示用于访问展平的输入流的延迟量。 如在此可以看到的,测试不等式的产生遵循一种模式。第一维度1的测试不等式是r mod h 在结果表1332中引用了两个测试的结果。在此,根据每个测试的真或假(即1或0)结果,在控制模式中的对应位置放置不同的值(即指示符)。在此,由于有两个测试,所以总共有4个可能的值,在此分别表示为字母A、B、C和D,并分别等效为二进制值00、01、10和11。如本文所述,这些值指示展平的输入流的向量/图块,从该向量/图块可以访问值以计算输出激活。在此,如测试结果1326所示,行号为0,列号为8,两个测试的结果为真,因此1324的值为“D”或11,它引用当前图块x+k+1。尽管行号和列号是按所示顺序排序的,但在另一个实施方式中,该顺序可以颠倒。只要修改了测试不等式(例如,通过反转它们),此处的结果将是相同的。因此,这里的过程不受标记控制模式的行或列的特定方法的限制。 图13B示出了根据一个实施方式的用于三维核的控制模式的值的生成的一部分的示例1301。在一个实施方式中,在此描述的过程由控制模式生成器134执行。 这里,在1351处,控制模式生成器134生成控制模式1360的值。与图13A中的控制模式相反,对于具有高度2、宽度2和深度2(分别标记为h、w和d)的三维核1362生成控制模式1360。 如先前在图13A中所述,核的每个维度与测试不等式相关联。因此,这里在测试表1370中生成了三个测试不等式。与图13A一样,它们也可以分别被称为delay_m、delay_k和delay_1,而不是test_m、test_k和test_1。test_1和test_k都与图13A所示的测试不等式相同。对应于M个移位变量(即输入张量的一层中有多少个图块)的Test_m遵循与test_k类似的模式,但现在包括核深度(d)。 如果核将包括附加维度,则该测试不等式将进一步扩展为包括附加维度。例如,对于四个维度,测试不等式可以是floor((r mod(h*w*d*t))/(h*d*t) 由于对于三维核有三个测试,所以总共有八个组合,如结果表1372所示。每个组合对应于指示符A至H或三位二进制值。如以下参照图13C进一步描述的,在一些实施方式中,二进制位的模式可以用于有效地存储控制模式。在1352处,控制模式生成器134在控制模式1360的第0行和第7列产生最后的其余值1364。如测试结果1366所示,对于该位置,所有三个测试不等式都为真,对应于指示符H或二进制值111。因此,H将被存储在控制模式1360的第0行第7列的位置。然而,如果不是所有的测试不等式都返回为真,则将基于在结果表1372中选择行来选择不同的指示符,其指示与计算出的测试不等式结果相匹配的三个测试不等式结果。 如果核包括附加维度,则结果表1372的尺寸将增加,类似于测试不等式的数量。结果表中的行数将等于2 注意,为了计算测试不等式,将变量r替换为要生成其值的控制模式的位置的行号(此处为0),将变量c替换为要为要生成其值的控制模式的位置的列号(此处为7),将变量h、w和d替换为核的高度、宽度和深度的尺寸(此处为2、2和2)。 图13C示出了根据一个实施方式的对于不同维度的核生成控制模式的示例1300。在图13中,示出了3×1 1D核1310、3×3 2D核1314和2×2×23D核1318,为清楚起见,在分解图中示出了3D核1318。对于这些核,分别示出了相应的控制模式1312、1316和1320。它们可以根据上面参照图11描述的方法来生成。对于1D核,控制模式1312中的标识符“A”指示当前图块X,而“B”指示图块X+1。对于控制模式1316,“A”指示当前图块X,“B”指示图块X+1,“C”指示图块X+K,其中K是先前描述的行尺寸变量,并且“D”指示图块X+K+1。对于控制模式1320,“A”至“D”表示与控制模式1316相同的图块。此外,“E”对应于图块X+M(当前图块后面的图块),其中M为层图块尺寸(即,层中的图块的数量)。“F”对应于图块X+M+1,即,在当前图块后面的图块右边的图块。“G”是图块X+M+K,对应于当前图块后面和下面的图块。“H”对应于图块X+M+K+1,并且对应于当前图块后面、下方和右侧的图块。 在一个实施方式中,代替使用诸如图13中所示的字母之类的指示符来存储控制模式,或者作为表示这些字母的位序列来存储控制模式,而是利用控制模式的分形性质以更有效的方式来存储。对于控制模式1312、1316和1320中的每一个,标识符都沿着上边缘和右边缘以“A”开头,然后导致“A”和“B”之间的交替模式,并进一步划分模式直到左侧最底部的值是指示距当前图块最远的图块的标识符(如图所示,按字母顺序是最大的字母)。由于这种分形特性,可以根据控制模式中的独特的标识符的数量将每个控制模式分层地分为一个或更多个级别。级别数对应于用于生成控制模式的核的维度数量。因此,控制模式1312具有单个级别。控制模式1316具有两个级别,并且控制模式1320具有3个级别。 每个级别包括包含单个二进制值(即,位)的方形矩阵。每个级别的方形矩阵的每个维度的尺寸等于前一个级别的维度的尺寸乘以核的最大维度的尺寸。最小级别具有每个维度的尺寸等于核的最大维度的尺寸的方形矩阵。因此,例如,对于控制模式1316,最大级别具有尺寸为9×9的位的方形矩阵,而第二最小级别的每个维度的尺寸为3×3(即9除以3,即核维度的尺寸)。 不是最大级别的级别中的每个位与更大级别中的多个位匹配。特别地,将较大的级别均等地划分成等于下一个最小级别中的位数的多个区域,并且将下一个最小级别中的位与较大级别的区域中的位匹配。下一个最小级别的位中的匹配位的位置对应于较大级别的区域组中的区域的位置。跨越多个级别的匹配位的组合允许控制模式中每个位置的位序列,以便引用标识符。因此,在控制模式1316的示例中,3×3矩阵的每个位与9×9较大矩阵的3×3部分匹配。来自9×9矩阵的位与来自3×3矩阵的匹配位的组合形成两位值,该两位值可用于参考控制模式1316的四个独特的指示符之一。在控制模式1320的示例中,由于存在8个独特的标识符,因此存在三个级别,最大级别为8×8矩阵,第二最大级别为4×4矩阵,最小级别为2×2矩阵。在控制模式1316中,可以使用三位来引用八个独特的标识符中的正确标识符(即,如图所示的字母“A”至“H”)。这些位先前也在图13A至图13B的示例中的结果表中示出。 该方法允许控制模式被有效地存储。为了从各个级别中提取正确的位序列,乘法加法单元140可以确定指示符在控制模式中的位置,然后使用其来确定最大级别中的正确位置,以及其余级别中的匹配位置,以确定与该指示符对应的位序列。 使用展平的输入、扩展核和控制模式生成输出 图14是示出了根据一个实施方式的使用展平的输入、扩展核和控制模式来生成卷积的输出的方法的流程图。尽管示出的流程图可以示出操作的顺序,但是可以以任何顺序执行示出的操作,并且可以具有更多或更少数量的操作。在一个实施方式中,图14所示的操作可以由乘法加法单元140(也可以称为乘法累加单元)来执行。 乘法加法单元140从缓存器访问1410展平的输入流,该展平的输入流包括一组平行向量,每个向量表示要通过核进行卷积以生成输出激活的输入张量的独特的核尺寸大小的图块的一组输入值。该展平的输入流可以是展平的输入流124,并且可以如上所述由输入流生成器122生成。 乘法加法单元140接收1420通过对核的值进行旋转排列而生成的扩展核,该扩展核具有向量,每个向量对应于输出激活的核尺寸大小的图块的输出值位置。这可以是扩展核128,并且可以如上所述由扩展核生成器126生成。 乘法加法单元140接收1430控制模式,该控制模式包括一组向量,其中每个向量对应于输出激活的核尺寸大小的图块的输出值位置,并且每个向量包括指示用于访问输入值以进行卷积的展平的输入流的平行向量的延迟值。控制模式可以是控制模式136,并且可以如上所述使用控制模式生成器134来生成。 对于输出激活的每个核尺寸大小的图块的每个输出值位置,乘法加法单元140生成1440第一向量与第二向量之间的点积,第一向量包括通过控制模式的相应向量的延迟值选择的展平的输入流的值,以及第二向量对应于扩展核中的与输出值位置对应的向量。乘法加法单元140对所有输出值重复此操作。 在一个实施方式中,输入张量具有多个通道,并且核具有多个过滤器。输入张量的每个通道与核的一个或更多个过滤器进行卷积,以生成具有多个输出特征的输出激活。下面参照图15A至图15C、16A至图16F和17A至图17B描述用于通过乘法加法单元140生成输出值的附加示例。 图15A示出了根据一个实施方式的在一维核的情况下使用展平的输入、扩展核和控制模式生成输出激活的示例1500的第一部分。在一个实施方式中,这里描述的过程可以由乘法加法单元140执行。 在1501A处,乘法加法单元140处理输出激活的第一个图块#1(与输入张量中的图块位置相同)。这是当前正在处理的图块。在1502A处,乘法加法单元140进一步处理第一图块的3个输出位置中的输出位置1(其中3是每个图块中的值的数量)。在第一输出位置的处理中,在1511A处,乘法加法单元140根据如对于该输出位置的控制模式1524中的向量所指示的图块位置(例如,延迟量)从展平的输入1522中选择值。对于位置1,此向量是控制模式1524中最右边的列。因此,如图所示,输出图块中位置1的控制模式向量1528A均为指示当前图块X的“A”,或者从中选择值的图块1。可以通过参考存储器地址、索引值来选择展平的输入1522中的值,或者可以通过延迟乘法加法单元140从展平的输入1522读取的时钟周期来选择展平的输入1522中的值。这里,由于控制模式向量1528A的值指示“A”,因此选择的输入值1530A是从展平的输入1522的图块1中选择的并且如图所示为[0、1、2]。 在1512A处,乘法加法单元140在选择值1530A和对应于输出图块中位置1的扩展核向量1532A之间进行乘法累加,即执行点积。对于位置1,扩展核向量1532A是扩展核1526的顶行。点积运算导致如图所示的计算a0+b1+c2,其生成位置1处的输出1534A,如图所示。 该过程在图15B处继续,其示出了根据一个实施方式的在一维核的情况下使用展平的输入、扩展核和控制模式来生成输出激活的示例的第二部分。 在1503A处,处理当前图块的三个输出位置中的第二位置。在1513A处,类似于1511A,选择与图块的位置2对应的控制模式向量1536A。在这种情况下,该向量是控制模式1524的中间列。该控制模式向量1536用于从展平的输入1522中选择相应的值。对于控制模式向量1536中的每个标识符,从展平的输入1522中选择该标识符指示的图块,并从展平的输入1522中在该图块处在与控制模式向量1536中的指示符的相同位置对应的位置处选择值。因此,控制模式向量1536A中的第一(顶部)位置具有标识符“A”,其对应于图块X(如在图例中所指出的)或在当前示例中的展平的输入1522中的图块1。因此,从相同的第一位置选择展平的输入1522的图块1中的值(这是值“0”)。对控制模式向量1536A中的第二位置执行相同的操作,产生从展平的输入1522的第一图块的第二位置中选择“1”。对于控制模式向量1536A的第三位置和最终位置,标识符现在为“B”,其指示(在图例中已指出)应参考的图块是图块x+1或当前示例中的图块2。因此,乘法加法单元140从图块2中选择相同的第三位置中的值或“5”。因此,如图所示,选择的输入值1538A是[0、1、5]。 在1514A处,与1512A中的操作类似地执行乘法累加操作。然而,代替从扩展核1526中选择第一行,而是选择与输出的位置2对应的行,即向量。在当前示例中,这恰好是扩展核1526的第二行。因此,位置2的扩展核向量1524A为[c,a,b]。该扩展核向量1524A与选择的输入值1538A之间的点积为c0+a1+b5,或者在输出图块的位置2处的输出1544A。 该过程在图15C中继续,其示出了根据一个实施方式的在一维核的情况下使用展平的输入、扩展核和控制模式来生成输出激活的示例的第三部分。 在1504A处,处理输出图块的最终位置3。在此描述的处理与1503A和1502A的处理相似,但是所有选择都对于第三位置进行了适当移动。 因此,在1515A处,选择的控制模式向量1546A现在对应于输出图块的位置3,并且因此是控制模式1524的最左列。该控制模式向量1546A对于图块1具有一个指示符,并且对于图块2具有两个指示符。因此,所选输入值1548A包括图块1中的“0”和图块2中的“4”和“5”。 在1516A处,对选择的输入值1548A和位置3的扩展核向量1552执行乘法累加运算,该位置对应于当前示例中扩展核1526的第3行。该点积的输出是位置3的输出1554A。 在1505处,对输入中的所有图块重复该过程,以生成相同数量的图块用于输出。因此,在当前示例的展平的输入1522中,对于图块2,将1501A的操作从对于图块2的1501B至对于图块12的1501L进行重复。如果展平的输入1522包括更多的图块,则重复1501A中所示的过程,直到所有图块都被处理为止。 图16A示出了根据一个实施方式的在二维核的情况下使用展平的输入、扩展核和控制模式来生成输出激活的示例1600的第一部分。与图15A至图15C相反,本文描述的过程是针对二维核而不是针对一维核的。在一个实施方式中,本文所述的处理由乘法加法单元140执行。 在1601A处,由乘法加法单元140处理第一图块。由于每个图块具有九个位置,因此处理每个位置以生成该位置的输出值。在1602A除,处理输出位置1。与一维核示例一样,根据输出位置值从控制模式1624中选择控制模式向量1628A。由于输出位置是1,因此将标记有控制模式1624的输出位置1的列选择为控制模式向量1628A。该控制模式向量1628A具有“A”作为其所有标识符。因此,该控制模式向量1628A指示应该全部从展平的输入1622的图块1中选择所选择的输入值1630A(因为当前图块X是图块1)。 该过程在图16B处继续,其示出了根据一个实施方式的在二维核的情况下使用展平的输入、扩展核和控制模式来生成输出激活的示例的第二部分。 在1612A处,根据图16A所示的扩展核1626的输出位置标签,对所选输入值1630A和从扩展核1626中选择的扩展核向量1632A进行乘法累加运算。在这种情况下,输出位置1对应于扩展核1626的顶行。选择该顶行用于乘法-累加运算。因此,该顶行形成扩展核向量1632A。乘法加法单元140在所选输入值1630A与扩展核向量1632A之间执行点积,以生成位置1的输出1634A。 在1603A处,处理输出位置2。输出位置2对应于控制模式1624从右起的第二列(如标记)。注意,此处的列顺序不必遵循所示的顺序。相反,只要选择了与正确输出位置对应的正确列,列的顺序就可以是任何顺序。此外,控制模式1624不需要按列排序,而是也可以按行排序。只要引用了与正确输出位置对应的正确行,输出也将相同。最后,控制模式中标识符的顺序也可以颠倒。只要在使用标识符选择输入值时以正确的顺序引用标识符,输出也将相同。该相同概念也适用于扩展核1626,因为它的排序可以与在此描述的排序不同。 如在图例中所指出的,控制模式1624中的标识符“A”是指展平的输入1622的图块X,其中X是当前图块,而标识符“B”是指图块x+1。控制模式向量1636A包括标识符“A”和“B”。对于控制模式向量1636A中的每个位置,乘法加法单元140确定标识符正在引用哪个图块,并从展平的输入1622中的该引用的图块中选择在展平的输入1622中的图块的向量的相同输入位置处的输入值,作为标识符在控制模式向量1636A中的位置。因此,例如,控制模式向量1636A中的位置6具有标识符“B”,该标识符指示应从图块x+1中选择值,该图块是展平的输入1622的图块2(当前图块#1+1=图块2)。乘法加法单元140从展平的输入1622的图块2向量中选择与控制模式向量1636A中的位置6对应的输入位置6处的值,并将其放置在所选择的输入值1638A的位置6处。其余值以类似方式选择。 该过程在图16C中继续,其示出了根据一个实施方式的在二维核的情况下使用展平的输入、扩展核和控制模式来生成输出激活的示例的第三部分。 在1614A处,将在先前操作中生成的所选输入值1638A与点积中的扩展核向量1642A组合,以生成位置2的输出1644A。这里,根据输出位置编号,在这种情况下为2,再次选择扩展核向量1642A。因此,扩展核1626的第二行被选择为扩展核向量1642A。 乘法加法单元140对图块的其余输出位置执行上述处理。作为示例,在1606A处,对输出位置5执行处理。这里,在1615A处,如图16A所示,从输出位置5的列中选择控制模式向量1646A。在此,控制模式向量1646A包括分别与图块X+K和X+K+1对应的两个新的标识符“C”和“D”,其中,K表示输入的行中的图块的数量。因此,如图所示,从展平的输入流中的图块6的位置9中选择控制模式向量1646A中的位置9。这将为该输出位置生成选择的输入值1648A。 该过程在图16D中继续,其示出了根据一个实施方式的在二维核的情况下使用展平的输入、扩展核和控制模式来生成输出激活的示例的第四部分。 在1615A处,执行乘法累加运算。乘法加法单元140在所选输入值1648A与对于位置5选择的扩展核向量1652A之间执行点积。在所示示例中,这是扩展核1626的第5行。点积结果是位置5的输出1654A。在1616处重复该过程,直到生成当前图块中的所有输出为止。此外,在1617处重复该过程,直到所有图块被处理为止。 图16E示出了根据一个实施方式的在二维核的情况下使用展平的输入、扩展核和控制模式来生成具有多个通道的输出激活的示例。 如前所述,输入张量102可以具有多个通道,每个通道是输入值的单独矩阵。如先前参照图5C所描述,输入的多个通道被展平并且“堆叠”在彼此的顶部。在1618处,根据图4至图6中描述的方法对这些输入通道中的每一个进行展平,并且展平的输入通道1656的值由控制模式1624选择以生成所选择的输入通道值1658。虽然这里显示了选择的输入通道值1658的新矩阵,但实际上可能不会生成新的矩阵。相反,乘法加法单元140可以动态地从展平的输入通道1656中选择值。因此,在此示出了选择的输入通道值1658,以在概念上说明该概念。 该过程在图16F中继续,其示出了根据一个实施方式的在二维核的情况下使用展平的输入、扩展核和控制模式通过多个通道生成输出激活的示例的第二部分。 在1618处,乘法加法单元140利用选择的输入通道值1658和核过滤器1660A-1660N执行1668点积(即,乘法累加)。所选输入通道值1658中的每个输入通道用不同的子过滤器核1666进行卷积,子过滤器核本身就是核。每个子过滤器核1666可以具有相同或不同的值。卷积过程可以类似于上面关于图16A至图16D所述的过程。所产生的卷积输出1662A对于单个核过滤器被求和1670,以产生输出激活通道1664A。对于每个其余的核过滤器1660B-1660N,重复此过程,从而生成多个输出激活1664B-1664N。这些输出激活1664A-1664N可以用作神经网络中其他卷积层的输入。 图17A示出了根据一个实施方式的在三维核的情况下使用展平的输入、扩展核和控制模式生成输出激活的示例的第一部分。在一个实施方式中,本文描述的过程可以由乘法加法单元140执行。 在1701处,乘法加法单元140正在处理输入的图块X。在1702处,乘法加法单元140对图块X的输出位置8进行处理。在1711处,乘法加法单元140使用选择的位置8的控制模式向量1724从展平的输入1722中选择值。与上述对于一维核和二维核的处理一样,控制模式的对应于输出位置(在这种情况下,位置8)的向量被选择为控制模式向量1724。控制模式向量1724具有八个不同的标识符,从“A”到“H”。如图17A中的图例所示,每个标识符指示展平的输入1722的不同图块。例如,标识符“H”对应于图块X+M+K+1,其中M是每层中的图块的数量,K是输入的每一行中的图块的数量。对于每个标识符,乘法加法单元140从展平的输入1722的所指示的图块中选择与所选择的输入值1726的标识符的位置对应的位置处的值。 该过程在图17B处继续,图17B示出了根据一个实施方式的在三维核的情况下使用展平的输入、扩展核和控制模式来生成输出激活的示例的第二部分。 在1712处,乘法加法单元140将位置8的选定输入值1728与位置8的扩展核向量1730组合成点积,以生成当前图块的位置8的输出1732。所选择的扩展核向量1730对应于输出的位置。 在1713处,乘法加法单元140对输入中的每个图块的所有输出位置重复上述过程,以生成输出激活。 示例性处理器部件 图18A示出了根据一个实施方式的用于生成扩展核的示例性部件的硬件图。在一些实施方式中,与阵列(例如,权重的核)对应的数据值1810被存储在数据存储装置电路1801(例如,存储器电路)中。在一些实施方式中,与阵列对应的数据值被存储为序列(例如,被存储为单列)。在该示例中,数据值1810耦合至一个或更多个输入上的移位器电路1820。移位器电路可以接收阵列作为数据值序列。每个数据值可以包括一个或更多个字节的数字数据值,例如,其可以是整数、浮点数或其他类型的数据值。因此,每个数据值可以在多个导体(例如,集成电路上的导线互连)上耦合至移位器电路1802,其中,例如,一组导体可以承载一个数据值,而多组导体可以承载一系列数据值。在一个实施方式中,数据值是权重,,并且输入数据值是神经网络的激活值。 可以在移位器电路1802的输入上接收承载数据值的导体。例如,移位器电路1802的输入可以接收用于承载序列中的一些或全部的导体。如上所述,可以将与阵列对应的数据值作为序列接收。在一个实施方式中,该序列包括并行地从数据存储器1810接收的相应阵列的所有数据值。然而,在其他实施方式中,该序列可以包括对应阵列的数据值的一部分(例如,一次接收并排列一列或一次接收并排列一行)。移位器电路1802可以以不同的顺序将来自一个或更多个输入的数据值耦合至一个或更多个输出,以产生排列序列。在一些实施方式中,多个输出各自承载一个序列,该序列可以耦合至乘法器1803。在其他实施方式中,在第一输入上接收的序列的数据值被移位到不同的位置并耦合至一个或更多个输出。在下面示出的一个示例实施方式中,在第一输入上接收序列,将数据值移位到不同的位置,并且在第二输出上顺序地生成排列序列。 在一些实施方式中,如上所述,由移位器电路1802产生的排列可以对应于扩展核。因此,在一些实施方式中,仅一个序列可以被存储在存储器中,而不是多个排列序列被存储在存储器中,从而例如有利地减少了存储器的使用。例如,从数据存储装置1801接收的序列可以包括基于阵列的列或行的多个子序列。移位器电路1802可以如下排列该序列。数据值可以以与序列相同的顺序从移位器电路1802的一个或更多个输入耦合至移位器电路1802的一个或更多个输出。因此,输入序列可以包括由输出产生的序列之一。另外,对于子序列的多个排列,其中每个子序列的位置在所述序列内移动,以及对于每个子序列中的数据值的多个排列,其中数据值在每个子序列内移动,数据值以不同的顺序从一个或更多个输入耦合至一个或更多个输出。上面示出了对于不同阵列的这种排列的示例。在一个实施方式中,在移位器电路1802的第一输入上接收数据值,并且将数据值从第一输入耦合至第一输出以在第一输出上产生输入序列。另外,数据值可以以不同的顺序从第一输入耦合至多个第二输出,以在多个第二输出上产生多个排列序列。下面在图18B中示出了该方法的示例实现。在另一个实施方式中,在移位器电路1802的一个或更多个输入上接收数据值,将数据值移位到输入与一个或更多个输出之间的不同位置以产生输入序列和多个排列序列。 乘法器电路1803可以耦合至移位器电路1802的一个或更多个输出。因此,可以将在移位器电路1802的一个或更多个输出上产生的序列加载到乘法器1803中的多个寄存器电路中。乘法器1803还可以接收输入数据值1820。输入数据值1820可以被加载到多个第二寄存器中。因此,可以生成多个乘法结果1830。如上所述,例如,扩展核可以产生多个卷积结果,这些卷积结果是并行地生成的。在一个实施方式中,数据值对应于M×N阵列(例如,核被应用于输入数据值1820)。移位器电路1802可以从数据存储1810接收M*N长度的序列,并且产生M*N个不同的序列,每个序列的长度为M*N。序列可以从移位器电路1802耦合并且被加载到乘法器电路1803中(例如,并行地)。 图18B示出了根据一个实施方式的在用于生成扩展核的示例性部件中使用的示例性移位器电路的硬件图。 在该示例中,输入序列SEQ1对应于M×N阵列,例如,其中M和N是整数,并且M和N中的一个或更多个大于1。因此,序列SEQ1包括M*N个数据值D0至D(M*N)。序列SEQ1可以从输入耦合至包括未排列的M*N个数据值的第一输出(例如,流S(1))。此外,序列SEQ1可以沿着M*N-1个不同的路径被排列成M*N-1个不同的序列SEQ2-SEQM*N,这些序列在M*N-1个输出(例如,流S(2)-S(M*N)上被提供,每个各自包括M*N个排列的数据值,例如D0至D(M*N)。 更具体地,在该示例中,在第一输入流S(1)上接收包括多个数据值D0至D(M*N)的序列SEQ1。序列中的每个数据值例如可以包括在多个导体上承载的一个或更多个字节。在此,数据值沿着不同的传导路径以不同的顺序从第一输入(例如,流S(1))耦合至多个不同的输出(例如,流S(1)至S(M*N)),以在多个不同的输出(例如,流S(1)至S(M*N))上产生原始序列SEQ1和多个排列序列SEQ2至SEQM*N。例如,输入序列中的每个数据值D0至D(M*N)可以包括在多个导线上承载的一个或更多个字节。承载不同数据值的导线在输入(例如,流S(1))与多个输出(例如,流S(2)至S(M*N))中的每一个之间进行不同的重新排序,以在多个输出中的每个输出上产生不同的排列序列。更具体地,在该示例中,输入S(1)上的SEQ1耦合至多个旋转器1860至1862。例如,旋转器1860至1862可以通过改变承载数据值的导体的位置来重新排序数据值在每个序列中的位置。在1870和1871处示出了两个示例旋转。在该示例中,旋转之后,每个排列序列可以耦合至多路复用器电路的输入。本公开内容的实施方式可以包括集成电路,该集成电路包括多个流S。例如,可以使用多路复用器1851至1853将经由旋转器1860至1862从SEQ1生成的排列序列耦合至相邻的流S(2)至S(M*N)。例如,承载数据值D0至D(M*N)的不同排列序列SEQ2至SEQM*N的重排导线中的每个重排导线可以耦合至每个多路复用器的输入。每个多路复用器的第二输入与流S(2)至S(M*N)中的一个耦合。因此,每个多路复用器的输出将排列序列之一耦合至每个流上。另外,用于承载数据值D0至D(M*N)的原始序列SEQ1的输入的导线以相同的顺序耦合至第一输出(例如,流S(1)),以在输出上产生承载流S(1)的原始序列。例如,分别承载SEQ1至SEQM*N的流S(1)至S(M*N)可以耦合至乘法器电路。因此,在该示例中,序列SEQ1的所有排列可以有利地在同一周期上并行地生成,并且并行地加载到乘法器中。 图19示出了根据一个实施方式的用于生成控制模式的示例性部件的硬件图。一些实施方式的特征和优点可以包括控制模式生成器电路1910,该控制模式生成器电路1910可以与例如乘法器阵列电路1920集成在同一半导体表面上。在一个实施方式中,控制模式生成器1910被配置成(例如,经由软件)接收核的维度,诸如高度(H)和宽度(W)。例如,对于乘法器阵列1920中的乘法器单元1921至1926中的每个乘法器单元,控制模式生成器1910可以产生两个位。一个位可以在K延迟输入或非K延迟输入之间进行选择,而另一个位可以在单位延迟与非单位延迟输入(例如1延迟或无延迟)之间进行选择。每个乘法器单元可以包括例如用于存储两个模式控制位的存储单元(例如,寄存器)。两个位一起可以使用选择电路选择以下四个数据值中的一个:X、X+1、X+K、X+K+1,其中X是当前图块,而K是指示输入张量的图块尺寸宽度的变量,如上所述。对于具有附加维度的核,控制模式生成器1910对于每个附加维度生成附加位,其中该位在通过使该附加维度的变量移位的附加延迟与没有附加延迟之间进行选择。注意,虽然在此使用术语延迟,但在某些情况下,不是通过延迟而是通过可以将延迟值用作进入存储器的索引值的相对或绝对寻址系统来访问展平的输入流的访问值。 在该示例中,控制模式生成器1910包括K延迟逻辑电路1911和单位延迟逻辑电路1912。K延迟逻辑电路1911例如可以接收核的单个维度,并产生用于在K延迟输入与非K延迟输入之间进行选择的H*H位值。在该示例中,K延迟逻辑电路1911接收核的高度H,并产生与控制模式的H×H三角形阵列对应的H 图20示出了根据一个实施方式的用于执行乘法加法运算以生成输出激活的示例性部件的硬件图。在该示例中,来自扩展核(M*N)的值被加载到多个乘法累加器电路的第一输入寄存器中,并且输入值aij被加载到多个乘法累加器电路的第二输入寄存器中。例如,乘法累加器电路可以包括多个乘法器2001、2011、2021、2031、2041和2051,其中可以从扩展核向多个乘法器电路加载不同的值wij。每个乘法器还可以从展平的输入流的多个图块之一中加载输入值。例如,a11对应于第一图块的a11位置(即图块中的第一行和第一列)中的值,该值可以耦合至选择电路2006(例如,多路复用器或“Mux”)的一个输入。a11输入还可以耦合至延迟电路2003,以在选择电路2006的第二输入处产生a11的延迟版本(例如,一个周期延迟)。该延迟版本从当前图块中选择一个单元作成图块。另外,a11可以耦合至K延迟电路2004(例如,缓存器或先进先出数据存储单元(“first in first out,FIFO”))以产生例如在选择电路2006的另一个输入处延迟了K个周期的a11的版本。这对应于在当前图块下方一行的图块。此外,可以在另一个延迟电路2005的输入处接收K延迟电路2004的输出,以在选择电路2006的又一个输入处产生a11的K+1延迟版本。类似地,例如,乘法器2011至2021接收对应于扩展阵列的第一行的值w12,…,w1(M*N)和输入值a11…aMN。同样,扩展阵列的其他行可以乘以输入值a11...aMN直到扩展阵列的最后一行w(M*N)1,...,w(M*N)(M*N),例如,其中行包括如上所述的排列值。乘法器2011、2021、2031、2041和2051分别包括延迟2013、2023、2033、2043和2053、K延迟2014、2024、2034、2044和2054、延迟2015、2025、2035、2045和2055、以及选择电路2016、2026、2036、2046和2056。 例如,可以使用控制模式在a11的各种版本之间进行选择,以便将来自适当图块的输入值与存储在特定乘法器中的权重相乘。在该示例中,输入值乘以扩展核的第一行中的序列,因此a11w11…aMNw1(M*N)具有与A(经历卷积的当前图块)对应的控制模式值。然而,在该示例中,计算整个图块上的卷积(包括涉及相邻图块的卷积)可以包括等待相邻图块中的输入值到达。因此,对于给定的“当前图块”计算卷积可以包括等待K+1个周期,以便相邻图块值可用。如上所述,根据核的维度,可以使用其他控制模式值。为了计算当前图块的卷积,例如,系统可以存储输入值并等待来自其他图块的输入值可用于进行计算。因此,例如,可以使用特定图块的K+1个延迟输入值,作为相邻列图块中的值的K个延迟输入值,作为相邻行图块中的输入值的1个延迟值、以及作为与相邻行和相邻列图块相邻的图块中的输入值的未延迟值来计算特定图块的卷积。尽管本说明书涉及当前值(例如,对于当前图块或未延迟值),单位(或1)个延迟值、K个延迟值和K+1个延迟值,但是应当理解,这样的延迟可以是彼此相对的(例如,在选择电路的输入处)。信号路径中可能存在各种其他延迟,但此处出于说明目的将其省略。此外,如果核将具有附加维度,则将包括附加延迟值,例如M延迟值等,以及相应的电路。 输入值a11至aMN(例如a11至a33)的阵列可以加载到乘法器电路2001、2011,…,2021的阵列中,每个乘法器电路也都加载有不同的权重w11,w12,…,w1(M*N)(例如,w33)。如上所述,例如,每个乘法器接收使用从具有与提供权重的扩展核相同维度的控制模式阵列的不同控制模式输入选择的输入。每个乘法器2001、2011,…,2021的输出可以耦合至一个或更多个加法器电路(例如,加法器2007、2017、2027)以对乘积求和并输出卷积结果R1。类似地,可以将扩展核的每一行加载到多个乘法器中,并乘以输入值的向量,该向量被来自控制模式阵列的相应行所掩盖。在此,将扩展核的包括值w(M*N)1,w(M*N)2,…,w(M*N)(M*N)的最后一行加载到乘法器2031、2041和2051的列中,并与由控制模式阵列中的最后一行控制的包括例如位置(M*N,1),(M*N,2),...,(M*N,M*N)的值的输入值a11,a12,…,aMN组合。乘法器的最后一列的输出在加法器2037、2047和2057中相加在一起,以产生例如第M*N个卷积结果R(M*N)。在等效的替选实施方式中,延迟可以耦合至乘法器的输出。 图21示出了根据一个实施方式的机器学习处理器中的用于计算输出激活的示例性部件布局2100。所示布局表示机器学习处理器(或其他处理器)中的用于执行本文所述操作的部件(逻辑部件和/或物理部件)的一种可能的布局。布局2100包括ICU 2110、多个MEM图块2115A-2115N、多个SXM图块2120A-2120N、多个NIM图块2125A-2125N以及超级单元2130A-A至2130N-N的阵列。在下面的描述中,通过省略它们的字母后缀,通常可以指代这些元素。 ICU 2110向NIM图块2125发出指令。这些指令指示NIM图块2125用正确的控制模式值配置超级单元2130,以便执行本文所述的卷积运算。超级单元2130布置在方形网格中。每个超级单元2130具有指示其可以平行处理多少个值的尺寸。超级单元2130可以全部具有相同的尺寸。例如,每个超级单元可以是16×16的网格,并且可以处理256个值。 在一个实施方式中,如2145所示,在超级单元2130之间竖直地划分输入通道,使得每个输入通道在展平之后由超级单元2130的一层或更多层(由命名方案中的第一字母表示的层)处理。由于输入层可能小于超级单元2130的尺寸,或者当输入通道的竖直维度未均匀地划分到超级单元2130的竖直维度中时,一层或更多层可以仅包括层的一部分。在同一实施方式中,输出特征(即不同的输出“通道”)在超级单元2130之间水平划分,如2155所示。因此,超级单元2130的一列或更多列(或一部分)(由命名方案中的第二个字母指示)用于处理每个输出功能。 超级单元2130本身可以类似于上述的乘法累加单元。超级单元在对输入值2140执行卷积运算之后,将其输出发送到其上方的超级单元2130。这允许将不同输入层的卷积相加在一起以从多个输入层生成输出特征2150。使用上述方法(例如,在图16E至16F中),如果存在用于输出的多个通道,则生成多组输出特征2150。 在第一时钟周期上,ICU 2110指示第一NIM图块2125A配置与该NIM图块2125A相关联的一个或更多个超级单元2130。在示出的示例中,与NIM图块2125A在同一层上的超级单元2130由NIM图块2125A配置。这些是超级单元2130A-*(其中*是从A到N的任何字母)。在第二时钟周期上,NIM图块2125A使用在图13A至图13B中描述的方法为超级单元2130A-A配置正确的控制模式值。对于第一超级单元2130A-A,当生成控制模式值时,行号和列号没有偏移。然而,对于除超级单元2130A-A之外的任何其他超级单元2130,用于生成控制模式值的行号和列号具有附加的偏移。对于列号,该偏移等于正配置的超级单元2130左侧(“西侧”)的超级单元2130的数量乘以超级单元2130的单元宽度。对于行号,该偏移等于正配置的超级单元2130下方(“南侧”)的超级单元2130的数量乘以超级单元2130的单元高度。可以根据从处理先前的输入通道或输出通道已经使用的超级单元的多少部分来附加填充偏移值。使用该偏移量的原因是因为图块、控制模式和扩展核尺寸可能不是超级单元的尺寸的倍数,因此不同的图块可能会跨越不同的超级单元2130。这意味着控制模式值可能还会跨越不同的超级单元2130,因此需要将每个控制模式值的计算偏移超级单元2130的位置,以生成与超级单元2130将要处理的一个或多个图块或图块的一部分对应的正确的控制模式值。 与超级单元2130A-A配置有控制模式值平行地(在同一时钟周期上),NIM块2125A将指令与配置其超级单元2130B-*的指令一起传输到后续NIM块2125B(当前NIM图块2125的上方或“北侧”)中。该指令包括先前指出的偏移值,使得NIM图块2125B利用解释了偏移的正确的控制模式值来配置超级单元2130B-*。重复该指令的传播,直到由NIM图块2125配置等于输入的尺寸的若干超级单元2130为止。 在超通道中的超级单元2130的每个配置期间,NIM图块2125可以仅对于输出的特定通道(即,输出通道)配置超级单元2130。可以在来自ICU 2110的指令中指定通道。为了将超级单元2130配置用于输出的附加通道,ICU 2110可以在每个时钟周期向NIM图块2125发布附加指令,以将超级单元2130配置用于输出的附加通道。这些指令包括正确的偏移值,使得处理该输出层的超级单元2130具有正确的行和列位置值,从而能够生成正确的控制模式值。 在每个时钟周期处,将来自ICU 2110的指令从一个NIM图块2125“北侧”传播到随后的NIM图块2125,而ICU 2110继续沿着“向东”方向发布对于超级单元的指令。因此,在多个时钟周期上,超级单元2130被配置成对角线“波”。以这种方式,在多个时钟周期之后配置整组输入通道和输出通道的配置。一旦完成此过程,输入值2140将由在此描述的系统接收,并由超级单元2130以与上述乘法累加操作类似的过程逐图块处理,以生成输出特征2150。 图22A示出了根据一个实施方式的示例机器学习处理器。本公开内容的特征和优点包括能够以非常高的速率执行卷积运算的处理器电路。在该示例中,服务器计算机2201(或主机)可以包括配置软件2210,其可以接收一个或更多个核2213以用于执行卷积。处理器电路2200可以是机器学习处理器,其是指接收输入数据(例如,激活诸如图像)并且将核(例如,神经网络权重)应用于输入数据作为例如机器学习(亦称人工智能)算法的一部分的电路。在该示例中,配置软件2210(有时称为编译器)接收神经网络权重2213。在该示例中,可以在软件中生成扩展核或控制模式(或两者)。例如,权重2213可以由核生成器2212和控制模式生成器2211分析,以产生控制模式2225和扩展核2226,控制模式2225和扩展核2226可以例如存储在处理器电路2200中的数据存储装置2220例如存储器或寄存器电路中。例如,输入值2280可以在输入/输出(I/O)电路2222中被接收并且通过数据总线2224耦合至乘法累加器电路2276。扩展核2226和控制模式2225也可以耦合至乘法累加器电路2221。乘法累加器电路2221例如可以如上所述产生卷积结果。在一些实施方式中,中间卷积结果2227被存储在数据存储装置2220中,并且被应用于新的激活输入2280。在其他实施方式中,例如,卷积结果2290可以被提供为输出。替选地,卷积结果可以由其他电路2223例如向量处理器(未示出)处理。 图22A示出了根据另一个实施方式的示例机器学习处理器。在该示例中,核由配置软件进行分析,但是扩展核和控制模式可以在硬件中生成。例如,在配置软件(例如,编译器)2260中接收一个或更多个核(例如,神经网络权重)2262,并通过核分析器部件2261进行分析,以产生用于生成包括值K的扩展核的配置信息,值K可以从核的尺寸和其他信息(例如,要处理的输入的尺寸)中得出。服务器计算机2251可以将配置信息和值K发送到处理器电路2250。在该示例中,K可以对应于输入2285的每一行中的图块的数目,例如,其中图块的尺寸与核的尺寸相同。该配置信息可以用于配置控制模式生成器2277和移位器电路2278。移位器电路2278可以被配置成排列核以从例如存储在数据存储器2270中的一个或更多个核2275生成扩展核。 在该实施方式中,在硬件中生成扩展核。一个或更多个核2275可以被存储在数据存储器2270中。例如,核可以作为值的序列被存储在数据存储器2270中,其中可以从数据存储器2270访问该序列并且将该序列耦合至移位电路2278(例如,同时)。如上所述,可以使用各种移位电路来排列输入序列并生成扩展核。下面更详细地描述用于排列序列以产生扩展核的一个示例电路。例如,扩展核的值可以被加载到乘法累加器2271中。在硬件中扩展核可以减少所需的数据存储量,这在某些实施方式中可能是有利的。 本公开内容的实施方式包括配置与乘法累加器2271串联的K延迟电路。在该示例中,输入值2285可以耦合至延迟电路2279,该延迟电路2279可以例如是诸如可编程缓存器的可编程延迟电路。在一个实施方式中,延迟2279可以被配置成成具有例如K的延迟,该延迟可以取决于核的尺寸和沿着输入阵列的维度的图块的数量而不同。在一个实施方式中,例如,延迟2279可以是先进先出(FIFO)电路,其中输出是输入的延迟版本,并且该延迟被设置为K。输入值也可以不延迟地直接耦合至乘法累加器电路2271。因此,乘法累加器电路2271可以接收例如当前输入值和延迟了K个周期的输入值。 控制模式生成器2277可以产生用于实现控制模式的控制信号,以如上所述使得各种延迟的或未延迟的输入数据值与特定的权重组合。例如,特定的模式控制信号可以对应于将核应用于每个输入图块的路径以及用于将图块和核展平的路径。例如,如上所述,控制模式生成器2277的输出可以用于选择输入值的各种延迟版本。 因此,乘法累加器电路2271接收当前输入值、K个延迟的输入值、扩展核以及用于选择不同输入的控制信号。如上所述,乘法累加器2271可以包括用于延迟当前输入值和K个延迟的输入值两者的附加单元延迟电路,并且来自控制模式生成器2277的控制信号可以用于选择要与例如扩展核中的不同值相乘的适当输入值。乘法累加器电路2271的输出可以是中间卷积2276,其可以被存储在数据存储器2270中并且与随后的输入2285卷积,或者卷积结果可以例如在2295处输出。替选地,卷积结果可以由其他电路2273例如向量处理器(未示出)处理。 示例性计算机器架构 图23是说明示例计算机器的部件的框图,该示例计算机器能够从计算机可读介质读取指令并在处理器(或控制器)中执行这些指令。本文描述的计算机可以包括图23所示的单个计算机器、虚拟机、包括多个节点即多个图23所示的计算机器的分布式计算系统、或者计算设备的任何其他合适的布置。本文描述的计算机可以通过先前附图中描述的任何元件用于执行所描述的功能。 通过示例的方式,图23示出了计算机系统2300的示例形式的计算机器的示意图,在计算机系统2300内可以将指令2324(例如,软件、程序代码或机器代码)存储在计算机可读介质中,用于使机器执行本文讨论的任何一个或更多个过程。在一些实施方式中,该计算机器作为独立设备运行,或者可以连接(例如,联网)到其他机器。在联网的部署中,机器可以在服务器-客户端网络环境中以服务器机器或客户端机器的身份运行,或者在对等(或分布式)网络环境中作为对等机器运行。 图23中描述的计算机器的结构可以对应于上图中所示的任何软件、硬件或组合的部件。尽管图23示出了各种硬件和软件元件,但是图1和2中描述的每个部件可以包括更多或更少的元件。 通过示例的方式,计算机器可以是个人计算机(PC)、平板电脑、机顶盒(set-topbox,STB)、个人数字助理(personal digital assistant,PDA)、蜂窝电话、智能手机、网络设备、网络路由器、物联网(internet of things,IoT)设备、交换机或网桥、或者能够执行指令2324的任何机器,这些指令指定了该机器要执行的动作。此外,虽然仅示出了单个机器,但是术语“机器”也应被认为包括单独地或共同地执行指令2324以执行本文所讨论的方法中的任何一个或更多个的机器的任何集合。 示例计算机系统2300包括一个或更多个处理器(通常是处理器2302)(例如,中央处理单元(central processing unit,CPU)、图形处理单元(graphics processing unit,GPU)、数字信号处理器(digital signal processor,DSP)、一个或更多个专用集成电路(application specific integrated circuit,ASIC)、一个或更多个射频集成电路(radio-frequency integrated circuit,RFIC)或它们的任意组合)、主存储器2304和静态存储器2306,它们被配置成通过总线2308彼此通信。计算机系统2300还可以包括图形显示单元2310(例如,等离子体显示面板(plasma display panel,PDP)、液晶显示器(liquidcrystal display,LCD)、投影仪或阴极射线管(cathode ray tube,CRT))。计算机系统2300还可以包括字母数字输入设备2312(例如键盘)、光标控制设备2314(例如鼠标、轨迹球、操纵杆、运动传感器或其他指向工具)、存储单元2316、信号生成设备2318(例如,扬声器)和网络接口设备2320,它们也被配置成经由总线2308进行通信。 存储单元2316包括计算机可读介质2322,在计算机可读介质2322上存储了实现本文描述的方法或功能中的任何一个或更多个的指令2324。在计算机系统2300、主存储器2304和处理器2302执行指令期间,指令2324还可以全部或至少部分地驻留在主存储器2304内或处理器2302内(例如,处理器的高速缓存存储器内),计算机系统2300、主存储器2304和处理器2302也构成了计算机可读介质。可以经由网络接口设备2320在网络2326上发送或接收指令2324。 虽然在示例实施方式中将计算机可读介质2322示为单个介质,但是术语“计算机可读介质”应理解为包括能够存储指令(例如,指令2324)的单个介质或多个介质(例如,集中式或分布式数据库,或相关联的高速缓存和服务器)。计算机可读介质可以包括能够存储由机器执行并且使机器执行本文公开的任何一种或更多种方法的指令(例如,指令2324)的任何介质。该计算机可读介质可以包括但不限于固态存储器、光学介质和磁性介质形式的数据存储库。该计算机可读介质不包括诸如信号或载波的瞬态介质。 其他配置注意事项 某些实施方式在本文中被描述为例如包括逻辑或多个部件、引擎、模块或机构,如上图所示。引擎可以构成软件模块(例如,在计算机可读介质上实现的代码)或硬件模块。硬件引擎是能够执行某些操作的有形单元,并且可以以某种方式来配置或布置。在示例实施方式中,一个或更多个计算机系统(例如,独立的客户端或服务器计算机系统)或计算机系统的一个或更多个硬件引擎(例如,一个处理器或一组处理器)可以由软件(例如,应用程序或应用程序部分)配置为硬件引擎,该硬件引擎运行以执行本文所述的某些操作。 在各个实施方式中,可以机械地或电子地实现硬件引擎。例如,硬件引擎可以包括专用电路或逻辑,该专用电路或逻辑被永久地配置(例如,作为专用处理器,例如现场可编程门阵列(field programmable gate array,FPGA)或专用集成电路(ASIC))以执行特定操作。硬件引擎还可以包括由软件临时配置以执行某些操作的可编程逻辑或电路(例如,如在通用处理器或另一可编程处理器中所包括的)。将理解,在成本和时间方面考虑可以决定以机械方式,在专用且永久配置的电路中,还是在临时配置的电路(例如,由软件配置)中实施硬件引擎。 本文描述的示例方法的各种操作可以至少部分地由一个或更多个处理器(例如,处理器202)至少部分地执行,所述一个或更多个处理器被临时配置(例如,通过软件)或永久配置成执行相关操作。无论是临时配置还是永久配置,这样的处理器都可以构成处理器实现的引擎,该引擎运行以执行一个或更多个操作或功能。在一些示例实施方式中,本文所指的引擎可以包括处理器实现的引擎。 某些操作的性能可以分布在一个或更多个处理器之间,不仅驻留在单个计算机内,而且可以跨多个计算机部署。在一些示例实施方式中,一个或更多个处理器或处理器实现的模块可以位于单个地理位置(例如,在家庭环境、办公室环境或服务器场内)。在其他示例实施方式中,一个或更多个处理器或处理器实现的模块可以分布在多个地理位置上。 通过阅读本公开内容,本领域技术人员将理解通过本文公开的原理的用于类似系统或过程的另外的替选结构和功能设计。因此,尽管已经示出和描述了特定的实施方式和应用,但是应当理解,所公开的实施方式不限于本文所公开的精确构造和部件。在不脱离所附权利要求书所限定的精神和范围的情况下,可以对本文公开的方法和设备的布置、操作和细节进行对本领域技术人员而言明显的各种修改、改变和变化。
- 矩阵的空间局部变换
- 基于特征点聚类四叉划分和局部变换矩阵的图像拼接方法