CN110009092A - 用于深度神经网络的激活函数 - Google Patents
用于深度神经网络的激活函数 Download PDFInfo
- Publication number
- CN110009092A CN110009092A CN201811307140.8A CN201811307140A CN110009092A CN 110009092 A CN110009092 A CN 110009092A CN 201811307140 A CN201811307140 A CN 201811307140A CN 110009092 A CN110009092 A CN 110009092A
- Authority
- CN
- China
- Prior art keywords
- active module
- hardware
- data
- input value
- activation primitive
- 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
- 230000004913 activation Effects 0.000 title claims abstract description 204
- 238000013528 artificial neural network Methods 0.000 title claims abstract description 29
- 238000000034 method Methods 0.000 claims abstract description 74
- 238000004519 manufacturing process Methods 0.000 claims description 51
- 238000012545 processing Methods 0.000 claims description 38
- 230000008569 process Effects 0.000 claims description 21
- 238000003860 storage Methods 0.000 claims description 15
- 238000009826 distribution Methods 0.000 claims description 12
- 238000012544 monitoring process Methods 0.000 claims description 7
- 230000001052 transient effect Effects 0.000 claims description 5
- 238000005457 optimization Methods 0.000 claims description 4
- 239000004744 fabric Substances 0.000 claims description 2
- 238000013527 convolutional neural network Methods 0.000 description 42
- 239000000872 buffer Substances 0.000 description 41
- 230000006870 function Effects 0.000 description 41
- 230000015654 memory Effects 0.000 description 41
- 238000000576 coating method Methods 0.000 description 19
- 239000011248 coating agent Substances 0.000 description 17
- 238000012549 training Methods 0.000 description 17
- 238000013459 approach Methods 0.000 description 13
- 238000009825 accumulation Methods 0.000 description 12
- 230000015572 biosynthetic process Effects 0.000 description 10
- 238000003786 synthesis reaction Methods 0.000 description 9
- 230000008859 change Effects 0.000 description 8
- 230000006872 improvement Effects 0.000 description 5
- 230000008901 benefit Effects 0.000 description 4
- 238000010606 normalization Methods 0.000 description 4
- 238000004088 simulation Methods 0.000 description 4
- XUIMIQQOPSSXEZ-UHFFFAOYSA-N Silicon Chemical compound [Si] XUIMIQQOPSSXEZ-UHFFFAOYSA-N 0.000 description 3
- 238000004422 calculation algorithm Methods 0.000 description 3
- 230000005611 electricity Effects 0.000 description 3
- 238000012886 linear function Methods 0.000 description 3
- 229910052710 silicon Inorganic materials 0.000 description 3
- 239000010703 silicon Substances 0.000 description 3
- 238000012360 testing method Methods 0.000 description 3
- 230000003139 buffering effect Effects 0.000 description 2
- 238000004364 calculation method Methods 0.000 description 2
- 230000001010 compromised effect Effects 0.000 description 2
- 238000004590 computer program Methods 0.000 description 2
- 230000001186 cumulative effect Effects 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 239000004065 semiconductor Substances 0.000 description 2
- 241000208340 Araliaceae Species 0.000 description 1
- 235000005035 Panax pseudoginseng ssp. pseudoginseng Nutrition 0.000 description 1
- 235000003140 Panax quinquefolius Nutrition 0.000 description 1
- 230000003213 activating effect Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000000151 deposition Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 235000013399 edible fruits Nutrition 0.000 description 1
- 235000008434 ginseng Nutrition 0.000 description 1
- 210000003127 knee Anatomy 0.000 description 1
- 238000010801 machine learning Methods 0.000 description 1
- 230000005389 magnetism Effects 0.000 description 1
- 239000000463 material Substances 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 230000005055 memory storage Effects 0.000 description 1
- 239000000203 mixture Substances 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 210000004218 nerve net Anatomy 0.000 description 1
- 230000001537 neural effect Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000001259 photo etching Methods 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 230000000717 retained effect Effects 0.000 description 1
- 239000000126 substance Substances 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 239000002699 waste material Substances 0.000 description 1
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/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/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
-
- 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/048—Activation functions
-
- 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/08—Learning methods
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)
- General Health & Medical Sciences (AREA)
- General Physics & Mathematics (AREA)
- Evolutionary Computation (AREA)
- Computational Linguistics (AREA)
- Molecular Biology (AREA)
- Computing Systems (AREA)
- General Engineering & Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Mathematical Physics (AREA)
- Software Systems (AREA)
- Artificial Intelligence (AREA)
- Neurology (AREA)
- Probability & Statistics with Applications (AREA)
- Image Processing (AREA)
- Stored Programmes (AREA)
- Image Analysis (AREA)
Abstract
本申请公开了用于深度神经网络的激活函数。一种对用于实现深度神经网络(DNN)的硬件进行配置来执行激活函数的方法,该硬件在用于执行激活函数的激活模块处包括用于储存查找数据的可编程查找表,查找数据在向激活模块的输入值的第一范围上近似激活函数,该方法包括:向该硬件的表达形式提供校准数据;对于向硬件的表达形式的激活模块的输入进行监视,以确定向激活模块的输入值的范围;生成用于查找表的查找数据,该查找数据在所确定的输入值的范围上代表激活函数;以及将所生成的查找数据装载到该硬件的查找表中,从而配置该硬件的激活模块用于在所确定的输入值的范围上执行激活函数。
Description
技术领域
本公开涉及对用于实现深度神经网络的硬件进行配置的方法。
背景技术
深度神经网络(DNN)是一种人工神经网络,在输入层与输出层之间具有多个层。DNN可以被用在机器学习应用中。尤其是,深度神经网络可以用在信号处理应用中,包括图像处理和计算机视觉应用。
DNN通常是在电力资源不是重要因素的应用中实现的。尽管如此,DNN在一些其他的技术领域中也有应用,在这些技术领域中,用来实现DNN的硬件的资源使得电力消耗、处理能力或硅面积有限。此外,针对特定的应用,DNN的定义(definition)可能随时间而改变——原因例如是对DNN的更多训练。
因此需要一种系统来以在面积和电力方面有效率的方式来高效地实现DNN,它对于DNN的定义改变来说是灵活的。
发明内容
这一部分被提供来介绍下文中进一步描述的概念中的一些。这一部分不应被认为标识了所要求保护的主题中的关键特征或必要特征,也不应被用来限制所要求保护的主题的范围。
提供了一种对用于实现深度神经网络(DNN)的硬件进行配置来执行激活函数(activation function)的方法,该硬件在用于执行激活函数的激活模块处包括可编程查找表以储存查找数据,查找数据在向激活模块的输入值的第一范围上近似(approximate)激活函数,该方法包括:
向该硬件的表达形式(representation)提供校准(calibration)数据;
对于向硬件的表达形式的激活模块的输入进行监视,以确定向激活模块的输入值的范围;
生成用于查找表的查找数据,该查找数据在所确定的输入值的范围上代表激活函数;以及
将所生成的查找数据装载到该硬件的查找表中,从而配置该硬件的激活模块用于在所确定的输入值的范围上执行所述激活函数。
该方法还可以包括:
接收向硬件的输入数据流;以及
使用查找表在所确定的输入值的范围上执行激活函数。
DNN可以使用激活模块来执行多个激活函数以处理输入数据流,该方法还可以包括:对于每个激活函数重复这些提供、监视、生成和装载步骤,以生成和装载用于查找表的查找数据,此查找数据代表所述多个激活函数中每一者。
查找表可以包括两组查找数据并能够在这两组查找数据之间切换,在激活模块执行一系列激活函数时,该系列中的第一激活函数与对于该系列中下一激活函数的、所生成的查找数据向查找表的装载可以同时执行。
该方法还可以包括:在接收到向硬件的输入数据流时,检查向激活模块的输入值是否落在所确定的输入值的范围的外部,并且如果向激活模块的输入值落在所确定的输入值的范围的外部,则使用与所确定的输入值的范围的最接近极值(closest extreme)相对应的激活函数值作为激活函数的输出值。
对于向激活模块的输入进行监视还可以包括:确定偏移(offset),当从向激活模块的每个输入值减去该偏移时,该偏移使输入值的范围基本上以预定的输入值为中心,执行激活函数还包括:在查找表中查找每个输入值之前,从在激活模块处接收的每个输入值减去该偏移。
执行激活函数可以包括:在接收到第一输入值时,在查找表中查找与第一输入值最接近的一对相邻数据点,并在激活函数的一对相应值之间进行插值,以形成激活函数的、与第一输入值相应的值估计。
第一输入值的预定数目个最高有效位可以被用作查找表中的查找地址,第一输入值的剩余位被用在在激活函数的这对相应值之间进行的插值中。
查找表可以包括第一数据库和第二数据库(data store),第一数据库包括第一组数据点,第二数据库包括第二组数据点,使得针对相邻的每对数据点,数据点之一在第一数据库中而另一数据点在第二数据库中,并且,针对第一输入值执行激活函数包括:在这对相邻点各自的第一或第二数据库中同时查找这对相邻点中的每一者。
插值可以是线性插值。
生成查找数据可以包括:在所确定的输入值的范围上计算对激活函数进行近似的一组曲线,每一曲线代表激活函数的一部分,使得该组曲线合起来对于所确定的范围内每一输入值标识了输出值。
该方法还可以包括:在接收到向硬件的输入数据流时,检查向激活模块的输入值是否落在所确定的输入值的范围之外,并且如果向激活模块的输入值落在所确定的输入值的范围之外,则对该组曲线中最接近的曲线进行外推,以提供激活函数的输出值。
该组曲线中的曲线可以是线性的或二次曲线。
生成查找数据可以包括:在所确定的输入值的范围上,计算代表激活函数的一组数据点。
对于向激活模块的输入进行监视可以包括:标识向激活模块的最大和最小输入值,并使用这些最大和最小输入值作为所确定的输入值的范围的边界。
对于向激活模块的输入进行监视可以包括:形成代表输入值的出现概率的输入值直方图,并使用一对输入值(输入值分布中预定的或可编程的部分落在这对输入值之间)作为所确定的输入值的范围的边界。
校准数据可以包括示范输入数据,这些数据被选择来代表向该硬件的各种可能输入。
所确定的输入值的范围可以小于根据输入值的位长度(bit length)而可能的输入值的范围,查找数据在小于此可能的输入值的范围上代表激活函数。
查找数据也可以在与所确定的输入值的范围相等的范围上代表激活函数。
查找数据中在所确定的输入值的范围上代表激活函数的条目(entry)的数目可以等于查找表中用于该激活函数的条目的数目。
该方法可以跟随在所述DNN的优化之后执行。
根据第二方面,提供了一种数据处理系统,包括:
硬件的表达形式,用于实现深度神经网络(DNN),硬件的表达形式包括用于执行激活函数的激活模块,激活模块包括用于储存代表激活函数的查找数据的可编程查找表;以及
配置模块,被配置来:
使校准数据被提供至硬件的表达形式;
对于向表达形式的激活模块的输入进行监视,以确定向激活模块的输入值的范围;以及
生成用于查找表的查找数据,该查找数据在所确定的输入值的范围上代表激活函数;
其中,在被装载到硬件的激活模块的查找表中时,所生成的查找数据适于使激活模块在所确定的输入值的范围上执行该激活函数。
DNN的处理可能需要执行多个激活函数,该配置模块被配置来对于每个激活函数确定向激活模块的输入值的范围,并生成代表每个激活函数的相应查找数据。
该硬件可以包括多个激活模块,配置模块被配置来针对在每个激活模块处执行的每个激活函数独立地生成查找数据。
可以以在数据处理系统出运行的软件的方式来提供配置模块。
根据第三方面,提供了一种用于实现深度神经网络(DNN)的硬件,包括用于执行激活函数的激活模块,激活模块具有用于储存代表激活函数的查找数据的可编程查找表,在使用中,激活模块被配置来将第一查找数据装载到查找表中,第一查找数据是在所确定的、用于执行激活函数而向激活模块的输入值的范围上生成的;
其中,向激活模块的输入值的范围是通过对于向该硬件的表达形式的激活模块的输入进行监视而确定的,激活模块被布置来对于校准数据进行操作。
根据第四方面,提供了一种用于实现深度神经网络(DNN)的硬件,包括用于执行激活函数的激活模块,激活模块包括:
用于储存查找数据的可编程查找表,查找数据在向激活模块的输入值的范围上代表激活函数;
经校正(rectified)线性单元(ReLU),能够执行ReLU激活函数;以及
配置逻辑,被配置成在DNN要求激活模块实现ReLU激活函数时使激活模块在ReLU处执行激活函数并关闭该可编程查找表。
在DNN要求激活模块使用查找表实现激活函数时,ReLU单元可以被配置来把在激活模块处接收的、落在所确定的输入值的范围之外的输入值箝位(clamp)到所确定的输入值的范围的最接近极值,经过箝位的输入值随后被传递到查找表以实现激活函数。
数据处理系统可以被配置来执行本文所公开的方法中的任一种。
本文所公开的硬件可以在集成电路上实现。
还提供了一种使用集成电路制造系统来制造硬件的方法。
提供了一种使用集成电路制造系统来制造本文所述硬件的方法,该方法包括:
使用布图(layout)处理系统来对硬件的计算机可读描述进行处理,以生成实现该硬件的集成电路的电路布图描述;以及
使用集成电路生成系统,根据电路布图描述来制造硬件。
计算机程序代码可以适于执行本文所公开的方法中的任一种。
提供了一种非暂态计算机可读储存介质,其上储存有计算机可读指令,这些计算机可读指令在计算机系统处被执行时使得计算机系统执行本文所公开的方法中的任一种。
还提供了一种集成电路定义数据集,该数据集当在集成电路制造系统中被处理时将集成电路制造系统配置来制造本文所述的硬件。
还提供了一种非暂态计算机可读储存介质,其上储存有对于本文所述硬件的计算机可读描述,此计算机可读描述当在集成电路制造系统中被处理时使得集成电路制造系统:
使用布图处理系统来对硬件的计算机可读描述进行处理,以生成实现该硬件的集成电路的电路布图描述;以及
使用集成电路生成系统,根据电路布图描述来制造该硬件。
还提供了一种被配置来制造本文所述硬件的集成电路制造系统。
提供了一种集成电路制造系统,包括:
非暂态计算机可读储存介质,其上储存有对于本文所述硬件的计算机可读描述;
布图处理系统,被配置来对计算机可读描述进行处理,以生成实现该硬件的集成电路的电路布图描述;以及
集成电路生成系统,被配置成根据电路布图描述来制造该硬件。
附图说明
将参考附图以示例方式描述本发明。在附图中:
图1示出了卷积神经网络中所用的数据的结构的示例;
图2示出了卷积神经网络的示例性硬件实现方式;
图3示出了图2所示激活模块中使用的查找表;
图4a示出了用于对激活模块进行操作的示例性方法;
图4b示出了激活模块中可以实现的经校正线性单元(ReLU)函数;
图4c示出了激活模块中可以实现的参数化经校正线性单元(PReLU)函数;
图4d示出了图2所示激活模块的示例性硬件实现方式;
图4e示出了图4f的激活模块中执行的插值的示例;
图4f示出了图2所示激活模块的另一示例性硬件实现方式;
图4g示出了图2所示激活模块的另一示例性硬件实现方式;
图5a示出了激活模块中可以实现的S形(sigmoid)激活函数;
图5b示出了激活模块中可以实现的双曲正切(tanh)激活函数;
图6是数据处理系统的示意图,该系统包括图2的硬件实现方式;
图7示出了tanh激活函数,针对该函数已经确定了输入值的期望范围;
图8所示的流程图示出了在深度神经网络的硬件实现方式中用于执行激活函数的方法;
图9是集成电路制造系统的示意图。
具体实施方式
下面的说明是以示例方式阐述的,以使本领域技术人员能够制造和使用本发明。本发明不限于本文中所描述的这些实施例,对所公开的实施例进行的各种改变对于本领域技术人员来说是显然的。实施例仅是以示例方式来描述的。
在本文提供的示例中,本发明被描述为在卷积神经网络(CNN)中实现。卷积神经网络是一种深度神经网络(DNN),其中,在该网络的一个或多个层处应用卷积操作。可以理解,本发明不限于用在卷积神经网络中,而是可以用在任何类型的深度神经网络中。
图1示出了CNN中使用的数据的格式的示例性概览。由图1可见,CNN中所用的数据的格式可以由多个平面形成。输入数据可以被布置成P个数据平面,其中,每个平面具有x×y的维度。CNN包括多个层,每个层与多个滤波器w0…wn相关联。这些滤波器w0…wn各自具有m×n×p的维度,并且在几个步骤中沿方向s和t根据卷积操作被应用于输入数据,如图1所示。
如上所述,每个层可以与多个滤波器w0…wn相关联。本文所用的术语“权重”也可以指滤波器、滤波器权重、或者系数。滤波器权重的编号和值可能在层之间不同,因此对于第一层,权重的编号可以被定义为而对于第二层,权重的编号可以被定义为其中第一层中的权重的数目为n1,而第二层中的权重的数目为n2。
对于CNN的多个层,通过使用与该层相关联的那些权重来对该层的输入数据进行卷积,来对用于该层的输入数据进行处理。对于第一层,“输入数据”可以被看做是向CNN的初始输入,它在一些示例中可以是图像——例如在CNN被用于视觉应用的情况下。第一层对输入数据进行处理,并生成向第二层传递的第一组中间数据。第一组中间数据也可以采用数据的多个平面的形式。第一组中间数据可以被看做给第二层形成输入数据,第二层对第一中间数据进行处理以产生第二中间数据形式的输出数据。在CNN包含第三层的情况下,第三层接收第二中间数据作为输入数据,并对该数据进行处理以产生第二中间数据形式的输出数据。因此,本文中对于“输入数据”的引用可以被解释为包括了对任意层的输入数据的引用。例如,术语“输入数据”可以指中间数据,该数据是特定层的输出,并且是随后层的输入。这种情况一直重复到最后一层产生输出数据,该数据可以被看做是CNN的输出。
图2图示了一种示例性硬件实现方式200,被配置来实现CNN。图2仅示出了用于本发明的硬件的一种示例:总的来说,本发明可以用于适于实现CNN(或者更一般而言,任意种类的深度神经网络)的任意硬件配置。
图2所示的硬件实现方式包括数字逻辑电路,该电路被配置来接收数据(例如配置数据),该数据定义了所要实现的CNN,该电路还被配置成按照该数据定义进行操作以处理输入数据来实现CNN。因此,该硬件实现方式可以被看做用于实现一个或多个CNN的可配置硬件。这样,本文中对于CNN的“硬件实现方式”的引用是对于被配置来按照所接收的配置数据对输入数据进行操作以实现CNN的硬件的引用。硬件实现方式本身不一定被配置来实现具体的CNN,也不一定预先装载了用于该CNN的具体配置数据。例如,CNN不一定包括预先装载的(或者硬编码的)权重数据以及层定义。因此,硬件实现方式被配置来基于其接收的配置数据来实现任意CNN。这样,配置数据(本文中也称为“命令数据”)定义了所要实现的具体CNN,包括所要包括的层的数目以及权重数据的尺寸(size)和值,还有输入数据的期望格式。
定义CNN以及如何对该CNN进行处理的数据可以包括配置(或命令)数据、权重数据、以及输入数据。硬件实现方式因此被配置来使用权重数据对输入数据进行处理,以执行由CNN定义的操作。硬件实现方式200包括存储器接口210、输入缓冲控制器215、命令解码器220、系数缓冲控制器225、系数缓冲器230、n个卷积引擎240、n个累加器245、激活模块255、归一化模块265、共享缓冲器270、以及池化(pool)模块275。
存储器接口210被配置来提供硬件实现方式200与外部存储器(未示出)之间的接口。外部存储器可以被看做是与硬件实现方式200分开的模块,也可以被看做与硬件200集成。命令或配置数据例如可以包括与权重数据的尺寸和/或格式、输入数据尺寸和格式、以及它们在外部存储器中的位置有关的信息。
存储器接口210被配置来从外部存储器接收在CNN内的计算所要使用的权重和数据,以及对硬件实现方式200的操作进行控制的命令信息。所接收的权重(本文中也称为“系数”)被传递到系数缓冲控制器225,所接收的数据被传递到输入缓冲控制器215。所接收的命令被传递到命令解码器220,命令解码器被配置来对这些命令进行解码,并随后向硬件实现方式的元件发出控制信息以对权重和输入数据在缓冲器中的储存方式进行控制,这些元件包括系数缓冲控制器225和输入缓冲控制器215。
在对外部存储器进行读取期间经由存储器接口210从外部存储器接收的权重和输入数据可能形成仅用于一个层的一部分的权重和输入数据、对一个层进行处理中所要用的全部权重和输入数据,也可能包括用于对多个层进行处理的权重和输入数据。例如,从外部存储器接收的权重可能形成一个层的权重,所接收的输入数据可能形成用于一个层的输入数据的仅一部分(或反之)。从外部存储器可能接收到一个或多个层的数据和权重的任意组合。可以用任何数目的读取来从存储器读取权重和数据。可以在硬件通行(hardware pass)的一开始将权重和数据从存储器读取到相应的缓冲器230和235中。从存储器进行的读取可以是突发(burst)读取。
在实际中,从外部存储器接收的权重和数据值的最大数目可能分别取决于系数缓冲器230和输入缓冲器235的尺寸。对于给定的硬件通行,对于窗口进行操作的滤波器的数目(以及因此要在缓冲器230和235处维护的权重和数据值的数目)可能取决于各个网络层的处理在多次硬件通行中是如何划分的。这些权重从系数缓冲控制器225传递到系数缓冲器230,所接收的数据从输入缓冲控制器215传递到多个输入缓冲器235a-235m。图2中示意性地示出了这些输入缓冲器,它们可以以任何合适的方式提供,包括作为单一的输入缓冲器模块,该模块包括被布置来提供这m组输入数据的多个存储器(例如RAM条(bank))。输入缓冲器的数目将取决于硬件200的具体实现方式,并可能取任何值。输入缓冲器235的数目可以与卷积引擎240的数目不同——例如,在布置了多个卷积引擎来对同一窗口数据进行操作的情况下,可能提供比卷积引擎的数目更少的输入缓冲器。
输入缓冲器235a-235m被连接到多个复用器中的每一者,因为每个卷积引擎240a-240n需要访问输入数据的全部有效的“条”。在一些示例中,n=m,因而输入缓冲器的数目与卷积引擎的数目相同,但是在其他示例中,n≠m。一般而言,输入缓冲器235的数目可以独立于卷积引擎240的数目而改变。复用器各自被配置来选择来自这些输入缓冲器之一的输出,并把从所选的输入缓冲器输出的值传递到相应的卷积引擎240a-240n。另外,来自系数缓冲器230的权重作为第二输入被提供到每个卷积引擎240a-240n中。这些卷积引擎被配置成使用从系数缓冲器230接收的权重来对所接收的输入数据执行卷积操作。各个卷积引擎240a-240n所得的输出被提供给多个累加器245a-245n中相应的累加器作为输入。图3图示了卷积引擎240n的一种示例性实现方式,包括多个乘法逻辑元件310和多个加法逻辑元件320。
每个累加器245a-245n连接到累加缓冲器250(图2示出了单一的累加缓冲器,但是一般情况下可以在任意数目个数据库处提供任意数目个缓冲器)。累加缓冲器250被配置来储存从每个累加器245a-245n接收的累加结果。在一些情形中,累加器可以提供部分累加而不是卷积操作的最终结果。例如,在滤波器大于系数缓冲器的情况下,卷积操作(包括对窗口操作滤波器)可以被划分到多个硬件通行中。可以向前传递部分累加,以用在随后的硬件通行中,使得可以通过多个通行形成最终累加结果。
累加缓冲器250可以连接到存储器接口210。累加缓冲器250可以被配置来经由存储器接口210向外部存储器发送数据和从外部存储器接收数据。累加缓冲器250可以被配置成能够经由存储器接口210在外部存储器处储存值并将它们读取回来,如下文中将要更详细描述的。累加缓冲器250可以连接到累加器245a-245n的输入,以使得部分累加能够被反馈到累加器245a-245n中,以与在这些卷积引擎处执行的随后的部分累加进行累加。
累加缓冲器250被配置来向激活模块255传递累加值。激活模块255被配置来执行多个不同的激活函数中的至少一个。激活函数在所有类型的深度神经网络中执行。在图2所示的示例中,激活模块255执行的激活函数形成CNN的实现方式的一部分。
在使用中,当在硬件实现方式200处实现CNN时,激活模块被配置来执行如图4a所示的方法。激活模块可以被配置来实现一个或多个用户定义的激活函数。激活模块可以被配置成在步骤401接收配置数据,此配置数据指定了要向输入数据应用的激活函数的一个或多个属性。例如,配置数据可以用来指定激活函数的一个或多个数据点、激活函数的一个或多个特性、或者一个或多个值,这种值能够被用来导出或标识对于激活函数的一个或多个通行而要在激活模块255中实现的特定的激活函数。
在配置期间,激活模块255可以被配置来在步骤402基于所接收的配置数据而在查找表的条目中储存代表激活函数的数据。在一些示例中,代表激活函数的数据可以是所接收的配置数据。在一些布置中,如果配置数据包括激活函数的数据点,则这些数据点自身可以被储存在查找表中。在一些布置中,配置数据可以被用来标识预先储存的激活函数,使得代表了所标识的激活函数的数据(该数据例如代表这个预先储存的激活函数的数据点)可以被装载到查找表中(例如使用配置数据中的标识符)。查找表中的这些值可以代表激活函数的估计或近似。查找表中储存的数据可以是激活函数的至少一部分的梯度(gradient)和偏移值。
这样,激活模块可以被配置来对于给定的硬件通行执行对于CNN的激活层而言合适的激活函数。由于查找表是可编程的,从一个硬件通行到下一个硬件通行,激活函数可以改变。
在使用中,在步骤402处对激活模块的配置之后,在CNN中,激活模块255在步骤403接收输入数据,该数据代表了向激活函数的输入。激活模块可以被配置来基于所接收的输入的至少一部分而从查找表读取一个或多个条目。在一些布置中,激活模块255被配置来使用所接收的输入的至少一部分作为查找表中的地址。例如,可以在查找表中储存预定数目个值,所接收的输入的值可以是被用作查找表中的地址的值。例如,所要使用的地址可以从输入数据的预定数目个MSB确定。
激活模块被配置来在步骤404基于从查找表读取的这一个或多个条目来计算输出值,此输出值代表了激活函数的输出。激活模块可以进一步基于输入数据的至少一部分(例如输入数据的预定数目个LSB)来计算该输出值。输入数据中用来在查找表中查找一个或多个条目的那部分可以与输入数据中用来计算输出值的那部分不同。激活模块可以通过在从查找表中读取的两个或更多个条目之间进行插值来计算输出值。
向激活模块提供的配置数据可以包括以下一项或多项:代表激活函数的数据点、代表该函数形状的数据、或者预定函数的标识符,该预定函数要被实现来允许激活模块从数据库装载该函数。
硬件实现方式200还可以包括归一化模块265和池化模块275,它们被配置来经由共享缓冲器270来共享数据,共享缓冲器接收激活模块255的输出。归一化模块可以被配置来对于共享缓冲器中的数据执行一个或多个归一化函数。池化模块可以被配置来对于共享缓冲器中的数据执行一个或多个池化函数——例如,在针对CNN的每个层而定义的滑动窗口内执行的最大值或平均值计算。
共享缓冲器270中储存的结果被传递到存储器接口210,该接口可以将该结果储存在外部存储器中,也可以将该结果传递回输入缓冲器以进行进一步处理,而不一定先向外部存储器传递出去。
共享缓冲器270允许对由激活模块输出的这些值进行缓冲,直到正确的样本可用于执行归一化和/或池化。这样,共享缓冲器提供了储存效率,因为在许多实现方式中,归一化和池化并不被合并到同一处理中。此外,使用共享缓冲器还允许归一化和池化的执行顺序适应于硬件200处实现的CNN。另外,通过提供共享缓冲器270,可以背靠背地执行激活、归一化和池化函数,而不必从外部存储器取回数据。
查找表
现在将详细描述查找表在激活模块255处的配置和使用。这里的教导适用于被布置成在DNN中执行激活函数、并且使用查找表来代表所执行的激活函数的任何硬件。
可以用CNN的实现方式的给定硬件通行中所要执行的具体函数对激活模块255进行编程。激活模块中所要实现的函数(即,激活函数)可以被看做传递函数。激活模块255包括查找表,查找表包括代表激活函数的数据。通过在查找表处对该数据进行修改(例如,根据向激活模块提供的配置数据),由激活模块执行的激活函数可以被修改。
DNN中的激活函数一般是非线性的。所用的常用激活函数包括S形函数(例如图5a所示的函数)、图5b所示的tanh函数、以及图4c所示的参数化经校正线性函数。在激活函数时参数化经校正线性函数的情况下,激活模块可以被称为参数化经校正线性函数(PReLU)。PReLU被配置来生成如下式所表示的输出元素yi,j,k:
yi,j,k=f(xi,j,k;w1,w2,b1,b2)=max{(w1*xi,j,k+b1),(w2*xi,j,k+b2)}
其中,是常数。
激活模块的查找表被配置来保存代表了激活函数的数据集,使得向激活模块的输入值(或从这些值导出的值)可以在该表中被查找以标识所对应的输出值。例如,在图5a和图5b中,输入值x被用于在表中查找,输出是根据查找表中储存的曲线的表达形式的曲线上对应的y值。在一些实现方式中,不是全部可能的x和y值都会被定义在查找表处储存的数据中,因此需要一种插值方案来使得对于任何x值都能从查找表处储存的数据确定输出y。
在将要参考图4d来描述的、代表激活函数的第一途径中,查找表中的条目可以由至少一个梯度和至少一个偏移来形成。例如,所接收的数据可以代表由梯度和偏移组成的对。这样,激活模块255可以在查找表处将激活函数实现为一组由值和斜率组成的对。可以使用插值方法(例如线性插值)来导出查找表中没有保存的中间值。
输入值(例如来自累加缓冲器)可以被用作查找表中的地址。查找表可以包含与由那些MSB定义的点相对应的、针对样本C和梯度m的值。因此,查找表定义了代表激活函数的曲线上的(或者靠近该曲线的)多个数据点,以及梯度,该梯度代表该曲线在所定义的数据点处(或者靠近该数据点处)的梯度。为了使从给定的C和m值对可导出的点的集合上的总体误差尽可能小,在查找表处储存并非精确落在该曲线上的样本C和并非精确代表所定义的数据点处的曲线斜率的梯度m可能是有利的。可以针对由C和m值代表的曲线的给定段来计算合适的C和m值,以使该段上的总体误差尽可能小。段可以是代表激活函数的曲线的、在查找表处储存的两个数据点之间的部分。
在一种示例中,如果查找表是64或65个条目的表,则输入的6个最高有效位(MSB)可以被用作查找表中的地址。在另一示例中,查找表可以是256或257个条目的表,由输入的8个MSB来索引。查找表可以包含由这些MSB定义的点处针对样本C和梯度m的值。输入的其余最低有效位(LSB)可以被解释为0和1之间的值,使得激活模块的输出由下式定义:
y=m*(LSBs)+C
图4d图示了第一途径的激活模块255的示例性硬件实现方式。激活模块255包括被配置来储存值的查找表,这些值代表了激活模块255处实现的激活函数。激活模块255还包括乘法逻辑和加法逻辑,以执行上文定义的计算。输入值的那些MSB被用作查找表中的地址,相应的m和C值从查找表被读出并输出。输入值的其余LSB然后与查找表输出m相乘,其结果然后被加到查找表输出C。
在第二途径中,不是在查找表中储存此后被取回的m和C值,而是确定两个不同的粗略输出值,它们位于输入值的任一侧。通过基于输入值的至少一部分在这两个粗略输出值之间进行插值,来确定要从激活模块输出的输出值,如下文中参考图4e和图4f描述的。这种途径可以包括在查找表中储存一组离散的输出值。使用上文描述的用输入的6个MSB作为查找表中的地址的示例,查找表中可以有65个不同的输出值用于激活函数。与在查找表中用作索引的输入值的那些MSB所能寻址的数目相比,在查找表处多提供一个条目(例如在上述示例中提供65个而不是64个)使得在所要定义的条目之间能够有了64个跨度(span)。例如,第64个跨度内的值可以通过在第64个和第65个条目之间进行插值来确定。当在激活模块处接收到输入值时,输入值的这六个MSB可以用作地址来在查找表中查找相应的输出值。另外,查找表中下一地址位置处的输出值也可以被取回。这样,标识出了查找表中储存的、与输入点的任一侧相邻的数据点的输出值。
如图4f所示,输入值的这些MSB对应于输入值x0,下一个对应的输入值是x1。因此,所取回的两个值是针对所标识的输入值的对应输出值,即y0和y1。根据取回的输出值y0和y1,用这些LSB来标识输入值x在x0与x1之间的位置,以允许在输出值y0与y1之间插值来确定对应的输出值y。可以使用任何合适的插值算法。
图4f图示了被配置来执行第一插值途径的示例性硬件布置。在该布置中,激活模块255包括被配置来储存输出值的查找表410,这些输出值对应于预定的一组相应输入值。激活模块255还包括插值模块420,该模块被配置来执行插值操作以计算y。该插值可以是根据下式所获得的线性插值:
其中:
x0=x的MSBs
x1=x+1的MSBs
y0=LUT(x0)(即,对于输入值x0,从查找表取回的输出值)
y1=LUT(x1)
x-x0=x的LSBs
x1-x0=查找表中的数据点之间已知的x间距
在一些实现方式中,该间距可以是可变的,从而在基本的激活函数更快地改变的情况下提供更大数目的数据点。如果该间距固定,优点是x1-x0的值由对1进行左移的值代表,左移的位数是在查找表中查找所用的最高有效位的数目。这允许在硬件中以如下方式更简单地实现以上的式子:
y=y0+(((y1-y0)*LSBs)>>MSB的数目)
如图4f所示,激活模块255被配置来接收输入值x。预定数目n个MSB(对应于查找表中的2n个条目)被用作查找表中的地址来取回查找表中相应地址中的输出值y0以及查找表中的下一个输出值y1。这两个值y0和y1从查找表410输出并被输入到插值模块420,插值模块基于输入值x中其余的LSB来执行插值以确定y。插值模块420然后输出与输入值x对应的输出值y。
图4g图示了激活模块255的另一种硬件实现方式,用于在查找表处储存的数据点之间执行二次插值。在图4g的布置中,查找表被配置来基于输入值x的那些MSB取回三个输出值,即c0、c1和c2。这使得例如能够由插值模块420执行二次插值。这样,可以通过从查找表410取回更多的系数来对更复杂的曲线进行插值。可以理解,可以取回多于三个值并用它们来对于输入值插值输出值。
也可以使用其他插值方案。
通过向图4f和图4g所示的查找表410写入不同的数据点,可以在查找表中代表不同的激活函数,并因此由激活模块执行不同的激活函数。因此,使用查找表使得要由激活模块255执行的具体激活函数能够在运行时配置。对于被配置来对进入到激活模块中的数据执行激活函数的固定函数硬件则不是这样,与被配置来实现激活函数的可编程逻辑相比,使用查找表消耗的芯片面积和电力要小得多。通常,对于查找表处代表的基本激活函数,激活模块的输出精度随着查找表处储存的数据点的数目而增加。但是,储存更大数目的数据点增大了查找表的尺寸。对应给定的硬件实现方式,可以在精度与面积消耗之间建立合理的折中。在图2所示用于实现CNN的示例性硬件中,已经发现被配置来储存大约256个数据点的查找表在由激活层对16位数据进行操作的系统中提供了良好的特性平衡。
图3示出了用于查找表301的示例性架构。所示的架构尤其适用于图4f的布置,其中,在查找表中对两个相邻条目进行查找。查找表301包括两个数据库307和308。这些数据库是单端口同步随机存取存储器(RAM)。数据库307被布置来储存偶数条目,这些条目代表定义了激活函数的一组数据点;数据库308被布置来储存奇数条目,这些条目代表定义了激活函数的一组数据点。例如,当从0开始编号时(例如从0到64以提供65个条目),对于长度为N位的查找地址,奇数数据库可以包括个奇数编号的条目,偶数数据库可以包括个偶数编号的条目。这种布置使得奇数和偶数条目能够被同时读取。这些奇数和偶数条目一起代表了查找表处储存的完整的数据点集合。仲裁器306被配置来在进入查找表的读取302与写入304地址之间进行仲裁。
读取地址302代表查找表中的条目的地址,它可以包括输入值x的预定数目个最高有效位。在其他实现方式中,读取地址可以在仲裁器306或另一单元处以任何其他方式从输入值x导出。所用的MSB的数目越大,地址空间越大,查找表中可能的条目数也越大。对于用多少个MSB作为索引以及多少个LSB用于插值,可以作出选择来在精度与查找表尺寸之间实现折中。例如,对于以16比特操作的激活模块,用前6个MSB作为查找表地址可以用来在数据库307和308的每一者中提供大约64个条目。其余10个LSB可以被用来在由查找表提供的输出之间进行插值。在一些实现方式中,把输入数据转译成查找表中的地址可以在仲裁器外部的单元处执行。
写入地址304可以包括查找表中所要更新的条目的地址,所要写入到数据库307和308中的数据值通过查找表输入305来提供。
可以在硬件中的激活模块处提供查找表301,该硬件被配置来多个通行中对深度神经网络的层进行处理。取决于该硬件的能力,每个通行可以执行一个或多个不同的层(例如,卷积层、激活层、归一化层,等等)。在经过激活层的每个通行,以处理该层为任务的一个或多个激活模块被配置来执行被装载到这些激活模块的查找表中的激活函数。可以在经过激活层的每个通行之前对这些查找表进行更新,使得在每个通行时执行不同的一组激活函数。为了在对查找表进行更新而同时避免将处理延迟,有利的是在用于当前通行的值正在被使用的同时把用于下一个通行的值写入到这些查找表。这例如可以通过以下方式实现:在激活模块处提供多个查找表,或者在激活模块的查找表处提供多个数据集。
在图3所示的示例中,数据库307和308各自包含两个完整的数据集合,使得当这些数据集合中的一者正被用在激活层的通行中时,另一者能够被更新。索引303被用来向仲裁器指示:在给定的通行中,要使用数据库307和308处这两组条目中的哪一组。可以对当前的硬件通行中并非正在被使用的那组数据库条目进行写入。可以以任何合适的方式更新该索引——例如在查找表处或者在激活模块自身。随着执行激活层的每个通行,索引可以被更新,以在每个激活模块的查找表处的两个数据集合之间交替。可能不一定要在每次硬件通行时装载新的表——例如,如果激活函数相同,则不必装载新的查找表。索引可以是对于每个通行而言可配置的,以指示应当适用查找表处两个条目集合中的哪一者。在针对下一个硬件通行要求新的激活函数时,可以向并非当前正在使用的数据库写入新的条目集合,并且在对该下一个硬件通信进行配置时更新索引,以使查找表使用已被写入了这些新条目的那个数据库。将新的条目写入查找表以及对于每个通行的索引根据所执行的神经网络的定义来执行,并且可以在硬件200处通过向命令解码器220提供合适的命令流来实现。
仲裁器可以被配置来对于读取地址302给予比写入地址304更高的优先级,以避免正在向查找表写入新数据的同时对神经网络的操作引入的延时。这使得能够在正在执行的与神经网络处理有关的读取之间的间隙中执行写入。
向查找表提供的写入数据305可以包括值,这些值的形式适于直接被写入到查找表的条目中。激活模块255可以被配置来从命令解码器220接收查找值,命令解码器被布置来经由存储器接口210从外部存储器接收函数的值。激活模块255可以被配置来对于每个硬件通行接收要储存在激活层中的一组不同的值。在一些配置中,DNN可以包括多个激活层。在实现CNN的硬件200中,命令解码器220可以被配置来接收值,这些值定义了在一次硬件通行中对于CNN的一个或多个激活层所要使用的函数。
读取地址302可以由仲裁器306(或另一单元)解释成一对地址:第一地址代表对数据库307的偶数条目的查找,第二地址代表对数据库308的奇数条目的查找。对这些数据库进行以下配置可能是有利的:当读取地址read_addr是偶数时,这两个数据库从同一地址读取,而当读取地址read_addr是奇数时,一个数据库从read_addr+1(或-1)的地址处读取,或者反过来。在其他实现方式中,可以使用这样一对地址:这对地址相差的位数不是1。读取地址是奇数还是偶数是由该地址的最低有效位来标识的:例如,如果read_addr[0]=0,则它是偶数,否则是奇数。
来自这些数据库的输出可以被提供复用器312和313,这些复用器根据读取地址是偶数还是奇数来选择合适的输出y0和y1。例如,在上述的情形中,如果读取地址是偶数,则偶数数据库307的输出被用作y1,而奇数数据库308的输出被用作y0,否则,偶数数据库307的输出被用作y0,而奇数数据库308的输出被用作y1。信号314指示了读取地址的奇偶性,并向复用器312和313提供控制信号——例如,它可以是读取地址的最低有效位read_addr[0]。这种途径确保了输出y0总是小于输出y1,从而简化了在这些值之间的插值,因为上述公式可以直接应用于这些输出。在其他实现方式中,输出值y0和y1可以是任何特定的顺序。
信号314可以是流水线的(pipelined),以将其与从数据库307和308读取的输出对齐。
为了避免推后(stalling)问题,可以在这些数据库的输出处提供FIFO缓冲器(FIFO 310、311),以及在信号314的数据路径上与这些数据库平行地提供FIFO缓冲器(FIFO309)。FIFO 309可以被配置成把地址的流水线长度与经过RAM 307和308的路径匹配,FIFO310和311可以被配置来对RAM 307和308处固定的2周期延时进行处理。这使得查找表能够像正常的流水线一样推后回去。这些FIFO中的每一者可以具有2条目的深度。
可以理解上述途径可以被扩展到包括多于两个查找表的激活模块(例如,在同时读取多于两个值是有利的的情况下——例如,如果激活函数曾是多于两个维度的表面)。
向DNN中的激活层的输入在原理上可以采取由这些输入的位长度所允许的范围内的任何值。但是在实际中,对于DNN的具体实现方式,向激活层的输入值可能仅采取输入值的可能范围的一个子集。这造成了查找表的一些部分没有被使用,是对于芯片面积的低效使用。通过布置成使查找表中的条目的整个范围都能够被使用,可以改善用查找表执行的激活函数的有效精度,并能够在很大程度上消除对查找表中的储存空间的低效使用。
在DNN的训练期间,对于神经网络的那些层确定系统的权重、激活函数和其他参数(例如,偏移、最小/最大箝位值)。这通常是通过在数据处理系统(例如图6的600)处运行的训练软件来执行的,该系统包括被配置来实现DNN的硬件(例如图2的硬件200)。在一些情形中,可以在软件中对该硬件进行仿真,训练软件被布置来对硬件仿真进行操作,以建立要在该硬件自身处使用的配置参数。一般而言,训练软件会向DNN提供测试数据集,并对DNN的参数进行迭代修改以优化其性能。例如,在DNN被配置来执行图像中的对象识别的情形中,可以由用户确定DNN的一组激活函数和初始的层配置。然后,可以用训练软件来向DNN提供由该对象(例如,杯子)的成千上万个不同图像组成的数据集,同时根据某种预定方案向DNN的参数引入小的变动。一般而言,使DNN的性能(例如其对图像中的杯子进行识别的精度)得到改善的那些改变被保留,而使该DNN的性能变坏的那些改变被丢弃。这样,可以给DNN定义优化的参数集合。
另外,有利的是确定向经优化的DNN的激活层的输入值的期望范围——即,被观察到正在向激活模块提供的输入值的范围,而不是由向激活模块的输入值的位长度所允许的输入值的可能范围。这可以通过在配置模块处执行范围校准来实现。一旦DNN已被优化,则可以执行范围校准。可以由配置模块来执行范围校准,该模块使校准数据被提供给激活模块(例如,通过向DNN提供测试数据用于处理),并在DNN的操作期间对向DNN的激活模块提供的输入值进行监视以标识输入值的范围。
范围校准可以由硬件的表达形式来执行。硬件200的表达形式可以是软件和/或硬件的任意组合表达形式(例如可编程的芯片)。例如,可以在数据处理系统处用软件对硬件200进行仿真,校准数据被提供给这种硬件仿真,并且向所仿真的激活模块的输入值的范围被监视,以标识输入值的范围。这种硬件仿真可以是用于训练该DNN的同一硬件仿真。范围校准可以作为DNN训练的一部分来执行——例如作为滤波器权重和其他参数的优化之后的训练阶段。对用于实现DNN的硬件进行仿真可以包括对于被配置来执行该DNN的那个硬件进行仿真,或者对于要在硬件中实现的DNN进行仿真。被配置来提供校准数据并对所得的输入值进行监视的配置模块可以以软件方式提供——例如在用于对DNN进行优化的训练软件中。
在其他示例中,支持训练软件的数据处理系统可以包括硬件200,该训练软件可以被配置来使用被配置来执行DNN的硬件200来执行范围校准。在该硬件处实现的DNN可以在由该软件执行的训练之后被优化。在对校准数据执行DNN的不同激活函数时向硬件的激活模块的输入值的范围可以由训练软件捕捉,以标识在执行每个训练函数时对于每个激活模块的输入范围。
为了对于向激活模块的输入值提供访问,实现DNN的硬件(或其表达形式——例如该硬件的软件仿真)可以被配置来把向激活模块的输入数据拷贝到由实体配置模块(例如该训练软件)消费的数据路径上,该实体配置模块用于监视这些输入值并形成针对激活模块的期望输入范围。例如,向激活模块的输入数据的拷贝可以被流送(stream)到此监视实体所能访问的存储器中。在图2所示的具体示例中,来自累加缓冲器250的输出(它代表了向累加模块255的输入)可以通过数据路径282来定向。利用存储器接口210,数据路径282可以把输入数据定向到包括硬件200的数据处理系统(参见图6的600)的存储器中,以由在该数据处理系统处运行的监视软件来消费。一旦DNN的配置完成,则数据路径282可以被关断。可以仅在DNN的范围校准或其他训练阶段期间使用数据路径282。
在其他示例中,配置模块被提供来在其操作期间确定向激活模块的输入值的范围,配置模块可以是固定的或可编程的硬件。
对激活层处输入值的范围进行确定的一种途径是在向激活模块提供的输入值的流中捕捉最大的和最小的输入值。然后,所确定的输入值的范围可以针对该激活模块被设定成等于或大致等于所捕获的这些最大值与最小值之间的值的范围。在其他示例中,输入值的流可以被处理以形成概率分布或直方图,它们代表了各个输入值出现的可能性。对于许多应用,这种概率分布可能大体上是正态分布,或者(如果该概率分布不是对称的)非对称正态分布。可以基于此概率分布来对于激活模块设定所确定的输入值的范围。例如,根据概率分布,所确定的范围可以被设定成覆盖了输入值的90%、95%、98%、99%或99.5%的输入值范围,其中最小值和最大值是关于此分布的中心对称的或者是与概率分布曲线上的等概率点对应的输入值。在另一示例中,所确定的范围可以被设定成输入值的下述范围:该范围的最大和最小端点被定义为概率分布落到某个预定的或可编程的水平(例如1%、0.5%、0.25%、0.15%、0.05%或0.005%)以下的地方或其附近的输入值。可以理解,可以由许多改变形式。配置模块可以被配置来确定输入值的范围。
由于范围校准可以在DNN的使用之前作为进一步的训练阶段被执行,对于向激活模块的输入值进行监视是否给系统引入延时(例如,由于经由存储器接口210向存储器提供回去的数据流282)一般并不重要。此外,如果合适的话,可以在数据处理系统(例如图6的600)处对于输入数据执行非常耗时的和可能耗时的处理,以针对用于实现DNN的硬件(例如硬件200)的激活模块标识最佳范围值。
图6示出了图2的硬件200在数据处理系统600(例如计算机系统,如服务器、膝上型计算机或智能电话)处的示例性布置。该数据处理系统包括至少一个处理器608,用于支持软件环境601,软件环境601包括操作系统605和训练软件604。在硬件602中,可以与处理器608一起提供存储器609,用于储存用于在硬件200处实现的所训练的CNN处进行处理的训练数据、输入数据、用于硬件200的配置参数等。可以提供总线或其他互连件603来连接处理器、存储器和硬件200。图中示出了直至用于储存的存储器的、对于一个或多个激活模块的输入数据的流282,用于由训练软件604处理,还示出了输入数据和返回的经处理数据的流607,以及去往硬件200的配置参数的流606。
一旦针对激活模块确定了输入范围,校准模块(例如训练软件604)就被配置来计算合适的查找数据(例如数据点的集合)以储存在激活模块的查找表处。例如,可以计算对激活模块进行定义的一组数据点,使之在向被配置来执行该激活函数的激活模块的输入的期望输入范围上均匀间隔,或者可以计算这些数据点,使之处于所确定的输入范围内,并且数据点在激活函数改变更快的区域中比在激活函数改变不太快的区域中间隔更紧密。
一旦被确定,查找数据就可以被写入到配置数据的库(例如在存储器602中),以在DNN的执行期间当相应的激活函数要在激活模块处执行时在激活模块处使用。例如,在DNN的执行期间,当DNN要求在所涉及的激活模块处执行激活函数时,查找数据被写入到该激活模块的查找表,使得该激活模块能够在所确定的输入范围上执行对激活函数的近似。
可以在DNN中所用的全部激活函数上重复此范围校准,以建立用于代表每个激活函数的最佳查找数据。此外,在DNN处对一组输入数据进行处理时,可以在同一激活模块处(但在DNN处理模型的不同阶段处执行的不同的硬件通行中)使用相同的激活函数。向执行相同激活函数的激活模块(但在DNN的处理中的不同点处)的数据的输入范围在这些处理点之间可以是不同的。因此,在DNN的处理期间,对于在激活模块处执行的激活函数的各个示例中的每一者(或者其中至少一些)执行范围校准可能是有利的。在此情形中,针对要在激活模块处执行的每个激活函数,可以确定多组查找数据。
硬件实现方式200的处理和范围校准常常会在与最终使用经训练、经校准的DNN的系统不同的系统处执行。例如,可以用第一系统来对DNN的给定硬件实现方式进行训练(例如使用硬件的表达形式,该表达形式可以是该硬件自身,也可以是以软件进行的仿真,或者可编程的硬件),并根据上述原理针对该硬件的激活模块在所确定的输入范围上生成查找数据。然后可以提供该查找数据(被配置来最佳地代表此激活模块的查找表处的激活函数)以及DNN的定义(例如与其权重和其他参数一起),用于在第二系统处使用,该第二系统包括该DNN的硬件实现方式。例如,第一系统可以是由包括硬件200的数据处理系统(例如智能电话)的制造商操作的训练系统,第二系统可以是数据处理系统(例如智能电话)自身。这样,第二系统的硬件实现方式被最佳地配置来在其激活模块处执行激活函数,使得硬件的性能最大化。
由于针对激活模块所确定的输入范围是依赖于训练数据或其他数据而确定的,该其他数据代表DNN将在运行时处理的数据,以下情形是可能的(如果所确定的输入范围不是在给定了输入值的位长度情况下完整的可能范围):在使用期间,激活模块可能实际接收到处于所确定的范围之外的输入值。对于许多函数,激活函数的、处于所确定的范围之外的值可以由该范围的边界处的函数值来近似。换言之,对于所确定的范围之外的输入值,可以通过把对应的输出值箝位到所确定的范围边界处的激活函数值,来在所确定的范围之外对激活函数进行近似。
例如,图7图示了tanh激活函数,针对该函数的输入值范围已经根据上述途径被确定为边界701与702之间的范围705。边界701和702可能关于tanh函数的中点x=0而对称,也可能不对称。对于所确定的范围之外的输入值,此激活函数被箝位在经箝位的输出703和704,它们是在所确定的范围705的边界处的输出值。对于所确定的范围之外的输入值进行箝位可以通过下述方式来执行:对查找表进行配置,以针对落在所确定的输入范围之外的输入值返回针对所确定的输入范围的边界处的输入值所储存的输出值。在一些示例中,对所确定的范围之外的输入值进行箝位可以在其他逻辑处执行,并绕过查找表(例如,在图2所示的示例中,在下文描述的简单路径281处)。例如,可以提供箝位电路来把落在所确定的范围之外的输入值箝位到所确定的输入值范围的最接近的边界输入值,使得查找表对于那些值返回这个最接近的边界输入值处的激活函数值。
在一些示例中,可以提供例外(exception)逻辑(例如在激活模块中与查找表相关联的逻辑中),以确定输入值何时落在所确定的范围之外,并且响应于此确定而使激活模块输出经箝位的值,经箝位的值代表了激活函数在所确定的范围的边界处的值。经箝位的值也可以与查找表的查找数据一起被编程到激活模块中。
在一些示例中(例如图7所示的示例中),可以通过使用非零梯度的直线来在所确定的输入范围之外对于激活函数实现更好的近似,例如通过在所确定的范围的边界处对该函数的梯度进行外推,或者通过识别使得所确定的范围的边界与相应的最大/最小可能输入值之间的误差最小化的梯度。在图7中,在输入值1到2和-1到-2的区域中,激活函数由直线706和707更接近地近似。在直线706到达激活函数的最大值的点(在图7所示的示例中是1)之外的点处,可以将此近似箝位在该最大值。对于激活函数的最小值,直线707也是同样的情形。或者,在所确定的范围705之外对激活函数进行近似的直线706、707的梯度可以被选择成使得:在根据输入数字的位长度的最大可能输入值处,激活函数的近似取得激活函数的最大可能值(例如对于tanh为1)。对于激活函数的最小可能值和直线707也是同样的情形。
对于函数在所确定的范围之外的直线近似可以在包括乘法器和加法器的逻辑处实现。对激活函数进行外推的梯度和偏移可以在训练期间确定——例如在针对激活模块确定输入值的范围时在训练软件604处。配置参数可以在训练期间生成,用于向激活模块写入以将其逻辑配置成根据所确定的梯度和偏移来执行直线近似。
激活层可以包括并行运行的多个激活模块。对于这些激活模块中的每一者独立地确定期望的输入值范围,并因而可能向在相同层中执行相同激活函数的不同激活模块的查找表提供不同的查找数据,这可能是有利的。或者,对于这些激活模块中的每一者所确定的输入范围可以被组合,以对于激活层作为整体形成一个期望的输入范围,该输入范围应用到激活层的全部激活模块。
DNN的激活层所操作的输入值对于不同应用通常会不同。例如,在一种应用中,激活层可以接收严格处于0到1的范围内的值,而在另一应用中,激活层可以接收在192到256范围中任意位置的值。为了使查找表中储存的输入值的尺寸尽可能小并且简化其实现方式,在查找表中查找向激活模块的输入值之前从这些输入值减去可编程的偏移,这样布置可能是有利的。这样,给查找表用作索引的输入值可以保持较小。例如,在激活模块接收的数据值在192到256范围中的情形中,激活模块可以被编程来从每个进入的数据值减去224,以针对其查找表形成围绕0布置的输入值。可以在针对给定激活模块的训练期间(例如,当由软件604确定向激活模块的输入值范围时由该软件604)确定合适的偏移,并在运行时用该偏移来配置激活模块(例如可以将其与其他配置参数一起提供,例如最大/最小箝位值和/或用于查找表的查找数据)。可以在激活模块处提供加法器逻辑以对所确定的偏移执行减法。
可以理解,还有其他途径来用查找表实现激活函数,这些途径也会获益于本文描述的范围校准。
在一些实现方式中,查找表及其相关联的逻辑可以被看做提供了通过激活模块的“复杂路径”280。激活模块255还可以包括简单路径281,该路径提供了用于执行激活函数的替代机制。例如,简单路径可以实现经校正线性单元(ReLU),该单元被配置来实现ReLU函数。在ReLU函数中,通过如下式所示和如图4b所示对最大值进行标识来计算输出元素yi,j,k:
yi,j,k=f(xi,j,k)=max{0,xi,j,k}
因此,对于小于0的x值,y=0。ReLU函数可以认为是针对负值输入x进行了箝位。ReLU函数可以用乘法器和加法器的组合以常规方式来执行。
当所要执行的CNN的硬件通行使用在简单路径281上实现的ReLU函数,而不是在复杂路径280上实现的查找表410及其相关联的逻辑时,绕过复杂路径并关断(例如,停止对其提供时钟)查找表及其相关联的逻辑以减小电力消耗可能是有利的。类似地(尽管益处相对较小),当使用查找表来执行激活函数时,关断该计算单元可能是有利的。但是,在使用复杂路径的查找表执行激活函数时,如上所述在向激活模块的输入值的预定的或经编程的范围之外(例如,在查找表所操作的范围之外)用简单路径把输入值箝位到最小和/或最大输出值可能是有利的。因此,把简单路径和复杂路径布置成使得数据在复杂路径(如果没有被绕过的情况下)之前经过简单路径可能是有利的。
图8的流程图示出了本文所描述的方法。该方法可以在图6所示的数据处理系统处执行,该系统包括图2所示的CNN的硬件实现方式。优选地,在硬件实现方式处提供的神经网络的常规优化之后执行图8的方法,因而DNN的操作期间将要用到的参数已经被建立。
向用于实现DNN的硬件的表达形式提供校准数据(例如测试数据,该数据代表了DNN操作期间向DNN的输入的典型范围)(801)。该硬件包括激活模块,这些激活模块用查找表来对所要执行的激活函数进行近似。通过对于该表达形式中向硬件的激活模块的输入值进行监视(802),可以确定向激活模块的输入值的范围(例如,根据上述途径中的任一种)。然后针对查找表生成查找数据(803),此查找数据在所确定的输入值的范围上代表了激活函数。这使得查找表中的条目的数目能够在向激活模块的输入值的可能范围上得到完全利用。步骤801-803的范围校准可以在配置模块(例如,在训练系统处运行的软件)处执行,配置模块适于与用于实现DNN的硬件的表达形式一起使用。这些范围校准步骤通常是在DNN的训练期间在校准阶段执行的。
在DNN的操作期间(例如,当根据所建立的滤波器权重和其他配置参数(包括在激活模块的查找表处代表所期望的激活函数所需的查找数据)在硬件200处实现所优化的DNN时)和它在接收输入数据流(805)时,针对激活模块处的激活函数所生成的查找数据被装载(804)到正被请求执行该激活函数的那个激活模块上的查找表中。这使得查找表能够在所确定的输入范围上执行该激活函数(806),而无需把查找表条目浪费到激活模块处不太可能接收到的输入值。
此方法可以对于硬件实现方式的激活模块都执行,和/或可以对于在每个激活模块处执行的、DNN所需要的每个激活函数来执行。
在一些实施例中,本文所描述的那些方法和/或本文所描述的数据处理系统可以完全以硬件方式实现——例如以集成电路的方式。
图2、3、4d、4f和4g所示的硬件逻辑被图示为包括了多个逻辑块。这只是示意性的,并非意图在这些实体的不同逻辑要素之间定义严格的划分。每个功能块可以以任何合适的方式来提供。应当理解,本文中被描述为由硬件逻辑形成的中间值不一定要在任何点处实际生成,而是可以仅仅代表逻辑上的值,这些逻辑上的值便于描述由该逻辑在其输入与输出之间执行的处理。
本文所描述的硬件逻辑可以在集成电路上以硬件方式实现。包括本文所描述的硬件逻辑的数据处理系统可以被配置来执行本文所描述的任何方法。一般而言,数据处理系统中用于训练和实现上述深度神经网络的函数、方法、技术或组件可以以软件、固件、硬件(例如,固定的逻辑电路)或其任意组合的方式来实现。本文中可能使用术语“模块”、“功能性”、“组件”、“要素”、“单元”、“块”和“逻辑”来泛指软件、固件、硬件或其任意组合。本文所描述的能够以软件方式实现的那些部分可以是程序代码,该程序代码在处理器上被执行时执行所指定的任务。本文所描述的算法和方法可以由执行代码的一个或多个处理器来执行,该代码使这个(这些)处理器执行这些算法/方法。计算机可读储存介质的示例包括随机存取存储器(RAM)、只读存储器(ROM)、光盘、闪存、硬盘存储器、以及其他存储器器件,这些器件可能使用磁性的、光学的、和其他的技术来储存能够由机器访问的指令或其他数据。
本文所用的术语“计算机程序代码”和“计算机可读指令”指用于处理器的任何种类可执行代码,包括以机器语言、解释性语言或脚本语言表述的代码。可执行代码包括二进制代码、机器码、字节码、定义了集成电路的代码(例如硬件描述语言或网表)、以及以编程语言代码(例如C、Java或OpenCL)表述的代码。可执行代码例如可以是任何种类的软件、固件、脚本、模块或库,它们当在虚拟机或其他软件环境处被适当地执行、处理、解释、编译、执行时,使得计算机系统的支持该可执行代码的处理器执行由该代码所指定的任务。
处理器、计算机、或计算机系统可以是任何种类的设备、机器、或专用电路,或者其集合或部分,并具有处理能力,使之能执行指令。处理器可以是任何种类的通用处理器或专用处理器,例如CPU、GPU、片上系统、状态机、媒体处理器、专用集成电路(ASIC)、可编程逻辑阵列、现场可编程门阵列(FPGA)等。计算机或计算机系统可以包括一个或多个处理器。
还应当认为涵盖了定义本文所描述的硬件配置的软件(例如HDL(硬件描述语言)软件),该软件用于设计集成电路或配置可编程芯片,以执行所期望的功能。即,可以提供计算机可读储存介质,其上以集成电路定义数据集的形式编码了计算机可读程序代码,此代码当在集成电路制造系统中被处理时,配置该系统来制造硬件逻辑,该硬件逻辑被配置来执行本文所述任意方法的、被描述为以硬件方式执行的那些部分,或者制造本文所述任意装置的硬件逻辑。集成电路定义数据集例如可以是集成电路描述。
可以提供一种在集成电路制造系统处制造本文所述硬件逻辑的方法。可以提供一种集成电路定义数据集,当在集成电路制造系统中被处理时,使得执行这种制造硬件逻辑的方法。
集成电路定义数据集可以是计算机代码的形式,例如作为网表、用于配置可编程芯片的代码,作为在任意层级定义集成电路的硬件描述语言,包括寄存器转换级(RTL)代码,作为高级电路表达形式(例如Verilog或VHDL),以及作为低级电路表达形式(例如OASIS(RTM)和GDSII)。较高级表达形式在逻辑上定义了集成电路(例如RTL),可以在计算机系统处被处理,该计算机系统被配置来在软件环境的上下文(context)中生成集成电路的制造定义,包括电路元件的定义和对这些元件进行组合的规则,以生成由该表达形式所定义的集成电路的制造定义。通常的情形是在计算机系统处执行软件来对机器进行定义,可能需要一个或多个中间用户步骤(例如提供命令、变量等)来使被配置来生成集成电路的制造定义的计算机系统执行定义了集成电路的代码以生成该集成电路的制造定义。
现在将参考图9来描述在集成电路制造系统处对集成电路定义数据集进行处理以配置该系统来制造硬件逻辑的示例。
图9示出了集成电路(IC)制造系统1002的一种示例,该系统被配置来制造本文的任何示例中描述的硬件逻辑。具体而言,IC制造系统1002包括布图处理系统1004和集成电路生成系统1006。IC制造系统1002被配置来接收IC定义数据集(例如,定义了本文中的任意示例所描述的硬件逻辑),对IC定义数据集进行处理,并根据IC定义数据集生成IC(例如,实现了本文中的任意示例所描述的硬件逻辑)。对ID定义数据集的处理把IC制造系统1002配置成制造集成电路,该集成电路实现本文中的任意示例所描述的硬件逻辑。
布图处理系统1004被配置来接收并处理IC定义数据集以确定电路布图。从IC定义数据集确定电路布图的方法是本领域已知的,例如可以包括对RTL代码进行合成来确定所要生成的电路的门级表达形式,例如以逻辑组件(例如NAND、NOR、AND、OR、MUX和触发器组件)的形式。可以通过对于这些逻辑组件确定位置信息,来从电路的门级表达形式确定电路布图。这可以自动进行,也可以在用户干预下进行,以优化电路布图。当布图处理系统1004确定了电路布图时,它可以向IC生成系统1006输出电路布图定义。电路布图定义例如可以是电路布图描述。
IC生成系统1006根据电路布图定义来生成ID,如本领域已知的。例如,IC生成系统1006可以实现半导体器件制造工艺来生成IC,这可以包括光刻和化学处理步骤的多步骤的序列,在该序列期间,在半导体材料制成的晶片上逐渐创建电子电路。电路布图定义可以是掩模(mask)的形式,掩模可以在光刻工艺中用于根据电路定义来生成IC。或者,向IC生成系统1006提供的电路布图定义可以是计算机可读代码的形式,IC生成系统1006可以用该代码来形成合适的掩模以在生成IC中使用。
由IC制造系统1002执行的不同处理可以在一个位置中全部实现,例如由一方实现。或者,IC制造系统1002可以是分布式系统,使得这些处理中的一些可以在不同的位置处执行,并可以由不同方执行。例如,以下阶段中的一些可以在不同的位置执行和/或由不同方执行:(i)对代表IC定义数据集的RTL代码进行合成以形成所要生成的电路的门级表达形式;(ii)基于门级表达形式生成电路布图;(iii)按照电路布图形成掩模;(iv)用掩模制造集成电路。
在其他示例中,在集成电路制造系统处对集成电路定义数据集的处理可以把该系统配置来制造YYY,而无需对IC定义数据集进行处理以确定电路布图。例如,集成电路定义数据集可以对可重配置处理器(例如FPGA)的配置进行定义,对该数据集的处理可以配置IC制造系统来生成具有所定义的配置的可重配置处理器(例如,通过把配置数据装载到FPGA)。
在一些实施例中,集成电路制造定义数据集在集成电路制造系统中被处理时可以使集成电路制造系统生成本文所描述的器件。例如,由集成电路制造定义数据集以上文参考图9所描述的方式对集成电路制造系统进行配置可以使得本文所描述的器件被制造。
在一些示例中,集成电路定义数据集可以包括软件,该软件在数据集处定义的硬件上运行或者与数据集处定义的硬件相结合来运行。在图9所示的示例中,IC生成系统还可以被集成电路定义数据集配置成在制造集成电路时,按照集成电路数据集处定义的程序代码把固件装载到该集成电路上,或者以其他方式给集成电路提供程序代码以用于集成电路。
与已知的实现方式相比,在器件、设备、模块和/或系统中(以及在本文实现的方法中)实现本申请中阐述的概念可以带来性能改善。这些性能改善可以包括以下一项或多项:提高计算性能、降低延时、提高产量、和/或降低电力消耗。在制造这些器件、设备、模块和系统(例如在集成电路中)期间,可以对性能改善和实际实现方式进行折中,从而改善制造方法。例如,可以将性能改善与布图面积进行折中,从而比得上已知的实现方式,但是使用较少的硅。这例如可以通过以串行化的方式对功能块进行重新使用或者在器件、设备、模块和/或系统的元素之间共享功能块来实现。相反,也可以对于本申请中阐述的带来器件、设备、模块和系统实际实现方式改善(例如减少硅面积)的概念与改善性能进行折中。这例如可以通过在预定的面积预算以内制造模块的多个实例(instance)来实现。
申请人分别公开了本文所述各个单独的特征以及由两个或更多个这些特征构成的组合(只要这些特征或组合能够基于说明书整体以及本领域技术人员的公知常识是能够执行的,而不管这些特征或特征组合是否能够解决本文中公开的任何问题)。根据上文的说明,在本发明的范围内,本领域技术人员显然能够作出各种改变。
Claims (20)
1.一种对用于实现深度神经网络(DNN)的硬件进行配置来执行激活函数的方法,所述硬件在用于执行激活函数的激活模块处包括用于储存查找数据的可编程查找表,所述查找数据在向所述激活模块的输入值的第一范围上近似所述激活函数,所述方法包括:
向所述硬件的表达形式提供校准数据;
对于向所述硬件的表达形式的激活模块的输入进行监视,以确定向所述激活模块的输入值的范围;
生成用于所述查找表的查找数据,所述查找数据在所确定的输入值的范围上代表所述激活函数;以及
将所生成的查找数据装载到所述硬件的查找表中,从而配置所述硬件的激活模块用于在所确定的输入值的范围上执行所述激活函数。
2.如权利要求1所述的方法,还包括:
接收向所述硬件的输入数据流;以及
使用所述查找表在所确定的输入值的范围上执行所述激活函数。
3.如权利要求2所述的方法,其中,所述DNN使用所述激活模块来执行多个激活函数以处理所述输入数据流,所述方法还包括:对于每个激活函数重复所述提供、监视、生成和装载步骤,以生成和装载用于查找表的查找数据,所述查找数据代表所述多个激活函数中每一者。
4.如权利要求2或3所述的方法,其中,所述查找表包括两组查找数据并能够在这两组查找数据之间切换,在所述激活模块执行一系列激活函数时,该系列中的第一激活函数与对于该系列中下一激活函数的、所生成的查找数据向所述查找表的装载是同时执行的。
5.如权利要求2或3所述的方法,还包括:在接收到向所述硬件的输入数据流时,检查向所述激活模块的输入值是否落在所确定的输入值的范围的外部,并且如果向所述激活模块的输入值落在所确定的输入值的范围的外部,则使用与所确定的输入值的范围的最接近极值相对应的激活函数值作为所述激活函数的输出值。
6.如权利要求2或3所述的方法,其中,对于向所述激活模块的输入进行监视还包括:确定偏移,当从向所述激活模块的每个输入值减去所述偏移时,所述偏移使所述输入值的范围基本上以预定的输入值为中心,执行所述激活函数还包括:在所述查找表中查找每个输入值之前,从在所述激活模块处接收的每个输入值减去所述偏移。
7.如权利要求2或3所述的方法,其中,执行所述激活函数包括:在接收到第一输入值时,在所述查找表中查找与所述第一输入值最接近的一对相邻数据点,并在所述激活函数的一对相应值之间进行插值,以形成所述激活函数的、与所述第一输入值相应的值估计。
8.如权利要求7所述的方法,其中,所述第一输入值的预定数目个最高有效位被用作所述查找表中的查找地址,所述第一输入值的剩余位被用在在所述激活函数的该对相应值之间进行的插值中。
9.如权利要求7所述的方法,其中,所述查找表包括第一数据库和第二数据库,所述第一数据库包括第一组数据点,所述第二数据库包括第二组数据点,使得针对相邻的每对数据点,数据点之一在所述第一数据库中而另一数据点在所述第二数据库中,并且,针对所述第一输入值执行所述激活函数包括:在该对相邻点各自的第一或第二数据库中同时查找该对相邻点中的每一者。
10.如权利要求1或2所述的方法,其中,生成查找数据包括:在所确定的输入值的范围上计算对所述激活函数进行近似的一组曲线,每一曲线代表所述激活函数的一部分,使得该组曲线合起来对于所确定的范围内每一输入值标识了输出值。
11.如引用权利要求2的权利要求10所述的方法,还包括:在接收到向所述硬件的输入数据流时,检查向所述激活模块的输入值是否落在所确定的输入值的范围之外,并且如果向所述激活模块的输入值落在所确定的输入值的范围之外,则对该组曲线中最接近的曲线进行外推,以提供所述激活函数的输出值。
12.如权利要求1或2所述的方法,其中,对于向所述激活模块的输入进行监视包括:标识向所述激活模块的最大和最小输入值,并使用这些最大和最小输入值作为所确定的输入值的范围的边界。
13.如权利要求1或2所述的方法,其中,对于向所述激活模块的输入进行监视包括:形成代表输入值的出现概率的输入值直方图,并使用输入值分布中预定的或可编程的部分落在其间的一对输入值作为所确定的输入值的范围的边界。
14.如权利要求1或2所述的方法,其中,所确定的输入值的范围小于根据所述输入值的位长度而可能的输入值的范围,所述查找数据在小于所述可能的输入值的范围上代表所述激活函数。
15.如权利要求1或2所述的方法,其中,所述方法跟随在所述DNN的优化之后执行。
16.一种数据处理系统,包括:
硬件的表达形式,用于实现深度神经网络(DNN),所述硬件的表达形式包括用于执行激活函数的激活模块,所述激活模块包括用于储存查找数据的可编程查找表,所述查找数据代表激活函数;以及
配置模块,被配置来:
使校准数据被提供至所述硬件的表达形式;
对于向所述表达形式的激活模块的输入进行监视,以确定向所述激活模块的输入值的范围;以及
生成用于所述查找表的查找数据,所述查找数据在所确定的输入值的范围上代表所述激活函数;
其中,在被装载到所述硬件的激活模块的查找表中时,所生成的查找数据适于使所述激活模块在所确定的输入值的范围上执行所述激活函数。
17.一种用于实现深度神经网络(DNN)的硬件,包括用于执行激活函数的激活模块,所述激活模块具有用于储存代表所述激活函数的查找数据的可编程查找表,在使用中,所述激活模块被配置来将第一查找数据装载到所述查找表中,所述第一查找数据是在所确定的、用于执行所述激活函数而向所述激活模块的输入值的范围上生成的,其中,向所述激活模块的输入值的范围是通过对于向所述硬件的表达形式的激活模块的输入进行监视而确定的,所述激活模块被布置来对于校准数据进行操作。
18.一种使用集成电路制造系统来制造用于实现深度神经网络(DNN)的硬件的方法,所述硬件包括用于执行激活函数的激活模块,所述激活模块具有用于储存代表所述激活函数的查找数据的可编程查找表,在使用中,所述激活模块被配置来将第一查找数据装载到所述查找表中,所述第一查找数据是在所确定的、用于执行所述激活函数而向所述激活模块的输入值的范围上生成的,其中,向所述激活模块的输入值的范围是通过对于向所述硬件的表达形式的激活模块的输入进行监视而确定的,所述激活模块被布置来对于校准数据进行操作,所述方法包括:
使用布图处理系统来对所述硬件的计算机可读描述进行处理,以生成实现所述硬件的集成电路的电路布图描述;以及
使用集成电路生成系统,根据所述电路布图描述来制造所述硬件。
19.一种非暂态计算机可读储存介质,其上储存有计算机可读指令,所述计算机可读指令在计算机系统处被执行时使得所述计算机系统执行一种对用于实现深度神经网络(DNN)的硬件进行配置来执行激活函数的方法,所述硬件在用于执行激活函数的激活模块处包括用于储存查找数据的可编程查找表,所述查找数据在向所述激活模块的输入值的第一范围上近似所述激活函数,所述方法包括:
向所述硬件的表达形式提供校准数据;
对于向所述硬件的表达形式的激活模块的输入进行监视,以确定向所述激活模块的输入值的范围;
生成用于所述查找表的查找数据,所述查找数据在所确定的输入值的范围上代表所述激活函数;以及
将所生成的查找数据装载到所述硬件的查找表中,从而配置所述硬件的激活模块用于在所确定的输入值的范围上执行所述激活函数。
20.一种集成电路制造系统,包括:
非暂态计算机可读储存介质,其上储存有对于硬件的计算机可读描述,所述硬件用于实现深度神经网络(DNN)并包括用于执行激活函数的激活模块,所述激活模块具有用于储存代表所述激活函数的查找数据的可编程查找表,在使用中,所述激活模块被配置来将第一查找数据装载到所述查找表中,所述第一查找数据是在所确定的、用于执行所述激活函数而向所述激活模块的输入值的范围上生成的,其中,向所述激活模块的输入值的范围是通过对于向所述硬件的表达形式的激活模块的输入进行监视而确定的,所述激活模块被布置来对于校准数据进行操作;
布图处理系统,被配置来对所述计算机可读描述进行处理,以生成实现所述硬件的集成电路的电路布图描述;以及
集成电路生成系统,被配置成根据所述电路布图描述来制造所述硬件。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
GB1718300.5A GB2568087B (en) | 2017-11-03 | 2017-11-03 | Activation functions for deep neural networks |
GB1718300.5 | 2017-11-03 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN110009092A true CN110009092A (zh) | 2019-07-12 |
Family
ID=60664720
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811307140.8A Pending CN110009092A (zh) | 2017-11-03 | 2018-11-05 | 用于深度神经网络的激活函数 |
Country Status (4)
Country | Link |
---|---|
US (2) | US11494622B2 (zh) |
EP (1) | EP3480742A1 (zh) |
CN (1) | CN110009092A (zh) |
GB (1) | GB2568087B (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112749793A (zh) * | 2019-10-31 | 2021-05-04 | 爱思开海力士有限公司 | 用于神经网络的算术设备 |
CN113657587A (zh) * | 2021-08-17 | 2021-11-16 | 上海大学 | 基于fpga的可变形卷积加速方法及装置 |
CN113705776A (zh) * | 2021-08-06 | 2021-11-26 | 山东云海国创云计算装备产业创新中心有限公司 | 一种基于asic实现激活函数的方法、系统、设备和存储介质 |
US11922295B2 (en) | 2019-10-31 | 2024-03-05 | SK Hynix Inc. | Arithmetic devices for neural network |
US11954457B2 (en) | 2019-10-31 | 2024-04-09 | SK Hynix Inc. | Arithmetic devices for neural network including a function storage circuit and an activation function circuit |
Families Citing this family (43)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB2568087B (en) * | 2017-11-03 | 2022-07-20 | Imagination Tech Ltd | Activation functions for deep neural networks |
JP6986203B2 (ja) * | 2018-03-12 | 2021-12-22 | オムロン株式会社 | 制御装置、制御システム、制御方法及び制御プログラム |
US11769036B2 (en) * | 2018-04-18 | 2023-09-26 | Qualcomm Incorporated | Optimizing performance of recurrent neural networks |
US11068627B2 (en) | 2018-08-09 | 2021-07-20 | Zoox, Inc. | Procedural world generation |
CA3053604A1 (en) * | 2018-08-31 | 2020-02-29 | Element Ai Inc. | Data point suitability determination from edge device neural networks |
US10831507B2 (en) | 2018-11-21 | 2020-11-10 | SambaNova Systems, Inc. | Configuration load of a reconfigurable data processor |
US11188497B2 (en) | 2018-11-21 | 2021-11-30 | SambaNova Systems, Inc. | Configuration unload of a reconfigurable data processor |
US11687761B2 (en) * | 2018-12-11 | 2023-06-27 | Amazon Technologies, Inc. | Improper neural network input detection and handling |
US10698853B1 (en) | 2019-01-03 | 2020-06-30 | SambaNova Systems, Inc. | Virtualization of a reconfigurable data processor |
US10768899B2 (en) | 2019-01-29 | 2020-09-08 | SambaNova Systems, Inc. | Matrix normal/transpose read and a reconfigurable data processor including same |
US11386038B2 (en) | 2019-05-09 | 2022-07-12 | SambaNova Systems, Inc. | Control flow barrier and reconfigurable data processor |
US11055141B2 (en) | 2019-07-08 | 2021-07-06 | SambaNova Systems, Inc. | Quiesce reconfigurable data processor |
US11327923B2 (en) | 2019-09-04 | 2022-05-10 | SambaNova Systems, Inc. | Sigmoid function in hardware and a reconfigurable data processor including same |
US11736047B2 (en) * | 2019-09-25 | 2023-08-22 | Allegro Microsystems, Llc | BLDC motor controller/driver |
US11327713B2 (en) | 2019-10-01 | 2022-05-10 | SambaNova Systems, Inc. | Computation units for functions based on lookup tables |
US20210142171A1 (en) * | 2019-11-13 | 2021-05-13 | Samsung Electronics Co., Ltd. | Electronic apparatus and method of controlling thereof |
US11327717B2 (en) * | 2019-11-19 | 2022-05-10 | SambaNova Systems, Inc. | Look-up table with input offsetting |
US11328038B2 (en) | 2019-11-25 | 2022-05-10 | SambaNova Systems, Inc. | Computational units for batch normalization |
US11150872B2 (en) | 2019-12-17 | 2021-10-19 | SambaNova Systems, Inc. | Computational units for element approximation |
CN111090673B (zh) * | 2019-12-20 | 2023-04-18 | 北京百度网讯科技有限公司 | 缓存单元的查找方法及相关设备 |
US11836629B2 (en) | 2020-01-15 | 2023-12-05 | SambaNova Systems, Inc. | Computationally efficient softmax loss gradient backpropagation |
JP7431598B2 (ja) | 2020-02-05 | 2024-02-15 | キヤノン株式会社 | 演算装置、演算方法、プログラム及びテーブル生成装置 |
US11163715B1 (en) * | 2020-05-04 | 2021-11-02 | International Business Machines Corporation | CGRA accelerator for weather/climate dynamics simulation |
US20210397596A1 (en) * | 2020-06-19 | 2021-12-23 | Apple Inc. | Lookup table activation functions for neural networks |
US11809908B2 (en) | 2020-07-07 | 2023-11-07 | SambaNova Systems, Inc. | Runtime virtualization of reconfigurable data flow resources |
US20220012586A1 (en) * | 2020-07-13 | 2022-01-13 | Macronix International Co., Ltd. | Input mapping to reduce non-ideal effect of compute-in-memory |
US11960990B2 (en) * | 2020-07-31 | 2024-04-16 | Nanosemi, Inc. | Artificial neural network implementations |
US11782729B2 (en) | 2020-08-18 | 2023-10-10 | SambaNova Systems, Inc. | Runtime patching of configuration files |
US20220300788A1 (en) * | 2021-03-19 | 2022-09-22 | Qualcomm Incorporated | Efficient compression of activation functions |
US11693692B2 (en) | 2021-06-17 | 2023-07-04 | International Business Machines Corporation | Program event recording storage alteration processing for a neural network accelerator instruction |
US11797270B2 (en) | 2021-06-17 | 2023-10-24 | International Business Machines Corporation | Single function to perform multiple operations with distinct operation parameter validation |
US11669331B2 (en) | 2021-06-17 | 2023-06-06 | International Business Machines Corporation | Neural network processing assist instruction |
US11675592B2 (en) | 2021-06-17 | 2023-06-13 | International Business Machines Corporation | Instruction to query for model-dependent information |
US11269632B1 (en) | 2021-06-17 | 2022-03-08 | International Business Machines Corporation | Data conversion to/from selected data type with implied rounding mode |
US11734013B2 (en) | 2021-06-17 | 2023-08-22 | International Business Machines Corporation | Exception summary for invalid values detected during instruction execution |
US11409540B1 (en) | 2021-07-16 | 2022-08-09 | SambaNova Systems, Inc. | Routing circuits for defect repair for a reconfigurable data processor |
US11556494B1 (en) | 2021-07-16 | 2023-01-17 | SambaNova Systems, Inc. | Defect repair for a reconfigurable data processor for homogeneous subarrays |
US11327771B1 (en) | 2021-07-16 | 2022-05-10 | SambaNova Systems, Inc. | Defect repair circuits for a reconfigurable data processor |
CN113935480B (zh) * | 2021-11-12 | 2022-10-18 | 成都甄识科技有限公司 | 面向神经网络在线学习的激活函数加速处理单元 |
US11836604B2 (en) * | 2021-12-01 | 2023-12-05 | Deepx Co., Ltd. | Method for generating programmable activation function and apparatus using the same |
US11487694B1 (en) | 2021-12-17 | 2022-11-01 | SambaNova Systems, Inc. | Hot-plug events in a pool of reconfigurable data flow resources |
CN114885094B (zh) * | 2022-03-25 | 2024-03-29 | 北京旷视科技有限公司 | 一种图像处理方法、图像处理器、图像处理模组及设备 |
CN115526320A (zh) * | 2022-09-16 | 2022-12-27 | 南京地平线集成电路有限公司 | 神经网络模型推理的加速方法、装置、电子设备和介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20020159466A1 (en) * | 2001-02-14 | 2002-10-31 | John Rhoades | Lookup engine |
US20160179434A1 (en) * | 2014-12-19 | 2016-06-23 | Intel Corporation | Storage device and method for performing convolution operations |
US20170103304A1 (en) * | 2015-10-08 | 2017-04-13 | Via Alliance Semiconductor Co., Ltd. | Neural network unit with plurality of selectable output functions |
WO2017108399A1 (fr) * | 2015-12-21 | 2017-06-29 | Commissariat A L'energie Atomique Et Aux Energies Alternatives | Circuit neuronal optimise, architecture et procede pour l'execution des reseaux de neurones |
GB201715215D0 (en) * | 2017-09-20 | 2017-11-01 | Imagination Tech Ltd | Hardware implementation of a deep neural network with cariable output data format |
Family Cites Families (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7054847B2 (en) * | 2001-09-05 | 2006-05-30 | Pavilion Technologies, Inc. | System and method for on-line training of a support vector machine |
US6983389B1 (en) * | 2002-02-01 | 2006-01-03 | Advanced Micro Devices, Inc. | Clock control of functional units in an integrated circuit based on monitoring unit signals to predict inactivity |
US20060017740A1 (en) * | 2004-07-26 | 2006-01-26 | Coleman Christopher R | Diurnal variation of geo-specific terrain temperatures in real-time infrared sensor simulation |
US7970171B2 (en) * | 2007-01-18 | 2011-06-28 | Ricoh Co., Ltd. | Synthetic image and video generation from ground truth data |
US8787494B2 (en) * | 2012-06-11 | 2014-07-22 | Telefonaktiebolaget L M Ericsson (Publ) | Modeling digital predistorter |
EP3035249B1 (en) * | 2014-12-19 | 2019-11-27 | Intel Corporation | Method and apparatus for distributed and cooperative computation in artificial neural networks |
EP3035205A1 (en) * | 2014-12-19 | 2016-06-22 | Intel Corporation | Reconfigurable functional unit and method for artificial neural networks |
CN107683488B (zh) * | 2015-04-05 | 2023-09-05 | 数字资产(瑞士)股份有限公司 | 数字资产中介电子结算平台 |
US10380481B2 (en) * | 2015-10-08 | 2019-08-13 | Via Alliance Semiconductor Co., Ltd. | Neural network unit that performs concurrent LSTM cell calculations |
US10380064B2 (en) * | 2015-10-08 | 2019-08-13 | Via Alliance Semiconductor Co., Ltd. | Neural network unit employing user-supplied reciprocal for normalizing an accumulated value |
US10037306B2 (en) * | 2016-09-01 | 2018-07-31 | Qualcomm Incorporated | Approximation of non-linear functions in fixed point using look-up tables |
GB2568087B (en) * | 2017-11-03 | 2022-07-20 | Imagination Tech Ltd | Activation functions for deep neural networks |
-
2017
- 2017-11-03 GB GB1718300.5A patent/GB2568087B/en active Active
-
2018
- 2018-11-02 EP EP18204175.6A patent/EP3480742A1/en active Pending
- 2018-11-05 CN CN201811307140.8A patent/CN110009092A/zh active Pending
- 2018-11-05 US US16/181,195 patent/US11494622B2/en active Active
-
2022
- 2022-10-07 US US17/962,348 patent/US20230041966A1/en active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20020159466A1 (en) * | 2001-02-14 | 2002-10-31 | John Rhoades | Lookup engine |
US20160179434A1 (en) * | 2014-12-19 | 2016-06-23 | Intel Corporation | Storage device and method for performing convolution operations |
US20170103304A1 (en) * | 2015-10-08 | 2017-04-13 | Via Alliance Semiconductor Co., Ltd. | Neural network unit with plurality of selectable output functions |
WO2017108399A1 (fr) * | 2015-12-21 | 2017-06-29 | Commissariat A L'energie Atomique Et Aux Energies Alternatives | Circuit neuronal optimise, architecture et procede pour l'execution des reseaux de neurones |
GB201715215D0 (en) * | 2017-09-20 | 2017-11-01 | Imagination Tech Ltd | Hardware implementation of a deep neural network with cariable output data format |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112749793A (zh) * | 2019-10-31 | 2021-05-04 | 爱思开海力士有限公司 | 用于神经网络的算术设备 |
US11915125B2 (en) | 2019-10-31 | 2024-02-27 | SK Hynix Inc. | Arithmetic devices for neural network |
US11922295B2 (en) | 2019-10-31 | 2024-03-05 | SK Hynix Inc. | Arithmetic devices for neural network |
US11954457B2 (en) | 2019-10-31 | 2024-04-09 | SK Hynix Inc. | Arithmetic devices for neural network including a function storage circuit and an activation function circuit |
CN113705776A (zh) * | 2021-08-06 | 2021-11-26 | 山东云海国创云计算装备产业创新中心有限公司 | 一种基于asic实现激活函数的方法、系统、设备和存储介质 |
CN113705776B (zh) * | 2021-08-06 | 2023-08-08 | 山东云海国创云计算装备产业创新中心有限公司 | 一种基于asic实现激活函数的方法、系统、设备和存储介质 |
CN113657587A (zh) * | 2021-08-17 | 2021-11-16 | 上海大学 | 基于fpga的可变形卷积加速方法及装置 |
CN113657587B (zh) * | 2021-08-17 | 2023-09-26 | 上海大学 | 基于fpga的可变形卷积加速方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
US11494622B2 (en) | 2022-11-08 |
GB201718300D0 (en) | 2017-12-20 |
GB2568087A (en) | 2019-05-08 |
US20230041966A1 (en) | 2023-02-09 |
US20190147323A1 (en) | 2019-05-16 |
GB2568087B (en) | 2022-07-20 |
EP3480742A1 (en) | 2019-05-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110009092A (zh) | 用于深度神经网络的激活函数 | |
US11868426B2 (en) | Hardware implementation of convolutional layer of deep neural network | |
CA3060368C (en) | Dataflow triggered tasks for accelerated deep learning | |
JP7013143B2 (ja) | 畳み込みニューラルネットワークハードウエア構成 | |
CN109635916A (zh) | 具有可变输出数据格式的深度神经网络的硬件实现 | |
CN110059811A (zh) | 权重缓冲器 | |
WO2018193370A1 (en) | Task activating for accelerated deep learning | |
WO2020021395A1 (en) | Numerical representation for neural networks | |
WO2020044238A1 (en) | Processor element redundancy for accelerated deep learning | |
WO2020044208A1 (en) | Isa enhancements for accelerated deep learning | |
CN110033079B (zh) | 深度神经网络的硬件实现的端到端数据格式选择 | |
CN113887710A (zh) | 循环神经网络中的数字格式选择 | |
Wang et al. | High-performance mixed-low-precision cnn inference accelerator on fpga | |
GB2582868A (en) | Hardware implementation of convolution layer of deep neural network | |
Fu et al. | Towards high performance and accurate bnn inference on fpga with structured fine-grained pruning | |
CN111124357A (zh) | 从n个m位数的集合中选择第i大或第p小的数 | |
GB2601073A (en) | Activation functions for Deep Neural Networks | |
GB2622869A (en) | Methods and systems for online selection of number formats for network parameters of a neural network | |
GB2603582A (en) | End-to-end data format selection for hardware implementation of deep neural network | |
GB2603647A (en) | End-to-end data format selection for hardware implementation of deep neural network | |
Merakos et al. | Power efficient hierarchical scheduling for DSP transformations |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |