CN115545146A - 双向rnn的数字格式选择 - Google Patents
双向rnn的数字格式选择 Download PDFInfo
- Publication number
- CN115545146A CN115545146A CN202210748373.1A CN202210748373A CN115545146A CN 115545146 A CN115545146 A CN 115545146A CN 202210748373 A CN202210748373 A CN 202210748373A CN 115545146 A CN115545146 A CN 115545146A
- Authority
- CN
- China
- Prior art keywords
- brnn
- neural network
- input
- backward
- sequence
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000013528 artificial neural network Methods 0.000 claims abstract description 328
- 238000012360 testing method Methods 0.000 claims abstract description 102
- 238000000034 method Methods 0.000 claims abstract description 101
- 238000004422 calculation algorithm Methods 0.000 claims abstract description 70
- 230000000306 recurrent effect Effects 0.000 claims abstract description 40
- 238000012545 processing Methods 0.000 claims description 116
- 230000002457 bidirectional effect Effects 0.000 claims description 11
- 230000001131 transforming effect Effects 0.000 claims description 6
- 238000003860 storage Methods 0.000 claims description 4
- 230000001364 causal effect Effects 0.000 description 161
- 230000015654 memory Effects 0.000 description 49
- 238000004519 manufacturing process Methods 0.000 description 37
- 239000000872 buffer Substances 0.000 description 32
- 239000011159 matrix material Substances 0.000 description 28
- 230000009466 transformation Effects 0.000 description 25
- 230000008569 process Effects 0.000 description 23
- 238000013139 quantization Methods 0.000 description 20
- 230000006870 function Effects 0.000 description 19
- 238000004364 calculation method Methods 0.000 description 18
- 230000003068 static effect Effects 0.000 description 16
- 230000004913 activation Effects 0.000 description 13
- 230000006872 improvement Effects 0.000 description 13
- 238000013459 approach Methods 0.000 description 9
- 238000010586 diagram Methods 0.000 description 9
- 230000000694 effects Effects 0.000 description 8
- 238000009825 accumulation Methods 0.000 description 7
- 230000006399 behavior Effects 0.000 description 6
- 238000013461 design Methods 0.000 description 6
- 239000004065 semiconductor Substances 0.000 description 6
- XUIMIQQOPSSXEZ-UHFFFAOYSA-N Silicon Chemical compound [Si] XUIMIQQOPSSXEZ-UHFFFAOYSA-N 0.000 description 5
- 238000010187 selection method Methods 0.000 description 5
- 229910052710 silicon Inorganic materials 0.000 description 5
- 239000010703 silicon Substances 0.000 description 5
- 238000013135 deep learning Methods 0.000 description 3
- 238000005457 optimization Methods 0.000 description 3
- 238000011176 pooling Methods 0.000 description 3
- 230000004044 response Effects 0.000 description 3
- 238000012546 transfer Methods 0.000 description 3
- 230000008901 benefit Effects 0.000 description 2
- 238000006243 chemical reaction Methods 0.000 description 2
- 238000004590 computer program Methods 0.000 description 2
- 238000013527 convolutional neural network Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000009467 reduction Effects 0.000 description 2
- 238000000926 separation method Methods 0.000 description 2
- 230000007480 spreading Effects 0.000 description 2
- 238000003892 spreading Methods 0.000 description 2
- 230000002194 synthesizing effect Effects 0.000 description 2
- 206010000117 Abnormal behaviour Diseases 0.000 description 1
- 241001442055 Vipera berus Species 0.000 description 1
- 239000008186 active pharmaceutical agent Substances 0.000 description 1
- 230000004931 aggregating effect Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000012993 chemical processing Methods 0.000 description 1
- 230000000295 complement effect Effects 0.000 description 1
- 239000000470 constituent Substances 0.000 description 1
- 238000007796 conventional method Methods 0.000 description 1
- 238000013480 data collection Methods 0.000 description 1
- 238000002955 isolation Methods 0.000 description 1
- 238000010801 machine learning Methods 0.000 description 1
- 239000000463 material Substances 0.000 description 1
- 238000012067 mathematical method Methods 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 238000000206 photolithography Methods 0.000 description 1
- 230000006403 short-term memory Effects 0.000 description 1
- 230000005236 sound signal Effects 0.000 description 1
- 230000002123 temporal effect Effects 0.000 description 1
- 230000001052 transient effect Effects 0.000 description 1
- 238000013519 translation Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/06—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
- G06N3/063—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/044—Recurrent networks, e.g. Hopfield networks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/045—Combinations of networks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/047—Probabilistic or stochastic networks
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Health & Medical Sciences (AREA)
- Life Sciences & Earth Sciences (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- Computing Systems (AREA)
- Software Systems (AREA)
- Evolutionary Computation (AREA)
- General Health & Medical Sciences (AREA)
- Molecular Biology (AREA)
- Computational Linguistics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Data Mining & Analysis (AREA)
- Artificial Intelligence (AREA)
- Neurology (AREA)
- Probability & Statistics with Applications (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
- Computer And Data Communications (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
- Complex Calculations (AREA)
Abstract
双向RNN的数字格式选择。选择数字格式的计算机实施方法,数字格式用于配置BRNN硬件实施以对输入序列进行运算,方法包括:接收BRNN的表示;将输入张量序列上的BRNN的表示实施为测试神经网络,测试神经网络的每一步长都用于对a)序列的输入张量、b)关于序列的后续输入张量生成的对应后向状态张量,c)关于序列的先前输入张量生成的对应前向状态张量进行运算,测试神经网络包括:前向递归神经网络,用于对序列的输入张量上的前向状态张量进行运算;后向递归神经网络,用于对序列的输入张量上的后向状态张量进行运算;对输入张量序列操作测试神经网络,收集统计数据以提供给数字格式选择算法;将数字格式选择算法应用于统计数据。
Description
技术领域
本公开涉及用于选择在配置双向递归神经网络的硬件实施时使用的数字格式的计算机实施方法和数据处理系统。
背景技术
双向递归神经网络(BRNN)是一种用于对输入序列进行运算的人工神经网络。常规BRNN包括可以独立执行的前向和后向层。因此,前向层和后向层可以并行执行。在前向层中,在处理序列中的输入期间生成的前向状态被提供用于处理序列中的一个或多个后续输入。在后向层中,在处理序列中的输入期间生成的后向状态被提供用于处理序列中的一个或多个先前输入。因此,关于序列的给定输入,BRNN的输出不仅受网络输入的影响,还受序列中先前和未来点处执行的处理的影响。
BRNN可以用于机器学习应用。特别地,BRNN可以应用于表示时间系列的输入序列。例如,BRNN用于语音辨识、机器翻译和手写辨识。
发明内容
提供本发明内容是为了介绍在以下详细描述中进一步描述的一些概念。本发明内容不旨在标识所要求保护的主题的关键特征或必要特征,也不旨在用于限制所要求保护的主题的范围。
提供了一种选择数字格式的计算机实施方法,所述数字格式用于配置双向递归神经网络(BRNN)的硬件实施以对输入序列进行运算,所述方法包括:
接收所述BRNN的表示;
将所述BRNN实施为等效于输入张量序列上的所述BRNN的测试神经网络,所述测试神经网络的每一步长都用于对(a)所述序列的输入张量、(b)关于所述序列的后续输入张量生成的对应后向状态张量,以及(c)关于所述序列的先前输入张量生成的对应前向状态张量进行运算,所述测试神经网络包括:
前向递归神经网络(RNN),所述前向递归神经网络用于对所述序列的所述输入张量上的所述前向状态张量进行运算;和
后向递归神经网络(RNN),所述后向递归神经网络用于对所述序列的所述输入张量上的所述后向状态张量进行运算;
对所述输入张量序列操作所述测试神经网络,并且收集统计数据以提供给数字格式选择算法;以及
将数字格式选择算法应用于所述统计数据,以便导出用于所述测试神经网络的一个或多个所选择的张量的多个实例的公共数字格式。
所述方法可进一步包括使用用于所述一个或多个所选择的张量的所述公共数字格式来配置所述BRNN的硬件实施。
所述方法可进一步包括在所述BRNN的硬件实施中使用用于所述一个或多个所选择的张量的所述公共数字格式。
所述BRNN可以是并行BRNN或顺序BRNN。
所述测试神经网络可以被配置为使得所述前向RNN和所述后向RNN独立地对每一输入张量进行运算,所述前向RNN的每一步长用于对所述序列的输入张量和其对应前向状态张量进行运算,并且所述后向RNN的每一步长用于对所述序列的输入张量和其对应后向状态张量进行运算。
所述前向RNN的每一步长可以用于对所述序列的输入张量和其对应前向状态张量进行运算,并且所述后向RNN的每一步长可以用于对对应后向状态张量进行运算,并且所述前向RNN的对应步长的输出张量对所述序列的所述输入张量进行运算。
所述后向RNN的每一步长可以用于对所述序列的输入张量和其对应后向状态张量进行运算,并且所述前向RNN的每一步长可以用于对对应前向状态张量进行运算,并且所述后向RNN的对应步长的输出对所述序列的所述输入张量进行运算。
所述测试神经网络可以包括多个步长,每一步长用于对所述序列的不同输入张量进行运算。
所述应用所述格式选择算法可以包括将所述数字格式选择算法应用于在所有所述多个步长上捕获的所述统计数据,所述公共数字格式由所述数字格式选择算法输出。
所述前向RNN可以被配置为生成一组前向输出张量,并且所述后向RNN可以被配置为生成一组后向输出张量,并且所述一个或多个所选择的张量包括所述前向输出张量和所述后向输出张量两者。
所述公共数字格式可以是由一个或多个可配置参数定义的块可配置数字格式。
数字格式选择算法可以被配置为标识预定义类型的块可配置数字格式的块可配置数字格式。
应用数字格式选择算法可以包括:
独立地识别用于所述测试神经网络中的所述一个或多个所选择的张量的每个实例的数字格式;和
组合所述一个或多个所选择的张量的所述多个实例的所述数字格式,以便导出用于所述一个或多个所选择的张量的所述多个实例的公共数字格式。
所述数字格式选择算法被配置为识别由用于所述一个或多个所选择的张量的每个实例的一个或多个可配置参数定义的块可配置数字格式。
所述组合可以包括独立地组合针对所述一个或多个所选择的张量的每个实例所识别的所述块可配置数字格式的所述一个或多个可配置参数中的每一个可配置参数,以便定义用于所述公共数字格式的所述一个或多个可配置参数。
独立地组合块可配置数字格式的一个或多个可配置参数中的每一个可配置参数可以包括针对一个或多个可配置参数中的每一个可配置参数确定中值、最小值、最大值或平均值,以用作公共数字格式的相应的可配置参数。
块可配置数字格式可以包括尾数和指数,并且一个或多个可配置参数包括指数值和尾数的位深度中的一个或多个。
组合一个或多个所选择的张量的多个实例的数字格式可以包括确定所选择的张量的多个实例的数字格式的中值、平均值、最小值或最大值。
操作所述测试神经网络是用浮点数格式的所述一个或多个所选择的张量的每个实例来执行的。
将数字格式选择算法应用于统计数据可以与收集那些统计数据同时执行或者在随后执行。
一个或多个所选择的张量可以包括多个值,并且统计数据可以包括以下各项中的一者或多者:多个值中的至少一些值的平均值;多个值中的至少一些值的方差;多个值中的至少一些值的最小值或最大值;汇总多个值中的至少一些值的一个或多个直方图;以及相对于测试神经网络的输出或基于测试神经网络的输出在多个值中的至少一些值上的误差度量计算的梯度。
将所述BRNN实施为测试神经网络可以包括通过以下操作将所述BRNN的所述表示变换成所述前向RNN和所述后向RNN:
将根据关于所述序列的先前输入生成的前向状态执行的所述BRNN的运算分组在一起,以便形成所述前向RNN;
将根据关于所述序列的后续输入生成的后向状态执行的所述BRNN的运算分组在一起,以便形成所述后向RNN;以及
在所述输入张量序列上展开所述前向RNN和所述后向RNN。
测试神经网络可以具有一个或多个前向和后向状态张量输入,并且所述实施可以包括根据一组预定义的初始状态输入将前向和后向状态张量输入初始化到测试神经网络。
所述方法可以进一步包括在输入序列上的作为等效于所述BRNN的微分神经网络的所述BRNN的硬件实施中使用用于所述一个或多个所选择的张量的所述公共数字格式,所述微分神经网络包括:
前向递归神经网络(RNN),所述前向递归神经网络用于关于所述序列的先前输入为每一输入生成的前向状态进行运算;和
后向递归神经网络(RNN),所述后向递归神经网络用于关于所述序列的后续输入为每一输入生成的后向状态进行运算。
所述输入序列的数目可能不同于所述输入张量序列的数目。
所述一个或多个所选择的张量可以包括输入张量、前向状态张量、后向状态张量、权重张量、中间张量和输出张量中的一者或多者。
所述输入张量序列可以包括示例性输入值,所述示例性输入值被选择为表示当在硬件中实施以用于对所述输入序列进行运算时到所述BRNN的输入值的典型或预期范围。
数字格式选择算法可以是以下各项中的一种或多种:反向传播格式选择、贪婪行搜索和端到端格式选择、正交搜索格式选择、最大范围(或“MinMax”)格式选择、异常值拒绝格式选择、基于误差的启发式格式选择(例如,基于带有或不带有离群值加权的平方误差的总和)、加权离群值格式选择,以及梯度加权格式选择算法。
提供了一种在硬件中实施双向递归神经网络(BRNN)的方法,所述方法包括:
将所述BRNN实施为等效于输入序列上的所述BRNN的微分神经网络,所述微分神经网络包括:
前向递归神经网络(RNN),所述前向递归神经网络用于关于所述序列的先前输入为每一输入生成的前向状态进行运算;和
后向递归神经网络(RNN),所述后向递归神经网络用于关于所述序列的后续输入为每一输入生成的后向状态进行运算;以及
使用根据选择数字格式的计算机实施方法所选择的公共数字格式,在硬件中对所述输入序列执行所述微分神经网络。
提供了一种用于选择数字格式的数据处理系统,所述数字格式用于配置双向递归神经网络(BRNN)的硬件实施以对输入序列进行运算,所述数据处理系统包括:
处理器;
控制逻辑,所述控制逻辑被配置为将所述BRNN实施为等效于输入张量序列上的所述BRNN的测试神经网络,所述测试神经网络的每一步长都用于对(a)所述序列的输入张量、(b)关于所述序列的后续输入张量生成的对应后向状态张量,以及(c)关于所述序列的先前输入张量生成的对应前向状态张量进行运算,所述测试神经网络包括:
前向递归神经网络(RNN),所述前向递归神经网络用于对所述序列的所述输入张量上的所述前向状态张量进行运算;和
后向递归神经网络(RNN),所述后向递归神经网络用于对所述序列的所述输入张量上的所述后向状态张量进行运算;以及
格式选择单元,所述格式选择单元被配置为使得处理器对所述输入张量序列操作所述测试神经网络,并且收集统计数据以提供给数字格式选择算法;
其中所述格式选择单元被配置为将所述数字格式选择算法应用于所述统计数据,以便导出用于所述测试神经网络的一个或多个所选择的张量的多个实例的公共数字格式。
所述数据处理系统可以进一步包括用于处理神经网络的硬件加速器,其中所述控制逻辑进一步被配置为通过在所述硬件加速器处使用用于所述一个或多个所选择的张量的所述公共数字格式实施所述测试神经网络而使得在硬件中执行所述BRNN。
硬件加速器可以与处理器是同一个设备或者相同。
可以提供一种图形处理系统,该图形处理系统被配置为执行本文所述的任何方法。可以提供用于执行如本文所描述的方法的计算机程序代码。可以提供上面存储有计算机可读指令的非暂态计算机可读存储介质,所述计算机可读指令当在计算机系统处执行时,使计算机系统执行如本文所述的方法。
附图说明
参考附图以举例的方式描述本发明。在附图中:
图1是包括两个堆叠胞元的双向递归神经网络(BRNN)的示例。
图2是示例性常规BRNN胞元的示意图。
图3是用于实施BRNN的数据处理系统的示意图。
图4说明了在三个时间步长上展开的图1的BRNN。
图5是图4的展开的BRNN的示意图,其中BRNN是常规BRNN,并且其中双向层中的每个双向层被表达为一对平行的单向递归神经网络(RNN)。
图6说明了RNN胞元的简单示例的因果和非因果运算的分离。
图7是用于常规BRNN的图6的拆分RNN胞元中的三个RNN胞元的实施的示意图,其中在每个时间步长处分别执行因果和非因果运算。
图8是说明了用于在硬件中将BRNN作为微分神经网络而实施的方法的流程图。
图9示出了包括被配置为根据本文所描述的原理实施RNN的神经网络加速器的计算机系统。
图10是集成电路制造系统的示意图。
图11是说明为微分神经网络执行数字格式选择的方法的流程图。
图12是顺序前向-后向RNN的一个示例。
图13是在三个时间步长上展开的图12的顺序前向-后向RNN的示意图。
具体实施方式
以举例的方式给出以下描述,以使本领域的技术人员能够制造和使用本发明。本发明不限于本文所描述的实施方案,并且对所公开的实施方案的各种修改对于本领域技术人员而言将是显而易见的。仅以举例的方式描述实施方案。
图1示出了双向递归神经网络(BRNN)100的示例,所述BRNN将用于说明根据本文所描述的原理的硬件中的BRNN的实施。所述网络包括两个堆叠的BRNN胞元BRNN1和BRNN2(图中的102和103)。每个胞元可以包括一个或多个网络运算。每个BRNN胞元处理输入值(例如,来自BRNN胞元102的序列101)和由所述BRNN胞元以由包括所述胞元和一个或多个网络参数(在此可称为“权重”)的运算所定义的方式生成的关于输入序列的先前和后续时间步长的状态。由BRNN胞元生成的被提供给后续BRNN胞元的状态可以被称为前向状态。由BRNN胞元生成的被提供给先前BRNN胞元的状态可以被称为后向状态。以这种方式,以输入序列的给定时间步长操作的BRNN胞元从网络的过去(后向)和未来(前向)状态接收信息。
RNN胞元是可以用作BRNN中的部件的子图(子网络)。对于给定的时间步长,BRNN胞元从先前和后续时间步长获取一个或多个输入数据张量以及前向和后向状态输入张量,并且为所述时间步长生成前向和后向状态输出张量以及一个或多个输出数据张量。由胞元生成的输出数据张量中的至少一些输出数据张量可以与由所述胞元生成的输出状态张量相同。
BRNN被配置为对时间系列x(t)101进行运算,所述时间系列可以是例如BRNN将对其执行语音辨识的一系列音频样本。图1中的BRNN的表示代表在一般时间步长t处的BRNN。在每个时间步长t处,BRNN提供输出o(t)。通过使BRNN在输入序列x(t)101的每个时间步长处对输入进行运算,BRNN生成相应的输出序列o(t)104。更一般地,BRNN可以对任何输入序列进行运算,所述输入序列可以不是时间系列。本公开中对时间系列的引用将被理解为同样适用于任何输入序列,包括但不限于时间系列。本公开中对时间步长的引用将被理解为同样适用于任何序列的输入,包括但不限于时间系列的时间步长。关于序列的每个输入的BRNN运算代表BRNN的一个步长,每个运算是BRNN的单个迭代。
应当理解,尽管在本文所描述的示例中,BRNN生成与输入序列中的每个输入相对应的单个输出,但所描述的方法同样适用于具有其他配置的BRNN,包括例如:在输入序列结束时生成单个输出的BRNN(例如,适于执行分类的BRNN);生成的输出少于网络所接收的输入的BRNN;包括为相同的输入提供不同的输出,例如与输入序列以1:1对应的2个输出序列的分支的BRNN。
每个BRNN胞元可以包括多个运算,每个运算被布置成执行一组计算,例如,BRNN胞元可以包括一个或多个矩阵乘法运算、卷积运算、激活运算和级联运算,用于对输入以及前向和后向状态hiF(t)和hiB(t)的运算。
第一BRNN胞元102在时间步长t处接收来自时间系列x(t)101的输入数据,并且根据针对所述胞元预定义的所述一组计算处理输入。第一胞元处的处理进一步根据在第一胞元处的先前输入x(t-1)的处理期间生成的前向状态h1F(t-1)来执行。在附图中,被前向传递以供在下一时间步长的处理期间使用的状态被示出为状态h1F(t)105,所述状态经受等待时间106,使得状态h1F(t)与输入x(t+1)一起被提供给第一胞元。第一胞元处的处理进一步根据在第一胞元处的先前输入x(t+1)的处理期间生成的状态h1B(t+1)来执行。在所述图中,状态h1B(t)107在时间108中被向后传递,以供在先前时间步长的处理期间使用,使得状态h1B(t)与输入x(t-1)一起被提供给第一胞元。
图1中的第二BRNN胞元103以类似于第一BRNN胞元的方式工作,但是胞元BRNN2接收胞元BRNN1的输出作为其输入。第二BRNN胞元o(t)104的输出是图1所示的BRNN的输出。第二BRNN胞元对其输入执行其自身的预定义的一组计算。第二BRNN胞元从在一个或多个先前或之后时间步长处执行的处理中接收状态输入。在所述图中,第二BRNN胞元103输出经受等待时间110的状态h2F(t)109,使得状态h2F(t)在时间步长t+1处作为前向状态输入被提供给第二BRNN胞元,并且状态h2B(t)111经受等待时间112,使得状态h2B(t)在时间步长t-1处作为后向状态输入被提供给第二BRNN胞元。
预定义的初始状态值通常用于初始化BRNN。例如,在BRNN的初始时间步长处(例如,在t=0处),初始前向状态输入将被提供给BRNN;并且在BRNN将对其进行运算的输入序列上的BRNN的最后时间步长处(例如,在t=tmax处),初始后向状态输入将被提供给BRNN。初始前向和后向状态值可以是例如常数、学习的初始状态值或全零。
在图1中,BRNN胞元在一般时间步长t处的输出分别用作所述BRNN胞元在之后和先前时间步长处的前向和后向状态输入,但是一般来说,在一般时间步长t处生成的状态可以包括在BRNN胞元处生成的任何状态值,并且可以不是胞元的输出值。一般而言,输入到胞元的前向状态可以包括来自一个或多个先前时间步长的状态,输入到胞元的后向状态可以包括来自一个或多个之后时间步长的状态。在一些网络中,对胞元的状态输入可以附加地或可替换地包括在网络的其他胞元处生成的状态数据,例如,在图1所示的网络的可替换版本中,提供给第二BRNN胞元的状态数据可以包括来自第一BRNN胞元的状态数据。
图1所示的BRNN是简单示例。通常,BRNN可以包括一个或多个BRNN胞元,并且可以对BRNN的输入和输出和/或其胞元之间执行一个或多个其他处理步骤。每个BRNN胞元可以包括例如一个或多个卷积运算、激活运算和全连接运算,所述运算处理胞元之间的输入、输出或中间输出。输入x(t)、输出o(t)以及前向和后向状态hiF(t)和hiB(t)可以是具有适合于网络和其应用的任何维度的张量。
图2是常规BRNN胞元200的示意图。常规BRNN包括可以独立执行的前向和后向层,例如,前向和后向层都接收来自输入序列的公共输入作为它们的输入。图1中的BRNN胞元102和103中的一者或两者可以具有BRNN胞元200的结构。以关于图1描述的方式,BRNN胞元200接收输入x(t)210(对于胞元堆叠中的较高胞元,其可以是较低胞元的输出)、来自BRNN胞元200在前一时间步长x(t-1)的输入上的运算的前向状态hF(t-1)212,以及来自BRNN胞元200在下一时间步长x(t+1)的输入上的运算的后向状态hB(t+1)214。BRNN胞元自身包括多个运算。
在图2所示的示例中,根据前向状态执行第一运算序列202-206,根据后向状态执行第二运算序列222-226。输入和前向状态在级联运算202处组合(例如,沿信道维度级联),所述级联运算将张量输入提供给矩阵乘法运算204。矩阵乘法运算接收前向权重张量作为矩阵WF 216,用于与级联运算202生成的级联张量进行乘法运算。矩阵乘法运算204的输出然后由激活运算206进行运算,所述激活运算将激活函数应用于矩阵乘法运算的输出。
在图2中,输入和后向状态在级联运算222处组合(例如,沿信道维度级联),所述级联运算将张量输入提供给矩阵乘法运算224。矩阵乘法运算接收后向权重张量作为矩阵WB218,用于与级联运算222生成的级联张量进行乘法运算。矩阵乘法运算224的输出然后由激活运算226进行运算,所述激活运算将激活函数应用于矩阵乘法运算的输出。激活函数可以是适合于应用BRNN的任何函数,例如,激活函数可以为tanh、ReLU函数或S型函数。在第一和第二序列中执行的矩阵乘法和/或激活运算可以是相同或不同的运算。
前向运算和后向运算的结果由级联运算220组合,以提供BRNN胞元200的输出作为输出y(t)228。在BRNN胞元处生成供BRNN胞元在下一时间步长处使用的前向状态输出hF(t)230和供BRNN胞元在先前时间步长处使用的后向状态输出hB(t)232。在图2中,前向和后向状态由激活运算206和226提供,但通常所述状态可以在胞元的任何部分处生成,例如在矩阵乘法运算中。前向和后向状态输出中的一者或两者可以是输出y(t)228。在其他示例中,前向和后向状态可以不同于BRNN胞元的输出(例如,它可以包括在BRNN胞元的任何部分执行运算期间生成的中间张量)。
在激活函数为tanh的情况下,BRNN胞元200对输入张量x(t)的运算可以表示为例如:
其中合并可以是例如级联或逐元素相加。
BRNN胞元200是常规BRNN胞元的简单示例。这种常规BRNN也可以被称为“并行BRNN”,因为前向和后向层可以独立执行,因此是并行的。下面还描述了顺序BRNN胞元,其中前向或后向方向中的一者的输入是另一个方向的输出,即前向和后向运算不是独立的,并且不接收公共输入。应当理解,存在可根据本文所描述的原理实施的许多不同种类的BRNN胞元。例如,如本领域中已知的,如本文所描述实施的BRNN的BRNN胞元可以为LSTM(长短期记忆)胞元或GRU(门控递归单元)胞元。不同类型的BRNN胞元具有不同特性,并且应当理解,对任何特定类型的BRNN胞元的选择可以由BRNN所应用的特定应用程序来确定。
图4说明了在三个时间步长t、t+1和t+2上展开的图1的BRNN,以便形成展开的BRNN400。BRNN胞元可以是例如常规的或顺序的BRNN胞元。展开时,BRNN中的每个胞元对应于BRNN的一个层,例如,展开胞元BRNN1以创建图4中的层1,展开胞元BRNN2以创建层2。从图4可以看出,第一BRNN胞元102在时间步长t处的状态输出h1F(t)在下一时间步长t+1处作为状态输入提供给所述第一BRNN胞元102的相同实例。并且第一BRNN胞元在时间步长t+1处的后向状态输出h1B(t+1)在先前时间步长t处作为状态输入提供给所述第一RNN胞元102的相同实例。类似地,第二BRNN胞元103中的每个第二BRNN胞元的前向状态输出作为前向状态输入在下一时间步长处提供给那些第二胞元的相同实例,并且第二BRNN胞元103中的每个第二BRNN胞元的后向状态输出作为后向状态输入在先前时间步长处提供给那些第二胞元的相同实例。展开的BRNN生成关于输入序列x(t)中的每个输入的输出o(t)。
因为所有的第一BRNN胞元都是相同的,并且所有的第二BRNN胞元都是相同的,所以应该理解,在数学上,图4所示的展开的BRNN 400等同于在三个输入的序列上运算图1所示的BRNN。一般来讲,BRNN可以在任何的多个时间步长上展开。图4所示的示例示出了仅在三个步长上展开的BRNN,但是在实际系统中,时间步长的数目通常会更大。
用于实施BRNN的数据处理系统300在图3中说明。数据处理系统包括用于执行神经网络的张量运算的加速器302。加速器可被称为神经网络加速器(NNA)。加速器包括多个可配置资源,所述多个可配置资源使得能够在加速器处实施各种类型的前馈神经网络,诸如各种卷积神经网络和多层感知器。
将相对于图3的特定示例中所示的数据处理系统来描述BRNN在硬件中的实施,其中加速器302包括多个处理元件314,每个处理元件包括卷积引擎,但应当理解,除非另有说明,否则本文所描述的用于在硬件中实施BRNN的原理通常适用于包括能够执行神经网络的张量运算的加速器的任何数据处理系统。
在图3中,加速器包括输入缓冲器306、多个卷积引擎308、多个累加器310、累积缓冲器312和输出缓冲器316。每个卷积引擎308与其相应的累加器310及其在累积缓冲器312的资源中的份额一起表示硬件处理元件314。图3中示出了三个处理元件,但通常可以存在任何数目的处理元件。每个处理元件从系数缓冲器330接收一组权重,并且从输入缓冲器306接收输入值(例如,输入张量)。系数缓冲器可设置在加速器处,例如在相同的半导体管芯上以及/或者在相同的集成电路封装中。通过组合权重和输入张量,处理元件可运算为执行神经网络的张量运算。
一般来讲,加速器302可包括任何合适的张量处理硬件。例如,在一些示例中,加速器可包括池化单元(例如,用于实施最大池化和平均池化运算),或用于执行每个元素的数学运算的元素处理单元(例如,将两个张量相加)。为了简单起见,图3中未示出这种单元。
加速器的处理元件是加速器的可并行运算的独立处理子系统。每个处理元件314包括卷积引擎308,所述卷积引擎被配置为在权重和输入值之间执行卷积运算。每个卷积引擎308可包括多个乘法器,每个乘法器被配置为将权重与对应的输入数据值相乘以生成乘法输出值。乘法器之后可以是例如被布置成计算乘法输出的总和的加法器树。在一些示例中,可以将这些乘积累加计算流水线化。
通常必须在加速器处执行大量的硬件运算,以便执行神经网络的每个张量运算。这是因为输入张量和权重张量通常非常大。由于可能采用卷积引擎的多次硬件传递来生成卷积运算的完整输出(例如,因为卷积引擎可能只接收和处理权重和输入数据值的一部分),因此加速器可以包括多个累加器310。每个累加器310接收卷积引擎308的输出,并且将所述输出相加到与相同的运算相关的先前的卷积引擎输出。取决于加速器的实现方式,卷积引擎可以不在连续周期中处理相同的运算,因此可以提供累积缓冲器312来存储给定运算的部分累加的输出。适当的部分结果可以由累积缓冲器312在每个周期提供给累加器。
加速器可以包括被布置成存储加速器(例如,卷积引擎)所需的输入数据的输入缓冲器306和系数缓冲器330,所述系数缓冲器被布置成存储加速器(例如,卷积引擎)所需的用于根据神经网络的运算与输入数据组合的权重。输入缓冲器可包括与在给定周期上在加速器处执行的一个或多个运算相关的输入数据中的一些或全部。系数缓冲器可包括与在给定周期上在加速器处处理的一个或多个运算相关的权重中的一些或全部。图3所示的加速器的各种缓冲器可以任何合适的方式实施,例如,作为加速器本地的(例如,在相同的半导体管芯上以及/或者设置在相同的集成电路封装内)或加速器可通过数据总线或其他互连件访问的任何数目的数据存储库。
存储器304可以是加速器可访问的,例如,存储器可以是加速器可通过数据总线访问的系统存储器。可提供片上存储器328以用于存储权重和/或其他数据(诸如输入数据、输出数据等)。片上存储器可以在加速器的本地,使得存储在片上存储器中的数据可以由加速器访问,而不消耗存储器304的存储器带宽(例如,通过系统总线可访问的系统存储器)。可以将数据(例如,权重、输入数据)周期性地从存储器304写入片上存储器。加速器处的系数缓冲器330可被配置为从片上存储器328接收权重数据,以便减少存储器与系数缓冲器之间的带宽。输入缓冲器306可被配置为从片上存储器328接收输入数据,以便减少存储器与输入缓冲器之间的带宽。存储器可以耦合到输入缓冲器和/或片上存储器,以便将输入数据提供给加速器。
累积缓冲器312可以耦合到输出缓冲器316,以允许输出缓冲器接收在加速器处运算的神经网络的运算的中间输出数据,以及结束运算(即,在加速器处实施的网络的最后的运算)的输出数据。输出缓冲器316可以耦合到片上存储器328,用于将中间输出数据和结束运算的输出数据提供给片上存储器328,例如用于在以下文所述的方式在加速器处实施BRNN时用作状态。
通常,需要将大量数据从存储器传输到处理元件。如果无法高效地完成所述传输,这可导致用于向处理元件提供输入数据和权重的高存储器带宽要求和高功耗。当存储器为“片外”存储器时,即在与处理元件不同的集成电路或半导体管芯中实施时,尤其如此。一个这种示例为加速器可通过数据总线访问的系统存储器。为了减少加速器执行神经网络时的存储器带宽要求,在加速器处提供片上存储器是有利的,在加速器处可以存储在加速器处实施神经网络所需的权重和/或输入数据中的至少一些者。当存储器设置在相同的半导体管芯上以及/或者在相同的集成电路封装中时,这种存储器可以是“片上”的(例如,片上存储器328)。
在图3的示例中单独示出了各种示例性连接,但在一些实施方案中,其中的一些或全部连接可以由一个或多个共享数据总线连接提供。还应当理解,可提供其他连接,作为图3所示连接的替代或补充。例如,输出缓冲器316可被耦合到存储器304,用于将输出数据直接提供给存储器304。同样,在一些示例中,并非图3所示的所有连接都是必需的。例如,存储器304不必耦合到输入缓冲器306,所述输入缓冲器可以直接从输入数据源获得输入数据,例如,音频子系统被配置为对来自麦克风的信号进行采样,所述麦克风专用于捕获来自包括数据处理系统的设备的用户的语音。
在硬件中实施BRNN
在适于无递归地执行神经网络的数据处理系统的硬件中实施BRNN是困难的,因为BRNN的每个胞元的运算都取决于前向和后向状态。例如,考虑在网络输入的时间系列中的一般时间t处的BRNN胞元:为了在时间t处执行所述胞元的运算,所述胞元将需要由所述胞元在时间t-1处对输入运算生成的前向状态,但是在时间t-1处对输入运算的胞元将不能执行其运算,直到由在时间t处对输入运算的胞元生成的后向状态已知。这种循环依赖性使得难以在硬件中实施BRNN,因为这种硬件(例如,图3所示的神经网络加速器)通常需要静态神经网络。
静态神经网络为前馈神经网络,其可以由静态图表示。BRNN是包括至少两个相关反馈回路的动态神经网络,因为在给定步长处的BRNN的输出取决于在神经网络的一个或多个先前和之后步长处执行的处理。在BRNN胞元处执行的依赖于在先前时间步长处生成的前向状态而执行的运算可以被称为BRNN胞元的前向运算。在BRNN胞元处执行的依赖于在先前时间步长处生成的后向状态而执行的运算可以被称为BRNN胞元的后向运算。BRNN胞元执行的前向和后向运算可能不同,例如,BRNN胞元的前向和后向运算中使用的矩阵运算和/或权重可能不同。在一些示例中,在BRNN胞元处执行的前向和后向运算可以是相同的。
为了允许在适于执行静态神经网络的硬件上执行BRNN,发明人提出在BRNN要运算的时间步长上将BRNN的每个胞元分别展开成前向递归神经网络和后向递归神经网络。这种方法将BRNN的动态图转换为静态图,用于对给定数目的输入进行运算,并且具有一组固定的前向和后向状态输入。因此,根据常规的实施和优化算法,BRNN变得适合于在加速器处实施。
举例来说,图5说明了在三个时间步长t=0、1和2上展开的图1的BRNN,以便形成微分神经网络500。在这个示例中,BRNN的层代表常规BRNN,其中对公共输入独立地执行前向和后向运算。图4所示的展开的BRNN胞元中的每个BRNN胞元在图5的微分神经网络中表示为一对递归神经网络:前向递归神经网络和后向递归神经网络。在图5中,展开胞元BRNN1 102以创建包括仅在前向状态h1F上运算的胞元RNN1F 512的前向递归神经网络524和包括仅在后向状态h1B上运算的胞元RNN1B 514的后向递归神经网络526。类似地,展开胞元BRNN2以创建包括仅在前向状态h2F上运算的胞元RNN2F 518的前向递归神经网络528和包括仅在后向状态h2B上运算的胞元RNN2B 520的后向递归神经网络530。
在微分网络500中,图4所示的对应BRNN胞元中的每个BRNN胞元被分成相应的一对前向和后向胞元,因为BRNN是常规BRNN,所以它们对输入序列506的相同输入进行运算。来自每对前向和后向胞元的输出被组合(例如,级联)以便生成相应的输出,所述输出等效于对相同输入运算的BRNN胞元的输出。例如,图5中的胞元BRNN1 102被表示为前向胞元RNN1F512和后向胞元RNN1B 514,它们各自对序列506的输入进行运算。前向和后向胞元的输出被组合516(例如,在级联运算中),以便生成第一BRNN胞元的输出508。类似地,第二BRNN胞元103被表示为前向胞元RNN2F 518和后向胞元RNN2B 520,它们各自对第一BRNN胞元的输出508进行运算。前向和后向胞元的输出被组合522(例如,在级联运算中),以便生成BRNN的输出510。
为了简单起见,在图5中通过简单的箭头示意性地说明了在连续时间步长处的前向和后向RNN胞元实例之间的状态值的传递,但是应当理解,例如,在第一前向胞元实例512处关于t=0处的输入生成的状态对于第二前向胞元实例512关于t=1处的输入将是不可用的,直到第一前向胞元实例处的相关处理已经完成。类似地,在第一后向胞元实例514处关于t=2处的输入生成的状态对于第二后向胞元实例514关于t=1处的输入将是不可用的,直到第一后向胞元实例处的相关处理已经完成。
在图5所示的示例中,微分网络500被示出为包括三个步长,但是通常由微分网络表示的BRNN可以在对应于BRNN要运算的输入数目的任意数目的时间步长上展开。在BRNN对那些输入进行运算之前,BRNN的输入数目是已知的,因为每个时间步长处的运算取决于来自先前时间步长的前向状态和来自后续时间步长的后向状态。因此,为了执行BRNN的运算,序列的第一个和最后一个输入都必须是已知的。然而,给定的BRNN可以对不同长度的序列进行运算,因此当处理不同的序列时,微分网络可能需要在不同数目的时间步长上展开。表示在多个输入上展开的BRNN的微分网络被配置成生成关于输入序列x(t)506中的每个输入的输出o(t)510。
为了初始化BRNN,可以提供前向和后向状态值,用于处理序列的第一个和最后一个输入。在图5所示的示例中,微分网络500的输入状态532包括:两个前向状态值hiF(-1)(其中i是对应于两个前向状态值的索引1或2),其被提供给关于t=0处的第一输入运算的胞元实例;以及两个后向状态值hiB(3)(其中i是对应于两个前向状态值的索引1或2),其被提供给关于t=2处的最后输入运算的胞元实例。例如,输入状态可以是常数值、学习的初始状态值或全零。关于t=2处的最后输入生成的两个前向状态值hiF(2)和关于t=0处的第一输入生成的两个后向状态值hiB(0)可以被提供作为微分网络500的状态输出534。在一些应用中,在输入序列上运算的BRNN的输出状态可以用作在后续输入序列上运算的BRNN的后续应用的输入状态。
因此,BRNN胞元的运算被分成前向RNN和后向RNN:前向RNN包括被配置成对接收的输入值和前向状态执行前向运算的胞元;并且后向RNN包括被配置成对接收的输入值和后向状态执行后向运算的胞元。
根据定义,并行BRNN的前向和后向运算是独立的。换句话说,每个并行BRNN胞元包括需要输入值和相应的前向状态的一组前向运算和一组需要输入值和相应的后向状态的后向运算。在图5所示的示例中,图1所示的BRNN的胞元BRNN1包括前向RNN胞元RNN1F 512和后向RNN胞元RNN1B 514,并且胞元BRNN2包括前向RNN胞元RNN2F 518和后向RNN胞元RNN1B520。在这个示例中,前向RNN 512与后向RNN 514的组合等效于图1所示的源BRNN的胞元BRNN1,前向RNN 518与后向RNN 520的组合等效于胞元BRNN2。
现在将参考图3的数据处理系统描述RNN在硬件中的实施。一般来讲,本文所描述的原理可应用于在能够执行神经网络的张量运算的任何加速器处实施RNN。例如,加速器可以是图形处理单元(GPU)、张量加速器、数字信号处理器(DSP)或神经网络加速器(NNA)。加速器302可能无法独立执行,并且可能需要(例如,通过控制逻辑324)管理和配置以便执行代码。
为了在加速器302上实施BRNN 338,变换单元326被配置成针对BRNN 338的每个BRNN胞元生成一对RNN胞元:前向RNN胞元(例如图5中的512)和后向RNN胞元(例如514)。变换单元还可以被配置为生成一对RNN胞元的组合运算(例如516),以组合前向和后向RNN胞元的输出,从而形成与BRNN胞元的输出等效的输出。在一些示例中,来自一对RNN胞元的输出的组合可以是来自RNN胞元的输出值的级联。对应于源BRNN的不同层的RNN胞元对之间的中间值(例如508)不需要在硬件300中显式地生成。例如,在一些示例中,前向和后向RNN胞元的输出在被提供作为对应于BRNN 338的下一层的下一对RNN胞元(例如518和520)的输入之前不需要被组合。在这样的示例中,RNN胞元的输出可以在随后的RNN胞元处隐式或显式地组合,例如,图5所示的组合516可以在RNN胞元518和520处执行。
来自对应于BRNN最终层的RNN对的输出序列(例如510)等效于由前向和后向RNN对表示的来自源BRNN的输出序列。变换单元可以被配置成生成组合单元,用于对来自最顶部的前向和后向RNN对的输出进行运算,以便生成与源BRNN的输出序列等效的输出序列。
变换单元还被配置成在对应于BRNN要运算的输入序列的预定数目的步骤上展开为每个BRNN胞元生成的前向和后向RNN对。变换单元不是试图配置加速器302来直接执行BRNN,而是提供包括一组展开的前向和后向RNN层的微分网络,用于在加速器302处实施。图5示出了一个微分网络的示例。当展开时,神经网络单元可以被称为层。
由于RNN胞元在预定数目的步骤上展开,所以变换单元将动态源BRNN转换成展开的RNN(微分网络),所述展开的RNN包括可以由静态图表示的一组前向和后向层。因此,所述微分网络可以在加速器中实施,否则实施加速器不能够在硬件中有效地执行BRNN。因此,相同的加速器可以用于实施循环或非循环神经网络,从而扩展其效用。本文所描述的方法包括在加速器处执行微分网络,以便执行最初定义的BRNN。
控制逻辑324被配置为在加速器处实施神经网络。控制逻辑将加速器的处理元件314配置为例如通过设置适当的加速器参数、在存储器304和片上存储器328处定义适当的数据结构以及将对这些数据结构的引用连同定义待执行的张量运算的指令来执行神经网络的张量运算。控制逻辑可以(例如,经由片上存储器328)使张量运算所需的权重被读取到系数缓冲器330中,并且将输入提供给输入缓冲器306。通常必须在加速器处执行大量的硬件运算,以便执行神经网络的每个张量运算。这是因为输入张量和权重张量通常非常大。一般来讲,处理元件314将花费一个以上的硬件遍次来生成完整的输出用于运算。控制逻辑可被配置为将权重和输入数据的提供同步到加速器的处理元件,使得在许多遍次中,每次运算的输出在累积缓冲器312处累积。
使用控制逻辑来配置和管理加速器处的神经网络的处理在本领域中是已知的,并且合适的控制逻辑通常设置有用于实施神经网络的加速器。控制逻辑324可包括以下各项中的一种或多种:在数据处理系统300(例如,CPU)的处理器处执行的软件(例如,驱动程序);(例如,在加速器301自身处的)固件;专用处理器,诸如可以在位于加速器302处或耦合到所述加速器的片上系统(SoC)中实施。在一些示例中,控制逻辑可包括在数据处理系统的通用处理器处运行的驱动程序和在加速器302的SoC处运行的固件。通常,加速器将包括配置由加速器执行的运算的方面的设备上的寄存器,并且控制逻辑将设置这些寄存器,以便适当地配置加速器以实施给定的神经网络。
将会注意到,前向和后向RNN对相反方向上的输入序列进行运算。例如,在图5中,前向RNN 524的胞元512必须在对输入值x(1)进行运算之前对x(0)进行运算,因为在对输入值x(1)执行的运算中需要前向RNN在对x(0)进行运算时生成的前向状态;并且后向RNN 526的胞元514必须在对输入值x(0)进行运算之前对x(1)进行运算,因为在对输入值x(0)执行的运算中需要后向RNN在对x(1)进行运算时生成的后向状态。
对于前向和后向胞元接收公共输入的常规BRNN,有利的是配置控制逻辑以将输入值(例如506或508)索引到前向和后向RNN的胞元,使得RNN要运算的输入值序列可以仅存储一次,并且提供给前向和后向RNN,而不需要在硬件中对输入值序列进行重新排序。例如,序列的每个输入可以被分配(i)前向索引,其指示输入值序列将被提供给前向RNN的顺序,以及(ii)后向索引,其指示输入值序列将被提供给后向RNN的顺序。后向索引可以相对于前向索引后向运行,例如,后向索引可以指示图5中的输入x(2)是要提供给后向RNN的输入序列中的第一个输入,而输入x(0)是要提供给后向RNN的输入序列中的最后一个输入。
在微分神经网络(例如,图5中的508)的层之间传递的中间值可以被类似地索引用于网络的后续前向和后向层。
包括预定数目的输入的输入序列可以保存在输入缓冲器306、片上存储器328和存储器304中的一者或多者中。将微分神经网络运算序列的所有输入保存在输入缓冲器306中是有利的。
数据处理系统包括变换单元326,用于将BRNN转换成如本文所描述的静态微分网络,以用于在加速器处实施。在一些示例中,可在控制逻辑处提供变换单元326,但其他布置也是可能的,例如,变换单元可以是在数据处理系统处的软件、硬件或固件中体现的单独的逻辑部件。在一些示例中,变换单元为软件,所述软件被配置为在BRNN被提交给控制逻辑以在加速器处的硬件中实施之前处理所述BRNN。
现在将参考图8所示的流程图800来描述变换单元326的操作,图8说明了在硬件中实施BRNN的方法。在801处,在变换单元处接收要在硬件中实施的BRNN 338的表示,以及表示BRNN要运算的步长数目的信息(例如,参数)。步长数目将取决于应用BRNN的应用(例如,BRNN要处理的捕获的音频样本的数目)。
BRNN表示可以任何合适的方式来表示,诸如数学表示,或变换单元被配置为对其进行运算的BRNN的任何其他表示。针对神经网络的高级定义存在若干标准,其中的任一标准可以作为算法的合适输入。深度学习框架API趋于接近纯数学定义,并且有一些跨框架“标准”在类似的级别上起作用(例如,ONNX)。准备好在特定加速器处执行的代码通常将更靠近硬件并且包括特定于所述硬件的特征。还存在广泛使用的中间表示,诸如中继器,所述中间表示通常用于深度神经网络(DNN)编译器中。
变换单元被配置为识别BRNN的每个胞元中的前向和后向运算。前向(方向)运算是那些依赖于由BRNN胞元在输入序列的先前步长处生成的前向状态而执行的运算。后向(方向)运算是那些依赖于由BRNN胞元在输入序列的后续步长处生成的后向状态而执行的运算。
每个BRNN胞元的前向运算被一起分组803到表示前向RNN的相应前向RNN胞元中。前向RNN接收到BRNN胞元的前向状态,所述前向状态是在前向运算中生成的,是由前向RNN在输入序列的先前步长处为输入序列的给定步长生成的。
每个BRNN胞元的后向运算被一起组合805到表示后向RNN的相应后向RNN胞元中。后向RNN接收到BRNN胞元的后向状态,所述后向状态是在后向运算中生成的,是由后向RNN在输入序列的之后步长处为输入序列的给定步长生成的。
对于常规BRNN,由BRNN胞元执行的一些运算可以独立于前向和后向状态来执行。这些可以被称为非因果运算,并且在下面更详细地描述。这些运算可以与前向和/或后向运算组合在一起,或者在一些示例中,可以定义一个或多个非因果胞元,其中的每个非因果胞元可以在前向和/或后向运算之前和/或之后执行,和/或与前向和/或后向运算同时执行。以下述方式并行执行非因果运算可能是有利的。
变换单元被配置成在BRNN将运算的预定数目的步骤上展开804BRNN胞元的前向RNN,以便为所述胞元生成静态前向神经网络。变换单元被配置成在BRNN将运算的预定数目的步骤上展开806BRNN胞元的后向RNN,以便为所述胞元生成静态后向神经网络。对于常规BRNN,除了前向和后向神经网络之外,根据下面的方法针对BRNN胞元定义的任何非因果胞元可以类似地展开以形成展开的非因果网络。可以使用本领域中已知的用于展开(有时称为铺展)RNN的各种方法中的任一方法。例如,在Ian Goodfellow、Yoshua Bengio和AaronCourville的《深度学习》(麻省理工学院出版社,2016年)的第10章(特别是参见10.1)中描述了展开RNN的数学方法,所述文献全文以引用方式并入本文。
针对BRNN胞元生成的前向和后向神经网络(以及任何非因果层)一起表示BRNN的一层。针对BRNN胞元中的所有BRNN胞元生成的一组前向和后向神经网络(以及任何非因果层)共同表示静态微分神经网络,其等效于在预定数目的步骤上展开的BRNN。如已描述,可能需要一个或多个组合层来组合(例如,级联)前向和后向神经网络(以及任何非因果层)的输出,以便形成关于预定数目的输入的输出序列。
对于常规BRNN,并行执行每对前向和后向神经网络可能是有利的。这可以提高表示BRNN的微分神经网络的执行效率,因为需要来自对应于BRNN层的前向和后向神经网络的输出,以便处理进行到对应于后续BRNN层的后续前向和后向神经网络对上。例如,前向和后向神经网络可以由加速器302的处理元件314处的控制逻辑324同时实施。前向和后向神经网络可以被配置为对公共输入序列进行运算。可以以上述方式将前向和后向索引分配给序列的每个输入。
在常规BRNN的一些示例性实施中,代表BRNN层的每对前向和后向神经网络可以被顺序处理。可以首先处理前向和后向神经网络中的任一者。例如,前向神经网络可以首先被处理,随后是一对对应的后向神经网络,反之亦然。对于下面描述的顺序BRNN,在一个方向(例如前向)执行的运算必然依赖于在相反方向(例如后向)执行的运算的输出,因此微分神经网络的前向和后向RNN必须以相同的顺序执行(例如后向RNN,然后前向RNN,使得后向RNN的运算的输出可用作前向RNN的输入)。
步骤802-806(并且包括步骤811,如果有的话)表示将BRNN变换成静态微分神经网络。应当理解,在一些示例中,在生成识别BRNN的每层的前向和后向运算之前和/或在生成BRNN的每层的前向和后向网络之前,BRNN可以在预定数目的步骤上展开。因此,在一些示例中,BRNN到静态微分神经网络的变换包括:(i)在预定数目的步骤上展开BRNN;(ii)识别展开的BRNN的每层的前向和后向运算;以及(iii)将针对展开的BRNN的每层识别的前向和后向运算分组在一起,以便生成关于展开的BRNN的每层的静态前向和后向神经网络。
通常,步骤802-806(并且包括步骤811,如果有的话)可以以任何合适的顺序执行,并且一个或多个步骤可以一起执行。图8中的步骤顺序仅作为示例提供,并不是为了暗示严格的步骤顺序或者图中所示的步骤中的每个步骤必须与任何其他步骤分开执行。
典型地,BRNN运算的预定步长数目将取决于BRNN运算的输入序列的长度。对于输入序列的长度具有一定灵活性的应用(例如,输入流可以被分成预定长度的重叠或非重叠输入序列),可以根据加速器硬件的特定特性来选择输入序列的长度,以便优化加速器上的微分神经网络的性能,同时保持可接受的等待时间。例如,在加速器处的硬件中实施的微分神经网络的实例需要输入序列的所有输入(即,输入的预定数目等于BRNN处理的时间步长的数目)在所述实例开始执行之前可用。结果,虽然增加预定数目的步骤有时可以提高执行效率,但是这也将具有增加由微分神经网络执行的BRNN的等待时间的效果。
以本文所描述举例的方式,变换单元326将BRNN变换成静态微分神经网络,用于对预定长度的输入序列进行运算,所述输入序列在数学上等效于对所述输入序列执行的BRNN的接收表示。向微分神经网络提供合适的前向和后向状态输入,以便初始化网络。可以理解,可以根据应用BRNN的应用来选择这种状态输入。
控制逻辑326被配置为在加速器302处的硬件中实施807微分神经网络。如上文所描述,这可以根据在加速器上实施神经网络的常规方法来执行,例如通过使用用于加速器的驱动程序和在加速器处执行的固件。
因果/非因果拆分
用于执行神经网络运算的硬件(诸如神经网络加速器(NNA))通常被优化以并行执行大量的张量计算。硬件加速器的并行性质在运行卷积神经网络时特别有用,对于所述卷积神经网络,每个卷积层可以并行处理,例如跨越多个处理元件314并行处理。然而,当引入递归并且在给定的时间步长处在神经网络的胞元处执行的计算取决于在神经网络的胞元处关于先前和未来时间步长执行的计算时,现有方法可导致性能不佳。这是若干因素导致的结果,包括用于执行神经网络的加速器典型的并行架构利用率低、现有优化算法不太适合在硬件中执行BRNN,以及由于在每个时间步长读取权重和输入数据到加速器中的效率低下而消耗的高存储器带宽。
通过将前向和后向神经网络的RNN胞元(例如,在图5所示的一个或多个RNN胞元)中执行的运算拆分成一组非因果运算和一组因果运算,可以实现对在硬件中实施的BRNN的性能的实质性改进。RNN胞元的因果运算是依赖于作为所述胞元的状态输入而接收的前向/后向状态来执行的运算。RNN胞元的非因果运算是可以在不依赖于作为所述胞元的状态输入而接收的状态的情况下执行的运算,即,一旦所述胞元的输入数据已知就可以执行的胞元运算。因此,一旦相应的输入数据可用于这些运算,就可以同时执行非因果运算。由于非因果部分不需要遵守严格的执行顺序,因此可能并行执行多个时间步长以更有效地使用硬件,从而带来更高的利用率和更快的推断时间等益处。特别地,在包括多个处理实例314的硬件(诸如加速器302)中,与非因果计算的拆分使得多个时间步长能够跨处理实例并行执行。
应当理解,当如上文所讨论对运算进行拆分时,因果运算可包括一个或多个非因果计算,例如,因为将这些非因果计算与因果运算一起执行是有利的。然而,所述一组非因果运算不能包括任何因果计算,因为非因果运算将在硬件中并行执行。因此,应当理解,本文对因果运算的提及是指一组运算,其中包括RNN胞元的所有因果运算,但还可以包括RNN胞元的非因果运算中的一些非因果运算;并且本文对非因果运算的提及是指一组运算,其中包括RNN胞元的非因果运算中的至少一些非因果运算以供并行执行,并且没有RNN胞元的因果运算。
变换单元326可以被配置成当形成用于在加速器302处实施的微分神经网络时,从前向和/或后向RNN胞元的因果运算中拆分出非因果运算。这使得非因果运算能够被分组在一起以并行执行。现在将描述如何将RNN胞元的因果运算与非因果运算进行拆分的示例。可以对微分神经网络的每个递归胞元采用相同的方法。应当理解,根据微分神经网络的特定运算和硬件中的可用并行处理元件,可以并行地执行非因果运算,而不是通过卷积来执行。
图6说明了RNN胞元的简单示例的因果和非因果运算的分离。在图中,RNN胞元是由变换单元326形成的前向神经网络的前向RNN胞元,但是应该理解,相同的方法适用于后向神经网络的后向RNN胞元。图6示出了RNN胞元的一个简单示例,但更复杂的RNN胞元(诸如LSTM或GRU胞元)也可以表示为对一组输入和状态张量的一个或多个矩阵运算,以及各种激活函数和其他函数。其他类型的胞元可以包括其他类型的数学运算,所述其他类型的数学运算也可以根据本文阐述的原理被分成因果部分和非因果部分。可以使用不同技术来对其他类型的运算进行拆分。例如,在级联后进行逐元素相乘可重构为在级联之后进行两次逐元素相乘。
考虑一个简单的前向RNN胞元,其中加权张量W在矩阵乘法运算中与输入张量x(t)和前向状态张量h(t-1)组合。张量q和W的矩阵乘法p=Wq可以等效地表示为两个矩阵乘法的和p=Wq=W′q′+W″q″,其中W’和W”是W的元素的子集,q’和q”是q的元素的子集。因此,执行矩阵乘法的前向RNN胞元可以等效地表示为图6所示的RNN胞元600,其中胞元计算的因果部分和非因果部分被执行为单独的矩阵乘法612和614,每个矩阵乘法接收图2所示的权重WF的相应子集(同样,在后向RNN胞元的情况下,胞元计算的因果和非因果部分可以用图2所示的权重WB的对应子集来执行)。
进一步考虑原始前向RNN胞元被布置成将激活函数tanh应用于矩阵乘法的输出。因此,原始和拆分的RNN胞元的等效性可以理解如下:
其中顶行表示由原始RNN胞元执行的运算,底行表示在所拆分RNN胞元600处执行的运算。在图6的前向RNN胞元的示例中,WFx 610是与输入x(t)组合(例如,在处理中使用)的权重WF(如图2所示)的元素,WFh 608是与(前向)状态hF(t-1)622组合(例如,在处理中使用)的权重WF的元素。在矩阵乘法612处执行的非因果计算的结果在加法运算606处与在矩阵乘法614处执行的因果计算的结果进行组合。例如,加法运算606可以包括执行非因果计算的结果与因果计算的结果的逐元素相加运算。然后因果和非因果计算的总和经历激活函数616,以便生成输出yF(t)626和前向输出状态hF(t)624。在这个示例中,前向状态输出是胞元输出,但通常不必如此。
通过对RNN胞元的因果部分和非因果部分进行拆分,可以单独优化包括一个或多个这种胞元的RNN的硬件实施中的因果运算和非因果运算的执行。特别地,由于非因果运算不需要等待在先前时间步长处生成状态值,因此有可能将要对多个输入执行的非因果运算分组在一起,并且在多个处理元件处并行执行这些运算。这使得能够利用适于在硬件中实施神经网络的加速器的并行处理能力。特别地,用于实施神经网络的加速器通常包括适于有效地执行卷积运算的并行处理元件,例如,加速器302的卷积引擎308。在没有非因果计算的并行执行的情况下,将顺序地执行神经网络的胞元的组成运算,通常仅充分利用单个硬件实例(例如,单个处理元件314),从而导致较低的利用和较慢的推断。
图7是表示图5的示例性常规BRNN的BRNN层(即,BRNN1或BRNN2)的一对前向和后向神经网络的示意图,本文所描述的因果/非因果拆分方法已经应用于所述层。图7示出了在三个时间步长上展开的一对前向和后向神经网络,非因果运算在三个时间步长上并行执行。三个前向RNN胞元604或后向RNN胞元720中的每一者都可以使其因果运算和非因果运算以相对于图6所描述的方式分离。对于由变换单元形成的微分神经网络的每个胞元,可以采用相同的方法。以这种方式,上述微分神经网络的非因果运算中的一些或所有非因果运算可以在输入序列的输入上并行执行。
一般而言,根据本文所描述原理生成的微分神经网络的前向/后向神经网络的非因果运算可以被拆分,以便允许在所述前向/后向神经网络的时间步长上并行执行那些非因果运算。这是从常规和顺序BRNN导出的微分神经网络的情况。由于常规BRNN包括可以独立执行的前向和后向层(即,一个方向上的层的性能不依赖于所述层在另一个方向上的输出),所以还可以针对给定的BRNN层组合前向和后向运算的非因果运算以供并行执行。
在生成表示源BRNN的微分神经网络时,变换单元326可以被配置为从因果运算中拆分出非因果运算。通过在图8的流程图中所示的任选因果/非因果拆分对此进行说明。在步骤803和805处生成前向和/或后向RNN胞元时,变换单元326可以将前向/后向RNN胞元中的一些或所有者的因果和非因果运算拆分808/809,并将非因果运算中的至少一些非因果运算分组810到一个或多个非因果胞元中。
一般而言,对于BRNN(包括顺序BRNN),前向RNN胞元的非因果运算可以被分组在一起,并且单独地,后向RNN胞元的非因果运算可以被分组在一起以并行执行。对于前向和后向运算独立的常规BRNN,来自前向和后向胞元的至少一些非因果运算可以在一个或多个非因果胞元中分组在一起以并行执行。例如,一对前向和后向神经网络以及包括来自前向和后向网络的非因果运算的单个非因果胞元可以在关于常规BRNN层的变换单元处生成。因此,参考图7并且关于BRNN层,可以生成单个非因果胞元710以及两组因果胞元:一组代表前向神经网络(例如524)的前向胞元604;以及表示后向神经网络(例如526)的一组后向胞元720,所述后向神经网络类似地布置成对来自非因果胞元的输出704进行运算,但是使用后向状态值。
在一些示例中,当每个BRNN胞元的前向和后向运算被识别时,对非因果运算的识别可以在步骤802处执行。在这种示例中,因果运算与非因果运算的拆分811可以由变换单元在生成前向和后向神经网络之前执行。例如,可以识别每个BRNN胞元的非因果运算,并且将非因果运算中的至少一些非因果运算分组到相应的非因果胞元中。每个BRNN胞元的剩余因果运算的前向和后向运算可以被识别,并且由变换单元以本文所描述的方式变换成相应的前向和后向神经网络。在展开前向和后向胞元804/806之前,前向和后向胞元中的每一者都可以用因式分解的胞元来代替,在因式分解的胞元中,非因果运算和因果运算被拆分。
通常,任选的因果/非因果拆分811可以:在识别BRNN胞元的前向和后向运算802之前或之后;在生成前向和后向RNN胞元803/805之前或之后;在预定数目的步骤804/806上展开前向和后向单元之前或之后被执行。
通过将前向和/或后向神经网络对的非因果运算中的至少一些非因果运算分组在一起,变换单元使得这些运算能够在加速器302处并行执行。变换单元可以在预定数目的输入上形成一组或多组非因果运算,微分网络将在这些输入上进行运算。例如,表示BRNN层的给定的一对前向和/或后向神经网络的所有预定数目的输入可以被分组在一起,并被提供给针对所述层形成的非因果胞元,使得非因果运算针对所述层的所有输入并行执行。在其他示例中,可以将表示BRNN层的给定的一对前向和/或后向神经网络的预定数目的输入的子集分组在一起,并且提供给所述层的相应非因果胞元,使得并行执行非因果运算的每个子集。可以根据微分神经网络将在其上运算的硬件的处理能力来选择分组在一起的输入的数目,例如,根据可以在加速器302的处理元件314处同时并行执行的运算的数目。
并行执行非因果运算的一种方法是将所有矩阵运算转换成卷积,以在加速器302的并行卷积引擎308处执行。由于卷积引擎是为执行卷积而优化的,这可以显著提高在硬件中运行微分神经网络的性能。在具有被优化为并行执行除卷积以外的计算的处理元件的数据处理系统中,可以将微分神经网络的胞元的运算重新投射为优化处理元件的计算。
图7提供了关于如何在加速器302的卷积引擎308处并行执行常规BRNN胞元的非因果运算的图示。在这个示例中,来自相应BRNN层的前向和后向运算的非因果运算被分组在一起。在图7中,所有的输入张量506在非因果胞元710处连接,以便形成张量X’(在图中示出为相同的张量XF’和XB’),用于由非因果运算的向前和向后部分进行运算。
举例来说,输入张量xt包括506个输入值(例如,包括表示语音的音频样本序列的输入音频流的音频样本)和一对用于前向和后向方向的权重张量WFx,输入张量和权重张量两者都相加有附加的空间维度(例如,高度和宽度),以便成为和权重张量W′Fx,到非因果胞元的所有输入在级联单元712处以宽度维度级联,以获得张量其中T表示非因果胞元运算的时间步长的数目(例如,到BRNN的输入的数目)。在这个示例中,WFx'和WBx'的维数分别表示内核高度、内核宽度、输入通道数和输出通道数,XF'和XB'的维数分别表示批量大小、数据高度、数据宽度和输入通道数。
可以根据硬件加速器的特定特性来选择执行级联的维度。例如,一些硬件加速器的卷积引擎可被配置为使得在特定维度(例如,“宽度”或“高度”)上级联是有利的,以便优化对级联结果执行的卷积运算的性能。
将附加的空间维度相加到输入张量将改变它们的形状,但不改变下面的值,因为新维度的大小为‘1’。改变张量形状可能是有利的,因为神经网络中的卷积运算通常期望数据作为4D张量。举一个简单的例子,一个维度为(1,3)的2D张量[[0,9,4]]可以被重新成形为维度为(1,1,1,3)的4D,并且张量将被表示为[[[[0,9,4]]]]。
张量XF'和XB'然后可以在卷积单元714a和714b处与WFx'和WBx'卷积,以获得用于非因果计算的中间输出YF′=W′Fx*XF′和YB′=W′Bx*XB′,其中*表示权重W′x与输入X′之间的卷积运算,高度维度和宽度维度的步幅均为1。每个卷积的输出具有以下形式Y′F,粗略地说,卷积运算在数学上等效于xt与Wx的矩阵乘法,但是将这些计算作为卷积执行能够并行地利用加速器302处的多个卷积引擎308。这减小了存储器带宽,因为权重可以在卷积开始时被复制到系数缓冲器中,而不是在每个单独的时间步长处的计算之前,并且等待时间是因为在加速器处的微分神经网络的性能显著提高。
硬件加速器通常可以在卷积运算中使用公共的一组权重(滤波器)来处理并行输入数据流。这在处理卷积层时特别有用,卷积层例如处理图像,其中相同的滤波器作为滑动窗口应用于整个图像。通过在空间上对输入数据进行分组,可以按与卷积运算的输入的特征图类似的方式处理输入数据,因此使得能够在硬件加速器处并行处理输入数据。在其他示例中,非因果运算可以作为除卷积运算之外的运算并行执行。
在多个处理元件处并行地进行非因果计算以三种方式提高性能。首先,这样提高了硬件利用率,因为计算可以在与处理元件一样多的并行流上运行。其次,减少存储器带宽消耗,因为执行并行计算的多个处理元件可以(例如,在系数缓冲器330处)使用相同的权重系数,而不是需要从存储器中读取相对于每个输入的相同权重系数,以便对所述输入执行非因果计算。最小化带宽还具有减少从存储器读取/写入所花费的周期数的优点,这改善了模型的整体等待时间。另外,所述方法减少了因果计算序列中所需的处理,因为已经将非因果计算分离出去,而不是与因果计算一起执行。
在拆分的单元716a和716b处,针对三个时间步长中的每一个时间步长,相应的中间输出YB′或YF′被拆分成输出y′,其中每一y′作为输入704提供给相应的前向因果胞元604或后向因果胞元720。因果胞元对二维张量分量进行运算,而不是对提供给卷积运算的4D张量进行运算。
由于在每个时间步长处执行的前向因果计算需要在先前时间步长处生成的前向状态,因此无法并行执行前向因果计算。类似地,由于在每个时间步长处执行的后向因果计算需要在之后时间步长处生成的后向状态,因此无法并行执行后向因果计算。针对每个时间步长提供了前向和后向因果胞元,因此在图7中有三个因果胞元。前向因果胞元中的每一个因果胞元接收来自非因果胞元710的对应的张量输出y′和由因果胞元关于先前时间步长生成的状态706作为输入。后向因果胞元中的每一个因果胞元接收来自非因果胞元710的对应的张量输出y′和由因果胞元关于之后时间步长生成的状态722作为输入。
例如,前向因果胞元604中的每个因果胞元可以具有图6所示的前向因果胞元604的功能结构,每个前向因果胞元例如通过矩阵乘法614对接收状态706运算相同的一组权重608。例如,通过加法运算606,将权重608对所接收的状态706的运算结果与来自非因果胞元的相应的输出进行组合。然后,因果计算与非因果计算的组合经历激活函数206运算以提供输出708,在本发明的示例中,所述输出也是下一因果胞元的状态。如上文所描述,在其他实施方案中,可关于时间步长生成可以或可以不包括关于所述时间步长的输出的一个或多个状态值(例如,张量或单个值)。
在一些示例中,后向因果胞元720中的每个后向因果胞元可以具有与图6所示的前向因果胞元604等效的功能结构,但是使用后向状态722。后向因果胞元720可以使用权重724(其可以不同于前向因果胞元的权重)来执行不同的矩阵运算,并且可以对矩阵运算的输出执行不同的激活函数。后向因果胞元720中的每个后向因果胞元提供相应输出726,用于与前向因果胞元输出708组合,以便生成由前向和后向神经网络对表示的BRNN层的输出。例如,在图5中,如果前向因果胞元对应于前向神经网络524,后向因果胞元对应于后向神经网络526,那么在运算516处,可以组合关于每个时间步长的那些前向和后向因果胞元的输出,以便生成BRNN层输出508。
如已相对于图8所描述,在图3所示的数据处理系统中,为了拆分出微分神经网络的非因果计算以便能够并行执行这些计算,变换单元可被配置为处理微分神经网络的每个胞元,以便将那些不依赖于状态的计算与先前的胞元计算分离,并且使非因果计算在加速器的处理元件处并行执行。在一些示例中,变换单元326可以被配置成从BRNN表示338形成微分神经网络,然后进一步处理所述微分神经网络,以便以本文所描述的方式分离因果和非因果计算,非因果计算至少部分地在加速器302的处理元件314处并行执行。
控制逻辑324和/或非因果710和/或因果604胞元本身可被配置为将输入和权重转换为适合并行处理的形式以及从适合并行处理的形式转换为不适合并行处理的形式,例如,相对于图7,非因果胞元710(例如,其卷积单元714)可以将附加的空间维度相加到输入和权重中,以便将这些张量转换为适合卷积的形式。在一些示例中,不需要将附加的空间维度相加到输入和权重中,并且可以在计算期间进行推断。
当从BRNN表示导出微分神经网络并且以本文所描述的方式分离因果和非因果计算时,如果在BRNN运算的预定数目的步骤中存在灵活性,那么将预定数目的步骤选择为加速器处的处理元件数目的整数倍是有利的。这有助于在执行微分神经网络期间最大化处理元件的使用,因为并行的非因果计算可以跨系统的处理元件均匀地分散,从而将性能最大化。
图9示出了可以在其中实施本文所描述的数据处理系统的计算机系统。数据处理系统包括CPU 902、加速器302(在附图中标记为神经网络加速器NNA)、系统存储器304和其他设备914,诸如显示器916、扬声器918和相机922。计算机系统的部件可经由数据总线920彼此通信。可以在CPU 902处支持控制逻辑324和/或迭代逻辑342和/或变换单元326中的至少一些者。
顺序前向-后向/后向-前向网络
在常规(并行)BRNN中,前向和后向运算必须是独立的,前向和后向运算通常在公共输入序列上运算。还存在其他类型的双向递归神经网络,其包括依赖于在先前时间步长处生成的状态而执行的前向运算,以及包括依赖于在先前时间步长处生成的状态而执行的前向运算的后向运算,但是其中关于给定时间步长的前向和后向运算不是独立的,即在一个方向上对BRNN运算的输入(例如后向运算)依赖于来自相反方向的运算(例如前向运算)的输出。这种BRNN在这里被称为“顺序BRNN”,因为关于给定时间步长的向前和向后运算需要以特定顺序执行。这样,将会理解,虽然顺序BRNN包括单独的前向和后向RNN,用于对顺序BRNN的输入上的相应状态进行运算,但是在顺序BRNN本身内,顺序BRNN的输入仅被引导到前向和后向RNN中的第一者的输入,来自前向或后向RNN中的第一者的输出被引导到前向和后向RNN中的另一者的输入。
在顺序前向-后向网络中,前向RNN用于对输入序列进行运算,后向RNN用于对前向RNN的输出进行运算——因此,只有在前向RNN对整个输入序列的处理完成后,才能执行后向RNN。在顺序后向-前向网络中,后向RNN用于对输入序列进行运算,前向RNN用于对后向RNN的输出进行运算——因此,只有在后向RNN对整个输入序列的处理完成后,才能执行前向RNN。前向和后向RNN的输出以与对微分神经网络所描述相同的方式组合,以便形成关于输入序列的每个输入的前向和后向RNN对的输出。在本文中,顺序前向-后向网络和顺序后向-前向网络将统称为顺序神经网络,并且是顺序BRNN的示例。
常规的和顺序的BRNN都包括响应于输入序列而在前向方向和后向方向上执行的运算,并且对于每个输入,前向和后向运算的结果被组合(例如,级联在一起)。例如,这不同于将第一个(例如前向)RNN胞元的输出连接到第二个(例如后向)RNN胞元的输入,在所述情况下,两个胞元的单独输出没有级联。
本文所描述的用于将BRNN变换成微分神经网络以便能够在硬件中实施BRNN的原理适用于常规的和顺序的BRNN。应当理解,除非另有说明,否则本文提及的BRNN是指本章节中定义的常规的和顺序的BRNN。
图12以卷起的形式示出了示例性顺序神经网络1200(顺序前向-后向网络)。顺序神经网络1200可以是图1所示的BRNN层(例如,BRNN1或BRNN2)。前向RNN胞元1202在时间步长t处接收来自时间系列x(t)1201的输入数据,并且根据针对所述胞元预定义的一组计算来处理输入。在前向RNN胞元处的处理进一步根据在前向RNN胞元处理先前输入x(t-1)期间生成的前向状态hF(t-1)来执行。在附图中,被前向传递以供在下一时间步长的处理期间使用的状态被示出为状态hF(t)1205,所述状态经受等待时间1206,使得状态hF(t)与输入x(t+1)一起被提供给前向RNN胞元。
后向RNN胞元1203接收前向RNN胞元的输出作为其输入。根据在后向RNN胞元处理后续输入x(t+1)期间生成的后向状态hB(t+1),在后向RNN胞元处执行处理。在图中,状态hB(t)1207在时间1208中被后向传递,用于在处理先前时间步长期间使用,使得状态hB(t)与输入x(t-1)一起被提供给后向RNN胞元。来自前向和后向RNN胞元的输出被组合1209(例如,级联),以便形成顺序前向-后向网络的输出1204。
类似地配置顺序后向-前向网络,但是前向和后向RNN的顺序相反,使得后向RNN胞元从输入序列接收输入数据,前向RNN胞元接收后向RNN胞元的输出作为其输入。来自后向和前向RNN胞元的输出被组合,以便形成顺序后向-前向网络的输出。
图13示出了在输入序列1312上展开的图12的顺序前向-后向网络,以便生成展开的顺序神经网络1300。在图中,输入序列包括三个输入。展开的前向RNN胞元1202形成前向RNN 1302,所述前向RNN根据前向状态hF对输入序列1312进行运算。前向RNN胞元的输出1310作为输入提供给相应的后向RNN胞元1203,所述后向RNN胞元形成后向RNN 1304。在后向RNN胞元处的网络运算是根据后向状态hB来执行的。关于每个时间步长来运算的前向和后向胞元的输出被组合1316以形成输出序列1314。
预定义的初始状态值通常用于初始化顺序神经网络。例如,在初始时间步长处(例如,在t=0处),初始前向状态输入1318被提供给前向RNN;并且在BRNN将对其进行运算的输入序列的最后时间步长处(例如,在t=tmax处),初始后向状态输入1320被提供给后向RNN。初始前向和后向状态值可以是例如常数、学习的初始状态值或全零。
图13中仅示出了一组顺序的前向和后向网络(即,单个BRNN层)。通常,任何数目的顺序前向和后向网络可以堆叠在一起,包括任何数目的前向网络和任何数目的后向网络。
变换BRNN类型
在一些示例中,将BRNN从一种类型变换成另一种类型可能是有利的。例如,从常规BRNN到顺序BRNN。根据本文原理针对常规BRNN生成的微分神经网络的结构可以被修改以生成顺序前向-后向网络或顺序后向-前向网络。例如,变换单元326可以被配置成在生成关于常规BRNN层的一对前向和后向神经网络时,配置微分神经网络,使得神经网络在一个方向上的输出被提供作为在相反方向上运算的神经网络的输入(即,而不是前向和后向网络都接收关于给定时间步长的相同输入)。当源BRNN具有少量堆叠层和低维度时,这可能是有利的。
考虑根据本文所描述的原理形成的并且包括用于对输入序列的输入进行运算的N个堆叠的前向和后向神经网络对的微分神经网络,前向和后向神经网络的每个胞元具有维度(或隐藏大小)M。微分神经网络可以被修改以形成包括用于对输入序列的输入进行运算的N个堆叠的顺序前向和后向神经网络组的顺序神经网络,顺序前向和后向神经网络的每个胞元具有维度(或隐藏大小)M。当应用于同一输入数据序列时,顺序神经网络的精度通常高于微分神经网络的精度。这在下表1中说明。然而,随着堆叠数目和维度的增加,微分神经网络的精度可以接近顺序神经网络的精度。对于时序神经网络可以在其他方面提供更好性能的某些应用,因此利用时序神经网络可能是有利的。
表1
数字格式选择
图1中所示的示例性BRNN定义了将在每个时间步长t处对输入序列的元素x(t)和状态变量h(t-1)执行的运算,以生成状态变量h(t)和输出o(t)。由这些运算定义的函数随时间推移是固定的:对于输入和状态变量的相同值,无论时间指数如何,输出都将相同。所述期望的特性可被称为时间不变性。出于效率的原因,可如下所描述针对网络中的值定义块可配置数字格式。这些数字格式应该随时间推移而相同以保持时间不变性,并且在选择数字格式时需要考虑这一点,使得所选择的格式适用于所有时间步长。
BRNN与前馈(静态)神经网络的不同之处在于,在输入数目(例如,时间系列)上重复相同的图形。此外,BRNN胞元接收在BRNN的前一步骤处生成的前向状态张量和在BRNN的后一步骤处生成的后向状态张量,这两者在设计时都是未知的。为了确保网络的行为在时间上是一致的,在给定相同输入的情况下,根据本文所描述原理导出的微分神经网络的每一步都应该以相同的方式表现,而不管所述步骤在微分网络运算的步骤序列中的位置如何。网络的行为是否为时间不变部分地由RNN所执行的运算中涉及的数据值的数字格式决定。
RNN的值可以包括网络的任何张量中的元素,例如,输入值(例如,作为表示时间系列的输入张量的元素,或BRNN的胞元堆叠中的较低胞元的输出);权重值(例如,作为表示网络参数的权重张量的元素);状态值(例如,作为前向和后向状态张量的元素);以及表示网络运算之间的值的中间张量。BRNN的值在本文中可被称为网络值。在BRNN的硬件实施中,需要针对网络的所有值选择合适的数字格式。可以预定义一些值的数字格式或数字格式的至少一些参数。网络的一些或所有值的数字格式可以根据本文所述的数字格式选择方法来确定。
BRNN在其输入序列上的每次迭代包括网络的每个值的实例(例如,BRNN的张量的元素)。因此,将BRNN迭代N次来生成其网络值的N个实例。为了确保时间不变性,网络中的值的所有实例应该具有相同的数字格式。现在将描述选择数字格式的一种方法,以在硬件中实施BRNN时使用,特别是在根据上文所描述原理在硬件(例如,在图3中所示的数据处理系统)中实施BRNN时使用。
如本领域的技术人员所知,对于处理一组值的硬件,这些值必须以数字格式表示。两种类型的数字格式是定点数格式和浮点数格式。定点数格式在小数点后有固定的位数(如小数点或二进制点)。相反,浮点数格式没有固定的基数点(即,可以是“浮点型”)。换句话讲,基数点可放置在表示中的任何位置。虽然以浮点数格式表示输入数据值和权重可允许生成更准确或更精确的输出数据,但与以定点数格式处理值的硬件相比,在硬件中以浮点数格式处理数字很复杂,这往往会增加芯片的面积和硬件的复杂性。因此,硬件实施可被配置为以定点数格式处理输入数据值和权重,以减少表示网络的值所需的位数,从而减少硬件实施的硅面积、功耗和存储器带宽。
数字格式类型定义形成这种类型的数字格式的参数以及参数的解释方式。例如,一种示例性数字格式类型可以指定数字或值由b位尾数m和指数exp表示,并且该数字等于m*2exp。如下文更详细地描述的,一些数字格式类型可以具有可配置参数,这些可配置参数也可以被称为定量参数,可以在该类型的数字格式之间变化。例如,在上述示例性数字格式中,位宽b和指数exp可以是可配置的。因此,该类型的第一数字格式可以使用位宽b4和指数exp 6,并且该类型的第二不同数字格式可以使用位宽b 8和指数exp-3。
量化的BRNN(即,其中网络值的至少一部分由非浮点数格式表示的BRNN的型式)的精度可以通过响应于输入数据而将这种BRNN的输出与基线或目标输出进行比较来确定。基线或目标输出可以是响应于相同的输入数据或用于输入数据的地面实况(ground truth)输出的RNN的未量化型式(即,其中所有网络值由浮点数格式表示的RNN的型式,在本文中可称为RNN的浮点型式或浮点RNN)的输出。来自基线或目标输出的定量BRNN的输出越多,定量BRNN的精度就越低。量化的BRNN的大小可以由用于表示BRNN的网络值的位数来确定。因此,用于表示BRNN的网络值的数字格式的位深度越低,BRNN越小。
虽然可以使用单个数字格式来表示BRNN的所有网络值(例如,输入数据值、权重、偏差和输出数据值),但这通常不会生成小且准确的BRNN。这是因为BRNN的不同运算往往对具有不同范围的值进行运算,并生成具有不同范围的值。例如,一个运算可以具有介于0与6之间的输入数据值,而另一个运算可以具有介于0与500之间的输入数据值。因此,使用单个数字格式可能不允许有效或准确地表示任一组输入数据值。因此,可以将BRNN的网络值分成两个或更多个网络值的集合,并且可以为每个集合选择数字格式。优选地,每一组网络值包括相关或类似的网络值。
每一组网络值可以是用于运算的特定类型的网络值的全部或一部分。例如,每组网络值可以是运算的输入数据值的全部或一部分;运算的权重的全部或一部分;运算的偏差的全部或一部分;或运算的输出数据值的全部或一部分。一组网络值是否针对胞元包括特定类型的网络值的全部或仅一部分可取决于例如实施BRNN的硬件和BRNN的应用,例如,在卷积权重张量中基于每个滤波器识别数字格式在一些情况下可以提高输出精度。例如,可用于实施BRNN的某些硬件在每次运算中只能支持每一种网络值类型的单个数字格式,而其他可用于实施BRNN的硬件在每次运算中可支持每一种网络值类型的多个数字格式。
用于实施BRNN的硬件(诸如加速器302)可以支持网络值的一种类型的数字格式。例如,用于实施RNN的硬件可以支持其中数字由b位尾数和指数exp表示的数字格式。为了允许使用不同的数字格式表示不同的网络值集合,用于实施RNN的硬件可以使用具有一个或多个可配置参数的数字格式类型,其中参数在两个或更多个值的集合中的所有值之间共享。这些类型的数字格式在本文中可以被称为块可配置类型的数字格式或集合可配置类型的数字格式。因此,非可配置格式,诸如INT32和浮点数格式,不是块可配置类型的数字格式。示例性块可配置类型的数字格式如下所描述。可以执行本文所描述的方法以识别针对BRNN的两个或更多个值的适当的可块配置类型的数字格式。
可以用来表示BRNN的网络值的一种示例性块可配置类型的数字格式为Q类型格式,其指定预先确定的数量的整数位a和小数位b。因此,数字可以表示为Qa.b,这总共需要a+b+1位(包括符号位)。下面的表1中示出了示例性Q格式。Q类型格式的量化参数是整数位数a和小数位数b。
表1
Q格式 | 描述 | 示例 |
Q4.4 | 4个整数位和4个小数位 | 0110.11103 |
Q0.8 | 0个整数位和8个小数位 | .011011103 |
然而,Q格式的缺点在于,用于表示数字的一些位可被认为是多余的。在一个示例中,数字范围[-0.125,0.125)将以3位的精度表示。这个示例性范围和精度所需的Q格式为Q0.5。然而,如果假定值的范围是预先已知的,那么所述数字的前两位将永远不会用于确定以Q格式表示的值。例如,表示的前两位对最终数字没有贡献,因为它们分别表示0.5和0.25,并且因此不在所需范围之内。然而,它们用于指示第三位位置的值(即,由于相对的位位置而产生的0.125和更高值)。因此,上述Q格式是用于神经网络的硬件实施中的效率低下的定点数格式,因为一些位可能无法传达有用信息。
可用于表示BRNN的网络参数的另一个示例性块可配置类型的数字格式是一种这种类型的数字格式由固定的整数指数exp和b位尾数m定义,使得值u等于u=2expm的数字格式。在一些情况下,尾数m可以二进制补码格式表示。然而,在其他情况下,可以使用其他经签名或未签名的整数格式。在这些情况下,指数exp和尾数位数b只需为以该数字格式表示的两个或多个值的集合存储一次。这种类型的不同数字格式可以具有不同的尾数位长度b和/或不同的指数exp,因此这种类型的数字格式的量化参数包括尾数位长度b(在本文中也可以称为位宽度、位深度或位长度)和指数exp。
可以用于表示BRNN的网络参数的另一个示例性块可配置类型的数字格式为8位不对称固定点(Q8A)类型格式。在一个示例中,这种类型的数字格式包括最小可表示数rmin、最大可表示数rmax、零点z,以及集合中的标识最小可表示数和最大可表示数之间的线性内插因子的每个值的8位数字dQ8A。在其他情况下,可以使用这种类型的格式的变体,其中用于存储内插因子dQbA的位数是可变的(例如,用于存储内插因子的位数b可以是多个可能的整数中的一个整数)。在该示例中,Q8A类型格式或Q8A类型格式的变体可以近似于浮点值dfloat,如等式(3)所示,其中b为量化表示所使用的位数(即,针对Q8A格式为8),并且z为总是准确映射回0的量化零点。该示例性类型的数字格式的量化参数包括最大可表示数或值rmax、最小可表示数或值rmin、量化零点z,以及可选地,尾数位长度b(即,当位长度不是固定为8时)。
在另一个示例中,Q8A类型格式包括始终精确映射到0.f的零点z、比例因子scale和集合中每个值的8位数字dQ8A。在该示例中,这种类型的数字格式近似于如等式(4)中所示的浮点值dfloat。类似于第一示例性Q8A类型格式,在其他情况下,整数或尾数分量的位数可以是可变的。该示例性类型的数字格式的量化参数包括零点z、比例scale,以及可选地,尾数位长度b。
dfloat=(dQ8A-z)*scale (4)
确定特定的块可配置类型的数字格式可描述为标识该类型的数字格式的一个或多个量化参数。例如,确定由b位尾数和指数exp定义的数字格式类型的数字格式可以包括标识尾数和/或指数exp.的位宽b。可针对给定的网络值预定义特定类型的块可配置数字格式。
为了减小BRNN的硬件实施的大小并且提高效率,硬件实施可以被配置为以块可配置数字格式处理数据值。一般来讲,用于表示BRNN的网络值(例如,其输入数据值、权重和输出数据值)的位越少,BRNN在硬件中实施的效率越高。然而,通常用于表示BRNN的网络值的位越少,BRNN就变得越不准确。因此,期望标识用于表示BRNN的网络值的平衡用于表示网络值的位的数量和BRNN的准确度的数字格式。此外,由于输入、权重和状态数据值的范围可以变化,当用于表示数据值的块可配置数字格式可以针对每组值(例如,网络的每个张量)变化时,硬件实施能够更有效地处理BRNN。例如,通过使用由指数2和尾数位长度6定义的块可配置数字格式来表示网络中的一组值,以及使用由指数4和尾数位长度4定义的块可配置数字格式来表示网络中的另一组值,硬件实施可能能够更有效和/或更准确地实施BRNN。
现在将描述用于确定BRNN的两个或更多个值的集合的块可配置类型的数格式的方法。BRNN的两个或更多个值的集合可以包括一个或多个张量的一部分或全部。例如,本文的方法可用于确定张量的一些或所有值的数字格式,其中针对两个或多个值的不同集合(例如,不同的张量或张量的部分)识别不同的数字格式。不同的数字格式选择算法可用于识别两个或更多个值的不同集合的数字格式。
本文所描述的方法可以与任何合适的数字格式选择算法一起使用,包括例如:后向传播格式选择、贪婪行搜索和端到端格式选择、正交搜索格式选择、最大范围(或“MinMax”)格式选择、异常值拒绝格式选择、基于误差的启发式格式选择(例如,基于带有或不带有离群值加权的平方误差的总和)、加权离群值格式选择,或者梯度加权格式选择算法。特别地,本文所描述的方法可以与公布号为2568083、2568084、2568081或英国专利申请号2009432.2的英国专利申请中公开的特定格式的选择算法一起使用,这些专利申请中的每一个专利申请的全文以引用方式并入本文。
为了选择根据本文所描述的原理实施的BRNN的网络值的数字格式,对样本输入数据执行表示BRNN的微分神经网络,以便向数字格式选择算法提供统计。这种统计数据可以是例如网络值、网络值的平均值/变量、最小/最大网络值、汇总网络值的直方图、相对于网络输出计算的梯度或基于网络输出的误差度量,以及格式选择算法所需的由神经网络或监视神经网络的逻辑(例如,格式选择单元344)使用或生成的任何其他数据。在一些示例中,使用网络值的浮点数格式来执行微分神经网络。例如,微分神经网络可以在软件中执行,对网络中的输入数据、权重、状态和输出数据值使用浮点数格式。32位或64位浮点数格式表现良好,因为数字格式通常应该尽可能接近无损以尽可能获得最佳结果,但可能使用具有大范围/大量的位的块可配置数字格式。
微分神经网络可以以任何合适的方式执行,以便执行数字格式选择。例如,微分神经网络可以在软件中执行(例如,使用深度学习框架,例如TensorFlow,其中软件支持执行动态图形,或作为静态图形执行,所述静态图形表示在序列中针对每个时间步长运行的单个时间步长,其中基于在每次运行时收集的统计数据来选择网络值的数字格式)或在硬件中(例如,在加速器诸如加速器302处)执行。
如上文所描述,对于它所代表的BRNN的每一层,微分神经网络包括在BRNN要运算的输入序列上展开的前向和后向神经网络,以及任选地包括一个或多个非因果层和/或用于组合前向和后向神经网络的输出的组合运算。当展开RNN时,相同的张量将作为所述张量的实例出现在每个时间步长处。为了实现时间不变性,并且为了使包括向前和向后展开的RNN的微分神经网络等效于原始BRNN,相同张量的所有实例需要在展开的RNN上具有相同的格式。例如,在图5所示的展开的微分网络中,在块可配置的数字格式对应于张量的情况下,所有输入张量x(t)具有相同的数字格式,所有前向状态张量h1F(t)具有相同的数字格式,所有后向状态张量h1B(t)具有相同的数字格式。不同的状态张量可以具有不同的数字格式,并且对应于原始BRNN的不同层的RNN胞元的输入和输出可以具有不同的数字格式(例如,前向RNN 524和后向RNN 526对应于BRNN的第一层,前向RNN 528和后向RNN 530对应于BRNN的第二层)。
图11说明了对根据本文所描述的原理导出的微分神经网络的两个或更多个值执行数字格式选择的方法。两个或更多个值可包括微分神经网络的一个或多个张量的一些或全部元素。所述方法可以在接收用于在硬件中实施的BRNN 1101(例如,常规的或顺序的BRNN)时执行,例如,在图3中的数据处理系统的加速器302处。所述方法可在根据本文所描述的原理或以其他方式在硬件中实施BRNN之前在设计阶段1109中执行。图11中标识的设计阶段1109的格式选择可在图3中所示的格式选择单元344的控制下执行。在一些示例中,格式选择单元344可以与变换单元326是同一个单元或者相同。
在第一步骤1102处,根据本文所描述的原理,(例如,在变换单元326处)将BRNN变换为包括前向RNN和后向RNN(以及任选的其他层,例如非因果层和/或被配置为组合来自前向和后向RNN的输出值的层)的微分神经网络。微分神经网络以上文关于图8中的步骤804和806描述的方式在测试步骤数上展开。一旦已经执行了数字格式选择,测试步骤数可以不同于当在硬件中实施时微分神经网络将运算的步骤数。
然后在硬件或软件中实施1103在测试步骤数上展开的微分神经网络作为测试神经网络,以便能够为数字格式选择算法收集统计数据。微分神经网络可以以任何合适的方式实施为测试神经网络。在样本输入数据的多个测试时间步长上执行测试神经网络,以便捕获数字格式选择算法所需的统计数据。测试时间步长的数目可以不同于(例如,少于)BRNN将被运算的时间步长的数目。通常只需执行少量的时间步长就可以获得良好的性能。测试神经网络可以任何功能正确的方式运行,并且输出格式选择方法所需的数据。在一些示例中,测试神经网络与微分神经网络是同一个网络。
在一些示例中,测试神经网络可以用软件实施,例如在CPU(例如,图9所示的计算机系统的CPU 902)上运行的格式选择单元344处包括的软件。例如,网络可以在TensorFlow或PyTorch中运行,并且可以输出两个或更多个值的所有集合的最大绝对值以供MinMax格式选择算法使用。设计阶段1109中的数字格式选择不需要在最终将在硬件中实施微分神经网络的相同的计算系统处执行。在一些示例中,测试神经网络在硬件中实施以选择适当的数字格式,例如,在数据处理系统300中的加速器302处。
硬件(和其相关联逻辑,诸如控制逻辑324)应该能够以足够高的精度执行网络,以避免显著的量化误差(例如32位浮点)并提供合适的统计数据。在一些示例中,测试神经网络可以在硬件加速器302处实施,以便根据本文所描述的原理为网络的值选择数字格式。
测试神经网络代表完整的展开的微分神经网络的全部或一部分,所述网络将在硬件中实施,以便在预定义的输入序列上执行BRNN。在一些示例中,测试神经网络可以被迭代,直到识别出可接受的数字格式,来自测试神经网络的每次迭代的前向和后向状态输出作为前向和后向状态输入被提供给测试神经网络的下一次迭代。然而,如果展开微分神经网络以形成测试神经网络的测试步骤数至少是为了执行微分神经网络的数字格式选择而预期需要执行的测试步骤数,那么是有利的。这避免了迭代测试神经网络的需要,并且使得能够根据从测试神经网络的单个实例的应用中使用的选择算法来识别数字格式。在一些示例中,测试步骤数与接收到的BRNN要运算的输入的预定义数目相同。
在1104处,测试神经网络的输入前向和后向状态张量被初始化。神经网络的初始前向和后向状态张量可能不同于后续时间步长处的典型前向和后向状态张量。由于测试神经网络的第一时间步长经常是例外的,因此通常不能仅基于第一时间步长来选择合适的数字格式。初始状态张量优选地是供当在硬件中将BRNN实施为上文所描述的微分神经网络时使用的相同的初始状态张量。重要的是,数字格式对于第一时间步长和后续时间步长都起作用。因此,在包括第一时间步长的多个测试时间步长上执行数字格式选择是有利的。状态张量的初始化可在网络进入其稳态行为之前的前几个时间步长中生成瞬态效应。初始化步骤1104通常将与实施步骤1103一起执行,作为测试神经网络的实施的一部分。
为了执行数字格式选择,对合适的样本输入数据执行1105、测试神经网络,以便能够捕获合适的统计数据用于数字格式选择算法。测试神经网络针对预先确定的数目的一个或多个时间步长执行,以便在每个时间步长处生成数字格式选择算法所需的统计数据。合适的样本输入数据可以包括选择为表示将在硬件中实施的微分神经网络的典型或预期输入范围的示例性数据。在一些示例中,样本输入数据可以是来自将应用微分神经网络的实际源的输入数据,例如,将执行语音辨识的音频信号。
从神经网络捕获统计数据是本领域众所周知的,并且应当理解,统计数据的特定性质将取决于神经网络的性质、其应用以及正在使用的数字格式选择算法的要求。在测试神经网络和/或与测试神经网络相关联的逻辑(例如,在格式选择单元344)处生成的统计数据(例如,数据值、最大值/最小值、直方图数据)可以以任何合适的方式捕获。例如,在测试神经网络在图9中的CPU 902处运行的软件中实施的情况下,统计数据可以存储在存储器304处,以供(也可以在CPU处运行的)格式选择单元344同时处理或随后处理。在一些示例中,统计数据中的至少一些统计数据包括在测试神经网络处(例如,在堆叠的测试神经网络单元和/或测试神经网络胞元的运算之间)生成的中间数据值。
在步骤1106处,将数字格式选择算法应用于从测试神经网络的运算收集的统计数据。数字格式选择算法可以与测试神经网络同时运行以及/或者随后可以对所捕获的统计数据执行。设计阶段1109的格式选择可以在格式选择单元344处执行。数字格式选择算法可以是用于识别两个或更多个网络值集合的块可配置数字格式的任何算法。算法的特定选择通常由以下各项中的一种或多种决定:将应用由微分神经网络表示的BRNN的应用程序;张量所运算的两个或多个值所属的张量的性质;以及运行算法所需的时间和/或计算资源量(更复杂的算法可能提供更好的结果,但可能需要更多倍的时间来运行)。
执行数字格式选择时受到如下约束,即展开的测试神经网络中相同张量的所有实例(以及微分神经网络中相应的张量)必须具有相同的数字格式。因此,特定状态张量(例如,图5中的前向状态张量h1F)的所有实例必须具有相同的数字格式,但是不同的状态张量(例如,前向状态张量h1F和前向状态张量h2F,或者前向状态张量h1F和后向状态张量h1B)可以具有不同的数字格式。此外,代表BRNN层的给定的一对前向和后向神经网络(例如524和526)的前向和后向胞元(例如512和514)的输出必须具有相同的格式,以便允许这些输出的组合。
在本发明的示例中,数字格式选自块可配置类型的数字格式,指数的位数可以是固定的(例如,带符号的6个位)。因此,指数长度不必与每个数据值一起存储,而是可以针对数据值的群组来定义,例如,针对测试神经网络的每个张量、针对每个张量的两个或更多个元素的集合、针对每种类型的张量(例如,针对输入和/或权重和/或输出的不同指数长度)、针对张量群组,或者针对测试神经网络的所有张量,可以预定义指数长度。与存储网络值的实际尾数所需的位数相比,存储指数和尾数长度所需的数据量(例如,存储数字格式所需的位数)可以是固定的并且可以忽略不计。因此,尾数位数是表示网络值的数字格式所需的位数的主要决定因素。
数字格式选择算法可以确定块可配置类型的数字格式的尾数的长度(例如,以位为单位)。例如,测试神经网络用来表示数据值的每个块可配置数字格式都包括指数和尾数位长度,可以减少归因于量化误差最低部分的胞元所使用的块可配置数字格式的尾数位长度,或者可以增加归因于量化误差的最高部分的胞元所使用的块可配置数字格式的尾数位长度。数据值的量化误差是原始浮点数格式的数据值(即,如出于数字格式选择的目的用于测试神经网络的实施)与块可配置数格式的数据值(即,如建议用于微分神经网络的硬件实施)之间的差。
已经开发了几种方法来识别用于表示测试神经网络的网络值的数字格式。一种用于选择用于表示测试神经网络的一组网络参数的数字格式的简单方法(本文中可称为全范围法或最小值/最大值或MinMax方法)可包括,针对给定的尾数位深度n(或给定的指数exp),选择覆盖预期的网络值集合x的范围的最小指数exp(或最小尾数位深度n)用于运算。例如,对于给定的尾数位深度b,可以根据等式(5)选择指数exp,使得数字格式覆盖x的整个范围,其中是上限函数:
然而,此类方法对异常值敏感。具体地,在网络值集合x有异常值的情况下,牺牲精度来覆盖异常值。这可导致大的量化错误(例如,第一数字格式(例如,浮点数格式)的网络值集合与所选择的数字格式的网络值集合之间的误差)。因此,由量化引起的运算和/或测试神经网络的输出数据中的误差可大于数字格式涵盖较小范围时的误差,但更精确。
在其他示例中,可使用具有异常值加权的平方误差算法的总和。在相对重要的值通常是在给定的两个或多个值的集合的值范围的较高端的值的情况下,所述算法可能是合适的。对于通过惩罚量值进行正则化的权重张量尤其如此,因此可期望具有较高值的元素比具有较低值的元素具有更大的相对重要性。另外,钳位是特别具有破坏性的噪声形式,可在所得的两个或更多个值的量化集合中引入强偏置。因此,在一些应用中,将误差偏置成保留大值,同时避免以牺牲定量误差为代价保留全范围的极端(例如,如在“MinMax”方法中)是有利的。例如,如下式(6)中所示的加权函数α(x)与误差的平方度量组合可用于平方误差算法的总和。
其中SAT是定义为2exp+n-1的饱和点,exp是定点数格式的指数,n是尾数的位数,δe是2exp(即,一个量化级别),并且γ是根据经验选择的梯度。对于一些神经网络,20的梯度可以良好地起作用。
在申请人的英国专利申请号1718293.2中描述了一种加权异常值方法,所述专利申请的全文以引用方式并入本文。在加权异常值的方法中,当使用特定的数字格式时,基于定量误差的加权总和,从多个潜在数字格式中选择网络值集合的数字格式,其中将恒定权重应用于落入数字格式的可表示范围内的网络值的定量误差,并且将线性增加的权重应用于落入可表示范围之外的值的定量误差。
申请人的英国专利申请号1821150.8中描述了另一种方法(可被称为后向传播方法),所述专利申请的全文以引用方式并入本文。在后向传播方法中,产生最佳成本的量化参数(例如,精度与神经网络大小(例如,位数)的组合)通过使用后向传播迭代地确定相对于每个量化参数的成本的梯度来选择,并且调整定量参数直到成本收敛。所述方法可以产生良好的结果(例如,(在位数方面)小且准确的神经网络),但是它可能需要很长时间才能收敛。
一般来讲,数字格式的选择可被设想为优化问题,所述优化问题可以对测试神经网络中的数字格式的参数中的一个、一些或全部参数执行。在一些示例中,可以同时优化数字格式的多个参数;在其他示例中,可以依次优化格式选择方法的一个或多个参数。在一些示例中,网络值的位深度可以用所应用的格式选择算法来预定义,以便为测试神经网络的网络值选择合适的指数。网络值的位深度可以是固定的,或者在一些示例中可以是待优化的参数。在一些示例中,应用1106数字格式选择算法可以包括针对测试神经网络的值识别适当的位深度。为了确保测试神经网络的每个时间步长是相同的,测试神经网络的不同时间步长的两个或更多个值的实例被约束为具有相同的位深度。例如,前向状态张量h1F(t)的每个实例具有相同的位深度,并且输入张量x(t)的每个实例具有相同的位深度。
如已经描述的,在步骤1105处,在预定义数目的时间步长上对样本输入数据运算测试神经网络,而不对其网络值进行任何(或最小)量化,以便在每个时间步长处捕获格式选择方法所需的统计数据。将格式选择方法应用1106于在测试神经网络的每个时间步长处捕获的统计数据,以为测试神经网络的网络值选择最佳数字格式。可以选择和/或配置数字格式选择算法,以识别要确定数字格式的每个网络值的块可配置类型的数字格式。如上文所解释的,由算法识别的块可配置数字格式通常将表示为定义块可配置数字格式所属的块可配置数字格式的类型的一个或多个参数的集合。
可以对在一个或多个时间步长处捕获的统计数据针对两个或更多个网络值集合执行数字格式选择。可以对在一个以上的时间步长序列上捕获的统计数据针对两个或更多个网络值的集合执行数字格式选择,例如通过将测试神经网络应用于第一样本输入序列,然后应用于第二样本输入序列。数字格式选择算法可以应用于在多个时间步长序列上捕获的所有统计数据,以便以本文所描述的方式识别两个或更多个网络值的集合的单个公共数字格式,或数字格式选择算法可独立地应用于在不同的时间步长序列上捕获的统计数据,其中相对于根据本文所描述的方法组合的每个序列识别数字格式,以便针对两个或更多个网络值的集合识别单个公共数字格式。这有助于确保针对每组两个或更多个网络值识别的公共数字格式的一般性。
在一些示例中,将格式选择算法独立地应用1106于在每个时间步长(或捕获统计数据的时间步长的子集)处捕获的统计数据,以便在每个(或那些)时间步长处识别每个网络值实例的数字格式;然后对这些实例的数字格式进行组合以便针对所有时间步长上的网络值生成公共数字格式1107。在其他示例中,将格式选择算法(例如,同时地)应用1106于在执行测试神经网络的所有预定数目的时间步长上捕获的统计数据,以便在执行RNN的所有时间步长(即,网络值的每个实例)上识别1107给定网络值的公共数字格式。在这种示例中,当在硬件中实施时,格式选择算法识别1107在微分神经网络中的相应网络值的所有实例上使用的公共数字格式。
当格式选择算法同时应用于在执行测试神经网络的所有预定义数目的时间步长上捕获的统计数据时,格式选择算法的输出可以是网络值的单个公共数字格式。例如,在对样本输入数据运行测试神经网络时捕获的统计数据可以包括在每个时间步长处捕获测试神经网络的一组两个或更多个值的最大绝对值。格式选择算法然后可包括通过在每个时间步长处采用所捕获的最大绝对值的最大值并且对所述最大值执行MinMax算法来组合最大绝对值,以便识别所述组值的公共的块可配置数字格式的参数。
如上文所解释的,为了确保在RNN的硬件实施中执行的时间步长期间的时间不变性,网络值的每个实例(即,每个时间步长的网络值)必须具有相同的数字格式。在格式选择算法对在预定义数目的时间步长捕获的统计数据执行多次(例如,格式选择算法独立地应用于在每个时间步长或时间步长的子集处捕获的统计数据)的情况下,格式选择算法可以识别每个网络值的一个以上的数字格式。换句话讲,可以在不同的时间步长处针对同一组值的实例识别不同的数字格式。在这种情况下,得到的数字格式被组合,以便针对测试神经网络的每个网络值识别1107公共数字格式。当在硬件中实施时,这种公共数字格式可以用于微分神经网络中相应网络值的所有实例。
块可配置数字格式可以表示为定义数字格式的一组一个或多个参数,例如,第一整数值可表示指数,并且第二整数值可表示尾数位深度。每个参数可以独立地组合,以便形成公共数字格式。例如,表示为张量实例建立的数字格式的整数参数可以通过识别中值、最小值、最大值或平均值(例如,最接近平均值的整数值)整数值来组合,然后可以用作公共数字格式的相应参数。已发现,使用每组实例的数字格式的指数的中值提供良好的精度。
考虑特定示例,其中为网络值的实例建立的数字格式由定义块可配置数字格式的指数的整数参数定义。在这个示例中,在RNN的四次迭代中的每一次迭代处,数字格式可由网络值的格式选择算法独立地识别。如果所识别的数字格式具有指数5、6、5、4,那么中值指数为5,并且公共数字格式可以被识别为具有指数5的数字格式。
一旦已建立公共数字格式,就可以在RNN的硬件实施中使用1108公共数字格式。例如,可以将公共数字格式提供给图3所示的数据处理系统的变换单元326以用于微分神经网络。针对测试神经网络的网络值识别的相同的公共数字格式用于微分神经网络中的所述网络值的所有实例。例如,针对测试神经网络的输入张量x建立的公共数字格式用作微分神经网络的输入张量的所有实例的数字格式,并且针对测试神经网络的第一状态张量h1建立的公共数字格式用作微分神经网络的第一状态张数的所有实例的数字格式。
除了随时间推移提供一致的行为之外,本文所描述的方法还使所选择的格式更稳健,因为从RNN的多个时间步长汇集信息。例如,如果某个张量在给定时间步长处的行为与先前时间步长处的行为不同,从而导致这些时间步长的数字格式不同,这种方法有可能在展开图中将这种格式推广到给定时间步长之前和之后的所有其他时间步长,这意味着如果异常行为发生在序列中的不同点,则可以正确地处理这些张量值。
针对表示BRNN的微分神经网络执行数字格式选择的本发明的方法可以应用于其中根据上述原理对因果部分和非因果部分进行拆分的神经网络。由于因果运算和非因果运算分开执行,因此对可以根据本发明的方法独立地选择公共数字格式的不同张量执行这些运算。这允许将不同数字格式用于因果运算和非因果运算,这样可以改进性能(例如,推断速度)并且/或者使得能够用较低的存储器和处理开销来实现给定的性能水平。
为了对以不同数字格式定义的值的组合执行运算,可以对组合的一个或多个值的数字格式进行转换,以确保组合的值具有相同的数字格式。例如,参考图7,如果非因果胞元的输出704具有第一数字格式,并且状态输入706具有第二数字格式,那么因果胞元604处的加法运算可被配置为将输出704和/或状态输入706转换为相同的(可能是第三)数字格式。可以在硬件处,例如在数据处理系统300中的加速器302处执行转换。
技术人员将了解如何在数字格式之间转换数据值。例如,从具有尾数m1和指数e1的一种数字格式转换为具有尾数m2和指数e2的具有相同位深度的另一种数字格式可以如下执行,其中数字格式的指数不同:
此类转换受到饱和与量化误差的影响,具体取决于e2是低于还是高于e1。
本方法使得能够为微分神经网络的两个或更多个值(例如,张量、张量的部分、张量的组)的集合选择不同的数字格式。这使得微分神经网络的性能得以优化。当在硬件中执行微分神经网络时,相对于不同网络值独立地执行数字格式选择可以通过为格式选择提供更大的灵活性而提供更好的结果。
一般性评论
图3的数据处理系统被示出为包括许多功能块。这仅是示意性的,并不旨在限定这种实体的不同逻辑元件之间的严格划分。每个功能块可以任何合适的方式提供。应当理解,本文所描述的由计算机系统形成的中间值不需要由计算机系统在任何时间点物理地生成,并且可以仅表示方便地描述由计算机系统在其输入与输出之间执行的处理的逻辑值。
本文所描述的加速器以硬件体现,例如,加速器可包括一个或多个集成电路。本文所描述的数据处理系统可被配置为执行本文所描述的任何方法。除非另行指出,否则上文所描述的功能、方法、技术或部件可以在软件、固件、硬件(例如,固定逻辑电路系统)或它们的任何组合中实施。本文可以使用术语“模块”、“功能性”、“部件”、“元件”、“单元”、“块”和“逻辑”来概括地表示软件、固件、硬件或它们的任何组合。在软件的情况下,模块、功能性、部件、元件、单元、块或逻辑表示程序代码,所述程序码在处理器上执行时执行指定任务。本文所描述的软件可以由执行代码的一个或多个处理器执行,所述代码使一个或多个处理器执行由所述软件体现的算法/方法。计算机可读存储介质的示例包括随机存取存储器(RAM)、只读存储器(ROM)、光盘、闪存存储器、硬盘存储器以及可以使用磁性、光学和其他技术来存储指令或其他数据并且可以由机器存取的其他存储器设备。
如本文所使用的术语计算机程序代码和计算机可读指令是指处理器的任何类型的可执行代码,包括以机器语言、解释语言、脚本语言和编译的高级语言中的一者或多者表达的代码。可执行代码包括二进制代码、机器代码、字节代码、定义集成电路的代码(诸如硬件描述语言或网表),以及用诸如C、Java或OpenCL等编程语言代码表达的代码。可执行代码可以是例如任何种类的软件、固件、脚本、模块或库,这些软件、固件、脚本、模块或库当在虚拟机或其他软件环境中被适当地执行、处理、解译、编译、运行时,使处理器执行由代码指定的任务。
处理器可以是任何种类的设备、机器或专用电路,或它们的集合或一部分,它具有处理能力从而可以执行指令。处理器可以是任何种类的通用或专用处理器,诸如片上系统、专用集成电路(ASIC)、可编程逻辑阵列、现场可编程门阵列(FPGA),等等。计算系统可以包括一个或多个处理器。
本发明还旨在涵盖限定如本文所描述的硬件的配置的软件(诸如,HDL(硬件描述语言)软件),所述软件用于设计集成电路或用于配置可编程芯片,以执行所需功能。也就是说,可以提供一种计算机可读存储介质,所述计算机可读存储介质上编码有集成电路定义数据集形式的计算机可读程序代码,所述计算机可读程序代码当在集成电路制造系统中被处理时,将所述系统配置为制造被配置为执行本文所描述的任何方法的计算机系统,或者制造如本文所描述的计算机系统。集成电路定义数据集可以是例如集成电路描述。
可以提供一种在集成电路制造系统中制造如本文所描述的计算机系统的方法。可以提供一种集成电路定义数据集,所述集成电路定义数据集当在集成电路制造系统中被处理时,使得制造计算机系统的方法被执行。
集成电路定义数据集可呈计算机代码形式,例如作为网表、用于配置可编程芯片的代码,作为在任何层级定义集成电路的硬件描述语言,包含作为寄存器传送级(RTL)代码、作为高级电路表示,诸如Verilog或VHDL,以及作为低级电路表示,诸如OASIS(RTM)和GDSII。在逻辑上定义集成电路的更高级表示法(诸如RTL)可以在配置为在软件环境的上下文中生成集成电路的制造定义的计算机系统处处理,所述软件环境包括电路元件的定义和用于组合这些元件以便生成由表示定义的集成电路的制造定义的规则。如通常软件在计算机系统处执行以便定义机器的情况一样,可能需要一个或多个中间用户步骤(例如,提供命令、变量等),以便将计算机系统配置为生成集成电路的制造定义,以执行定义集成电路以便生成集成电路的制造定义的码。
现在将参考图10描述在集成电路制造系统处对集成电路定义数据集进行处理以便将所述系统配置为制造计算机系统的示例。
图10示出了集成电路(IC)制造系统1002的示例,所述集成电路制造系统被配置为制造如本文中任何示例中描述的计算机系统。特别地,IC制造系统1002包括布局处理系统1004和集成电路生成系统1006。IC制造系统1002被配置为接收IC定义数据集(例如,限定如本文的任何示例中所描述的计算机系统),处理IC定义数据集,并且根据IC定义数据集(例如,其体现如本文的任何示例中所描述的计算机系统)来生成IC。IC定义数据集的处理将IC制造系统1002配置为制造体现如本文的任何示例中所描述的计算机系统的集成电路。
布局处理系统1004被配置为接收和处理IC定义数据集以确定电路布局。根据IC定义数据集确定电路布局的方法在本领域中是已知的,并且例如可以涉及合成RTL代码以确定待生成的电路的门级表示,例如就逻辑部件(例如,NAND、NOR、AND、OR、MUX和FLIP-FLOP部件)而言。通过确定逻辑部件的位置信息,可以根据电路的门级表示来确定电路布局。这可以自动完成或者在用户参与下完成,以便优化电路布局。当布局处理系统1004已经确定电路布局时,其可将电路布局定义输出到IC生成系统1006。电路布局定义可以是例如电路布局描述。
如本领域中已知的,IC生成系统1006根据电路布局定义来生成IC。例如,IC生成系统1006可实施生成IC的半导体设备制造工艺,所述半导体设备制造工艺可涉及光刻和化学处理步骤的多步骤序列,在此期间,在由半导体材料制成的晶片上逐渐形成电子电路。电路布局定义可呈掩模的形式,掩模可在光刻工艺中用于根据电路定义来生成IC。替代地,提供给IC生成系统1006的电路布局定义可呈计算机可读代码的形式,IC生成系统1006可使用所述计算机可读代码来形成用于生成IC的合适的掩模。
由IC制造系统1002执行的不同过程可全部在一个位置例如由一方来实施。替代地,IC制造系统1002可以是分布式系统,使得一些过程可以在不同位置执行,并且可以由不同方来执行。例如,以下阶段中的一些可以在不同位置以及/或者由不同方来执行:(i)合成表示IC定义数据集的RTL代码,以形成待生成的电路的门级表示;(ii)基于门级表示来生成电路布局;(iii)根据电路布局来形成掩模;以及(iv)使用掩模来制造集成电路。
在其他示例中,通过在集成电路制造系统处对集成电路定义数据集的处理,可以将系统配置为制造计算机系统,而无需对IC定义数据集进行处理以确定电路布局。例如,集成电路定义数据集可以定义可重新配置的处理器,诸如FPGA的配置,并且对所述数据集的处理可以将IC制造系统配置为(例如,通过将配置数据加载到FPGA)生成具有所述定义的配置的可重新配置的处理器。
在一些实施方案中,当在集成电路制造系统中处理时,集成电路制造定义数据集可以使集成电路制造系统生成如本文所描述的设备。例如,通过集成电路制造定义数据集,以上面参考图10描述的方式对集成电路制造系统进行配置,可以制造出如本文所描述的设备。
在一些示例中,集成电路定义数据集可包括在数据集处定义的硬件上运行的软件,或者与在数据集处定义的硬件组合运行的软件。在图10中所示的示例中,IC生成系统还可以由集成电路定义数据集进一步配置,以在制造集成电路时根据在集成电路定义数据集中定义的程序代码将固件加载到所述集成电路上,或者以其他方式向集成电路提供与集成电路一起使用的程序代码。
与已知的实施相比,在本申请中阐述的概念在设备、装置、模块和/或系统中(以及在本文中实施的方法中)的实施可以引起性能改进。性能改进可以包含计算性能提高、等待时间减少、吞吐量增大和/或功耗降低中的一者或多者。在制造这种设备、装置、模块和系统(例如,在集成电路中)期间,可以在性能改进与物理实施之间进行权衡,从而改进制造方法。例如,可以在性能改进与布局面积之间进行权衡,从而匹配已知实施的性能,但使用更少的硅。例如,这可以通过以串行方式重复使用功能块或在设备、装置、模块和/或系统的元件之间共享功能块来完成。相反,在本申请中阐述的引起设备、装置、模块和系统的物理实施的改进(诸如硅面积减小)的概念可以针对性能提高进行权衡。这可以例如通过在预定义面积预算内制造模块的多个实例来完成。
与已知的实施相比,在本申请中阐述的概念在设备、装置、模块和/或系统中(以及在本文中实施的方法中)的实施可以引起性能改进。性能改进可以包含计算性能提高、等待时间减少、吞吐量增大和/或功耗降低中的一者或多者。在制造这种设备、装置、模块和系统(例如,在集成电路中)期间,可以在性能改进与物理实施之间进行权衡,从而改进制造方法。例如,可以在性能改进与布局面积之间进行权衡,从而匹配已知实施的性能,但使用更少的硅。例如,这可以通过以串行方式重复使用功能块或在设备、装置、模块和/或系统的元件之间共享功能块来完成。相反,在本申请中阐述的引起设备、装置、模块和系统的物理实施的改进(诸如硅面积减小)的概念可以针对性能提高进行权衡。这可以例如通过在预定义面积预算内制造模块的多个实例来完成。
申请人据此独立地公开了本文所描述的每个单独的特征以及两个或更多个这种特征的任意组合,到达的程度使得这种特征或组合能够根据本领域技术人员的普通常识基于本说明书整体来实行,而不管这种特征或特征的组合是否解决本文所公开的任何问题。鉴于前文描述,本领域技术人员将清楚,可以在本发明的范围内进行各种修改。
Claims (20)
1.一种选择数字格式的计算机实施方法,所述数字格式用于配置双向递归神经网络(BRNN)的硬件实施以对输入序列进行运算,所述方法包括:
接收所述BRNN的表示;
将输入张量序列上的所述BRNN的所述表示实施为测试神经网络,所述测试神经网络的每一步长都用于对(a)所述序列的输入张量、(b)关于所述序列的后续输入张量生成的对应后向状态张量,以及(c)关于所述序列的先前输入张量生成的对应前向状态张量进行运算,所述测试神经网络包括:
前向递归神经网络(RNN),所述前向递归神经网络用于对所述序列的所述输入张量上的所述前向状态张量进行运算;和
后向递归神经网络(RNN),所述后向递归神经网络用于对所述序列的所述输入张量上的所述后向状态张量进行运算;
对所述输入张量序列操作所述测试神经网络,并且收集统计数据以提供给数字格式选择算法;以及
将数字格式选择算法应用于所述统计数据,以便导出用于所述测试神经网络的一个或多个所选择的张量的多个实例的公共数字格式。
2.如权利要求1所述的方法,其中所述BRNN是并行BRNN或顺序BRNN。
3.如权利要求1所述的方法,其中所述测试神经网络被配置为使得所述前向RNN和所述后向RNN独立地对每一输入张量进行运算,所述前向RNN的每一步长用于对所述序列的输入张量和其对应前向状态张量进行运算,并且所述后向RNN的每一步长用于对所述序列的输入张量和其对应后向状态张量进行运算。
4.如权利要求1所述的方法,其中所述测试神经网络包括多个步长,每个步骤用于对所述序列的不同输入张量进行运算。
5.如权利要求4所述的方法,其中所述应用所述格式选择算法包括将所述数字格式选择算法应用于在所有所述多个步长上捕获的所述统计数据,所述公共数字格式由所述数字格式选择算法输出。
6.如权利要求1所述的方法,其中所述前向RNN被配置为生成一组前向输出张量,并且所述后向RNN被配置为生成一组后向输出张量,并且所述一个或多个所选择的张量包括所述前向输出张量和所述后向输出张量两者。
7.如权利要求1所述的方法,其中所述公共数字格式是由一个或多个可配置参数定义的块可配置数字格式。
8.如权利要求1所述的方法,其中所述数字格式选择算法被配置为识别预定义类型的块可配置数字格式的块可配置数字格式。
9.如权利要求1所述的方法,其中所述应用所述数字格式选择算法包括:
独立地识别用于所述测试神经网络中的所述一个或多个所选择的张量的每个实例的数字格式;和
组合所述一个或多个所选择的张量的所述多个实例的所述数字格式,以便导出用于所述一个或多个所选择的张量的所述多个实例的公共数字格式。
10.如权利要求9所述的方法,其中所述数字格式选择算法被配置为识别由用于所述一个或多个所选择的张量的每个实例的一个或多个可配置参数定义的块可配置数字格式。
11.如权利要求10所述的方法,其中所述组合包括独立地组合针对所述一个或多个所选择的张量的每个实例所识别的所述块可配置数字格式的所述一个或多个可配置参数中的每一个可配置参数,以便定义用于所述公共数字格式的所述一个或多个可配置参数。
12.如权利要求1所述的方法,其中所述操作所述测试神经网络是用浮点数格式的所述一个或多个所选择的张量的每个实例来执行的。
13.如权利要求1所述的方法,其中所述将所述BRNN实施为测试神经网络包括通过以下操作将所述BRNN的所述表示变换成所述前向RNN和所述后向RNN:
将根据关于所述序列的先前输入生成的前向状态执行的所述BRNN的运算分组在一起,以便形成所述前向RNN;
将根据关于所述序列的后续输入生成的后向状态执行的所述BRNN的运算分组在一起,以便形成所述后向RNN;以及
在所述输入张量序列上展开所述前向RNN和所述后向RNN。
14.如权利要求1所述的方法,所述方法进一步包括在作为微分神经网络的输入序列上的所述BRNN的硬件实施中使用用于所述一个或多个所选择的张量的所述公共数字格式,所述微分神经网络包括:
前向递归神经网络(RNN),所述前向递归神经网络用于关于所述序列的先前输入为每一输入生成的前向状态进行运算;和
后向递归神经网络(RNN),所述后向递归神经网络用于关于所述序列的后续输入为每一输入生成的后向状态进行运算。
15.如权利要求14所述的方法,其中所述输入序列中的输入数目不同于所述输入张量序列中的输入张量数目。
16.如权利要求1所述的方法,其中所述输入张量序列包括示例性输入值,所述示例性输入值被选择为表示当在硬件中实施以用于对所述输入序列进行运算时到所述BRNN的输入值的典型或预期范围。
17.一种在硬件中实施双向递归神经网络(BRNN)的方法,所述方法包括:
将输入序列上的所述BRNN实施为微分神经网络,所述微分神经网络包括:
前向递归神经网络(RNN),所述前向递归神经网络用于关于所述序列的先前输入为每一输入生成的前向状态进行运算;和
后向递归神经网络(RNN),所述后向递归神经网络用于关于所述序列的后续输入为每一输入生成的后向状态进行运算;以及
使用根据权利要求1所选择的公共数字格式,在硬件中对所述输入序列执行所述微分神经网络。
18.一种用于选择数字格式的数据处理系统,所述数字格式用于配置双向递归神经网络(BRNN)的硬件实施以对输入序列进行运算,所述数据处理系统包括:
处理器;
控制逻辑,所述控制逻辑被配置为将输入张量序列上的所述BRNN实施为测试神经网络,所述测试神经网络的每一步长都用于对(a)所述序列的输入张量、(b)关于所述序列的后续输入张量生成的对应后向状态张量,以及(c)关于所述序列的先前输入张量生成的对应前向状态张量进行运算,所述测试神经网络包括:
前向递归神经网络(RNN),所述前向递归神经网络用于对所述序列的所述输入张量上的所述前向状态张量进行运算;和
后向递归神经网络(RNN),所述后向递归神经网络用于对所述序列的所述输入张量上的所述后向状态张量进行运算;以及
格式选择单元,所述格式选择单元被配置为使得处理器对所述输入张量序列操作所述测试神经网络,并且收集统计数据以提供给数字格式选择算法;
其中所述格式选择单元被配置为将所述数字格式选择算法应用于所述统计数据,以便导出用于所述测试神经网络的一个或多个所选择的张量的多个实例的公共数字格式。
19.如权利要求18所述的数据处理系统,所述数据处理系统进一步包括用于处理神经网络的硬件加速器,其中所述控制逻辑进一步被配置为通过在所述硬件加速器处使用用于所述一个或多个所选择的张量的所述公共数字格式实施所述测试神经网络而使得在硬件中执行所述BRNN。
20.一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机可读指令,当在计算机系统上执行时,所述计算机可读指令使得所述计算机系统执行如权利要求1所述的方法。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
GB2109473.5A GB2608596B (en) | 2021-06-30 | 2021-06-30 | Number format selection for bidirectional RNNs |
GB2109473.5 | 2021-06-30 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115545146A true CN115545146A (zh) | 2022-12-30 |
Family
ID=77179648
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210748373.1A Pending CN115545146A (zh) | 2021-06-30 | 2022-06-29 | 双向rnn的数字格式选择 |
Country Status (4)
Country | Link |
---|---|
US (1) | US20230068394A1 (zh) |
EP (1) | EP4113385A1 (zh) |
CN (1) | CN115545146A (zh) |
GB (1) | GB2608596B (zh) |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB2568081B (en) | 2017-11-03 | 2022-01-19 | Imagination Tech Ltd | End-to-end data format selection for hardware implementation of deep neural network |
GB2568083B (en) | 2017-11-03 | 2021-06-02 | Imagination Tech Ltd | Histogram-based per-layer data format selection for hardware implementation of deep neutral network |
GB2568084B (en) | 2017-11-03 | 2022-01-12 | Imagination Tech Ltd | Error allocation format selection for hardware implementation of deep neural network |
-
2021
- 2021-06-30 GB GB2109473.5A patent/GB2608596B/en active Active
-
2022
- 2022-06-29 EP EP22181963.4A patent/EP4113385A1/en active Pending
- 2022-06-29 CN CN202210748373.1A patent/CN115545146A/zh active Pending
- 2022-06-29 US US17/852,964 patent/US20230068394A1/en active Pending
Also Published As
Publication number | Publication date |
---|---|
GB2608596A (en) | 2023-01-11 |
GB202109473D0 (en) | 2021-08-11 |
EP4113385A1 (en) | 2023-01-04 |
GB2608596B (en) | 2024-06-19 |
US20230068394A1 (en) | 2023-03-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP7348971B2 (ja) | 畳み込みニューラルネットワークハードウエア構成 | |
CN112418391B (zh) | 用于对深度神经网络的权重进行转换的方法和系统 | |
US12020145B2 (en) | End-to-end data format selection for hardware implementation of deep neural networks | |
US20220044096A1 (en) | Number Format Selection in Recurrent Neural Networks | |
US20220391172A1 (en) | Implementation of Softmax and Exponential in Hardware | |
GB2568082A (en) | Hierarchical mantissa bit length selection for hardware implementation of deep neural network | |
US20240111990A1 (en) | Methods and systems for performing channel equalisation on a convolution layer in a neural network | |
US20230031537A1 (en) | Running Bidirectional Recurrent Neural Networks in Hardware | |
EP4293576A1 (en) | Hardware implementation of an attention-based neural network | |
US20220044098A1 (en) | Methods and systems for running dynamic recurrent neural networks in hardware | |
CN115545146A (zh) | 双向rnn的数字格式选择 | |
US20240160908A1 (en) | Methods and systems for online selection of number formats for network parameters of a neural network | |
US20230177320A1 (en) | Neural network accelerator with a configurable pipeline | |
CN117252244A (zh) | 基于注意力的神经网络的硬件实施 | |
GB2611521A (en) | Neural network accelerator with a configurable pipeline | |
GB2611520A (en) | Methods and devices for configuring a neural network accelerator with a configurable pipeline | |
GB2611522A (en) | Neural network accelerator with a configurable pipeline | |
GB2596150A (en) | Methods and systems for selecting number formats for deep neural networks based on network sensitivity and quantisation error | |
GB2603647A (en) | End-to-end data format selection for hardware implementation of deep neural network | |
GB2603582A (en) | End-to-end data format selection for hardware implementation of deep neural network |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination |