CN110033079A - 深度神经网络的硬件实现的端到端数据格式选择 - Google Patents
深度神经网络的硬件实现的端到端数据格式选择 Download PDFInfo
- Publication number
- CN110033079A CN110033079A CN201811299435.5A CN201811299435A CN110033079A CN 110033079 A CN110033079 A CN 110033079A CN 201811299435 A CN201811299435 A CN 201811299435A CN 110033079 A CN110033079 A CN 110033079A
- Authority
- CN
- China
- Prior art keywords
- layer
- dnn
- point number
- fixed point
- number format
- 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.)
- Granted
Links
- 238000013528 artificial neural network Methods 0.000 title claims abstract description 18
- 238000000034 method Methods 0.000 claims abstract description 122
- 238000004519 manufacturing process Methods 0.000 claims description 44
- 238000003860 storage Methods 0.000 claims description 19
- 238000007667 floating Methods 0.000 claims description 17
- 238000012360 testing method Methods 0.000 claims description 16
- 230000004044 response Effects 0.000 claims description 9
- 239000010410 layer Substances 0.000 description 322
- 238000012545 processing Methods 0.000 description 36
- 230000006870 function Effects 0.000 description 29
- 238000010606 normalization Methods 0.000 description 23
- 239000011248 coating agent Substances 0.000 description 19
- 238000000576 coating method Methods 0.000 description 19
- 238000009825 accumulation Methods 0.000 description 15
- 230000008569 process Effects 0.000 description 12
- 230000015572 biosynthetic process Effects 0.000 description 10
- 238000010586 diagram Methods 0.000 description 10
- 238000003786 synthesis reaction Methods 0.000 description 10
- 230000004913 activation Effects 0.000 description 9
- 238000004891 communication Methods 0.000 description 7
- 230000006872 improvement Effects 0.000 description 6
- XUIMIQQOPSSXEZ-UHFFFAOYSA-N Silicon Chemical compound [Si] XUIMIQQOPSSXEZ-UHFFFAOYSA-N 0.000 description 5
- 238000004364 calculation method Methods 0.000 description 5
- 230000008859 change Effects 0.000 description 5
- 238000003825 pressing Methods 0.000 description 5
- 229910052710 silicon Inorganic materials 0.000 description 5
- 239000010703 silicon Substances 0.000 description 5
- 238000004422 calculation algorithm Methods 0.000 description 4
- 238000005516 engineering process Methods 0.000 description 4
- 238000005259 measurement Methods 0.000 description 4
- 230000006399 behavior Effects 0.000 description 3
- 238000013527 convolutional neural network Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 230000001052 transient effect Effects 0.000 description 3
- 230000005540 biological transmission Effects 0.000 description 2
- 230000000295 complement effect Effects 0.000 description 2
- 238000004590 computer program Methods 0.000 description 2
- 238000009826 distribution Methods 0.000 description 2
- 238000012804 iterative process Methods 0.000 description 2
- 238000001259 photo etching Methods 0.000 description 2
- 230000009467 reduction Effects 0.000 description 2
- 239000004065 semiconductor Substances 0.000 description 2
- 241000208340 Araliaceae Species 0.000 description 1
- 101100153586 Caenorhabditis elegans top-1 gene Proteins 0.000 description 1
- 101100370075 Mus musculus Top1 gene Proteins 0.000 description 1
- 235000005035 Panax pseudoginseng ssp. pseudoginseng Nutrition 0.000 description 1
- 235000003140 Panax quinquefolius Nutrition 0.000 description 1
- 230000009471 action Effects 0.000 description 1
- 230000003213 activating effect Effects 0.000 description 1
- 238000004458 analytical method Methods 0.000 description 1
- 230000000712 assembly Effects 0.000 description 1
- 238000000429 assembly Methods 0.000 description 1
- 229910002056 binary alloy Inorganic materials 0.000 description 1
- 230000001186 cumulative effect Effects 0.000 description 1
- 238000013480 data collection Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 235000013399 edible fruits Nutrition 0.000 description 1
- 230000005611 electricity Effects 0.000 description 1
- 239000004744 fabric Substances 0.000 description 1
- 235000008434 ginseng Nutrition 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 238000010801 machine learning Methods 0.000 description 1
- 230000014759 maintenance of location Effects 0.000 description 1
- 239000000463 material Substances 0.000 description 1
- 239000011159 matrix material Substances 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000012805 post-processing Methods 0.000 description 1
- 238000007639 printing Methods 0.000 description 1
- 238000012163 sequencing technique Methods 0.000 description 1
- 239000002356 single layer Substances 0.000 description 1
- 239000000126 substance Substances 0.000 description 1
- 230000026676 system process Effects 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
- 230000017105 transposition Effects 0.000 description 1
- 238000005303 weighing Methods 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/08—Learning methods
-
- 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
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/483—Computations with numbers represented by a non-linear combination of denominational numbers, e.g. rational numbers, logarithmic number system or floating-point numbers
-
- 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/08—Learning methods
- G06N3/082—Learning methods modifying the architecture, e.g. adding, deleting or silencing nodes or connections
-
- 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
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 Physics & Mathematics (AREA)
- Computing Systems (AREA)
- General Engineering & Computer Science (AREA)
- Artificial Intelligence (AREA)
- Data Mining & Analysis (AREA)
- General Health & Medical Sciences (AREA)
- Evolutionary Computation (AREA)
- Mathematical Physics (AREA)
- Molecular Biology (AREA)
- Software Systems (AREA)
- Computational Linguistics (AREA)
- Neurology (AREA)
- Computational Mathematics (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Mathematical Analysis (AREA)
- Nonlinear Science (AREA)
- Design And Manufacture Of Integrated Circuits (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
本公开涉及深度神经网络的硬件实现的端到端数据格式选择。用于选择用于表示输入至和/或输出自DNN的层的值的定点数格式的方法,该方法考虑了定点数格式对DNN的上下文中的特定层的影响。方法包括在预定序列中一次针对一个层来选择用于表示输入至和/或输出自该层的多组值的(一个或多个)定点数格式,其中在序列中任何层之前是该层依赖的(一个或多个)层。基于与定点数格式相关联的DNN的输出中的误差来选择针对每个层的(一个或多个)定点数格式。一旦针对一个层的(一个或多个)定点数格式已经被选择,则序列中后续层的DNN的输出中的误差的任意计算将基于被配置为使用选择的定点数格式的该层。
Description
技术领域
本公开涉及深度神经网络的硬件实现的端到端数据格式选择。
背景技术
深度神经网络(DNN)是可以用于机器学习应用的一种人工神经网络。具体地,DNN可以用于信号处理应用,包括图像处理和计算机视觉应用。
DNN已经在其中功率资源不是重要因素的应用中被实现。尽管如此,DNN还应用于许多不同的技术领域,在这些领域中用于实现DNN的硬件资源的功耗、处理能力或硅面积是有限的。
因此,需要实现被配置为以有效方式(即,以在操作时需要更少硅面积或更少处理能力的方式)实现DNN的硬件。此外,DNN可以以多种不同的方式被配置以用于各种不同的应用。因此,还需要用于实现DNN的硬件能够灵活地支持各种DNN配置。
以下描述的实施例仅作为示例被提供,并且不限制解决深度神经网络的已知硬件实现的任意或所有缺点的实现方式。
发明内容
本发明内容被提供介绍将在以下详细描述中进一步描述的一些概念。本发明内容不旨在标识所要求保护的主题的关键特征或必要特征,也不旨在用于限制所要求保护的主题的范围。
本文描述的是用于确定用于表示输入至和/或输出自DNN的层的值的定点数格式的方法,该方法考虑了定点数格式对DNN的上下文中的特定层的影响。方法包括根据预定序列一次针对一个层来选择用于表示输入至和/或输出自该层的多组值的(一个或多个)定点数格式,其中在序列中任何层之前是该层依赖的(一个或多个)层。基于与定点数格式相关联的DNN的输出中的误差来选择针对每个层的定点数格式。一旦针对一个层的(一个或多个)定点数格式已经被选择,则针对序列中后续层的DNN的输出中的误差的任意计算将基于被配置为使用选择的定点数格式的该层。换句话说,DNN的输出中的误差是基于被配置为使用针对序列中的先前层已经选择的定点数格式的DNN的。这允许以整体地考虑DNN的行为的方式来选择定点数格式。
第一方面提供了一种标识用于表示输入至和/或输出自深度神经网络“DNN”的多个层的值的定点数格式以用于配置DNN的硬件实现的计算机实现的方法,该方法包括:确定多个层的序列,其中,多个层中的每个层之前是多个层中该层所依赖的任意层;接收被配置为使用浮点数格式来表示输入至和/或输出自DNN的多个层的值的DNN的实例;针对确定的序列中的每个层:选择用于表示输入至或输出自该层的一组或多组值中的每组值的定点数格式,其中,用于表示输入至或输出自一个层的一组值的定点数格式被选择以使得最小化DNN的实例的输出误差;以及重新配置DNN的实例以使用针对一组或多组值中的每组值的选择的定点数格式来表示该组值。
第二方面提供了一种用于标识用于表示输入至和/或输出自深度神经网络“DNN”的多个层的值的定点数格式以用于配置DNN的硬件实现的基于计算的设备,该基于计算的设备包括:至少一个处理器;以及存储器,被耦合到至少一个处理器,存储器包括:DNN的实例,被配置为使用浮点数格式来表示输入至和/或输出自DNN的多个层的值;计算机可读代码,在由至少一个处理器执行时,使得至少一个处理器执行以下操作:确定多个层的序列,其中,多个层中的每个层之前是多个层中该层所依赖的任意层;针对确定的序列中的每个层:选择用于表示输入至或输出自该层的一组或多组值中的每组值的定点数格式,其中,用于表示输入至或输出自一个层的一组值的定点数格式被选择以使得最小化DNN的实例的输出误差;以及重新配置DNN的实例以使用针对一组或多组值中的每组值的选择的定点数格式来表示该组值。
第三方面提供了一种深度神经网络“DNN”的硬件实现,包括:硬件逻辑,被配置为:接收DNN的一个层的输入数据值;接收指示针对该层的输入数据值的定点数格式的信息,针对该层的输入数据值的定点数格式已经根据第一方面的方法被选择;基于针对该层的输入数据值的定点数格式来解释输入数据值;以及根据该层来处理经解释的输入数据值以生成针对该层的输出数据值。
DNN的硬件实现可以体现在集成电路上的硬件中。可以提供一种在集成电路制造***中制造硬件实现的方法。可以提供集成电路定义数据集,该集成电路定义数据集在集成电路制造***中处理时,配置***以制造DNN的硬件实现。可以提供一种在其上存储有DNN的硬件实现的计算机可读描述的非暂态计算机可读存储介质,该DNN的硬件实现的计算机可读描述在集成电路制造***中处理时,使得集成电路制造***制造体现DNN的硬件实现的集成电路。
可以提供一种集成电路制造***,包括:非暂态计算机可读存储介质,在其上存储有DNN的硬件实现的计算机可读描述;布局处理***,被配置为处理计算机可读描述以便生成体现DNN的硬件实现的集成电路的电路布局描述;以及集成电路生成***,被配置为根据电路布局描述制造DNN的硬件实现。
可以提供用于执行如本文描述的方法的计算机程序代码。可以提供在其上存储有计算机可读指令的非暂态计算机可读存储介质,该计算机可读指令在计算机***处执行时,使得计算机***执行如本文描述的方法。
如技术人员显而易见的,上述特征可以被适当地组合,并且可以与本文描述的示例的任何方面进行组合。
附图说明
现在将参考附图详细描述实施例,其中:
图1是示例深度神经网络(DNN)的示意图;
图2是DNN中的示例数据的示意图;
图3是用于确定用于表示输入至和输出自DNN的每个层的多组值的定点数格式的示例方法的流程图;
图4是示例DNN的示意图和示例DNN的示例序列;
图5是用于选择针对一个层的一组值的定点数格式的示例方法的流程图;
图6是示出与定点数格式相关联的输出误差的第一示例计算的示意图;
图7是示出与定点数格式相关联的输出误差的第二示例计算的示意图;
图8是示出输入至和输出自一个层的值的示意图;
图9是用于选择针对输入至或输出自一个层的多组值的定点数格式的示例方法的流程图;
图10是DNN的示例硬件实现的框图;
图11是示例基于计算的设备的框图;
图12是其中实现DNN的硬件实现的示例计算机***的框图;并且
图13是用于生成体现如本文描述的DNN的硬件实现的集成电路的示例集成电路制造***的框图。
附图示出了各种示例。技术人员将理解,附图中示出的元件边界(例如,框、框组或其他形状)代表边界的一个示例。在一些示例中,可以将一个元件设计为多个元件,或可以将多个元件设计为一个元件。在整个附图中使用共同的附图标记来适当地表示类似的特征。
具体实施方式
通过示例的方式呈现以下描述以使得本领域技术人员能够制造和使用本发明。本发明不限于本文描述的实施例,并且所公开的实施例的各种修改对于本领域技术人员来说是显而易见的。仅通过示例的方式描述了实施例。
深度神经网络(DNN)是一种人工神经网络,包括多个互连层,使得DNN能够执行信号处理任务,包括但不限于计算机视觉任务。图1示出了包括多个层102-1、102-2、102-3的示例DNN 100。每个层102-1、102-2、102-3接收输入数据,根据该层来处理输入数据以产生输出数据。输出数据作为输入数据提供给另一层,或作为DNN的最终输出数据输出。例如,在图1的DNN 100中,第一层102-1接收进入DNN 100的原始输入数据104,并且根据第一层102-1来处理输入数据以产生输出数据。第一层102-1的输出数据成为第二层102-2的输入数据,第二层102-2根据第二层102-2来处理输入数据以产生输出数据。第二层102-2的输出数据成为第三层102-3的输入数据,第三层102-3根据第三层102-3来处理输入数据以产生输出数据。第三层102-3的输出数据被输出作为DNN的输出数据106。
对进入层的输入数据执行的处理取决于层的类型。例如,DNN的每个层可以是多种不同类型中的一种。示例DNN层类型包括但不限于:卷积层、激活层、归一化层、池化层、和全连接层。对于本领域技术人员显而易见的是,这些是示例DNN层类型,并且这不是穷举列表,并且可能存在其他DNN层类型。
针对卷积层,通过使用与该层相关联的权重对输入数据进行卷积来处理输入数据。具体地,每个卷积层与多个权重w0…wg(其也可以称为滤波器权重或系数)相关联。权重被分组以形成或定义一个或多个滤波器(其也可以称为核),并且每个滤波器可以与偏移偏置(offset bias)b相关联。
参考图2,图2示出了DNN中使用的数据格式的示例概述。如图2所示,DNN中使用的数据可以被布置为P个平面的数据,其中每个平面具有维度x×y。DNN可以包括一个或多个卷积层,每个卷积层与由多个权重形成的多个滤波器相关联。每个滤波器具有维度m×n×P,并且根据在方向s和t上跨若干步的卷积运算被应用于输入数据,如图2所示。滤波器的数量和每个滤波器的权重的数量可以在卷积层之间变化。卷积神经网络(CNN)(该CNN是针对图像识别和分类有效的特定类型的DNN)通常包括多个卷积层。
激活层(其通常(但不一定)跟随卷积层)对进入该层的输入数据执行一个或多个激活函数。激活函数采用单个数字并且对其执行非线性数学运算。在一些示例中,激活层可以通过实现修正线性单元(ReLU)函数(即,f(x)=max(0,x))来用作ReLU,或通过实现参数修正线性单元(PReLU)函数来用作PReLU。
归一化层被配置为对输入数据执行归一化函数(例如,局部响应归一化(LRN)函数)。池化层(其通常(但不一定)***连续卷积层之间)执行池化函数(例如,最大或平均函数)以汇总输入数据的子集。因此,池化层的目的是减小表示的空间大小以减少网络中的参数和计算的数量,并且因此还控制过度拟合。
全连接层(其通常(但不一定)跟随多个卷积层和池化层)采用一组三维输入数据值并且输出N维向量。在DNN用于分类的情况下,N是类的数量,向量中的每个值表示某个类的概率。N维向量是通过一组权重与输入数据值的矩阵乘法(可选地跟随有偏置偏移)来生成的。因此,全连接层接收一组权重和偏置。
因此,DNN的每个层接收输入数据值并且生成输出数据值;并且一些层也接收权重和/或偏置。
DNN的硬件实现包括被配置为根据DNN的层来处理进入DNN的输入数据的硬件逻辑。具体地,DNN的硬件实现包括被配置为根据每个层来处理进入该层的输入数据并且生成针对该层的输出数据(该输出数据变为进入另一层的输入数据,或变为DNN的输出)的硬件逻辑。例如,如果DNN包括卷积层并且卷积层之后跟随有激活层,则该DNN的硬件实现包括被配置为使用与该卷积层相关联的权重和偏置来对进入DNN的输入数据执行卷积以产生针对卷积层的输出数据的硬件逻辑,以及被配置为将激活函数应用于进入激活层的输入数据(即,卷积层的输出数据)以生成针对DNN的输出数据的硬件逻辑。
如本领域技术人员所知,针对用于处理一组值的硬件,每个值用数字格式进行表示。两种最适当的数字格式是定点数格式和浮点数格式。如本领域技术人员所知,定点数格式在基点(例如,十进制小数点或二进制小数点)之后具有固定的位数。相反,浮点数格式没有固定的基点(即,基点可以“浮动”)。换句话说,基点可以放在表示中的任意位置。虽然用浮点数格式表示输入至和输出自DNN的层的值可以允许产生更准确或精确的输出数据,但是在硬件中用浮点数格式处理数字是复杂的,与用定点数格式处理值的硬件相比,这往往会增加硬件的硅面积和复杂性。因此,硬件实现可以被配置为用定点数格式表示和处理输入至和/或输出自DNN的层的值,以减少硬件实现的面积、功耗和存储器带宽。
常见定点数格式是Q格式,其指定预定数量的整数位a和小数位b。因此,数字可以表示为Qa.b,其需要总共a+b+1位(包括符号位)。示例Q格式在下面的表1中示出。
表1
Q格式 | 描述 | 示例 |
Q4.4 | 4个整数位和4个小数位 | 0110.1110<sub>2</sub> |
Q0.8 | 0个整数位和8个小数位 | .01101110<sub>2</sub> |
然而,Q格式的缺点在于,用于表示数字的一些位可能被认为是冗余的。在示例中,数字范围[-0.125,0.125]将被表示为3位的精度。该示例范围和精度所需的Q格式为Q0.5。然而,如果我们假设值的范围是预先知道的,则该数字的前两位将永远不会用于确定用Q格式表示的值。例如,表示的前两位对最终数字没有贡献,因为它们分别代表0.5和0.25,由此超出了所需范围。然而,它们用于指示第三位位置的值(即,0.125以及归因于相对位位置的其他值)。因此,上述Q格式是用于在DNN的硬件实现中使用的低效定点数格式,因为一些位可能不传达有用信息。
因此,在一些情况下,代替使用Q格式,一些硬件实现可以被配置为针对输入至或输出自DNN的层的值使用以下定点数格式,其中每个值x由固定整数指数e和n位尾数m来表示,格式为x=2em,其由指数e和尾数位的数量n(即,{e,n})来定义。在一些情况下,尾数m可以用二进制补码格式表示,而在其他情况下,可以使用其他有符号或无符号整数格式。
为了减小DNN的硬件实现的大小并且提高效率,硬件实现可以被配置为用以下定点数格式来表示和处理输入至和输出自DNN的层的值,该定点数格式使用能够表示每组值的预期或期望范围的最小数量的位。由于不同组的值(例如,输入数据值、输出数据值、偏置、和权重)的范围可能在层内以及层之间变化,因此在用于表示输入数据值、输出数据值、权重、和/或偏置的定点数格式可以在层内以及层之间变化时,硬件实现能够更有效地处理DNN。例如,硬件实现能够通过使用包括指数为2和尾数位长度为6的定点数格式来表示针对第一层的输入数据值,使用包括指数为3和尾数位长度为12的定点数格式来表示第一层的权重,并且使用包括指数为4和尾数位长度为6的定点数格式来表示针对第二层的输入数据值,来更有效地实现DNN。
作为结果,期望在每个层的基础上标识用于表示输入至或输出自DNN的一个层的多组值(例如,输入数据值、输出数据值、权重、或偏置)的定点数格式(例如,包括指数和尾数位长度)。一些方法(例如,在申请人的与当前申请同日提交的并且题为深度神经网络的硬件实现的基于直方图的数据格式选择(HISTOGRAM-BASED DATA FORMAT SELECTION FORHARDWARE IMPLEMENTATION OF DEEP NEURAL NETWORK)的共同未决的英国专利申请中描述的方法,该英国专利申请通过引用合并于此)涉及在每个层的基础上独立于其他层选择针对输入至或输出自一个层的值的适当的定点数格式(例如,最佳指数和尾数位长度组合)。这些方法在本文中可以称为与层无关的方法。就处理时间和处理能力而言,在选择针对输入至或输出自一个层的多组值(例如,输入数据值、输出数据值、权重)的适当的定点数格式时,与层无关的方法可以非常有效,然而,在大多数情况下,使用针对一个层的值的特定定点数格式对DNN行为的影响取决于与DNN的其他层的交互。
因此,本文描述的是用于选择用于表示输入至和/或输出自DNN的层的多组值的定点数格式的方法,其中针对特定层的定点数格式在DNN的上下文中被评估。具体地,在描述的方法中,在预定序列中一次针对一个层来选择用于表示输入至和/或输出自DNN的一个层的多组值的(一个或多个)定点数格式,其中在序列中任何层之前是该层依赖的(一个或多个)层。基于多个可能的定点数格式中的每个定点数格式被用于表示相应层的值时的DNN的输出误差,来从该多个可能的定点数格式中选择针对每个层的(一个或多个)定点数格式。一旦针对一个层的(一个或多个)定点数格式已经被选择,则针对序列中后续层的DNN的输出误差的计算将基于被配置为使用选择的定点数格式来表示该层的值的DNN。换句话说,在评估针对一个层的定点数格式时的DNN的输出误差的确定是基于被配置为使用针对序列中的先前层先前选择的定点数格式来表示这些先前层的值的DNN的。这允许以整体地考虑DNN的行为的方式来选择定点数格式。
此外,测试已经示出,在DNN的硬件实现被配置为在每个层的基础上实现定点数格式并且定点数格式是根据本文描述的方法被选择的时,与定点数格式是根据与层无关的方法(例如,申请人的共同未决申请中描述的基于直方图的方法)被选择的相比,硬件实现通常产生更准确的输出。
现在参考图3,图3示出了用于选择能够被用来配置DNN的硬件实现的用于表示输入至或输出自DNN的多个层的多组值的定点数格式的示例方法300。多个层可以包括DNN的全部层或仅一部分层。方法300可以由基于计算的设备(例如,下面参考图11描述的基于计算的设备)来实现。例如,基于计算的设备(例如,基于计算的设备1100)可以包括或可以访问在其上存储有计算机可读指令的计算机可读介质(例如,存储器),该计算机可读介质在由基于计算的设备的处理器执行时,使得基于计算的设备执行图3的方法300。
方法300在框302处开始,其中,确定多个层的序列,其中,多个层中的每个层之前是多个层中该层所依赖的(一个或多个)层。如上所述,DNN包括多个互连层,其中每个层(除最后层之外)的输出数据变为后续层的输入数据。从较早层接收输入数据的层被认为依赖于该较早层。例如,图4示出了包括八个层(L1、L2、L3、L4、L5、L6、L7和L8)的示例DNN 400。在该示例中,层1(L1)的输出数据被提供给层2和层3(L2、L3)作为输入数据,因此层2和层3被称为依赖于层1;并且,层3(L3)的输出数据被提供给层6(L6)作为输入数据,因此层6(L6)依赖于层3(L3)。相应地,其中L1在L2和L3之前;L2在L4之前;L4在L5之前;L3在L6之前;L5和L6在L7之前;以及L7在L8之前的任意层序列将满足以下序列条件,其中序列中的每个层之前是该层所依赖的(一个或多个)层。这种序列的示例包括序列L1、L2、L4、L5、L3、L6、L7和L8,以及序列L1、L3、L6、L2、L4、L5、L7和L8。
按照由序列描述的顺序来确定层的定点数格式,确保后续层考虑在影响由该后续层产生的输出数据的层中使用的定点数格式。一旦确定了DNN的多个层的序列,方法300就进行到框304。
在框304处,接收被配置为使用浮点数格式来表示输入至和/或输出自多个层的值的DNN的实例。DNN的实例以能够被用来测试DNN对输入数据的响应的形式来体现DNN。DNN的实例包括但不限于DNN的软件模型或DNN的硬件实现。通常可以更准确地或更精确地用浮点数格式来表示值,因此被配置为使用浮点数格式来表示输入至和输出自每个层的值的DNN表示将产生最佳或最准确输出的DNN。被配置为使用浮点数格式来表示输入至和输出自每个层的值的DNN的实例可以在本文中被称为DNN的浮点实例、DNN的基线实例、或DNN的基准实例。一旦已经接收到被配置为使用浮点数格式来表示输入至和输出自多个层的值的DNN的实例,方法300就进行到框306。
在框306处,将在框302中确定的序列中的DNN的第一层标识为当前层。一旦序列中的第一层已经被标识为当前层,方法300就进行到框308。
在框308处,选择针对输入至或输出自当前层的一组或多组值中的每组值的定点数格式,该定点数格式最小化DNN的实例的输出误差。输入至或输出自一个层的一组值可以是针对该层的输入数据值的全部或一部分、该层的权重的全部或一部分、该层的偏置的全部或一部分、或该层的输出数据值的全部或一部分。每个层可以具有一组或多组值,将选择针对这些值的定点数格式。例如,一些层可以具有表示进入层的输入数据值的第一组值(该第一组值可以用定点数格式来表示)以及表示层的输出数据值的第二组值(该第二组值可以用定点数格式来表示)。在其他示例中,一些层(例如,卷积层和全连接层)可以具有表示层的权重的第三组值(该第三组值可以用定点数格式来表示)以及表示层的偏置的第四组值(该第四组值可以用定点数格式来表示)。由于层的不同组的值可以具有不同的范围等,因此可以针对每组值选择不同的定点数格式。
针对输入至或输出自一个层的一组值的定点数格式被选择以最小化DNN的实例的输出误差。具体地,如上所述,在使用浮点数格式来表示输入至和输出自DNN的所有层的值时,通常生成DNN的最准确输出。一旦输入至或输出自一个层的一组值用定点数格式来表示,DNN的输出就变得不太准确;并且一般地,越多组值用定点数格式来表示,DNN的输出就变得越不准确。在本文描述的方法中,在用于表示一个层的一组值时在DNN的实例中产生最小输出误差的定点数格式被选择作为用于表示该组值的定点数格式。
在一些情况下,可以通过以下迭代过程来选择用于表示输入至或输出自一个层的一组值的定点数格式,其中,临时修改DNN的实例,使得该层的该组值使用多个可能的定点数格式中的一个定点数格式来表示;记录响应输入测试数据的临时修改的DNN的实例的输出;确定输出的误差(例如,与基线输出相比);然后针对多个可能的定点数格式中的每个定点数格式重复该过程;并且选择与最佳输出误差相关联的定点数格式作为用于表示输入至或输出自该层的该组值的定点数格式。下面参考图5详细描述用于选择用于表示输入至或输出自DNN的一个层的一组值的定点数格式的示例方法。下面参考图5描述可以如何计算输出误差的示例。一旦选择了用于表示输入至或输出自一个层的一组或多组值中的每组值的定点数格式,方法300就进行到框310。
在框310处,DNN的实例被重新配置为使用在框308中选择的(一个或多个)定点数格式来表示当前层的相应一组值。例如,如果在块308期间,选择包括指数为2和尾数位长度为6的定点数格式来表示层4(L4)的输入数据值并且选择包括指数为3和尾数位长度为5的定点数格式来表示层4(L4)的输出数据值,则DNN的实例被重新配置为用包括指数为2和尾数位长度为6的定点数格式来表示层4(L4)的输入数据值,并且用包括指数为3和尾数位长度为5的定点数格式来表示层4(L4)的输出数据值。
由于DNN的实例被用来确定与针对后续层的不同定点数格式相关联的输出误差,因此将DNN的实例重新配置为使用选择的(一个或多个)定点数格式来表示当前层的值,确保了与针对后续层的不同定点数格式相关联的输出误差考虑在该后续层所依赖的层中使用的定点数格式。例如,在图4的示例DNN 400中,层2(L2)依赖于层1(L1)。如果在选择针对层2(L2)的定点数格式之前DNN的实例被配置为使用针对层1(L1)选择的定点数格式来表示层1(L1)的值,则在确定在层2(L2)中使用的定点数格式对输出误差的影响时考虑用于层1(L1)的定点数格式。一旦DNN的实例被重新配置为使用在框308中选择的定点数格式来表示输入至或输出自当前层的(一个或多个)相应一组值,方法300就进行到框312。
在框312处,确定序列中是否还存在任意其他层。如果在序列中存在至少一个层跟随在当前层之后,则方法300进行到框314。然而,如果在序列中没有其他层跟随在当前层之后,指示已经针对多个层选择了定点数格式,则方法300可以进行到框316或方法300可以结束。
在框314处,将序列中的下一层标识为当前层,并且方法300返回到框308,其中选择用于表示输入至或输出自当前层的一组或多组值的(一个或多个)定点数格式。
在框316处,输出针对多个层选择的(一个或多个)定点数格式。在一些情况下,可以将针对多个层选择的(一个或多个)定点数格式输出到存储器。
一旦根据图3的方法300确定了用于表示输入至或输出自多个层的多组值的定点数格式,就可以使用一个或多个标识的定点数格式来配置DNN的硬件实现。例如,可以使用一个或多个标识的定点数格式来配置DNN以将输入数据值、权重和/或偏置解释为(一个或多个)标识的格式中的数字。这可以允许硬件实现更有效地处理进入该层的输入。在另一示例中,可以使用针对一个层的标识的定点数格式来配置DNN,使得当DNN没有接收到(一个或多个)标识的定点数格式中的针对该层的输入数据值、权重和/或偏置时,DNN将接收到的输入数据值、权重和/或偏置转换为(一个或多个)标识的定点数格式,以允许硬件实现更有效地处理进入该层的输入。在又一示例中,可以使用标识的定点数格式来配置硬件实现以将馈送到一个层中的另一层的输出数据转换为标识的定点数格式,以便用标识的定点数格式将该另一层的输出数据提供给该层。下面参考图10描述了DNN的示例硬件实现以及如何使用标识的格式来配置硬件实现。
现在参考图5,图5示出了用于从多个可能的定点数格式中选择用于表示输入至或输出自DNN的一个层的一组值的定点数格式(该定点数格式最小化DNN的输出误差)的示例方法500。在该方法500中,通过以下迭代过程选择用于表示输入至或输出自一个层的一组值的定点数格式,其中针对多个可能的定点数格式中的每个定点数格式来确定DNN的输出误差(例如,DNN的输出与基线输出之间的误差);并且,选择具有最佳输出误差的定点数格式作为用于表示该组值的格式。可以在方法300的框308期间针对要用定点数格式表示的输入至或输出自一个层的每组值来实现图5的方法500。
方法500在框502处开始,其中选择多个可能的定点数格式的一个定点数格式作为当前定点数格式。多个可能的定点数格式包括可以被用来表示输入至或输出自一个层的一组值的多个不同的定点数格式。如上所述,输入至或输出自一个层的一组值可以是针对该层的输入数据值的全部或一部分、针对该层的输出数据值的全部或一部分、针对该层的权重的全部或一部分、或针对该层的偏置的全部或一部分。
在一些情况下,每个可能的定点数格式由指数e和尾数位长度n定义。在一些情况下,方法500可以被用来标识针对特定尾数位长度n的最佳指数e。在这些情况下,多个可能的定点数格式中的每个定点数格式可以具有相同的尾数位长度n,但是具有不同的指数e。在其他情况下,方法500可以被用来标识针对特定指数e的最佳尾数位长度n。在这些情况下,多个可能的定点数格式中的每个定点数格式可以具有相同的指数e,但是具有不同的尾数位长度n。
在一些情况下,多个可能的定点数格式可以包括所有可能的定点数格式。例如,在指数固定的情况下,多个可能的定点数格式可以包括针对每个可能的尾数位长度n与固定指数e相组合的可能的定点数格式。在其他情况下,多个可能的定点数格式可以包括所有可能的定点数格式的子集。定点数格式的子集可以包括例如,基于一个或多个标准更可能是最佳定点数格式的可能的定点数格式。例如,在尾数位长度固定的情况下,多个可能的定点数格式可以包括具有特定尾数位长度n与仅可能的指数e的子集相组合的可能的定点数格式。一旦已经选择了可能的定点数格式作为当前定点数格式,方法500就进行到框504。
在框504处,临时重新配置DNN的实例以根据当前定点数格式来表示针对该层的相关一组值。例如,在当前定点数格式由指数为4和尾数位长度为12定义并且该组值是针对层2(L2)的输入数据值的情况下,则可以临时配置DNN的实例以使用指数为4和尾数位长度为12来表示进入层2(L2)的输入数据值。一旦DNN的实例已经被临时重新配置为根据当前定点数格式来表示针对该层的相关一组值,方法500就进行到框506。
在框506处,将测试输入数据提供给临时重新配置的DNN的实例,并且记录响应于测试输入数据的临时重新配置的DNN的输出。在DNN是分类网络的情况下,DNN的输出可以是一组分对数(logit)。如本领域技术人员所知,分类网络确定输入数据落入多个类中的每个类的概率。网络通常生成数据向量,其中每个类都有一个元素与其相对应,并且这些元素中的每个元素被称为分对数。例如,具有1000个分类的分类网络可以输出1000个分对数的向量。在一些情况下,DNN的输出可以替代地是将柔性最大(SoftMax)函数应用于分对数而得到的输出。如本领域技术人员所知,柔性最大函数是应用于由DNN输出的分对数的变换,其使得与每个分类相关联的值加起来为1。这允许柔性最大函数的输出表示类的概率分布。柔性最大函数的输出可以称为柔性最大归一化的分对数。柔性最大函数可以如等式(1)所示,其中si是针对类i的柔性最大输出,zi是针对类i的分对数,i和j是对应于类的向量索引:
在一些情况下,可以将多组测试输入数据提供给临时重新配置的DNN的实例。例如,在一些情况下,在进入DNN的输入数据预期是图像的情况下,可以向临时重新配置的DNN的实例提供10-50个测试图像。在这些情况下,输出数据可以包括响应于每个测试输入(例如,测试图像)而生成的输出数据(例如,分对数)。一旦已经记录了响应于测试输入数据的临时重新配置的DNN的实例的输出数据,方法500就进行到框508。
在框508处,确定临时重新配置的DNN的实例的输出中的误差,其在本文中可以被称为与当前定点数格式相关联的输出误差。误差定量地表示输出的质量。
在一些情况下,如图6中的600所示,可以将临时重新配置的DNN的实例的输出中的误差计算为相对于基线输出的输出中的误差。基线输出可以是被配置为用浮点数格式来表示输入至和输出自每个层的值的DNN的实例的输出。这种实例在本文中可以称为DNN的浮点实例。如上所述,由于通常可以更准确地或更精确地用浮点数格式来表示值,因此被配置为使用浮点数格式来表示输入至和输出自每个层的值的DNN的实例表示将产生最佳或最准确输出的DNN的实例。因此,由DNN的浮点实例生成的输出数据可以用作基准输出或基线输出,根据该基准输出或基线输出来测量由临时重新配置的DNN的实例生成的输出数据的准确性。
可以用任意适当的方式来确定DNN的基线输出与临时重新配置的DNN的输出之间的误差。例如,在输出是一组分对数的情况下,可以将基线输出与临时重新配置的DNN的实例的输出之间的误差计算为相应分对数之间的L1距离。这在等式(2)中示出,其中z是基线输出中的一组分对数,并且z’是临时重新配置的DNN的实例的输出中的一组分对数:
∑i|zi-z′i| (2)
在其他示例中,基线输出与临时重新配置的DNN的实例的输出之间的误差可以被计算为具有可选附加温度参数T的柔性最大函数的输出之间的L1距离,如等式(3)中所示。升高温度使得柔性最大值“更柔和”(即,饱和度降低到0和1),从而更容易训练。
在其他情况下,如图7中的700所示,输出中的误差可以是输出的精度的度量。换句话说,误差可以指示临时重新配置的DNN的实例的输出相对于测试输入数据的已知结果的准确程度如何。例如,输出误差可以基于测试输入数据的已知正确分类或标签被计算为前1名(Top-1)的分类准确度或前5名(Top-5)的分类准确度。如本领域技术人员所知,前1名的分类准确度可以是对由DNN输出的前1名的分类是正确分类的频率的度量,并且前5名的分类准确度是对由DNN输出的前5名的分类是正确分类的频率的度量。
先前段落提供了当DNN是分类网络时如何计算临时重新配置的DNN的实例的输出中的误差的示例,但是本领域技术人员显而易见的是,方法和本文描述的原理可以应用于其他类型的DNN。可以使用任何已知方式来计算针对其他类型的DNN的临时重新配置的DNN的实例的输出中的误差。
一旦确定了临时重新配置的DNN的输出中的误差,方法500就进行到框510。
在框510处,确定是否存在尚未确定输出误差的任意其他可能的定点数格式。如果多个定点数格式中存在尚未确定输出误差的至少一个可能的定点数格式,则方法500进行到框512,其中可能的定点数格式中的尚未确定输出误差的一个定点数格式被标识为当前定点数格式。然后,方法500返回到框504,其中确定与当前定点数格式相关联的输出误差。然而,如果多个可能的定点数格式中不存在尚未确定输出误差的可能的定点数格式,则已经针对所有可能的定点数格式确定了输出误差,并且方法500进行到框514。
在框514处,基于与可能的定点数格式相关联的输出误差来选择多个定点数格式中的一个定点数格式作为用于表示针对该层的该组值的定点数格式。在一些情况下,可以选择与最佳输出误差相关联的可能的定点数格式作为用于表示针对该层的该组值的定点数格式。什么构成“最佳”输出误差可以取决于如何计算输出误差。例如,在输出误差被计算为临时重新配置的DNN的实例的输出与基线输出之间的差异的情况下,“最佳”输出误差可以是最低或最小输出误差(即,相对于基线输出的最小差异)。相反,在输出误差是DNN精度的度量的情况下,“最佳”输出误差可以是最高或最大输出误差(即,最佳精度)。一旦选择了多个定点数格式中的一个定点数格式作为用于表示针对该层的该组值的定点数格式,方法500就结束。
如上所述,每个层可以具有多组值,该多组值可以各自用定点数格式来表示。可以针对能够用定点数格式表示的不同的每组值单独地执行图5的方法500。例如,如图8所示,每个层802接收输入数据值并且生成输出数据值;并且一些层(例如,卷积层和全连接层)也可以接收权重和/或偏置。输入数据值、输出数据值、权重和偏置中的每一个可以被描述为针对该层的不同类型的数据。输入数据值、输出数据值、权重和偏置中的每一个可以是针对其选择定点数格式的一组值。例如,可以选择定点数格式来表示层的输入数据值,可以选择定点数格式来表示层的输出数据值,可以选择定点数格式来表示层(如果是卷积层或全连接层)的权重,并且可以选择定点数格式来表示层(如果是卷积层或全连接层)的偏置。在一些情况下,输入数据值、输出数据值、权重和偏置中的一个或多个可以被划分为多个子集或部分,并且针对每个子集或部分选择定点数格式。例如,权重被划分为滤波器,并且可以选择单独的定点数格式来表示每个滤波器或一组滤波器。
在针对一个层的多个不同类型的值中的每个类型的值选择定点数格式的情况下,选择定点数格式的顺序可能影响针对特定的一组值的定点数格式对输出误差的影响能够被精确到什么程度。具体地,输入数据值、权重和偏置是进入一个层的输入,因此用于这些数据类型的定点数格式影响输出数据值。因此,如果在选择针对输出数据值的定点数格式之前选择针对输入数据值、权重和偏置的定点数格式,则可以确定针对输出数据值的定点数格式对DNN的输出误差的影响的更准确估计。这允许在选择针对输出数据值的定点数格式时考虑针对输入选择的定点数格式。测试还表明,如果在选择针对权重和偏置的定点数格式之前选择针对输入数据值的定点数格式,则可以减少输出误差。
现在参考图9,图9示出了用于实现图3的方法300的框308的方法900,其中可以针对一个层的与不同数据类型相关的多组数据选择定点数格式。方法900在框902处开始,其中确定要针对其选择定点数格式的一个层的一组或多组值是否包括与该层的输入数据值相关的一组值。如果一组或多组值包括与该层的输入数据值相关的一组值,则首先选择针对该组值的定点数格式,并且方法900进行到框904。如果一组或多组值不包括与输入数据值相关的一组值,则方法900进行到框908。在框904处,基于当前DNN的实例来选择针对与输入数据值相关的一组值的定点数格式。例如,可以根据图5的方法500来选择针对与输入数据值相关的一组值的定点数格式。然后,方法900进行到框906,其中重新配置DNN的实例,使得使用选择的定点数格式来表示输入数据值。然后,方法900进行到框908。
在框908处,确定要针对其选择定点数格式的一个层的一组或多组值是否包括与该层的权重相关的一组值。如果一组或多组值包括与该层的权重相关的一组值,则接下来选择针对该组值的定点数格式,并且方法900进行到框910。如果一组或多组值不包括与该层的权重相关的一组值,则方法900进行到框914。在框910处,基于当前DNN的实例(该当前DNN的实例在选择了针对输入数据值的定点数格式时被配置为使用该定点数格式来表示该层的输入数据值)来选择针对与权重相关的一组值的定点数格式。例如,可以根据图5的方法500来选择针对与权重相关的一组值的定点数格式。然后,方法900进行到框912,其中重新配置DNN的实例,使得使用选择的定点数格式来表示权重。然后,方法900进行到框914。
在框914处,确定要针对其选择定点数格式的一个层的一组或多组值是否包括与该层的偏置相关的一组值。如果一组或多组值包括与该层的偏置相关的一组值,则接下来选择针对该组值的定点数格式,并且方法900进行到块916。如果一组或多组值不包括与该层的偏置相关的一组值,则方法900进行到框920。在框916,基于当前DNN的实例(该当前DNN的实例在选择了针对输入数据值的定点数格式时被配置为使用该定点数格式来表示该层的输入数据值,并且在选择了针对权重的定点数格式时被配置为使用该定点数格式来表示权重)来选择针对与偏置相关的一组值的定点数格式。例如,可以根据图5的方法500来选择针对与偏置相关的一组值的定点数格式。然后,方法900进行到框918,其中重新配置DNN的实例,使得使用选择的定点数格式来表示偏置。然后,方法900进行到框920。
在框920处,确定要针对其选择定点数格式的一个层的一组或多组值是否包括与该层的输出数据值相关的一组值。如果一组或多组值包括与该层的输出数据值相关的一组值,则接下来选择针对该组值的定点数格式,并且方法900进行到框922。然而,如果一组或多组值不包括与该层的输出数据值相关的一组值,则方法900结束。在框922处,基于当前DNN的实例(该当前DNN的实例在选择了针对输入数据值的定点数格式时被配置为使用该定点数格式来表示该层的输入数据值,在选择了针对权重的定点数格式时被配置为使用该定点数格式来表示权重,并且在选择了针对偏置的定点数格式时被配置为使用该定点数字格式来表示偏置)来选择针对与输出数据值相关的一组值的定点数格式。然后方法900结束。
DNN的示例硬件实现
现在参考图10,图10示出了可以被配置为基于使用图3的方法300标识的格式的DNN的示例硬件实现1000。
图10的硬件实现1000被配置为通过一系列硬件通道(pass)(其也可以称为处理通道)来计算DNN的输出,其中在每个通道期间,硬件实现接收DNN的一个层的输入数据的至少一部分,并且根据该层(并且可选地根据一个或多个后续层)处理接收到的输入数据以产生经处理的数据。经处理的数据被输出到存储器以用作后续硬件通道的输入数据,或被输出作为DNN的输出。硬件实现在单个硬件通道期间可以处理的层的数量可以基于数据的大小、硬件实现、和层的顺序。例如,在硬件实现包括用于执行每个可能的层类型的硬件的情况下,包括第一卷积层、第一激活层、第二卷积层、第二激活层、和池化层的DNN可以在第一硬件通道中接收初始DNN输入数据并且根据第一卷积层和第一激活层来处理该输入数据并且然后将激活层的输出输出到存储器中,然后在第二个硬件通道中从存储器中接收该数据作为输入并且根据第二卷积层、第二激活层、和池化层来处理该数据以产生DNN的输出数据。
图10的示例硬件实现1000包括:输入模块1001、卷积引擎1002、累积缓冲器1004、按元素操作模块1006、激活模块1008、归一化模块1010、池化模块1012、输出交织模块1014、和输出模块1015。每个模块或引擎实现或处理一种或多种类型的层中的全部或一部分。具体地,卷积引擎1002和累积缓冲器1004一起实现或处理卷积层或全连接层。激活模块1008处理或实现激活层。归一化模块1010处理或实现归一化层。池化模块1012实现池化层,并且输出交织模块1014处理或实现交织层。
输入模块1001,被配置为接收针对当前硬件通道的输入数据,并且将该输入数据提供给下游模块以用于处理。接收输入数据的下游模块取决于当前硬件通道中要处理的层。
卷积引擎1002被配置为使用与特定卷积层相关联的权重对接收到的输入数据执行卷积运算。DNN的每个卷积层的权重可以存储在系数缓冲器1016中(如图10所示),并且在卷积引擎1002正在处理特定卷积层时,可以将该特定卷积层的权重提供给卷积引擎1002。在硬件实现支持可变权重格式的情况下,卷积引擎1002可以被配置为接收指示正在被处理的当前卷积层的权重的一个或多个格式的信息,以允许卷积引擎正确地解释和处理接收到的权重。每个卷积层的权重格式可以通过本文描述的方法300、500和900来确定。
卷积引擎1002可以包括多个乘法器(例如,128个)和多个加法器(该多个加法器将乘法器的结果相加以产生单个总和)。虽然图10中示出了单个卷积引擎1002,但是在其他示例中,可以存在多个(例如,8个)卷积引擎,从而可以同时处理多个窗口。卷积引擎1002的输出被馈送到累积缓冲器1004。
累积缓冲器1004被配置为接收卷积引擎的输出,并且将卷积引擎的输出添加到累积缓冲器1004的当前内容。以这种方式,累积缓冲器1004累积卷积引擎1002的结果。虽然图10中示出了单个累积缓冲器1004,但是在其他示例中,可以存在多个(例如,8个,每个卷积引擎有一个累积缓冲器)累积缓冲器。累积缓冲器1004将累积结果输出到按元素操作模块1006,按元素操作模块1006可以基于在当前硬件通道期间是否要处理按元素层来对累积结果进行操作或不进行操作。
按元素操作模块1006被配置为接收针对当前硬件通道的输入数据(例如,当在当前硬件通道中未处理卷积层时)或来自累积缓冲器1004的累积结果(例如,当在当前硬件通道中处理卷积层时)。按元素操作模块1006可以处理接收到的输入数据,或将接收到的输入数据传递到另一模块(例如,激活模块1008和/或归一化模块1010),这取决于在当前硬件通道中是否处理按元素层,和/或取决于是否要在按元素层之前处理激活层。当按元素操作模块1006被配置为处理接收到的输入数据时,按元素操作模块1006对接收到的数据执行按元素操作(可选地与另一数据集一起(可以从外部存储器获得该另一数据集))。按元素操作模块1006可以被配置为执行任意适当的元素操作,例如但不限于,相加、相乘、取最大值、和取最小值。然后,根据是否要在按元素层之后处理激活层,将按元素操作的结果提供给激活模块1008或归一化模块1010。
激活模块1008被配置为接收以下各项中的一项作为输入数据:进入硬件通道的原始输入(通过按元素操作模块1006)(例如,当在当前硬件通道中未处理卷积层时);累积数据(通过按元素操作模块1006)(例如,当在当前硬件通道中处理卷积层并且在当前硬件通道中未处理按元素层或在当前硬件通道中处理按元素层但跟随有激活层时)。激活模块1008被配置为将激活函数应用于输入数据并且将输出数据提供回按元素操作模块1006(其中,该输出数据被直接转发到归一化模块1010,或在按元素操作模块1006对其进行处理之后被转发到归一化模块1010)。在一些情况下,应用于由激活模块1008接收的数据的激活函数可以根据激活层而变化。在这些情况下,可以(例如,在存储器中)存储指定要应用于每个激活层的激活函数的一个或多个属性的信息,并且可以在特定硬件通道期间将针对在该硬件通道中处理的激活层的相关信息提供给激活模块1008。
在一些情况下,激活模块1008可以被配置为在查找表的条目中存储表示激活函数的数据。在这些情况下,输入数据可被用来查找查找表中的一个或多个条目,并且输出表示激活函数的输出的值。例如,激活模块1008可以被配置为通过在从查找表读取的两个或多个条目之间进行插值来计算输出值。
在一些示例中,激活模块1008可以被配置为通过实现修正线性单元(ReLU)函数来作为ReLU操作。在ReLU函数中,通过标识最大值来计算输出元素yi,j,k,如等式(4)所示,其中,针对小于0的x值,y=0:
yi,j,k=f(xi,j,k)=max{0,xi,j,k} (4)
在其他示例中,激活模块1008可以被配置为通过实现参数修正线性单元(PReLU)函数来作为PReLU操作。PReLU函数执行与ReLU函数类似的操作。具体地,在是常数的情况下,PReLU被配置为生成输出元素yi,j,k,如等式(5)所示:
yi,j,k=f(xi,j,k;w1,w2,b1,b2)=max{(w1*xi,j,k+b1),(w2*xi,j,k+b2)} (5)
归一化模块1010被配置为接收以下各项中的一项作为输入数据:针对硬件通道的原始输入数据(通过按元素操作模块1006)(例如,当在当前硬件通道中未处理卷积层并且在当前硬件通道中既不处理按元素层也不处理激活层时);累积输出(通过按元素操作模块1006)(例如,当在当前硬件通道中处理卷积层并且在当前硬件通道中既不处理按元素层也不处理激活层时);以及按元素操作模块和/或激活模块的输出数据。然后,归一化模块1010对接收到的输入数据执行归一化函数以产生归一化数据。在一些情况下,归一化模块1010可以被配置为执行局部响应归一化(LRN)函数和/或局部对比归一化(LCN)函数。然而,对于本领域技术人员显而易见的是,这些仅是示例,并且归一化模块1010可以被配置为实现任意适当的归一化函数。不同的归一化层可以被配置为应用不同的归一化函数。
池化模块1012可以从归一化模块1010接收归一化数据,或可以经由归一化模块1010接收进入归一化模块1010的输入数据。在一些情况下,可以通过XBar 1018在归一化模块1010和池化模块1012之间传输数据。本文使用的术语“XBar”指的是包括以动态方式将多个模块连接在一起的路由逻辑的简单硬件模块。在该示例中,XBar可以基于将在当前硬件通道中处理哪些层来动态地连接归一化模块1010、池化模块1012、和/或输出交织模块1014。因此,XBar可以接收针对每个硬件通道的指示哪些模块1010、1012、1014将被连接的信息。
池化模块1012被配置为对接收到的数据执行池化函数(例如但不限于,取最大值函数或平均函数)以产生池化数据。池化层的目的是减小表示的空间大小以减少网络中的参数和计算的数量,并且因此还控制过度拟合。在一些示例中,池化操作在每个池化层定义的滑动窗口上执行。
输出交织模块1014可以接收来自归一化模块1010的归一化数据、进入归一化函数的输入数据(通过归一化模块1010)、或来自池化模块1012的池化数据。在一些情况下,可以通过XBar 1018在归一化模块1010、池化模块1012、和输出交织模块1014之间传输数据。输出交织模块1014被配置为执行重新排列操作以产生预定顺序的数据。这可以包括对接收到的数据进行排序和/或转置。由最后一层产生的数据被提供给输出模块1015,其中,该数据被转换成针对当前硬件通道的期望输出格式。可以根据本文描述的方法300、500和900来确定期望输出格式(例如,作为用于表示硬件通道的最后一层的输出数据值的定点数格式、或用于表示下一硬件通道的第一层的输入数据值的定点数格式)。
归一化模块1010、池化模块1012和输出交织模块1014各自可以访问共享缓冲器1020,共享缓冲器1020可以由这些模块1010、1012和1014使用以写入数据和从中取回数据。例如,共享缓冲器1020可以由这些模块1010、1012、1014使用以重新排列接收到的数据或生成的数据的顺序。例如,这些模块1010、1012、1014中的一个或多个可以被配置为将数据写入共享缓冲器1020并且以不同的顺序读出相同的数据。在一些情况下,虽然归一化模块1010、池化模块1012和输出交织模块1014中的每一个都可以访问共享缓冲器1020,但是归一化模块1010、池化模块1012和输出交织模块1014中的每一个可以被分配有仅它们才能访问的共享缓冲器1020的一部分。在这些情况下,归一化模块1010、池化模块1012和输出交织模块1014中的每一个可能仅能够从共享缓冲器1020中读取它们已经写入共享缓冲器1020的数据。
如上所述,在任意硬件通道期间使用或激活的硬件实现1000的模块基于在该硬件通道期间处理的层。具体地,仅使用或激活与在当前硬件通道期间处理的层相关的模块或组件。如上所述,基于DNN中的层的顺序以及可选地一个或多个其他因素(例如,数据的大小)来确定在特定硬件通道期间处理的层(通常预先通过例如软件工具来确定)。例如,在一些情况下,硬件实现可以被配置为根据每个硬件通道来执行单个层的处理,除非可以处理多个层而不需要在层之间向存储器写入数据。例如,如果第一卷积层紧接跟随有第二卷积层,则每个卷积层将必须在单独的硬件通道中执行,因为来自第一卷积层的输出数据在其能够被用作进入第二卷积层的输入之前需要被写入存储器。在这些硬件通道中的每个硬件通道中,可以仅使用或激活与卷积层相关的模块、组件或引擎,例如卷积引擎1002和累积缓冲器1004。
虽然图10的硬件实现1000示出了其中模块、引擎等被布置的特定顺序以及因此数据的处理如何流过硬件实现,但是应当理解,这仅是示例,并且在其他示例中,模块、引擎等可以以不同的方式被布置。此外,其他硬件实现可以实现附加或替代类型的DNN层,并且因此可以包括不同的模块、引擎等。
图11示出了示例性通用的基于计算的设备1100的各种组件,该基于计算的设备1100可以被实现为任意形式的计算和/或电子设备,并且在其中可以实现上述方法300、500、900的实施例。
基于计算的设备1100包括一个或多个处理器1102,该一个或多个处理器1102可以是微处理器、控制器或任意其他适当类型的处理器,用于处理计算机可执行指令以控制设备的操作,以便选择针对输入至和输出自DNN的多个层的多组值的定点数格式。在一些示例中,例如在使用片上***架构的情况下,处理器1102可以包括一个或多个固定功能块(也称为加速器),该一个或多个固定功能块用硬件(而不是软件或固件)实现选择针对输入至和输出自DNN的多个层的多组值的定点数格式的方法的一部分。可以在基于计算的设备处提供包括操作***1104的平台软件或任意其他适当的平台软件,以启用应用软件,例如,在设备上执行以用于实现图3的方法300的计算机可执行代码1105。
可以使用可由基于计算的设备1100访问的任意计算机可读介质来提供计算机可执行指令。计算机可读介质可以包括例如计算机存储介质(例如,存储器1106)和通信介质。计算机存储介质(即,非暂态机器可读介质),例如,存储器1106,包括以用于存储诸如计算机可读指令、数据结构、程序模块、或其他数据之类的信息的任意方法或技术实现的易失性和非易失性、可移动和不可移动介质。计算机存储介质包括但不限于RAM、ROM、EPROM、EEPROM、闪存或其他存储技术、CD-ROM、数字通用盘(DVD)或其他光学存储装置、磁带盒、磁带、磁盘存储器或其他磁存储设备、或能够用于存储信息以供计算设备访问的任意其他非传输介质。相反,通信介质可以用调制数据信号(例如,载波)或其他传输机制来体现计算机可读指令、数据结构、程序模块或其他数据。如本文所定义的,计算机存储介质不包括通信介质。虽然在基于计算的设备1100内示出了计算机存储介质(即,非暂态机器可读介质,例如,存储器1106),但是应当理解,存储装置可以被远程分布或定位,并且可以经由网络或其他通信链路被访问(例如,使用通信接口1108)。
基于计算的设备1100还包括输入/输出控制器1110,该输入/输出控制器1110被布置为将显示信息输出到显示设备1112,该显示设备1112可以与基于计算的设备1100分离或集成在一起。显示信息可以提供图形用户接口。输入/输出控制器1110还被布置为接收和处理来自一个或多个设备(例如,用户输入设备1114(例如,鼠标或键盘))的输入。在一个实施例中,如果显示设备1112是触敏显示设备,则显示设备1112还可以用作用户输入设备1114。输入/输出控制器1110还可以将数据输出到除显示设备之外的设备,例如,本地连接的打印设备(图11中未示出)。
图12示出了其中可以实现本文描述的DNN的硬件实现的计算机***。计算机***包括CPU 1202、GPU 1204、存储器1206和其他设备1214,例如,显示器1216、扬声器1218和相机1220。DNN的硬件实现1210(对应于DNN的硬件实现1000)可以在GPU 1204上实现,如图12所示。在一些示例中,可能没有GPU,并且CPU可以向DNN的硬件实现1210提供控制信息。计算机***的组件可以经由通信总线1222彼此进行通信。在其他示例中,DNN的硬件实现1210可以独立于CPU或GPU实现,并且可以具有到通信总线1222的单独连接。
图10的DNN的硬件实现1000被示出为包括多个功能块。这仅是示意性的,并且不旨在定义这类实体的不同逻辑元素之间的严格划分。可以以任意适当的方式提供每个功能块。应当理解,本文描述的由DNN的硬件实现形成的中间值不需要由DNN的硬件实现或任意点处的处理模块物理地生成,并且可以仅表示方便地描述由DNN硬件实现执行处理的在该处理的输入和输出之间的逻辑值。
本文描述的DNN的硬件实现可以在集成电路上的硬件中实现。通常,上述任意功能、方法、技术或组件可以用软件、固件、硬件(例如,固定逻辑电路)或其任意组合来实现。本文可以使用术语“模块”、“功能”、“组件”、“元件”、“单元”、“块”和“逻辑”来概括地表示软件、固件、硬件或其任意组合。在软件实现的情况下,模块、功能、组件、元件、单元、块或逻辑表示在处理器上执行时执行指定任务的程序代码。本文描述的算法和方法可以由一个或多个处理器执行,该一个或多个处理器执行使得(一个或多个)处理器执行算法/方法的代码。计算机可读存储介质的示例包括随机存取存储器(RAM)、只读存储器(ROM)、光盘、闪存、硬盘存储器、以及可以使用磁性、光学和其他技术来存储指令或其他数据并且可以由机器访问的其他存储器设备。
本文使用的术语计算机程序代码和计算机可读指令是指用于处理器的任意类型的可执行代码,包括以机器语言、解释语言或脚本语言表示的代码。可执行代码包括二进制代码、机器代码、字节代码、定义集成电路的代码(例如,硬件描述语言或网表)、以及用诸如C、Java或OpenCL之类的编程语言代码表示的代码。可执行代码可以是例如任意类型的软件、固件、脚本、模块或库,当在虚拟机处或其他软件环境中适当地执行、处理、解释、编译、运行时,使得计算机***的处理器在支持可执行代码来执行代码指定的任务。
处理器、计算机或计算机***可以是具有处理能力以便能够执行指令的任意类型的设备、机器或专用电路、或其集合或部分。处理器可以是任意类型的通用或专用处理器,例如,CPU、GPU、片上***、状态机、媒体处理器、专用集成电路(ASIC)、可编程逻辑阵列、现场可编程门阵列(FPGA)等。计算机或计算机***可以包括一个或多个处理器。
还旨在涵盖定义如本文描述的硬件的配置的软件,例如HDL(硬件描述语言)软件,例如,用于设计集成电路或用于配置可编程芯片以执行所需功能。也就是说,可以提供一种计算机可读存储介质,在其上编码有集成电路定义数据集形式的计算机可读程序代码,当在集成电路制造***中处理(即,运行)时,配置***以制造本文描述的DNN的硬件实现。集成电路定义数据集可以是例如集成电路描述。
因此,可以提供一种在集成电路制造***处制造如本文描述的DNN的硬件实现的方法。此外,可以提供集成电路定义数据集,当在集成电路制造***中处理时,使得执行制造DNN的硬件实现的方法。
集成电路定义数据集可以是计算机代码的形式,例如,网表、用于配置可编程芯片的代码、(定义适用于在任意级别的集成电路中制造的硬件的)硬件描述语言,包括寄存器传输级(RTL)代码、高级电路表示(例如,Verilog、或VHDL)、以及低级电路表示(例如,OASIS(RTM)、和GDSII)。在逻辑上定义适用于在集成电路中制造的硬件的更高级表示(例如RTL),可以在(被配置用于在(包括电路元件的定义和用于组合这些元件的规则的)软件环境的上下文中生成集成电路的制造定义的)计算机***处被执行,以便生成由该表示定义的集成电路的制造定义。类似于通常在计算机***处执行软件以定义机器的情况,可能需要一个或多个中间用户步骤(例如,提供命令、变量等),以使得(被配置用于生成集成电路的制造定义的)计算机***执行定义集成电路的代码,从而生成该集成电路的制造定义。
现在将参考图13描述在集成电路制造***处对集成电路定义数据集进行处理以便配置***来制造DNN的硬件实现的示例。
图13示出了(被配置为制造本文的任意示例中描述的DNN的硬件实现的)集成电路(IC)制造***1302的示例。具体地,IC制造***1302包括布局处理***1304、和集成电路生成***1306。IC制造***1302被配置为接收IC定义数据集(例如,定义本文的任意示例中描述的DNN的硬件实现),处理IC定义数据集,并且根据IC定义数据集来生成IC(例如,该IC体现本文的任意示例中描述的DNN的硬件实现)。对IC定义数据集的处理将IC制造***1302配置为制造体现本文的任意示例中描述的DNN的硬件实现的集成电路。
布局处理***1304被配置为接收并且处理IC定义数据集以确定电路布局。从IC定义数据集确定电路布局的方法在本领域中是已知的,并且例如可以包括合成RTL代码以确定要生成的电路的门级表示(gate level representation),例如,在逻辑组件(例如,NAND、NOR、AND、OR、MUX、和FLIP-FLOP组件)方面。通过确定逻辑组件的位置信息,可以从电路的门级表示确定电路布局。这可以自动完成,或为了优化电路布局在用户参与下完成。在布局处理***1304已经确定了电路布局时,其可以向IC生成***1306输出电路布局定义。电路布局定义可以是例如电路布局描述。
如现有技术中已知的,IC生成***1306根据电路布局定义生成IC。例如,IC生成***1306可以实现半导体器件制造工艺以生成IC,这可以包括(在此期间电子电路逐渐形成在由半导体材料制成的晶片上的)光刻和化学处理步骤的多步骤序列。电路布局定义可以是掩模(mask)的形式,其可以在用于根据电路定义生成IC的光刻工艺中被使用。替代地,提供给IC生成***1306的电路布局定义可以是(IC生成***1306可以用来形成用于生成IC中使用的适当掩模的)计算机可读代码的形式。
由IC制造***1302执行的不同过程可以(例如,由一方)全部在一个位置实现。替代地,IC制造***1302可以是分布式***,使得一些过程可以在不同位置执行,并且可以由不同方执行。例如,(i)合成表示IC定义数据集的RTL代码以形成要生成的电路的门级表示,(ii)基于门级表示生成电路布局,(iii)根据电路布局形成掩模,以及(iv)使用掩模制造集成电路中的一些阶段可以在不同位置和/或由不同方执行。
在其他示例中,在集成电路制造***处对集成电路定义数据集进行处理可以将***配置为(在不处理IC定义数据集以便确定电路布局的情况下)制造DNN的硬件实现。例如,集成电路定义数据集可以定义可重新配置处理器(例如,FPGA)的配置,并且对该数据集的处理可以将IC制造***配置为生成具有该定义的配置的可重新配置的处理器(例如,通过将配置数据加载到FPGA)。
在一些实施例中,集成电路制造定义数据集在集成电路制造***中被处理时,可以使得集成电路制造***生成如本文描述的设备。例如,以上面参考图13描述的方式使用集成电路制造定义数据集来配置集成电路制造***,可以使得本文描述的设备被制造。
在一些示例中,集成电路定义数据集可以包括在数据集定义的硬件上运行的软件、或结合数据集定义的硬件一起运行的软件。在图13示出的示例中,IC生成***可以由集成电路定义数据集进一步配置为,在制造集成电路时,根据在集成电路定义数据集处定义的程序代码将固件加载到该集成电路上,或以其他方式向集成电路提供与集成电路一起使用的程序代码。
与已知实现方式相比,本申请中阐述的概念在设备、装置、模块、和/或***(以及本文实施的方法中)中的实现方式可以产生性能改进。性能改进可以包括增加的计算性能、减少的延迟、增加的吞吐量、和/或减少的功耗中的一个或多个。在制造这类设备、装置、模块、和***(例如,在集成电路中)期间,性能改进可以与物理实现方式进行权衡,由此改进制造方法。例如,性能改进可以针对布局面积进行权衡,从而与已知实现方式的性能匹配,但使用更少的硅。这可以例如通过以串行化方式重用功能块,或在设备、装置、模块、和/或***的元件之间共享功能块来完成。相反,产生对设备、装置、模块、和***的物理实现方式的改进(例如,减小的硅面积)的本申请中提出的概念可以针对性能改进进行权衡。这可以例如通过在预定义面积预算内制造模块的多个实例来完成。
本申请人在此独立地公开了本文描述的每个单独特征以及两个或更多个这类特征的任意组合,包括根据本领域技术人员的一般常识能够基于本说明书作为整体被执行的这类特征或组合,无论这类特征或特征的组合是否解决了本文公开的任何问题。鉴于前面的描述,对于本领域技术人员而言显而易见的是,可以在本发明的范围内进行各种修改。
Claims (20)
1.一种标识用于表示输入至和/或输出自深度神经网络“DNN”的多个层的值的定点数格式以用于配置所述DNN的硬件实现的计算机实现的方法(300),所述方法包括:
确定所述多个层的序列,其中,所述多个层中的每个层之前是所述多个层中该层所依赖的任意层(302);
接收被配置为使用浮点数格式来表示输入至和/或输出自所述DNN的所述多个层的值的所述DNN的实例(304);
针对确定的序列中的每个层(306,312,314):
选择用于表示输入至或输出自该层的一组或多组值中的每组值的定点数格式,其中,用于表示输入至或输出自一个层的一组值的定点数格式被选择以使得最小化所述DNN的实例的输出误差(308);以及
重新配置所述DNN的实例以使用针对所述一组或多组值中的每组值的选择的定点数格式来表示该组值(310)。
2.根据权利要求1所述的方法(300),其中,选择用于表示输入至或输出自一个层的一组值的定点数格式包括:
针对多个可能的定点数格式中的每个定点数格式(502,510,512):
临时配置所述DNN的实例以使用所述定点数格式来表示针对该层的该组值(504);
响应于测试输入数据而确定临时配置的所述DNN的实例的输出(506);并且
确定临时配置的所述DNN的实例的输出误差(508);以及
基于与所述多个可能的定点数格式中的每个定点数格式相关联的输出误差来选择定点数格式以表示输入至或输出自该层的该组值。
3.根据权利要求2所述的方法(300),其中,与最低输出误差相关联的定点数格式被选择作为用于表示该组值的定点数格式。
4.根据权利要求2所述的方法(300),其中,每个可能的定点数格式包括指数和尾数位长度,并且所述多个可能的定点数格式中的每个可能的定点数格式包括相同的尾数位长度和不同的指数。
5.根据前述权利要求中任一项所述的方法(300),其中,选择用于表示输入至或输出自该层的一组或多组值中的每组值的定点数格式包括:
选择最小化所述DNN的实例中的输出误差的用于表示针对该层的输入数据值的至少一部分的定点数格式(904);
重新配置所述DNN的实例以用选择的定点数格式来表示针对该层的输入数据值的至少一部分(906);以及
在所述重新配置之后,选择最小化所述DNN的实例中的输出误差的用于表示针对该层的输出数据值的至少一部分的定点数格式(922)。
6.根据权利要求5所述的方法(300),其中,选择用于表示输入至或输出自该层的一组或多组值中的每组值的定点数格式还包括:
选择最小化所述DNN的实例中的输出误差的用于表示针对该层的权重的至少一部分的定点数格式(910);以及
在选择用于表示针对该层的输出数据值的至少一部分的定点数格式之前,重新配置所述DNN的实例以用选择的定点数格式来表示针对该层的权重的至少一部分(912)。
7.根据权利要求1至4中任一项所述的方法(300),其中,所述DNN是分类网络,并且所述输出误差是响应于测试输入数据的所述DNN的实例的输出的前1名的分类准确度。
8.根据权利要求1至4中任一项所述的方法(300),其中,所述DNN是分类网络,并且所述输出误差是响应于测试输入数据的所述DNN的实例的输出的前5名的分类准确度。
9.根据权利要求1至4中任一项所述的方法(300),其中,所述DNN是分类网络,并且所述输出误差是响应于测试输入数据的所述DNN的实例的输出的分对数与基线输出的分对数之间的L1差异的总和。
10.根据权利要求1至4中任一项所述的方法(300),其中,所述DNN是分类网络,并且所述输出误差是所述DNN的实例的输出的柔性最大归一化的分对数与基线输出的柔性最大归一化的分对数之间的L1差异的总和。
11.根据权利要求10所述的方法(300),还包括通过将输入测试数据应用于被配置为使用浮点数格式来表示输入至和/或输出自所述多个层的值的所述DNN的实例,来生成所述基线输出。
12.根据权利要求1至4中任一项所述的方法(300),其中,每个定点数格式包括指数和尾数位长度。
13.根据权利要求1至4中任一项所述的方法(300),还包括:输出针对所述多个层的选择的定点数格式以用于配置所述DNN的硬件实现(316)。
14.根据权利要求1至4中任一项所述的方法(300),还包括:配置所述DNN的硬件实现以使用针对输入至或输出自所述多个层中的至少一个层的一组值的选择的定点数格式来表示该组值。
15.一种在其上存储有计算机可读指令的计算机可读存储介质,该计算机可读指令在计算机***上执行时,使得所述计算机***执行权利要求1至4中任一项所述的方法(300)。
16.一种用于标识用于表示输入至和/或输出自深度神经网络“DNN”的多个层的值的定点数格式以用于配置所述DNN的硬件实现的基于计算的设备(1100),所述基于计算的设备(1100)包括:
至少一个处理器(1102);以及
存储器(1106),被耦合到所述至少一个处理器(1102),所述存储器(1106)包括:
所述DNN的实例,被配置为使用浮点数格式来表示输入至和/或输出自所述DNN的所述多个层的值;
计算机可读代码(1105),在由所述至少一个处理器(1102)执行时,使得所述至少一个处理器(1102)执行以下操作:
确定所述多个层的序列,其中,所述多个层中的每个层之前是所述多个层中该层所依赖的任意层;
针对确定的序列中的每个层:
选择用于表示输入至或输出自该层的一组或多组值中的每组值的定点数格式,其中,用于表示输入至或输出自一个层的一组值的定点数格式被选择以使得最小化所述DNN的实例的输出误差;以及
重新配置所述DNN的实例以使用针对所述一组或多组值中的每组值的选择的定点数格式来表示该组值。
17.一种深度神经网络“DNN”的硬件实现,包括:
硬件逻辑,被配置为:
接收所述DNN的一个层的输入数据值、一组权重或一组偏置;
接收指示针对该层的所述输入数据值、所述一组权重或所述一组偏置的定点数格式的信息,针对该层的所述输入数据值、所述一组权重或所述一组偏置的定点数格式已经根据权利要求1至4中任一项的方法被选择;
基于针对该层的所述输入数据值、所述一组权重或所述一组偏置的定点数格式来解释所述输入数据值、所述一组权重或所述一组偏置;以及
根据该层来处理经解释的输入数据值、一组权重或一组偏置以生成针对该层的输出数据值。
18.根据权利要求17所述的DNN的硬件实现,其中,所述硬件逻辑还被配置为:
接收指示针对该层的输出数据值的定点数格式的信息,针对该层的输出数据值的定点数格式已经根据权利要求1的方法被选择;以及
将针对该层的输出数据值转换为针对该层的输出数据值的定点数格式。
19.根据权利要求17所述的DNN的硬件实现,其中,所述硬件逻辑被配置为接收针对该层的输入数据值和指示针对该层的输入数据值的定点数格式的信息,并且所述硬件逻辑还被配置为:
接收针对所述DNN的另一层的输入数据值;
接收指示针对所述另一层的输入数据值的定点数格式的信息,针对所述另一层的输入数据值的定点数格式不同于针对该层的输入数据值的定点数格式;
基于针对所述另一层的输入数据值的定点数格式来解释针对所述另一层的输入数据值;以及
根据所述另一层来处理所述另一层的经解释的输入数据值以生成针对所述另一层的输出数据值。
20.一种在其上存储有权利要求17的硬件实现的计算机可读描述的计算机可读存储介质,该计算机可读描述在集成电路制造***中处理时,使得所述集成电路制造***制造体现所述硬件实现的集成电路。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
GB1718289.0A GB2568081B (en) | 2017-11-03 | 2017-11-03 | End-to-end data format selection for hardware implementation of deep neural network |
GB1718289.0 | 2017-11-03 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110033079A true CN110033079A (zh) | 2019-07-19 |
CN110033079B CN110033079B (zh) | 2024-05-21 |
Family
ID=60664721
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811299435.5A Active CN110033079B (zh) | 2017-11-03 | 2018-11-02 | 深度神经网络的硬件实现的端到端数据格式选择 |
Country Status (4)
Country | Link |
---|---|
US (1) | US12020145B2 (zh) |
EP (1) | EP3480743A1 (zh) |
CN (1) | CN110033079B (zh) |
GB (1) | GB2568081B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109711538A (zh) * | 2018-12-14 | 2019-05-03 | 北京中科寒武纪科技有限公司 | 运算方法、装置及相关产品 |
CN110866590A (zh) * | 2019-10-22 | 2020-03-06 | Oppo广东移动通信有限公司 | 数据处理方法及装置、电子设备、存储介质 |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB2568084B (en) | 2017-11-03 | 2022-01-12 | Imagination Tech Ltd | Error allocation format selection for hardware implementation of deep neural network |
US11768911B2 (en) * | 2019-09-24 | 2023-09-26 | Alibaba Group Holding Limited | Method and apparatus for execution of neural network |
GB2596607B (en) | 2020-07-03 | 2024-01-03 | Imagination Tech Ltd | Methods and systems for running dynamic recurrent neural networks in hardware |
GB2596606A (en) | 2020-07-03 | 2022-01-05 | Imagination Tech Ltd | Number format selection in recurrent neural networks |
CN115698937A (zh) * | 2021-05-25 | 2023-02-03 | 辉达公司 | 用于深度学习任务调度的硬件电路 |
GB2608988B (en) | 2021-06-30 | 2024-07-17 | Imagination Tech Ltd | Running bidirectional recurrent neural networks in hardware |
GB2608596B (en) | 2021-06-30 | 2024-06-19 | Imagination Tech Ltd | Number format selection for bidirectional RNNs |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106485321A (zh) * | 2015-10-08 | 2017-03-08 | 上海兆芯集成电路有限公司 | 具有架构神经网络执行单元的处理器 |
Family Cites Families (21)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP0963657B1 (en) | 1997-02-25 | 2002-11-27 | British Broadcasting Corporation | Digital signal compression encoding with improved quantisation |
EP3192015A1 (en) * | 2014-09-09 | 2017-07-19 | Intel Corporation | Improved fixed point integer implementations for neural networks |
US20170061279A1 (en) * | 2015-01-14 | 2017-03-02 | Intel Corporation | Updating an artificial neural network using flexible fixed point representation |
CN110338844B (zh) * | 2015-02-16 | 2022-04-19 | 深圳迈瑞生物医疗电子股份有限公司 | 三维成像数据的显示处理方法和三维超声成像方法及*** |
WO2016145516A1 (en) * | 2015-03-13 | 2016-09-22 | Deep Genomics Incorporated | System and method for training neural networks |
US10262259B2 (en) * | 2015-05-08 | 2019-04-16 | Qualcomm Incorporated | Bit width selection for fixed point neural networks |
US10373050B2 (en) * | 2015-05-08 | 2019-08-06 | Qualcomm Incorporated | Fixed point neural network based on floating point neural network quantization |
KR101644039B1 (ko) | 2015-06-11 | 2016-07-29 | 에스케이텔레콤 주식회사 | 고정소수점 연산 방법 및 고정소수점 연산 장치 |
US11072067B2 (en) * | 2015-11-16 | 2021-07-27 | Kindred Systems Inc. | Systems, devices, and methods for distributed artificial neural network computation |
US10621486B2 (en) * | 2016-08-12 | 2020-04-14 | Beijing Deephi Intelligent Technology Co., Ltd. | Method for optimizing an artificial neural network (ANN) |
US10643124B2 (en) * | 2016-08-12 | 2020-05-05 | Beijing Deephi Intelligent Technology Co., Ltd. | Method and device for quantizing complex artificial neural network |
US10802992B2 (en) * | 2016-08-12 | 2020-10-13 | Xilinx Technology Beijing Limited | Combining CPU and special accelerator for implementing an artificial neural network |
US20180107451A1 (en) * | 2016-10-14 | 2018-04-19 | International Business Machines Corporation | Automatic scaling for fixed point implementation of deep neural networks |
US11205120B2 (en) * | 2016-12-22 | 2021-12-21 | Samsung Electronics Co., Ltd | System and method for training deep learning classification networks |
US10402527B2 (en) * | 2017-01-04 | 2019-09-03 | Stmicroelectronics S.R.L. | Reconfigurable interconnect |
CN107688849B (zh) * | 2017-07-28 | 2021-04-13 | 赛灵思电子科技(北京)有限公司 | 一种动态策略定点化训练方法及装置 |
GB2566702B (en) | 2017-09-20 | 2021-11-03 | Imagination Tech Ltd | Hardware implementation of a deep neural network with variable output data format |
GB2580171B (en) | 2018-12-21 | 2021-02-17 | Imagination Tech Ltd | Methods and systems for selecting quantisation parameters for deep neural networks using back-propagation |
US20200210840A1 (en) | 2018-12-31 | 2020-07-02 | Microsoft Technology Licensing, Llc | Adjusting precision and topology parameters for neural network training based on a performance metric |
US20200302283A1 (en) | 2019-03-18 | 2020-09-24 | Microsoft Technology Licensing, Llc | Mixed precision training of an artificial neural network |
WO2021022903A1 (zh) | 2019-08-07 | 2021-02-11 | 安徽寒武纪信息科技有限公司 | 数据处理方法、装置、计算机设备和存储介质 |
-
2017
- 2017-11-03 GB GB1718289.0A patent/GB2568081B/en active Active
-
2018
- 2018-11-02 CN CN201811299435.5A patent/CN110033079B/zh active Active
- 2018-11-02 EP EP18204176.4A patent/EP3480743A1/en active Pending
- 2018-11-05 US US16/181,147 patent/US12020145B2/en active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106485321A (zh) * | 2015-10-08 | 2017-03-08 | 上海兆芯集成电路有限公司 | 具有架构神经网络执行单元的处理器 |
Non-Patent Citations (1)
Title |
---|
JIANTAO QIU 等: "Going Deeper with Embedded FPGA Platform for Convolutional Neural Network", 《PROCEEDINGS OF THE 2016 ACM/SIGDA INTERNATIONAL SYMPOSIUM ON FIELD-PROGRAMMABLE GATE ARRAYS》, pages 1 - 5 * |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109711538A (zh) * | 2018-12-14 | 2019-05-03 | 北京中科寒武纪科技有限公司 | 运算方法、装置及相关产品 |
CN110866590A (zh) * | 2019-10-22 | 2020-03-06 | Oppo广东移动通信有限公司 | 数据处理方法及装置、电子设备、存储介质 |
WO2021078184A1 (zh) * | 2019-10-22 | 2021-04-29 | Oppo广东移动通信有限公司 | 数据处理方法及装置、电子设备、存储介质 |
Also Published As
Publication number | Publication date |
---|---|
US12020145B2 (en) | 2024-06-25 |
CN110033079B (zh) | 2024-05-21 |
GB2568081A (en) | 2019-05-08 |
GB2568081B (en) | 2022-01-19 |
EP3480743A1 (en) | 2019-05-08 |
GB201718289D0 (en) | 2017-12-20 |
US20190236449A1 (en) | 2019-08-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110033079A (zh) | 深度神经网络的硬件实现的端到端数据格式选择 | |
CN110059810A (zh) | 深度神经网络硬件实现的基于直方图的每层数据格式选择 | |
CN110009099A (zh) | 用于深度神经网络的硬件实现的误差分配格式选择 | |
US11610127B2 (en) | Methods and systems for selecting quantisation parameters for deep neural networks using back-propagation | |
Mirhoseini et al. | Chip placement with deep reinforcement learning | |
Salamat et al. | F5-hd: Fast flexible fpga-based framework for refreshing hyperdimensional computing | |
EP3480745A1 (en) | Hardware implementation of convolution layer of deep neural network | |
CN109635916A (zh) | 具有可变输出数据格式的深度神经网络的硬件实现 | |
CN110007959A (zh) | 用于深度神经网络的硬件实现的层次化尾数位长度选择 | |
CN108701250A (zh) | 数据定点化方法和装置 | |
Kowalski et al. | Interval probabilistic neural network | |
CN110070182B (zh) | 适合人工智能的平台芯片及其制造和设计方法 | |
KR102633003B1 (ko) | 전자 디바이스에 대한 활성화 함수 기능 블록 | |
US20210390381A1 (en) | Hardware architecture for processing data in neural network | |
CN109934226A (zh) | 关键区域确定方法、装置及计算机可读存储介质 | |
US20220391172A1 (en) | Implementation of Softmax and Exponential in Hardware | |
Ullah et al. | Appaxo: Designing app lication-specific a ppro x imate o perators for fpga-based embedded systems | |
CN115600662A (zh) | 在硬件中实施池化和反池化或反向池化 | |
EP3236348A1 (en) | Evaluating polynomials in hardware logic | |
US20210256374A1 (en) | Method and apparatus with neural network and training | |
Lima et al. | Designing combinational circuits using a multi-objective cartesian genetic programming with adaptive population size | |
Dias et al. | A new hardware approach to self-organizing maps | |
EP3985571A1 (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 | |
US20240249140A1 (en) | Simulated annealing based integerization of hidden weights for area-efficient iot edge intelligence |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |