神经网络运算模块及方法与流程

文档序号:20082927发布日期:2020-03-13 05:52阅读:121来源:国知局
神经网络运算模块及方法与流程

本发明涉及神经网络领域,特别涉及一种神经网络运算模块及方法。



背景技术:

定点数是一种可以指定小数点位置的数据格式,我们通常用位宽来表示一个定点数的数据长度。例如,16位定点数的位宽就是16。对于给定位宽的定点数,可表示数据的精度和可表示的数字范围是此消彼长的,如果可以表示的精度越大,则可表示的数字范围就越小。如图1a所示,对于位宽为bitnum的定点数据格式,第一位为符号位,整数部分占x位,小数部分占s位,则该定点数据格式能够表示的最大定点精度s为2-s。该定点数据格式可以表示的范围为[neg,pos],其中pos=(2bitnum-1-1)*2-s,neg=-(2bitnum-1)*2-s

在神经网络运算中,数据可以用定点数据格式进行表示、运算。例如,在正向运算过程中,第l层的数据包括输入神经元x(l)、输出神经元y(l)、权重w(l)。在反向运算过程中,第l层的数据包括输入神经元梯度输出神经元梯度权重梯度可以将上面的数据均用定点数进行表示,也可以用定点数进行运算。

在神经网络的训练过程通常包括正向运算和反向运算两个步骤,在反向运算时,输入神经元梯度、权重梯度和输出神经元梯度所需要的精度可能会出现变化,可能随着训练的过程增大,如果定点数的精度不够,会导致运算结果出现较大误差,甚至会导致训练失败。



技术实现要素:

本发明实施例所要解决的技术问题在于神经网络运算过程中,输入神经元精度、权重精度或者输出神经元梯度精度不够,导致出现运算或训练的结果存在误差,本发明实施例提供一种神经网络运算模块及方法,动态调整输入神经元精度,权重精度和输出神经元梯度精度,降低了运算结果或训练结果的误差。

第一方面,本发明提供了一种神经网络运算模块,该神经网络运算模块用于进行多层神经网络的运算,包括:

存储单元,用于存储输入神经元精度、权重精度和输出神经元梯度精度;

控制器单元,用于从所述存储单元获取所述多层神经网络第l层的输入神经元精度sx(l)、权重精度sw(l)和输出神经元梯度精度其中,所述l为大于0的整数;根据所述输入神经元精度sx(l)、所述权重精度sw(l)和所述输出神经元梯度精度获取梯度更新精度t;当所述梯度更新精度t大于预设精度tr时,调整所述输入神经元精度sx(l)、权重精度sw(l)和输出神经元梯度精度以使所述梯度更新精度t与所述预设精度tr的差值的绝对值最小;

运算单元,用于根据调整后的输入神经元精度sx(l)和权重精度sw(l)来表示第l层的输出神经元和权重,根据调整的输出神经元梯度精度来表示运算得到的第l层输出神经元梯度,以进行后续运算。

在一种可行的实施例中,所述控制器单元根据所述输入神经元精度sx(l)、所述权重精度sw(l)和所述输出神经元梯度精度获取梯度更新精度t,具体包括:

所述控制器单元根据预设公式对所述输入神经元精度sx(l)、所述权重精度sw(l)和所述输出神经元梯度精度进行计算,以得到所述梯度更新精度t;

其中,所述第一预设公式为:

在一种可行的实施例中,所述控制器单元调整所述输入神经元精度sx(l)、权重精度sw(l)和输出神经元梯度精度包括:

所述控制器单元保持所述输入神经元精度sx(l)和所述权重精度sw(l)不变,减小所述输出神经元梯度精度

在一种可行的实施例中,所述控制器单元减小所述输出神经元梯度精度时,增加表示所述输出神经元梯度的定点数据格式的位宽。

在一种可行的实施例中,所述控制器单元增加所述输出神经元梯度精度后,所述控制器单元还用于:

判断所述输出神经元梯度以表示所述输出神经元梯度的定点数据格式时是否溢出;

当确定溢出时,增加表示所述输出神经元梯度的定点数据格式的位宽。

在一种可行的实施例中,所述控制器单元增加表示所述输出神经元梯度的定点数据格式的位宽,包括:

所述控制器单元按照第一预设步长n1增加所述表示所述输出神经元梯度的定点数据格式的位宽;

其中,所述第一预设步长n1为1、2、4、6、7、8或者其他正整数。

在一种可行的实施例中,所述控制器单元增加表示所述输出神经元梯度的定点数据格式的位宽,包括:

所述控制器单元按照2倍递增的方式增加所述表示所述输出神经元梯度的定点数据格式的位宽。

在一种可行的实施例中,所述控制器单元还用于:

根据机器学习的方法获取所述预设精度tr,或者;

根据第l-1层输出神经元的个数、学习率和批处理时的样本数量获取所述预设精度tr;且所述第l-1层输出神经元的个数和批处理时的样本数量越多以及学习率越高,所述预设精度tr越大。

第二方面,本发明实施例提供了一种神经网络运算模块,该神经网络运算模块用于进行多层神经网络的运算,包括:

存储单元,用于存储所述多层神经网络的输出神经元梯度;

控制器单元,用于从所述存储单元获取所述多层神经网络的第l层的输入神经元梯度;所述l为大于0的整数;获取所述第l层输出神经元梯度中绝对值小于第一预设阈值的输出神经元梯度的个数n1;根据所述个数n1和所述第l层输出神经元梯度的个数n2获取比例数据a,其中,a=n1/n2;当所述比例数据a大于第二预设阈值时,减小所述第l层输出神经元梯度精度

运算单元,用于根据减小后的输出神经元梯度精度表示第l层输出神经元梯度,以进行后续运算。

在一种可行的实施例中,所述控制器单元增大所述第l层输出神经元梯度精度时,增加表示所述第l层输出神经元梯度的定点数据格式的位宽。

在一种可行的实施例中,所述控制器单元减小所述第l层输出神经元梯度精度后,所述控制器单元还用于:

判断所述第l层输出神经元梯度以表示所述第l层输出神经元梯度的定点数据格式时是否溢出;

当确定溢出时,增加表示所述第l层输出神经元梯度的定点数据格式的位宽。

在一种可行的实施例中,所述增加表示所述第l层输出神经元梯度的定点数据格式的位宽,包括:

所述控制器单元按照第二预设步长n2增加所述表示所述第l层输出神经元梯度的定点数据格式的位宽。

在一种可行的实施例中,所述控制器单元增加表示所述第l层输出神经元梯度的定点数据格式的位宽包括:

所述控制,器单元按照2倍递增的方式增加所述表示所述第l层输出神经元梯度的定点数据格式的位宽。

第三方面,本发明实施例提供了一种神经网络运算方法,包括:

获取神经网络的第l层输入神经元精度sx(l)、权重精度sw(l)和输出神经元梯度精度

根据所述输入神经元精度sx(l)、所述权重精度sw(l)和所述输出神经元梯度精度计算得到梯度更新精度t;

当梯度更新精度t大于预设精度tr时,调整输入神经元精度sx(l)、权重精度sw(l)和输出神经元梯度以使所述梯度更新精度t与所述预设精度tr的差值的绝对值最小;

根据调整后的输入神经元精度sx(l)和权重精度sw(l)来表示第l层的输出神经元和权重;根据调整后的输出神经元梯度精度来表示运算得到的第l层输出神经元梯度,以进行后续运算。

在一种可行的实施例中,所述根据所述输入神经元精度sx(l)、所述权重精度sw(l)和所述输出神经元梯度精度计算得到梯度更新精度t,包括:

根据预设公式对所述输入神经元精度sx(l)、所述权重精度sw(l)和所述输出神经元梯度精度进行计算,以得到所述梯度更新精度t;

其中,所述预设公式为:

在一种可行的实施例中,所述调整所述输入神经元精度sx(l)、权重精度sw(l)和输出神经元梯度精度包括:

保持所述输入神经元精度sx(l)和所述权重精度sw(l)不变,减小所述输出神经元梯度精度

在一种可行的实施例中,所述减小所述输出神经元梯度精度时,增加表示所述输出神经元梯度的定点数据格式的位宽

在一种可行的实施例中,所述减小所述输出神经元梯度精度后,所述方法还包括:

判断所述输出神经元梯度以表示所述输出神经元梯度的定点数据格式时是否溢出;

当确定溢出时,增加表示所述输出神经元梯度的定点数据格式的位宽。

在一种可行的实施例中,所述增大表示所述输出神经元梯度的定点数据格式的位宽,包括:

按照第一预设步长n1增加所述表示所述输出神经元梯度的定点数据格式的位宽;

其中,所述第一预设步长n1为1、2、4、6、7、8或者其他正整数。

在一种可行的实施例中,所述增加表示所述输出神经元梯度的定点数据格式的位宽,包括:

按照2倍递增的方式增加所述表示所述输出神经元梯度的定点数据格式的位宽。

在一种可行的实施例中,所述方法还包括:

根据机器学习的方法获取所述预设精度tr,或者;

根据第l-1层输出神经元的个数、学习率和批处理时的样本数量获取所述预设精度tr;且所述第l-1层输出神经元的个数和批处理时的样本数量越多以及学习率越高,所述预设精度tr越大。

第四方面,本发明实施例提供了一种神经网络运算方法,包括:

获取所述多层神经网络的第l层的输入神经元梯度,所述l为大于0的整数;

获取所述第l层输出神经元梯度中绝对值小于第一预设阈值的输出神经元梯度的个数n1;

根据所述个数n1和所述第l层输出神经元梯度的个数n2获取比例数据a,其中,a=n1/n2;

当所述比例数据a大于第二预设阈值时,减小所述第l层输出神经元梯度精度

根据减小后的输出神经元梯度精度表示第l层输出神经元梯度,以进行后续运算。

在一种可行的实施例中,所述减小所述第l层输出神经元梯度精度时,增加表示所述第l层输出神经元梯度的定点数据格式的位宽。

在一种可行的实施例中,所述减小所述第l层输出神经元梯度精度后,所述方法还包括:

判断所述权重以表示所述第l层输出神经元梯度的定点数据格式时是否溢出;

当确定溢出时,增加表示所述第l层输出神经元梯度的定点数据格式的位宽。

在一种可行的实施例中,所述增加表示所述第l层输出神经元梯度的定点数据格式的位宽,包括:

按照第三预设步长n2增加所述表示所述第l层输出神经元梯度的定点数据格式的位宽。

在一种可行的实施例中,所述增加表示所述第l层输出神经元梯度的定点数据格式的位宽,包括:

按照2倍递增的方式增加所述表示所述第l层输出神经元梯度的定点数据格式的位宽。

可以看出,在本发明实施例的方案中,通过在神经网络运算过程中,动态调整(包括增大或者减小)输入神经元精度sx、权重精度sw和输出神经元梯度精度以在满足运算需求的同时,减少了运算结果的误差,提高了运算结果的精度。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1a是定点数据格式示意图;

图1b为本发明实施例提供的一种神经网络运算模块的结构示意图;

图2为本发明实施例提供的一种神经网络运算方法的流程示意图;

图3为本发明实施例提供的另一种神经网络运算方法的流程示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

需要说明的是,在本发明实施例中使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本发明。在本发明实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。

在神经网络运算的过程中,由于经过加减乘除和卷积等一系列运算,正向运算过程包括的输入神经元、权重和输出神经元和反向训练过程包括的输入神经元梯度、权重梯度和输出神经元梯度也会发生变化。以定点数据格式表示输入神经元、权重、输出神经元、输入神经元梯度、权重梯度和输出神经元梯度的精度有可能需要增大或者减小。如果输入神经元、权重、输出神经元、输入神经元梯度、权重梯度和输出神经元梯度的精度不够,会导致运算结果出现较大的误差,甚至会导致反向训练失败;如果输入神经元、权重、输出神经元、输入神经元梯度、权重梯度和输出神经元梯度的精度冗余,则会增大不必要的的运算开销,浪费运算资源。本申请提出了一种神经网络运算模块及方法,在进行神经网络运算的过程中动态调整上述数据的精度,以在满足运算需求的同时,减少了运算结果的误差,提高了运算结果的精度。

在本申请的实施例中,是通过调整上述数据的位宽来达到调整该数据精度的目的。比如在定点数据格式的精度无法满足运算的需求时,可以通过将定点数据格式中的小数部分的位宽增大,即增大图1a中的s,从而增大上述定点数据格式的精度;但是由于定点数据格式的位宽是固定的,当增大小数部分的位宽时,整数部分的位宽则会减小,故该定点数据格式能够表示的数据范围则会缩小,此时,可增大该定点数据格式的位宽,由于小数部分的位宽不变,因此增大该定点数据格式的位宽可以看作是增大该定点数据格式的整数部分的位宽,从而达到扩大定点数据格式能够表示数据的范围。

请参阅图1b,图1b是为本发明实施例提供的一种神经网络运算模块的结构示意图。该神经网络运算模块用于进行多层神经网络的运算。如图1b所示,该神经网络运算模块100包括:

存储单元101,用于存储输入神经元精度、权重精度和输出神经元梯度精度。

控制器单元102,用于获取从所述存储单元101获取所述多层神经网络第l层的输入神经元精度sx(l)、权重精度sw(l)和输出神经元梯度精度其中,所述l为大于0的整数;根据所述输入神经元精度sx(l)、所述权重精度sw(l)和所述输出神经元梯度精度获取梯度更新精度t;当所述梯度更新精度t大于预设精度tr时,调整所述输入神经元精度sx(l)、权重精度sw(l)和输出神经元梯度精度

在一种可行的实施例中,上述存储单元101还用于存储输入神经元、权重和输出神经元以及输出神经元梯度,上述控制器单元102从上述存储单元101中获取第l层输入神经元、权重和输出神经元梯度,该控制器单元102根据上述第l层输入神经元、权重和输出神经元梯度获取上述输入神经元精度sx(l)、权重精度sw(l)和输出神经元梯度精度

其中,用于表示输入神经元的定点数据个数的位宽和用于表示权重的定点数据格式的位宽为第一位宽,用于表示上述输出神经元梯度的定点数据格式的位宽为第二位宽。

可选地,上述第二位宽大于上述第一位宽。

进一步地,上述第二位宽为上述第一位宽的两倍,以便于电子计算机进行处理。

进一步地,上述第一位宽优选为8位,上述第二位宽优选为16位。

其中,上述控制器单元102可以根据经验进行预先设置预设精度tr;也可以第二预设公式,通过改变输入参数的方式获得与输入参数匹配的预设精度tr;还可以通过机器学习的方法获取tr。

可选地,上述控制器单元102根据学习率、batchsize(批处理时的样本数量)设置上述预设精度tr。

进一步地,如果该神经网络中存在参数共享层(如卷积层和循环神经网络层),则上述控制器单元102根据上一层输出神经元的个数以及batchsize、学习率来设置上述预设精度tr,即上一层的输出神经元的个数越高以及batchsize越大、学习率越高,上述预设精度tr越大。

具体地,上述控制器单元102获取上述输入神经元精度sx(l)、权重精度sw(l)和输出神经元梯度精度后,根据第一预设公式对上述输入神经元精度sx(l)、权重精度sw(l)和输出神经元梯度精度进行计算,以得到上述梯度更新精度t,其中,上述第一预设公式可以为:

其中,上述控制器单元102调整上述输入神经元精度sx(l)、权重精度sw(l)和输出神经元梯度精度包括:

上述控制器单元102保持上述输入神经元精度sx(l)和权重精度sw(l)不变,减小上述输出神经元梯度精度

需要指出的是,由于上述输出神经元梯度精度上述控制器单元102减小上述输出神经元梯度精度是指增加表示该输出神经元梯度的定点数据格式的小数部分位宽s1。

可选地,上述控制器单元102控制器单元根据tr-t的值按照第一预设步长n1增加上述表示权重的定点数据格式的小数部分位宽s1。

具体地,对于表示上述输出神经元梯度的定点数据格式的小数部分位宽s1,上述控制器单元102每次增加n1位,即小数部分的位宽为s1+n1,并得到输出神经元梯度精度再根据上述预设公式判断上述梯度更新精度t与上述预设精度tr的差值的绝对值是否变小;当确定该梯度更新精度t与上述预设精度tr的差值的绝对值变小时,上述控制器单元102继续对表示上述输出神经元梯度的定点数据格式的小数部分位宽增加n1,即位宽为s1+2*n1,并得到输出神经元梯度精度并继续判断上述梯度更新精度t与上述预设精度tr的差值的绝对值是否变小;若变小,则继续按照上述方法进行处理;若在第n次处理时上述梯度更新精度t与上述预设精度tr的差值的绝对值变大,上述控制器单元102则将第n-1次处理得到的位宽,即s1+(n-1)*n1作为表示上述输出神经元梯度的定点数据格式的小数部分的位宽,增加小数部分位宽后的输出神经元梯度精度为

可选地,上述第一预设步长n1为1、2、4、6、7、8或者其他正整数。

可选地,上述控制器单元102按照2倍递增的方式,增加表示上述输出神经元梯度的定点数据格式的小数部分位宽。

比如表示上述输出神经元梯度的定点数据格式的小数部分位宽为3,即权重的精度为2-3,则按照2倍递增的方式增加位宽后的表示上述输出神经元梯度的定点数据格式的小数部分位宽为6,即减小后的输出神经元梯度精度为2-6

在一种可行的实施例中,上述控制器单元102确定对表示上述输出神经元梯度的定点数据格式的小数部分位宽的增加幅度b后,上述控制器单元102分多次增加上述定点数据格式的小数部分位宽,比如上述控制器单元102分两次增加上述定点数据格式的小数部分位宽,第一次增加的幅度为b1,第二次增加的幅度为b2,且b=b1+b2。

其中,上述b1与b2可以相同或者不相同。

可选地,上述控制器单元102减小上述输出神经元梯度精度时,增加表示该输出神经元梯度的定点数据格式的位宽。

进一步地,由于增大上述输出神经元梯度精度是通过增加表示上述输出神经元梯度的定点数据格式的小数部分位宽,由于表示上述输出神经元梯度的定点数据格式的位宽不变,若当小数部分位宽增加时,则整数部分位宽减少,该定点数据格式表示的数据范围会缩小,因此在控制器单元102减小上述输出神经元梯度精度后,该控制器单元102增加上述定点数据格式的位宽,且该定点数据格式的位宽增加后,其整数部分的位宽保持不变,即整数部分位宽的增加值与小数部分位宽的增加值相同。

举例说明,上述定点数据格式的位宽为9,其中符号位的位宽为1,整数部分的位宽为5,小数部分的位宽为3,上述控制器单元102增加上述小数部分的位宽和整数部分的位宽后,小数部分的位宽为6,则整数部分的位宽为5,即增加上述小数部分的位宽,整数部分的位宽保持不变。

在一种可行的实施例中,上述控制器单元102减小上述输出神经元梯度精度后,该控制器单元102还用于:

判断所述输出神经元梯度以表示所述输出神经元梯度的定点数据格式时是否溢出;

当确定溢出时,增加表示所述输出神经元梯度的定点数据格式的位宽。

具体地,由上述相关描述可知,上述控制器单元102减小上述输出神经元梯度精度时,上述表示该输出神经元梯度的定点数据格式表示数据的范围会缩小,因此当上述控制器单元102减小上述输出神经元梯度精度后,判断上述输出神经元梯度以上述定点数据格式表示时是否溢出;当确定溢出时,上述控制器单元102增加上述定点数据格式的位宽,从而扩大上述定点数据格式表示数据的范围,使得上述输出神经元梯度以上述定点数据格式表示时不会溢出。

需要指出的是,上述控制器单元102增加上述定点数据格式的位宽具体是增加该定点数据格式的整数部分的位宽。

进一步地,上述控制器单元102增加所述表示上述输出神经元梯度的定点数据格式的位宽,包括:

上述控制器单元102按照第二预设步长n2增加所述表示所述输出神经元梯度的定点数据格式的位宽,其中,第二预设步长n2可为1、2、3、4、5、7、8或者其他正整数。

具体地,当确定增加上述定点数据格式的位宽时,上述控制器单元102每次增加该定点数据格式的位宽时的增加值为上述第二预设步长n2。

在一种可行的实施例中,上述控制器单元102增加上述表示上述输出神经元梯度的定点数据格式的位宽,包括:

上述控制器单元102按照2倍递增的方式增加上述表示上述输出神经元梯度的定点数据格式的位宽。

举例说明,上述定点数据格式除去符号位的位宽为8,则按照2倍递增的方式增加该定点数据格式的位宽后,该定点数据格式除去符号位的位宽为16;再次按照2倍递增的方式增加该定点数据格式的位宽后,该定点数据格式除去符号位的位宽为32。

在一种可行的实施例中,上述控制器单元102调整上述输入神经元精度sx(l)、权重精度sw(l)和输出神经元梯度精度包括

上述控制器单元102减小上述输入神经元精度sx(l)和/或上述输出神经元梯度精度保持上述权重精度sw(l)不变,或者;

上述控制器单元102减小上述输入神经元精度sx(l),增大上述输出神经元梯度精度保持上述权重精度sw(l)不变,且上述输入神经元精度sx(l)减小的幅度大于上述输出神经元梯度精度的增大幅度,或者;

上述控制器单元102增大上述输出神经元梯度精度减小上述输入神经元精度sx(l),保持上述权重精度sw(l)不变,且上述输出神经元梯度精度增大的幅度小于上述输入神经元精度sx(l)的减小幅度,或者;

上述控制器单元102增大或减小上述输入神经元精度sx(l)、权重精度sw(l)和输出神经元梯度精度中的一个或者任意组合,以使上述梯度更新精度t与上述预设精度tr的差值的绝对值最小。

在此需要说明的是,上述控制器单元102对上述权重精度sw(l)、上述输入神经元精度sx(l)和输出神经元梯度精度中的任意一个的进行增大操作的具体过程可参见上述控制器单元102增大上述的相关操作,在此不再叙述。

按照上述方法调整上述输入神经元精度sx(l),权重精度sw(l)和输出神经元梯度精度后,上述运算单元103在运算过程中,按照调整后的输入神经元精度sx(l),权重精度sw(l)和输出神经元梯度精度以定点数据格式形式表示上述第l层的输入神经元、权重和输出神经元梯度,然后进行后续的运算。

需要说明的是,上述控制器单元102计算上述梯度更新精度t的频率可以根据需求灵活设置。

其中,上述控制器单元102可根据神经网络训练过程中的训练迭代次数调整计算上述梯度更新精度t的频率。

可选地,上述控制器单元102在神经网络训练过程中,每迭代一轮就重新计算上述梯度更新精度t;或者每迭代预设次数就重新计算上述梯度更新精度t;或者根据上述梯度更新精度t的变化进行设置上述频率。

可选地,上述控制器单元102根据神经网络训练中的训练迭代次数来设置计算上述梯度更新精度t的频率。

运算单元103,用于根据增大或者减小后的输入神经元精度sx(l)和权重精度sw(l)来表示第l层的输入神经元和权重;根据增大或者减小后的输出神经元梯度精度来表示运算得到的第l层输出神经元梯度。

换句话说,上述运算单元,用于增大或者减小输入神经元精度sx(l)的定点数据格式来表示上述第l层输入神经元,用增大或者减小权重精度sw(l)的定点数据格式来表示上述第l层的权重,用增大或者减小输出神经元梯度精度的定点数据格式来表示上述第l层的输出神经元梯度,以进行后续的运算。

通过在神经网络运算过程中,动态调整(包括增大或者减小)上述输入神经元精度sx(l)、权重精度sw(l)和输出神经元梯度精度以在满足运算需求的同时,减少了运算结果的误差和运算开销,节省了运算资源。

在另一个可选的实施例中,上述控制器单元102获取上述多层神经网络的第l层输出神经元梯度;。

在一种可行的实施例中,上述控制器单元102获取第l层的输出神经元和第l-1层的输出神经元,然后根据上述第l层的输出神经元和第l-1层的输出神经元获取上述第l层输出神经元梯度。

上述控制器单元102获取输出神经元梯度中绝对值小于第一预设阈值的输出神经元梯度的比例数据a。

可选地,上述第一预设阈值可为0,0.01,0.05,0.1,0.12,0.05或者其他值。

具体地,上述控制器单元102获取上述第l层输出神经元梯度后,获取该第l层输出神经元梯度中绝对值小于上述第一预设阈值的梯度值的个数n1,然后根据该个数n1和上述第l层输出神经元梯度的个数n2获取上述比例数据a,即a=n1/n2。

可选地,上述比例数据可为50%、60%、65%、70%、80%、85%、90%或者其他值。

可选地,上述比例数据为80%。

当比例数据a大于第二预设阈值时,控制器单元102减小上述第l层输出神经元梯度精度

在一种可行的实施例中,上述控制器单元102减小上述第l层输出神经元梯度精度时,增加表示上述第l层输出神经元梯度的定点数据格式的位宽。

在一种可行的实施例中,上述控制器单元102减小上述第l层输出神经元梯度精度后,上述控制器单元102还用于:

判断上述第l层输出神经元梯度以表示上述第l层输出神经元梯度的定点数据格式时是否溢出;

当确定溢出时,增加表示上述第l层输出神经元梯度的定点数据格式的位宽。

在一种可行的实施例中,上述控制器单元102增加表示上述第l层输出神经元梯度的定点数据格式的位宽,包括:

上述控制器单元102按照第三预设步长n3增加所述表示上述第l层输出神经元梯度的定点数据格式的位宽。

在一种可行的实施例中,上述控制器单元102增加表示上述第l层输出神经元梯度的定点数据格式的位宽包括:

上述控制器单,元102按照2倍递增的方式增加所述表示上述第l层输出神经元梯度的定点数据格式的位宽。

在此需要说明的是,上述控制器单元102减小上述输出神经元梯度精度的具体过程可见上述相关描述,在此不再叙述。

按照上述方法调整上述输出神经元梯度精度后,上述运算单元103在运算过程中,按照调整后的输出神经元梯度精度以定点数形式表示上述第l层的输出神经元梯度,然后进行后续的运算。

通过在神经网络运算过程中根据输出神经元梯度来调整其精度的大小,从而减小输出神经元的误差,进而保证训练正常进行。

参见图2,图2为本发明实施例提供的一种神经网络运算方法的流程示意图,如图2所示,该方法包括:

s201、神经网络运算模块获取神经网络的第l层输入神经元精度、权重精度和输出神经元梯度精度。

其中,上述输入神经元精度sx(l)、权重精度sw(l)和输出神经元梯度精度的取值可以相同,也可以是部分相同或者两两互不相等。

其中,上述神经网络为多层神经网络,上述第l层输入神经元精度sx(l)、权重精度sw(l)和输出神经元梯度精度分别为上述多层神经网络的任一层的输入神经元精度、权重精度和输出神经元梯度精度。

在一种可行的实施例中,上述神经网络运算模块获取上述第l层的输入神经元、权重和输出神经元;根据上述第l层的输入神经元、权重和输出神经元,获取上述第l层输入神经元精度sx(l)、权重精度sw(l)和输出神经元梯度精度

s202、神经网络运算模块根据第l层输入神经元精度、权重精度和输出神经元梯度精度,计算得到梯度更新精度t。

具体地,上述神经网络运算模块根据第一预设公式对上述输入神经元精度sx(l)、权重精度sw(l)和输出神经元梯度精度进行计算,以得到上述梯度更新精度t。

其中,上述第一预设公式为

s203、当梯度更新精度t大于预设精度tr时,神经网络运算模块调整第l层输入神经元精度、权重精度和输出神经元梯度,以使梯度更新精度t与预设精度tr的差值的绝对值最小。

其中,用于表示输入神经元的定点数据格式和用于表示权重的定点数据格式的位宽为第一位宽,用于表示输出神经元梯度的定点数据格式的位宽为第二位宽。

可选地,上述第二位宽大于上述第一位宽。

进一步地,上述第二位宽为上述第一位宽的两倍,以便于电子计算机进行处理。

进一步地,上述第一位宽优选为8位,上述第二位宽优选为16位。

其中,上述预设精度tr可以根据经验进行预先设置;也可以第二预设公式,通过改变输入参数的方式获得与输入参数匹配的tr;还可以通过机器学习的方法获取tr。

可选地,上述神经网络运算模块根据学习率、batchsize(批处理时的样本数量)设置上述预设精度tr。

进一步地,如果该神经网络中存在参数共享层(如卷积层和循环神经网路层),则根据上一层输出神经元的个数以及batchsize、学习率来设置上述预设精度tr,即上一层的输出神经元的个数越高以及batchsize越大、学习率越高,预设精度tr越大。

其中,上述神经网络运算模块调整上述输入神经元精度sx(l)、权重精度sw(l)和输出神经元梯度精度包括:

保持上述输入神经元精度sx(l)和权重精度sw(l)不变,增大上述输出神经元梯度精度

需要指出的是,上述神经网络运算模块减小上述输出神经元梯度精度是指增加表示该输出神经元梯度的定点数据格式的小数部分位宽s1。

可选地,上述神经网络运算模块控制器单元根据tr-t的值按照第一预设步长n1增大上述表示输出神经元梯度的定点数据格式的小数部分位宽s1。

具体地,对于表示上述输出神经元梯度的定点数据格式的小数部分位宽s1,上述神经网络运算模块每次增加n1,即小数部分的位宽为s1+n1,并得到输出神经元梯度精度再根据上述预设公式判断上述梯度更新精度t与上述预设精度tr的差值的绝对值是否变小;当确定该梯度更新精度t与上述预设精度tr的差值的绝对值变小时,上述神经网络运算模块继续对表示上述输出神经元梯度的定点数据格式的小数部分位宽增加n1,即位宽为s1+2*n1,并得到输出神经元梯度精度并继续判断上述梯度更新精度t与上述预设精度tr的差值的绝对值是否变小;若变小,则继续按照上述方法进行处理;若在第n次处理时上述梯度更新精度t与上述预设精度tr的差值的绝对值变大,上述神经网络运算模块则将第n-1次处理得到的位宽,即s1+(n-1)*n1作为表示上述输出神经元梯度的定点数据格式的小数部分的位宽,增加小数部分位宽后的输出神经元梯度精度为

可选地,上述第一预设步长n1为1、2、4、6、7、8或者其他正整数。

可选地,上述神经网络运算模块按照2倍递增的方式,增加表示上述输出神经元梯度的定点数据格式的小数部分位宽。

比如表示上述输出神经元梯度的定点数据格式的小数部分位宽为3,即输出神经元梯度精度为2-3,则按照2倍递增的方式增加后的表示上述输出神经元梯度的定点数据格式的小数部分位宽为6,即减小后的输出神经元梯度精度为2-6

在一种可行的实施例中,上述神经网络运算模块确定对表示上述输出神经元梯度的定点数据格式的小数部分位宽的增加幅度b后,上述神经网络运算模块分多次增大上述定点数据格式的小数部分位宽,比如上述神经网络运算模块分两次次增大上述定点数据格式的小数部分位宽,第一次增加幅度为b1,第二次增加度为b2,且b=b1+b2。

其中,上述b1与b2可以相同或者不相同。

可选地,上述神经网络运算模块减小上述输出神经元梯度精度时,增加表示该权重的定点数据格式的位宽。

进一步地,由于减小上述输出神经元梯度精度sw(l)是通过增加表示上述权重的定点数据格式的小数部分位宽,由于表示上述输出神经元梯度的定点数据格式的位宽不变,若当小数部分位宽增加时,则整数部分位宽减少,该定点数据格式表示的数据范围会缩小,因此在神经网络运算模块减小上述输出神经元梯度精度sw(l)后,该神经网络运算模块增加上述定点数据格式的位宽,且该定点数据格式的位宽增加后,其整数部分的位宽保持不变,即整数部分位宽的增加值与小数部分位宽的增加值相同。

举例说明,上述定点数据格式的位宽为9,其中符号位的位宽为1,整数部分的位宽为5小数部分的位宽为3,上述控制器单元102增加上述小数部分的位宽和整数部分的位宽后,小数部分的位宽为6,则整数部分的位宽为5,即增加上述小数部分的位宽,整数部分的位宽保持不变。

在一种可行的实施例中,上述神经网络运算模块减小上述输出神经元梯度精度后,该神经网络运算模块还用于:

判断所述输出神经元梯度以表示所述输出神经元梯度的定点数据格式时是否溢出;

当确定溢出时,增加表示所述输出神经元梯度的定点数据格式的位宽。

具体地,由上述相关描述可知,上述神经网络运算模块减小上述输出神经元梯度的精度时,上述表示该输出神经元梯度的定点数据格式表示数据的范围会缩小,因此当上述神经网络运算模块减小上述输出神经元梯度的精度后,判断上述输出神经元梯度以上述定点数据格式表示时是否溢出;当确定溢出时,上述神经网络运算模块增加上述定点数据格式的位宽,从而扩大上述定点数据格式表示数据的范围,使得上述输出神经元梯度以上述定点数据格式表示时不会溢出。

需要指出的是,上述神经网络运算模块增加上述定点数据格式的位宽具体是增加该定点数据格式的整数部分的位宽。

进一步地,上述神经网络运算模块增加所述表示上述输出神经元梯度的定点数据格式的位宽,包括:

上述神经网络运算模块按照第二预设步长n2增加所述表示所述输出神经元梯度的定点数据格式的位宽,其中,第二预设步长n2可为1、2、3、4、5、7、8或者其他正整数。

具体地,当确定增加上述定点数据格式的位宽时,上述神经网络运算模块每次增加该定点数据格式的位宽时的增加值为上述第二预设步长n2。

在一种可行的实施例中,上述神经网络运算模块增加上述表示上述输出神经元梯度的定点数据格式的位宽,包括:

上述神经网络运算模块按照2倍递增的方式增加上述表示上述输出神经元梯度的定点数据格式的位宽。

举例说明,上述定点数据格式除去符号位的位宽为8,则按照2倍递增的方式增加该定点数据格式的位宽后,该定点数据格式除去符号位的位宽为16;再次按照2倍递增的方式增大该定点数据格式的位宽后,该定点数据格式除去符号位的位宽为32。

在一种可行的实施例中,上述神经网络运算模块调整上述输入神经元精度sx(l)、权重精度sw(l)和输出神经元梯度精度包括:

减小上述输入神经元精度sx(l)和/或上述输出神经元梯度精度保持上述权重精度sw(l)不变,或者;

减小上述输入神经元精度sx(l),增大上述输出神经元梯度精度保持上述权重精度sw(l)不变,且上述输入神经元精度sx(l)减小的幅度大于上述输出神经元梯度精度的增大幅度,或者;

增大上述输出神经元梯度精度减小上述输入神经元精度sx(l),保持上述权重精度sw(l)不变,且上述输出神经元梯度精度增大的幅度小于上述输入神经元精度sx(l)的减小幅度,或者;

增大或减小上述输入神经元精度sx(l)、权重精度sw(l)和输出神经元梯度精度中的一个或者任意组合,以使上述梯度更新精度t与上述预设精度tr的差值的绝对值最小。

在此需要说明的是,上述神经网络运算模块对上述权重精度sw(l)、上述输入神经元精度sx(l)和输出神经元梯度精度中的任意一个的进行增大操作的具体过程可参见上述神经网络运算模块增大上述的相关操作,在此不再叙述。

s204、神经网络运算模块根据调整后的输入神经元精度和权重精度来表示第l层的输出神经元和权重;根据调整后的输出神经元梯度精度来表示运算得到的第l层输出神经元梯度,以进行后续运算。

换句话说,上述运算单元,用于增大或者减小输入神经元精度sx(l)的定点数据格式来表示上述第l层输入神经元,用增大或者减小权重精度sw(l)的定点数据格式来表示上述第l层的权重,用增大或者减小输出神经元梯度精度的定点数据格式来表示上述第l层的输出神经元梯度,以进行后续的运算。

按照上述方法调整上述输入神经元精度sx(l),权重精度sw(l)和输出神经元梯度精度后,,上述神经网络运算模块重新计算上述梯度更新精度t;当该梯度更新精度不再大于上述预设精度tr时,上述神经网络运算模块参照上述步骤s203的方式减小上述输入神经元精度sx(l),权重精度sw(l)和输出神经元梯度精度

需要说明的是,上述神经网络运算模块计算上述梯度更新精度t的频率可以根据需求灵活设置。

其中,上述神经网络运算模块可根据神经网络训练过程中的训练迭代次数调整计算上述梯度更新精度t的频率。

可选地,上述神经网络运算模块在神经网络训练过程中,每迭代一轮就重新计算上述梯度更新精度t;或者每迭代预设次数就重新计算上述梯度更新精度t;或者根据上述梯度更新精度t的变化进行设置上述频率。

可选地,上述神经网络运算模块根据神经网络训练中的训练迭代次数来设置计算上述梯度更新精度t的频率。

可以看出,在本发明实施例的方案中,在神经网络运算过程中,动态调整上述输入神经元精度sx、权重精度sw和输出神经元梯度精度以在满足运算需求的同时,减少了运算结果的误差和运算开销,节省了运算资源。

参见图3、图3为本发明实施例提供的一种神经网络运算方法的流程示意图。如图3所示,该方法包括:

s301、神经网络运算模块获取第l层输出神经元梯度。

在一种可行的实施例中,上述神经网络运算模块获取第l层的输出神经元和第l-1层的输出神经元,然后根据上述第l层的输出神经元和第l-1层的输出神经元获取上述第l层输出神经元梯度。

s302、神经网络运算模块获取第l层输出神经元梯度中绝对值小于第一预设阈值的比例数据a。

可选地,上述第一预设阈值可为0,0.01,0.05,0.1,0.12,0.05或者其他值。

具体地,上述神经网络运算模块获取上述第l层输出神经元梯度后,获取该第l层输出神经元梯度中绝对值小于上述第一预设阈值的梯度值的个数n1,然后根据该个数n1和上述第l层输出神经元梯度的个数n2获取上述比例数据a,即a=n1/n2。

可选地,上述比例数据可为50%、60%、65%、70%、80%、85%、90%或者其他值。

可选地,上述比例数据为80%。

s303、当比例数据a大于第二预设阈值时,神经网络运算模块减小上述第l层输出神经元梯度的精度。

在一种可行的实施例中,上述神经网络运算模块减小上述第l层输出神经元梯度精度时,增加表示上述第l层输出神经元梯度的定点数据格式的位宽。

在一种可行的实施例中,上述神经网络运算模块减小上述第l层输出神经元梯度精度后,上述神经网络运算模块还用于:

判断上述第l层输出神经元梯度以表示上述第l层输出神经元梯度的定点数据格式时是否溢出;

当确定溢出时,增加表示上述第l层输出神经元梯度的定点数据格式的位宽。

在一种可行的实施例中,上述神经网络运算模块增加表示上述第l层输出神经元梯度的定点数据格式的位宽,包括:

按照第三预设步长n3增加所述表示上述第l层输出神经元梯度的定点数据格式的位宽。

在一种可行的实施例中,上述神经网络运算模块增加表示上述第l层输出神经元梯度的定点数据格式的位宽,包括:

按照2倍递增的方式增加所述表示上述第l层输出神经元梯度的定点数据格式的位宽。

在此需要说明的是,上述控制器单元102减小上述输出神经元梯度精度的具体过程可见上述相关描述,在此不再叙述。

按照上述方法调整上述输出神经元梯度精度后,上述神经网络运算模块在运算过程中,按照调整后的输出神经元梯度精度以定点数据格式表示上述第l层的输出神经元梯度,然后进行后续的运算。

可以看出,在本发明实施例的方案中,在神经网络运算过程中根据输出神经元梯度来调整其精度的大小,从而减小输出神经元的误差,进而保证训练正常进行。

本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(read-onlymemory,rom)或随机存储记忆体(randomaccessmemory,ram)等。

以上所揭露的仅为本发明一种较佳实施例而已,当然不能以此来限定本发明之权利范围,本领域普通技术人员可以理解实现上述实施例的全部或部分流程,并依本发明权利要求所作的等同变化,仍属于发明所涵盖的范围。

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