用于处理数值数据的方法、设备和计算机可读存储介质与流程

文档序号:16990602发布日期:2019-03-02 00:56阅读:180来源:国知局
用于处理数值数据的方法、设备和计算机可读存储介质与流程

本公开涉及数据处理领域,更具体地涉及用于处理数值数据的方法、设备和计算机可读存储介质。



背景技术:

作为人工智能领域中目前最受关注的发展和研究方向之一,神经网络近些年得到了长足的发展。在目前主流的神经网络计算框架平台中,基本都是利用浮点数进行训练的。因此,神经网络中的卷积层和全连接层的权重系数和各层的输出值都是以浮点数的方式表示的。但是,与基于定点数的运算相比,基于浮点数的运算的逻辑设计更复杂、消耗了更多的硬件资源且功耗更高。但即使是用定点数,在例如卷积神经网络的加速器中,定点数的运算仍然需要大量的乘法器以保证运算的实时性。这一方面会增加硬件的面积,另一方面也会增加带宽的消耗。因此,对于如何降低卷积神经网络加速器的物理面积和功耗,将长期存在于卷积神经网络的实际应用中。



技术实现要素:

根据本公开的第一方面,提出了一种用于处理数值数据的方法。该方法包括:确定第一数值数据的最高非零位;确定所述第一数值数据的次高非零位;以及至少基于所述最高非零位和所述次高非零位来生成所述第一数值数据的数值表示。

根据本公开的第二方面,提出了一种用于处理数值数据的设备。该设备包括:处理器,所述处理器用于:确定第一数值数据的最高非零位;确定所述第一数值数据的次高非零位;以及至少基于所述最高非零位和所述次高非零位来生成所述第一数值数据的数值表示。

根据本公开的第三方面,提出了一种存储指令的计算机可读存储介质,所述指令在由处理器执行时使得所述处理器执行根据本公开第一方面所述的方法。

通过采用上述方法、设备和/或计算机可读存储介质,可以实现在维持相当高的计算精度的情况下占用更少的数据存储空间以及实现更快速的加法和乘法运算,从而能够使得神经网络计算可以更为高效、迅速。

附图说明

为了更完整地理解本公开实施例及其优势,现在将参考结合附图的以下描述,其中:

图1是示出了在采取根据本公开实施例的数据处理方法的各步骤时的数据处理图。

图2是示出了根据本公开实施例的用于处理数值数据的示例方法的流程图。

图3是示出了根据本公开实施例的示例硬件布置的框图。

此外,各附图并不一定按比例来绘制,而是仅以不影响读者理解的示意性方式示出。

具体实施方式

根据结合附图对本公开示例性实施例的以下详细描述,本公开的其它方面、优势和突出特征对于本领域技术人员将变得显而易见。

在本公开中,术语“包括”和“含有”及其派生词意为包括而非限制。

在本说明书中,下述用于描述本公开原理的各种实施例只是说明,不应该以任何方式解释为限制公开的范围。参照附图的下述描述用于帮助全面理解由权利要求及其等同物限定的本公开的示例性实施例。下述描述包括多种具体细节来帮助理解,但这些细节应认为仅仅是示例性的。因此,本领域普通技术人员应认识到,在不脱离本公开的范围和精神的情况下,可以对本文中描述的实施例进行多种改变和修改。此外,为了清楚和简洁起见,省略了公知功能和结构的描述。此外,贯穿附图,相同附图标记用于相同或相似的功能和操作。此外,尽管可能在不同实施例中描述了具有不同特征的方案,但是本领域技术人员应当意识到:可以将不同实施例的全部或部分特征相结合,以形成不脱离本公开的精神和范围的新的实施例。

请注意:尽管以下实施例以卷积神经网络为背景来详细描述,然而本公开不限于此。事实上,只要是需要用到数值表示的场景,均可采用根据本公开实施例的方案来减少数据存储需要、提高运算速度等。此外,尽管以下实施例主要以二进制表示为基础来说明,然而根据本公开实施例的方案同样也可适用于其它进制的表示,例如三进制、八进制、十进制、十六进制等。此外,尽管以下实施例主要以整数为基础来说明,然而根据本公开实施例的方案同样也可适用于小数等。

在正式描述本公开的一些实施例之前,首先将描述在本文中要使用的部分术语。

卷积神经网络(convolutionalneuralnetwork)

在机器学习领域中,卷积神经网络(简称为cnn或convnet)是一类有深度的前馈人工神经网络,其可被用于例如图像识别等领域。cnn通常采用多层构造,其中可以包括一个或多个卷积(convolutional)层和/或池化(pooling)层等等。

卷积层通常采用较小的卷积核对该层的输入数据(例如,输入图像)进行局部卷积运算,以得到作为输出的特征图,并向下一层输入。该卷积核可以是全局共享或非共享的卷积核,使得相应卷积层的参数在训练之后可以得到与该层所要识别的特征相对应的值。例如,在图像识别领域中,靠前(即,接近原始输入图案)的卷积层的卷积核可以用于学习并识别图像中的眼睛、鼻子之类的较小特征,而靠后(即,接近最终输出结果)的卷积层的卷积核可以用于学习并识别图像中的人脸之类的较大特征,从而最终可以得到例如图像中是否包含人类之类的识别结果。

在无零填充(zeropadding)、步幅(stride)为1、无偏置(bias)的情况下,一个示例卷积计算的结果如下式(1):

其中,等式左侧第一项为4x4的二维输入数据,第二项为2x2卷积核,等式右侧为输出数据,为卷积运算符。以输入数据左上角2x2部分与卷积核的运算为例:即输出结果的左上角的值1。同样地,针对输入数据中的每个2x2部分执行类似卷积运算,即可得到中的各个相应值。请注意该示例卷积计算仅用于说明卷积神经网络中的常见卷积计算,而非对本公开实施例所适用的范围加以限制。

池化层通常是用于对前一层的输入数据进行精简的层,其通过例如选择前一层中某个局部中的最大值或平均值来替换该局部的所有数据,从而降低后续各层的运算量。此外,通过精简数据,还可以有效地避免过拟合现象出现,降低出现错误学习结果的可能。

此外,卷积神经网络中还可以包括其他层,例如全连接层、激活层等等。然而它们所涉及的数值运算与前述卷积层和池化层并无显著差别,本领域技术人员依然可以根据本公开实施例中的描述来实现这些其它层,因此本文中不再赘述。

定点数(fixed-pointnumber)

定点数或定点数表示(representation)是计算机数据处理中常用的一种实数据类型,其在基数点(radixpoint,例如十进制表示下的十进制小数点“.”)之后具有固定数量的数字。与浮点数(floatingpoint)表示相比,定点数由于表示方式相对固定,因此在进行算数运算时可以更快,且存储数据时占用更少的存储器。此外,由于一些处理器并不具备浮点运算功能,因此定点数实际上比浮点数的兼容性更强。常见的定点数表示有例如十进制表示、二进制表示等。在例如十进制的定点数表示下,数值1.23可以例如表示为1230且缩放因子为1/1000,而数值1230000可以例如表示为1230且缩放因子为1000。此外,常见的二进制定点数表示格式的示例可以为“s:m:f”,其中,s表示符号位的数量,m表示整数位的数量,且f表示小数位的数量。例如,在例如“1:3:4”格式下,数值3可以表示为“00110000”。

在深度卷积神经网络的推理(inference)运算过程中,主要的运算量通常集中于对卷积的运算,而如上面的示例所示,卷积运算涉及大量的乘法和加法运算。卷积运算的优化方法多种多样,包括例如(但不限于):(1)把浮点数转换为定点数,以减少功耗、降低带宽;(2)把数值从实数域数转换到频域以降低计算量;以及(3)把数值从实数域转换到对数(log)域,从而将乘法运算转换为加法运算。

把数值转换到对数域,也就是把x转换为2n形式。在实际应用中可以以取二进制数中最左边一位不为0的数(最高非零位)对应的位置作为指数的方式实现。例如,在不考虑四舍五入的情况下,二进制定点数1010010000000可以转换为近似值212,因此实际存储中只用把12存储下来。考虑符号位时,位宽(bitwidth)只用5位即可。相比原来的16位,位宽下降为原来的5/16。

然而在把数值从实数域转换到对数域的过程中,会把低位的有效信息完全清除掉,也就是无法保留一定的精度。具体在应用中的表现就是以对数域表示的低精度卷积神经网络相比原浮点卷积神经网络精度下降较为明显。

因此,为了至少部分解决或减轻上述问题,在本公开一些实施例中,提出了用于处理数值数据的方法、设备和计算机存储介质,其能够改善以对数域表示的网络精度过低而造成预测准确率下降明显的问题,并且保留了不需要乘法器计算的特性。

接下来,将结合图1来详细描述根据本公开实施例的用于处理数值数据的方案。

图1是示出了在采取根据本公开实施例的数据处理方法的各步骤时的数据处理图。在图1所示实施例中,假定原数值数据采用例如16位定点数来表示例如卷积神经网络中的各种参数值,其本身对神经网络计算造成的精度损失基本可忽略。以下,将假设待转换的原数值数据x(在本示例中,x=5248,然而本公开实施例不限于此)的定点数表示为

其中最高(最左)位为符号位,而剩下的为整数位,而转换到对数域后的位宽为8位。如图1所示,该8位数值表示的最高位为符号位,接下来4位为指数位,且最低3位为差分位。接下来将结合图1来详细描述它们的具体定义。

如图1(a)所示,将作为待输出的数值表示的初始化为然后,从x的上述16位定点数表示中提取符号位,并填入中,如图1(b)所示为10000000。接下来,确定原16位定点数x中从高到低第一位不为0的位置(即,最高非零位),也就是取log2运算的整数部分。在本示例中,也就是x的第12位。如图1(c)所示,变为11100000,其中指数位为1100,对应于12。可见,指数位的四个比特可以指示16位定点数(刨去符号位为15位)中任意最高位的位置。

接下来,计算从高到低第二位不为0的位置(即,次高非零位)与第一位不为0的位置(即,前述最高非零位)的差值(或差分值),即对应于差分位。由于要使用总共8位表示,除去符号位和指数位,剩下3位可用,因此该差值最大不超过7。在一些实施例中,如果该差值计算出来大于7,则可以用7来表示。此外,在另一些实施例中,也可以将该差分位设置为其它缺省值。在上述示例的情况下,x的次高非零位的位置为第10位,那么差分值diff=12-10=2。则如图1(d)所示,变为11100010,其中,差分位为010,对应于2。

采用差分位的原因至少在于:由于为了表示原数值x的最高非零位的“指数位”已经出现在x的数值表示(即,)中,则采用与数值表示中存在的指数位所指示的最高非零位相距最近的次高非零位将比采用其它非零位精度更高。然而,本公开实施例不限于此。事实上也可以引入其它非零位,例如第三高的非零位等。此外,在确定引入次高非零位的情况下,为了尽可能利用已有的最高非零位的信息,则可以采用这二者之间的差值的形式来保存指示次高非零位的信息。此外,如下面将要提到的,在采用这种数值表示的情况下,依然可以避免使用乘法器,从而保证了运算速度以及相对简单的硬件设计。

这样,在采用上述表示方式的情况下,原数值数据x=5248用八位比特来近似表示为11100010,即5120。因此,在丧失的精确度的情况下,节约了8位,即节约了一半的数值表示位。

此外,在本公开的另一些实施例中,对于转化的来源可以不做限定,即输入特征值、权重值、输出特征值都可以,其计算时的顺序也不做限定,即先进行第几部分的计算也没有关系。如上所述的16位表示的数转8位只是示例,实际上只要是根据本公开上述实施例的较多位的数值表示转换为较少位的数值表示都可行。

此外,在一些实施例中,考虑到一些极端情况,例如若原数值数据x为0,那么转换后的数则可以用11111111来近似表示。

也就是说,对于上述数值表示,可以将其分为三个部分:第一部分(即,符号位),其指示了该数值的符号,例如,前述示例中的第7位(最高位);第二部分(即,指数值),其指示了最高非零位的位置,例如前述示例中的第3~6位;以及第三部分(即,差分值),其指示了最高非零位与次高非零位的差分值,例如前述示例中的第0位到第2位。

然而,如前所述,本公开不限于此。事实上,在一些实施例中,例如在针对无符号数值的情况下,符号位也可以不存在。又例如,在一些实施例中,差分值部分可以不存在,以与前述定点数表示方法保持兼容。此外,各部分所占据的位数也可以发生变化,而不限于上述8位表示中的1:4:3分配,而是可以采用任意数量的位数且这三个部分之间的位数分配也可以根据需要来调整。

在将原数值表示进行上述相应处理并形成具有例如上述三部分的情况下,可以实现在维持相当高的计算精度的情况下占用更少的数据存储空间以及更快速的加法和乘法运算。

如下面将要详细讨论的,在采用如上所述的方式来表示数值数据的情况下,依然可以高效地进行数值计算(例如,前述卷积神经网络中的卷积计算)。在一些实施例中,如果假设x1的数值表示为(sign(x1),a1,b1),x2的数值表示为(sign(x2),a2,b2),其中,sign(x1)和sign(x2)分别是x1和x2的符号位所代表的值,a1和a2分别是x1和x2的指数位所代表的值,b1和b2分别是x1和x2的差分位所代表的值,则x1和x2的乘积可以按如下公式如下计算:

x1×x2≈sign(x1)×sign(x2)×(2a1+2a1-b1)×(2a2+2a2-b2)=sign(x1)×sign(x2)×(2a1+a2+2a1+a2-b2+2a1-b1+a2+2a1-b1+a2-b2)=sign(x1)×sign(x2)×((1<<a1+a2)+(1<<a1+a2-b2)+(1<<a1-b1+a2)+(1<<a1-b1+a2-b2))(5).

可见,如(5)中最后的等式所示,由于sign(x1)×sign(x2)×(任意数值)的两个乘法运算在实际实现中可以只是异或和/或符号位拼接,因此x1和x2的乘法运算可用移位运算(即,“<<”)与加法运算(即,“+”)代替。从而避免了对乘法器的使用,可以使得硬件设计更为简洁、占用面积更小、运算速度更快。

通过使用根据上述实施例的表示法,在例如卷积神经网络的计算中,可以在保持计算速度的情况下使得准确率大幅提升。例如,在表1中示出了在采用了根据本公开实施例的情况下,对几个公知的卷积神经网络的计算速度和/或准确度的提升情况。

其中,float表示为原始的浮点网络模型,logquannodiff为没有加上次高位(即,没有差分位)的方法,而logquanwithdiff为前述实施例中具有次高位(即,具有差分位)的方法。从表中可以看出,对于流行的几个网络alexnet/vgg16/googlenet,与原始的采用浮点数网络的方法和采用定点数网络的方法相比,利用前述实施例的方法可以在准确度上更接近浮点数网络的方法,而计算速度则与定点数方法相媲美。

以下将结合图1和图2,对根据本公开实施例的在如例如图3所示的硬件布置300上执行的用于处理数值数据的方法200进行详细的描述。

方法200可以开始于步骤s210,在步骤s210中,可以由硬件布置300的处理器306确定第一数值数据的最高非零位。

在步骤s220中,可以由硬件布置300的处理器306确定第一数值数据的次高非零位。

在步骤s230中,可以由硬件布置300的处理器306至少基于该最高非零位和该次高非零位来生成第一数值数据的数值表示。

在一些实施例中,该方法200还可以包括:确定第一数值数据的符号位。此外,步骤s230可以包括:至少基于最高非零位、次高非零位和符号位来生成第一数值数据的数值表示。在一些实施例中,步骤s230可以包括:确定与最高非零位所在位置相对应的第一子表示;确定与最高非零位所在位置和次高非零位所在位置之差相对应的第二子表示;以及至少基于第一子表示和第二子表示来生成第一数值数据的数值表示。在一些实施例中,至少基于第一子表示和第二子表示来生成第一数值数据的数值表示的步骤可以包括:将第一子表示和第二子表示顺序串接,作为第一数值数据的数值表示。在一些实施例中,至少基于最高非零位、次高非零位和符号位来生成第一数值数据的数值表示的步骤可以包括:确定与最高非零位所在位置相对应的第一子表示;确定与最高非零位所在位置和次高非零位所在位置之差相对应的第二子表示;以及至少基于第一子表示、第二子表示和符号位来生成第一数值数据的数值表示。

在一些实施例中,至少基于第一子表示、第二子表示和符号位来生成第一数值数据的数值表示的步骤可以包括:将与符号位相对应的第三子表示、第一子表示和第二子表示顺序串接,作为第一数值数据的数值表示。在一些实施例中,第一数值数据的符号位、最高非零位、和/或次高非零位可以是在第一数值数据的二进制定点数表示下确定的。在一些实施例中,方法200还可以包括:确定第二数值数据的最高非零位;确定第二数值数据的次高非零位;以及至少基于第二数值数据的最高非零位和次高非零位来生成第二数值数据的数值表示。在一些实施例中,方法200还可以包括:基于第一数值数据的数值表示和第二数值数据的数值表示来确定第一数值数据和第二数值数据的乘积。在一些实施例中,基于第一数值数据的数值表示和第二数值数据的数值表示来确定第一数值数据和第二数值数据的乘积的步骤可以包括:

x1×x2≈sign(x1)×sign(x2)×((1<<(a1+a2))+(1<<(a1+a2-b2))+(1<<(a1-b1+a2))+(1<<(a1-b1+a2-b2)))

其中,x1表示第一数值数据,x2表示第二数值数据,sign(x1)表示第一数值数据的符号位的第三子表示,sign(x2)表示第二数值数据的符号位的第三子表示,a1表示第一数值数据的第一子表示,a2表示第一数值数据的第二子表示,b1表示第二数值数据的第一子表示,b2表示第二数值数据的第二子表示,以及符号“<<”表示移位运算。

在一些实施例中,方法200还可以包括:如果第一数值数据为0,则将第一数值数据的数值表示确定为各位均为1。在一些实施例中,方法200还可以包括:如果第一数值数据的第二子表示超过预定阈值,则将第一数值数据的第二子表示设置为预定阈值。

图3是示出了根据本公开实施例的示例硬件布置300的框图。硬件布置300可包括处理器306(例如,中央处理器(cpu)、数字信号处理器(dsp)、微控制器单元(mcu)、神经网络处理器/加速器等)。处理器306可以是用于执行本文描述的流程的不同动作的单一处理单元或者是多个处理单元。布置300还可以包括用于从其他实体接收信号的输入单元302、以及用于向其他实体提供信号的输出单元304。输入单元302和输出单元304可以被布置为单一实体或者是分离的实体。

此外,布置300可以包括具有非易失性或易失性存储器形式的至少一个可读存储介质308,例如是电可擦除可编程只读存储器(eeprom)、闪存、和/或硬盘驱动器。可读存储介质308包括计算机程序指令310,该计算机程序指令310包括代码/计算机可读指令,其在由布置300中的处理器306执行时使得硬件布置300和/或包括硬件布置300在内的电子设备可以执行例如上面结合图1~2所描述的流程及其任何变形。

计算机程序指令310可被配置为具有例如计算机程序指令模块310a~310c架构的计算机程序指令代码。因此,在例如电子设备中使用硬件布置300时的示例实施例中,布置300的计算机程序指令中的代码包括:模块310a,用于确定第一数值数据的最高非零位。计算机程序指令中的代码还包括:模块310b,用于确定第一数值数据的次高非零位。计算机程序指令中的代码还包括:模块310c,用于至少基于最高非零位和次高非零位来生成第一数值数据的数值表示。

计算机程序指令模块实质上可以执行图1~2中所示出的流程中的各个动作,以模拟相应的硬件模块。换言之,当在处理器306中执行不同计算机程序指令模块时,它们可以对应于电子设备中的相同和/或不同硬件模块。

尽管上面结合图3所公开的实施例中的代码手段被实现为计算机程序指令模块,其在处理器306中执行时使得硬件布置300执行上面结合图1~2所描述的动作,然而在备选实施例中,该代码手段中的至少一项可以至少被部分地实现为硬件电路。

处理器可以是单个cpu(中央处理单元),但也可以包括两个或更多个处理单元。例如,处理器可以包括通用微处理器、指令集处理器和/或相关芯片组和/或专用微处理器(例如,专用集成电路(asic))。处理器还可以包括用于缓存用途的板载存储器。计算机程序指令可以由连接到处理器的计算机程序指令产品来承载。计算机程序指令产品可以包括其上存储有计算机程序指令的计算机可读介质。例如,计算机程序指令产品可以是闪存、随机存取存储器(ram)、只读存储器(rom)、eeprom,且上述计算机程序指令模块在备选实施例中可以用ue内的存储器的形式被分布到不同计算机程序指令产品中。

需要注意的是,在本文中被描述为通过纯硬件、纯软件和/或固件来实现的功能,也可以通过专用硬件、通用硬件与软件的结合等方式来实现。例如,被描述为通过专用硬件(例如,现场可编程门阵列(fpga)、专用集成电路(asic)等)来实现的功能,可以由通用硬件(例如,中央处理单元(cpu)、数字信号处理器(dsp))与软件的结合的方式来实现,反之亦然。

尽管已经参照本公开的特定示例性实施例示出并描述了本公开,但是本领域技术人员应该理解,在不背离所附权利要求及其等同物限定的本公开的精神和范围的情况下,可以对本公开进行形式和细节上的多种改变。因此,本公开的范围不应该限于上述实施例,而是应该不仅由所附权利要求来进行确定,还由所附权利要求的等同物来进行限定。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1