CN112074806B - 用于块浮点计算的系统、方法和计算机存储介质 - Google Patents

用于块浮点计算的系统、方法和计算机存储介质 Download PDF

Info

Publication number
CN112074806B
CN112074806B CN201980030079.3A CN201980030079A CN112074806B CN 112074806 B CN112074806 B CN 112074806B CN 201980030079 A CN201980030079 A CN 201980030079A CN 112074806 B CN112074806 B CN 112074806B
Authority
CN
China
Prior art keywords
floating point
block floating
mantissa
bit width
point number
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.)
Active
Application number
CN201980030079.3A
Other languages
English (en)
Other versions
CN112074806A (zh
Inventor
D·洛
E·S·钟
D·C·伯格
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Microsoft Technology Licensing LLC
Original Assignee
Microsoft Technology Licensing LLC
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Priority claimed from US15/971,904 external-priority patent/US10691413B2/en
Application filed by Microsoft Technology Licensing LLC filed Critical Microsoft Technology Licensing LLC
Publication of CN112074806A publication Critical patent/CN112074806A/zh
Application granted granted Critical
Publication of CN112074806B publication Critical patent/CN112074806B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Abstract

一种用于神经网络中的块浮点计算的系统,该系统接收包括尾数部分的块浮点数。块浮点数的位宽通过将块浮点数分解为多个数而被减小,多个数中的每个数具有其位宽小于块浮点数的尾数部分的位宽的尾数部分。一个或多个点积运算被分离地对多个数中的每个数执行,以获得单独的结果,单独的结果被求和以生成最终的点积值。最终的点积值被用于实现神经网络。减小的位宽计算允许高精度数学运算以提高的准确度在低精度处理器上被执行。

Description

用于块浮点计算的系统、方法和计算机存储介质
背景技术
块浮点数字格式允许独立地将动态范围和精度缩放。通过降低精度,处理器(诸如,硬件加速器)的系统性能可以被提高。然而,降低的精度可能影响系统准确度。例如,块浮点数字格式可以被用于可以在针对任务的许多应用领域(诸如,计算机视觉、机器人、语音识别、医学图像处理、计算机游戏、增强现实、虚拟现实等)中被实现的神经网络。虽然降低的精度可以提高神经网络的不同功能的性能(包括针对对象识别、唇读、语音识别、检测异常交易、文本预测的分类和回归任务以及许多其他的分类和回归任务被执行的速度),但是准确度可能受到不利影响。
发明内容
本发明内容是为了按照简化形式来介绍对构思的选择而被提供的,下面在具体实施方式中进一步描述了这些构思。本发明内容不旨在标识所要求保护的主题的关键特征或者必要特征,也不旨在被用于帮助确定所要求保护的主题的范围。
一种用于在神经网络中的块浮点计算的计算机化的方法包括:接收包括尾数的块浮点向量;以及将块浮点向量中的每个块浮点向量分解为具有减小的位宽(reduced bit-width)尾数的多个块浮点向量。该方法还包括:对具有减小的位宽尾数的多个块浮点向量执行点积运算;以及使用执行点积运算的结果来实现神经网络。
许多伴随的特征将更容易被了解,因为通过参考结合附图所考虑的以下详细描述,这些特征变得更好理解。
附图说明
通过根据附图来阅读以下详细描述,本说明书将被更好地理解,在附图中:
图1是图示了根据实施例的块浮点格式的示例性框图;
图2图示了根据实施例的分解块浮点向量。
图3是图示了根据实施例的数据处理系统的示例性框图;
图4是根据实施例的神经网络系统的示例性示意框图;
图5图示了根据实施例的对减小的位宽数执行的点积计算;
图6是图示了根据各种实施例的用于执行减小的位宽尾数块浮点计算的计算设备的操作的示例性流程图;
图7是图示了根据各种实施例的用于执行减小的位宽尾数块浮点计算的计算设备的操作的另一示例性流程图;以及
图8将根据实施例的计算装置图示为功能框图。
贯穿附图,对应的附图标记指示对应的部分。在附图中,系统被图示为示意图。附图可能未按比例绘制。
具体实施方式
本文所描述的计算设备和方法被配置为使用减小的位宽向量来执行块浮点计算。例如,块浮点向量被分解为多个较小位宽块浮点向量,以对其执行操作。此后,较高位宽块浮点向量通过组合对较小位宽块浮点向量所执行的操作的结果而被构造。块浮点数的这种精确融合通过允许高精度数学运算利用低精度硬件(例如,低精度硬件加速器)被执行而减少了计算负担,同时提高了准确度。
根据本公开的各种示例,神经网络(诸如,深度神经网络(DNN))可以使用较小位宽块浮点向量被更有效地训练和操作,该较小位宽块浮点向量允许在低精度块浮点计算引擎上的高精度算术。例如,在使用块浮点而实现的神经网络中,本公开允许选择性地增加某些层的精度,从而以最小的性能影响来提高整体的网络准确度。应该注意,本文所描述的各种示例可以被应用于针对神经网络中的一些或者所有层的权重和/或激活而执行的计算。即,本公开可以在训练和/或操作神经网络时被实现。
作为执行本文所描述的操作的结果,用于训练和操作神经网络的处理时间和处理资源有所减少,但是系统准确度没有出现传统上预期的对应降低。按照这种方式,当处理器被编程为执行本文所描述的操作时,处理器以非常规的方式被使用,并且允许更有效地训练或者操作神经网络。
参照图1,减小的位宽块浮点向量是较高位宽块浮点向量100的分解版本或者得出版本。即,在较高位宽块浮点向量100中,每个数用符号102、尾数106和共享指数110来表示,其中尾数具有B位。因此,在各种示例中,一组数108共享和指数。
在一个示例中,减小的位宽块浮点向量具有减小的尾数位宽,例如,B/2位。例如,大范围的值可以仅使用几位尾数来表示。例如,对于4位尾数和5位指数,值可以被表示为在范围[2-140.0012,2151.1112]≈[2-17,216]内。相比之下,4位定点数只能表示在从[00012,11112]≈[20,24]起的范围内的值。因此,应该了解,根据本公开,数学运算(诸如,包括矩阵-向量相乘和矩阵-矩阵相乘的点积运算)的计算“成本”通过使用具有减小的尾数宽度的向量而被降低。
例如,如在图2中图示的,被图示为具有尾数分别为4位的尾数部分的块浮点向量200(即,较高位宽块浮点向量)可以被分解为多个块浮点向量202(即,较低位宽块浮点向量),该多个块浮点向量202被图示为具有尾数分别为两位的尾数部分。如应该了解的,在一些示例中,一个块浮点向量202的指数部分(e)被缩放,诸如,基于尾数部分是与尾数值中的高位还是低位相对应。例如,高位部分的指数部分增加了与原始尾数值中的位相对应的总位数(B)除以拆分值的数量。在该示例中,在4位尾数值被分解为2位尾数值的情况下,增量为两位,使得高尾数位的指数为xe+2
更特别地,如果块浮点向量被定义为:
其中*是逐元素乘法,并且每个尾数mi使用B位来表示,则块浮点向量x如下被分解为两个块浮点向量,该两个块浮点向量中的每个块浮点向量按照下式针对尾数使用/>位:
在等式1中,e是指数值,B是原始尾数(未分解的块浮点值)中的位数,是低位置尾数位(与低阶尾数位对应的最低有效位),并且/>是高位置尾数位(与高阶尾数位对应的最高有效位)。
作为特定示例,具有4位尾数的块浮点向量可以如下使用2位尾数被分解为两个块浮点向量:
x=23[11102 10102 01112]=23[102 102 112]+25[112 102 012]。
更一般地,具有B位的块浮点向量可以使用被分解为k个块浮点向量。相反,较高位宽块浮点向量可以由较小位宽块浮点向量构成。因此,应该了解,本公开可以被应用于具有不同位宽的块浮点向量,这些块浮点向量可以被分解为两个或更多个减小的位宽块浮点向量。附加地,如可以看到的,指数值被从23放大到25
在操作中,计算可以使用减小的位宽块浮点向量而被执行,这简化了要被执行的数学计算。即,根据本公开的块浮点向量的分解允许在低精度块浮点计算引擎上实现高精度算术。例如,2B位块浮点向量x和B位块浮点向量y的点积可以如下被分解:
应该注意,为了简单起见,在等式2中,符号被省略,可以针对尾数点积而容易地重新引入这些符号。
因此,用于减小尾数位宽的块浮点向量分解可以在B位块浮点硬件上被实现为两个B位块浮点点积。如本文所描述的,本公开可以利用B位块浮点向量x和2B位块浮点向量y而被实现。本公开还可以例如,利用使用四个B位点积的2B位块浮点向量和2B位块浮点向量y而被实现。应该了解,本文描述的精确融合可以针对点积以及针对由点积组成的运算(诸如,矩阵-向量乘法和矩阵-矩阵乘法)而被实现。本文所描述的分解还可以被概括为将精度提高两倍以上。
本文所描述的分解过程不限于块浮点数字格式,而是可以被应用于其他数字格式。附加地,本公开可以被应用于非神经网络应用,诸如,点积运算被执行的其他应用。
用于生成减小的位宽块浮点向量的分解过程可以在数据处理系统300(例如,图像处理系统)中被实现,该数据处理系统300被部署为如在图3中所图示的云服务。在该示例中,数据处理系统300实现本文所描述的分解过程以允许高级计算利用低级处理引擎被执行。数据处理系统300包括一个或多个计算机302和存储装置304,该存储装置304用于存储例如,神经网络数据(在一些示例中,包括训练数据(例如,多边形数据网格或者数字训练值)和/或经训练的模型数据)。应该了解,其他数据(诸如,神经网络推理数据或者其他非神经网络数据)可以使用本公开而被存储在存储装置304中并且由一个或多个计算机302处理。
在一些示例中,数据处理系统300被连接至一个或多个最终用户计算设备,诸如,台式计算机306、智能电话308、膝上型计算机310和增强现实头戴式计算机312(例如,Microsoft )。例如,数据处理系统300被示出为经由被图示为互联网的计算机网络314而被连接至最终用户计算设备。
数据处理系统300接收输入数据,诸如,来自最终用户计算设备或者服务器的神经网络输入(例如,数字数据、图像数据等)。数据被上传至数据处理系统300以便进行处理,诸如,以便进行利用计算的神经网络推理处理,这些计算如本文所描述的那样使用减小的位宽块浮点向量。应该了解,数据处理系统300中的一些或者全部或者数据处理系统300的功能性可以被实现在最终用户计算设备内。
在该示例中,数据处理系统300实现神经网络316,该神经网络316使用减小的位宽块浮点向量计算引擎来执行根据本公开的计算(或者被可选地训练)。当神经网络316被训练时,大量数据(例如,三维(3D)对象)可以被处理并且被存储在数据库中(诸如,存储装置304中),该数据库可以更快地和/或利用根据本公开的低精度处理引擎(但是提供高精度处理引擎的提高的准确度)被处理。在一些示例中,本文所描述的数据处理系统300的功能性至少部分地由一个或多个硬件逻辑组件执行。例如,而并非限制,所使用的说明性类型的硬件逻辑组件包括:现场可编程门阵列(FPGA)、专用集成电路(ASIC)、专用标准产品(ASSP)、片上系统(SOC)系统、复杂可编程逻辑器件(CPLD)、图形处理单元(GPU)等。
因此,利用本公开,减小的位宽块浮点向量可以被用于点积运算,从而使得高精度数学运算能够利用低精度计算引擎(例如,低精度加速器)被执行。这样,计算准确度可以被提高,同时使通过使用低精度处理引擎而执行的算术运算具有降低的“成本”(例如,计算和/或存储要求)。例如,在神经网络应用中,DNN的大部分计算“成本”在矩阵-向量乘法和矩阵-矩阵乘法中,该矩阵-向量乘法和矩阵-矩阵乘法可以根据本公开使用减小的位宽块浮点向量而被执行。应该注意,在一些示例中,分解过程在FPGA内被执行。
各种示例包括如在图4中所图示的神经网络系统400。在一个示例中,神经网络系统400使用反向传播和/或如本文所描述的其他训练技术。神经网络系统400包括减小的位宽块浮点向量计算处理器402,在一些示例中,该减小的位宽块浮点向量计算处理器402被配置为使用减小的位宽尾数来进行块浮点计算的处理引擎。应该注意,本公开可以被应用于使用块浮点而实现的不同类型的神经网络。在一些示例中,通过有选择地提高神经网络的某些部分的精度,整体的网络准确度可以在最小的性能影响的情况下被提高。应该注意,本文所描述的过程可以被应用于各种不同的神经网络计算,诸如,用于针对神经网络的一些或者所有层的权重更新和/或激活。
减小的位宽块浮点向量计算处理器402可以访问输入数据404,诸如,推理数据或者训练数据。例如,减小的位宽块浮点向量计算处理器402访问DNN模型数据(例如,块浮点数据)作为输入数据404,以用于各种应用领域中的分类和回归任务,诸如,对象识别、唇读、语音识别、检测异常交易、文本预测以及许多其他分类和回归任务。在另一示例中,减小的位宽块浮点向量计算处理器402使用神经网络处理技术来访问用于训练神经网络的训练数据。减小的位宽块浮点向量计算处理器402使用减小尾数位宽处理来减少用于执行推理、训练或者其他操作的处理要求,同时保持或者提高系统准确度。因此,高精度数学运算可以在低精度处理器上被执行,以允许提高的整体系统准确度(例如,允许更多的迭代计算在更少的时间量内被执行)。
在图示的示例中,输入数据404包括多个块浮点向量,该多个块浮点向量中的每个块浮点向量包括尾数部分和指数部分。减小的位宽块浮点向量计算处理器402首先利用位宽缩减器(reducer)组件406(该位宽缩减器组件406可以被配置为减小的位宽块浮点向量计算处理器402的子模块)来处理输入数据404,该位宽缩减器组件406被配置为减小多个块浮点向量的尾数部分的位宽。在一些示例中,位宽减小包括:将尾数部分的位宽减小一半。然而,预期尾数部分位宽的其他分数减小。
在一个示例中,位宽缩减器组件406通过将多个块浮点向量中的每个块浮点向量分解为多个向量来减小多个块浮点向量的位宽,该多个向量中的每个向量具有其位宽小于输入数据404的原始的多个块浮点向量的尾数部分的位宽的尾数部分。例如,减小的位宽尾数部分可以根据上面所描述的等式1或者等式2而生成。因此,在一些示例中,多个块浮点减小的位宽向量针对输入数据404的每个原始的块浮点向量而生成。
被图示为指数缩放器(scaler)408的缩放器被配置为然后将减小的位宽块浮点向量缩放,在一些示例中,这包括:将减小的位宽块浮点向量中的一个或多个的指数部分缩放,诸如,基于减小的位宽向量内的尾数部分。例如,如本文所描述的,具有拆分的尾数部分的高阶位的减小的位宽向量具有缩放因子,该缩放因子被添加到该减小的位宽向量的指数值,诸如,根据上面所描述的等式1或等式2。
然后,点积计算组件410分离地对具有减小的尾数部分的块浮点向量中的每一个执行点积运算。即,针对每组减小的尾数部分的减小的位宽块浮点向量被处理。例如,包括一个或多个点积运算的矩阵-向量计算被分离地对减小的位宽尾数部分执行以获得单独的结果。从而对于减小的位宽尾数块浮点向量中的每一个,获得单独的结果。
因此,在各种示例中,点积运算针对减小的位宽向量中的每一个产生单独的结果,这些单独的结果然后由累加器412(例如,求和组件或者累加组件)求和,以生成最终的点积值作为输出414。在一些示例中,输出414然后被用于实现神经网络。
例如,点积计算组件410和累加器412被配置为执行如在图5中所图示的减小的尾数位宽计算500。在图示的示例中,两个N位块浮点向量502各自被分解以生成两个N/2位块浮点向量504。点积运算被执行,包括:首先执行乘法函数506,该乘法函数506然后与累加函数508组合以生成点积输出510,该点积输出510与(N位块浮点向量)·(N位块浮点向量)相对应。因此,获得单独的结果,这些单独的结果然后被累加以生成输出414。
应该注意,针对减小的尾数位宽计算500所执行的操作可以在硬件和/或软件中被执行。例如,用于将向量分解为具有减小的位宽尾数的向量的操作可以在硬件和/或软件中被执行。
在各种示例中,点积运算计算两个向量的标量积,诸如,a=[a1,a2,...,an]和b=[b1,b2,...,bn],如下:
在等式3中,∑表示总和,并且n是向量空间的维数。在操作中,行向量被乘以列向量。通常,矩阵是以行和列被布置的数字、符号或者表达式的矩形阵列,并且矩阵中的各个项通常被称为元素或者条目。矩阵通常被用于表示线性变换,即,线性函数(诸如,f(x)=(ax)的一般化。这样,矩阵可以被用于例如,将3D图像投影到二维(2D)屏幕上或者执行被用于创建表面上逼真的运动的计算以及许多其他应用。
本公开可以被应用于不同的矩阵,诸如,作为主要用零填充的矩阵的稀疏矩阵、或者作为大量(例如,大多数)非零元素的矩阵的密集矩阵。稀疏矩阵在各种应用领域中是有用的,诸如,例如,使低密度的由非零值表示的有效数据或者连接散布在更大数量的零值中很常见的网络理论。还应该注意,本公开可以结合不同类型的矩阵被实现,并且不限于本文所描述的矩阵。例如,本文所描述的操作可以结合不同的稀疏矩阵格式(诸如,坐标格式、压缩空间行格式)或者其他格式(诸如,对角稀疏矩阵格式或者位-向量格式)而被执行。
因此,上述减小的位宽尾数计算可以被用于执行低精度或者低性能处理器的许多不同应用,同时仍然维持适合于特定目的或者用途(例如,在神经网络中)的准确度水平。
再次参照图4,减小的位宽块浮点向量计算处理器402被配置为使用减小的位宽尾数块浮点向量来减少复杂性和处理负担,这可以通过允许高精度数学运算在低精度处理器中被执行来提高准确度。结果,当处理大型数据集合时,低精度处理器可以被使用,但是不会得到常规的准确度的降低。例如,减小的位宽块浮点向量计算处理器402被配置为将减小的位宽尾数块浮点向量用于矩阵-向量乘法运算。这些操作可以作为执行神经网络推理功能的一部分而被执行。作为另一示例,操作可以作为神经网络的训练过程的一部分而被执行,诸如,当在训练过程中的前向传递、反向传播和权重更新期间执行计算时。
在一个示例中,减小的位宽块浮点向量计算处理器402具有神经网络拓扑的细节(诸如,层的数量、层的类型、层被连接的方式、每个层中的节点的数量、神经网络的类型),这些细节可以由操作员指定。例如,操作员能够使用图形用户界面416来指定神经网络拓扑。当神经网络被训练时,大量3D对象可以被处理并且被存储在数据库中。例如,数据库可以包括与图像处理应用中的数千个3D对象相对应的标识符。
一旦操作员已经配置了一个或多个推理或者训练调整参数,或者在一些情况下,使用一组预定义的参数(该组预定义的参数可以被自动选择),则减小的位宽块浮点向量计算处理器402被配置为执行神经网络推理或者训练计算以使用神经网络技术中的神经网络功能或者神经网络训练过程来操作或者训练神经网络。应该注意,在神经网络训练被执行的示例中,一旦训练完成(例如,在训练数据被用尽之后),经训练的神经网络模型418(例如,拓扑和参数值)就会被存储并且被加载到一个或多个最终用户设备,诸如,智能电话308、可穿戴增强现实计算设备312、膝上型计算机310或者其他最终用户计算设备。最终用户计算设备能够使用经训练的神经网络模型418来实施已经针对其训练了神经网络的任务。例如,在可穿戴增强现实计算设备312的情况下,引擎被打开以识别可穿戴增强现实计算设备312的穿戴者所查看的资产,并且经训练的神经网络模型418被用于了解资产被定向的方式、资产是否被打开等。
当本公开被应用于例如,DNN时,在一个示例中,预先训练的模型参数被用于量化模型。该量化模型使用本文所描述的运算子来对矩阵-向量相乘的量化误差进行建模。应该注意,量化模型将模型参数以及网络中的激活量化。然后,所得到的模型被用于对验证或者新数据进行推理,以确定量化模型的准确度。
如果准确度未满足预定义阈值,则准确度通过微调被进一步提高。在这种情况下,量化模型被用于对模型参数进行微调。此外,模型参数使用在浮点中所训练的模型参数而被初始化。然后,使用量化模型的损失,训练数据通过模型被运行,以进一步训练该模型。
因此,根据本公开所执行的分解运算可以在不同的应用中被实现,诸如,神经网络应用(如本文所描述的)或者图像处理应用等。作为一个特定示例,分解运算可以作为针对神经网络的完全连接层的矩阵-向量相乘的一部分而被执行,以如下训练神经网络:
y0=σ(x0W+b)-前向传递 等式4
L=f(y0 *-y0)-损失计算,其中f是损失函数 等式5
在上述等式中,W是权重,b是偏差项,σ表示非线性,y0是输入,y0*是预期输出,并且η是学习速率。y0*和y0的差(即,y0*-y0)被反向传播,以计算被用于更新神经网络权重的梯度。应该注意,虽然上述等式通常与一层网络相对应,但是本公开可以结合具有多个层的不同类型的网络被实现。
在使用等式4至等式7的神经训练期间,某些运算(包括x0W运算)包括矩阵-向量乘法。在各种示例中,矩阵-向量乘法使用如本文所描述的那样被分解为具有减小的位宽尾数的块浮点向量而被执行。
作为另一示例,本文所描述的分解过程可以如下结合卷积运算被实现:
σ(conv(x,W)+b) 等式8
与等式4至等式7相似,等式8包括由点积计算组成的卷积运算(conv)。在各种示例中,点积计算使用如本文所描述的那样被分解为具有减小的位宽尾数的块浮点向量而被执行。应该注意,在不同的应用中,卷积运算可以是一维(1D)或者二维(2D)运算。
因此,上述减小的位宽尾数向量计算可以被用于利用低精度处理器而执行的许多不同应用以支持提高的整体系统准确度。
如应该了解的,各种示例可以被用于训练不同类型的神经网络或者被用于不同类型的神经网络的操作。附加地,各种示例可以被用于在非神经应用中执行减小的位宽尾数计算。图6和图7图示了用于在神经网络中执行减小的位宽尾数向量计算的方法600和700的示例性流程图。在本文所描述的流程图中所图示的操作可以按照与所示出的顺序不同的顺序被执行,可以包括附加的步骤或者更少的步骤,并且可以根据期望或者需要被修改。附加地,一个或多个操作可以同步、同时或者按顺序被执行。
参照方法600,计算设备在602处接收块浮点数。该块浮点数可以是包括尾数部分和指数部分(以及在各种示例中,包括符号部分)的向量值。在一些示例中,块浮点数是矩阵的一部分(例如,块浮点格式的矩阵值),并且在其上点积运算将被执行。例如,数可以是用于训练神经网络的数据训练集的一部分,或者用于神经网络的推理操作的数据的一部分。
方法600包括:在604处减小块浮点数的位宽。在一个示例中,位宽通过将块浮点数分解为多个数而被减小,该多个数中的每个数具有其位宽小于块浮点数的尾数部分的位宽的尾数部分。在一些示例中,块浮点向量被分解为两个块浮点向量,该两个块浮点向量具有为原始块浮点向量的位宽的一半的尾数位宽。
方法600包括:在606处分离地对多个数中的每个数执行一个或多个点积运算以获得单独的结果。在一些示例中,当诸如,对块浮点向量执行点积运算时,减小的位宽尾数的指数值基于尾数的值的位宽位置(例如,最低有效位或者最高有效位)而被缩放。点积运算可以如在图5中所示出的那样被执行,图5图示了根据本公开的被处理的两个N位块浮点向量。
方法600包括:在608处对单独的结果求和,以生成最终的点积值。例如,累加函数508(如在图5中所图示的)被用于组合减小的位宽尾数向量的点积乘法运算。因此,单独的乘法运算结果被累加,以生成最终的点积值。
该最终的点积值然后在610处被用于实现神经网络。例如,使用减小的位宽尾数数的计算的结果被用于训练或者操作神经网络。
因此,在各种示例中,减小的位宽尾数块浮点计算可以被用于神经网络的操作或者训练过程(例如,训练涉及在迭代过程中使用训练算法来更新神经网络的参数)。由于将被更新的参数的数量较大(在DNN的情况下)并且训练数据的数量也较大,因此计算(诸如,在神经网络训练期间所执行的迭代过程)可以是耗时的并且在计算上昂贵的。本公开通过以下来处理训练过程的需求:允许具有低精度的处理引擎或者机器有效地执行计算操作,同时维持整体系统准确度。
应该注意,本公开可以在具有分层配置的神经网络中被实现,该分层配置具有一层输入节点、一层或者多层隐藏单元和至少一个输出层。在测试时间使用神经网络期间(即,在训练之后),当信号通过层时,信号经由激活产生输出,该输出成为神经网络的下一层的输入,依此类推,直到信号到达输出层并且输出单元被激活为止。输出层处的激活模式给出了对神经网络的预测。激活模式受在训练时期或者阶段所学习的权重的影响。
现在参照在图7中所图示的方法700,该方法700可以例如,由减小的位宽块浮点向量计算处理器402执行,在702,块浮点向量被接收。在各种示例中,并且如本文所讨论的,块浮点向量由具有符号、指数和尾数的值定义。块浮点数可以为不同的格式,诸如,32位浮点型、16位浮点型或者8位浮点型等。
块浮点向量的尾数在704处被分解以具有减小的位宽。例如,如本文所描述的,尾数被进行分数划分(例如,对半划分),以定义具有减小的位宽的多个块浮点向量(例如,来自N位块浮点向量的N/2个位宽块浮点向量)。
减小的位宽尾数块浮点向量在706处被重新缩放。
如本文所描述的,在一些实例中,被拆分为减小的位宽块浮点向量的低位位置值(例如,最低有效位)不被缩放,而被拆分为减小的位宽块浮点向量的高位位置值(例如,最高有效位)被缩放。
例如,如在图5中所图示的,在708处对重新缩放过的减小的位宽尾数块浮点向量执行点积乘法运算。点积乘法运算的结果还在708处被累加,以生成最终的点积值。在计算使用减小的位宽尾数块浮点向量被执行的情况下,高准确度可以利用低性能处理器(诸如,低精度加速器)被实现。
然后,在710处确定是否期望或者需要附加的计算精度。例如,确定整体系统准确度是否应该被进一步提高。如果用于提供附加的精度的操作将被执行,则在712处,不同的神经网络层被选择。对层的选择可以是预定义的或者用户定义的。一旦神经网络层已经被选择,该方法就返回到702。
如果不需要或者不期望附加的精度,则如本文所描述的,710处的计算(在一个或多个层中被执行的)的结果在714中被用于实现神经网络。
因此,方法700可以被应用于使用块浮点而实现的神经网络,以有选择地提高某些层的精度,从而使得整体网络准确度使用低精度处理器被提高。方法700可以被应用于与神经网络的一些或者所有层的权重和/或激活相关的计算。
如应该了解的,当本公开在针对神经网络的训练过程中被实现时,这通常涉及在迭代过程中使用训练算法来更新神经网络的参数。此外,神经网络是通过边而互连的节点的类集,并且其中存在与节点和/或边相关联的权重。在一些示例中,神经网络中的一个或多个节点被修改,以稍微改变神经网络操作的方式。因此,输出本身不直接被改变,而是通过使用根据本公开所执行的计算来改变节点进行操作以生成输出的方式而被间接地改变。
因此,在一些示例中,方法600或者方法700可以被用于执行以下计算:该计算实现用于训练或者操作神经网络的减小的位宽尾数块浮点向量。
示例性操作环境
本公开与根据实施例的计算装置802一起可操作,作为图8中的功能框图800。在一个示例中,根据本说明书中所描述的一个或多个实施例,计算装置802的组件可以被实现为电子设备的一部分。计算设备802包括一个或多个处理器804,该一个或多个处理器804可以是微处理器、控制器或者用于处理计算机可执行指令以控制电子设备的操作的任何其他合适类型的处理器。包括操作系统806的平台软件或者任何其他合适的平台软件都可以被提供在装置802上,以使得应用软件808能够在设备上被执行。根据实施例,使用减小的位宽尾数数据812来进行操作或者使用减小的位宽尾数数据812被训练的神经网络810可以由软件实现。
计算机可执行指令可以使用由计算装置802可访问的任何计算机可读介质而被提供。计算机可读介质可以包括:例如,计算机存储介质,诸如,存储器814和通信介质。计算机存储介质(诸如,存储器814)包括在用于存储信息(诸如,计算机可读指令、数据结构、程序模块等)的任何方法或者技术中所实现的易失性和非易失性、可移除和不可移除介质。计算机存储介质包括但不限于:RAM、ROM、EPROM、EEPROM、闪速存储器或者其他存储器技术、CD-ROM、数字通用盘(DVD)或者其他光学存储装置、磁带盒、磁带、磁盘存储装置或者其他磁存储设备、或者可以被用于存储信息以供计算装置访问的任何其他非传输介质。相比之下,通信介质可以在已调制的数据信号(诸如,载波或者其他传输机构)中实施计算机可读指令、数据结构、程序模块等。如本文所定义的,计算机存储介质不包括通信介质。因此,计算机存储介质本身不应该被解释为传播信号。传播信号本身不是计算机存储介质的示例。虽然计算机存储介质(存储器814)被示出在计算装置802内,但是本领域的技术人员要了解,存储装置可以经由网络或者其他通信链路(例如,使用通信接口816)被远程地分布或者定位以及被访问。
计算设备802可以包括被配置为向一个或多个输入设备820和输出设备822(例如,显示器或者扬声器)输出信息的输入/输出控制器818,该一个或多个输入设备820和输出设备822可以与电子设备分离或者被集成到电子设备。输入/输出控制器818还可以被配置为接收并且处理来自一个或多个输入设备820(例如,键盘、麦克风或者触摸板)的输入。在一个实施例中,输出设备822还可以充当输入设备820。这种设备的示例可以是触敏显示器。输入/输出控制器818还可以向除了输出设备822之外的设备输出数据,例如,本地连接的打印设备。在一些实施例中,用户可以向(多个)输入设备820提供输入和/或接收来自(多个)输出设备822的输出。
在一些示例中,计算装置802检测语音输入、用户手势或者其他用户动作,并且提供自然用户界面(NUI)。该用户输入可以被用于创作电子墨水,查看内容,选择墨水控件,播放具有电子墨水覆盖的视频以及用于其他目的。在一些示例中,输入/输出控制器818向除了显示设备之外的设备输出数据,例如,本地连接的打印设备。
本文所描述的功能性可以至少部分地由一个或多个硬件逻辑组件执行。根据实施例,计算装置802通过程序代码被配置,该程序代码在由(多个)处理器804执行时,执行所描述的操作和功能性的实施例。备选地,或者附加地,本文所描述的功能性可以至少部分地由一个或多个硬件逻辑组件执行。例如,而并非限制,可以被使用的说明性类型的硬件逻辑组件包括FPGA、ASIC、ASSP、SOC、CPLD和GPU。
附图中的各种元件的功能性的至少一部分可以由附图中的其他元件或者附图中未示出的实体(例如,处理器、web服务、服务器、应用程序、计算设备等)执行。
虽然结合示例性计算系统环境被描述,但是本公开的示例能够利用许多其他通用或者专用计算系统环境、配置或者设备来实现。
可以适合与本公开的各个方面一起使用的众所周知的计算系统、环境和/或配置的示例包括但不限于:移动或者便携式计算设备(例如,智能电话)、个人计算机、服务器计算机、手持式设备(例如,平板电脑)或者膝上型设备、多处理器系统、游戏控制台或者游戏控制器、基于微处理器的系统、机顶盒、可编程消费性电子产品、移动电话、可穿戴式或者附件式移动计算和/或通信设备(例如,手表、眼镜、耳机或者听筒)、网络PC、小型计算机、大型计算机、包括任何上述系统或者设备的分布式计算环境等。一般而言,本公开与具有处理能力以使得其可以执行指令(诸如,本文所描述的那些指令)的任何设备一起可操作。这种系统或者设备可以按照任何方式接受来自用户的输入,包括:通过输入设备(诸如,键盘或者定点设备);经由手势输入、接近输入(诸如,通过悬停)和/或经由语音输入。
本公开的示例可以在由一个或多个计算机或者软件、固件、硬件或者其组合中的其他设备执行的计算机可执行指令(诸如,程序模块)的一般上下文中被描述。计算机可执行指令可以被组织成一个或多个计算机可执行组件或者模块。通常,程序模块包括但不限于:执行特定任务或者实现特定抽象数据类型的例程、程序、对象、组件和数据结构。本公开的各个方面可以利用任何数量和组织的这种组件或者模块被实现。例如,本公开的各个方面不限于在附图中所图示以及在本文中所描述的特定计算机可执行指令或者特定组件或者模块。本公开的其他示例可以包括具有比本文所图示和描述的功能性更多或者更少功能性的不同计算机可执行指令或者组件。
在涉及通用计算机的示例中,本公开的各个方面将通用计算机转换为在被配置时执行本文所描述的指令的专用计算设备。
其他示例包括:
一种用于神经网络中的块浮点计算的系统,该系统包括:
-至少一个处理器;以及
-包括计算机程序代码的至少一个存储器,该至少一个存储器和计算机程序被配置为:利用至少一个处理器,使至少一个处理器:
-接收包括尾数部分的块浮点数;
-通过将块浮点数分解为多个数来减小块浮点数的位宽,该多个数中的每个数具有其位宽小于块浮点数的尾数部分的位宽的尾数部分;
-分离地对多个数中的每个数执行一个或多个点积运算,以获得单独的结果;
-对单独的结果求和,以生成最终的点积值;以及
-使用最终的点积值来实现神经网络。
其他示例包括:
一种用于神经网络中的块浮点计算的计算机化的方法,该计算机化的方法包括:
-接收包括尾数的块浮点向量;
-将块浮点向量中的每个块浮点向量分解为具有减小的位宽尾数的多个块浮点向量;
-对具有减小的位宽尾数的多个块浮点向量执行点积运算;以及
-使用执行点积运算的结果来实现神经网络。
其他示例包括:
一种或多种计算机存储介质,具有用于块浮点计算的计算机可执行指令,这些计算机可执行指令在由处理器执行时使处理器至少:
-接收包括尾数部分的块浮点数;
-通过将块浮点数分解为多个数来减小块浮点数的位宽,该多个数中的每个数具有其位宽小于块浮点数的尾数部分的位宽的尾数部分;
-分离地对多个数中的每个数执行一个或多个点积运算,以获得单独的结果;
-对单独的结果求和,以生成最终的点积值;以及
-使用最终的点积值来实现神经网络。
备选地,或者作为除了上面所描述的示例之外,示例包括以下内容的任何组合:
-通过将块浮点数拆分为高位位置尾数部分和低位位置尾数部分来减小块浮点数的位宽。
-其中高位位置尾数部分和低位位置尾数部分分别表示高阶尾数位和低阶尾数位,在对单独的结果求和之前将高位位置尾数部分和低位位置尾数部分缩放。
-基于多个数的尾数部分的位宽的大小和所接收到的块浮点数的尾数部分的位宽的大小,使用分数值来将高位位置尾数部分和低位位置尾数部分缩放。
-在硬件和软件中的一个中执行减小位宽,并且仅在硬件中执行一个或多个点积运算。
-其中执行一个或多个点积运算包括:执行矩阵-向量相乘运算和矩阵-矩阵相乘运算中的一个。
-其中块浮点数包括单精度浮点数。
如对于技术人员将明显的,本文所给出的任何范围或者设备值都可以被扩展或者被更改,而不会丢失所寻求的效果。
虽然本文的主题已经用特定于结构特征和/或方法动作的语言进行了描述,但是应当理解,在所附权利要求书中所定义的主题不必限于上面所描述的特定特征或者动作。相反,上面所描述的特定特征和动作作为实现权利要求书的示例形式而被公开。
将理解,上面所描述的益处和优点可以涉及一个实施例,或者可以涉及若干实施例。实施例不限于解决任何或者所有所述问题的那些实施例或者具有任何或者所有所述益处和优点的那些实施例。还将理解,对“一个”项的引用是指那些项中的一个或多个。
本文所图示和描述的实施例以及本文未明确描述但是在权利要求书的各个方面的范围内的实施例构成用于训练神经网络的示例性装置。图示的一个或多个处理器804以及被存储在存储器814中的计算机程序代码构成用于使用和/或训练神经网络的示例性处理装置。
术语“包括”在本说明书中被用于表示包括其后跟随的(多个)特征或者动作,但是不排除存在一个或多个附加的特征或者动作。
在一些示例中,在附图中所图示的操作可以被实现为被编码在计算机可读介质上的软件指令,在被编程或者设计为执行这些操作的硬件中被实现,或者进行这两者。例如,本公开的各个方面可以被实现为片上系统或者包括多个相互连接的导电元件的其他电路装置。
执行或者进行本公开的在本文所图示和描述的示例中的操作的顺序不是必需的,除非另有说明。即,操作可以按照任何顺序被执行,除非另有说明,并且本公开的示例可以包括比本文所公开的那些操作更多或者更少的操作。例如,预期在另一操作之前、与另一操作同时或者在另一操作之后执行或者进行特定操作在本公开的各个方面的范围内。
当介绍本公开的各个方面中的元件或者其示例时,冠词“一”、“一个”、“该(the)”和“所述(said)”旨在表示存在元件中的一个或多个。术语“包括(comprising)”、“包括(including)”和“具有”旨在是包括性的,并且意味着:除了所列出的元件之外,还可以存在其他元件。术语“示例性”旨在表示“…的示例”。短语“以下中的一个或多个:A、B和C”是指“至少一个A和/或至少一个B和/或至少一个C”。
已经详细地描述了本公开的各个方面,将明显的是:在不脱离本公开的各个方面的如在所附权利要求书中所限定的范围的情况下,修改和变型是可能的。由于可以在不脱离本公开的各个方面的范围的情况下对上述构造、产品和方法进行各种改变,因此,意图是:上述描述中所包括的以及附图中所示出的所有内容都应该被解释为是说明性的,而不是在限制性意义上进行解释。

Claims (20)

1.一种用于神经网络中的块浮点计算的系统,所述系统包括:
至少一个处理器;以及
至少一个存储器,所述至少一个存储器包括计算机程序代码,所述至少一个存储器和所述计算机程序被配置为:利用所述至少一个处理器,使所述至少一个处理器:
接收包括尾数部分和指数部分的块浮点数;
通过将所述块浮点数分解为减小的位宽块浮点数来减小所述块浮点数的位宽,所述减小的位宽块浮点数中的每个减小的位宽块浮点数具有指数部分和尾数部分,并且其中所述减小的位宽块浮点数中的每个减小的位宽块浮点数的所述尾数部分的位宽小于所述块浮点数的所述尾数部分的位宽;
将所述减小的位宽块浮点数缩放,其中所述缩放包括:基于所述减小的位宽块浮点数内的所述尾数部分来缩放所述减小的位宽块浮点数的所述指数部分;
分离地对所述减小的位宽块浮点数中的每个减小的位宽块浮点数执行一个或多个点积运算,以获得单独的结果;
对所述单独的结果求和,以生成最终的点积值;以及
使用所述最终的点积值来实现所述神经网络。
2.根据权利要求1所述的系统,其中所述至少一个存储器和所述计算机程序代码还被配置为:利用所述至少一个处理器,使所述至少一个处理器通过将所述块浮点数拆分为高位位置尾数部分和低位位置尾数部分来减小所述块浮点数的所述位宽。
3.根据权利要求2所述的系统,其中所述高位位置尾数部分和所述低位位置尾数部分分别表示高阶尾数位和低阶尾数位,并且其中所述至少一个存储器和所述计算机程序代码还被配置为:利用所述至少一个处理器,使所述至少一个处理器在对所述单独的结果求和之前将所述高位位置尾数部分和所述低位位置尾数部分缩放,其中所述高位位置尾数部分和所述低位位置尾数部分的指数值基于所述高阶尾数位和所述低阶尾数位的位宽位置而被缩放。
4.根据权利要求3所述的系统,其中所述至少一个存储器和所述计算机程序代码还被配置为:利用所述至少一个处理器,使所述至少一个处理器基于所述减小的位宽块浮点数的所述尾数部分的所述位宽的大小和所接收到的所述块浮点数的所述尾数部分的所述位宽的大小,使用分数值来将所述高位位置尾数部分和所述低位位置尾数部分缩放。
5.根据权利要求1所述的系统,其中减小所述位宽在硬件和软件中的一个中被执行,并且执行所述一个或多个点积运算仅在硬件中被执行。
6.根据权利要求1所述的系统,其中执行一个或多个点积运算包括:执行矩阵-向量相乘运算和矩阵-矩阵相乘运算中的一个。
7.根据权利要求1所述的系统,其中所述块浮点数包括单精度浮点数。
8.一种用于神经网络中的块浮点计算的计算机化的方法,所述计算机化的方法包括:
接收包括尾数和指数的块浮点向量;
将所述块浮点向量中的每个块浮点向量分解为具有减小的位宽尾数的多个块浮点向量;
将具有减小的位宽尾数的所述块浮点向量缩放,其中所述缩放包括:基于具有减小的位宽尾数的所述块浮点向量内的所述尾数来缩放所述指数;
对具有减小的位宽尾数的所述多个块浮点向量执行点积运算;以及
使用执行所述点积运算的结果来实现所述神经网络。
9.根据权利要求8所述的计算机化的方法,其中分解所述块浮点向量中的每个块浮点向量包括:通过将所述块浮点向量的所述尾数拆分为高位位置尾数部分和低位位置尾数部分来减小所述块浮点向量的所述尾数的所述位宽。
10.根据权利要求9所述的计算机化的方法,其中所述高位位置尾数部分和所述低位位置尾数部分分别表示高阶尾数位和低阶尾数位,并且所述方法还包括:在执行所述点积运算之前将所述高位位置尾数部分和所述低位位置尾数部分缩放。
11.根据权利要求10所述的计算机化的方法,还包括:基于所述多个块浮点向量的所述尾数部分的所述位宽的大小和所接收到的所述块浮点向量的所述尾数部分的所述位宽的大小,使用分数值来将所述高位位置尾数部分和所述低位位置尾数部分缩放。
12.根据权利要求8所述的计算机化的方法,其中分解所述块浮点向量中的每个块浮点向量在硬件和软件中的一个中被执行,并且执行点积运算仅在硬件中被执行。
13.根据权利要求8所述的计算机化的方法,其中执行所述点积运算包括:执行矩阵-向量相乘运算和矩阵-矩阵相乘运算中的一个。
14.根据权利要求8所述的计算机化的方法,其中所述块浮点向量包括单精度浮点数。
15.一种或多种计算机存储介质,具有用于神经网络中的块浮点计算的计算机可执行指令,所述计算机可执行指令在由处理器执行时使所述处理器至少:
接收包括尾数部分和指数部分的块浮点数;
通过将所述块浮点数分解为减小的位宽块浮点数来减小所述块浮点数的位宽,所述减小的位宽块浮点数中的每个减小的位宽块浮点数具有指数部分和尾数部分,其中所述减小的位宽块浮点数中的每个减小的位宽块浮点数的所述尾数部分的位宽小于所述块浮点数的所述尾数部分的位宽;
将所述减小的位宽块浮点数缩放,其中所述缩放包括:基于所述减小的位宽块浮点数内的所述尾数部分来缩放所述减小的位宽块浮点数的所述指数部分;
分离地对所述减小的位宽块浮点数中的每个减小的位宽块浮点数执行一个或多个点积运算,以获得单独的结果;
对所述单独的结果求和,以生成最终的点积值;以及
使用所述最终的点积值来实现所述神经网络。
16.根据权利要求15所述的一种或多种计算机存储介质,还具有计算机可执行指令,所述计算机可执行指令在由处理器执行时使所述处理器至少:通过将所述块浮点数拆分为高位位置尾数部分和低位位置尾数部分来减小所述块浮点数的所述位宽。
17.根据权利要求16所述的一种或多种计算机存储介质,其中所述高位位置尾数部分和所述低位位置尾数部分分别表示高阶尾数位和低阶尾数位,并且所述一种或多种计算机存储介质还具有计算机可执行指令,所述计算机可执行指令在由处理器执行时使所述处理器至少:在执行所述一个或多个点积运算之前将所述高位位置尾数部分和所述低位位置尾数部分缩放。
18.根据权利要求17所述的一种或多种计算机存储介质,还具有计算机可执行指令,所述计算机可执行指令在由处理器执行时使所述处理器至少:基于所述减小的位宽块浮点数的所述尾数部分的所述位宽的大小和所接收到的所述块浮点数的所述尾数部分的所述位宽的大小,使用分数值来将所述高位位置尾数部分和所述低位位置尾数部分缩放。
19.根据权利要求15所述的一种或多种计算机存储介质,其中减小所述位宽在硬件和软件中的一个中被执行,并且执行所述一个或多个点积运算仅在硬件中被执行。
20.根据权利要求15所述的一种或多种计算机存储介质,其中执行一个或多个点积运算包括:执行矩阵-向量相乘运算和矩阵-矩阵相乘运算中的一个,并且所述块浮点数包括单精度浮点数。
CN201980030079.3A 2018-05-04 2019-04-25 用于块浮点计算的系统、方法和计算机存储介质 Active CN112074806B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/971,904 2018-05-04
US15/971,904 US10691413B2 (en) 2018-05-04 2018-05-04 Block floating point computations using reduced bit-width vectors
PCT/US2019/029025 WO2019212836A1 (en) 2018-05-04 2019-04-25 Block floating point computations using reduced bit-width vectors

Publications (2)

Publication Number Publication Date
CN112074806A CN112074806A (zh) 2020-12-11
CN112074806B true CN112074806B (zh) 2024-06-25

Family

ID=

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104520807A (zh) * 2012-08-30 2015-04-15 高通股份有限公司 用于具有指数按比例缩放的浮点融合乘法加法的微架构

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104520807A (zh) * 2012-08-30 2015-04-15 高通股份有限公司 用于具有指数按比例缩放的浮点融合乘法加法的微架构

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
基于VHDL的浮点算法研究;夏阳;邹莹;;计算机仿真(第04期);全文 *

Similar Documents

Publication Publication Date Title
US10691413B2 (en) Block floating point computations using reduced bit-width vectors
US11741362B2 (en) Training neural networks using mixed precision computations
EP3549069B1 (en) Neural network data entry system
US20210004663A1 (en) Neural network device and method of quantizing parameters of neural network
US20230196085A1 (en) Residual quantization for neural networks
US11797822B2 (en) Neural network having input and hidden layers of equal units
US10579334B2 (en) Block floating point computations using shared exponents
Lu et al. Evaluations on deep neural networks training using posit number system
CN105719001B (zh) 使用散列的神经网络中的大规模分类
US20190340499A1 (en) Quantization for dnn accelerators
Stonyakin et al. Gradient methods for problems with inexact model of the objective
KR20210029785A (ko) 활성화 희소화를 포함하는 신경 네트워크 가속 및 임베딩 압축 시스템 및 방법
WO2020142192A1 (en) Neural network activation compression with narrow block floating-point
US20200342288A1 (en) Direct computation with compressed weight in training deep neural network
WO2020142183A1 (en) Neural network activation compression with outlier block floating-point
CN110023930B (zh) 利用神经网络和在线学习的语言数据预测
Chervyakov et al. Residue number system-based solution for reducing the hardware cost of a convolutional neural network
CN111105017A (zh) 神经网络量化方法、装置及电子设备
CN111033462A (zh) 在基于处理器的系统中使用矩阵处理器提供高效浮点运算
CN113994347A (zh) 用于负值和正值的非对称缩放因子支持的系统和方法
CN112130805B (zh) 包括浮点加法器的芯片、设备及浮点运算的控制方法
CN112074806B (zh) 用于块浮点计算的系统、方法和计算机存储介质
CN112088354B (zh) 使用共享指数的块浮点计算
CN114969386B (zh) 应用于医学领域的消歧方法、装置、电子设备和介质
CN113761934B (zh) 一种基于自注意力机制的词向量表示方法及自注意力模型

Legal Events

Date Code Title Description
PB01 Publication
SE01 Entry into force of request for substantive examination
GR01 Patent grant