压缩系数集以供随后在神经网络中使用的制作方法

文档序号:30520655发布日期:2022-06-25 04:48阅读:94来源:国知局
压缩系数集以供随后在神经网络中使用的制作方法

1.本公开涉及计算机实现的神经网络。具体地,本公开涉及在计算机实现的神经网络中应用稀疏性。


背景技术:

2.神经网络可用于机器学习应用程序。具体地,神经网络可用于信号处理应用程序,包括图像处理应用程序和计算机视觉应用程序。例如,卷积神经网络(cnn)是通常应用于分析图像数据的一类神经网络,例如用于图像分类应用程序、语义图像分割应用程序、超级解析应用程序、对象检测应用程序,等等。
3.在图像分类应用程序中,表示一个或多个图像的图像数据可以被输入到神经网络,并且所述神经网络的输出可以为指示这些图像中的每一个图像属于特定分类(或分类集合)的概率(或概率集合)的数据。神经网络通常包括输入层和输出层之间的多个层。在一个层中,系数集可以与所述层的数据输入进行组合。卷积层和全连接层为神经网络层的示例,其中系数集与这些层的数据输入进行组合。神经网络还可包括其他类型的层,这些层未被配置为将系数集与那些层(诸如激活层和对应元素层)的数据输入进行组合。在图像分类应用程序中,在层中执行的计算使得能够识别输入数据的特性特征,并且能够对输入数据所属的分类(或分类集合)进行预测。
4.通常对神经网络进行训练以通过使用训练数据来提高其输出的准确性。在图像分类示例中,训练数据可包括表示一个或多个图像的数据以及这些图像中的每一个图像的相应的预先确定的标签。训练神经网络可以包括使用未经训练或部分训练的系数集对训练输入数据操作神经网络,以便形成训练输出数据。例如,可以使用损失函数来评估训练输出数据的准确性。可以根据训练输出数据的准确性通过称为梯度下降和反向传播的过程来更新系数集。例如,可以根据使用损失函数确定的训练输出数据的损失来更新系数集。
5.在典型神经网络内使用的系数集可被高度参数化。也就是说,在典型神经网络内使用的系数集通常包括大量的非零系数。高度参数化的系数集可具有大的存储器占用。从存储器读取高度参数化的系数集所需的存储器带宽可能很大。高度参数化的系数集还可能使神经网络承受大量的计算需求,例如通过要求神经网络在系数和输入值之间执行大量的计算(例如,乘法)。因此,可能难以在具有有限的处理或存储器资源的装置上实现神经网络。


技术实现要素:

6.提供本发明内容是为了以简化的形式介绍下文在具体实施方式中进一步描述的一系列概念。本发明内容不旨在标识所要求保护的主题的关键特征或必要特征,也不旨在用于限制所要求保护的主题的范围。
7.根据本发明的第一方面,提供了一种压缩系数集以供随后在神经网络中使用的方法,该方法包括:将稀疏性应用于多个系数组,每一组包括预定义的多个系数;以及根据与
系数组配准的压缩方案来压缩系数组,以便通过整数个一个或多个压缩值来表示每个系数组。
8.每一组可以包括系数集的一个或多个系数子集,每一组可以包括n个系数并且每个子集可以包括m个系数,其中m大于1并且n为m的整数倍,并且该方法还可以包括:通过压缩每一组所包括的一个或多个系数子集,根据压缩方案来压缩系数组,以便通过整数个一个或多个压缩值来表示每个系数子集。
9.n可大于m,并且可以通过压缩多个相邻或交织的系数子集来压缩每个系数组。
10.n可以等于可以等于2m。
11.每一组可以包括16个系数,并且每个子集可以包括8个系数,并且每一组可以通过压缩两个相邻或交织的系数子集来压缩。
12.n可以等于m。
13.向系数组应用稀疏性可包括将所述组中的每个系数设置为零。
14.可以根据稀疏性掩码将稀疏性应用于所述多个系数组,该稀疏性掩码限定要对系数集中的哪些系数应用稀疏性。
15.系数集可以为系数张量,稀疏性掩码可以为与系数张量具有相同维度的二进制张量,并且可以通过执行系数张量与稀疏性掩码张量的逐元素乘法来应用稀疏性。二进制张量可以是由二进制1和/或0组成的张量。
16.可以通过以下操作形成稀疏性掩码张量:生成具有一个或多个维度的归约张量,系数张量的维度为该一个或多个维度的整数倍,其中该整数大于1;确定待应用稀疏性的归约张量的元素,以便生成归约的稀疏性掩码张量;以及扩展归约的稀疏性掩码张量以便生成与系数张量相同维度的稀疏性掩码张量。
17.生成归约张量可以包括:将系数张量分成多个系数组,使得集中的每个系数仅分配给一个组,并且所有系数都分配给组;以及用所述组内的最大系数值表示系数张量的每个系数组。
18.该方法还可以包括通过执行最近邻上采样来扩展归约的稀疏性掩码张量,使得归约的稀疏性掩码张量中的每个值由包括稀疏性掩码张量中的多个相同值的组表示。
19.压缩每个系数子集可以包括:生成包括h位的标头数据和各自包括b位的多个主体部分,其中主体部分中的每一个主体部分对应于子集中的系数,其中b固定在子集内并且其中子集的标头数据包括所述子集的主体部分的b的指示;
20.该方法还可以包括:通过在子集中的所有系数中定位最高有效前导一的位位置来识别主体部分大小b;生成包括编码主体部分大小的位序列的标头数据;以及通过从每个系数中移除无、一个或多个前导零,为子集中的每个系数生成包括b位的主体部分。
21.可根据稀疏性参数来确定需要应用稀疏性的组的数量。
22.该方法还可以包括:将系数集分成多个系数组,使得集中的每个系数仅分配给一个组,并且所有系数分配给一个组;确定每个系数组的显著性;以及将稀疏性应用于具有低于阈值的显著性的系数组,根据稀疏性参数来确定阈值。
23.阈值可以为最大绝对系数值或平均绝对系数值。
24.该方法还可以包括将压缩的系数组存储到存储器以供随后在神经网络中使用。
25.该方法还可以包括使用神经网络中的压缩的系数组。
26.根据本发明的第二方面,提供了一种用于压缩系数集以供随后在神经网络中使用的数据处理系统,该数据处理系统包括:修剪逻辑,该修剪逻辑被配置为向系数组应用稀疏性,每一组包括预定义的多个系数;以及压缩引擎,该压缩引擎被配置为根据与系数组配准的压缩方案来压缩系数组,以便通过整数个一个或多个压缩值来表示每个系数组。
27.根据本发明的第三方面,提供了一种训练神经网络的计算机实现的方法,该神经网络包括多个层,每一层被配置为将相应的一组滤波器与对层的数据输入进行组合,以便形成层的输出数据,其中每一组滤波器包括多个系数信道,滤波器集合的每一个系数信道对应于对层的数据输入中的相应的数据信道,并且输出数据包括多个数据信道,每个数据信道对应于滤波器集合的相应的滤波器,该方法包括:识别层的滤波器集合的目标系数信道;识别对层的数据输入中的多个数据信道中的目标数据信道,目标数据信道对应于滤波器集合的目标系数信道;以及配置神经网络的运行时实现方式,其中前一层的滤波器集合不包括对应于目标数据信道的所述滤波器。
28.层的数据输入可取决于前一层的输出数据。
29.该方法还可以包括配置神经网络的运行时实现方式,其中前一层的滤波器集合不包括对应于目标数据信道的滤波器,使得,当在数据处理系统上执行神经网络的运行时实现方式时,将前一层的滤波器集合与对前一层的数据输入进行组合,不会在对应于目标数据信道的前一层的输出数据中形成数据信道。
30.该方法还可以包括配置神经网络的运行时实现方式,其中层的滤波器集合中的每一个滤波器不包括目标系数信道。
31.该方法还可以包括在数据处理系统上执行神经网络的运行时实现方式。
32.该方法还可以包括将前一层不包括对应于目标数据信道的滤波器的滤波器集合存储在存储器中,以供神经网络的运行时实现方式的随后使用。
33.层的滤波器集合可以包括系数集,该系数集被布置成使得滤波器集合中的每一个滤波器包括系数集中的多个系数。
34.层的滤波器集合中的每一个滤波器可包括不同的多个系数。
35.层的滤波器集合中的两个或更多个滤波器可包括相同的多个系数。
36.该方法还可以包括根据稀疏性参数识别目标系数信道,该稀疏性参数指示待应用于层的滤波器集合的稀疏性水平。
37.稀疏性参数可以指示待设置为零的系数集的百分比。
38.识别目标系数信道可包括应用稀疏性算法,以便将由层的滤波器集合的系数信道包括的所有系数设置为零,并且将所述系数信道识别为滤波器集合的目标系数信道。
39.该方法还可以包括,在识别目标系数信道之前:使用层的滤波器集合对训练输入数据操作神经网络的测试实现方式,以便形成训练输出数据;根据该训练输出数据,评估神经网络的测试实现方式的准确性;以及根据神经网络的准确性来形成稀疏性参数。
40.该方法还可以包括:识别目标系数信道、迭代地进行以下操作:根据稀疏性参数将稀疏性算法应用于层的滤波器集合的系数信道;使用用于层的滤波器集合对训练输入数据操作神经网络的测试实现方式,以便形成训练输出数据;根据该训练输出数据,评估神经网络的测试实现方式的准确性;以及根据神经网络的准确性来形成更新的稀疏性参数。
41.该方法还可以包括根据参数优化技术来形成稀疏性参数,该参数优化技术被配置
为平衡待应用于滤波器集合的稀疏性水平,如稀疏性参数与网络的准确性的关系所示。
42.根据本发明的第四方面,提供了一种用于训练神经网络的数据处理系统,该神经网络包括多个层,每一层被配置为将相应的一组滤波器与对层的数据输入进行组合,以便形成层的输出数据,其中每一组滤波器包括多个系数信道,滤波器集合的每一个系数信道对应于对层的数据输入中的相应的数据信道,并且输出数据包括多个数据信道,每个数据信道对应于滤波器集合的相应的滤波器,数据处理系统包括系数识别逻辑,该系数识别逻辑被配置为:识别滤波器集合的目标系数信道;并且识别对层的数据输入中的多个数据信道的目标数据信道,目标数据信道对应于滤波器集合的目标系数信道;并且其中该数据处理系统被布置成配置神经网络的运行时实现方式,其中前一层的滤波器集合不包括对应于目标数据信道的滤波器。
43.根据本发明的第五方面,提供了一种计算机实现的训练神经网络的方法,该神经网络被配置为将系数集与相应的输入数据值进行组合,该方法包括:为了训练神经网络的测试实现方式:根据稀疏性参数将稀疏性应用于系数中的一个或多个系数,该稀疏性参数指示待应用于系数集的稀疏性水平;使用系数对训练输入数据操作神经网络的测试实现方式,以便形成训练输出数据;根据该训练输出数据,评估神经网络的准确性;以及根据神经网络的准确性来更新稀疏性参数;以及根据更新的稀疏性参数来配置神经网络的运行时实现方式。
44.该方法还可以包括迭代地执行应用、运算、形成和更新步骤,以便训练神经网络的测试实现方式。
45.该方法还可以包括根据神经网络的准确性迭代地更新系数集。
46.该方法还可以包括根据更新的稀疏性参数来实现神经网络。
47.将稀疏性应用于系数可包括将该系数设置为零。
48.可以通过将训练输出数据与训练输入数据的验证的输出数据进行比较来评估神经网络的准确性。
49.该方法还可以包括在将稀疏性应用于一个或多个系数之前,使用系数对训练输入数据操作神经网络的测试实现方式,以便形成验证的输出数据。
50.该方法还可以包括使用取决于训练输出数据和验证的输出数据的交叉熵损失方程来评估神经网络的准确性。
51.该方法还可以包括根据参数优化技术来更新稀疏性参数,该参数优化技术被配置为平衡待应用于系数集的稀疏性水平,如稀疏性参数与网络的准确性的关系所示。
52.参数优化技术可以使用取决于稀疏性参数和神经网络的准确性的交叉熵损失方程。
53.可以进一步根据加权值来执行对稀疏性参数的更新,该加权值被配置为使神经网络的测试实现方式倾向于保持网络的准确性或者提高应用于系数集的稀疏性水平,如稀疏性参数所指示。
54.更新稀疏性参数可以进一步根据待由稀疏性参数指示的定义的最大稀疏性水平来执行。
55.神经网络可包括多个层,每一层被配置为将相应的系数集与所述层的相应的输入数据值进行组合,以便形成所述层的输出。
56.该方法还可以包括迭代地更新每一层的相应的稀疏性参数。
57.神经网络的每一层的系数集中的系数的数量在层与层之间可以变化,并且可以根据每个系数组中的系数数量来进一步更新稀疏性参数,使得神经网络的测试实现方式倾向于更新相应的稀疏性参数,以便指示待应用于系数集的更高水平的稀疏性,相对于包括较少系数的系数集,该系数集包括较多的系数。
58.稀疏性参数可以指示待应用稀疏性的系数集的百分比。
59.应用稀疏性可以包括向系数组应用稀疏性,每一组包括预定义的多个系数。
60.向系数组应用稀疏性可包括将所述组中的每个系数设置为零。
61.配置神经网络的运行时实现方式可包括:根据更新的稀疏性参数向系数组应用稀疏性;根据与系数组配准的压缩方案来压缩系数组,以便用整数个一个或多个压缩值来表示每个系数组;将压缩的系数组存储在存储器中以供随后由实现的神经网络使用。
62.每一组可以包括系数集的一个或多个系数子集,每一组可以包括n个系数并且每个子集可以包括m个系数,其中m大于1并且n为m的整数倍,该方法还可以包括:通过压缩每一组所包括的一个或多个系数子集,根据压缩方案来压缩系数组,以便通过整数个一个或多个压缩值来表示每个系数子集。
63.应用稀疏性可包括使用可微函数对系数集进行建模,以便根据稀疏性参数来识别阈值,以及根据所述阈值来应用稀疏性,使得可以通过使用可微函数来反向传播一个或多个梯度向量来修改阈值值来更新稀疏性参数。
64.根据本发明的第六方面,提供了用于训练神经网络的数据处理系统,该神经网络被配置为将系数集与相应的输入数据值进行组合,该数据处理系统包括:修剪逻辑,该修剪逻辑被配置为根据稀疏性参数将稀疏性应用于系数中的一个或多个系数,该稀疏性参数指示待应用于系数集的稀疏性水平;神经网络的测试实现方式,该神经网络的测试实现方式被配置为使用系数对训练输入数据进行运算,以便形成训练输出数据;网络准确性逻辑,该网络准确性逻辑被配置为根据该训练输出数据来评估神经网络的准确性;以及稀疏性学习逻辑,该稀疏性学习逻辑被配置为根据神经网络的准确性来更新稀疏性参数;并且其中数据处理系统被布置为根据更新的稀疏性参数来配置神经网络的运行时实现方式。
65.数据处理系统可以在集成电路上的硬件中体现。可以提供一种在集成电路制造系统处制造数据处理系统的方法。可以提供一种集成电路定义数据集,该集成电路定义数据集当在集成电路制造系统中被处理时,将系统配置为制造数据处理系统。可以提供一种非暂时性计算机可读存储介质,该非暂时性计算机可读存储介质上存储有数据处理系统的计算机可读描述,该计算机可读描述在集成电路制造系统中处理时,使集成电路制造系统制造体现数据处理系统的集成电路。
66.可以提供一种集成电路制造系统,该集成电路制造系统包括:非暂时性计算机可读存储介质,在其上存储有数据处理系统的计算机可读描述;布局处理系统,该布局处理系统被配置为处理计算机可读描述以便生成体现数据处理系统的集成电路的电路布局描述;以及集成电路生成系统,该集成电路生成系统被配置为根据电路布局描述来制造数据处理系统。
67.可以提供用于执行本文所述的任一种方法的计算机程序代码。可以提供非暂时性计算机可读存储介质,所述非暂时性计算机可读存储介质上存储有计算机可读指令,所述
计算机可读指令在计算机系统处执行时使计算机系统执行本文所述的任一种方法。
68.如对本领域的技术人员显而易见的,上述特征可以适当地组合,并且可以与本文所述的示例的任何方面组合。
附图说明
69.现在将参考附图详细描述示例,在附图中:
70.图1示出了神经网络的示例性实现方式。
71.图2a示出了神经网络的卷积层中使用的数据结构的示例。
72.图2b示意性地示出了卷积层,该卷积层被布置成将系数集与输入数据进行组合,以便形成输出数据。
73.图3a示出了根据压缩方案的示例性系数的压缩。
74.图3b示出了根据压缩方案的稀疏的系数子集的压缩。
75.图4示出了根据本文所述原理配置的图形处理系统。
76.图5示出了根据本文所述的原理实现用于压缩系数集以供随后在神经网络中使用的数据处理系统。
77.图6示出了根据本文所述的原理压缩系数集以供随后在神经网络中使用的方法。
78.图7a示出了用于应用非结构化稀疏性的示例性修剪逻辑。
79.图7b示出了用于应用结构化稀疏性的示例性修剪逻辑。
80.图7c示出了用于应用非结构化稀疏性的替代的示例性修剪逻辑。
81.图7d示出了用于应用结构化稀疏性的替代的示例性修剪逻辑。
82.图8是示出结构化稀疏性的示例性应用的示意图。
83.图9示出了数据处理系统,该数据处理系统根据本文所述的原理实现用于通过训练来学习稀疏性参数的神经网络的测试实现方式。
84.图10示出了通过根据本文所述的原理训练神经网络来学习稀疏性参数的方法。
85.图11a示出了根据本文所述的原理在卷积层中的信道修剪的示例性应用程序。
86.图11b示出了根据本文所述的原理的全连接层中的信道修剪的示例性应用程序。
87.图12示出了根据本文所述的原理使用信道修剪训练神经网络的方法。
88.图13示出用于生成体现图形处理系统的集成电路制造系统。
89.图14a示出了系数集中的非结构化稀疏性的示例。
90.图14b至图14d示出了结构化稀疏性系数集的示例。
91.附图示出了各种示例。技术人员将理解,附图中所示的元素边界(例如,框、框的组,或其它形状)表示边界的一个示例。在一些示例中,情况可能是一个元素可以被设计为多个元素,或者多个元素可以被设计为一个元素。在适当的情况下,贯穿各附图使用共同的附图标记来指示类似的特征。
具体实施方式
92.通过示例的方式给出以下描述,以使本领域的技术人员能够制造和使用本发明。本发明不限于本文描述的实施例,并且对所公开的实施例的各种修改对于本领域的技术人员将是显而易见的。
93.现在仅通过示例的方式来描述实施例。
94.神经网络
95.图1示出了用于实现神经网络的数据处理系统100。数据处理系统100可包括硬件部件(例如,硬件处理单元)和软件部件(例如,固件,以及在硬件处理单元处执行的程序和任务)。数据处理系统100包括用于执行神经网络的运算的加速器102。加速器102可以用硬件、软件或它们的任何组合来实现。加速器可被称为神经网络加速器(nna)。加速器包括多个可配置的资源,所述多个可配置的资源能够在加速器处实现不同种类的神经网络,诸如卷积神经网络、全卷积神经网络、循环神经网络和多层感知器。
96.将相对于图1的特定示例中所示的数据处理系统来描述神经网络的实现方式,其中加速器102包括多个处理元件114,每个处理元件包括卷积引擎,但应当理解,除非另有说明,否则本文中所描述的原理通常适用于包括能够执行神经网络的运算的加速器的任何数据处理系统。
97.数据处理系统包括用于接收对数据处理系统的数据输入的输入101。在图像分类应用程序中,对神经网络的输入可包括表示一个或多个图像的图像数据。例如,对于rgb图像,图像数据可采用格式x
×y×
3,其中x和y是图像跨三个颜色通道(即r、g和b)的像素维度。输入数据可被称为张量数据。应当理解,本文所述的原理不限于在图像分类应用中使用。例如,本文所述的原理可用于语义图像分割应用程序、对象检测应用程序、超分辨率应用程序、语音识别/语音转文本应用程序,或任何其他合适类型的应用程序。神经网络的输入还包括将与输入数据进行组合的一个或多个系数集。如本文所用,系数集也可以被称为权重。
98.在图1中,加速器包括输入缓冲器106、多个卷积引擎108、多个累加器110、累积缓冲器112和输出缓冲器116。每个卷积引擎108与其相应的累加器110及其在累积缓冲器112的资源中的份额一起表示处理元素114。图1中示出了三个处理元件,但通常可以存在任何数量的处理元件。每个处理元件可以从系数缓冲器130接收系数集,并且从输入缓冲器106接收输入值。系数缓冲器可设置在加速器处,例如在相同的半导体管芯上以及/或者在相同的集成电路封装中。通过组合系数集和输入数据,处理元件可操作以执行神经网络的操作。
99.一般来讲,加速器102可以实现任何合适的处理逻辑。例如,在一些示例中,加速器可以包括归约逻辑(例如,用于实现最大池化或平均池化运算)、用于执行每个元素数学运算的元素处理逻辑(例如,将两个张量相加在一起),或激活逻辑(例如,用于应用激活函数,诸如sigmoid函数或阶跃函数)。为了简单起见,图1中未示出此类单元。
100.加速器的处理元件是加速器的可并行操作的独立处理子系统。每个处理元件114包括卷积引擎108,该卷积引擎被配置为在系数集和输入值之间执行卷积运算。每个卷积引擎108可包括多个乘法器,每个乘法器被配置为将系数和对应的输入数据值相乘以产生乘法输出值。乘法器之后可以是例如被布置成计算乘法输出的总和的加法器树。在一些示例中,可以将这些乘积累加计算流水线化。
101.神经网络通常被描述为包括许多“层”。在神经网络的“层”处,可以将系数集与相应的输入数据值的集进行组合。通常必须在加速器处执行大量的运算,以便执行神经网络的每个“层”运算。这是因为输入数据和系数集通常非常大。由于可能采用卷积引擎的多次传递来生成卷积运算的完整输出(例如,因为卷积引擎可能只接收和处理系数集和输入数
据值的一部分),因此加速器可以包括多个累加器110。每个累加器110接收卷积引擎108的输出,并且将该输出相加到与相同的运算相关的先前的卷积引擎输出。取决于加速器的实现方式,卷积引擎可以不在连续周期中处理相同的运算,因此可以提供累积缓冲器112来存储给定运算的部分累加的输出。适当的部分结果可以由累积缓冲器112在每个周期提供给累加器。
102.图1的加速器102可用于实现“卷积层”。对卷积层的数据输入可以具有维度b
×cin
×hin
×win
。例如,如图2a所示,对卷积层的数据输入可被布置为数据的c
in
个信道,其中每一个信道具有空间维度h
in
×win
,其中h
in
和w
in
分别为高度维度和权重维度。在图2a中,示出输入数据包括四个数据信道(即,c
in
=4)。对卷积层的数据输入也可以由批次大小b限定。批次大小b未在图2a中示出,但定义输入到卷积层的数据集合的数量。例如,在图像分类应用程序中,批次大小可以指输入数据中的单独图像的数量。
103.神经网络可以包括j层,每一层被配置为分别将系数集与所述层的数据输入进行组合。这些j层中的每一层都可以与系数集wj相关联。如本文所述,j为j层的每一层的索引。换句话讲,表示j层的系数集wj。一般来说,系数集中的系数的数量和值可以在层与层之间变化,使得对于第一层,系数的数量可以被定义为对于第二层,系数的数量可以被定义为并且对于第j层,系数的数量可以被定义为其中第一层中的系数的数量为n1,第二层中的系数的数量为n2,并且第j层中的系数的数量为nj。
104.一般来讲,用于层的该系数集可以呈任何合适的格式。例如,系数集可以由p维张量表示,其中p≥1,或者以任何其他合适的格式表示。在本文中,将参考一组维度,信道的输入数c
in
、信道的输出数c
out
、高度维度h和宽度维度w,来定义每个系数集的格式,但应当理解,系数集的格式可以任何其他合适的方式定义。
105.用于对具有图2a所示格式的输入数据执行卷积运算的系数集可具有维度c
out
×cin
×h×
w。图2a中的系数集未示出c
in
维度,但通常,系数集中的系数信道的数量对应于(例如,等于)将与系数集进行组合的输入数据中的数据信道的数量(例如,在图2a中所示的示例中,c
in
=4)。在图2a中未示出c
out
维度,但表示当系数集与输入数据进行组合时输出中的信道的数量。由神经网络使用的系数集的维度可以有很大变化。仅作为非限制性示例,用于卷积层中的系数集可以具有例如64
×3×3×
3、512
×
512
×3×
3或64
×3×
11
×
11的维度。
106.在卷积层中,可以根据s和t方向上的多个步骤的卷积运算将系数集与输入数据进行组合,如图2a和图2b所示。也就是说,在卷积层中,通过使用与所述层相关联的系数集来对输入数据进行卷积来处理输入数据。例如,图2b示意性地示出了卷积层200,该卷积层被布置成将系数集204与输入数据202进行组合,以便形成输出数据206。由卷积层输出的数据可以具有维度b
×cout
×hout
×wout
。也就是说,由卷积层输出的数据可被布置为数据的c
out
个信道,其中每一个信道具有空间维度h
out
×wout
,其中h
out
和w
out
分别为高度维度和权重维度。由卷积层输出的数据也可以由批次大小b限定。在该示例中,系数集204包括四个滤波器,每个滤波器包括系数集中的多个系数。每个滤波器可以包括系数集的唯一的一组和/或布置的系数,或者两个或多个滤波器可以彼此相同。输入数据202具有三个数据信道。每个滤波器包括三个系数信道,对应于输入数据202中的三个数据信道(例如,c
in
=3)。也就是说,层的系数集中的每个滤波器中的系数信道的数量可以对应于对层的数据输入中的数据信道
的数量。输出数据206具有四个信道(例如,c
out
=4)。也就是说,由层的系数集构成的滤波器的数量可以对应于输出数据中的数据信道的数量。在图2b中,h
out
=h
in
并且w
out
=w
in
,但应当理解,并非必须如此,例如,h
out
可以不等于h
in
并且/或者w
out
可以不等于w
in

107.输入数据202可以通过将系数集中的每个滤波器与输入数据进行卷积而与系数集204进行组合,其中每个滤波器的第一系数信道与输入数据的第一数据信道进行卷积,每个滤波器的第二系数信道与输入数据的第二数据信道进行卷积,并且每个滤波器的第三系数信道与输入数据的第三数据进行卷积。可针对每个输入信道对每个滤波器的所述卷积运算的结果进行求和(例如,累加),以形成每个输出信道的输出数据值。应当理解,系数集不必布置为如图2b中所示的一组滤波器,并且事实上可以任何其他合适的方式布置。
108.存在许多其他类型的神经网络“层”,被配置为将系数集与所述层的数据输入进行组合。此类神经网络层的另一个示例为全连接层。用于执行全连接运算的系数集可具有维度c
out
×cin
。全连接层可以在系数集和输入张量之间执行矩阵乘法。全连接层通常用于循环神经网络和多层感知器。卷积引擎(例如,图1中所示的卷积引擎108中的一个或多个卷积引擎)可以用来实现全连接层。被配置为将系数集与这些层的数据输入进行组合的神经网络层的其他示例包括卷积层的变化,诸如深度卷积层、扩张卷积层、分组卷积层和转置卷积(解卷积)层。神经网络可以包括不同层的组合。例如,神经网络可以包括一个或多个卷积层(例如,从图像中提取特征),随后是一个或多个全连接层(例如,以基于所提取的特征提供预测)。
109.对于神经网络的第一层,“输入数据”可以被认为是神经网络的初始输入。第一层处理输入数据,并且生成传递到第二层的第一组中间数据。可以考虑第一组中间数据以形成对第二层的输入数据,该第二层处理第一中间数据以产生呈第二中间数据形式的输出数据。在神经网络包含第三层的情况下,第三层接收第二中间数据作为输入数据并且处理所述数据以产生第三中间数据作为输出数据。因此,本文对输入数据的引用可以被解释为包括对任何层的输入数据的引用。例如,术语输入数据可以指中间数据,该中间数据是特定层的输出并且是后续层的输入。重复该操作,直到最终层产生可被视为神经网络的输出的输出数据。
110.返回图1,加速器102可以包括被布置成存储加速器(例如,卷积引擎)所需的输入数据的输入缓冲器106和系数缓冲器130,该系数缓冲器被布置成存储加速器(例如,卷积引擎)所需的用于根据神经网络的运算与输入数据进行组合的系数集。输入缓冲器可包括与在给定周期上在加速器处执行的一个或多个运算相关的输入数据中的一些或全部。系数缓冲器可以包括与在给定周期上在加速器处处理的一个或多个运算相关的系数集中的一些或全部。图1中所示的加速器的各种缓冲器可以任何合适的方式实施,例如,作为加速器本地的(例如,在相同的半导体管芯上以及/或者设置在相同的集成电路封装内)或加速器可通过数据总线或其他互连件访问的任何数量的数据存储库。
111.存储器104可以是加速器可访问的,例如,存储器可以是加速器可通过数据总线访问的系统存储器。可提供片上存储器128以用于存储系数集和/或其他数据(诸如输入数据、输出数据等)。片上存储器可以在加速器的本地,使得存储在片上存储器中的数据可以由加速器访问,而不消耗存储器104的存储器带宽(例如,通过系统总线可访问的系统存储器)。可以将数据(例如,系数集、输入数据)周期性地从存储器104写入片上存储器。加速器处的
系数缓冲器130可被配置为从片上存储器128接收系数数据,以便减少存储器与系数缓冲器之间的带宽。输入缓冲器106可被配置为从片上存储器128接收输入数据,以便减少存储器与输入缓冲器之间的带宽。存储器可以耦合到输入缓冲器和/或片上存储器,以便将输入数据提供给加速器。
112.在输入101接收的系数集可以呈压缩格式,例如具有减少的存储器占用的数据格式。也就是说,在将系数集输入到数据处理系统100的输入101之前,可以压缩系数集以便由整数个一个或多个压缩值来表示,如本文将进一步详细描述的。为此,数据处理系统100可包括解压缩引擎132。解压缩引擎132可以被配置为将从系数缓冲器130读取的任何压缩的系数集解压缩到卷积引擎108中。另外或替代地,在输入101处接收的输入数据可以呈压缩格式。在该示例中,数据处理系统100可以包括解压缩引擎(图1中未示出),该解压缩引擎定位在输入缓冲器106和卷积引擎108之间,并且被配置为将从输入缓冲器106读取的任何压缩的输入数据解压缩到卷积引擎108中。
113.累积缓冲器112可以耦合到输出缓冲器116,以允许输出缓冲器接收在加速器处运算的神经网络的运算的中间输出数据,以及结束运算(即,在加速器处实施的网络的最后的运算)的输出数据。输出缓冲器116可以被耦合到片上存储器128,用于将中间输出数据和结束运算的输出数据提供给片上存储器128。
114.通常,需要将大量数据从存储器传输至处理元件。如果无法高效地完成该传输,这可导致用于向处理元件提供输入数据和系数集的高存储器带宽要求和高功耗。当存储器为“片外”存储器时,即在与处理元件不同的集成电路或半导体管芯中实施时,尤其如此。一个此类示例为加速器可通过数据总线访问的系统存储器。为了减少加速器执行神经网络时的存储器带宽要求,在加速器处提供片上存储器是有利的,在加速器处可以存储在加速器处实现神经网络所需的至少一些系数集和/或输入数据。当存储器设置在相同的半导体管芯上以及/或者在相同的集成电路封装中时,此类存储器可以是“片上”的(例如,片上存储器128)。
115.在图1的示例中分别示出了各种示例性连接;但是,在一些实施方案中,它们中的一些或全部可以由一个或多个共享数据总线连接提供。还应当理解,可提供其他连接,作为图1所示连接的替代或补充。例如,输出缓冲器114可被耦合到存储器104,用于将输出数据直接提供给存储器104。同样,在一些示例中,并非图1所示的所有连接都是必需的。例如,存储器104不需要耦合到输入缓冲器106,该输入缓冲器可以直接从输入数据源,例如被配置为在包括数据处理系统的装置处捕获图像的相机子系统,获得输入数据。
116.如本文所述,在图像分类应用程序中,表示一个或多个图像的图像数据可以被输入到神经网络,并且所述神经网络的输出可以为指示这些图像中的每一个图像属于特定分类(或分类集合)的概率(或概率集合)的数据。在图像分类应用程序中,在神经网络的多个层中的每一层中,将系数集与所述层的数据输入进行组合,以便识别输入数据的特性特征。通常对神经网络进行训练以通过使用训练数据来提高其输出的准确性。在图像分类示例中,训练数据可包括指示一个或多个图像的数据以及这些图像中的每一个图像的相应的预先确定的标签。训练神经网络可以包括使用未经训练或部分训练的系数集对训练输入数据操作神经网络,以便形成训练输出数据。例如,可以使用损失函数来评估训练输出数据的准确性。可以根据训练输出数据的准确性通过称为梯度下降和反向传播的过程来更新系数
集。例如,可以根据使用损失函数确定的训练输出数据的损失来更新系数集。反向传播可以被认为是关于损失函数计算每个系数的梯度的过程。这可以通过使用链式法则从损失函数的最终输出开始并且反向计算每一层的系数来实现。一旦已知所有梯度,就可以使用梯度下降(或其导数)算法来根据通过反向传播来计算的其梯度来更新每个系数。可以根据学习速率参数来执行梯度下降,该学习速率参数指示在训练过程的每次迭代中系数可以根据梯度改变的程度。可以重复这些步骤,以便迭代地更新系数集。
117.在典型神经网络内使用的系数集可被高度参数化。也就是说,在典型神经网络内使用的系数集通常包括大量的非零系数。神经网络的高度参数化的系数集可具有大的存储器占用。当系数集存储在存储器(例如,存储器104或片上存储器128)中时,除了本地高速缓存,在运行时还需要大量的存储器带宽来读取高度参数化的系数集(例如,在一些示例中,需要存储器带宽的50%)。从存储器读取高度参数化的系数集所花费的时间还可以增加神经网络针对给定输入提供输出所花费的时间,因此增加神经网络的延迟。高度参数化的系数集还可以对加速器102的处理元件114施加大量的计算需求,例如通过使处理元件在系数和相应的数据值之间执行大量的乘法运算。
118.数据处理系统
119.图4示出了根据本文所述的用于解决上述所识别的问题中的一个或多个问题的原理的数据处理系统。
120.图4中所示的数据处理系统410包括存储器104和处理器400。在一个示例中,处理器400包括神经网络102-1的软件实现方式。神经网络102-1的软件实现方式可具有与参考图1描述的加速器102相同的属性。在另一个示例中,数据处理系统410包括神经网络102-2的硬件实现方式。神经网络102-2的硬件实现方式可具有与参考图1描述的加速器102相同的属性。在一些示例中,数据处理系统可包括以硬件和软件的组合实现的神经网络加速器。
121.图4所示的处理器400还包括修剪逻辑402、压缩逻辑404、稀疏性学习逻辑406、网络准确性逻辑408,以及系数识别逻辑412。逻辑402、404、406、408和412中的每一者可以在固定功能硬件、在处理器400内的通用硬件上运行的软件或它们的任何组合中实现。本文中将更详细地描述逻辑402、404、406、408和412中的每一者的功能。在一些示例中(图4中未示出),修剪逻辑402、压缩逻辑404、稀疏性学习逻辑406、网络准确性逻辑408和系数识别逻辑412中的一者或多者可以替代地或另外实现为神经网络102-2的硬件实现方式内的逻辑单元。
122.存储器104可以为可以由处理器400访问的系统存储器和/或通过数据总线的神经网络102-2的硬件实现方式。替代地,存储器104可以为处理器400本地的片上存储器和/或神经网络102-2的硬件实现方式。存储器104可以存储待由处理器400操作的系数集和/或神经网络102-2的硬件实现方式,以及/或者已经由处理器400运算和输出的系数集和/或神经网络102-2的硬件实现方式。
123.系数压缩
124.减少系数集的存储器占用,从而减少在运行时从存储器读取系数数据所需的带宽的一种方式是压缩系数集。也就是说,可以压缩每个系数组,使其由整数个一个或多个压缩数据值来表示。所述压缩可以由图4所示的压缩逻辑404执行。存储在存储器104中的未压缩系数的集合可以输入到压缩逻辑404以进行压缩。压缩逻辑404可以将压缩的系数集输出到
存储器104。
125.可以根据压缩方案在压缩逻辑404处压缩系数集。此类压缩方案的一个示例是单前缀分组编码8(spgc8)压缩方案。应当理解,存在许多其他合适的压缩方案,并且本文所述的原理不限于spgc8压缩方案的应用。spgc8压缩方案在英国专利申请gb2579399中有完整的描述(但没有用spgc8名称来标识)。
126.图3a示出了根据压缩方案的示例性系数集的压缩。压缩方案可以为spgc8压缩方案,但本文所述的原理可以适用于其他压缩方案。图3a示出了由16
×
16张量系数表示的系数集300。系数集300可以是如图所示的二维系数张量的全部或一部分,或p维系数张量的一个平面,其中p≥3。如本文所述,系数集可以包括任何数量的系数,并且采用任何合适的格式。
127.可以压缩系数集的多个子集以便压缩该系数集。每个系数子集包括多个系数。例如,系数子集可以包括八个系数。子集中的系数在系数集中可以是连续的。例如,系数子集在覆盖系数集300的阴影区域中示出。该系数子集包括以单行布置的八个连续的系数(例如,具有维度1
×
8的系数子集)。更一般地,系数子集可以具有任何维度,例如2
×
2、4
×
4等。在系数集为p维(p≥1)张量的示例中,系数子集也可以是p维张量,其中p≥1。
128.每个系数可以为整数。例如,系数的示例性1
×
8子集302包括系数31、3、1、5、3、4、5、6。每个系数可以二进制数字编码。图3a中所示的子集中的每个系数为正(例如,不带符号的)二进制数。在一个示例中,每个系数可以编码为16位的二进制数字,如304处所示,但可以选择更多或更少的位。可以提供十六位以编码每个系数,以便可以编码高达值65,536的系数。因此,在该示例中,需要128位来编码八个系数的子集,如304中所示。然而,通常不需要16位来编码每个系数。也就是说,系数集中的大多数系数具有低于或甚至显著低于最大可编码值的值。
129.如果系数集中的任何系数值为负系数值,则可以首先对该系数集进行变换,使得所有系数值都为正值(例如,不带符号)。例如,负系数可以被变换为奇数值,而正系数可以被变换为呈不带符号的表示的偶数值。该经过变换的系数集可以用作spgc8压缩方案的输入。
130.根据spgc8压缩方案,识别到足以编码系数子集中的最大系数值的位数。然后使用该位数来编码系数子集中的每个系数。与系数子集相关联的标头数据指示已经使用该位数来编码子集中的每个系数。
131.例如,如306所示,压缩的系数子集可以由标头数据和多个主体部分(v
0-v7)表示。在系数的子集302中,最大系数值为31,该值可以使用5位数据来编码。在该示例中,标头数据指示5位将用于编码系数子集中的每个系数。标头数据本身具有位成本,例如,3位,而每个主体部分使用5位来对系数值进行编码。例如,在标头部分中使用的位数可以是对每个主体部分的位数进行编码所需的最小位数(例如,在图3a所示的示例中,3位可用于对二进制的数字5进行编码)。在该示例中,系数的子集302因此可以使用43位数据以压缩形式编码,如308所示,而不是以128位的未压缩形式编码,如304所示。
132.换句话讲,为了压缩系数子集,生成包括h位的标头数据,并且生成多个主体部分,每个主体部分包括b位。主体部分中的每一个主体部分对应于子集中的系数。b的值在子集中是固定的,并且子集的标头数据包括所述子集的主体部分的b的指示。主体部分大小b通
过在未压缩子集中的所有系数中定位最高有效前导位一的位位置来识别。生成标头数据以便包括对主体部分大小进行编码的位序列,并且通过从未压缩子集的每个系数中移除零、一个或多个前导零,针对子集中的每个系数生成包括b位的主体部分。
133.在一些示例中,可以根据spgc8压缩方案在压缩期间使两个相邻的系数子集交织。例如,八个系数的第一子集可以包括系数v0、v1、v2、v3、v4、v5、v6和v7。八个系数的相邻子集可以包括v8、v9、v
10
、v
11
、v
12
、v
13
、v
14
和v
15
。当根据使用交织的压缩方案压缩第一系数子集和第二系数子集时,第一压缩的系数子集可以包括表示系数v0、v2、v4、v6、v8、v
10
、v
12
和v
14
的整数个压缩值。第二压缩的系数子集可以包括表示系数v1、v3、v5、v7、v9、v
11
、v
13
和v
15
的整数个压缩值。
134.非结构化稀疏性
135.由神经网络使用的系数集可包括一个或多个系数值零。包括大量的零系数的系数集可以被称为是稀疏的。如本文所述,神经网络包括多个层,每一层被配置为将系数集与所述层的输入数据值进行组合,例如通过将系数集中的每一个系数与相应的输入数据值相乘。因此,对于稀疏的系数集,神经网络的层中的大量运算可以产生零输出。
136.稀疏性可以人工地插入到系数集中。也就是说,稀疏性可以应用于系数集中的一个或多个系数。将稀疏性应用于系数包括将所述系数设置为零。这可以通过将稀疏性算法应用于系数集中的系数来实现。图4中所示的修剪逻辑402可以被配置为将稀疏性应用于系数集中的一个或多个系数。在一个示例中,修剪逻辑402可以通过执行称为基于量值的修剪的过程将稀疏性应用于系数集。经过训练的系数集通常包括接近(或甚至非常接近)零但非零的许多系数值。基于量值的修剪涉及将稀疏性应用于系数集中最接近零的百分比、分数或系数的一部分。待设置为零的系数的比例可根据稀疏性参数来确定,该稀疏性参数指示待应用于系数集的稀疏性水平。基于量值的修剪的结果是可以增加系数集中的稀疏性水平,通常不会显著影响网络的准确性,因为已经设置为零的是较低值(因此通常是最低显著性的)系数。图14a示出了已经例如通过过程诸如基于量值的修剪来应用稀疏性的系数集的示例。在图14a中,使用阴影示出了稀疏的系数。图14a为非结构化稀疏性的示例。具有低量值(即,接近零的量值)的系数值可以在系数集中随机(例如,以非结构化方式)分布。因此,出于该原因,由诸如基于量值的修剪的方法产生的稀疏性可被称为是非结构化的。
137.基于量值的修剪仅仅是将稀疏性应用于系数集的过程的一个示例。许多其他方法可用于将稀疏性应用于系数集。例如,修剪逻辑402可以被配置为随机选择待应用稀疏性的系数集的系数的百分比、分数或部分。
138.如本文所述,对于稀疏的系数集,神经网络的层中的大量运算可以产生零输出。因此,神经网络可以被配置为跳过(即,不执行)“乘以零”的运算(例如,涉及将输入数据值与零系数值相乘的运算)。因此,以此方式,并且通过人工地将稀疏性插入系数集中,可以通过需要执行较少的乘法来减少神经网络上的计算需求(例如,图1中所示的加速器102的处理元件114)。
139.图7a示出了用于应用非结构化稀疏性的示例性修剪逻辑。在一些示例中,图4中示出的修剪逻辑402具有参考图7a描述的修剪逻辑402a的属性。应当理解,图7a中所示的修剪逻辑402a仅仅是被配置为将稀疏性应用于系数集的逻辑的一个示例。其他形式的逻辑可以用来将稀疏性应用于系数集。
140.对修剪逻辑402a的输入包括wj502,其表示神经网络的第j层的系数集。如本文所述,用于层的该系数集可以呈任何合适的格式。例如,系数集可以由p维系数张量表示,其中p≥1,或者以任何其他合适的格式表示。
141.修剪逻辑402a的输入还包括sj504,其表示神经网络的第j层的稀疏性参数。换句话讲,表示j层的稀疏性参数sj。稀疏性参数可以指示待由修剪逻辑402a应用于系数集wj的稀疏性水平。例如,稀疏性参数可以指示待由修剪逻辑402a应用稀疏性的系数集的百分比、分数或部分。稀疏性参数sj可以(例如,由用户略微任意地)根据可以向系数集引入多大程度的稀疏性而不显著影响神经网络的准确性的假设来设置。在其他示例中,如本文进一步详细描述的,稀疏性参数sj可以被认为是神经网络的训练过程的一部分。
142.稀疏性参数sj可以任何合适的形式提供。例如,稀疏性参数可以为在范围0至1(包括0和1)内的十进制数字,该数字表示待应用稀疏性的系数集的百分比。例如,0.4的稀疏性参数sj可以指示将稀疏性应用于系数集wj中的40%的系数。
143.在其他示例中,稀疏性参数可以作为任何合适范围(例如,介于-5和5之间)中的数字提供。在这些示例中,修剪逻辑402a可包括归一化逻辑704,该归一化逻辑被配置为将稀疏性参数归一化,使其处于0和1之间的范围内。实现所述归一化的一个示例性方式是使用s型函数,例如例如,s型函数可以在x值为-5时接近0的最小y值与x值为5时接近1的最大y值之间转变。以此方式,s型函数可用于将范围-5至5中的输入稀疏性参数转换为范围0至1中的归一化稀疏性参数。在一个示例中,归一化逻辑704可以使用s型函数以便归一化稀疏性参数sj。归一化逻辑704的输出可以是归一化的稀疏性参数应当理解,归一化逻辑可以使用其他函数,例如hard-sigmoid(),该函数通过对输入稀疏性参数的不同数学运算集合来实现相同的归一化。出于本文所提供的示例性等式的目的,(如所提供的,或在由归一化函数归一化之后的)范围0至1中的稀疏性参数将由表示。
144.如本文所述,系数集中的每一个系数可以为整数。在一些示例中,系数集可以包括一个或多个正整数值系数和一个或多个负整数值。在这些示例中,修剪逻辑402a可包括逻辑700,该逻辑被配置为确定系数集wj中的每个系数的绝对值。以此方式,单元700的输出处的系数集中的每个值为正整数值。
145.图7a中所示的修剪逻辑402a包括分位数逻辑706,该分位数逻辑被配置为根据稀疏性参数和包括绝对系数值的系数集来确定阈值。例如,稀疏性参数可以指示待应用于系数集的稀疏性百分比,例如40%。在该示例中,分位数逻辑706将确定阈值,低于该阈值存在40%的绝对系数值。在该示例中,分位数逻辑可以被描述为使用不可微分的分位数方法。也就是说,图7a中所示的分位数逻辑706并不尝试使用函数来对系数集进行建模,而是以经验方式对绝对系数值(例如,以升序或降序)进行分类,并且将阈值设置为适当值。例如,分位数逻辑706可以根据τ等式(1)确定阈值。
[0146][0147]
修剪逻辑402a包括减法逻辑708,该减法逻辑被配置为从所确定的每个绝对系数值中减去由分位数逻辑706确定的阈值。在图7a至图7d中,减法逻辑(例如图7a中的减法逻
辑708)的输入中的一个输入上的“减”符号用于示出正在从标有“加”符号的另一个输入中减去该输入。因此,具有小于阈值的值的任何绝对系数值将由负数表示,而具有大于阈值的值的任何绝对系数值将由正数表示。以此方式,修剪逻辑402a已识别最低显著性系数(例如,对系数集最不重要的系数)。在该示例中,最低显著性系数为具有低于阈值的绝对值的那些系数。换句话讲,修剪逻辑已识别具有最接近于零的值的输入的系数集wj中所需的系数百分比。
[0148]
修剪逻辑402a包括步骤逻辑710,该步骤逻辑被配置为将减法逻辑708的输出中的每个负系数值转换为零,并且将减法逻辑708的输出中的每个正系数值转换为一。实现这一点的一个示例性方式是使用阶跃函数。例如,阶跃函数可以针对负输入值输出值0,并且针对正输入值输出值1。步骤逻辑710的输出是具有与输入的系数集wj相同维度的二进制张量。二进制张量是由二进制值0和1组成的张量。通过步骤逻辑710输出的二进制张量可以用作“间隔掩码”。
[0149]
修剪逻辑402a包括乘法逻辑714,该乘法逻辑被配置为执行稀疏性掩码和输入的系数集wj的逐元素乘法。也就是说,在二进制稀疏性掩码包括“0”的每个系数位置中,系数集wj中的系数将乘以0,使得输出为零。以此方式,稀疏性已应用于所述系数,即,已将其设置为零。在二进制稀疏性掩码包括“1”的每个系数位置,系数集wj中的系数将乘以1,因此其值将保持不变。修剪逻辑402a的输出为已经应用稀疏性的一组更新的系数集w
′j506。例如,乘法逻辑714可以根据等式(2)执行乘法,其中step(abs(wj)-τ)表示由步骤逻辑710输出的二进制张量。
[0150]
wj′
=step(abs(wj)-τ)*wjꢀꢀꢀꢀ
(2)
[0151]
图7c示出了用于应用非结构化稀疏性的替代的示例性修剪逻辑。在一些示例中,图4中示出的修剪逻辑402具有参考图7c描述的修剪逻辑402c的属性。应当理解,图7c中所示的修剪逻辑402c仅仅是被配置为将稀疏性应用于系数集的逻辑的一个示例。其他形式的逻辑可以用来将稀疏性应用于系数集。
[0152]
如参考图7a所述,图7c中所示的修剪逻辑402c的输入包括wj502和sj504。图7c中所示的修剪逻辑402c还包括归一化逻辑704,该归一化逻辑执行与参考图7a描述的归一化逻辑704相同的功能。
[0153]
当系数集中的系数正常分布时,图7c中所示的修剪逻辑402c可能特别合适。正常(或高斯)分布可以通过其平均值μ,和标准偏差ψ来充分描述。图7c中所示的修剪逻辑402c包括被配置为确定系数集502中的系数的标准偏差的逻辑714,以及被配置为确定系数集502中的系数的平均值的逻辑716。
[0154]
图7c中所示的修剪逻辑402c包括分位数逻辑706-2。分位数逻辑702-2可以使用可微函数,诸如逆误差函数(例如,erf-1
)来使用系数集的平均值和标准偏差来对所述系数集进行建模(如在逻辑714和逻辑716中所确定的)。分位数逻辑706-2被配置为根据稀疏性参数来确定阈值τ。例如,当可微函数是逆误差函数时,这可以根据等式(3)来实现,其中是由逻辑714确定的标准偏差,并且是由逻辑716确定的平均值。
[0155]
[0156]
图7c中所示的修剪逻辑402c包括减法逻辑708a,该减法逻辑被配置为从阈值τ减去由逻辑716确定的平均值因此,参考等式(3),减法逻辑708a的输出为
[0157]
图7c中所示的修剪逻辑402c包括减法逻辑708b,该减法逻辑被配置为从系数集wj502中的每个系数中减去由逻辑716确定的平均值这具有将系数集中的系数分布集中在大约0的效果。
[0158]
图7c所示的修剪逻辑402c包括逻辑700,该逻辑被配置为确定减法逻辑708b输出中的每个值的绝对值。以此方式,单元700的输出中的每个值为正整数值。
[0159]
图7c中所示的修剪逻辑402c包括减法逻辑708c,该减法逻辑被配置为从由逻辑700确定的每个绝对值中减去减法逻辑708a的输出。因此,具有小于减法逻辑708a的输出的值的任何绝对值(例如,)将由负数表示,而具有大于减法逻辑708a的输出的值的任何绝对值(例如,)将由正数表示。以此方式,修剪逻辑402c已识别最低显著性系数(例如,对系数集最不重要的系数)。在该示例中,最低显著性系数为减法逻辑708c的输出为负的位置处的那些系数。
[0160]
修剪逻辑402c包括步骤逻辑710,该步骤逻辑执行与参考图7a描述的步骤逻辑710相同的功能。步骤逻辑710的输出是具有与输入的系数集wj相同维度的二进制张量。二进制张量是由二进制值0和1组成的张量。通过步骤逻辑710输出的二进制张量可以用作“间隔掩码”。
[0161]
修剪逻辑402c包括乘法逻辑714,该乘法逻辑被配置为执行稀疏性掩码和输入的系数集wj的逐元素乘法,如参考图7a描述的乘法逻辑714所述。修剪逻辑402c的输出为已经应用稀疏性的一组更新的系数w
′j506。例如,乘法逻辑714可以根据等式(4)执行乘法,其中表示由步骤逻辑710输出的二进制张量。
[0162][0163]
如本文所述,当该系数集中的系数正常分布时,参考图7c描述的修剪逻辑402c可能特别合适。因此,可以测试或推断系数集wj的分布,以便决定使用修剪逻辑的哪种实现方式来将稀疏性应用于那些系数(例如,参考图7a或图7c描述的修剪逻辑)。也就是说,如果系数集不正常分布,则可优选地使用参考图7a描述的修剪逻辑来应用稀疏性。如果系数集是(或大致是)正态分布,则可优选地使用参考图7c描述的修剪逻辑来应用稀疏性。
[0164]
结构化稀疏性
[0165]
根据本文所述的原理,可以通过以与压缩方案配准的结构化方式向系数集的多个系数应用稀疏性来实现协同效益,该压缩方案将用于压缩系数集。这可以通过在逻辑上布置图4的修剪逻辑402和压缩逻辑404来实现,如图5所示。
[0166]
图5示出了根据本文所述的原理实现用于压缩系数集以供随后在神经网络中使用的数据处理系统。将参考图6描述压缩系数集以供随后在神经网络中使用的方法。
[0167]
修剪逻辑402的输入包括wj502,其表示如本文所述的神经网络的第j层的系数集。修剪逻辑402的输入还包括sj504,其表示如本文所述的神经网络的第j层的稀疏性参数。
wj502和sj504两者都可以从存储器(诸如图4中的存储器104)读取到修剪逻辑402中。稀疏性参数可以指示待由修剪逻辑402应用于系数集wj的稀疏性水平。
[0168]
修剪逻辑402被配置为向系数组应用稀疏性,每一组包括预定义的多个系数。这是图6中的方法步骤602。系数集可以是占据系数集中的邻接位置的多个系数,但情况不一定如此。该系数组可以具有任何合适的格式。例如,该系数组可以包括p维系数张量(其中p≥1)或任何其他合适的格式。在一个示例中,每个系数组包括布置在单行中的十六个系数(例如,一组具有维度1
×
16的系数)。更一般地,系数组可以具有任何维度,例如,2
×
2、4
×
4等。如本文所述,用于对输入数据执行卷积运算的系数集可以具有维度c
out
×cin
×h×
w。一组所述系数集可以具有维度1
×
16
×1×
1(即,每一组中的16个系数在16个输入信道中的每一个输入信道中处于对应的位置)。如本文所述,用于执行全连接运算的系数集可具有维度c
0ut
×cin
。一组所述系数集可以具有维度1
×
16(即,每一组中的16个系数在16个输入信道中的每一个输入信道中处于对应的位置)。在另一个示例中,可以将层的一组滤波器中的滤波器的一个或多个滤波器(例如,如参考图2b所述)的系数信道视为可以应用稀疏性的系数组。
[0169]
向系数组应用稀疏性可包括将所述组中的每个系数设置为零。这可以通过将稀疏性算法应用于系数集中的系数来实现。可根据稀疏性参数sj来确定待应用稀疏性的系数组的数量,该稀疏性参数可以指示由修剪逻辑402应用稀疏性的系数集的百分比、分数或部分。稀疏性参数sj可以(例如,由用户略微任意地)根据可以向系数集引入多大程度的稀疏性而不显著影响神经网络的准确性的假设来设置。在其他示例中,如本文进一步详细描述的,稀疏性参数sj可以被认为是神经网络的训练过程的一部分。修剪逻辑402的输出为一组更新的系数w
′j506,包括多组稀疏的系数(例如,系数组,每一组包括具有值“0”的系数)。
[0170]
图7b示出了用于应用结构化稀疏性的示例性修剪逻辑。在一些示例中,图4和图5中示出的修剪逻辑402具有参考图7b描述的修剪逻辑402b的属性。应当理解,图7b中所示的修剪逻辑402b仅仅是被配置为将结构化稀疏性应用于系数集的逻辑的一个示例。其他形式的逻辑可以用来将稀疏性应用于系数集。
[0171]
如参考图7a所述,图7b中所示的修剪逻辑402b的输入包括wj502和sj504。图7b中所示的修剪逻辑402b还包括归一化逻辑704和逻辑700,其中每一者执行与参考图7a描述的相应的逻辑相同的功能。
[0172]
图7b中所示的修剪逻辑402b包括归约逻辑702,该归约逻辑被配置为将从逻辑700接收的系数集划分为系数组,使得集合中的每一个系数仅分配给一个组并且所有系数都分配给组。每个系数组可以包括多个系数。由归约逻辑识别的每个系数组可以包括相同数量的系数,并且可以具有相同的维度。归约逻辑被配置为用单个值表示每个系数组。例如,表示一个组的单个值可以是该组内多个系数的平均值(例如,平均值、中值或众数)。在另一个示例中,一个组的单个值可以是所述组内的最大系数值。这可以被称为最大池化。在一个示例中,一个组可以包括系数集的信道,如本文所述。将系数信道减少到单个值可以被称为全局池化。将系数信道减少到该信道内的最大系数值可以被称为全局最大池化。归约逻辑702的输出可以是归约张量,表示系数集的张量的维度是该归约张量的一个或多个维度的整数倍,该整数大于1。归约张量中的每个值可以表示输入到归约逻辑702的绝对系数集的系数组。在归约逻辑702执行池化操作,诸如最大池化、全局池化或全局最大池化的情况下,归约张量可以被称为池化张量。
[0173]
由归约逻辑702执行的功能在图8中示意性地示出。在图8中,对系数集502执行2
×
2池化702。系数集502可以为图7b中所示的由逻辑700输出的那些。在该示例中,系数集502由8
×
8的系数张量表示。系数集502逻辑上分为由四个系数组成的16组(例如,每一组由2
×
2的系数张量表示)。图8中通过系数集502中每一组四个系数周围的粗边界指示这些组。通过执行2
×
2池化702,系数集502中的每一组四个系数由如本文所述的归约张量800中的单个值表示。例如,系数集502中左上系数组可以由归约张量800中的左上值表示。图8中所示的归约张量800由具有维度4
×
4的张量表示。也就是说,表示系数集502的8
×
8张量的维度是归约张量800的两倍以上。
[0174]
返回图7b,修剪逻辑402b包括分位数逻辑706,该分位数逻辑被配置为根据稀疏性参数和归约张量来确定阈值。例如,稀疏性参数可以指示待应用于系数集的稀疏性百分比,例如25%。在该示例中,分位数逻辑706将确定阈值,低于该阈值存在25%的归约张量中的值。在该示例中,分位数逻辑可以被描述为使用不可微分的分位数方法。也就是说,分位数逻辑702不尝试使用函数来对归约张量中的值进行建模,而是以经验方式对归约张量中的值进行分类(例如,以升序或降序),并且将阈值设置为适当值。例如,分位数逻辑706可以根据τ等式(5)确定阈值。
[0175][0176]
修剪逻辑402b包括减法逻辑708,该减法逻辑被配置为从归约张量中的每个值中减去由分位数逻辑706确定的阈值。因此,具有小于阈值的值的归约张量中的任何值将由负数表示,而具有大于阈值的值的归约张量中的任何值将由正数表示。以此方式,修剪逻辑402b已识别归约张量中的最低显著性值。在该示例中,归约张量中的最低显著性值是低于阈值的那些值。归约张量中的最低显著性值对应于系数集中的最低显著性的系数组(例如,系数集中具有最低显著性的系数组)。
[0177]
修剪逻辑402b包括步骤逻辑710,该步骤逻辑被配置为将减法逻辑708的输出中的每个负系数值转换为零,并且将减法逻辑708的输出中的每个正系数值转换为一。实现这一点的一个示例性方式是使用阶跃函数。例如,阶跃函数可以针对负输入值输出值0,并且针对正输入值输出值1。步骤逻辑710的输出是具有与归约逻辑702输出的归约张量相同的维度的二进制张量。二进制张量是由二进制值0和1组成的张量。所述二进制张量可以被称为归约的稀疏性掩码张量。在归约逻辑702执行池化操作,诸如最大池化或全局池化的情况下,归约的稀疏性掩码张量可以被称为池化的稀疏性掩码张量。
[0178]
由分位数逻辑706、减法逻辑708和步骤逻辑710执行的功能可以统称为掩码生成802。掩码生成802在图8中示意性地示出。在图8中,在归约张量800上执行掩码生成802(例如,使用分位数逻辑706和减法逻辑708,如参考图7b所述),以便生成归约的稀疏性掩码张量804。归约的稀疏性掩码张量804包括由阴影表示的四个二进制“0”和12个二进制“1”。
[0179]
返回图7b,修剪逻辑402b包括扩展逻辑712,该扩展逻辑被配置为扩展归约的稀疏性掩码张量,以便生成与输入到归约逻辑702的系数张量具有相同维度的稀疏性掩码张量。扩展逻辑712可以执行上采样,例如最近邻上采样。例如,当归约的稀疏性掩码张量包括二进制“0”时,稀疏性掩码张量将包括包含多个二进制“0”的对应的组,所述组的维度与系数集被归约逻辑702划分成的组的维度相同。例如,在归约逻辑702执行全局池化操作的情况
下,扩展逻辑712可以执行称为全局上采样的运算。由扩展逻辑712输出的二进制张量可以用作“稀疏性掩码”,并且因此在本文中可以被称为稀疏性掩码张量。在一个示例中,最近邻上采样可以通过具有通过以适当的方式配置卷积引擎(例如,图1中所示的卷积引擎108)来实现的解卷积(也称为卷积转置)层的扩展逻辑712来实现。
[0180]
由扩展逻辑712执行的功能在图8中示意性地示出。在图8中,对归约的稀疏性掩码张量804执行2
×
2上采样,例如最近邻上采样,以便生成稀疏性掩码张量505。对于归约的稀疏性掩码张量804中的每个二进制“0”,稀疏性掩码张量包括对应的2
×
2组二进制“0”。如本文所述,二进制“0”在图8中以阴影示出。稀疏性掩码张量505具有与系数张量502相同的维度(即,8
×
8)。
[0181]
修剪逻辑402b包括乘法逻辑714,该乘法逻辑被配置为执行稀疏性掩码张量和输入的系数集wj的逐元素乘法,如参考图7a描述的乘法逻辑714所述。由于稀疏性掩码张量包括多组二进制“0”,因此稀疏性将应用于系数集wj的系数组。修剪逻辑402b的输出为已经应用稀疏性的一组更新的系数w
′j506。例如,乘法逻辑714可以根据等式(6)执行乘法,其中expansion(step(reduction(abs(wj))-τ))表示由扩展逻辑712输出的二进制张量。
[0182]w′j=expansion(step(reduction(abs(wj))-τ))*wjꢀꢀꢀꢀꢀꢀꢀ
(6)
[0183]
图7d示出了用于应用结构化稀疏性的替代的示例性修剪逻辑。在一些示例中,图4和图5中示出的修剪逻辑402具有参考图7d描述的修剪逻辑402d的属性。应当理解,图7d中所示的修剪逻辑402d仅仅是被配置为将结构化稀疏性应用于系数集的逻辑的一个示例。其他形式的逻辑可以用来将结构化稀疏性应用于系数集。
[0184]
如参考图7a所述,图7d中所示的修剪逻辑402d的输入包括wj502和sj504。图7d中所示的修剪逻辑402d还包括归一化逻辑704,该归一化逻辑执行与参考图7a描述的归一化逻辑704相同的功能。
[0185]
修剪逻辑402d包括逻辑716,该逻辑被配置为确定系数集502中的系数的平均值并且包括减法逻辑708d,以从输入的系数集值502中的每个系数值中减去由逻辑716确定的平均值
[0186]
修剪逻辑702还包括逻辑700,该逻辑被配置为确定减法逻辑708d输出中的每个值的绝对值。以此方式,单元700的输出中的每个值为正整数值。
[0187]
修剪逻辑702包括归约逻辑702,该归约逻辑执行与参考图7b描述的归约逻辑702相同的功能。也就是说,归约逻辑702被配置为将从逻辑700接收的系数集划分为系数组,并且用单个值表示每个系数组。例如,一个组的单个值可以是所述组内的最大系数值。该过程被称为“最大池化”。归约逻辑702的输出是归约张量,表示系数集的张量的维度是该归约张量的一个或多个维度的整数倍,该整数大于1。归约张量中的每个值表示输入到归约逻辑702的系数集的系数组。
[0188]
与参考图7c描述的修剪逻辑402c一样,当系数集中的系数正态分布时,图7d中所示的修剪逻辑402d可能特别合适。然而,当对正态分布的值集执行归约,例如最大池化或全局最大池化时,这些值的分布接近gumbel分布。gumbel分布可以用比例参数β和位置参数来描述。因此,修剪逻辑402d包括逻辑718,该逻辑被配置为根据等式(7)确定归约逻辑702的输出的比例参数并且包括逻辑720,该逻辑被配置为根据
等式(8)确定归约逻辑702的输出的定位参数其中γ是euler-mascheroni常数(即,0.577216-四舍五入到小数点后六位)。
[0189][0190][0191]
图7d中所示的修剪逻辑702包括分位数逻辑706-3。分位数逻辑702可以使用可微函数,使用分别由逻辑718和逻辑720确定的比例参数和位置参数来对归约张量中的值集进行建模。分位数逻辑706-3被配置为根据稀疏性参数来确定阈值τ。
[0192]
例如,这可以使用根据等式(9)的可微函数来实现。
[0193][0194]
图7d中所示的修剪逻辑702包括归约逻辑708e,该归约逻辑被配置为从归约逻辑702输出的归约张量中的每个值中减去阈值τ。因此,具有小于阈值τ的值的归约张量中的任何值将由负数表示,而具有大于阈值τ的值的归约张量中的任何值将由正数表示。以此方式,修剪逻辑402d已识别归约张量中的最低显著性值。在该示例中,归约张量中的最低显著性值是低于阈值τ的那些值。归约张量中的最低显著性值对应于系数集中的最低显著性的系数组(例如,系数集中具有最低显著性的系数组)。
[0195]
修剪逻辑402d包括步骤逻辑710,该步骤逻辑被配置为将减法逻辑708e的输出中的每个负系数值转换为零,并且将减法逻辑708e的输出中的每个正系数值转换为一。实现这一点的一个示例性方式是使用阶跃函数。例如,阶跃函数可以针对负输入值输出值0,并且针对正输入值输出值1。步骤逻辑710的输出是具有与归约张量相同的维度的二进制张量。二进制张量是由二进制值0和1组成的张量。所述二进制张量可以被称为归约的稀疏性掩码张量。由分位数逻辑706-3、逻辑718、逻辑720、减法逻辑708e和步骤逻辑710执行的功能可以统称为掩码生成802。
[0196]
图7d中所示的修剪逻辑402d包括扩展逻辑712,该扩展逻辑被配置为扩展归约的稀疏性掩码张量,以便生成与输入到归约逻辑702的系数张量具有相同维度的稀疏性掩码张量,如参考图7b所示的扩展逻辑712所述。由扩展逻辑712输出的二进制张量可以用作“稀疏性掩码”,并且因此在本文中可以被称为稀疏性掩码张量。
[0197]
修剪逻辑402d包括乘法逻辑714,该乘法逻辑被配置为执行稀疏性掩码张量和输入的系数集wj的逐元素乘法,如参考图7a描述的乘法逻辑714所述。由于稀疏性掩码张量包括多组二进制“0”,因此稀疏性将应用于系数集wj的系数组。修剪逻辑402d的输出为已经应用稀疏性的一组更新的系数w
′j506。例如,乘法逻辑714可以根据等式(10)执行乘法,其中表示由扩展逻辑712输出的二进制张量。
[0198][0199]
如本文所述,当系数集中的系数正常分布时,参考图7d描述的修剪逻辑402d可能特别合适。因此,可以测试或推断系数集wj的分布,以便决定使用修剪逻辑的哪种实现方式
来将结构化稀疏性应用于那些系数(例如,参考图7b或图7d描述的修剪逻辑)。也就是说,如果系数集不正常分布,则可优选地使用参考图7b描述的修剪逻辑来应用稀疏性。如果系数集是(或大致是)正态分布,则可优选地使用参考图7d描述的修剪逻辑来应用稀疏性。
[0200]
如本文所述,图7d提供了一个示例,其中归约逻辑702对一组正态分布的值执行归约,例如最大池化或全局最大池化,使得这些值的分布接近gumbel分布。gumbel分布可以被称为极值分布。应当理解,可以使用其他类型的极值分布来代替gumbel分布,诸如weibull分布或frechet分布。在这些示例中,可以修改图7d中所描绘的逻辑,使得分位数逻辑对适当的分布进行建模,以便确定阈值。应当理解,可以由归约逻辑702执行其他类型的归约,例如均值、众数或中值池化,使得正态分布的值集接近不同类型的分布。在这些示例中,可以修改图7d中所描绘的逻辑,使得分位数逻辑对适当的分布进行建模,以便确定阈值。
[0201]
返回图5,更新的系数集w
′j506可以直接从修剪逻辑402写入压缩逻辑404以供压缩。在其他示例中,在被读入压缩逻辑404进行压缩之前,更新的系数集w
′j506可以首先被写回存储器,诸如图4中的存储器104。
[0202]
图14b至图14d示出了根据本文所述的原理应用于系数集的结构化稀疏性的一些示例。图14b至图14d中所示的系数集可以由全连接层使用。在图14b至图14d中,系数信道被描绘为系数集的水平行,并且系数滤波器被描绘为系数集的竖直列。在图14b至图14d中,使用阴影来示出稀疏的系数。在图14b至图14d中的每一个图中,稀疏性已应用于如本文所述的系数组。在图14b中,每一组包括2
×
2的系数张量。在图14c中,每一组包括系数信道。在图14d中,每一组包括系数的滤波器。
[0203]
压缩逻辑404被配置为根据与系数组配准的压缩方案来压缩更新的系数集w
′j,以便通过整数个一个或多个压缩值来表示每个系数组。这是图6中的方法步骤604。
[0204]
压缩方案可以是spgc8压缩方案。如本文参考图3a所述,spgc8压缩方案通过压缩这些系数的多个子集来压缩系数集。由修剪逻辑402应用稀疏性的每个系数组可以包括根据压缩方案的系数集的一个或多个系数子集。例如,每一组可以包括n个系数,以及根据压缩方案的每个子集可以包括m个系数,其中m大于1并且n是m的整数倍。在一些示例中,n等于m。也就是说,在一些示例中,每个系数组是根据压缩方案的系数的子集。在其他示例中,n可以大于m。在这些示例中,可以通过压缩多个相邻或交织的系数子集来压缩每个系数组。例如,n可以等于2m。每一组可以包括16个系数,并且每个子集可以包括8个系数。以此方式,可以通过压缩两个相邻的系数子集来压缩每一组。替代地,可以通过如本文所述压缩两个交织的系数子集来压缩每一组。
[0205]
应当理解,n不必是系数集中的系数数量的整数倍。在n不是系数集中的系数数量的倍数的情况下,一旦系数集被分成n个系数的组,其余系数就可以用零系数填充(例如“零填充”),以便根据压缩方案形成待压缩的n个系数的最终(例如,其余的)组。
[0206]
压缩逻辑404的输出可以存储在存储器(诸如图4中所示的存储器104)中,以供随后在神经网络中使用。例如,在被存储以供随后在神经网络的“运行时”实现方式中使用之前,可以在“离线阶段”(例如,在“设计时间”)如参考图5和图6所描述的那样压缩系数集。例如,图5中由压缩逻辑404输出的压缩的系数集可以形成神经网络的输入(例如,对如图1所示的神经网络的实现方式的输入101)。
[0207]
参考图3b可以理解根据与已应用稀疏性的系数集配准的压缩方案来压缩系数组
的优点。
[0208]
图3b示出了根据压缩方案的稀疏的系数子集的压缩。该压缩方案可以为如本文所述的spgc8压缩方案。在此,考虑了稀疏的系数子集310,其中子集中的所有八个系数具有值0(例如,由于向包括所述系数子集的系数组应用稀疏性)。如本文所述,通常,在未压缩形式中,每个系数都可以16位二进制数编码,如312处所示,但可以选择更多或更少的位。因此,在该示例中,需要128位来编码八个零系数的稀疏子集,如312中所示。如本文所述,根据spgc8压缩方案,压缩的系数子集可以由标头数据和多个主体部分表示。在稀疏的系数子集310中,最大系数值为0,该值可以使用0位数据来编码。因此,在该示例中,标头数据指示0位将用于编码系数子集中的每个系数。标头数据本身具有位成本,例如,1位(例如,以二进制编码数字0只需1位,每个主体部分将包括的位数),而每个主体部分使用0位来对系数值进行编码。在该示例中,系数的子集310因此可以使用1位数据以压缩形式编码,如314所示,而不是以128位的未压缩形式编码,如312所示。因此,根据本文所述的原理压缩系数集以供随后神经网络中使用是非常有利的,因为可以实现大压缩比,可以显著减少系数集的存储器占用,并且可以显著减少从存储器读取系数集所需的存储器带宽。另外,根据本文所述的原理压缩随后在神经网络中使用的系数集,显著减少了模型文件/图形/神经网络表示的存储器占用。
[0209]
另一方面,如果以非结构化方式应用稀疏性,并且甚至系数子集中的系数中的一个系数为非零,则压缩方案将使用一个或多个位来编码所述子集中的每个系数值,因此可能显著增加压缩子集的存储器占用。例如,根据参考图3a参考子集302解释的推理,系数31、0、0、0、0、0、0、0的子集需要43位进行编码(因为最大值31需要5位进行编码,因此每个主体部分将使用5位进行编码)。因此,将稀疏性应用于系数组以便使这些组的系数子集被压缩以仅包括“0”系数值是特别有利的。
[0210]
应当理解,存在许多其他合适的压缩方案,并且本文所述的原理不限于spgc8压缩方案的应用。例如,本文所述的原理可以适用于通过压缩这些系数集的多个子集来压缩系数集的任何压缩方案。
[0211]
应当理解,本文所述的结构化稀疏性原理适用于卷积层、全连接层和被配置为组合一组合适格式的系数与所述层的数据输入的任何其他类型的神经网络层的系数集。
[0212]
信道修剪
[0213]
图4中所示的数据处理系统410的逻辑单元可以其他方式使用,以便解决本文所识别的一个或多个问题。例如,系数识别逻辑412可以用于执行信道修剪。
[0214]
图11a示出了根据本文所述的原理在卷积层中的信道修剪的示例性应用程序。图11a示出了两个卷积层,200-1a和200-2a。应当理解,神经网络可包括任何数量的层。对层200-2a的数据输入取决于层200-1a的输出数据,在本文中称为“前一层”。也就是说,对层200-2a的数据输入可以为从前一层200-1a输出的数据。替代地,在层200-1a和层200-2a之间可存在另外的处理逻辑(诸如对应元素加法、减法或乘法逻辑,未示出),并且对输出数据200-1a执行运算以便提供输入数据200-2a。
[0215]
图11a中所示的每一层被配置为将相应的滤波器集合与对层的数据输入进行组合,以便形成该层的输出数据。例如,层200-2a被配置为将一组滤波器204-2a与对层的数据输入202-2a进行组合,以便形成用于层的输出数据206-2a。层的滤波器集合中的每个滤波
器可以包括所述层的系数集中的多个系数。层的滤波器集合中的每一个滤波器可包括不同的多个系数。也就是说,每个滤波器可以包括系数集的唯一的系数集。替代地,层的滤波器集合中的两个或更多个滤波器可以包括相同的多个系数。也就是说,一组滤波器中的两个或更多个滤波器可以彼此相同。
[0216]
图11a中所示的每一层的滤波器集合包括多个系数信道,滤波器集中的每个系数信道对应于该层的数据输入中的相应的数据信道。例如,输入数据202-2a包括四个信道并且滤波器集合204-2a中的每个滤波器(例如,每个单独的滤波器)包括四个系数信道。滤波器集合204-2a的第一或最上面的滤波器包括系数信道a、b、c和d,它们分别对应于输入数据202-2a的信道a、b、c、d。为简单起见,未标记滤波器集合204-2a中的另外两个滤波器中的每一个滤波器的系数信道,但应当理解,相同的原理适用于那些滤波器。因此,层的滤波器集合(例如,作为集合)可以被描述为包括多个系数信道,滤波器集合(例如,作为集合)的每个系数信道包括对应于所述层的数据输入中的相同的数据信道的滤波器集合的每个滤波器(例如,每个单独的滤波器)的系数信道。
[0217]
图11a中所示的每一层的输出数据包括多个数据信道,每个数据信道对应于所述层的滤波器集合的相应的滤波器。也就是说,层的滤波器集合中的每一个滤波器可负责在所述层的输出数据中形成数据信道。例如,层200-2a的滤波器集合204-2a包括三个滤波器,并且所述层的输出数据206-2a包括三个数据信道。滤波器集合204-2a中的三个滤波器中的每一个滤波器可以对应于(例如,并且负责形成)输出数据206-2a中的数据信道中的相应的一个数据信道。
[0218]
图12示出了根据本文所述的原理使用信道修剪训练神经网络的方法。
[0219]
在步骤1202中,识别层的滤波器集合的目标系数信道。该步骤由如图4所示的系数识别逻辑412执行。例如,在图11a中,以阴影示出了滤波器集合204-2a的所识别的目标系数信道。目标系数信道包括滤波器集合204-2a的第一或最上面的滤波器的系数信道d,以及与输入数据202-2a中的相同的数据信道对应的滤波器集合204-2a中的另外两个滤波器中的系数信道。图11a示出了在滤波器集合204-2a中对一个目标系数信道的识别,但应当理解,在步骤1202中,可以在一组滤波器中识别任何数量的目标系数信道。
[0220]
可以根据稀疏性参数来识别目标系数信道。例如,稀疏性参数可以指示待应用于滤波器集合204-2a的稀疏性百分比,例如25%。系数识别逻辑412可以识别可以通过向阴影系数信道应用稀疏性来实现滤波器集合204-2a中的25%稀疏性。目标系数信道可以为滤波器集合中的最低显著性系数信道。系数信道可以使用类似于分别参考图7b和图7d中所示的修剪逻辑402b或402d描述的逻辑,以便识别滤波器集合中的一个或多个最低显著性系数信道。例如,除乘法逻辑714之外,系数识别逻辑可以包括与图7b和图7d中分别示出的修剪逻辑702b或702d相同的逻辑单位布置,以便提供二进制掩码,其中目标信道由二进制
‘0’
识别。替代地,系数识别逻辑412可以使滤波器集合使用修剪逻辑402b或402d本身进行处理,以便识别目标系数信道。应当理解,在本文所述的信道修剪示例中,稀疏性实际上可以或可以不应用于所述目标系数信道。例如,系数识别逻辑可以根据用于步骤1204和步骤1206的稀疏性参数识别、标记或确定目标系数信道,而实际上不将稀疏性应用于目标系数信道。替代地,在执行步骤1204和步骤1206之前,可以在神经网络的测试实现方式中将稀疏性应用于目标系数信道,以便确定移除所述系数信道将如何影响网络的准确性,如本文将进一步
详细描述的。
[0221]
在步骤1204中,识别对层的数据输入中的多个数据信道中的目标数据信道。该步骤由如图4所示的系数识别逻辑412执行。目标数据信道是对应于滤波器集合的目标系数信道的数据信道。例如,在图11a中,输入数据202-2a中的所识别目标数据信道为数据信道d,并且以阴影示出。
[0222]
步骤1202和步骤1204可以在“离线”、“训练”或“设计”阶段由系数识别逻辑412执行。系数识别逻辑412可以将所识别的目标系数信道和所识别的目标数据信道报告给数据处理系统410。在步骤1206中,神经网络的运行时实现方式被配置为其中前一层的滤波器集合不包括对应于目标数据信道的所述滤波器。因而,当在数据处理系统上执行神经网络的运行时实现方式时,将前一层的一组滤波器与前一层的数据输入进行组合,不会在对应于目标数据信道的前一层的输出数据中形成数据信道。步骤1206可以由数据处理系统410自身执行,该数据处理系统分别配置神经网络102-1或102-2的软件和/或硬件实现方式。步骤1206还可以包括将前一层不包括对应于目标数据信道的滤波器的滤波器集合存储在存储器(例如,图4中所示的存储器102)中,以供神经网络的运行时实现方式的随后使用。步骤1206还可以包括配置神经网络的运行时实现方式,其中层的滤波器集合中的每一个滤波器不包括目标系数信道。步骤1206还可以包括将不包括目标系数信道的层的滤波器集合存储在存储器(例如,图4中所示的存储器102)中,以供神经网络的运行时实现方式的随后使用。
[0223]
例如,在图11a中,前一层200-1a的滤波器集合204-1a中的滤波器1100a(以阴影示出)对应于所识别的目标数据信道(例如,输入数据204-2a中的数据信道d)。这是因为,如本文所述,层的滤波器集合中的每一个滤波器可负责在所述层的输出数据中形成数据信道中的相应的一个数据信道。对层200-2a的数据输入取决于前一层200-1a的输出数据。因此,在图11a中,滤波器1100a负责在输出数据206-1a中形成数据信道d。输入数据202-2a中的数据信道d取决于输出数据206-1a中的数据信道d。以此方式,滤波器1100a对应于输入数据202-2a中的数据信道d。通过配置其中前一层200-1a的滤波器集合不包括滤波器1100a的神经网络的运行时实现方式,当在数据处理系统上执行神经网络的运行时实现方式时,输出数据206-1a中的数据信道d将不会形成。因此,输入数据202-2a将不包括数据信道d。因此,当配置神经网络的运行时实现方式时,也可以从204-2a中的滤波器集合中省略以阴影示出的目标系数信道。替代地,目标系数信道可以包括在204-2a中的滤波器集合中,但是,当在数据处理系统上执行神经网络的运行时实现方式时,可以绕过涉及目标系数信道中的系数的任何计算。
[0224]
如本文所述,图11a示出了卷积层中信道修剪的示例性应用程序。尽管如此,由其他类型的神经网络层,诸如全连接层使用的系数集也可以布置为如本文所述的一组滤波器。因此,应当理解,本文所述的原理适用于卷积层、全连接层和被配置为组合一组合适格式的系数与所述层的数据输入的任何其他类型的神经网络层的系数集。
[0225]
例如,图11b示出了根据本文所述的原理的全连接层中的信道修剪的示例性应用程序。图11b示出了两个全连接层,200-1b和200-2b。应当理解,神经网络可包括任何数量的层。对层200-2b的数据输入取决于层200-1b的输出数据,在本文中称为“前一层”。也就是说,对层200-2b的数据输入可以为从前一层200-1b输出的数据。替代地,在对输出数据200-1b执行运算的层200-1b和200-2b之间可以存在另外的处理逻辑(诸如对应元素加法、减法
或乘法逻辑,未示出),以便提供输入数据200-2b。
[0226]
图11b中所示的每一层被配置为将相应的滤波器集合与对层的数据输入进行组合,以便形成该层的输出数据。例如,层200-2b被配置为将一组滤波器204-2b与对层的数据输入202-2b进行组合,以便形成用于层的输出数据206-2b。在图11b中,将各个滤波器描绘为该组滤波器的竖直列。也就是说,一组滤波器204-2b包括三个滤波器。层的滤波器集合中的每个滤波器可以包括所述层的系数集中的多个系数。层的滤波器集合中的每一个滤波器可包括不同的多个系数。也就是说,每个滤波器可以包括系数集的唯一的系数集。替代地,层的滤波器集合中的两个或更多个滤波器可以包括相同的多个系数。也就是说,一组滤波器中的两个或更多个滤波器可以彼此相同。
[0227]
图11b中所示的每一层的滤波器集合包括多个系数信道,滤波器集中的每个系数信道对应于该层的数据输入中的相应的数据信道。在图11b中,系数信道被描绘为滤波器集合的水平行。也就是说,一组滤波器204-2b包括四个系数信道。在图11b中,数据信道被描绘为输入和输出数据集合的竖直列。也就是说,输入数据202-2b包括四个系数信道。在图11b中,滤波器集合204-2b包括系数信道a、b、c和d,分别对应于输入数据202-2b的信道a、b、c、d。
[0228]
图11b中所示的每一层的输出数据包括多个数据信道,每个数据信道对应于所述层的滤波器集合的相应的滤波器。也就是说,层的滤波器集合中的每一个滤波器可负责在所述层的输出数据中形成数据信道。例如,层200-2a的滤波器集合204-2b包括三个滤波器(示出为竖直列),并且所述层的输出数据206-2b包括三个数据信道(示出为竖直列)。一组滤波器204-2b中的三个滤波器中的每一个滤波器可以对应于(例如,并且负责形成)输出数据206-2b中的相应的一个数据信道。
[0229]
再次参考图12,在步骤1202中,如本文所述识别层的滤波器集合的目标系数信道。例如,在图11b中,滤波器集合204-2b的所识别的目标系数信道为系数信道a,并且以阴影示出。在步骤1204中,如本文所述识别对层的数据输入中的多个数据信道中的目标数据信道。例如,在图11b中,输入数据202-2b中的所识别目标数据信道为数据信道a,并且以阴影示出。在步骤1206中,神经网络的运行时实现方式被配置为其中前一层的滤波器集合不包括对应于如本文所述的目标数据信道的所述滤波器。例如,在图11b中,前一层200-1a的一组滤波器204-1b中的滤波器1100b(以阴影示出)对应于所识别的目标数据信道(例如,输入数据204-2b中的数据信道a)。
[0230]
影响神经网络性能的两个不同的带宽要求是权重带宽和激活带宽。权重带宽涉及从存储器读取权重所需的带宽。激活带宽涉及从存储器读取对层的输入数据并且将所述层的对应的输出数据写回存储器所需的带宽。通过执行信道修剪,可以减少权重带宽和激活带宽。权重带宽减少,因为:层的较少的滤波器(例如,在配置神经网络的运行时实现方式时,一组滤波器中的一个或多个滤波器被省略)和/或层的较小的滤波器(例如,在配置神经网络的运行时实现方式时,一组滤波器的一个或多个系数信道被省略),所述层的系数集中的系数数量减少,并且因此在执行神经网络的运行时实现方式时从存储器中读取的系数也减少。出于同样的原因,信道修剪还减少了用于神经网络中的系数集的总存储器占用(例如,当存储在存储器104中时,如图1和图4所示)。激活带宽减少是因为,因层的较少的滤波器(例如,在配置神经网络的运行时实现方式时,一组滤波器中的一个或多个滤波器被省
略),所述层的输出中的信道数量减少。这意味着将较少的输出数据写入存储器,并且从存储器读取后续层的较少的输入数据。信道修剪还通过减少待执行的运算的数量(例如,系数和相应的输入数据值之间的乘法)来减少神经网络的计算要求。
[0231]
可学习的稀疏性参数
[0232]
本文已经描述了“非结构化稀疏性”、“结构化稀疏性”和“信道修剪”的方法。在每种方法中,已经参考稀疏性参数。如本文所述,可以根据系数集中的多少比例的系数可以设置为零或移除的假设来(例如,由用户略微任意地)设置稀疏性参数,而不会显著影响神经网络的准确性。即便如此,通过学习稀疏性参数的值,例如稀疏性参数的最佳值,可以在所描述的“稀疏性”、“结构化稀疏性”和“信道修剪”方法中的每一种方法中获得另外的优点。如本文所述,作为神经网络的训练过程的一部分,可以学习或训练稀疏性参数。这可以通过在逻辑上布置图4的修剪逻辑402、网络准确性逻辑408和稀疏性学习逻辑406来实现,如图9所示。网络准确性逻辑408和稀疏性学习逻辑406可以统称为学习逻辑414。
[0233]
图9示出了数据处理系统,该数据处理系统根据本文所述的原理实现用于通过训练来学习稀疏性参数的神经网络的测试实现方式。图9所示的神经网络的测试实现方式包括三个神经网络层900-1、900-2和900-j。神经网络层900-1、900-2和900-j可以在硬件、软件或它们的任何组合中实现(例如,在神经网络102-1的软件实现方式和/或神经网络102-2的硬件实现方式中实现,如图4所示)。尽管图9中示出了三个神经网络层,但应当理解,神经网络的测试实现方式可包括任何数量的层。神经网络的测试实现方式可包括一个或多个卷积层、一个或多个全连接层和/或被配置为将系数集与输入到所述层的相应的数据值进行组合的任何其他类型的神经网络层中的一者或多者。也就是说,应当理解,本文所述的可学习的稀疏性参数原理适用于卷积层、全连接层和被配置为组合一组合适格式的系数与所述层的数据输入的任何其他类型的神经网络层的系数集。应当理解,神经网络的测试实现方式还可以包括其他类型的层(未示出),这些层未被配置为将系数集与对那些层(诸如激活层和对应元素层)的数据输入进行组合。
[0234]
神经网络的测试实现方式还包括修剪逻辑402-1、402-2和402-j的三个实例,其中每一者接收用于相应的神经网络层900-1、900-2和900-j的相应的系数集w1、w2、wj和相应的稀疏性参数s1、s2、sj作为输入。如本文所述,系数集可以呈任何合适的格式。稀疏性参数可以指示待由修剪逻辑应用于系数集的稀疏性水平。例如,稀疏性参数可以指示待由修剪逻辑应用稀疏性的系数集的百分比、分数或部分。
[0235]
图9中所示的修剪逻辑可以具有与分别参考图7a、图7b、图7c和图7d所描述的修剪逻辑402a、402b、402c或402d中的任一者相同的特征。在神经网络的测试实现方式中使用的修剪逻辑的类型可取决于训练稀疏性参数的方法(例如,“非结构化稀疏性”、“结构化稀疏性”或“信道修剪”)和/或由修剪逻辑接收的系数集的分布(例如,所述系数集是否是或近似为正态分布)。例如,如果使用图9中所示的神经网络的测试实现方式来学习用于将结构化稀疏性应用于正态分布的系数集的稀疏性参数,则修剪逻辑402-1、402-2和402-j的实例可具有与参考图7d描述的修剪逻辑702d相同的特征。
[0236]
图9中所示的神经网络的测试实现方式还包括网络准确性逻辑408,该网络准确性逻辑被配置为评估神经网络的测试实现方式的准确性,并且包括稀疏性学习逻辑406,该稀疏性学习逻辑被配置为根据网络的准确性来更新稀疏性参数s1、s2、sj中的一个或多个稀疏
性参数,如本文将进一步详细描述的。
[0237]
图10示出了通过根据本文所述的原理训练神经网络来学习稀疏性参数的方法。图10的步骤1002、1004、1006、1008和1010可以使用图9中所示的神经网络的测试实现方式来执行。在以下描述中,参考神经网络层900-j来描述学习稀疏性的方法。应当理解,对于神经网络的测试实现方式的其他层中的每一层,可以同时或按顺序执行相同的方法。
[0238]
在步骤1002中,根据稀疏性参数sj将稀疏性应用于系数集wj的一个或多个系数。该步骤由修剪逻辑402-j执行。这可以通过将稀疏性算法应用于系数集来实现。稀疏性可以由修剪逻辑402-j以本文参考“非结构化稀疏性”、“结构化稀疏性”或“信道修剪”方法所描述的方式来应用。
[0239]
在步骤1004中,神经网络的测试实现方式使用由修剪逻辑402-j输出的系数集对训练输入数据进行运算,以便形成训练输出数据。该步骤可被描述为前向传播。在图9中以实线箭头示出了前向传播。例如,在图9中,神经网络层900-j将由修剪逻辑402-j输出的系数集与输入到所述层中的数据进行组合,以便形成所述层的输出数据。在图9所示的示例中,层序列中最后一层(例如,层900-j)的输出数据将作为训练输出数据。
[0240]
在步骤1006中,根据训练输出数据来评估神经网络的准确性。该步骤由网络准确性逻辑408执行。可以通过将训练输出数据与训练输入数据的验证的输出数据进行比较来评估神经网络的准确性。可以在步骤1002中应用稀疏性之前通过使用原始系数集(例如,在步骤1002中人工地应用稀疏性之前的系数集)对训练输入数据操作神经网络的测试实现方式来形成验证的输出数据。在另一个示例中,验证的输出数据可以与训练输入数据一起提供。例如,在训练输入数据包括许多图像的图像分类应用程序中,验证的输出数据可以包括这些图像中的每一个图像的预先确定的类别或类别集合。在一个示例中,步骤1006包括使用取决于训练输出数据(例如,根据修剪逻辑402-j输出的系数集形成的训练输出数据,其中根据稀疏性参数sj已将稀疏性应用于系数集wj的系数中的一个或多个系数)和验证的输出数据的交叉熵损失方程来评估神经网络的准确性。例如,可以通过使用交叉熵损失函数确定训练输出数据的损失来评估神经网络的准确性。
[0241]
在步骤1008中,根据在步骤1006中评估的神经网络的准确性来更新稀疏性参数sj。该步骤由稀疏性学习逻辑406执行。该步骤可被描述为网络的反向传播。步骤1008可以包括根据参数优化技术来更新稀疏性参数sj,该参数优化技术被配置为平衡待应用于系数集wj的稀疏性水平,如稀疏性参数sj与网络的准确性的关系所示。用于层的稀疏性参数为可学习参数,该可学习参数可以与用于所述层的系数集的等效方式更新。在一个示例中,参数优化技术使用取决于稀疏性参数和网络准确性的交叉熵损失方程。例如,可以根据使用交叉熵损失函数通过反向传播和梯度下降确定的训练输出数据的损失来更新稀疏性参数sj。反向传播可以被认为是关于交叉熵损失函数计算稀疏性参数的梯度的过程。这可以通过使用链式法则从交叉熵损失函数的最终输出开始并且反向计算稀疏性参数来实现sj。一旦梯度已知,就可以使用梯度下降(或其导数)算法根据其通过反向传播计算的梯度来更新稀疏性参数。可以根据学习速率参数来执行梯度下降,该学习速率参数指示在训练过程的每次迭代中系数可以根据稀疏性参数改变的程度。
[0242]
步骤1008可以根据加权值来执行,该加权值被配置为使神经网络的测试实现方式倾向于保持网络的准确性或者提高应用于系数集的稀疏性水平,如稀疏性参数所指示。加
权值可以为交叉熵损失方程中的因子。加权值可以由数据处理系统的用户设置。例如,可以根据将在上面执行神经网络的运行时实现方式的数据处理系统上可用的存储器和/或处理资源来设置加权值。例如,如果将在上面执行神经网络的运行时实现方式的数据处理系统上可用的存储器和/或处理资源相对较小,则加权值可用于将方法倾向于提高应用于系数集的稀疏性水平,如稀疏性参数所指示的。
[0243]
步骤1008可以根据待由更新的稀疏性参数指示的限定的最大稀疏性水平来执行。限定的最大稀疏性水平可以为交叉熵损失方程中的因子。最大稀疏性水平可以由数据处理系统的用户设置。例如,如果将在上面执行神经网络的运行时实现方式的数据处理系统上可用的存储器和/或处理资源相对较小,则待由更新的稀疏性参数指示的限定的最大稀疏性水平可被设置为相对较高的最大水平,以便允许该方法将应用于由稀疏性参数指示的系数集的稀疏性水平提高至相对较高的水平。
[0244]
如本文所述,神经网络的测试实现方式可包括多个层,每一层被配置为将相应的系数集与所述层的相应的输入数据值进行组合,以便形成所述层的输出。多个层中的每一层的系数集中的系数的数量可在层与层之间变化。在步骤1008中,可以针对多层中的每一层更新相应的稀疏性参数。在这些示例中,步骤1008还可以包括根据每一层的系数集中的系数数量来更新多个层中每一层的稀疏性参数,使得神经网络的测试实现方式倾向于更新相应的稀疏性参数,以便指示待应用于系数集的更高水平的稀疏性,相对于包括较少系数的系数集,该系数集包括较多的系数。这是因为包括大量系数的系数集通常包括较大比例的冗余系数。这意味着相对于包括较少系数的系数集,较大的系数集可能能够在网络的准确性受到显著影响之前应用更大水平的稀疏性。
[0245]
在一个具体示例中,可以使用如等式(11)所定义的交叉熵损失方程来执行步骤1006和步骤1008。
[0246][0247]
在等式(11)中,表示具有i对输入图像xi和验证的输出标签yi的训练输入数据集神经网络的测试实现方式,执行神经网络模型f,解决了将输入映射到目标标签的问题。表示j层的系数集wj,并且表示j层的稀疏性参数表示j层的稀疏性参数是由等式(12)定义的交叉熵损失,其中k定义每个类别概率输出的指数,λ∥w∥1是l1正则化项,并且是由等式(13)定义的交叉熵耦合稀疏性损失。
[0248][0249][0250]
在步骤1008中执行的反向传播和梯度的过程可涉及致力于或寻找损失函数中的
局部最小值,诸如等式(12)所示。稀疏性学习逻辑406可以评估前向传播中使用的系数集和稀疏性参数的损失函数的梯度,以便确定应该如何更新系数集和/或稀疏性参数来朝向损失函数的局部最小值移动。例如,在等式(13)中,最小化项-log(1-c(w,s))可以找到多个层中的每一层的稀疏性参数的新值,其指示待应用于神经网络的系数集的整体降低的稀疏性水平。最小化项-log(c(w,s))可以找到多个层中的每一层的稀疏性参数的新值,其指示待应用于神经网络的系数集的整体提高的稀疏性水平。
[0251]
在等式(13)中,α为加权值,该加权值被配置为倾向于保持网络的准确性或提高应用于系数集的稀疏性水平,如稀疏性参数所指示。加权值α可以取介于0和1之间的值。α的较低值(例如,相对更接近于0)可倾向于提高应用于系数集的稀疏性水平,如稀疏性参数所示(例如,可能会降低网络准确性)。α的较高值(例如,相对更接近于1)可倾向于保持网络的准确性。
[0252]
在等式(13)中,c(w,s),由以下等式(14)定义,是用于根据多个层中的每一层的系数集中的系数数量来更新稀疏性参数的函数,使得步骤1008倾向于更新相应的稀疏性参数,以便指示待应用于系数集的更高水平的稀疏性,相对于包括较少系数的系数集,该系数集包括较多的系数。
[0253][0254]
在变型形式中,等式(13)可以被修改以便引入将由更新的稀疏性参数指示的定义的最大稀疏性水平θ。这种变化如等式(15)所示。
[0255][0256]
将由更新的稀疏性参数θ指示的最大稀疏性水平可以表示待由修剪逻辑应用稀疏性的系数集的最大百分比、分数或部分。与稀疏性参数一样,稀疏性的最大水平θ可以取在0与1之间的值。例如,0.7的最大稀疏性水平θ可限定待由更新的稀疏性参数指示不超过70%的稀疏性。
[0257]
返回图9,在神经网络的测试实现方式包括使用不可微分位数方法的修剪逻辑的示例中(例如,分别参考图7a和图7b描述的修剪逻辑702a或702b),稀疏性参数sj可以在步骤1008中由稀疏性学习逻辑406直接更新(在图9中由稀疏性学习逻辑406和稀疏性参数sj之间的点划线示出)。在神经网络的测试实现方式包括使用可微分位数函数(例如,分别参考图7c和图7d描述的修剪逻辑702c或702d)的修剪逻辑的示例中,可以在步骤1008中通过将由稀疏性学习逻辑406输出的一个或多个梯度通过网络准确性逻辑408、神经网络层900-j和修剪逻辑402-j反向传播来更新稀疏性参数sj(如图9中虚线所示)。也就是说,当在步骤1002中应用稀疏性时,包括使用可微函数对系数集进行建模,以便根据稀疏性参数来识别阈值,以及根据所述阈值应用稀疏性,可以通过使用可微函数反向传播一个或多个梯度向量来在步骤1008中更新稀疏性参数。
[0258]
在组合的可学习稀疏性参数和信道修剪方法中,可以首先使用本文所述的可学习稀疏性参数方法来训练稀疏性参数。可以通过配置修剪逻辑以将稀疏性应用于系数信道(例如,使用参考图7b或图7d描述的修剪逻辑,其中每个系数信道被视为系数组)来训练稀
疏性参数用于信道修剪。此后,一个或多个目标数据信道可以根据经过训练的稀疏性参数和所执行的信道修剪方法的以下步骤来识别(如可以参考图11a、图11b和图12的描述理解的)。
[0259]
步骤1002、1004、1006和1008可以执行一次。这可被称为“一次性修剪”。替代地,可以迭代地执行步骤1002、1004、1006和1008。也就是说,在第一迭代中,可以根据原始稀疏性参数在步骤1002中应用稀疏性。在每次后续迭代中,可以根据在先前迭代的步骤1008中更新的稀疏性参数在步骤1002中应用稀疏性。系数集也可以通过在每次迭代的步骤1008中的反向传播和梯度下降来更新。在步骤1010中,确定是否已经执行步骤1002、1004、1006和1008的最终迭代。否则,执行步骤1002、1004、1006和1008的进一步迭代。可执行固定次数的迭代。替代地,神经网络的测试实现方式可以被配置为迭代地执行步骤1002、1004、1006和1008,直到满足条件为止。例如,直到满足神经网络的系数集中的目标稀疏性水平。当在步骤1010中确定已执行最终迭代时,该方法前进至步骤1014。
[0260]
在步骤1014中,神经网络的运行时实现方式根据更新的稀疏性参数进行配置。当使用本文所述的“非结构化稀疏性”和“结构化稀疏性”方法时,步骤1014可以包括使用修剪逻辑(例如,图4中所示的修剪逻辑402)来使用更新的稀疏性系数集(例如,最新更新的系数集)来将稀疏性应用于系数集,以便提供稀疏的系数集。在此阶段应该使用与在训练过程中更新稀疏性参数相同的方法来应用稀疏性,例如“非结构化稀疏性”或“结构化稀疏性”。可以将稀疏的系数集写入存储器(例如,图4中的存储器104)以供随后由神经网络的运行时实现方式使用。也就是说,可以在“离线阶段”(例如,在“设计时间”)中如参考图10的步骤1002、1004、1006、1008和1010所描述的那样训练稀疏性参数和系数集。然后,可以根据经过训练的稀疏性参数将稀疏性应用于经过训练的系数集,以便提供经过训练的稀疏的系数集,该系数集被存储以供随后在神经网络的运行时实现方式中使用。例如,经过训练的稀疏系数集可以形成神经网络的输入(例如,对如图1所示的神经网络的实现方式的输入101)。神经网络的运行时实现方式可以由图4中的数据处理系统410实现,该数据处理系统分别配置神经网络102-1或102-2的软件和/或硬件实现方式。
[0261]
当使用本文所述的“信道修剪”方法时,步骤1014可以包括在配置如本文参考图12所述的神经网络的运行时实现方式之前,使用系数识别逻辑412根据更新的稀疏性参数来识别一个或多个目标系数信道。
[0262]
作为神经网络的训练过程的一部分,学习或训练稀疏性参数是有利的,因为可以优化待应用于神经网络的多个层中的每个层的系数集的稀疏性,以便最大化不影响网络准确性的稀疏性,同时保持网络对稀疏性敏感的系数集的密度。
[0263]
图1中所示的神经网络的实现方式、图4、图5和图9的数据处理系统以及图7a、图7b、图7c和图7d中所示的逻辑被示出为包括许多功能块。这仅是示意性的,并不旨在限定此类实体的不同逻辑元件之间的严格划分。每个功能块可以任何合适的方式提供。应当理解,由数据处理系统形成的本文中描述的中间值不需要由数据处理系统在任何时间点物理地生成,并且可以仅仅表示方便地描述由数据处理系统在其输入与输出之间执行的处理的逻辑值。
[0264]
本文中描述的数据处理系统可以在集成电路上的硬件中体现。本文中描述的数据处理系统可被配置为执行本文所述的任何方法。一般来讲,上文所述的功能、方法、技术或
部件中的任一者可在软件、固件、硬件(例如,固定逻辑电路系统)或它们的任何组合中实施。本文可以使用术语“模块”、“功能”、“部件”、“元件”、“单元”、“块”和“逻辑”来概括地表示软件、固件、硬件或其任何组合。在软件实现方式的情况下,模块、功能、部件、元件、单元、块或逻辑表示程序代码,所述程序代码在处理器上执行时执行指定任务。本文中所描述的算法和方法可以由执行代码的一个或多个处理器执行,所述代码使处理器执行算法/方法。计算机可读存储介质的示例包含随机存取存储器(ram)、只读存储器(rom)、光盘、闪存存储器、硬盘存储器以及可以使用磁性、光学和其它技术来存储指令或其它数据并且可以由机器存取的其它存储器设备。
[0265]
如本文中所使用的术语计算机程序代码和计算机可读指令是指供处理器执行的任何种类的可执行代码,包含以机器语言、解释语言或脚本语言表达的代码。可执行代码包含二进制代码、机器代码、字节代码、定义集成电路的代码(例如硬件描述语言或网表),以及用例如c、java或opencl等编程语言码表达的代码。可执行代码可以是例如任何种类的软件、固件、脚本、模块或库,当在虚拟机或其它软件环境中被适当地执行、处理、解释、编译、执行时,这些软件、固件、脚本、模块或库使支持可执行代码的计算机系统的处理器执行由所述代码指定的任务。
[0266]
处理器、计算机或计算机系统可以是任何种类的装置、机器或专用电路,或其集合或一部分,它具有处理能力使得可以执行指令。处理器可以是或包括任何种类的通用或专用处理器,诸如cpu、gpu、nna、片上系统、状态机、媒体处理器、专用集成电路(asic)、可编程逻辑阵列、现场可编程门阵列(fpga)等。计算机或计算机系统可以包括一个或多个处理器。
[0267]
本发明还意图涵盖限定如本文中所描述的硬件的配置的软件,诸如硬件描述语言(hdl)软件,用于设计集成电路或用于配置可编程芯片以执行所需功能。也就是说,可以提供一种上面编码有集成电路定义数据集形式的计算机可读程序代码的计算机可读存储介质,当在集成电路制造系统中处理(即,运行)时,该计算机可读程序代码将该系统配置为制造被配置为执行本文所述任何方法的数据处理系统,或者制造包括本文所述任何设备的数据处理系统。集成电路定义数据集可以是例如集成电路描述。
[0268]
因此,可以提供一种在集成电路制造系统处制造如本文所述的数据处理系统的方法。此外,可以提供一种集成电路定义数据集,该集成电路定义数据集当在集成电路制造系统中被处理时,使制造数据处理系统的方法被执行。
[0269]
集成电路定义数据集可以是计算机代码的形式,例如作为网表,用于配置可编程芯片的代码,作为定义适合于在集成电路中以任何级别制造的硬件描述语言,包含作为寄存器传输级(rtl)代码,作为高级电路表示法(诸如verilog或vhdl),以及作为低级电路表示法(诸如oasis(rtm)和gdsii)。在逻辑上定义适合于在集成电路中制造的硬件的更高级表示法(诸如rtl)可以在计算机系统上处理,所述计算机系统被配置用于在软件环境的上下文中生成集成电路的制造定义,所述软件环境包括电路元件的定义和用于组合这些元件以便生成由所述表示法定义的集成电路的制造定义的规则。如通常软件在计算机系统处执行以便定义机器的情况一样,可能需要一个或多个中间用户步骤(例如,提供命令、变量等),以便将计算机系统配置为生成集成电路的制造定义,以执行定义集成电路以便生成所述集成电路的制造定义的代码。
[0270]
现在将参照图13描述在集成电路制造系统处处理集成电路定义数据集以便将该
系统配置为制造数据处理系统的示例。
[0271]
图13示出了集成电路(ic)制造系统1302的示例,该集成电路制造系统被配置为制造如本文任何示例中描述的数据处理系统。具体地,ic制造系统1302包括布局处理系统1304和集成电路生成系统1306。ic制造系统1302被配置为接收ic定义数据集(例如,定义如本文任何示例中描述的数据处理系统)、处理ic定义数据集以及根据ic定义数据集来生成ic(例如,其体现如本文任何示例中所述的数据处理系统)。通过对ic定义数据集的处理,将ic制造系统1302配置为制造体现如本文任何示例中描述的数据处理系统的集成电路。
[0272]
布局处理系统1304被配置为接收和处理ic定义数据集以确定电路布局。根据ic定义数据集确定电路布局的方法在本领域中是已知的,并且例如可以涉及合成rtl代码以确定要生成的电路的门级表示,例如就逻辑部件(例如nand、nor、and、or、mux和flip-flop部件)而言。通过确定逻辑部件的位置信息,可以根据电路的门级表示来确定电路布局。这可以自动完成或者在用户参与下完成,以便优化电路布局。当布局处理系统1304已经确定电路布局时,其可将电路布局定义输出到ic生成系统1306。电路布局定义可以是例如电路布局描述。
[0273]
如本领域已知的,ic生成系统1306根据电路布局定义来生成ic。例如,ic生成系统1306可实现生成ic的半导体装置制造工艺,其可涉及光刻和化学处理步骤的多步骤序列,在此期间,在由半导体材料制成的晶片上逐渐形成电子电路。电路布局定义可呈掩模的形式,其可以在光刻工艺中用于根据电路定义来生成ic。替代地,提供给ic生成系统1306的电路布局定义可呈计算机可读代码的形式,ic生成系统1306可使用所述计算机可读代码来形成用于生成ic的合适掩模。
[0274]
由ic制造系统1302执行的不同过程可全部在一个位置例如由一方来实施。替代地,ic制造系统1302可以是分布式系统,使得一些过程可在不同位置执行,并且可由不同方来执行。例如,以下阶段中的一些可以在不同位置和/或由不同方来执行:(i)合成表示ic定义数据集的rtl代码,以形成要生成的电路的门级表示;(ii)基于门级表示来生成电路布局;(iii)根据电路布局来形成掩模;以及(iv)使用掩模来制造集成电路。
[0275]
在其他示例中,在集成电路制造系统处对集成电路定义数据集进行处理可以将系统配置为制造数据处理系统,而不用对ic定义数据集进行处理以便确定电路布局。例如,集成电路定义数据集可以定义可重新配置的处理器诸如fpga的配置,并且对该数据集的处理可以将ic制造系统配置为(例如,通过将配置数据加载到fpga)生成具有该定义的配置的可重新配置的处理器。
[0276]
在一些实施方案中,当在集成电路制造系统中处理时,集成电路制造定义数据集可以使集成电路制造系统生成如本文中描述的装置。例如,由集成电路制造定义数据集以上文参照图13所描述的方式对集成电路制造系统进行的配置可以制造如本文中描述的装置。
[0277]
在一些示例中,集成电路定义数据集可包括在数据集处定义的硬件上运行的软件,或者与在数据集处定义的硬件组合运行的软件。在图13所示的示例中,ic生成系统可以由集成电路定义数据集进一步配置为在制造集成电路时根据在集成电路定义数据集处限定的程序代码将固件加载到所述集成电路上,或者以其他方式向集成电路提供与集成电路一起使用的程序代码。
[0278]
与已知的实施方式相比,在本技术中阐述的概念在装置、设备、模块和/或系统中(以及在本文中实施的方法中)的实施方式可以引起性能改进。性能改进可以包含计算性能提高、延迟减少、处理量增大和/或功耗降低中的一个或多个。在制造此类装置、设备、模块和系统(例如,在集成电路中)期间,可以在性能改进与物理实施方案之间进行权衡,从而改进制造方法。例如,可以在性能改进与布局面积之间进行权衡,从而匹配已知实施方案的性能,但使用更少的硅。例如,这可以通过以串行方式重复使用功能块或在装置、设备、模块和/或系统的元件之间共享功能块来完成。相反,在本技术中阐述的引起装置、设备、模块和系统的物理实施方案的改进(诸如硅面积减小)的概念可以针对性能提高进行折中。例如,这可以通过在预定义面积预算内制造模块的多个示例来完成。
[0279]
申请人据此独立地公开了本文中所描述的每个单独的特征以及两个或更多个此类特征的任意组合,到达的程度使得此类特征或组合能够根据本领域的技术人员的普通常识基于本说明书整体来实行,而不管此类特征或特征的组合是否解决本文中所公开的任何问题。鉴于前文描述,本领域的技术人员将清楚,可以在本发明的范围内进行各种修改。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1