用于执行卷积神经网络中的卷积运算的装置的制作方法

文档序号:14176039阅读:193来源:国知局
用于执行卷积神经网络中的卷积运算的装置的制作方法

本公开总体上涉及卷积神经网络,并且具体地涉及用于执行卷积神经网络中的卷积运算的装置。



背景技术:

基于卷积神经网络的深度学习技术能够以较高的准确率进行图像识别和检测、语音识别等,因此被广泛地应用于安全监控、辅助驾驶、智能陪伴机器人、智能医疗等领域。

卷积神经网络中的运算量通常很大。为了减少卷积神经网络中的运算量,可以对卷积神经网络的权重参数进行稀疏化,即,强制权重参数中的某个或某些元素的值设置为零,并跳过与这些零值元素有关的运算。

期望能够通过硬件高效地实现经稀疏化的卷积神经网络中的卷积运算。



技术实现要素:

提供了一种用于执行卷积神经网络中的卷积运算的装置。该装置可以包括:第一选择器,耦接到存储权重参数的第一存储器,并且被配置为选择权重参数的一个或多个核在一个或多个第一通道上的一个或多个第一非零元素,每个第一通道上包含至少一个第一非零元素,并且每个第一非零元素在对应的核中的元素位置相同,元素位置是在高度和宽度这两个维度上的二维定位;第二选择器,耦接到存储输入特征数据的第二存储器,并且被配置为与一个或多个第一非零元素相对应地选择输入特征数据在一个或多个第一通道上的一个或多个第一数据项,每个第一数据项在输入特征数据中的数据项位置取决于对应的第一非零元素的元素位置,每个第一数据项与对应的第一非零元素位于相同的第一通道,数据项位置是在高度和宽度这两个维度上的二维定位;以及运算器,被配置为将来自第二选择器的每个第一数据项的值与来自第一选择器的对应的第一非零元素的值相乘,并且将相乘所得到的结果累加。

通过根据本公开的实施例的装置,能够通过硬件高效地实现权重参数以任何方式被稀疏化的卷积神经网络中的卷积运算。

附图说明

图1示出根据本公开的实施例的权重参数的稀疏化以及非零元素位置列表和非零通道列表的示例。

图2示出根据本公开的实施例的用于执行卷积神经网络中的卷积运算的装置的框图。

图3示出根据本公开的实施例的用于执行卷积神经网络中的卷积运算的装置的结构的示例。

具体实施方式

卷积神经网络中的每层的特征数据可以是一个三维数据,并且可以表现为由多个点组成的具有一定高度、宽度和深度的数据立方体。该数据立方体中的任何一个点可以被称为特征数据的一个数据项,并且可以采用一个三元组(x,y,z)来表示,其中,x可以表示该数据项位于数据立方体中按照从上到下的次序的哪一行(即,在高度的维度上的定位),y可以表示该数据项位于数据立方体中按照从左到右的次序的哪一列(即,在宽度的维度上的定位),并且z可以表示该数据项位于数据立方体中按照从前到后的次序的哪个通道上(即,在深度的维度上的定位)。

可以将上述三元组(x,y,z)中的二元组(x,y)称为特征数据的一个数据项位置,其为在高度和宽度这两个维度上的二维定位。数据项位置为(x,y)的数据项可以对应于在特征数据中行号为x并且列号为y的任何一个通道上的数据项。由此,特征数据中的任何一个数据项可以通过对应的数据项位置和所在通道的通道号来定位。可以将表示数据项位置的二元组(x,y)映射成一维数值,并采用该数值来代表数据项位置。

卷积神经网络中的每层的权重参数可以是一个四维数据,并且该权重参数的每个核可以是一个三维数据。与特征数据的表示方式相类似地,权重参数的每个核也可以表现为由多个点组成的具有一定高度、宽度和深度的数据立方体,并且该数据立方体中的任何一个点可以被称为权重参数的一个元素或者权重参数的某个核的一个元素。与特征数据相类似地,可以采用一个三元组(x,y,z)来定位权重参数的一个核中的元素。另外,也可以采用一个四元组(k,x,y,z)来定位权重参数中的一个元素,其中,k可以表示该元素位于权重参数的哪个核(即,在数量的维度上的定位),x可以表示该元素位于核k中按照从上到下的次序的哪一行(即,在高度的维度上的定位),y可以表示该元素位于核k中按照从左到右的次序的哪一列(即,在宽度的维度上的定位),并且z可以表示该元素位于核k中按照从前到后的次序的哪个通道上(即,在深度的维度上的定位)。

可以将用于表示权重参数中的元素的四元组(k,x,y,z)或用于表示核k中的元素的三组(x,y,z)中的二元组(x,y)称为权重参数的核k中的一个元素位置,其为在高度和宽度这两个维度上的二维定位。在核k中,元素位置为(x,y)的元素可以对应于在核k中的行号为x并且列号为y的任何一个通道上的元素。由此,核k中的任何一个元素可以通过对应的元素位置和所在通道的通道号来定位。可以将表示元素位置的二元组(x,y)映射成一维数值,并采用该数值来代表元素位置。

为了描述上的方便,在本文中,当提及一个或多个核的一个元素位置处的元素时,元素可以包括在一个或多个核中的每个核中的该元素位置处的所有通道上的所有元素。当提及一个或多个核的一个通道上的元素时,元素可以包括在一个或多个核中的每个核中的该通道上的所有元素。

卷积神经网络中的运算量通道非常大。为了减少卷积神经网络中的运算量,可以对卷积神经网络的权重参数进行稀疏化,即,强制权重参数中的某个或某些元素的值为零,使其成为零值元素。这样,在执行卷积运算的过程中,可以跳过与这些零值元素有关的运算,而只对非零元素(即,值不为零的元素)与特征数据中的对应的数据项执行运算,从而提高有效运算的比率,减小运算量,并提高运算的执行效率。

另外,可以采用紧凑的方式存储经稀疏化的权重参数,即,可以只存储经稀疏化的权重参数中的非零元素,从而能够节省存储空间。

本公开不局限于权重参数的稀疏化方式。例如,在一个实施例中,可以将权重参数的多个核划分成若干分组,并对一个分组中的每个核采用相同的方式进行稀疏化。例如,可以使得非零元素在该分组中的每个核中的分布情况相同,而对不同分组采用不同的方式进行稀疏化。换句话说,分别来自不同分组的任何两个核中的非零元素的分布情况可以不必相同(当然,也可能相同)。

在另一个实施例中,可以使一个核的一个或多个元素位置处的一个或多个通道上的元素为非零元素,并且使该核的另外的一个或多个元素位置处的另外的一个或多个通道上的元素为非零元素。

在另外的实施例中,也可以选择一个核的一个或多个通道,并在所选择的一个或多个通道上,随机地选择一个或多个元素,并且使所选择一个或多个元素为非零元素而在所选择的一个或多个通道上的其他未被选择的元素均为零值元素;并且进一步地,可以选择该核的另外的一个或多个通道,并在所选择的另外的一个或多个通道上,随机地选择一个或多个元素,并且使所选择一个或多个元素为非零元素而在所选择的另外的一个或多个通道上的其他未被选择的元素均为零值元素。

如果一个核的一个元素位置处的元素包括至少一个非零元素,则可以将该元素位置称为非零元素位置。如果一个核的一个通道上的元素包括至少一个非零元素,则可以将该通道称为非零通道。

图1示出卷积神经网络中的一个层的经稀疏化的权重参数的示例。在该示例中,权重参数包括四个核(也被称为权重核或卷积核)k1至k4,k1至k4中的每个核是一个高度、宽度和深度(即,通道数量)分别为3、3和5的数据立方体。

如图1所示,在稀疏化之后,在k1中,只有元素位置为2或(1,2)处的元素和元素位置为9或(3,3)处的元素为非零元素;在k2中,只有通道1和4上的元素为非零元素;在k3中,非零元素位置为2和3,并且非零通道为1至5;在k4中,非零元素位置为1、2、3和9,并且非零通道为1、2、4和5。在图1中,各个核中的非零元素使用具有阴影的方块来表示。

可以在对权重参数进行稀疏化的过程中,针对经稀疏化的权重参数建立非零元素位置列表和/或非零通道列表。在一个实施例中,可以针对权重参数的每个核分别建立非零元素位置列表和/或非零通道列表。在另外的实施例中,如果非零元素在一组核中的每个核中的分布情况相同,则可以针对该组核建立非零元素位置列表和/或非零通道列表。

在图1的示例中,核k1的元素位置2和9为非零元素位置,并且在每个非零元素位置处的所有5个通道上的所有元素均为非零元素。相应地,可以针对k1建立一个非零元素位置列表l1,其中,l1包含两项,分别记录元素位置2和9以及相应的索引值。

核k2的通道1和4为非零通道,并且在每个非零通道上的所有元素均为非零元素。相应地,可以针对k2建立一个非零通道列表l2,其中,l2包含两项,分别记录非零通道1和4以及相应的索引值。

核k3的元素位置2和3为非零元素位置,并且通道1至5均为非零通道。相应地,可以针对k3建立一个非零元素位置列表l3和一个非零通道列表l4,并且可以将l3和l4关联起来,其中,l3包含两项,分别记录非零元素位置2和3,并且l3中的元素位置为2的项目还与l4中的索引值分别为0和1的两个项目相关联,并且l3中的元素位置为3的项目还与l4中的索引值分别为2至4的三个项目相关联。通过将l4中的索引值与l3中的所记录的元素位置相关联,可以根据l4和l3来确定k3中的每个非零元素在k3中的定位。

核k4的元素位置1、2、3和9为非零元素位置,并且通道1、2、4和5为非零通道。相应地,可以针对k4建立一个非零元素位置列表l5和一个非零通道列表l6,并且可以将l5和l6关联起来,其中,l5包含四项,分别记录1、2、3和9这四个非零元素位置,而l6包含四项,分别记录1、2、4和5这四个非零通道。例如,l5中的索引值为0的项目可以与l6中的索引值分别为0和3的两个项目相关联,而l5中的索引值为3的项目可以与l6中的索引值为0的项目相关联。通过将l6中的索引值与l5中的所记录的元素位置相关联,可以根据l6和l5来确定k4中的每个非零元素在k4中的定位。

在另外的示例中,如果除了k1至k4这两个核之外,经稀疏化的权重参数还包括核k5(未示出),并且k5中的非零元素的分布情况与k1中的非元素的分布情况完全相同,则可以针对k1和k5使用同一个非零元素位置列表l1。在另外的示例中,如果除了k1至k4这两个核之外,权重参数还包括核k6(未示出),并且k6中的非零元素的分布情况与k4中的非元素的分布情况完全相同,则可以针对k6和k4使用相同的非零元素位置列表l5和相同的非零通道列表l6。

应当理解,非零元素位置列表和非零通道列表的形式不局限于图1中的示例。在另外的实施例中,可以使非零通道列表中记录的信息与一个或多个核中的非零元素的元素位置相关。例如,如图1所示,可以将l6设置成l7的形式,其中,l7中所记录的信息还与非零元素位置有关。例如,非零元素位置列表和/或非零通道列表还可以包括其他信息。

另外,也可以将非零元素位置列表和非零通道列表合并成一个列表,该列表中的每个项目可以使用例如核的编号、非零元素位置和非零通道这三个值作为索引。

在使用非零元素位置列表和非零通道列表对权重参数中的一个非零元素进行定位时,所需的索引值的总数量(或者非零元素位置列表和非零通道列表的规模)可以取决于核的数量(例如,每个分组中的核的数量)、非零元素位置的数量(例如,每组核的非零元素位置的数量)和非零通道的数量(例如,每组核的非零通道的数量)。另外,如图1所示,取决于针对权重参数所采用的稀疏化方式,可以只设置非零元素位置列表和非零通道列表中的一个。在这样的情况下,所需的索引值的总数量(或者非零元素位置列表和非零通道列表的规模)可以减小,例如可以取决于核的数量和非零元素位置的数量,或者可以取决于核的数量和非零通道的数量。

在另外的实施例中,非零元素的索引也可以采用如下方式:针对每个核,构造与该核大小相同的一个3维数据立方体,其中,该3维数据立方体中的元素的值可以为0或1,0表示对应的核的定位上的元素为零值元素,1表示对应的核的定位上的元素是非零元素。

图2示出根据本公开的实施例的可用于高效地实现经稀疏化的卷积神经网络中的卷积运算的装置的框图。

如图2所示,根据本公开的实施例的装置可以包括选择器200、选择器300和运算器400。

选择器200可以耦接到存储权重参数的存储器110,并且可以从存储器110所存储的数据中选择权重参数的一个或多个核在一个或多个通道上的一个或多个非零元素,并将所选择的一个或多个非零元素提供给运算器400。

选择器300可以耦接到存储特征数据的存储器120,并且可以从存储器120所存储的数据中选择特征数据在与选择器200所选择的一个或多个通道相对应的一个或多个通道上的一个或多个数据项,其中,所选择的每个数据项的数据项位置取决于由选择器200所选择的一个或多个非零元素中的对应的非零元素的元素位置。然后,选择器300可以将所选择的一个或多个数据项位置提供给运算器400。

运算器400接收来自选择器300的每个数据项的值与来自选择器200的对应的非零元素的值相乘,并且将相乘所得到的结果累加。

存储器110和存储器120中的一者或两者可以包括在根据本公开的实施例的装置中,也可以独立于根据本公开的实施例的装置或者设置在根据本公开的实施例的装置的外部,并且可以是磁盘、片外ddr、片内sram、片内寄存器等任何形式的易失性或非易失性存储装置。另外,存储器110和存储器120也可以是在同一个存储器分别针对权重参数和特征数据分配的存储空间,并且这样的存储器也可以是磁盘、片外ddr、片内sram、片内寄存器等任何形式的易失性或非易失性存储装置。另外,在存储器110中,可以采用紧凑的方式来存储权重参数。也就是说,可以在存储器110中只存储权重参数(例如,原始的权重参数或者经稀疏化的权重参数)的非零元素。

图3示出根据本公开的实施例的装置的结构的示例。如图3所示,选择器200可以包括多路选择器215和225以及缓冲存储器220,选择器300可以包括多路选择器315、325、330和335以及缓冲存储器320,并且运算器400可以包括乘法累加器阵列405和其他部件410。另外,根据本公开的实施例的装置还可以包括计数器505、510、515、520和525。

多路选择器215的输入端可以耦接到存储器110,输出端可以耦接到缓冲存储器220,控制端可以耦接到计数器505、510和515的输出端,从而可以在计数器505、510和515所输出的计数值的控制下,从存储器110中选择部分数据并缓存到缓冲存储器220。在一个实施例中,可以并联地设置多个这样的多路选择器215。

多路选择器225的输入端可以耦接到缓冲存储器220。多路选择器225的输出端可以耦接到运算器400中的乘法累加器阵列405。例如,可以将多路选择器225的每个输出端分别耦接到乘法累加器阵列405中的一个或多个乘法累加器的输入端。多路选择器225的控制端可以耦接到计数器525的输出端,从而可以在计数器525所输出的计数值的控制下,从缓冲存储器220中选择部分数据并输出给乘法累加器阵列405。在一个实施例中,可以并联地设置多个这样的多路选择器225。

多路选择器225的数量以及每个多路选择器225的输出端的数量可以取决于乘法累加器阵列405的运算能力。例如,在多路选择器215每次从存储器110中选择出的数据量大于乘法累加器阵列405的实际处理能力时,可以设置缓冲存储器220和一个或多个多路选择器225。例如,可以将多路选择器215每次从存储器110中选择出的部分数据缓存到缓冲存储器220中,然后由多路选择器225将缓冲存储器220中的部分数据分批地提供给乘法累加器阵列405,使得乘法累加器阵列405每次所接收的数据量均在能够处理的数据量的范围之内。例如,假设乘法累加器阵列405包含m个乘法累加器(mac),每次可以进行k个核、c个通道、p个数据点的乘加运算,其中k*c*p=m,则可以根据这些指标来确定乘法累加器阵列405的实际处理能力。

另外,可以选择数据读取延时小于或远小于存储器110的数据读取延时的一个或多个缓冲存储器或者数据读取延时与例如乘法累加器阵列405的处理速度相匹配的一个或多个缓冲存储器作为缓冲存储器220,使得乘法累加器阵列405可以不必停下来等待数据,从而减小数据读取延时对卷积运算的执行效率的影响。

在另外的实施例中,选择器200可以只包括一个或多个多路选择器215,而不必设置缓冲存储器220和/或多路选择器225。在这样的情况下,可以将多路选择器215的输出端直接耦接到乘法累加器阵列405,并且可以将计数器525的输出端耦接到多路选择器215的一个控制端。

多路选择器315的输入端可以耦接到存储器120,输出端可以耦接到缓冲存储器320,控制端可以耦接到计数器510和520的输出端以及多路选择器330的输出端。多路选择器330的输入端耦接到存储非零元素位置列表610的存储器,控制端可以耦接到计数器505的输出端。由此,多路选择器315和330的组合可以在计数器505、510和520所输出的计数值的控制下,根据非零元素位置列表610中的信息,从存储器120中选择部分数据并缓存到缓冲存储器320。在一个实施例中,可以并联地设置多个多路选择器315,并且多路选择器330可以是多选一类型的多路选择器。

多路选择器325的输入端可以耦接到缓冲存储器320。多路选择器325的输出端可以耦接到运算器400中的乘法累加器阵列405。例如,可以将多路选择器325的每个输出端分别耦接到乘法累加器阵列405中的一个乘法累加器的另一个输入端。多路选择器325的控制端可以耦接到多路选择器335的输出端。多路选择器335的输入端可以耦接到存储非零通道列表620的存储器,控制端可以耦接到计数器525的输出端。由此,多路选择器325和335可以在计数器525所输出的计数值的控制下,根据非零通道列表620中的信息,从缓冲存储器320中选择部分数据并输出给乘法累加器阵列405。在一个实施例中,可以并联地设置多个这样的多路选择器325,并且多路选择器335可以是多选一类型的多路选择器。

多路选择器325的数量以及每个多路选择器325的输出端的数量可以取决于乘法累加器阵列405的运算能力。例如,在多路选择器315每次从存储器120中选择出的数据量大于乘法累加器阵列405的实际处理能力时,可以设置缓冲存储器320和一个或多个多路选择器325。例如,可以将多路选择器315每次从存储器120中选择出的部分数据缓存到缓冲存储器320中,然后由多路选择器325将缓冲存储器320中的部分数据分批地提供给乘法累加器阵列405,使得乘法累加器阵列405每次所接收的数据量均在能够处理的数据量的范围之内。

多路选择器215、225、315、325、330和335中的任何一个多路选择器的控制端可以包含一个或多个可编程sram单元(例如,一个或多个寄存器)。在一个实施例中,多路选择器能够根据一个或多个可编程sram单元中存储的内容选择输入端中的一个或多个作为有效输入端,并通过输出端将从有效输入端接收的数据输出。在另外的实施例中,多路选择器能够根据一个或多个可编程sram单元中存储的内容来确定要读取的数据的地址,并从存储器110或120或者缓冲存储器220或320中读取所确定的地址处的数据,并通过输出端输出。另外,多路选择器215、225、315、325、330和335中的任何一个还可以包括逻辑控制电路,用于根据一个或多个可编程sram单元中存储的内容来确定数据的读取地址和/或控制哪些输入端为有效输入端。

另外,可以选择数据读取延时小于或远小于存储器120的数据读取延时的一个或多个缓冲存储器或者数据读取延时与乘法累加器阵列405的处理速度相匹配的一个或多个缓冲存储器作为缓冲存储器320,使得乘法累加器阵列405可以不必停下来等待数据,从而减小数据读取延时对卷积运算的执行效率的影响。

在另外的实施例中,选择器300可以只包括多路选择器315、330和335,而不必设置缓冲存储器320和/或多路选择器325。在这样的情况下,可以将多路选择器315的输出端直接耦接到乘法累加器阵列405,并且可以将多路选择器335的输出端也耦接到多路选择器315的控制端。

在另外的实施例中,也可以采用其他形式的数据选择器或控制器来代替多路选择器330和335,或者也可以采用结构更复杂但处理能力更强的多路选择器来代替多路选择器315、330、335和/或325,并实现315、330、335和/或325的所有功能,从而使选择器300可以只包括一个多路选择器。

用于存储非零元素位置列表610和非零通道列表620的存储器和可以是与存储器110或120相同的存储器,也可以与存储器110或120不同的存储装置。

运算器400还可以包括其他部件410,例如,可以用于执行激活、量化等与卷积运算有关的其他操作。

计数器505可以用作非零元素位置计数器。在一个实施例中,如果一组核中的每个核中的非零元素的分布情况相同,并且该组核中的任何一个核具有n个非零元素位置,则可以将计数器505的计数值的上限设置为n-1,并且使计数器505从0至n-1循环计数。在另一个实施例中,可以将一组核中的每个核中的所有元素位置均视为非零元素位置,在这样的情况下,例如,对于高度和宽度分别为3和3的核,可以将计数器505的计数值的上限设置为8(3*3-1=8),并且使计数器505从0至8循环计数。

多路选择器215的一个控制端接收来自计数器505的当前计数值,并且根据计数器505的当前计数值,从存储器110中选择与计数器505的当前计数值相对应的一个或多个非零元素。

例如,假设权重参数的一组核包含图1所示的示例中的核k1和在图1中未示出的核k5,其中,k5中的非零元素的分布情况与k1完全相同,则对于包括k1和k5这两个核的分组,计数器505可以从0到1(k1或k5有两个非零元素位置2和9)循环计数。响应于计数器505的当前计数值0,多路选择器215可以从存储器110中选择k1中元素位置为2的所有5个通道上的5个非零元素以及k5中元素位置为2的所有5个通道上的5个非零元素(例如,参见图1中的l1),并且可以将所选择的10个非零元素缓存在缓冲存储器220中。当计数器505的当前计数值为1时,多路选择器215可以从存储器110中选择k1中元素位置为9的所有5个通道上的5个非零元素以及k5中元素位置为9的所有5个通道上的5个非零元素(例如,参见图1中的l1),并且可以将所选择的10个非零元素缓存在缓冲存储器220中。

例如,假设权重参数的另一组核包含图1所示的示例中的核k2和一个未在图1中示出的核k6,其中,k6中的非零元素的分布情况与k2完全相同,则对于包括k2和k6这两个核的分组,计数器505可以从0到8(k2或k6有9个非零元素位置1至9)循环计数。响应于计数器505的当前计数值5,多路选择器215可以从存储器110中选择k2中元素位置为5的2个非零通道上的2个非零元素以及k6中元素位置为5的2个非零通道上的2个非零元素,并且可以将所选择的10个非零元素缓存在缓冲存储器220中。当计数器505的当前计数值为7时,多路选择器215可以从存储器110中选择k2中元素位置为7的2个非零通道上的2个非零元素以及k6中元素位置为7的2个非零通道上的2个非零元素,并且可以将所选择的10个非零元素缓存在缓冲存储器220中。

如图3所示,计数器505的当前计数值还同时提供到多路选择器330的控制端。多路选择器330可以根据计数器505的当前计数值,从非零元素位置列表610中查找与计数器505的当前计数值相对应的非零元素位置,并将查找结果提供给多路选择器315的一个控制端。多路选择器315可以根据在控制端所接收到的关于非零元素位置的信息,来确定一个或多个数据项位置,并且从存储器120中选择特征数据的位于所确定的一个或多个数据位置处的一个或多个通道上的数据项。

例如,对于图1中的k3,计数器505可以从0到1循环计数(k3的非零元素位置有2个,即2和3)。当计数器505的当前计数值为1时,多路选择器215从存储器110中选择k3在元素位置为3的3个非零通道(通道3至5)上的3个非零元素。与此同时,多路选择器330可以使用计数器505的当前计数值作为索引值,从非零元素位置列表l3中检索或选择出索引值为1的项目,即,非零元素位置为3的项目(参见图1中的l3),然后将该项目或者所检索出的元素位置3提供到多路选择器315的一个控制端。假设在执行卷积运算时,k3在宽度方向上的步长为2,并且对特征数据不做任何填充,则多路选择器315(例如,多路选择器315中的逻辑控制电路)可以根据卷积运算中的这些信息确定出与元素位置3相对应的一个或多个数据项位置,例如(1,3)、(1,5)、(1,7)。然后,多路选择器315可以从存储器120中选择数据项位置为(1,3)的所有5个通道上的5个数据项、数据项位置为(1,5)的所有5个通道上的5个数据项以及数据项位置为(1,7)的所有5个通道上的5个数据项,并可以将所选择出的15个数据项缓存到缓冲存储器320中。

计数器510可以用作通道分组计数器。可以将特征数据和每个核的所有通道划分一个或多个分组,每个分组包括可以一个或多个通道。在一个实施例中,可以根据多路选择器215和/或315的选择能力(例如,输入端的数量)来划分通道。如果分组的数量为c,则可以将计数器510的计数值的上限设置为c-1,并且可以使计数器510从0至c-1循环计数。

多路选择器215的一个控制端接收来自计数器510的当前计数值,并且根据计数器510的当前计数值,从存储器110中选择与计数器510的当前计数值相对应的一个或多个通道上的一个或多个非零元素。与此同时,多路选择器315的一个控制端也接收来自计数器510的当前计数值,并且根据计数器510的当前计数值,从存储器120中选择与计数器510的当前计数值相对应的一个或多个通道上的一个或多个数据项。

例如,假设在图1的示例中,5个通道被划分成2个分组,与计数器510的计数值0相对应的通道分组包括通道1至3,并且与计数器510的计数值1相对应的通道分组包括通道4和5,则计数器510可以从0至1循环计数。

在该示例中,对于图1中的k3和k4,当计数器510的当前计数值为0时,多路选择器215可以选择k3在通道1至3上的所有非零元素,即(k3,1,2,1)、(k3,1,2,2)和(k3,1,3,3),并且可以选择k4在通道1至3上的所有非零元素,即(k4,1,1,1)、(k3,1,3,2)和(k3,3,3,1)。然后,可以将所选择的6个非零元素缓存到缓冲存储器220中。与此同时,多路选择器315可以选择在通道1至3上的所有数据项,并将所选择的所有数据项缓存到缓冲存储器320中。

计数器515可以用作核分组计数器。在一个实施例中,假设运算器400(例如,乘法累加器阵列405)在每次运算中可以处理k个核的卷积运算,则可以将每一层的权重参数的所有核划分成一个或多个分组,每个分组包括至多k个核,并且分组的数量为g’。这样,可以将计数器515的计数值的上限设置为g’-1,并且使计数器515从0至g’-1循环计数。在另外的实施例中,也可以根据稀疏化的方式或者设计需求对核进行分组。

计数器515的当前计数值可以提供到多路选择器215的一个控制端。多路选择器215可以根据计数器515的当前计数值,从存储器110中选择与计数器515的当前计数值相对应的核分组中的所有核的所有非零元素。

例如,假设在图1的示例中,将核k1至k4划分成两个分组,与计数器515的计数值0相对应的分组包括k1和k2,与计数器515的计数值1相对应的分组包括k3和k4,则当计数器515的当前计数值为1时,多路选择器215可以从存储器110中选择k3中的5个非零元素(图1中的k3中的带有阴影的块)以及k4中的5个非零元素(图1中的k4中的带有阴影的块),并且可以将所选择的10个非零元素缓存到缓冲存储器220中。

计数器520可以用作输出点分组计数器。对于一个设计好的卷积神经网络,给定一个输入特征数据,可以事先知道或计算出每层的输出特征数据中的数据项的数量。例如,对于图1中的示例,在对输入特征数据中的每45(3*3*5=45)个数据项执行卷积运算后,可以得到输出特征数据中的一个数据项。换句话说,输出特征数据中的任何一个数据项均是对输入特征数据的h*w*d个数据项与一个核中的h*w*d个执行乘加运算所获得的,其中,h表示每个核的高度(即,行数),w表示每个核的宽度(即,列数),d表示每个核的深度(即,通道数)。假设运算器400(例如,乘法累加器阵列405)每次能够支持关于输出特征数据中的p个数据项的计算,则可以根据该处理能力将输出特征数据中的数据项划分成一个或多个分组,每个分组可以包括至多p个数据项,并且分组的数量为g。这样,可以将计数器520的计数值的上限设置为g-1,并且使计数器520从0至g-1循环计数。在另外的实施例中,也可以例如并行度需求等来确定对输入特征数据中的数据项的分组方式。

计数器520的当前计数值可以提供到多路选择器315的一个控制端。多路选择器315可以根据计数器520的当前计数值,从存储器120中选择一个或多个数据项,其中,输出特征数据中与计数器520的当前计数值相对应的数据项分组中的数据项是根据所选择的一个或多个数据项计算得出的。

例如,假设在图1的示例中,每个核在宽度方向上滑动的步长为2,在卷积运算时对存储器120中的输入特征数据不做任何填充,并且计数器520的计数值0对应于输出特征数据中的数据项(1,1,1)、(1,1,2)、(1,1,3)、(1,1,4)、(1,2,1)、(1,2,2)、(1,2,3)和(1,2,4),计数器520的计数值1对应于输出特征数据中的数据项(1,3,1)、(1,3,2)、(1,3,3)、(1,3,4)、(1,4,1)、(1,4,2)、(1,4,3)和(1,4,4),则当计数器520的当前计数值为1时,多路选择器315可以从存储器120中选择输入特征数据在数据项位置分别为(1,5)、(2,5)、(3,5)、(1,6)、(2,6)、(3,6)、(1,7)、(2,7)、(3,7)、(1,8)、(2,8)、(3,8)、(1,9)、(2,9)和(3,9)处的所有数据项,并将所选择的75个(15*5=75)数据项缓存到缓冲存储器320中。

计数器525可以用作非零通道分组计数器。在一个实施例中,可以将权重参数的所有非零通道划分成一个或多个分组,每个分组可以包括一个或多个非零通道。在另一个实施例中,可以根据例如乘法累加器阵列405的处理能力对一个层的权重参数的所有非零通道进行分组。在另外的实施例中,计数器525可以与计数器510协作。例如,可以将与计数器510的每个计数值相对应的通道分组中的非零通道划分成一个或多个非零通道分组,即,可以将缓冲存储器220中的非零元素所对应的所有非零通道划分成一个或多个非零通道分组。在该实施例中,多路选择器335的控制端还可以接收来自计数器510的当前计数值。如果非零通道分组的数量为c’,则可以将计数器525的计数值的上限设置为c’-1,并且可以使计数器525从0至c’-1循环计数。

多路选择器225可以通过其控制端接收来自计数器525的当前计数值,并且可以根据计数器525的当前计数值,从缓冲存储器220中选择与计数器525的当前计数值相对应的一个或多个非零通道上的一个或多个非零元素,然后将所选择的一个或多个非零元素输出给乘法累加器阵列。

多路选择器335可以通过其控制端接收来自计数器525的当前计数值,并且可以根据计数器525的当前计数值,从非零通道列表620中选择与计数器525的当前计数值相对应的一个或多个非零通道,并将所选择的一个或多个非零通道提供到多路选择器325的控制端。然后,多路选择器325可以根据在其控制端接收到的关于一个或多个非零通道的控制信息,从缓冲器320中选择在所选择的一个或多个非零通道上的一个或多个数据项。由此,可以从缓冲器320中选择与由多路选择器225所选择的一个或多个非零元素相对应的一个或多个数据项。然后,多路选择器325可以将所选择的一个或多个数据项输出给乘法累加器阵列405,使得乘法累加器阵列405中的每个乘法累加器可以使用每对非零元素和数据项作为输入,并执行乘法运算,然后将针对每对非零元素和数据项的加法结果进行累加。

在一个实施例中,多路选择器335对非零通道列表620的检索/选择还可以结合计数器525的当前计数值或多路选择器330的输出。例如,可以将多路选择器330的输出端耦接到多路选择器335的控制端,或者可以将计数器505的输出耦接到多路选择器335的控制端。

借助于计数器525和非零通道列表620,选择器300能够选择出最终的与选择器200所选择出的一个或多个非零元素相对应的一个或多个数据项;另一方面,还能够将选择器200和选择器300每次提供给乘法累加器阵列405的数据量控制在乘法累加器阵列405的处理能力范围内。

根据本公开的实施例的装置可以包括计数器505、510、515、520和525中的一个。例如,在只处理以逐点稀疏的方式处理的神经网络的情况下,可以只包括计数器505,并且可以不设置多路选择器335和非零通道列表620。在另外的实施例中,根据本公开的实施例的装置可以包括计数器505、510、515、520和525中的多个。在包括所有的计数器505、510、515、520和525的情况下,根据本公开的实施例的装置能够处理以任何方式稀疏化的卷积神经网络的运算。

在包括计数器505、510、515、520和525中的多个(例如,全部)的情况下,可以通过设置各个计数器的计数值的上限,来控制各个计数器是否实际地发挥作用。例如,针对图1的示例中的核,如果将计数器505的计数值的上限设置为8,则多路选择器215和/或多路选择器330实际上会选择每个核中的所有元素位置,而不仅仅是非零元素位置。

在使用计数器505、510、515、520和525中的多个的情况下,选择器200和选择器300的选择结果相当于在单独使用其中的一个计数器的情况下的选择结果的交集。例如,在单独使用计数器505的情况下选择器200的选择结果为a,在单独使用计数器510的情况下选择器200的选择结果为b,则在同时使用计数器505和计数器510的情况下选择器200的选择结果为a和b的交集。

例如,假设在图1的示例中,所有的5个通道被划分成2个分组,其中,该层的四个核k1至k4被划分成4个分组,即,每个核作为一个分组;通道1至3在一个通道分组中,通道4和5在另一个通道分组中,并且将每个通道分组的每个非零通道作为一个非零通道分组;每个核在宽度方向上的步长为2;在卷积运算时对存储器110中的输入特征数据不做任何填充;输出特征数据中的每连续的两个数据项位置处的所有通道上的数据项为一组。

当计数器505、510、515和520的当前计数值分别为1、0、2和1时,多路选择器215可以从存储器110中选择出核k3(对应于计数器515的当前计数值2)中的元素位置为3(对应于计数器505的当前计数值1,参见图1中的l3)的在通道1至3中的非零元素(k3,1,3,3),并将其缓存在缓冲存储器220中。

多路选择器330根据计数器505的当前计数值1从非零元素位置列表610中选择出在例如图1中的l3中索引值为1的项目,从而确定非零元素位置为3,并将该信息提供给多路选择器315的控制端。

进一步地,多路选择器315从存储器120中的数据项位置分别为(1,5)、(2,5)、(3,5)、(1,6)、(2,6)、(3,6)、(1,7)、(2,7)、(3,7)、(1,8)、(2,8)、(3,8)、(1,9)、(2,9)和(3,9)的所有数据项(输出特征数据中的对应的数据项与计数器520的当前计数值1相对应)中选择出数据项位置分别为(1,7)、(2,7)、(3,7)、(1,9)、(2,9)和(3,9)(这些数据项位置与非零元素位置3相对应)的在通道1至3(对应于计数器510的当前计数值0)上的所有数据项(1,7,1)、(1,7,2)、(1,7,3)、(2,7,1)、(2,7,2)、(2,7,3)、(3,7,1)、(3,7,2)、(3,7,3)、(1,9,1)、(1,9,2)、(1,9,3)、(2,9,1)、(2,9,2)、(2,9,3)、(3,9,1)、(3,9,2)和(3,9,3)。

对应于缓冲存储器220中的非零元素(k3,1,3,3),计数器525的当前计数值为0。相应地,多路选择器225可以从缓冲存储器220中的数据中选择出非零元素(k3,1,3,3)。多路选择器335根据计数器525的当前计数值确定索引值(例如,如前文所述,可以结合计数器510的当前计数值),并检索非零通道列表620,例如图1中的与非零元素位置列表l3相关联的非零通道列表l4,并且多路选择器325从缓存在缓冲存储器320中的数据项(1,7,1)、(1,7,2)、(1,7,3)、(2,7,1)、(2,7,2)、(2,7,3)、(3,7,1)、(3,7,2)、(3,7,3)、(1,9,1)、(1,9,2)、(1,9,3)、(2,9,1)、(2,9,2)、(2,9,3)、(3,9,1)、(3,9,2)和(3,9,3)中选择出(1,7,3)、(2,7,3)、(3,7,3)、(1,9,3)、(2,9,3)和(3,9,3)。

乘法累加器阵列405中的每个乘法累加器可以接收来自多路选择器325的每个数据项和来自多路选择器225的对应的非零元素,以执行运算。例如,乘法累加器阵列405中的一组乘法累加器中的一个乘法累加器可以接收来自多路选择器225的非零元素(k3,1,3,3)和来自多路选择器325的数据项(1,7,3)作为输入并执行乘法运算;该组乘法累加器中的另一个乘法累加器可以接收来自多路选择器225的非零元素(k3,1,3,3)和来自多路选择器325的数据项(2,7,3)作为输入,执行乘法运算并与前一个乘法累加器的运算结果进行累加;并且该组乘法累加器中的又一个乘法累加器可以接收来自多路选择器225的非零元素(k3,1,3,3)和来自多路选择器325的数据项(3,7,3)作为输入,执行乘法运算并与前一个乘法累加器的运算结果进行累加。

在一个实施例中,计数器505、510、515、520和525中的每一个可以是一个寄存器,其中存储计数值。另外,根据该实施例的装置还可以包括定时控制器(未示出),用于对各个计数器的计数进行定时。例如,可以使计数器505在计数器515的每个当前计数值的期间循环计数,也可以使计数器515在计数器505的每个当前计数值的期间循环计数。例如,还可以使计数器510在计数器505的每个当前计数值的期间循环计数,并且使计数器525在计数器505的每个当前计数值的期间循环计数。取决于各个计数器的计数定时的不同方式,每次提供给乘法累加器阵列405的输入数据可以不同,但是最终得到的卷积运算的结果是相同的。

以上描述了根据本公开的实施例的装置。然而,应当理解,上述实施例仅是示例性的,而非限制性的。根据本公开的实施例的装置还可以具有其他部件和/或结构。

除非上下文清楚地另有要求,否则贯穿说明书和权利要求书,措词“包括”、“包含”等应当以与排他性或穷尽性的意义相反的包括性的意义来解释,也就是说,应当以“包括但不限于”的意义来解释。另外,措词“在本文中”、“上文”、“下文”以及相似含义的措词在本申请中使用时应当指作为整体的本申请,而不是本申请的任何具体部分。在上下文允许时,在使用单数或复数的以上描述中的措词也可以分别包括复数或单数。关于在提及两个或多个项目的列表时的措词“或”,该措词涵盖该措词的以下解释中的全部:列表中的任何项目,列表中的所有项目,以及列表中的项目的任何组合。

虽然已经描述了本公开的一些实施例,但是这些实施例仅作为示例而呈现,而不打算限制本公开的范围。实际上,在本文中所描述的方法和系统可以采用多种其他形式来实施。另外,可以在不脱离本公开的范围的情况下,在本文中所描述的方法和系统的形式上做出各种省略、替换和改变。

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