一种神经网络的量化参数确定方法及相关产品
技术领域
本披露的实施例涉及一种神经网络的量化参数确定方法及相关产品。
背景技术
神经网络(neural network,NN)是一种模仿生物神经网络的结构和功能的数学模型或计算模型。神经网络通过样本数据的训练,不断修正网络权值和阈值使误差函数沿负梯度方向下降,逼近期望输出。它是一种应用较为广泛的识别分类模型,多用于函数逼近、模型识别分类、数据压缩和时间序列预测等。
在实际运用中,神经网络的数据常用32Bit,现有的神经网络的数据占用的比特位较多,虽然确保了精度,但是需要较高的存储空间以及处理带宽,提高了成本。
发明内容
为了解决上述所述的技术问题,本披露提出用于调整数据位宽的方法及相关产品。
为实现上述目的,本披露提供一种用于调整数据位宽的方法,其特征在于,所述方法包括:
获取用于针对待量化数据执行量化处理的数据位宽,所述数据位宽指示所述待量化数据在经过所述量化处理后的量化后数据的位宽;
基于所述数据位宽,针对一组待量化数据执行量化处理,以将所述一组待量化数据转换至一组量化后数据,所述一组量化后数据具有所述数据位宽;
比较所述一组待量化数据和所述一组量化后数据,确定与所述数据位宽相关联的量化误差;以及
基于确定的所述量化误差来调整所述数据位宽。
为实现上述目的,本披露提供调整数据位宽的装置,包括存储器及处理器,所述存储器上存储有可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述所述方法的步骤。
为实现上述目的,本披露提供一种计算机可读存储介质,其上存储有计算机程序,其中,所述计算机程序被处理器执行时实现上述所述的方法的步骤。
为实现上述目的,本披露提供一种调整数据位宽的设备,所述设备包括:
获取单元,用于获取用于针对待量化数据执行量化处理的数据位宽,所述数据位宽指示所述待量化数据在经过所述量化处理后的量化后数据的位宽;
量化单元,用于基于所述数据位宽,针对一组待量化数据执行量化处理,以将所述一组待量化数据转换至一组量化后数据,所述一组量化后数据具有所述数据位宽;
确定单元,用于比较所述一组待量化数据和所述一组量化后数据,确定与所述数据位宽相关联的量化误差;以及
调整单元,用于基于确定的所述量化误差来调整所述数据位宽。
在神经网络运算过程中,量化时利用本披露的技术方案确定数据位宽,该数据位宽用于人工智能处理器对神经网络运算过程中的数据进行量化,将高精度数据转换为低精度定点数,可以减少神经网络运算过程中涉及的数据存储所有的空间大小。例如:float32转化为fix8可以将模型参数减少4倍。由于数据存储空间变小,使得神经网络部署时使用更小的空间,使得人工智能处理器芯片上的片上内存可以容纳更多的数据,减少了人工智能处理器芯片访存数据,提高计算性能。
附图说明
为了更清楚地说明本披露实施例的技术方案,下面将对实施例的附图作简单地介绍,显而易见地,下面描述中的附图仅仅涉及本披露的一些实施例,而非对本披露的限制。
图1为神经网络结构示意图;
图2为本披露提出的一种神经网络的量化参数确定方法流程图;
图3为对称的定点数表示示意图;
图4为引入偏移量的定点数表示示意图;
图5A为训练过程中神经网络的权值数据变动幅度曲线图之一;
图5B为训练过程中神经网络的权值数据变动幅度曲线图之二;
图6为确定目标迭代间隔的方法流程图之一;
图7为确定目标迭代间隔的方法流程图之二;
图8A为确定目标迭代间隔的方法流程图之三;
图8B示出本披露一实施例中数据位宽调整方法的流程图;
图8C示出本披露另一实施例中数据位宽调整方法的流程图;
图8D示出本披露又一实施例中数据位宽调整方法的流程图;
图8E示出本披露再一实施例中数据位宽调整方法的流程图;
图8F示出根据本披露实施例的神经网络量化方法的流程图;
图8G示出根据本披露实施例的神经网络量化方法的流程图;
图8H示出根据本披露实施例的神经网络量化方法的流程图;
图8I示出根据本披露实施例的神经网络量化方法的流程图;
图8J示出根据本披露实施例的神经网络量化方法的流程图;
图8K示出本披露一实施例的量化参数调整方法的流程图;
图8L示出本披露一实施例的待量化数据在运算过程中的变动趋势图;
图8M示出本披露一实施例的参数调整方法中目标迭代间隔的确定方法的流程图;
图8N示出本披露一实施例中点位置的变动幅度的确定方法的流程图;
图8O示出本披露一实施例中第二均值的确定方法的流程图;
图8P示出本披露另一实施例中第二均值的确定方法的流程图;
图8Q示出本披露另一实施例的量化参数调整方法的流程图;
图8R示出本披露一实施例的量化参数调整方法中调整量化参数的流程图;
图8S示出本披露另一实施例的参数调整方法中目标迭代间隔的确定方法的流程图;
图8T示出本披露又一实施例的参数调整方法中目标迭代间隔的确定方法的流程图;
图8U示出本披露又一实施例的量化参数调整方法的流程图;
图8V示出本披露再一实施例的量化参数调整方法的流程图;
图9为本披露提出的一种神经网络的量化参数确定装置的硬件配置的框图;
图10为本披露提出的神经网络的量化参数确定装置应用于人工智能处理器芯片的应用示意图;
图11为本披露提出的一种神经网络的量化参数确定设备的功能框图;
图12为本披露实施例的板卡的结构框图。
为了解决神经网络量化的问题,我们提出了如下的方案(201910505239.7)包括附图2-1至图2-31。
图2-1示出根据本披露实施例的神经网络量化方法的流程图。
图2-2示出根据本披露实施例的神经网络量化方法的流程图。
图2-3示出根据本披露实施例的神经网络量化方法的流程图。
图2-4示出根据本披露实施例的神经网络量化方法的流程图。
图2-5示出根据本披露实施例的神经网络量化方法中量化参数不包括偏移量时,量化前后的数据对应示意图。
图2-6示出根据本披露实施例的神经网络量化方法的流程图。
图2-7示出根据本披露实施例的神经网络量化方法中量化参数包括偏移量时,量化前后的数据对应示意图。
图2-8示出根据本披露实施例的神经网络量化方法的流程图。
图2-9示出根据本披露实施例的神经网络量化方法的流程图。
图2-10示出根据本披露实施例的神经网络量化方法的流程图。
图2-11示出根据本披露实施例的神经网络量化方法的流程图。
图2-12示出根据本披露实施例的神经网络量化方法的流程图。
图2-13示出根据本披露实施例的神经网络量化方法的流程图。
图2-14示出根据本披露实施例的神经网络量化方法的流程图。
图2-15示出根据本披露实施例的神经网络量化方法的流程图。
图2-16示出根据本披露实施例的神经网络量化方法的流程图。
图2-17示出根据本披露实施例的神经网络量化方法的流程图。
图2-18示出根据本披露实施例的神经网络量化方法的流程图。
图2-19示出根据本披露实施例的神经网络量化方法的流程图。
图2-20示出根据本披露实施例的神经网络量化方法的流程图。
图2-21示出根据本披露实施例的神经网络量化方法的流程图。
图2-22示出根据本披露实施例的神经网络量化方法的流程图。
图2-23示出根据本披露实施例的神经网络量化方法的流程图。
图2-24示出根据本披露实施例的神经网络量化方法的流程图。
图2-25示出根据本披露实施例的神经网络量化方法的流程图。
图2-26示出根据本披露实施例的神经网络量化装置的示意图。
图2-27示出根据本披露实施例的神经网络量化装置的示意图。
图2-28示出根据本披露实施例的神经网络量化装置的示意图。
图2-29示出根据本披露实施例的神经网络量化装置的示意图。
图2-30示出根据本披露实施例的神经网络量化装置的示意图。
图2-31示出根据本披露实施例的板卡的结构框图。
为了解决量化参数调整的问题,我们提出了如下的方案(201910528537.8)包括附图3-1至图3-25。
图3-1示出本披露一实施例的量化参数调整方法的应用环境示意图;
图3-2示出本披露一实施例的待量化数据和量化数据的对应关系示意图;
图3-3示出本披露一实施例的待量化数据的转换示意图;
图3-4示出本披露一实施例的量化参数调整方法的流程图;
图3-5示出本披露一实施例的待量化数据在运算过程中的变动趋势图;
图3-6示出本披露一实施例的参数调整方法中目标迭代间隔的确定方法的流程图;
图3-7示出本披露一实施例中点位置的变动幅度的确定方法的流程图;
图3-8示出本披露一实施例中第二均值的确定方法的流程图;
图3-9示出本披露一实施例中数据位宽调整方法的流程图;
图3-10示出本披露另一实施例中数据位宽调整方法的流程图;
图3-11示出本披露又一实施例中数据位宽调整方法的流程图;
图3-12示出本披露再一实施例中数据位宽调整方法的流程图;
图3-13示出本披露另一实施例中第二均值的确定方法的流程图;
图3-14示出本披露另一实施例的量化参数调整方法的流程图;
图3-15示出本披露一实施例的量化参数调整方法中调整量化参数的流程图;
图3-16示出本披露另一实施例的参数调整方法中目标迭代间隔的确定方法的流程图;
图3-17示出本披露又一实施例的参数调整方法中目标迭代间隔的确定方法的流程图;
图3-18示出本披露又一实施例的量化参数调整方法的流程图;
图3-19示出本披露再一实施例的量化参数调整方法的流程图;
图3-20示出本披露一实施例的量化参数调整装置的结构框图;
图3-21示出本披露一实施例的量化参数调整装置的结构框图;
图3-22示出本披露一实施例的量化参数调整装置的结构框图;
图3-23示出本披露一实施例的量化参数调整装置的结构框图;
图3-24示出本披露一实施例的量化参数调整装置的结构框图;
图3-25示出根据本披露实施例的板卡的结构框图。
具体实施方式
下面将结合本披露实施例中的附图,对本披露实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本披露一部分实施例,而不是全部的实施例。基于本披露中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本披露保护的范围。
应当理解,本披露的条款、说明书及附图中的术语“第一”、“第二”、“第三”和“第四”等是用于区别不同对象,而不是用于描述特定顺序。本披露的说明书和条款书中使用的术语“包括”和“包含”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。
还应当理解,在此本披露说明书中所使用的术语仅仅是出于描述特定实施例的目的,而并不意在限定本披露。如在本披露说明书和条款书中所使用的那样,除非上下文清楚地指明其它情况,否则单数形式的“一”、“一个”及“该”意在包括复数形式。还应当进一步理解,在本披露说明书和条款书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。
如在本说明书和条款书中所使用的那样,术语“如果”可以依据上下文被解释为“当...时”或“一旦”或“响应于确定”或“响应于检测到”。类似地,短语“如果确定”或“如果检测到[所描述条件或事件]”可以依据上下文被解释为意指“一旦确定”或“响应于确定”或“一旦检测到[所描述条件或事件]”或“响应于检测到[所描述条件或事件]”。
技术术语定义:
浮点数:IEEE浮点标准用V=(-1)∧sign*mantissa*2∧E的形式表示一个数。其中,sign为符号位,0表示正数,1代表负数;E表示阶码,对浮点数进行加权,权值是2的E次幂(可能是负数次幂);mantissa表示尾数,mantissa是一个二进制小数,其范围是1~2-ε,或者是0-ε。浮点数表示在计算机中的表示分为三个字段,分别对这些字段进行编码:
(1)一个单独的符号位s直接编码符号s。
(2)k位的阶码字段编码阶码,exp=e(k-1)......e(1)e(0)。
(3)n位的小数字段mantissa,编码尾数。但编码结果依赖阶码阶段是否全为0。
定点数:由共享指数(exponent)、符号位(sign)、尾数(mantissa)三部分构成。其中,共享指数是说指数在需要量化的一个实数集合内共享;符号位标志了定点数的正负。尾数决定了定点数的有效数字位数,即精度。以8-bit定点数类型为例,其数值计算方法为:
value=(-1)
sign×(mantissa)×2
(exponent-127)
二进制小数:任意十进制数都可以用公式∑j*10
i表示。例如十进制数12.34,以公 式1表示为:12.34=1*10
1+2*10
0+3*10
-1+4*10
-2,小数点的左边计为10的正次幂,小数点的右边计为10的负次幂。同理,二进制小数也可以用这种方式表达,小数点左边为2的正次幂,小数点的右边计为2的负次幂,十进制小数5.75可用二进制小数101.11表示,该二进制小数表示为5.75=1*2
2+0*2
1+1*2
0+1*2
-1+1*2
-2。
溢出:在定点运算器中,数的表示有一定的范围。在运算过程中。若数的大小超出了定点数能表示的范围,称为“溢出”。
KL(Kullback–Leibler divergence)散度:又称为相对熵(relative entropy)、信息散度(information divergence)、信息增益(information gain)。KL散度是两个概率分布P和Q之间差别的非对称性的度量。KL散度是用来度量使用基于Q的编码来编码来自P的样本平均所需的额外的比特个数。典型情况下,P表示数据的真实分布,Q表示数据的理论分布、模型分布、或P的近似分布。
数据位宽:数据用多少个比特位来表示。
量化:将以往用32bit或者64bit表达的高精度数转换成占用较少内存空间的定点数的过程,高精度数转换为定点数的过程就会在精度上引起一定的损失。
下面结合附图,对本披露实施例提供的一种神经网络的量化参数确定方法及相关产品的具体实施方式进行详细说明。
神经网络(neural network,NN)是一种模仿生物神经网络的结构和功能的数学模型,神经网络由大量的神经元连接进行计算。因此,神经网络是一种计算模型,由大量的节点(或称“神经元”)相互的连接构成。每个节点代表一种特定的输出函数,称为激活函数(activation function)。每两个神经元之间的连接都代表一个通过该连接信号的加权值,称之为权值,这相当于神经网络的记忆。神经网络的输出则依神经元之间的连接方式以及权值和激活函数的不同而不同。在神经网络中,神经元是神经网络的基本单位。它获得一定数量的输入和一个偏置,当信号(值)到达时会乘以一个权值。连接是将一个神经元连接到另一层或同一层的另一个神经元,连接伴随着与之相关联的权值。另外,偏置是神经元的额外输入,它始终为1,并具有自己的连接权值。这确保即使所有的输入都为空(全部为0),神经元也会激活。
在应用中,如果不对神经网络中的神经元应用一个非线性函数,神经网络只是一个线性函数而已,那么它并不比单个神经元强大。如果让一个神经网络的输出结果在0到1之间,例如,在猫狗鉴别的例子中,可以把接近于0的输出视为猫,将接近于1的输出视为狗。为了完成这个目标,在神经网络中引入激活函数,比如:sigmoid激活函数。关于这个激活函数,只需要知道它的返回值是一个介于0到1的数字。因此,激活函数用于将非线性引入神经网络,它会将神经网络运算结果缩小到较小的范围内。实际上,激活函数怎样表达并不重要,重要的是通过一些权值将一个非线性函数参数化,可以通过改变这些权值来改变这个非线性函数。
如图1所示,为神经网络结构示意图。在图1所示的神经网络中,包括三层,分别为输入层、隐含层以及输出层,图1所示的隐含层为5层。其中,神经网络的最左边一层被 称为输入层,输入层的神经元被称为输入神经元。输入层作为神经网络中的第一层,接受需要输入信号(值)并将它们传递到下一层。它一般不对输入信号(值)做操作,并且没有关联的权值和偏置。在图1所示的神经网络中,有4个输入信号x1,x2,x3,x4。
隐含层包含用于对输入数据应用不同变换的神经元(节点)。在图1所示的神经网络中,有5个隐含层。第一隐含层有4个神经元(节点),第2层有5个神经元,第3层有6个神经元,第4层有4个神经元,第5层有3个神经元。最后,隐含层将神经元的运算值传递给输出层。图1所示的神经网络将5个隐含层中每个神经元之间进行完全连接,即每个隐含层的每一个神经元都与下一层的每一个神经元有连接。需要说明的是,并不是每个神经网络的隐含层是完全连接的。
图1神经网络的最右边一层被称为输出层,输出层的神经元被称为输出神经元。输出层接收来自最后一个隐含层的输出。在图1所示的神经网络中,输出层有3个神经元,有3个输出信号y1,y2,y3。
在实际应用中,预先给大量的样本数据(包含输入和输出)对初始神经网络进行训练,训练完成后,获得训练后的神经网络。该神经网络对于将来的真实环境的输入能给出一个正确的输出。
在开始讨论神经网络的训练之前,需要定义损失函数。损失函数是一个衡量神经网络在执行某个特定任务的表现函数。在有些实施例中,损失函数可以如此得到:在训练某神经网络过程中,对每一个样本数据,都沿着神经网络传递得到输出值,然后将这个输出值与期望值做差再求平方,这样计算出来的损失函数就是预测值与真实值之间的距离,而训练神经网络目的就是将这个距离或损失函数的取值减小。在某些实施例中,损失函数可以表示为:
上式中,y代表期望值,
指样本数据集合中每个样本数据通过神经网络得到的实际结果,i是样本数据集合中每个样本数据的索引。
表示期望值y与实际结果
之间的误差值。m为样本数据集合中样本数据的个数。还是以猫狗鉴别为例。有一个数据集,由猫和狗的图片组成,如果图片是狗,对应的标签是1,如果图片是猫,对应的标签是0。这个标签就是对应上述公式中的期望值y,在向神经网络传递每一张样本图片的时候,实际是想通过神经网络获得识别结果。为了计算损失函数,必须遍历样本数据集中的每一张样本图片,获得每一张样本图片对应的实际结果
然后按照上面的定义计算损失函数。如果损失函数比较大,那么说明神经网络还没有训练好,需要对权值进一步调整。
在开始训练神经网络的时候,要对权值进行随机初始化。显然,初始化的神经网络并不会提供一个很好的结果。在训练的过程中,假设以一个很糟糕的神经网络开始,通过训练,可以得到一个具有高准确率的网络。
神经网络的训练过程分为两个阶段,第一阶段是信号的正向处理,从输入层经过隐含 层,最后到达输出层。第二阶段是反向传播梯度,从输出层到隐含层,最后到输入层,根据梯度依次调节神经网络中每层的权值和偏置。
在正向处理的过程中,将输入值输入到神经网络的输入层,并从神经网络的输出层得到所谓的预测值的输出。当输入值提供给神经网络的输入层时,它没有进行任何操作。在隐含层中,第二个隐含层从第一个隐含层获取预测中间结果值并进行计算操作和激活操作,然后将得到的预测中间结果值传递给下一个隐含层。在后面的层中执行相同的操作,最后在神经网络的输出层得到输出值。
正向处理后,得到一个被称为预测值的输出值。为了计算误差,将预测值与实际输出值进行比较,获得对应的误差值。反向传播使用微分学的链式法则,在链条法则中,首先计算对应神经网络的最后一层权值的误差值的导数。称这些导数为梯度,然后使用这些梯度来计算神经网络中的倒数第二层的梯度。重复此过程,直到得到神经网络中每个权值对应的梯度。最后,将神经网络中每个权值减去对应的梯度,从而对权值进行一次更新,以达到减少误差值的目的。
对于神经网络来说,微调是载入训练过的神经网络,微调过程与训练过程相同,分为两个阶段,第一阶段是信号的正向处理,第二阶段是反向传播梯度,对训练过的神经网络的权值进行更新。训练与微调的不同之处在于,训练是随机对初始化的神经网络进行处理,从头开始训练神经网络,而微调不是。
在神经网络进行训练或微调过程中,神经网络每经过一次信号的正向处理以及对应一次误差的反向传播过程,神经网络中的权值利用梯度进行一次更新,此时称为一次迭代(iteration)。为了获得精度符合预期的神经网络,在训练过程中需要很庞大的样本数据集。在这种情况下,一次性将样本数据集输入计算机是不可能的。因此,为了解决这个问题,需要把样本数据集分成多个块,每块传递给计算机,每块数据集正向处理后,对应更新一次神经网络的权值。当一个完整的样本数据集通过了神经网络一次正向处理并且对应返回了一次权值更新,这个过程称为一个周期(epoch)。实际中,在神经网络中传递一次完整的数据集是不够的,需要将完整的数据集在同一神经网络中传递多次,即需要多个周期,最终获得精度符合预期的神经网络。
在神经网络进行训练或微调过程中,一般希望速度越快越好,准确率越高越好。神经网络的数据通过高精度数据格式表示,比如:浮点数,所以在训练或微调过程中,涉及的数据均为高精度数据格式,然后再将训练好的神经网络进行量化。以量化对象是整个神经网络的权值、且量化后的权值均为8-bit定点数为例,由于一个神经网络中常常有数百万连接,几乎所有空间都被神经元连接的权值所占据。况且这些权值都是不同的浮点数。每层权值都趋向于某个确定区间的正态分布,例如(-3.0,3.0)。将神经网络中每层的权值对应的最大值和最小值保存下来,将每个浮点数值采用8-bit定点数表示。其中,在最大值、最小值范围内区间线性划分256个量化间隔,每个量化间隔用一个8-bit定点数表示。例如:在(-3.0,3.0)区间内,字节0表示-3.0,字节255表示3.0。以此类推,字节128表示0。
对于高精度数据格式表示的数据,以浮点数为例,根据计算机体系结构可知,基于浮 点数的运算表示法则、定点数的运算表示法则,对于同样长度的定点运算和浮点运算,浮点运算计算模式更为复杂,需要更多的逻辑器件来构成浮点运算器。这样从体积上来说,浮点运算器的体积比定点运算器的体积要大。并且,浮点运算器需要消耗更多的资源去处理,使得定点运算和浮点运算二者之间的功耗差距通常是数量级的。简言之,浮点运算器占用的芯片面积和功耗相比于定点运算器都要大很多倍。
但是,浮点运算又有其不可取代性。首先,定点运算虽然直观,但是固定的小数点位置决定了固定位数的整数部分和小数部分,不利于同时表达特别大的数或者特别小的数,可能出现溢出的情况。
此外,具体使用人工智能处理器芯片做训练或微调时,通常更倾向于浮点运算器,主要是因为在有监督学习的神经网络中,只有浮点运算才能记录和捕捉到训练时很小的增量。那么,如何在不增加人工智能处理器芯片面积和功耗的前提下,如何大幅提升芯片做训练的运算能力是目前急需解决的问题。
对于本领域的技术人员来说,使用低位宽表示的定点数进行训练,经实践反馈可知需要使用高于8-bit定点数来处理反向传播梯度,这使得使用低位宽表示的定点数实现训练的过程异常复杂。如何将定点运算器代替浮点运算器,达到定点运算的快速度,提升人工智能处理器芯片的峰值算力的同时满足运算所需的浮点运算的精度是本说明书解决的技术问题。
基于上述技术问题的描述,神经网络的一个特性是对输入噪声容忍度很高。如果考虑识别照片中物体,神经网络能忽略主要噪声,把注意力放在重要的相似性。该功能意味着神经网络可以把低精度计算作为一种噪声源,在容纳较少信息的数值格式下仍然能产生准确的预测结果。要做好低精度训练或微调,就要找到一个具有适普性的数据表示,既能改善数据的溢出情况,又能更好的表达目标区间范围内0附近的数据。因此,这个数据表示需要自适应性,能随着训练或微调的过程进行调整。
基于上述描述,如图2所示,为本披露提出的一种神经网络的量化参数确定方法流程图。利用图2所示的技术方案确定的量化参数用于对待量化数据进行数据表示,从而确认量化后的定点数。所述量化后的定点数用于进行神经网络的训练、微调或推理。所述方法包括:
步骤201):统计待量化数据,确定每种待量化数据的统计结果;其中,所述待量化数据包括所述神经网络的神经元、权值、梯度、偏置中的至少一种数据。
正如前文所述,在训练或微调神经网络的过程中,神经网络每层包括四种数据,分别为神经元、权值、梯度和偏置。在推理过程中,神经网络每层包括三种数据,分别为神经元、权值和偏置。这些数据均以高精度数据格式表示,本说明书以浮点数作为高精度数据为例。需要明确的是,以浮点数为例仅仅是例举的部分情况,而不是穷举,本领域技术人员在理解本技术方案的精髓的情况下,可能会在本披露技术方案的基础上产生其它的变形或者变换,比如:高精度数据可以是表示范围大且表示的最小精度小的高数据位宽的定点数,采用本技术方案均可转为低数据位宽的定点数。但只要其实现的功能以及达到的技术 效果与本披露类似,那么均应当属于本披露的保护范围。
不管什么样的神经网络结构,在训练或微调神经网络的过程中,待量化数据包括神经网络的神经元、权值、梯度、偏置中的至少一种数据,在推理过程中,待量化数据包括神经网络的神经元、权值、偏置中的至少一种数据。以待量化数据是权值为例,待量化数据可以是神经网络中某一层的所有权值,也可以是神经网络中某一层的部分权值。如果该层是卷积层时,待量化数据也可以是该卷积层中以通道为单位的所有权值或者部分权值,该通道是该卷积层的所有通道或者部分通道。需要强调的是,只有卷积层有通道的概念,在卷积层中,仅有权值分层按照通道的方式进行量化。
下面以待量化数据是神经网络中目标层的神经元和权值这两种数据为例,并详细描述本技术方案。在本步骤中,对目标层中每层的神经元和权值分别进行统计,获得每种待量化数据的最大值、最小值,也可以获得每种待量化数据的绝对值最大值。其中,目标层作为神经网络中需要量化的层,可以是一层,也可以是多层。以一层为单位,每种待量化数据的绝对值最大值可以通过每种待量化数据中的最大值和最小值方式确认。也可以先将每种待量化数据求绝对值,遍历求绝对值后的结果,获得每种待量化数据的绝对值最大值。
在实际应用中,按照每种待量化数据中的最大值和最小值方式获取每种待量化数据的绝对值最大值的原因在于,量化时,常规情况下会将目标层中每层的待量化数据对应的最大值和最小值保存下来,无需消耗更多的资源去对待量化数据求绝对值,直接基于保存的待量化数据对应的最大值和最小值来获取绝对值最大值即可。
步骤202):利用每种待量化数据的统计结果以及数据位宽确定对应量化参数;其中,所述量化参数用于人工智能处理器对神经网络运算过程中的数据进行对应量化。
在本步骤中,量化参数可以分以下六种情况。第一种情况:量化参数是点位置参数s。这种情况下,可以利用如下的公式(1)对待量化数据进行量化,得到量化数据I
x:
其中,s为点位置参数,I
x为数据x量化后的n位二进制表示值,F
x为数据x量化前的浮点值,round为进行四舍五入的取整运算。需要说明的是,此处不仅仅局限于round这一种取整运算,也可以采用其他的取整运算方法,例如:采用向上取整、向下取整、向零取整等取整运算,替换公式(1)中的round取整运算。此时,用n位定点数可以表示浮点数的最大值A为2
s(2
n-1-1),那么n位定点数可以表示待量化数据的数域中最大值为2
s(2
n-1-1),n位定点数可以表示待量化数据的数域中最小值为-2
s(2
n-1-1)。由式(1)可知,采用第一种情况对应的量化参数对待量化数据进行量化时,量化间隔为2
s,量化间隔记为C。
设Z为待量化数据的数域中所有浮点数的绝对值最大值,则A需要包含Z,且Z要大于
因此有如下公式(2)约束:
2
s(2
n-1-1)≥Z>2
s-1(2
n-1-1) (2)
根据式(3)对数据x量化后的n位二进制表示值I
x进行反量化,获得反量化数据
其中,所述反量化数据
的数据格式与对应的量化前的数据F
x的数据格式相同,均为浮点值。
第二种情况:量化参数是第一缩放系数f
1。这种情况下,可以利用如下的公式(4)对待量化数据进行量化,得到量化数据I
x:
其中,f
1为第一缩放系数,I
x为数据x量化后的n位二进制表示值,F
x为数据x量化前的浮点值,round为进行四舍五入的取整运算。需要说明的是,此处不仅仅局限于round这一种取整运算,也可以采用其他的取整运算方法,例如:采用向上取整、向下取整、向零取整等取整运算,替换公式(4)中的round取整运算。由式(4)可知,采用第二种情况对应的量化参数对待量化数据进行量化时,量化间隔为f
1,量化间隔记为C。
对于第一缩放系数f
1来说,有一种情况,即:点位置参数s为固定已知值,不再发生变化,设2
s=T,T为固定值,那么,用n位定点数可以表示浮点数的最大值A为(2
n-1-1)×T。这种情况下,最大值A取决于数据位宽n。设Z为待量化数据的数域中所有数的绝对值最大值,则
此时Z=(2
n-1-1)×f
1。n位定点数可以表示待量化数据的数域中最大值为(2
n-1-1)×f
1,n位定点数可以表示待量化数据的数域中最小值为-(2
n-1-1)×f
1。还有一种情况,在工程应用中,2
s×f
2作为一个整体当做第一缩放系数f
1。此时,就可以当做不存在独立的点位置参数s。其中,f
2为第二缩放系数。设Z为待量化数据的数域中所有数的绝对值最大值,则
此时Z=(2
n-1-1)×f
1。n位定点数可以表示待量化数据的数域中最大值为(2
n-1-1)×f
1,n位定点数可以表示待量化数据的数域中最小值为-(2
n-1-1)×f
1。
根据式(5)对数据x量化后的n位二进制表示值I
x进行反量化,获得反量化数据
其中,所述反量化数据
的数据格式与对应的量化前的数据F
x的数据格式相同,均为浮点值。
第三种情况:量化参数是点位置参数s和第二缩放系数f
2。这种情况下,可以利用如下的公式(6)对待量化数据进行量化,得到量化数据I
x:
其中,s为点位置参数,f
2为第二缩放系数,
I
x为数据x量化后的n位二进制表示值,F
x为数据x量化前的浮点值,round为进行四舍五入的取整运算。需要说明的是,此处不仅仅局限于round这一种取整运算,也可以采用其他的取整运算方法,例如:采用向上取整、向下取整、向零取整等取整运算,替换公式(6)中的round取整运算。用n位定点数可以表示的待量化数据的数域中的最大值A为2
s(2
n-1-1)。由式(6)可知,采用第三种情况对应的量化参数对待量化数据进行量化时,量化间隔为2
s×f
2,量化间隔记为C。
设Z为待量化数据的数域中所有数的绝对值最大值,此时,根据公式(2)可得:
时,根据公式(2),Z可以无损精确表示。当f
2=1时,公式(6)与公式(1),
n位定点数可以表示待量化数据的数域中最大值为(2
n-1-1)×2
s×f
2,n位定点数可以表示待量化数据的数域中最小值为-(2
n-1-1)×2
s×f
2。
根据式(7)对数据x量化后的n位二进制表示值I
x进行反量化,获得反量化数据
其中,所述反量化数据
的数据格式与对应的量化前的数据F
x的数据格式相同,均为浮点值。
如图3所示,对称的定点数表示示意图。图3所示的待量化数据的数域是以“0”为对称中心分布。Z为待量化数据的数域中所有浮点数的绝对值最大值,在图3中,A为n位定点数可以表示的浮点数的最大值,浮点数A转换为定点数是2
n-1-1。为了避免溢出,A需要包含Z。实际中,神经网络运算过程中的浮点数据趋向于某个确定区间的正态分布, 但是并不一定满足以“0”为对称中心的分布,这时用定点数表示时,容易出现溢出情况。为了改善这一情况,量化参数中引入偏移量,如图4所示。在图4中,待量化数据的数域不是以“0”为对称中心分布,Z
min是待量化数据的数域中所有浮点数的最小值,Z
max是待量化数据的数域中所有浮点数的最大值。P为Z
min~Z
max之间的中心点,将待量化数据的数域整体偏移,使得平移后的待量化数据的数域以“0”为对称中心分布,平移后的待量化数据的数域中的绝对值最大值为Z。由图4可知,偏移量为“0”点到“P”点之间的水平距离,该距离称为偏移量O。其中,
基于上述关于偏移量O的描述,出现第四种量化参数的情况。第四种情况:量化参数包括点位置参数和偏移量。这种情况下,可以利用如下的公式(8)对待量化数据进行量化,得到量化数据I
x:
其中,s为点位置参数,O为偏移量,
I
x为数据x量化后的n位二进制表示值,F
x为数据x量化前的浮点值,round为进行四舍五入的取整运算。需要说明的是,此处不仅仅局限于round这一种取整运算,也可以采用其他的取整运算方法,例如:采用向上取整、向下取整、向零取整等取整运算,替换公式(8)中的round取整运算。此时,用n位定点数可以表示浮点数的最大值A为2
s(2
n-1-1),那么n位定点数可以表示待量化数据的数域中最大值为2
s(2
n-1-1)+O,n位定点数可以表示待量化数据的数域中最小值为-2
s(2
n-1-1)+O。由式(8)可知,采用第四种情况对应的量化参数对待量化数据进行量化时,量化间隔为2
s,量化间隔记为C。
设Z为待量化数据的数域中所有浮点数的绝对值最大值,
则A需要包含Z,且Z要大于
根据公式(2)获得
进而得到
根据式(9)对数据x量化后的n位二进制表示值I
x进行反量化,获得反量化数据
其中,所述反量化数据
的数据格式与对应的量化前的数据F
x的数据格式相同,均为浮点值。
基于上述关于偏移量O的描述,出现第五种量化参数的情况。第五种情况:量化参数包括第一缩放系数f
1和偏移量O。这种情况下,可以利用如下的公式(10)对待量化数据进行量化,得到量化数据I
x:
其中,f
1为第一缩放系数,O为偏移量,I
x为数据x量化后的n位二进制表示值,F
x为数据x量化前的浮点值,round为进行四舍五入的取整运算。需要说明的是,此处不仅仅局限于round这一种取整运算,也可以采用其他的取整运算方法,例如:采用向上取整、向下取整、向零取整等取整运算,替换公式(10)中的round取整运算。此时,有一种情况,即:点位置参数s为固定已知值,不再发生变化,设2
s=T,T为固定值。那么,用n位定点数可以表示浮点数的最大值A为(2
n-1-1)×T。这种情况下,最大值A取决于数据位宽n。设Z为待量化数据的数域中所有数的绝对值最大值,则
此时Z=(2
n-1-1)×f
1。n位定点数可以表示待量化数据的数域中最大值为(2
n-1-1)×f
1,n位定点数可以表示待量化数据的数域中最小值为-(2
n-1-1)×f
1。还有一种情况,在工程应用中,2
s×f
2作为一个整体当作第一缩放系数f
1。此时,就可以当作不存在独立的点位置参数s。其中,f
2为第二缩放系数。设Z为待量化数据的数域中所有数的绝对值最大值,则
此时Z=(2
n-1-1)×f
1。n位定点数可以表示待量化数据的数域中最大值为(2
n-1-1)×f
1+O,n位定点数可以表示待量化数据的数域中最小值为-(2
n-1-1)×f
1+O。
由式(10)可知,采用第五种情况对应的量化参数对待量化数据进行量化时,量化间隔为f
1,量化间隔记为C。
根据式(11)对数据x量化后的n位二进制表示值I
x进行反量化,获得反量化数据
其中,所述反量化数据
的数据格式与对应的量化前的数据F
x的数据格式相同,均为浮点值。
基于上述关于偏移量O的描述,出现第六种量化参数的情况。第六种情况:量化参数包括点位置参数、第二缩放系数f
2和偏移量O。这种情况下,可以利用如下的公式(12)对待量化数据进行量化,得到量化数据I
x:
其中,s为点位置参数,偏移量O,f
2为第二缩放系数,
I
x为数据x量化后的n位二进制表示值,F
x为数据x量化前的浮点值,round为进行四舍五入的取整运算。需要说明的是,此处不仅仅局限于round这一种取整运算,也可以采用其他的取整运算方法,例如:采用向上取整、向下取整、向零取整等取整运算,替换公式(12)中的round取整运算。用n位定点数可以表示的待量化数据的数域中的最大值A为2
s(2
n-1-1)。由式(12)可知,采用第六种情况对应的量化参数对待量化数据进行量化时,量化间隔为2
s×f
2,量化间隔记为C。
设Z为待量化数据的数域中所有数的绝对值最大值,此时,根据公式(2)可得:
时,根据公式(2),Z可以无损精确表示。当f
2=1时,
n位定点数可以表示待量化数据的数域中最大值为(2
n-1-1)×2
s×f
2+O,n位定点数可以表示待量化数据的数域中最小值为-(2
n-1-1)×2
s×f
2+O。
根据式(13)对数据x量化后的n位二进制表示值I
x进行反量化,获得反量化数据
其中,所述反量化数据
的数据格式与对应的量化前的数据F
x的数据格式相同,均为浮点值。
上述详细描述了6种量化参数的确定过程,仅仅是实施例说明。量化参数的种类在不同的实施例中可以与以上的描述不同。由公式(1)~公式(13)可知,点位置参数和缩放系数均与数据位宽有关。不同的数据位宽,导致点位置参数和缩放系数不同,从而影响量化精度。在训练或微调过程中,在一定的迭代(iterations)的次数范围内,使用相同的数据位宽量化对神经网络运算的总体精度影响不大。超过一定的迭代次数,再使用同一数据位宽量化就无法满足训练或微调对精度的要求。这就需要随着训练或微调的过程对数据位宽n进行调整。简单地,可以人为设置数据位宽n。在不同的迭代次数范围内,调用提前设置的对应的数据位宽n。但是,前文已经提到,使用低位宽表示的定点数实现训练的过程异常复杂。这种人为提前设置数据位宽的调整方式基本上是不符合实际应用的需求。
在本技术方案中,根据量化误差diff
bit对数据位宽n进行调整。进一步详说,将量化误差diff
bit与阈值进行比较,并获取比较结果。其中,阈值包括第一阈值和第二阈值,且 第一阈值大于第二阈值,比较结果有三种情况,第一种情况为:量化误差diff
bit大于等于所述第一阈值,这种情况下,对所述数据位宽进行增加。第二种情况为:量化误差diff
bit小于等于所述第二阈值,这种情况下,对所述数据位宽进行减少。第三种情况为:量化误差diff
bit处于所述第一阈值和所述第二阈值之间,这种情况下,所述数据位宽保持不变。在实际应用中,第一阈值和第二阈值可以为经验值,也可以为可变的超参数。常规的超参数的优化方法均适于第一阈值和第二阈值,这里不再赘述超参数的优化方案。
需要强调的是,可以将数据位宽按照固定的位数步长进行调整,也可以根据量化误差与误差阈值之间的差值的不同,按照可变的调整步长调整数据位宽,最终根据神经网络运算过程的实际需要,将数据位宽调整的更长或更短。比如:当前卷积层的数据位宽n为16,根据量化误差diff
bit将数据位宽n调整为12。也就是说,在实际应用中,数据位宽n取值为12而不必取值为16即可满足神经网络运算过程中对精度的需求,这样在精度允许范围内可以大大提到定点运算速度,从而提升了人工智能处理器芯片的资源利用率。
对于量化误差diff
bit来说,根据量化后的数据与对应的量化前的数据确定量化误差。在实际应用中,有三种量化误差确定方式,均可适用于本技术方案。第一种方式:根据量化间隔、量化后的数据的个数以及对应的量化前的数据按照公式(14)确定量化误差。
其中,C为量化时对应的量化间隔,m为量化后获得的量化数据的个数,F
i为待量化对应的浮点值,其中,i为待量化数据集合中数据的下标。
第二种方式:根据量化后的数据以及对应的反量化数据按照公式(15)确定量化误差diff
bit。
其中,F
i为待量化对应的浮点值,其中,i为待量化数据集合中数据的下标。
为浮点值对应的反量化数据。
第三种方式:根据量化后的数据以及对应的反量化数据按照公式(16)确定量化误差diff
bit。
其中,F
i为待量化对应的浮点值,其中,i为待量化数据集合中数据的下标。
为浮点值对应的反量化数据。
需要强调的是,上述获取量化误差diff
bit的方式仅仅是例举的部分情况,而不是穷举, 本领域技术人员在理解本披露技术方案的精髓的情况下,可能会在本披露技术方案的基础上产生其它的变形或者变换,凡是支持根据量化后的数据与对应的量化前的数据确定量化误差的变形公式,但只要其实现的功能以及达到的技术效果与本披露类似,那么均应当属于本披露的保护范围。
对于数据位宽来说,图5a为训练过程中神经网络的权值数据变动幅度曲线图之一。图5b为训练过程中神经网络的权值数据变动幅度曲线图之二。在图5a和图5b中,横坐标表示是迭代数,纵坐标表示是权值取对数后的最大值。图5a所示的权值数据变动幅度曲线展示神经网络的任一卷积层同一周期(epoch)内在不同迭代对应的权值数据变动情况。在图5b中,conv0层对应权值数据变动幅度曲线A,conv1层对应权值数据变动幅度曲线B,conv2层对应权值数据变动幅度曲线C,conv3层对应权值数据变动幅度曲线D,conv4层对应权值数据变动幅度曲线e。由图5a和图5b可知,同一个周期(epoch)内,在训练初期,每次迭代权值变化幅度比较大。在训练中后期,每次迭代权值的变化幅度不会太大。此种情况下,在训练中后期,因为每次迭代前后权值数据变化幅度不大,使得每代的对应层的权值数据之间在一定的迭代间隔内具有相似性,在神经网络训练过程中每层涉及的数据量化时可以采用上一次迭代时对应层量化时使用的数据位宽。但是,在训练初期,由于每次迭代前后权值数据的变化幅度比较大,为了满足量化所需的浮点运算的精度,在训练初期的每一次迭代,利用上一次迭代对应层量化时采用的数据位宽对当前代的对应层的权值数据进行量化,或者基于当前层预设的数据位宽n对当前层的权值数据进行量化,获得量化后的定点数。根据量化后的权值数据和对应的量化前的权值数据,确定量化误差diff
bit,根据量化误差diff
bit与阈值的比较结果,对上一次迭代对应层量化时采用的数据位宽n或者当前层预设的数据位宽n进行调整,将调整后的数据位宽应用于当前次迭代的对应层的权值数据的量化。进一步地,在训练或微调过程中,神经网络的每层之间的权值数据相互独立,不具备相似性。因权值数据不具备相似性使得每层之间的神经元数据也相互独立,不具备相似性。因此,在神经网络训练或微调过程中,神经网络的每一次迭代内的每层的数据位宽只适用用于对应的神经网络层。
上述以权值数据为例,在神经网络训练或微调过程中,神经元数据和梯度数据分别对应的数据位宽亦如此,此处不再赘述。
在神经网络推理过程中,神经网络的每层之间的权值数据相互独立,不具备相似性。因权值数据不具备相似性使得每层之间的神经元数据也相互独立,不具备相似性。因此,在神经网络推理过程中,神经网络的每层的数据位宽应用于对应层。在实际应用中,推理过程中每次的输入神经元数据很有可能不相同或者不相似,并且,由于神经网络的每层之间的权值数据相互独立,那么神经网络隐含层中的每层的输入神经元数据就不相似。量化时,上一层的输入神经元数据使用的数据位宽就不适于应用于当前层的输入神经元数据。基于此,为了满足量化所需的浮点运算的精度,在推理时,利用上一层的输入神经元数据量化时采用的数据位宽对当前层的输入神经元数据进行量化,或者基于当前层预设的数据位宽n对当前层的输入神经元数据进行量化,获得量化后的定点数。根据量化前的输入神 经元数据和对应的量化后的输入神经元数据,确定量化误差diff
bit,根据量化误差diff
bit与阈值的比较结果,对上一层的输入神经元数据量化时采用的数据位宽n或者当前层预设的数据位宽n进行调整,将调整后的数据位宽应用于当前层的输入神经元数据的量化。权值数据对应的数据位宽亦如此,此处不再赘述。
对于量化参数来说,由图5a可知,同一个周期(epoch)内,在训练初期,每次迭代权值变化幅度比较大。在训练中后期,由于每一次迭代前后权值数据变化幅度不大,使得每次迭代的对应层的权值数据之间在一定的迭代间隔内具有相似性,这样量化时当前次迭代的每层的数据可以延用上一次迭代的对应层的对应数据的量化参数,在训练的中后期不用代代都重新确认量化参数,仅仅在训练初期的每次迭代的每层确认量化参数,这样仍然能够满足神经网络运算所需的浮点运算的精度,大大提高了量化时的效率。进一步地,在训练或微调过程中,神经网络的每层之间的权值数据相互独立,不具备相似性。因权值数据不具备相似性使得每层之间的神经元数据也相互独立,不具备相似性。因此,在神经网络训练或微调过程中,神经网络的每一次迭代内的每层的量化参数应用于对应层的对应待量化数据。
上述以权值数据为例,在神经网络训练或微调过程中,神经元数据和梯度数据分别对应的量化参数亦如此,此处不再赘述。
在神经网络推理过程中,神经网络的每层之间的权值数据相互独立,不具备相似性。因权值数据不具备相似性使得每层之间的神经元数据也相互独立,不具备相似性。因此,在神经网络推理过程中,神经网络的每层的量化参数应用于对应层的待量化数据。比如:神经网络的当前层为卷积层,根据卷积层的待量化数据按照图2所示的技术方案获得了当前卷积层的待量化数据的量化参数,该量化参数只能应用于当前的卷积层,而不能应用于该神经网络的其他层,即使其它层为卷积层也不适用。
综上所述,数据位宽和量化参数的延用策略基于数据之间的相似性来确定,如果数据之间具有相似性,则数据位宽和量化参数可以延用,如果数据之间不具有相似性,则需要对数据位宽或量化参数进行调整。数据之间的相似性的度量通常采用KL散度来衡量,也可以采用下式(17)来衡量。
abs max(A)≈abs max(B)且mean(A)≈mean(B) (17)
在某些实施例中,如果数据A和数据B满足式(17),则判断数据A和数据B之间具有相似性。
需要说明的是,关于上述描述的量化误差的确认方法、数据位宽的调整方法、数据位宽和量化参数的延用策略均仅仅是例举的部分情况,而不是穷举,比如:上述的量化误差的确认方法、数据位宽的调整方法、数据位宽和量化参数的延用策略均适用于神经网络的微调过程。还有,关于数据之间的相似性的度量,上述列举了KL散度以及公式(17)对相似性的度量方法,仅仅是例举的部分情况,而不是穷举,比如:直方图匹配法、矩阵分解法、基于特征点的图像相似度计算法、邻近度度量标准法等等。本领域技术人员在理解本披露技术方案的精髓的情况下,可能会在本披露技术方案的基础上产生其它的变形或者 变换,但只要其实现的功能以及达到的技术效果与本披露类似,那么均应当属于本披露的保护范围。
综上所述,在训练中后期,因为每次迭代前后权值数据变化幅度不大,使得每次迭代的对应层的权值数据之间在一定的迭代间隔内具有相似性,为了使得本技术方案在训练或微调中具有更好的适普性,满足人工智能处理器芯片的资源达到合理的应用,需要一种策略确定迭代间隔,使得在该迭代间隔范围内,每一次迭代的对应层的数据位宽n保持不变,超过该迭代间隔,数据位宽n就要发生变化,就无需代代确定是否对数据位宽n进行调整。同理,量化参数亦如此,从而达到提升人工智能处理器芯片的峰值算力的同时满足量化所需的浮点运算的精度。
如图6所示,为确定目标迭代间隔的方法流程图之一。在图6所示的技术方案中,目标迭代间隔包括至少一次权值更新迭代,且同一目标迭代间隔内量化过程中采用相同的所述数据位宽。所述目标迭代间隔的确定步骤包括:
步骤601):在预判时间点,确定权值迭代过程中所述待量化数据对应点位置参数的变化趋势值;其中,所述预判时间点是用于判断是否需要对所述数据位宽进行调整的时间点,所述预判时间点对应权值更新迭代完成时的时间点。
在本步骤中,按照公式(18),所述点位置参数的变化趋势值根据当前预判时间点对应的权值迭代过程中的点位置参数的滑动平均值、上一预判时间点对应的权值迭代过程中的点位置参数的滑动平均值确定,或者根据当前预判时间点对应的权值迭代过程中的点位置参数、上一预判时间点对应的权值迭代过程中的点位置参数的滑动平均值确定。式18的表达式为:
diff
update1=|M
(t)-M
(t-1)|=α|s
(t)-M
(t-1)| (18)
公式18中,M为点位置参数s随着训练迭代增加的滑动平均值。其中,M
(t)为第t个预判时间点对应的点位置参数s随着训练迭代增加的滑动平均值,根据公式(19)获得M
(t)。s
(t)为第t个预判时间点对应的点位置参数s。M
(t-1)为第t-1个预判时间点对应的点位置参数s的滑动平均值,α为超参数。diff
update1衡量点位置参数s变化趋势,由于点位置参数s的变化也变相体现在当前待量化数据中数据最大值Z
max的变化情况。diff
update1越大,说明数值范围变化剧烈,需要间隔更短的更新频率,即目标迭代间隔更小。
M
(t)←α×s
(t-1)+(1-α)×M
(t-1) (19)
步骤602):根据所述点位置参数的变化趋势值确定对应所述目标迭代间隔。
在本技术方案中,根据式(20)确定目标迭代间隔。对于目标迭代间隔来说,同一目标迭代间隔内量化过程中采用相同的所述数据位宽,不同目标迭代间隔内量化过程中采用的数据位宽可以相同,也可以不同。
式(20)中,I为目标迭代间隔。diff
update1为点位置参数的变化趋势值。β、γ为经验值,也可以为可变的超参数。常规的超参数的优化方法均适于β、γ,这里不再赘述超参数的优化方案。
对于本技术方案来说,预判时间点包括第一预判时间点,根据目标迭代间隔确定第一预判时间点。具体地,在训练或微调过程中的第t个预判时间点,利用上一次迭代对应层量化时采用的数据位宽对当前次迭代的对应层的权值数据进行量化,获得量化后的定点数,根据量化前的权值数据和对应的量化前的权值数据,确定量化误差diff
bit。将量化误差diff
bit分别与第一阈值和第二阈值进行比较,利用比较结果确定是否对上一次迭代对应层量化时采用的数据位宽进行调整。假如:第t个第一预判时间点对应第100次迭代,第99次迭代使用的数据位宽为n
1。在第100次迭代,根据数据位宽n
1确认量化误差diff
bit,将量化误差diff
bit与第一阈值、第二阈值进行比较,获得比较结果。如果根据比较结果确认数据位宽n
1无需改变,利用式(20)确认目标迭代间隔为8次迭代,当第100次迭代作为当前目标迭代间隔内的起始迭代,那么第100次迭代~第107次迭代作为当前目标迭代间隔,当第100次迭代作为上一目标迭代间隔的最末迭代,那么第101次迭代~第108次迭代作为当前目标迭代间隔。在当前目标迭代间隔内量化时每代仍然延用上一个目标迭代间隔所使用的数据位宽n
1。这种情况,不同的目标迭代间隔之间量化时所使用的数据位宽可以相同。如果以第100次迭代~第107次迭代作为当前的目标迭代间隔,那么下一个目标迭代间隔内的第108次迭代作为第t+1个第一预判时间点,如果第101次迭代~第108次迭代作为当前的目标迭代间隔,那么当前的目标迭代间隔内的第108次迭代作为第t+1个第一预判时间点。在第t+1个第一预判时间点,根据数据位宽n
1确认量化误差diff
bit,将量化误差diff
bit与第一阈值、第二阈值进行比较,获得比较结果。根据比较结果确定数据位宽n
1需要更改为n
2,并利用公式(20)确认目标迭代间隔为55次迭代。那么第108次迭代~第163次迭代或者第109次迭代~第163次迭代作为目标迭代间隔,在该目标迭代间隔内量化时每代使用数据位宽n
2。这种情况下,不同的目标迭代间隔之间量化时所使用的数据位宽可以不同。
对于本技术方案来说,不管第一预判时间点是目标迭代间隔内的起始迭代还是最末迭代,均适于公式(18)来获得点位置参数的变化趋势值。如果当前时刻的第一预判时间点为当前目标迭代间隔的起始迭代,那么在公式(18)中,M
(t)为当前目标迭代间隔的起始迭代对应时间点所对应的点位置参数s随着训练迭代增加的滑动平均值,s
(t)为当前目标迭代间隔的起始迭代对应时间点所对应的点位置参数s,M
(t-1)为上一目标迭代间隔的起始迭代对应时间点所对应的点位置参数s随着训练迭代增加的滑动平均值。如果当前时刻的第一预判时间点为当前目标迭代间隔的最末迭代,那么在公式(18)中,M
(t)为当前目标迭代间隔的最末迭代对应时间点所对应的点位置参数s随着训练迭代增加的滑动平均值,s
(t)为当前目标迭代间隔的最末迭代对应时间点所对应的点位置参数s,M
(t-1)为上一目标 迭代间隔的最末迭代对应时间点所对应的点位置参数s随着训练迭代增加的滑动平均值。
对于本技术方案来说,在包括第一预判时间点的基础上,预判时间点还可以包括第二预判时间点。第二预判时间点是根据数据变动幅度曲线确定的。基于大数据在神经网络训练过程中数据变动幅度情况,获得如图5a所示的所述数据变动幅度曲线。
以权值数据为例,由图5a所示的数据变动幅度曲线可知,从训练开始到第T次迭代的迭代间隔周期内,每次权值更新时,数据变动幅度非常大。在当前预判时间点,量化时,当前次迭代先利用上一次迭代的数据位宽n
1进行量化,获得的量化结果与对应的量化前的数据确定对应的量化误差,量化误差分别与第一阈值、第二阈值进行比较,根据比较结果对数据位宽n
1进行调整,获得数据位宽n
2。利用数据位宽n
2对当前次迭代涉及的待量化权值数据进行量化。然后根据式(20)确定目标迭代间隔,从而确定第一预判时间点,在第一预判时间点再判断是否调整数据位宽以及如何调整,并根据公式(20)确定下一目标迭代间隔来获得下一个第一预判时间点。由于训练开始到第T次迭代的迭代间隔周期内,每一次迭代前后权值数据变化幅度非常大,使得每次迭代的对应层的权值数据之间不具有相似性,为了满足精度问题,量化时当前次迭代的每层的数据不能延用上一次迭代的对应层的对应量化参数,在前T次迭代可以代代调整数据位宽,此时,量化时前T次迭代中每次迭代使用的数据位宽均不同,目标迭代间隔为1次迭代。为了人工智能处理器芯片的资源达到最优化利用,前T次迭代的目标迭代间隔可以根据图5a所示的数据变动幅度曲线图所揭示的规律提前预设好,即:根据数据变动幅度曲线前T次迭代的目标迭代间隔直接预设,无需经过公式(20)确认前T次迭代的每次迭代对应的权值更新迭代完成时的时间点作为第二预判时间点。从而使得人工智能处理器芯片的资源更为合理的利用。图5a所示的数据变动幅度曲线从第T次迭代开始变动幅度不大,在训练的中后期不用代代都重新确认量化参数,在第T次迭代或者第T+1次迭代,利用当前次迭代对应量化前的数据以及量化后的数据确定量化误差,根据量化误差确定对数据位宽是否需要调整以及如何调整,还要根据公式(20)确定目标迭代间隔。如果确认的目标迭代间隔为55次迭代,这就要求从第T次迭代或第T+1次迭代之后隔55次迭代对应的时间点作为第一预判时间点再判断是否调整数据位宽以及如何调整,并根据公式(20)确定下一目标迭代间隔,从而确定下一个第一预判时间点,直至同一周期(epoch)内所有代运算完成。在此基础上,在每个周期(epoch)之后,再对数据位宽或量化参数做适应性调整,最终使用量化后的数据获得精度符合预期的神经网络。
特别地,假如:根据图5a所示的权值数据变动幅度曲线图确定T取值为130(这个数值与图5a不对应,为方便描述,仅仅是假设T取值为130,不限于在假设值。),那么训练过程中的第130次迭代作为第二预判时间点,当前的第一预判时间点为训练过程中的第100次迭代,在第100次迭代,经公式(20)确定目标迭代间隔为35次迭代。在该目标迭代间隔内,训练至第130次迭代,到达第二预判时间点,此时就要在第130次迭代对应的时间点确定对数据位宽是否需要调整以及如何调整,还要根据公式(20)确定目标迭代间隔。假如该情况下确定的目标迭代间隔为42次迭代。就要从第130次迭代起至第 172次迭代作为目标迭代间隔,目标迭代间隔为35次迭代时确定的第一预判时间点对应的第135次迭代处于目标迭代间隔为42次迭代内,在第135次迭代,可以再根据公式(20)判断是否需要调整数据位宽以及如何调整。也可以不在第135次迭代做评估预判,直接到第172次迭代再执行是否需要调整数据位宽的评估以及如何调整。总之,是否在第135次迭代进行评估和预判均适于本技术方案。
综上,根据数据变动幅度曲线提前预设第二预判时间点,在训练或微调的初期,无需花费人工智能处理器芯片的资源来确定目标迭代间隔,在预设好的第二预判时间点上直接根据量化误差来调整数据位宽,并利用调整好的数据位宽来量化当前次迭代涉及的待量化数据。在训练或微调的中后期,根据公式(20)获得目标迭代间隔,从而确定对应的第一预判时间点,在每个第一预判时间点上确定是否调整数据位宽以及如何调整。这样在能够满足神经网络运算所需的浮点运算的精度的同时合理利用人工智能处理器芯片的资源,大大提高了量化时的效率。
在实际中,为了获得更准确的数据位宽的目标迭代间隔,不仅仅根据点位置参数的变化趋势值diff
update1,可以同时考虑点位置参数的变化趋势值diff
update1和数据位宽的变化趋势值diff
update2。如图7所示,为确定目标迭代间隔的方法流程图之二。所述目标迭代间隔的确定步骤包括:
步骤701):在预判时间点,确定权值迭代过程中所述待量化数据对应点位置参数的变化趋势值、数据位宽的变化趋势值;其中,所述预判时间点是用于判断是否需要对所述数据位宽进行调整的时间点,所述预判时间点对应权值更新迭代完成时的时间点。
需要强调的是,图6所示的关于基于点位置参数的变化趋势值确定数据位宽的目标迭代间隔的技术方案内容适用于图7所示的技术方案,这里不再赘述。
在本步骤中,根据式(21)来利用对应所述量化误差确定所述数据位宽的变化趋势值。
公式(21)中,δ为超参数,diff
bit为量化误差;diff
update2为数据位宽的变化趋势值。diff
update2衡量量化时采用的数据位宽n的变化趋势,diff
update2越大越有可能需要更新定点的位宽,需要间隔更短的更新频率。
对于图7中涉及的点位置参数的变化趋势值仍然可根据公式(18)获得,对于公式(18)中的M
(t)根据公式(19)获得。diff
update1衡量点位置参数s变化趋势,由于点位置参数s的变化也变相体现在当前待量化数据中数据最大值Z
max的变化情况。diff
update1越大,说明数值范围变化剧烈,需要间隔更短的更新频率,即目标迭代间隔更小。
步骤702):根据所述点位置参数的变化趋势值和所述数据位宽的变化趋势值确定对应所述目标迭代间隔。
在本技术方案中,根据公式(22)确定目标迭代间隔。对于目标迭代间隔来说,同一目标迭代间隔内量化过程中采用相同的所述数据位宽,不同目标迭代间隔内量化过程中采 用的数据位宽可以相同,也可以不同。
公式(22)中,I为目标迭代间隔。β、γ为超参数。diff
update1为点位置参数的变化趋势值。diff
update2为数据位宽的变化趋势值。β、γ为经验值,也可以为可变的超参数。常规的超参数的优化方法均适于β、γ,这里不再赘述超参数的优化方案。
对于本技术方案来说,diff
update1是用来衡量点位置参数s的变化情况,但是由数据位宽n的变化而导致的点位置参数s的变化是要忽略掉的。因为这已经在diff
update2中体现过了数据位宽n的变化。如果在diff
update1中不做这个忽略的操作,那么根据公式(22)确定的目标迭代间隔I是不准确的,造成第一预判时间点过多,在训练或微调过程中,易频繁的做数据位宽n是否更新以及如何更新的操作,从而造成人工智能处理器芯片的资源没有合理利用。
基于上述描述,diff
update1根据M
(t)确定。假设第t-1个预判时间点对应的数据位宽为n
1,对应的点位置参数为s
1,点位置参数随着训练迭代增加的滑动平均值为m
1。利用数据位宽n
1对待量化数据进行量化,获得量化后的定点数。根据量化前的数据和对应的量化后的数据,确定量化误差diff
bit,根据量化误差diff
bit与阈值的比较结果,将数据位宽n
1调整为n
2,数据位宽调整了|n
1-n
2|位,第t个预判时间点量化时使用的数据位宽为n
2。为了忽略由数据位宽的变化而导致的点位置参数的变化,在确定M
(t)时可以选出下述两种优化方式中的其中一种即可。第一种方式:如果数据位宽增加了|n
1-n
2|位,则s
(t-1)取值为s
1-|n
1-n
2|,M
(t-1)取值为m
1-|n
1-n
2|,将s
(t-1)、M
(t-1)代入公式(19)中,获得M
(t),即为第t个预判时间点对应的点位置参数随着训练迭代增加的滑动平均值。如果数据位宽减少了|n
1-n
2|位,则s
(t-1)取值为s
1+|n
1-n
2|,M
(t-1)取值为m
1+|n
1-n
2|,将s
(t-1)、M
(t-1)代入公式(19)中,获得M
(t),即为第t个预判时间点对应的点位置参数随着训练迭代增加的滑动平均值。第二种方式:不管数据位宽是增加了|n
1-n
2|位还是减少了|n
1-n
2|,s
(t-1)取值为s
1,M
(t-1)取值为m
1,将s
(t-1)、M
(t-1)代入公式(19)中,获得M
(t)。在数据位宽增加|n
1-n
2|位时,将M
(t)减去|n
1-n
2|,在数据位宽减少|n
1-n
2|位时,将M
(t)加上|n
1-n
2|,结果作为第t个预判时间点对应的点位置参数随着训练迭代增加的滑动平均值。这两种方式是等价的,均可以忽略由数据位宽的变化而导致的点位置参数的变化,获得更为精准的目标迭代间隔,从而提高人工智能处理器芯片的资源利用率。
在实际应用中,数据位宽n和点位置参数s对量化精度影响很大,量化参数中的第二缩放系数f
2以及偏移量O对量化精度影响不大。对于第一缩放系数f
1来说,上文已经提及,如果属于第二种情况,将2
s×f
2作为一个整体当做第一缩放系数f
1,由于点位置参数s对量化精度影响很大,那么此种情况下的第一缩放系数f
1对量化影响很大。所以,在本技术方案中,不管数据位宽n是否发生变化、点位置参数s可变的情况下,确定点位置参数s的目标迭代间隔也是一件非常有意义的事情,图6所示的技术方案的思想可应用于确定点位置参数s的目标迭代间隔。因此,确定点位置参数s的目标迭代间隔的方法如图8A所示。包括:
步骤801):在预判时间点,确定权值迭代过程中涉及的待量化数据对应点位置参数的变化趋势值;其中,所述预判时间点是用于判断是否需要对所述量化参数进行调整的时间点,所述预判时间点对应权值更新迭代完成时的时间点。
步骤802):根据所述点位置参数的变化趋势值确定对应所述目标迭代间隔。
需要强调的是,图6所示的关于基于点位置参数的变化趋势值确定量化参数的目标迭代间隔的技术方案内容适用于图8A所示的技术方案,这里不再赘述。对于图8A所示的技术方案来说,量化参数优选为点位置参数。
需要说明的是,关于上述确定数据位宽的目标迭代间隔和量化参数的目标迭代间隔均仅仅是例举的部分情况,而不是穷举,本领域技术人员在理解本披露技术方案的精髓的情况下,可能会在本披露技术方案的基础上产生其它的变形或者变换,比如:在确定数据位宽的目标迭代间隔内再确定量化参数的目标迭代间隔也适用于图6、图7和图8A所示的技术方案。但只要其实现的功能以及达到的技术效果与本披露类似,那么均应当属于本披露的保护范围。
利用本技术方案确定量化参数,根据量化误差对数据位宽或量化参数进行调整,并确定了对数据位宽或量化参数是否调整的目标迭代间隔,达到神经网络运算过程中在适合的时间点对数据位宽或量化参数进行调整,使得在合适的迭代时间点使用合适的量化参数,实现人工智能处理器芯片执行神经网络运算达到定点运算的速度,提升了人工智能处理器芯片的峰值算力的同时满足运算所需的浮点运算的精度。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本披露并不受所描述的动作顺序的限制,因为依据本披露,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于可选实施例,所涉及的动作和模块并不一定是本披露所必须的。
将会理解,在此的量化参数可以是预先设置的量化参数(即,离线量化参数),也可以是根据对待量化数据的处理而获得的量化参数(即,在线量化参数)。在神经网络的推理、训练和微调过程中,可以对目标数据进行离线量化或在线量化。其中,离线量化可以为利用量化参数对待量化数据进行离线处理。在线量化可以为利用量化参数对待量化数据 进行在线处理。例如,神经网络运行在人工智能芯片上,可以将待量化数据和量化参数发送至人工智能芯片之外的运算装置进行离线量化,或利用人工智能芯片之外的运算装置对预先得到的待量化数据和量化参数进行离线量化。而在人工智能芯片运行神经网络的过程中,人工智能芯片可以对待量化数据利用量化参数进行在线量化。在神经网络中包括多个待量化层时,各待量化层可以分别进行在线量化和离线量化。本披露中对各待量化层的量化过程为在线或离线不作限定。
根据本披露的实施例,提供了用于调整数据位宽的方法。在下文中,将参见图8B至图8V进行描述。图8B示出本披露一实施例中数据位宽调整方法800B的流程图。该方法可以包括:
S114、根据所述当前检验迭代的待量化数据和所述当前检验迭代的量化数据,确定量化误差,其中,所述当前检验迭代的量化数据是通过对所述当前检验迭代的待量化数据进行量化获得。
可选地,上述处理器可以采用初始数据位宽对待量化数据进行量化,获得上述的量化数据。该当前检验迭代的初始数据位宽可以是超参数,该当前检验迭代的初始数据位宽也可以是根据该当前检验迭代之前的上一检验迭代的待量化数据确定的。
具体地,处理器可以根据当前检验迭代的待量化数据和当前检验迭代的量化数据,确定中间表示数据。可选地,所述中间表示数据与上述的待量化数据的表示格式一致。例如,处理器可以对上述的量化数据进行反量化,获得与待量化数据的表示格式一致的中间表示数据,其中,反量化是指量化的逆过程。例如,该量化数据可以采用式23获得,处理器还可以按照式24对量化数据进行反量化,获得相应的中间表示数据,并根据待量化数据和中间表示数据确定量化误差。
进一步地,处理器可以根据待量化数据及其对应的中间表示数据计算获得量化误差。设当前检验迭代的待量化数据为F
x=[z
1,z
2…,z
m],该待量化数据对应的中间表示数据为F
x1=[z
1
(n),z
2
(n)…,z
m
(n)]。处理器可以根据该待量化数据F
x及其对应的中间表示数据F
x1确定误差项,并根据该误差项确定量化误差。
可选地,处理器可以根据中间表示数据F
x1中各元素的和,以及待量化数据F
x中各元素的和确定上述的误差项,该误差项可以是中间表示数据F
x1中各元素的和与待量化数据F
x中各元素的和的差值。之后,处理器可以根据该误差项确定量化误差。具体的量化误差可以按照如下公式进行确定:
其中,z
i为待量化数据中的元素,z
i
(n)为中间表示数据F
x1的元素。
可选地,处理器可以分别计算待量化数据中各元素与中间表示数据F
x1中相应元素的差值,获得m个差值,并将该m个差值的和作为误差项。之后,处理器可以根据该误差项 确定量化误差。具体的量化误差可以按照如下公式确定:
其中,z
i为待量化数据中的元素,z
i
(n)为中间表示数据F
x1的元素。
可选地,上述待量化数据中各元素与中间表示数据F
x1中相应元素的差值可以约等于2
s-1,因此,上述量化误差还可以按照如下公式确定:
其中,m为目标数据对应的中间表示数据F
x1的数量,s为点位置,z
i为待量化数据中的元素。
可选地,所述中间表示数据也可以与上述的量化数据的数据表示格式一致,并根据该中间表示数据和量化数据确定量化误差。例如,待量化数据可以表示为:F
x≈I
x×2
s,则可以确定出中间表示数据
该中间表示数据I
x1可以与上述的量化数据具有相同的数据表示格式。此时处理器可以根据中间表示数据I
x1和上述公式(23)计算获得的
确定量化误差。具体的量化误差确定方式可参照上述的公式(25)~公式(27)。
S115、根据所述量化误差,确定所述当前检验迭代对应的目标数据位宽。
具体地,处理器可以根据该量化误差,自适应地调整当前检验迭代对应的数据位宽,确定该当前检验迭代调整后的目标数据位宽。当该量化误差满足预设条件时,则可以保持当前检验迭代对应的数据位宽不变,即该当前检验迭代的目标数据位宽可以等于初始数据位宽。当量化误差不满足预设条件时,处理器可以调整当前检验迭代的待量化数据对应的数据位宽,获得当前检验迭代对应的目标数据位宽。当处理器采用该目标数据位宽对当前检验迭代的待量化数据进行量化时,量化误差满足上述的预设条件。可选地,上述的预设条件可以是用户设置的预设阈值。
可选地,图8C示出本披露另一实施例中数据位宽调整方法800C的流程图。如图8C所示,上述操作S115可以包括:
S1150、处理器可以判断上述的量化误差是否大于或等于第一预设阈值。
若所述量化误差大于或等于第一预设阈值,则可以执行操作S1151,增大所述当前检验迭代对应的数据位宽,获得当前检验迭代的目标数据位宽。当量化误差小于第一预设阈值时,则可以保持当前检验迭代的数据位宽不变。
进一步可选地,处理器可以经过一次调整获得上述的目标数据位宽。例如,当前检验迭代的初始数据位宽为n1,处理器可以经一次调整确定该目标数据位宽n2=n1+t,其中,t为数据位宽的调整值。其中,采用该目标数据位宽n2对当前检验迭代的待量化数据进行量化时,获得的量化误差可以小于所述第一预设阈值。
进一步可选地,处理器可以经过多次调整获得目标数据位宽,直至量化误差小于第一预设阈值,并将该量化误差小于第一预设阈值时的数据位宽作为目标数据位宽。具体地,若所述量化误差大于或等于第一预设阈值,则根据第一预设位宽步长确定第一中间数据位 宽;之后处理器可以根据该第一中间数据位宽对当前检验迭代的待量化数据进行量化,获得量化数据,并根据所述当前检验迭代中待量化数据和所述当前检验迭代的量化数据,确定量化误差,直至所述量化误差小于所述第一预设阈值。处理器可以将该量化误差小于第一预设阈值时对应的数据位宽,作为该目标数据位宽。
例如,当前检验迭代的初始数据位宽为n1,处理器可以采用该初始数据位宽n1对当前检验迭代的待量化数据A进行量化,获得量化数据B1,并根据该待量化数据A和量化数据B1计算获得量化误差C1。在量化误差C1大于或等于第一预设阈值时,处理器确定第一中间数据位宽n2=n1+t1,其中,t1为第一预设位宽步长。之后,处理器可以根据该第一中间数据位宽n2对当前检验迭代的待量化数据进行量化,获得当前检验迭代的量化数据B2,并根据该待量化数据A和量化数据B2计算获得量化误差C2。若该量化误差C2大于或等于第一预设阈值时,处理器确定第一中间数据位宽n2=n1+t1+t1,之后根据该新的第一中间数据位宽对当前检验迭代的待量化数据A进行量化,并计算相应的量化误差,直至量化误差小于第一预设阈值。若量化误差C1小于第一预设阈值,则可以保持该初始数据位宽n1不变。
更进一步地,上述的第一预设位宽步长可以是恒定值,例如,每当量化误差大于第一预设阈值时,则处理器可以将当前检验迭代对应的数据位宽增大相同的位宽值。可选地,上述的第一预设位宽步长也可以是可变值,例如,处理器可以计算量化误差与第一预设阈值的差值,若该量化误差与第一预设阈值的差值越小,则第一预设位宽步长的值越小。
可选地,图8D示出本披露又一实施例中数据位宽调整方法800D的流程图。如图8D所示,上述操作S115还可以包括:
S1152、处理器可以判断上述的量化误差是否小于或等于第二预设阈值。
若所述量化误差小于或等于第二预设阈值,则可以执行操作S1153,减小所述当前检验迭代对应的数据位宽,获得当前检验迭代的目标数据位宽。当量化误差大于第二预设阈值时,则可以保持当前检验迭代的数据位宽不变。
进一步可选地,处理器可以经过一次调整获得上述的目标数据位宽。例如,当前检验迭代的初始数据位宽为n1,处理器可以经一次调整确定该目标数据位宽n2=n1-t,其中,t为数据位宽的调整值。其中,采用该目标数据位宽n2对当前检验迭代的待量化数据进行量化时,获得的量化误差可以大于所述第二预设阈值。
进一步可选地,处理器可以经过多次调整获得目标数据位宽,直至量化误差大于第二预设阈值,并将该量化误差大于第二预设阈值时的数据位宽作为目标数据位宽。具体地,若所述量化误差小于或等于第一预设阈值,则根据第二预设位宽步长确定第二中间数据位宽;之后处理器可以根据该第二中间数据位宽对当前检验迭代的待量化数据进行量化,获得量化数据,并根据所述当前检验迭代中待量化数据和所述当前检验迭代的量化数据,确定量化误差,直至所述量化误差大于所述第二预设阈值。处理器可以将该量化误差大于第二预设阈值时对应的数据位宽,作为该目标数据位宽。
例如,当前检验迭代的初始数据位宽为n1,处理器可以采用该初始数据位宽n1对当前检验迭代的待量化数据A进行量化,获得量化数据B1,并根据该待量化数据A和量化数据 B1计算获得量化误差C1。在量化误差C1小于或等于第二预设阈值时,处理器确定第二中间数据位宽n2=n1-t2,其中,t2为第二预设位宽步长。之后,处理器可以根据该第二中间数据位宽n2对当前检验迭代的待量化数据进行量化,获得当前检验迭代的量化数据B2,并根据该待量化数据A和量化数据B2计算获得量化误差C2。若该量化误差C2小于或等于第二预设阈值时,处理器确定第二中间数据位宽n2=n1-t2-t2,之后根据该新的第二中间数据位宽对当前检验迭代的待量化数据A进行量化,并计算相应的量化误差,直至量化误差大于第二预设阈值。若量化误差C1大于第二预设阈值,则可以保持该初始数据位宽n1不变。
更进一步地,上述的第二预设位宽步长可以是恒定值,例如,每当量化误差小于第二预设阈值时,则处理器可以将当前检验迭代对应的数据位宽减小相同的位宽值。可选地,上述的第二预设位宽步长也可以是可变值,例如,处理器可以计算量化误差与第二预设阈值的差值,若该量化误差与第二预设阈值的差值越小,则第二预设位宽步长的值越小。
可选地,图8E示出本披露再一实施例中数据位宽调整方法800E的流程图。如图8E所示,当处理器确定量化误差小于第一预设阈值,且量化误差大于第二预设阈值时,可以保持当前检验迭代的数据位宽不变,其中,第一预设阈值大于第二预设阈值。即当前检验迭代的目标数据位宽可以等于初始数据位宽。其中,图8E中仅以举例的方式说明本披露一实施例的数据位宽确定方式,图8E中各个操作的顺序可以适应性调整,此处并不做具体限定。
图8F示出根据本披露实施例的神经网络量化方法800F的流程图。如图8F所示,所述神经网络量化方法包括:
步骤S10,确定与所述待量化层中每种待量化数据对应的量化参数,所述待量化数据包括神经元、权值、偏置、梯度中的至少一种。
步骤S20,将待量化数据根据对应的量化参数进行量化,得到量化数据,以使所述神经网络根据所述量化数据执行运算。
步骤S30,根据目标数据和所述目标数据对应的量化数据,确定所述目标数据的量化误差,所述目标数据为任意一种待量化数据。
可以根据目标数据对应的量化数据与目标数据之间的误差,确定目标数据的量化误差。可以利用设定的误差计算方法,例如标准差计算方法、均方根误差计算方法等,计算目标数据的量化误差。
也可以根据量化参数,将目标数据对应的量化数据进行反量化后得到反量化数据,根据反量化数据与目标数据之间的误差,确定目标数据的量化误差。
当量化参数包括点位置时,可以根据公式(28)对目标数据的量化数据进行反量化,得到目标数据的反量化数据
其中:round为四舍五入的取整运算,
为目标数据的反量化数据,s为目标数据对应的点位置。
当量化参数包括缩放系数时,可以根据公式(29)对目标数据的量化数据进行反量化,得到目标数据的反量化数据
其中:round为进行四舍五入的取整运算。
为目标数据的反量化数据,f为缩放系数。
当量化参数包括偏移量时,可以根据公式(30)对目标数据的量化数据进行反量化,得到目标数据的反量化数据
其中:round为进行四舍五入的取整运算。
为目标数据的反量化数据,o为缩放系数。
当量化参数包括点位置和缩放系数时,可以根据公式(31)对目标数据的量化数据进行反量化,得到目标数据的反量化数据
当量化参数包括点位置和偏移量时,可以根据公式(32)对目标数据的量化数据进行反量化,得到目标数据的反量化数据
当量化参数包括缩放系数和偏移量时,可以根据公式(33)对目标数据的量化数据进行反量化,得到目标数据的反量化数据
当量化参数包括点位置、缩放系数和偏移量时,可以根据公式(34)对目标数据的量化数据进行反量化,得到目标数据的反量化数据
可以通过计算量化间隔相关的方法,例如可以通过公式(35)计算得到目标数据与目标数据对应的反量化数据之间的误差diff
bit:
其中,p为目标数据中的各元素的数量,s为目标数据的点位置。A的取值可以根据量化参数进行确定,当量化参数包括点位置s时,A=2
s;当量化参数包括点位置s和缩放系数f时,A=2
s×f。
也可以通过计算两个数据的均值之间的差的方法,例如通过公式(36)计算得到目标数据与目标数据对应的反量化数据之间的误差diff
bit:
也可以通过计算两个数据的差之间的均值的方法,例如通过公式(37)计算得到目标数据与目标数据对应的反量化数据之间的误差diff
bit:
步骤S40,根据所述量化误差和误差阈值,调整所述目标数据对应的数据位宽,得到 所述目标数据对应的调整位宽。
可以根据经验值确定误差阈值,误差阈值可以用于表示对量化误差的期望值。当量化误差大于或小于误差阈值时,可以调整目标数对应的数据位宽,得到目标数据对应的调整位宽。可以将数据位宽调整为更长的位宽或更短的位宽,以提高或降低量化精度。
可以根据能够接受的最大误差确定误差阈值,当量化误差大于误差阈值时,说明量化精度不能达到预期,需要将数据位宽调整为更长的位宽。也可以根据较高的量化精度确定一个较小的误差阈值,当量化误差小于误差阈值时,说明量化精度较高,神经网络的运行效率将受到影响,可以适当的将数据位宽调整为更短的位宽,以适当的降低量化精度,提高神经网络的运行效率。
可以将数据位宽按照固定的位数步长进行调整,也可以根据量化误差与误差阈值之间的差值的不同,按照可变的调整步长调整数据位宽。本披露对此不做限定。
步骤S50,将所述目标数据对应的数据位宽更新为所述调整位宽,根据所述目标数据和所述调整位宽计算得到对应的调整量化参数,以使所述神经网络根据所述调整量化参数进行量化。
确定调整位宽后,可以将目标数据对应的数据位宽更新为调整位宽。例如,目标数据更新前的数据位宽为8位,调整位宽为12位,则更新后目标数据对应的数据位宽为12位。可以根据调整位宽和目标数据计算得到目标数据对应的调整量化参数。可以根据目标数据对应的调整量化参数重新对目标数据进行量化,以得到量化精度更高或更低的量化数据,使得待量化层在量化精度和处理效率之间达到平衡。
在神经网络的推理、训练和微调过程中,各层之间的待量化数据可以认为具有一定的关联性。例如,各层的待量化数据之间的均值之间的差小于设定的均值阈值,且各层的待量化数据之间的最大值之间的差值也小于设定的差值阈值时,可以将待量化层的调整量化参数作为后续的一个或多个层的调整量化参数,用于对待量化层后续的一个或多个层的待量化数据进行量化。也可以在神经网络的训练和微调过程中,将待量化层在当前迭代得到的调整量化参数,用于在后续的迭代中对待量化层进行量化。
在一种可能的实现方式中,所述方法还包括:
在所述待量化层之后的一层或多层采用所述待量化层的量化参数。
神经网络根据调整量化参数进行量化,可以包括只在待量化层利用调整量化参数对待量化数据重新进行量化,并将重新得到的量化数据用于待量化层的运算。也可以包括在待量化层不使用调整量化参数重新对待量化数据进行量化,而在待量化层后续的一个或多个层使用调整量化参数进行量化,和/或后续的迭代中在待量化层使用调整量化参数进行量化。还可以包括在待量化层使用调整量化参数重新进行量化,并将重新得到的量化数据用于待量化层的运算,并且在待量化层后续的一个或多个层使用调整量化参数进行量化,和/或后续的迭代中在待量化层使用调整量化参数进行量化。本披露对此不作限定。
在本实施例中,根据目标数据和目标数据对应的量化数据,确定目标数据的量化误差,目标数据为任意一种待量化数据;所述量化误差和误差阈值,调整目标数据对应的数据位 宽,得到目标数据对应的调整位宽;将目标数据对应的数据位宽更新为调整位宽,根据目标数据和调整位宽计算得到对应的调整量化参数,以使神经网络根据调整量化参数进行量化。根据目标数据和量化数据之间的误差调整数据位宽,并根据调整后的数据位宽计算得到调整量化参数。通过设置不同的误差阈值可以得到不同的调整量化参数,达到提高量化精度或提高运行效率等不同的量化需求。根据目标数据和目标数据的量化数据计算得到的调整量化参数,也能够更加符合目标数据自身的数据特征,达到更加符合目标数据自身需求的量化结果,在量化精度和处理效率之间达到更好的平衡。
图8G示出根据本披露实施例的神经网络量化方法800G的流程图。如图8G所示,所述神经网络量化方法中步骤S40,包括:
步骤S41,当所述量化误差大于所述第一误差阈值时,增加所述目标数据对应的数据位宽,得到所述目标数据对应的调整位宽。
可以根据能够接受的最大的量化误差,确定第一误差阈值。可以将量化误差与第一误差阈值进行比较。当量化误差大于第一误差阈值时,可以认为量化误差已经不可接受。需要提高量化精度,可以通过增加目标数据对应的数据位宽的方式,提高目标数据的量化精度。
可以将目标数据对应的数据位宽按照固定的调整步长增加,得到调整位宽。固定的调整步长可以为N位,N为正整数。每次调整数据位宽可以增加N位。每次增加后的数据位宽=原数据位宽+N位。
可以将目标数据对应的数据位宽按照可变的调整步长增加,得到调整位宽。例如,当量化误差与误差阈值之间的差值大于第一阈值时,可以按照调整步长M1调整数据位宽,当量化误差与误差阈值之间的差值小于第一阈值时,可以按照调整步长M2调整数据位宽,其中,第一阈值大于第二阈值,M1大于M2。可以根据需求确定各可变的调整步长。本披露对数据位宽的调整步长及调整步长是否可变不做限定。
可以将目标数据按照调整位宽计算得到调整后的量化参数。利用调整后的量化参数对目标数据进行重新量化后得到的量化数据,比利用调整前的量化参数量化得到的量化数据的量化精度更高。
图8H示出根据本披露实施例的神经网络量化方法800H的流程图。如图8H所示,所述神经网络量化方法还包括:
步骤S42,根据所述调整位宽和所述目标数据计算所述目标数据调整后的量化误差;
步骤S43,根据所述调整后的量化误差和所述第一误差阈值继续增加所述调整位宽,直至根据调整位宽和所述目标数据计算得到的调整后的量化误差小于或等于所述第一误差阈值。
根据量化误差增加目标数据对应的数据位宽时,调整一次位宽后得到调整位宽,根据调整位宽计算得到调整后的量化参数,根据调整后的量化参数量化目标数据得到调整后的量化数据,再根据调整后的量化数据与目标数据计算得到目标数据调整后的量化误差,调整后的量化误差可能依然大于第一误差阈值,即根据调整一次的数据位宽可能不能满足调 整目的。当调整后的量化误差依然大于第一误差阈值时,可以继续对调整后的数据位宽进行调整,即多次增加目标数据对应的数据位宽,直至根据最终得到的调整位宽和目标数据得到的调整后的量化误差小于第一误差阈值。
多次增加的调整步长可以是固定的调整步长,也可以是可变的调整步长。例如,最终的数据位宽=原数据位宽+A*N位,其中N为每次增加的固定的调整步长,A为数据位宽的增加次数。最终的数据位宽=原数据位宽+M1+M2+…+Mm,其中,M1、M2…Mm为每次增加的可变的调整步长。
在本实施例中,当量化误差大于第一误差阈值时,增加所述目标数据对应的数据位宽,得到所述目标数据对应的调整位宽。可以通过设置第一误差阈值和调整步长增加数据位宽,以使调整后的数据位宽能够满足量化的需求。当一次调整不能满足调整需求时,还可以对数据位宽进行多次调整。第一误差阈值和调整步长的设置,使得量化参数可以按照量化需求进行灵活调整,满足不同的量化需求,使得量化精度可根据自身数据特征进行自适应调整。
图8I示出根据本披露实施例的神经网络量化方法800I的流程图。如图8I所示,所述神经网络量化方法中步骤S40,包括:
步骤S44,当所述量化误差小于所述第二误差阈值时,减少所述目标数据对应的数据位宽,所述第二误差阈值小于所述第一误差阈值。
可以根据能够接受的量化误差和期望的神经网络的运行效率,确定第二误差阈值。可以将量化误差与第二误差阈值进行比较。当量化误差小于第二误差阈值时,可以认为量化误差超出预期,但运行效率过低已经不可接受。可以降低量化精度以提高神经网络的运行效率,可以通过减少目标数据对应的数据位宽的方式,降低目标数据的量化精度。
可以将目标数据对应的数据位宽按照固定的调整步长减少,得到调整位宽。固定的调整步长可以为N位,N为正整数。每次调整数据位宽可以减少N位。增加后的数据位宽=原数据位宽-N位。
可以将目标数据对应的数据位宽按照可变的调整步长减少,得到调整位宽。例如,当量化误差与误差阈值之间的差值大于第一阈值时,可以按照调整步长M1调整数据位宽,当量化误差与误差阈值之间的差值小于第一阈值时,可以按照调整步长M2调整数据位宽,其中,第一阈值大于第二阈值,M1大于M2。可以根据需求确定各可变的调整步长。本披露对数据位宽的调整步长及调整步长是否可变不做限定。
可以将目标数据按照调整位宽计算得到调整后的量化参数,利用调整后的量化参数对目标数据进行重新量化后得到的量化数据,比利用调整前的量化参数量化得到的量化数据的量化精度更低。
图8J示出根据本披露实施例的神经网络量化方法800J的流程图。如图8J所示,所述神经网络量化方法还包括:
步骤S45,根据所述调整位宽和所述目标数据计算所述目标数据调整后的量化误差;
步骤S46,根据所述调整后的量化误差和所述第二误差阈值继续减少所述调整位宽, 直至根据调整位宽和所述目标数据计算得到的调整后的量化误差大于或等于所述第二误差阈值。
根据量化误差增加目标数据对应的数据位宽时,调整一次位宽后得到调整位宽,根据调整位宽计算得到调整后的量化参数,根据调整后的量化参数量化目标数据得到调整后的量化数据,再根据调整后的量化数据与目标数据计算得到目标数据调整后的量化误差,调整后的量化误差可能依然小于第二误差阈值,即根据调整一次的数据位宽可能不能满足调整目的。当调整后的量化误差依然小于第二误差阈值时,可以继续对调整后的数据位宽进行调整,即多次减少目标数据对应的数据位宽,直至根据最终得到的调整位宽和目标数据得到的调整后的量化误差大于第二误差阈值。
多次减少的调整步长可以是固定的调整步长,也可以是可变的调整步长。例如,最终的数据位宽=原数据位宽-A*N位,其中N为每次增加的固定的调整步长,A为数据位宽的增加次数。最终的数据位宽=原数据位宽-M1-M2-…-Mm,其中,M1、M2…Mm为每次减少的可变的调整步长。
在本实施例中,当量化误差小于第二误差阈值时,减少所述目标数据对应的数据位宽,得到所述目标数据对应的调整位宽。可以通过设置第二误差阈值和调整步长减少数据位宽,以使调整后的数据位宽能够满足量化的需求。当一次调整不能满足调整需求时,还可以对数据位宽进行多次调整。第二误差阈值和调整步长的设置,使得量化参数可以按照量化需求进行灵活的自适应调整,满足不同的量化需求,使得量化精度可调,在量化精度和神经网络的运行效率之间达到平衡。
在一种可能的实现方式中,所述方法还包括:
当所述量化误差大于第一误差阈值时,增加所述目标数据对应的数据位宽,以及当所述量化误差小于第二误差阈值时,减少所述目标数据对应的数据位宽,得到所述目标数据对应的调整位宽。
也可以同时设置两个误差阈值,其中,第一误差阈值用于表示量化精度过低,可以增加数据位宽的位数,第二误差阈值用于表示量化精度过高,可以减少数据位宽的位数。第一误差阈值大于第二误差阈值,可以将目标数据的量化误差同时与两个误差阈值进行比较,当量化误差大于第一误差阈值时,增加数据位宽的位数,当量化误差小于第二误差阈值时,减少数据位宽的位数。当量化误差位于第一误差阈值和第二误差阈值之间时,数据位宽可以保持不变。
在本实施例中,通过将量化误差与第一误差阈值和第二误差阈值同时进行比较,可以根据比较结果增加或减少数据位宽,可以利用第一误差阈值和第二误差阈值更加灵活的调整数据位宽。使得数据位宽的调整结果更加符合量化需求。
应当清楚的是,神经网络的训练(Training)是指对神经网络(该神经网络的权值可以是随机数)进行多次迭代运算(iteration),使得神经网络的权值能够满足预设条件的过程。其中,一次迭代运算一般包括一次正向运算、一次反向运算和一次权值更新运算。正向运算是指根据神经网络的输入数据进行正向推理,获得正向运算结果的过程。反向运算 是根据正向运算结果与预设参考值确定损失值,并根据该损失值确定权值梯度值和/或输入数据梯度值的过程。权值更新运算是指根据权值梯度值调整神经网络的权值的过程。具体地,神经网络的训练过程如下:处理器可以采用权值为随机数的神经网络对输入数据进行正向运算,获得正向运算结果。之后处理器根据该正向运算结果与预设参考值确定损失值,根据该损失值确定权值梯度值和/或输入数据梯度值。最后,处理器可以根据权值梯度值更新神经网络的梯度值,获得新的权值,完成一次迭代运算。处理器循环执行多次迭代运算,直至神经网络的正向运算结果满足预设条件。例如,当神经网络的正向运算结果收敛于预设参考值时,结束训练。或者,当神经网络的正向运算结果与预设参考值确定的损失值小于或等于预设精度时,结束训练。
微调是指对神经网络(该神经网络的权值已经处于收敛状态而非随机数)进行多次迭代运算,以使得神经网络的精度能够满足预设需求的过程。该微调过程与上述训练过程基本一致,可以认为是对处于收敛状态的神经网络进行重训练的过程。推理(Inference)是指采用权值满足预设条件的神经网络进行正向运算,从而实现识别或分类等功能的过程,如采用神经网络进行图像识别等等。
本披露实施例中,在上述神经网络的训练或微调过程中,可以在神经网络运算的不同阶段采用不同的量化参数对神经网络的运算数据进行量化,并根据量化后的数据进行迭代运算,从而可以减小神经网络运算过程中的数据存储空间,提高数据访存效率及运算效率。如图8K所示,示出本披露一实施例的量化参数调整方法800K的流程图,上述方法可以包括:
S100、获取待量化数据的数据变动幅度。
可选地,处理器可以直接读取该待量化数据的数据变动幅度,该待量化数据的数据变动幅度可以是用户输入的。
可选地,处理器也可以根据当前迭代的待量化数据和历史迭代的待量化数据,计算获得上述的待量化数据的数据变动幅度,其中当前迭代是指当前执行的迭代运算,历史迭代是指在当前迭代之前执行的迭代运算。例如,处理器可以获取当前迭代的待量化数据中元素的最大值以及元素的平均值,以及各个历史迭代的待量化数据中元素的最大值以及元素的平均值,并根据各次迭代中元素的最大值和元素的平均值,确定待量化数据的变动幅度。若当前迭代的待量化数据中元素的最大值与预设数量的历史迭代的待量化数据中元素的最大值较为接近,且当前迭代的待量化数据中元素的平均值与预设数量的历史迭代的待量化数据中元素的平均值较为接近时,则可以确定上述的待量化数据的数据变动幅度较小。否则,则可以确定待量化数据的数据变动幅度较大。再如,该待量化数据的数据变动幅度可以采用待量化数据的滑动平均值或方差等进行表示,此处不做具体限定。
本披露实施例中,该待量化数据的数据变动幅度可以用于确定是否需要调整待量化数据的量化参数。例如,若待量化数据的数据变动幅度较大,则可以说明需要及时调整量化参数,以保证量化精度。若待量化数据的数据变动幅度较小,则当前检验迭代及其之后一定数量的迭代可以沿用历史迭代的量化参数,从而可以避免频繁的调整量化参数,提高量 化效率。
其中,每次迭代涉及至少一个待量化数据,该待量化数据可以是浮点表示的运算数据,也可以是定点表示的运算数据。可选地,每次迭代的待量化数据可以是神经元数据、权值数据或梯度数据中的至少一种,梯度数据还可以包括神经元梯度数据和权值梯度数据等。
S200、根据所述待量化数据的数据变动幅度,确定目标迭代间隔,以根据该目标迭代间隔调整神经网络运算中的量化参数,其中,所述目标迭代间隔包括至少一次迭代,所述神经网络的量化参数用于实现对所述神经网络运算中待量化数据的量化操作。在此,量化参数可以包括数据宽度。因而,在此可以根据所述待量化数据的数据变动幅度,确定目标迭代间隔,以根据该目标迭代间隔调整神经网络运算中的数据宽度,所述目标迭代间隔包括至少一次迭代。
可选地,该量化参数可以包括上述的点位置和/或缩放系数,其中,缩放系数可以包括第一缩放系数和第二缩放系数。具体的点位置计算方法、缩放系数的计算方法可参见上文描述的公式,此处不再赘述。可选地,该量化参数还可以包括偏移量,该偏移量的计算方法可参见上文描述的公式;更进一步地,处理器还可以根据按照上文描述的其他公式来确定点位置、确定缩放系数。本披露实施例中,处理器可以根据确定的目标迭代间隔,更新上述的点位置、缩放系数或偏移量中的至少一种,以调整该神经网络运算中的量化参数。也就是说,该神经网络运算中的量化参数可以根据神经网络运算中待量化数据的数据变动幅度进行更新,从而可以保证量化精度。
可以理解的是,通过对神经网络训练或微调过程中的运算数据的变化趋势进行统计和分析,可以得到待量化数据的数据变动曲线。如图8L所示,根据该数据变动曲线800L可以获知,在神经网络训练或微调的初期,不同迭代的待量化数据的数据变动较为剧烈,随着训练或微调运算的进行,不同迭代的待量化数据的数据变动逐渐趋于平缓。因此,在神经网络训练或微调的初期,可以较为频繁地调整量化参数;在神经网络训练或微调的中期和后期,可以间隔多次迭代或训练周期再调整量化参数。本披露的方法即是通过确定合适的迭代间隔,以取得量化精度和量化效率的平衡。
具体地,处理器可以通过待量化数据的数据变动幅度,确定目标迭代间隔,以根据该目标迭代间隔调整神经网络运算中的量化参数。可选地,该目标迭代间隔可以随着待量化数据的数据变动幅度的减小而增大。也就是说,该待量化数据的数据变动幅度越大时,则该目标迭代间隔越小,表明量化参数的调整越频繁。该待量化数据的数据变动幅度越小时,则该目标迭代间隔越大,表明量化参数的调整越不频繁。当然,在其他实施例中,上述的目标迭代间隔还可以是超参数,例如,该目标迭代间隔可以是用户自定义设置的。
可选地,上述的权值数据、神经元数据及梯度数据等各种待量化数据可以分别具有的不同的迭代间隔。相应地,处理器可以分别获取各种待量化数据对应的数据变动幅度,以分别根据每种待量化数据的数据变动幅度,确定相应种类的待量化数据对应的目标迭代间隔。也就是说,各种待量化数据的量化过程可以是异步进行的。本披露实施例中,由于不同种类的待量化数据之间具有差异性,因此可以采用不同的待量化数据的数据变动幅度, 确定相应的目标迭代间隔,并分别根据相应的目标迭代间隔确定对应的量化参数,从而可以保证待量化数据的量化精度,进而保证神经网络的运算结果的正确性。
当然,在其他实施例中,针对不同种类的待量化数据还可以确定相同的目标迭代间隔,以根据该目标迭代间隔调整相应待量化数据对应的量化参数。例如,处理器可以分别获取各种待量化数据的数据变动幅度,并根据最大的待量化数据的数据变动幅度确定目标迭代间隔,并根据该目标迭代间隔分别确定各种待量化数据的量化参数。更进一步地,不同种类的待量化数据还可以采用相同的量化参数。
进一步可选地,上述的神经网络可以包括至少一个运算层,该待量化数据可以是各个运算层涉及的神经元数据、权值数据或梯度数据中的至少一种。此时,处理器可以获得当前运算层涉及的待量化数据,并根据上述方法确定当前运算层中各种待量化数据的数据变动幅度及对应的目标迭代间隔。
可选地,处理器可以在每次迭代运算过程中均确定一次上述的待量化数据的数据变动幅度,并根据相应的待量化数据的数据变动幅度确定一次目标迭代间隔。也就是说,处理器可以在每次迭代均计算一次目标迭代间隔。具体的目标迭代间隔的计算方式可参见下文中的描述。进一步地,处理器可以根据预设条件从各次迭代中选定检验迭代,在各次检验迭代处确定待量化数据的变动幅度,并根据检验迭代对应的目标迭代间隔对量化参数等的更新调整。此时,若该迭代不是选定检验迭代,处理器可以忽略该迭代对应的目标迭代间隔。
可选地,每个目标迭代间隔可以对应一检验迭代,该检验迭代可以是该目标迭代间隔的起始迭代,也可以是该目标迭代间隔的终止迭代。处理器可以在各个目标迭代间隔的检验迭代处调整神经网络的量化参数,以实现根据目标迭代间隔调整神经网络运算的量化参数。其中,检验迭代可以是用于核查当前量化参数是否满足待量化数据的需求的时间点。该调整前的量化参数可以与调整后的量化参数相同,也可以与调整后的量化参数不同。可选地,相邻的检验迭代之间的间隔可以大于或等于一个目标迭代间隔。
例如,该目标迭代间隔可以从当前检验迭代开始计算迭代数量,该当前检验迭代可以是该目标迭代间隔的起始迭代。例如,当前检验迭代为第100次迭代,处理器根据待量化数据的数据变动幅度,确定目标迭代间隔的迭代间隔为3,则处理器可以确定该目标迭代间隔包括3次迭代,分别为第100次迭代、第101次迭代和第102次迭代。处理器可以在该第100次迭代处调整神经网络运算中的量化参数。其中,当前检验迭代是处理器当前执行量化参数更新调整时对应的迭代运算。
可选地,目标迭代间隔还可以是从当前检验迭代的下一次迭代开始计算迭代数量,该当前检验迭代可以是当前检验迭代之前的上一迭代间隔的终止迭代。例如,当前检验迭代为第100次迭代,处理器根据待量化数据的数据变动幅度,确定目标迭代间隔的迭代间隔为3,则处理器可以确定该目标迭代间隔包括3次迭代,分别为第101次迭代、第102次迭代和第103次迭代。处理器可以在该第100次迭代和第103次迭代处调整神经网络运算中的量化参数。本披露对目标迭代间隔的确定方式不做具体限定。
在一个实施例中,根据上文中点位置、缩放系数及偏移量的计算公式可以看出,量化参数往往与待量化数据相关,因此,上述操作S100中,待量化数据的数据变动幅度也可以通过量化参数的变动幅度间接确定,该待量化数据的数据变动幅度可以通过量化参数的变动幅度进行表征。具体地,如图8M所示,示出本披露一实施例的参数调整方法中目标迭代间隔的确定方法800M的流程图。上述操作S100可以包括:
S110、获取点位置的变动幅度;其中,所述点位置的变动幅度能够用于表征所述待量化数据的数据变动幅度,所述点位置的变动幅度与所述待量化数据的数据变动幅度正相关。
可选地,点位置的变动幅度能够间接反应待量化数据的变动幅度。该点位置的变动幅度可以是根据当前检验迭代的点位置和至少一次历史迭代的点位置确定的。其中,当前检验迭代的点位置及各次历史迭代的点位置可以上文描述的公式进行确定。
例如,处理器还可以计算当前检验迭代的点位置和历史迭代的点位置的方差等,并根据该方差确定点位置的变动幅度。再如,处理器可以根据当前检验迭代的点位置和历史迭代的点位置的平均值,确定点位置的变动幅度。具体地,如图8N所示,图8N示出本披露一实施例中点位置的变动幅度的确定方法800N的流程图。上述操作S110可以包括:
S111、根据所述当前检验迭代之前的上一检验迭代对应的点位置,以及所述上一检验迭代之前的历史迭代对应的点位置,确定第一均值。其中,上一检验迭代为上一次调整所述量化参数时对应的迭代,上一检验迭代与所述当前检验迭代之间间隔至少一个迭代间隔。
可选地,至少一次历史迭代可以分属于至少一个迭代间隔中,每个迭代间隔可以对应有一个检验迭代,相邻的两个检验迭代可以具有一个迭代间隔。上述操作S111中的上一检验迭代可以是目标迭代间隔之前的上一迭代间隔对应的检验迭代。
可选地,该第一均值可以按照如下公式进行计算:
M1=a1×s
t-1+a2×s
t-2+a3×s
t-3+…+am×s
1 公式(38)
其中,a1~am是指各次迭代的点位置对应的计算权重,s
t-1是指上一检验迭代对应的点位置,s
t-2,s
t-3…s
1是指上一检验迭代之前的历史迭代对应的点位置,M1是指上述的第一均值。进一步地,根据数据的分布特性,历史迭代与该上一检验迭代距离越远,对该上一检验迭代附近的迭代的点位置的分布及变动幅度影响越小,因此,上述计算权重可以按照a1~am的顺序依次减小。
例如,上一检验迭代为神经网络运算的第100次迭代,历史迭代可以是第1次迭代至第99次迭代,则处理器可以获得该第100次迭代的点位置(即s
t-1),并获得该第100次迭代之前的历史迭代的点位置,即s
1可以指神经网络的第1次迭代对应的点位置……,s
t-3可以指神经网络的第98次迭代对应的点位置,s
t-2可以指神经网络的第99次迭代对应的点位置。进一步地,处理器可以根据上述公式计算获得第一均值。
更进一步地,该第一均值可以根据各个迭代间隔对应的检验迭代的点位置进行计算。例如,该第一均值可以按照如下公式进行计算:
M1=a1×s
t-1+a2×s
t-2+a3×s
t-3+…+am×s
1;
其中,a1~am是指各次检验迭代的点位置对应的计算权重,s
t-1是指上一检验迭代对 应的点位置,s
t-2,s
t-3…s
1是指上一检验迭代之前的预设数量的迭代间隔的检验迭代对应的点位置,M1是指上述的第一均值。
例如,上一检验迭代为神经网络运算的第100次迭代,历史迭代可以是第1次迭代至第99次迭代,该99次历史迭代可以分属于11个迭代间隔。比如,第1次迭代至第9次迭代属于第1个迭代间隔,第10次迭代至第18次迭代属于第2个迭代间隔,……,第90次迭代至第99次迭代属于第11个迭代间隔。则处理器可以获得该第100次迭代的点位置(即s
t-1),并获得该第100次迭代之前的迭代间隔中检验迭代的点位置,即s
1可以指神经网络的第1个迭代间隔的检验迭代对应的点位置(比如s
1可以指神经网络的第1次迭代对应的点位置),……,s
t-3可以指神经网络的第10个迭代间隔的检验迭代对应的点位置(比如s
t-3可以指神经网络的第81次迭代对应的点位置),s
t-2可以指神经网络的第11个迭代间隔的检验迭代对应的点位置(比如,s
t-2可以指神经网络的第90次迭代对应的点位置)。进一步地,处理器可以根据上述公式计算获得第一均值M1。
本披露实施例中,为方便举例说明,假定该迭代间隔包含的迭代数量相同。而在实际使用过程中,该迭代间隔包含的迭代数量可以不相同。可选地,该迭代间隔包含的迭代数量随迭代的增加而增加,即随着神经网络训练或微调的进行,迭代间隔可以越来越大。
再进一步地,为进一步简化计算,降低数据占用的存储空间,上述第一均值M1可以采用如下公式进行计算:
M1=α×s
t-1+(1-α)×M0 公式(39)
其中,α是指上一检验迭代对应的点位置的计算权重,s
t-1是指上一检验迭代对应的点位置,M0是指该上一检验迭代之前的检验迭代对应的滑动平均值,该M0的具体计算方式可参照上述的M1的计算方式,此处不再赘述。
S112、根据当前检验迭代对应的点位置及所述当前检验迭代之前的历史迭代的点位置,确定第二均值。其中,当前检验迭代对应的点位置可以根据当前检验迭代的目标数据位宽和待量化数据确定。
可选地,该第二均值M2可以按照如下公式进行计算:
M2=b1×s
t+b2×s
t-1+b3×s
t-2+…+bm×s
1 公式(40)
其中,b1~bm是指各次迭代的点位置对应的计算权重,s
t是指当前检验迭代对应的点位置,s
t-1,s
t-2…s
1是指当前检验迭代之前的历史迭代对应的点位置,M2是指上述的第二均值。进一步地,根据数据的分布特性,历史迭代与该当前检验迭代距离越远,对该当前检验迭代附近的迭代的点位置的分布及变动幅度影响越小,因此,上述计算权重可以按照b1~bm的顺序依次减小。
例如,当前检验迭代为神经网络运算的第101次迭代,该当前检验迭代之前的历史迭代是指第1次迭代至第100次迭代。则处理器可以获得该第101次迭代的点位置(即s
t),并获得该第101次迭代之前的历史迭代的点位置,即s
1可以指神经网络的第1次迭代对应的点位置……,s
t-2可以指神经网络的第99次迭代对应的点位置,s
t-1可以指神经网络的第100次迭代对应的点位置。进一步地,处理器可以根据上述公式计算获得第二均值M2。
可选地,该第二均值可以根据各个迭代间隔对应的检验迭代的点位置进行计算。具体地,如图8O所示,示出本披露一实施例中第二均值的确定方法800O的流程图。上述操作S112可以包括如下操作:
S1121、获取预设数量的中间滑动平均值,其中,各个所述中间滑动平均值是根据所述当前检验迭代之前所述预设数量的检验迭代确定,所述检验迭代为调整所述神经网络量化过程中的参数时对应的迭代;
S1122、根据所述当前检验迭代的点位置以及所述预设数量的中间滑动平均值,确定所述第二均值。
例如,该第二均值可以按照如下公式进行计算:
M2=b1×s
t+b2×s
t-1+b3×s
t-2+…+bm×s
1;
其中,b1~bm是指各次迭代的点位置对应的计算权重,s
t是指当前检验迭代对应的点位置,s
t-1,s
t-2…s
1是指当前检验迭代之前的检验迭代对应的点位置,M2是指上述的第二均值。
例如,当前检验迭代为第100次迭代,历史迭代可以是第1次迭代至第99次迭代,该99次历史迭代可以分属于11个迭代间隔。比如,第1次迭代至第9次迭代属于第1个迭代间隔,第10次迭代至第18次迭代属于第2个迭代间隔,……,第90次迭代至第99次迭代属于第11个迭代间隔。则处理器可以获得该第100次迭代的点位置(即s
t),并获得该第100次迭代之前的迭代间隔中检验迭代的点位置,即s
1可以指神经网络的第1个迭代间隔的检验迭代对应的点位置(比如s
1可以指神经网络的第1次迭代对应的点位置),……,s
t-2可以指神经网络的第10个迭代间隔的检验迭代对应的点位置(比如s
t-2可以指神经网络的第81次迭代对应的点位置),s
t-1可以指神经网络的第11个迭代间隔的检验迭代对应的点位置(比如,s
t-1可以指神经网络的第90次迭代对应的点位置)。进一步地,处理器可以根据上述公式计算获得第二均值M2。
本披露实施例中,为方便举例说明,假定该迭代间隔包含的迭代数量相同。而在实际使用过程中,该迭代间隔包含的迭代数量可以不相同。可选地,该迭代间隔包含的迭代数量随迭代的增加而增加,即随着神经网络训练或微调的进行,迭代间隔可以越来越大。
更进一步地,为简便计算,降低数据占用的存储空间,处理器可以根据所述当前检验迭代对应的点位置以及所述第一均值,确定所述第二均值,即上述第二均值可以采用如下公式进行计算:
M2=β×s
t+(1-β)×M1 公式(41)
其中,β是指当前检验迭代对应的点位置的计算权重,M1是指上述的第一均值。
S113、根据所述第一均值和所述第二均值确定第一误差,所述第一误差用于表征所述当前检验迭代及所述历史迭代的点位置的变动幅度。
可选地,第一误差可以等于第二均值与上述的第一均值之间的差值的绝对值。具体地,上述的第一误差可以按照如下公式进行计算:
diff
update1=|M2-M1|=β|s
(t)-M1| 公式(42)
可选地,上述的当前检验迭代的点位置可以根据当前检验迭代的待量化数据和当前检验迭代对应的目标数据位宽确定,具体的点位置计算方式可以参见上文的公式。其中,上述当前检验迭代对应的目标数据位宽可以是超参数。进一步可选地,该当前检验迭代对应的目标数据位宽可以是用户自定义输入的。可选地,在神经网络训练或微调过程中的待量化数据对应的数据位宽可以是不变的,即同一神经网络的同种待量化数据采用同一数据位宽进行量化,例如,针对该神经网络在各次迭代中的神经元数据均采用8比特的数据位宽进行量化。
可选地,神经网络训练或微调过程中的待量化数据对应的数据位宽为可变的,以保证数据位宽能够满足待量化数据的量化需求。也就是说,处理器可以根据待量化数据,自适应的调整该待量化数据对应的数据位宽,获得该待量化数据对应的目标数据位宽。具体地,处理器可以首先确定当前检验迭代对应的目标数据位宽,之后,处理器可以根据该当前检验迭代对应的目标数据位宽及该当前检验迭代对应的待量化数据,确定当前检验迭代对应的点位置。
本披露实施例中,由于当前检验迭代的数据位宽发生变化时,会相应的带来点位置的变化。但此时点位置的变化并非是待量化数据的数据变动引起的,根据上述公式(42)确定的第一误差计算获得的目标迭代间隔可能不准确,从而会影响量化的精度。因此,在当前检验迭代的数据位宽发生变化时,可以相应的调整上述的第二均值,以保证第一误差能够准确的反映点位置的变动幅度,进而保证目标迭代间隔的准确性和可靠性。具体地,如图8P所示,示出本披露另一实施例中第二均值的确定方法800P的流程图。上述方法还可以包括:
S116、根据所述目标数据位宽,确定所述当前检验迭代的数据位宽调整值;
具体地,处理器可以根据当前检验迭代的目标数据位宽和初始数据位宽,确定当前检验迭代的数据位宽调整值。其中,该数据位宽调整值=目标数据位宽-初始数据位宽。当然,处理器还可以直接获得当前检验迭代的数据位宽调整值。
S117、根据所述当前检验迭代的数据位宽调整值,更新上述的第二均值。
具体地,若数据位宽调整值大于预设参数(例如,该预设参数可以等于零)时,即当前检验迭代的数据位宽增加时,处理器可以相应地减少第二均值。若数据位宽调整值小于预设参数(例如,该预设参数可以等于零)时,即当前检验迭代的数据位宽减少时,处理器可以相应地增加第二均值。若数据位宽调整值等于预设参数,即当数据位宽调整值等于0时,此时当前迭代对应的待量化数据未发生改变,更新后的第二均值等于更新前的第二均值,该更新前的第二均值根据上述公式(41)计算获得。可选地,若数据位宽调整值等于预设参数,即当数据位宽调整值等于0时,处理器可以不更新第二均值,即处理器可以不执行上述操作S117。
例如,更新前的第二均值M2=β×s
t+(1-β)×M1;当前检验迭代对应的目标数据位宽n2=初始数据位宽n1+Δn时,其中,Δn表示数据位宽调整值。此时,更新后的第二均值M2=β×(s
t-Δn)+(1-β)×(M1-Δn)。当前检验迭代对应的目标数据位宽 n2=初始数据位宽n1-Δn时,其中,Δn表示数据位宽调整值,此时,更新后的第二均值M2=β×(s
t-Δn)+(1-β)×(M1+Δn),其中,s
t是指当前检验迭代是根据目标数据位宽确定的点位置。
再如,更新前的第二均值M2=β×s
t+(1-β)×M1;当前检验迭代对应的目标数据位宽n2=初始数据位宽n1+Δn时,其中,Δn表示数据位宽调整值。此时,更新后的第二均值M2=β×s
t+(1-β)×M1-Δn。再如,当前检验迭代对应的目标数据位宽n2=初始数据位宽n1-Δn时,其中,Δn表示数据位宽调整值,此时,更新后的第二均值M2=β×s
t+(1-β)×M1+Δn,其中,s
t是指当前检验迭代是根据目标数据位宽确定的点位置。
进一步地,上述操作S200可以包括:
根据点位置的变动幅度,确定目标迭代间隔,其中,该目标迭代间隔与上述的点位置的变动幅度负相关。即上述的点位置的变动幅度越大,则该目标迭代间隔越小。上述的点位置的变动幅度越小,则该目标迭代间隔越大。
如上所述,上述的第一误差可以表征点位置的变动幅度,上述操作可以包括:
处理器可以根据所述第一误差确定所述目标迭代间隔,其中,目标迭代间隔与所述第一误差负相关。即第一误差越大,则说明点位置的变化幅度越大,进而表明待量化数据的数据变动幅度越大,此时,目标迭代间隔越小。
具体地,处理器可以根据以下公式计算得到目标迭代间隔I:
其中,I为目标迭代间隔,diff
update1表示上述的第一误差,δ和γ可以为超参数。
可以理解的是,第一误差可以用于衡量点位置的变动幅度,第一误差越大,表明点位置的变动幅度越大,进而说明待量化数据的数据变动幅度越大,目标迭代间隔需要设置得越小。也就是说,第一误差越大,量化参数的调整越频繁。
在本实施例中,通过计算点位置的变动幅度(第一误差),并根据点位置的变动幅度确定目标迭代间隔。由于量化参数根据目标迭代间隔确定,也就使得根据量化参数进行量化得到的量化数据,能够更加符合目标数据的点位置的变动趋势,在保证量化精度的同时,提高神经网络的运行效率。
可选地,处理器在当前检验迭代处确定目标迭代间隔后,可以进一步在当前检验迭代处确定目标迭代间隔对应的量化参数和数据位宽等参数,从而根据目标迭代间隔更新量化参数。其中,量化参数可以包括点位置和/或缩放系数。进一步地,该量化参数还可以包括偏移量。该量化参数的具体计算方式可参见上文中的描述。如图8Q所示,示出本披露另一实施例的量化参数调整方法800Q的流程图,上述方法还可以包括:
S300、处理器根据目标迭代间隔调整神经网络运算中的量化参数。
具体地,处理器可以根据目标迭代间隔确定检验迭代,并在各个检验迭代处更新目标迭代间隔,还可以在各个检验迭代处更新量化参数。例如,神经网络运算中的数据位宽保持不变,此时,处理器可以在各个检验迭代处直接根据检验迭代的待量化数据,调整点位置等量化参数。再如,神经网络运算中的数据位宽可变,此时,处理器可以在各个检验迭 代处更新数据位宽,并根据更新后的数据位宽和该检验迭代的待量化数据,调整点位置等量化参数。
本披露实施例中,处理器在各个检验迭代处更新量化参数,以保证当前量化参数满足待量化数据的量化需求。其中,更新前的目标迭代间隔与更新后的目标迭代间隔可以相同,也可以不同。更新前的数据位宽与更新后的数据位宽可以相同,也可以不同;即不同迭代间隔的数据位宽可以相同,也可以不同。更新前的量化参数与更新后的量化参数可以相同,也可以不同;即不同迭代间隔的量化参数可以相同,也可以不同。
可选地,上述操作S300中,处理器可以在检验迭代处确定目标迭代间隔中的量化参数,以调整神经网络运算中的量化参数。
在一种情况下,该神经网络运算中的各次迭代对应的数据位宽均不发生变化,即该神经网络运算中各次迭代对应的数据位宽均相同,此时,处理器可以通过确定目标迭代间隔中的点位置等量化参数,实现根据目标迭代间隔对神经网络运算中的量化参数的调整的目的。其中,该目标迭代间隔中迭代对应的量化参数可以是一致的。也就是说,目标迭代间隔中的各次迭代均采用同一点位置,仅在各次检验迭代处更新确定点位置等量化参数,从而可以避免每次迭代都对量化参数进行更新调整,从而减少了量化过程中的计算量,提高了量化操作的效率。
可选地,针对上述数据位宽不变的情况,目标迭代间隔中迭代对应的点位置可以保持一致。具体地,处理器可以根据当前检验迭代的待量化数据和该当前检验迭代对应的目标数据位宽,确定当前检验迭代对应的点位置,并将该当前检验迭代对应的点位置作为该目标迭代间隔对应的点位置,该目标迭代间隔中迭代均沿用当前检验迭代对应的点位置。可选地,该当前检验迭代对应的目标数据位宽可以是超参数。例如,该当前检验迭代对应的目标数据位宽是由用户自定义输入的。该当前检验迭代对应的点位置可以参见上文的公式计算。
在一种情况下,该神经网络运算中的各次迭代对应的数据位宽可以发生变化,即不同目标迭代间隔对应的数据位宽可以不一致,但目标迭代间隔中各次迭代的数据位宽保持不变。其中,该目标迭代间隔中迭代对应的数据位宽可以是超参数,例如,该目标迭代间隔中迭代对应的数据位宽可以是用户自定义输入的。在一种情况下,该目标迭代间隔中迭代对应的数据位宽也可以是处理器计算获得的,例如,处理器可以根据当前检验迭代的待量化数据,确定当前检验迭代对应的目标数据位宽,并将该当前检验迭代对应的目标数据位宽作为目标迭代间隔对应的数据位宽。
此时,为简化量化过程中的计算量,该目标迭代间隔中对应的点位置等量化参数也可以保持不变。也就是说,目标迭代间隔中的各次迭代均采用同一点位置,仅在各次检验迭代处更新确定点位置等量化参数以及数据位宽,从而可以避免每次迭代都对量化参数进行更新调整,从而减少了量化过程中的计算量,提高了量化操作的效率。
可选地,针对上述目标迭代间隔对应的数据位宽不变的情况,目标迭代间隔中迭代对应的点位置可以保持一致。具体地,处理器可以根据当前检验迭代的待量化数据和该当前 检验迭代对应的目标数据位宽,确定当前检验迭代对应的点位置,并将该当前检验迭代对应的点位置作为该目标迭代间隔对应的点位置,该目标迭代间隔中迭代均沿用当前检验迭代对应的点位置。可选地,该当前检验迭代对应的目标数据位宽可以是超参数。例如,该当前检验迭代对应的目标数据位宽是由用户自定义输入的。该当前检验迭代对应的点位置可以参见上文的公式计算。
可选地,目标迭代间隔中迭代对应的缩放系数可以一致。处理器可以根据当前检验迭代的待量化数据,确定当前检验迭代对应的缩放系数,并将该当前检验迭代对应的缩放系数作为目标迭代间隔中各次迭代的缩放系数。其中,该目标迭代间隔中迭代对应的缩放系数一致。
可选地,目标迭代间隔中迭代对应的偏移量一致。处理器可以根据当前检验迭代的待量化数据,确定当前检验迭代对应的偏移量,并将该当前检验迭代对应的偏移量作为目标迭代间隔中各次迭代的偏移量。进一步地,处理器还可以确定待量化数据所有元素中的最小值和最大值,并进一步确定点位置和缩放系数等量化参数,具体可参见上文中的描述。该目标迭代间隔中迭代对应的偏移量一致。
例如,该目标迭代间隔可以从当前检验迭代开始计算迭代数量,即目标迭代间隔对应的检验迭代可以是目标迭代间隔的起始迭代。例如,当前检验迭代为第100次迭代,处理器根据待量化数据的数据变动幅度,确定目标迭代间隔的迭代间隔为3,则处理器可以确定该目标迭代间隔包括3次迭代,分别为第100次迭代、第101次迭代和第102次迭代。进而处理器可以根据第100次迭代对应的待量化数据和目标数据位宽,确定该第100次迭代对应的点位置等量化参数,并可以采用该第100次迭代对应的点位置等量化参数对第100次迭代、第101次迭代和第102次迭代进行量化。这样,处理器在第101次迭代和第102次迭代无需计算点位置等量化参数,减少了量化过程中的计算量,提高了量化操作的效率。
可选地,目标迭代间隔还可以是从当前检验迭代的下一次迭代开始计算迭代数量,即该目标迭代间隔对应的检验迭代也可以是该目标迭代间隔的终止迭代。例如,当前检验迭代为第100次迭代,处理器根据待量化数据的数据变动幅度,确定目标迭代间隔的迭代间隔为3。则处理器可以确定该目标迭代间隔包括3次迭代,分别为第101次迭代、第102次迭代和第103次迭代。进而处理器可以根据第100次迭代对应的待量化数据和目标数据位宽,确定该第100次迭代对应的点位置等量化参数,并可以采用该第100次迭代对应的点位置等量化参数对第101次迭代、第102次迭代和第103次迭代进行量化。这样,处理器在第102次迭代和第103次迭代无需计算点位置等量化参数,减少了量化过程中的计算量,提高了量化操作的效率。
本披露实施例中,同一目标迭代间隔中各次迭代对应的数据位宽及量化参数均一致,即同一目标迭代间隔中各次迭代对应的数据位宽、点位置、缩放系数及偏移量均保持不变,从而在神经网络的训练或微调过程中,可以避免频繁地调整待量化数据的量化参数,减少了量化过程中的计算量,从而可以提高量化效率。并且,通过在训练或微调的不同阶段根据数据变动幅度,动态地调整量化参数,可以保证量化精度。
在另一情况下,该神经网络运算中的各次迭代对应的数据位宽可以发生变化,但目标迭代间隔中各次迭代的数据位宽保持不变。此时,目标迭代间隔中迭代对应的点位置等量化参数也可以不一致。处理器还可以根据当前检验迭代对应的目标数据位宽,确定目标迭代间隔对应的数据位宽,其中,目标迭代间隔中迭代对应的数据位宽一致。之后,处理器可以根据该目标迭代间隔对应的数据位宽和点位置迭代间隔,调整神经网络运算过程中的点位置等量化参数。可选地,如图8R所示,示出本披露一实施例的量化参数调整方法中调整量化参数的方法800R的流程图,上述操作S300还可以包括:
S310、根据当前检验迭代的待量化数据,确定目标迭代间隔对应的数据位宽;其中,该目标迭代间隔中迭代对应的数据位宽一致。也就是说,神经网络运算过程中的数据位宽每隔一个目标迭代间隔更新一次。可选地,该目标迭代间隔对应的数据位宽可以为当前检验迭代的目标数据位宽。该当前检验迭代的目标数据位宽可参见上文中的操作S114和S115,此处不再赘述。
例如,该目标迭代间隔可以从当前检验迭代开始计算迭代数量,即目标迭代间隔对应的检验迭代可以是目标迭代间隔的起始迭代。例如,当前检验迭代为第100次迭代,处理器根据待量化数据的数据变动幅度,确定目标迭代间隔的迭代间隔为6,则处理器可以确定该目标迭代间隔包括6次迭代,分别为第100次迭代至第105次迭代。此时,处理器可以确定第100次迭代的目标数据位宽,且第101次迭代至第105次迭代沿用该第100次迭代的目标数据位宽,无需在第101次迭代至第105次迭代计算目标数据位宽,从而减少计算量,提高量化效率及运算效率。之后,第106次迭代可以作为当前检验迭代,并重复上述确定目标迭代间隔,以及更新数据位宽的操作。
可选地,目标迭代间隔还可以是从当前检验迭代的下一次迭代开始计算迭代数量,即该目标迭代间隔对应的检验迭代也可以是该目标迭代间隔的终止迭代。例如,当前检验迭代为第100次迭代,处理器根据待量化数据的数据变动幅度,确定目标迭代间隔的迭代间隔为6。则处理器可以确定该目标迭代间隔包括6次迭代,分别为第101次迭代至第106次迭代。此时,处理器可以确定第100次迭代的目标数据位宽,且第101次迭代至106次迭代沿用该第100次迭代的目标数据位宽,无需在第101次迭代至106次迭代计算目标数据位宽,从而减少计算量,提高量化效率及运算效率。之后,第106次迭代可以作为当前检验迭代,并重复上述确定目标迭代间隔,以及更新数据位宽的操作。
S320、处理器根据获取的点位置迭代间隔和所述目标迭代间隔对应的数据位宽,调整所述目标迭代间隔中迭代对应的点位置,以调整所述神经网络运算中的点位置等量化参数。
其中,所述点位置迭代间隔包含至少一次迭代,所述点位置迭代间隔中迭代的点位置一致。可选地,该点位置迭代间隔可以是超参数,例如,该点位置迭代间隔可以是用户自定义输入的。
可选地,所述点位置迭代间隔小于或等于所述目标迭代间隔。当该点位置迭代间隔与上述的目标迭代间隔相同时,处理器可以在当前检验迭代处同步更新数据位宽和点位置等量化参数。进一步可选地,目标迭代间隔中迭代对应的缩放系数可以一致。更进一步地, 目标迭代间隔中迭代对应的偏移量一致。此时,该目标迭代间隔中的迭代对应的数据位宽和点位置等量化参数均相同,从而可以降低计算量,提高量化效率和运算效率。具体实现过程与上述实施例基本一致,可参见上文的描述,此处不再赘述。
当点位置迭代间隔小于上述的目标迭代间隔时,处理器可以在目标迭代间隔对应的检验迭代处更新数据位宽和点位置等量化参数,并在该点位置迭代间隔确定的子检验迭代处更新点位置等量化参数。由于在数据位宽不变的情况下,点位置等量化参数可以根据待量化数据进行微调,因此,在同一目标迭代间隔内也可以对点位置等量化参数进行调整,以进一步提高量化精度。
具体地,处理器可以根据当前检验迭代和点位置迭代间隔确定子检验迭代,该子检验迭代用于调整点位置,该子检验迭代可以是目标迭代间隔中的迭代。进一步地,处理器可以根据子检验迭代的待量化数据和目标迭代间隔对应的数据位宽,调整目标迭代间隔中迭代对应的点位置,其中,点位置的确定方式可以参照上述的公式,此处不再赘述。
例如,当前检验迭代为第100次迭代,该目标迭代间隔为6,该目标迭代间隔包含的迭代为第100次迭代至第105次迭代。处理器获取的点位置迭代间隔为I
s1=3,则可以从当前检验迭代开始间隔三次迭代调整一次点位置。具体地,处理器可以将第100次迭代作为上述的子检验迭代,并计算获得该第100次迭代对应的点位置s1,在第100次迭代、第101次迭代和第102次迭代共用点位置s1进行量化。之后,处理器可以根据点位置迭代间隔I
s1将第103次迭代作为上述的子检验迭代,同时处理器还可以根据第103次迭代对应的待量化数据和目标迭代间隔对应的数据位宽n确定第二个点位置迭代间隔对应的点位置s2,则在第103次迭代至第105次迭代中可以共用上述的点位置s2进行量化。本披露实施例中,上述的更新前的点位置s1与更新后的点位置s2的值可以相同,也可以不同。进一步地,处理器可以在第106次迭代重新根据待量化数据的数据变动幅度,确定下一目标迭代间隔以及该下一目标迭代间隔对应的数据位宽及点位置等量化参数。
再如,当前检验迭代为第100次迭代,该目标迭代间隔为6,该目标迭代间隔包含的迭代为第101次迭代至第106次迭代。处理器获取的点位置迭代间隔为I
s1=3,则可以从当前检验迭代开始间隔三次迭代调整一次点位置。具体地,处理器可以根据当前检验迭代的待量化数据和当前检验迭代对应的目标数据位宽n1,确定第一个点位置迭代间隔对应的点位置为s1,则在第101次迭代、第102次迭代和103次迭代共用上述的点位置s1进行量化。之后,处理器可以根据点位置迭代间隔I
s1将第104次迭代作为上述的子检验迭代,同时处理器还可以根据第104次迭代对应的待量化数据和目标迭代间隔对应的数据位宽n1确定第二个点位置迭代间隔对应的点位置s2,则在第104次迭代至第106次迭代中可以共用上述的点位置s2进行量化。本披露实施例中,上述的更新前的点位置s1与更新后的点位置s2的值可以相同,也可以不同。进一步地,处理器可以在106次迭代重新根据待量化数据的数据变动幅度,确定下一目标迭代间隔以及该下一目标迭代间隔对应的数据位宽及点位置等量化参数。
可选地,该点位置迭代间隔可以等于1,即每次迭代均更新一次点位置。可选地,该点位置迭代间隔可以相同,也可以不同。例如,该目标迭代间隔包含的至少一个点位置迭 代间隔可以是依次增大的。此处仅以举例的说明本实施例的实现方式,并不用于限定本披露。
可选地,该目标迭代间隔中迭代对应的缩放系数也可以不一致。进一步可选地,该缩放系数可以与上述的点位置同步更新,也就是说,该缩放系数对应的迭代间隔可以等于上述的点位置迭代间隔。即每当处理器更新确定点位置时,会相应地更新确定缩放系数。
可选地,该目标迭代间隔中迭代对应的偏移量也可以不一致。进一步地,该偏移量可以与上述的点位置同步更新,也就是说,该偏移量对应的迭代间隔可以等于上述的点位置迭代间隔。即每当处理器更新确定点位置时,会相应地更新确定偏移量。当然,该偏移量也可以与上述地点位置或数据位宽异步更新,此处不做具体限定。更进一步地,处理器还可以确定待量化数据所有元素中的最小值和最大值,并进一步确定点位置和缩放系数等量化参数,具体可参见上文中的描述。
在另一种实施例中,处理器可以根据点位置的变动幅度和待量化数据的数据位宽的变化,综合确定待量化数据的数据变动幅度,并根据该待量化数据的数据变动幅度确定目标迭代间隔,其中,该目标迭代间隔可以用于更新确定数据位宽,即处理器可以在每个目标迭代间隔的检验迭代处更新确定数据位宽。由于点位置可以反映定点数据的精度,数据位宽可以反映定点数据的数据表示范围,因而通过综合点位置的变动幅度和待量化数据的数据位宽变化,可以保证量化后的数据既能够兼顾精度,也能够满足数据表示范围。可选地,点位置的变化幅度可以采用上述的第一误差进行表征,数据位宽的变化可以根据上述的量化误差进行确定。具体地,如图8S所示,示出本披露另一实施例的参数调整方法中目标迭代间隔的确定方法800S的流程图,上述方法可以包括:
S400、获取第一误差,第一误差能够表征点位置的变动幅度,该点位置的变动幅度可以表示待量化数据的数据变动幅度;具体地,上述第一误差的计算方式可参见上文中操作S110中的描述,此处不再赘述。
S500、获取第二误差,所述第二误差用于表征所述数据位宽的变化。
可选地,上述的第二误差可以根据量化误差进行确定,该第二误差与上述的量化误差正相关。具体地,如图8T所示,示出本披露又一实施例的参数调整方法中目标迭代间隔的确定方法800T的流程图,上述操作S500可以包括:
S510、根据所述当前检验迭代中待量化数据和所述当前检验迭代的量化数据,确定量化误差,其中,所述当前检验迭代的量化数据根据初始数据位宽对所述当前检验迭代的待量化数据进行量化获得。其中,具体的量化误差确定方式可参见上文中操作S114中的描述,此处不再赘述。
S520、根据所述量化误差确定所述第二误差,所述第二误差与所述量化误差正相关。
具体地,第二误差可以按照如下公式进行计算:
diff
update2=θ*diff
bit
2 公式(44)
其中,diff
update2表示上述的第二误差,diff
bit表示上述的量化误差,θ可以为超参数。
返回图8S,在S600、根据所述第二误差和所述第一误差,确定所述目标迭代间隔。
具体地,处理器可以根据第一误差和第二误差计算获得目标误差,并根据目标误差确定目标迭代间隔。可选地,目标误差可以是第一误差和第二误差进行加权平均计算获得。例如,目标误差=K*第一误差+(1-K)*第二误差,其中,K为超参数。之后,处理器可以根据该目标误差确定目标迭代间隔,目标迭代间隔与该目标误差负相关。即目标误差越大,目标迭代间隔越小。
可选地,该目标误差还可以根据第一误差和第二误差中的最值进行确定,此时第一误差或第二误差的权重取值为0。具体地,如图8T所示,上述操作S600可以包括:
S610、将所述第一误差和所述第二误差中最大值作为目标误差。
具体地,处理器可以比较第一误差diff
update1和第二误差diff
update2的大小,当第一误差diff
update1大于第二误差diff
update2时,则该目标误差等于第一误差diff
update1。当第一误差diff
update1小于第二误差时,则该目标误差等于第二误差diff
update2。当第一误差diff
update1等于第二误差时,则该目标误差可以时第一误差diff
update1或第二误差diff
update2。即目标误差diff
update可以按照如下公式进行确定:
diff
update=max(diff
update1,diff
update2) 公式(45)
其中,diff
update是指目标误差,diff
update1是指第一误差,diff
update2是指第二误差。
S620、根据所述目标误差确定所述目标迭代间隔,其中,所述目标误差与所述目标迭代间隔负相关。具体地,目标迭代间隔可以按照如下方式进行确定,
可以根据以下公式计算得到目标迭代间隔:
其中,I表示目标迭代间隔,diff
update表示上述的目标误差,δ和γ可以为超参数。
可选地,上述实施例中,神经网络运算中数据位宽可变,并可以通过第二误差衡量数据位宽的变化趋势。此种情况下,如图8T所示,处理器在确定目标迭代间隔后,可以执行操作S630,确定目标迭代间隔中迭代对应的数据位宽,其中,该目标迭代间隔中迭代对应的数据位宽一致。具体地,处理器可以根据当前检验迭代的待量化数据,确定目标迭代间隔对应的数据位宽。也就是说,神经网络运算过程中的数据位宽每隔一个目标迭代间隔更新一次。可选地,该目标迭代间隔对应的数据位宽可以为当前检验迭代的目标数据位宽。该当前检验迭代的目标数据位宽可参见上文中的操作S114和S115,此处不再赘述。
例如,该目标迭代间隔可以从当前检验迭代开始计算迭代数量,即目标迭代间隔对应的检验迭代可以是目标迭代间隔的起始迭代。例如,当前检验迭代为第100次迭代,处理器根据待量化数据的数据变动幅度,确定目标迭代间隔的迭代间隔为6,则处理器可以确定该目标迭代间隔包括6次迭代,分别为第100次迭代至第105次迭代。此时,处理器可以确定第100次迭代的目标数据位宽,且第101次迭代至第105次迭代沿用该第100次迭代的目标数据位宽,无需在第101次迭代至第105次迭代计算目标数据位宽,从而减少计算量,提高量化效率及运算效率。之后,第106次迭代可以作为当前检验迭代,并重复上述确定目标迭代间隔,以及更新数据位宽的操作。
可选地,目标迭代间隔还可以是从当前检验迭代的下一次迭代开始计算迭代数量,即该目标迭代间隔对应的检验迭代也可以是该目标迭代间隔的终止迭代。例如,当前检验迭代为第100次迭代,处理器根据待量化数据的数据变动幅度,确定目标迭代间隔的迭代间隔为6。则处理器可以确定该目标迭代间隔包括6次迭代,分别为第101次迭代至第106次迭代。此时,处理器可以确定第100次迭代的目标数据位宽,且第101次迭代至106次迭代沿用该第100次迭代的目标数据位宽,无需在第101次迭代至106次迭代计算目标数据位宽,从而减少计算量,提高量化效率及运算效率。之后,第106次迭代可以作为当前检验迭代,并重复上述确定目标迭代间隔,以及更新数据位宽的操作。
再进一步地,处理器还可以在检验迭代处确定目标迭代间隔中的量化参数,以根据目标迭代间隔调整神经网络运算中的量化参数。即该神经网络运算中的点位置等量化参数可以与数据位宽同步更新。
在一种情况下,该目标迭代间隔中迭代对应的量化参数可以是一致的。可选地,处理器可以根据当前检验迭代的待量化数据和该当前检验迭代对应的目标数据位宽,确定当前检验迭代对应的点位置,并将该当前检验迭代对应的点位置作为该目标迭代间隔对应的点位置,其中该目标迭代间隔中迭代对应的点位置一致。也就是说,目标迭代间隔中的各次迭代均沿用当前检验迭代的点位置等量化参数,避免了每次迭代都对量化参数进行更新调整,从而减少了量化过程中的计算量,提高了量化操作的效率。
可选地,目标迭代间隔中迭代对应的缩放系数可以一致。处理器可以根据当前检验迭代的待量化数据,确定当前检验迭代对应的缩放系数,并将该当前检验迭代对应的缩放系数作为目标迭代间隔中各次迭代的缩放系数。其中,该目标迭代间隔中迭代对应的缩放系数一致。
可选地,目标迭代间隔中迭代对应的偏移量一致。处理器可以根据当前检验迭代的待量化数据,确定当前检验迭代对应的偏移量,并将该当前检验迭代对应的偏移量作为目标迭代间隔中各次迭代的偏移量。进一步地,处理器还可以确定待量化数据所有元素中的最小值和最大值,并进一步确定点位置和缩放系数等量化参数,具体可参见上文中的描述。该目标迭代间隔中迭代对应的偏移量一致。
例如,该目标迭代间隔可以从当前检验迭代开始计算迭代数量,即目标迭代间隔对应的检验迭代可以是目标迭代间隔的起始迭代。例如,当前检验迭代为第100次迭代,处理器根据待量化数据的数据变动幅度,确定目标迭代间隔的迭代间隔为3,则处理器可以确定该目标迭代间隔包括3次迭代,分别为第100次迭代、第101次迭代和第102次迭代。进而处理器可以根据第100次迭代对应的待量化数据和目标数据位宽,确定该第100次迭代对应的点位置等量化参数,并可以采用该第100次迭代对应的点位置等量化参数对第100次迭代、第101次迭代和第102次迭代进行量化。这样,处理器在第101次迭代和第102次迭代无需计算点位置等量化参数,减少了量化过程中的计算量,提高了量化操作的效率。
可选地,目标迭代间隔还可以是从当前检验迭代的下一次迭代开始计算迭代数量,即该目标迭代间隔对应的检验迭代也可以是该目标迭代间隔的终止迭代。例如,当前检验迭 代为第100次迭代,处理器根据待量化数据的数据变动幅度,确定目标迭代间隔的迭代间隔为3。则处理器可以确定该目标迭代间隔包括3次迭代,分别为第101次迭代、第102次迭代和第103次迭代。进而处理器可以根据第100次迭代对应的待量化数据和目标数据位宽,确定该第100次迭代对应的点位置等量化参数,并可以采用该第100次迭代对应的点位置等量化参数对第101次迭代、第102次迭代和第103次迭代进行量化。这样,处理器在第102次迭代和第103次迭代无需计算点位置等量化参数,减少了量化过程中的计算量,提高了量化操作的效率。
本披露实施例中,同一目标迭代间隔中各次迭代对应的数据位宽及量化参数均一致,即同一目标迭代间隔中各次迭代对应的数据位宽、点位置、缩放系数及偏移量均保持不变,从而在神经网络的训练或微调过程中,可以避免频繁地调整待量化数据的量化参数,减少了量化过程中的计算量,从而可以提高量化效率。并且,通过在训练或微调的不同阶段根据数据变动幅度,动态地调整量化参数,可以保证量化精度。
在另一种情况下,处理器还可以根据点位置等量化参数对应的点位置迭代间隔确定目标迭代间隔中的量化参数,以根据调整神经网络运算中的量化参数。即该神经网络运算中的点位置等量化参数可以与数据位宽异步更新,处理器可以在目标迭代间隔的检验迭代处更新数据位宽和点位置等量化参数,处理器还可以根据点位置迭代间隔单独更新目标迭代间隔中迭代对应的点位置。
具体地,处理器还可以根据当前检验迭代对应的目标数据位宽,确定目标迭代间隔对应的数据位宽,其中,目标迭代间隔中迭代对应的数据位宽一致。之后,处理器可以根据该目标迭代间隔对应的数据位宽和点位置迭代间隔,调整神经网络运算过程中的点位置等量化参数。即如图8T所示,在确定目标迭代间隔对应的数据位宽之后,处理器还可以执行操作S640,根据获取的点位置迭代间隔和所述目标迭代间隔对应的数据位宽,调整所述目标迭代间隔中迭代对应的点位置,以调整所述神经网络运算中的点位置。其中,所述点位置迭代间隔包含至少一次迭代,所述点位置迭代间隔中迭代的点位置一致。可选地,该点位置迭代间隔可以是超参数,例如,该点位置迭代间隔可以是用户自定义输入的。
可选地,所述点位置迭代间隔小于或等于所述目标迭代间隔。当该点位置迭代间隔与上述的目标迭代间隔相同时,处理器可以在当前检验迭代处同步更新数据位宽和点位置等量化参数。进一步可选地,目标迭代间隔中迭代对应的缩放系数可以一致。更进一步地,目标迭代间隔中迭代对应的偏移量一致。此时,该目标迭代间隔中的迭代对应的数据位宽和点位置等量化参数均相同,从而可以降低计算量,提高量化效率和运算效率。具体实现过程与上述实施例基本一致,可参见上文的描述,此处不再赘述。
当点位置迭代间隔小于上述的目标迭代间隔时,处理器可以在目标迭代间隔对应的检验迭代处更新数据位宽和点位置等量化参数,并在该点位置迭代间隔确定的子检验迭代处更新点位置等量化参数。由于在数据位宽不变的情况下,点位置等量化参数可以根据待量化数据进行微调,因此,在同一目标迭代间隔内也可以对点位置等量化参数进行调整,以进一步提高量化精度。
具体地,处理器可以根据当前检验迭代和点位置迭代间隔确定子检验迭代,该子检验迭代用于调整点位置,该子检验迭代可以是目标迭代间隔中的迭代。进一步地,处理器可以根据子检验迭代的待量化数据和目标迭代间隔对应的数据位宽,调整目标迭代间隔中迭代对应的点位置,其中,点位置的确定方式可以参照上述的公式,此处不再赘述。
例如,当前检验迭代为第100次迭代,该目标迭代间隔为6,该目标迭代间隔包含的迭代为第100次迭代至第105次迭代。处理器获取的点位置迭代间隔为I
s1=3,则可以从当前检验迭代开始间隔三次迭代调整一次点位置。具体地,处理器可以将第100次迭代作为上述的子检验迭代,并计算获得该第100次迭代对应的点位置s1,在第100次迭代、第101次迭代和第102次迭代共用点位置s1进行量化。之后,处理器可以根据点位置迭代间隔I
s1将第103次迭代作为上述的子检验迭代,同时处理器还可以根据第103次迭代对应的待量化数据和目标迭代间隔对应的数据位宽n确定第二个点位置迭代间隔对应的点位置s2,则在第103次迭代至第105次迭代中可以共用上述的点位置s2进行量化。本披露实施例中,上述的更新前的点位置s1与更新后的点位置s2的值可以相同,也可以不同。进一步地,处理器可以在第106次迭代重新根据待量化数据的数据变动幅度,确定下一目标迭代间隔以及该下一目标迭代间隔对应的数据位宽及点位置等量化参数。
再如,当前检验迭代为第100次迭代,该目标迭代间隔为6,该目标迭代间隔包含的迭代为第101次迭代至第106次迭代。处理器获取的点位置迭代间隔为I
s1=3,则可以从当前检验迭代开始间隔三次迭代调整一次点位置。具体地,处理器可以根据当前检验迭代的待量化数据和当前检验迭代对应的目标数据位宽n1,确定第一个点位置迭代间隔对应的点位置为s1,则在第101次迭代、第102次迭代和103次迭代共用上述的点位置s1进行量化。之后,处理器可以根据点位置迭代间隔I
s1将第104次迭代作为上述的子检验迭代,同时处理器还可以根据第104次迭代对应的待量化数据和目标迭代间隔对应的数据位宽n1确定第二个点位置迭代间隔对应的点位置s2,则在第104次迭代至第106次迭代中可以共用上述的点位置s2进行量化。本披露实施例中,上述的更新前的点位置s1与更新后的点位置s2的值可以相同,也可以不同。进一步地,处理器可以在第106次迭代重新根据待量化数据的数据变动幅度,确定下一目标迭代间隔以及该下一目标迭代间隔对应的数据位宽及点位置等量化参数。
可选地,该点位置迭代间隔可以等于1,即每次迭代均更新一次点位置。可选地,该点位置迭代间隔可以相同,也可以不同。例如,该目标迭代间隔包含的至少一个点位置迭代间隔可以是依次增大的。此处仅以举例的说明本实施例的实现方式,并不用于限定本披露。
可选地,该目标迭代间隔中迭代对应的缩放系数也可以不一致。进一步可选地,该缩放系数可以与上述的点位置可以同步更新,也就是说,该缩放系数对应的迭代间隔可以等于上述的点位置迭代间隔。即每当处理器更新确定点位置时,会相应的更新确定缩放系数。
可选地,该目标迭代间隔中迭代对应的偏移量也可以不一致。进一步地,该偏移量可以与上述的点位置可以同步更新,也就是说,该偏移量对应的迭代间隔可以等于上述的点 位置迭代间隔。即每当处理器更新确定点位置时,会相应地更新确定偏移量。当然,该偏移量也可以与上述地点位置或数据位宽异步更新,此处不做具体限定。更进一步地,处理器还可以确定待量化数据所有元素中的最小值和最大值,并进一步确定点位置和缩放系数等量化参数,具体可参见上文中的描述。
在其他可选的实施例中,点位置、缩放系数和偏移量三个量化参数之间也可以是异步的,即点位置迭代间隔、缩放系数迭代间隔和偏移量迭代间隔中的一个或三个均不相同。其中,点位置迭代间隔和缩放系数迭代间隔均小于或等于目标迭代间隔。偏移量迭代间隔可以小于目标迭代间隔。由于偏移量只与待量化数据的分布相关,因此,在一种可选的实施方式中,该偏移量也可以与目标迭代间隔完全异步,即偏移量迭代间隔也可以大于目标迭代间隔。
在一种可选的实施例中,上述的方法可以用于神经网络的训练或微调过程中,以实现对神经网络微调或训练过程涉及的运算数据的量化参数进行调整,以提高神经网络运算过程中涉及的运算数据的量化精度及效率。该运算数据可以是神经元数据、权值数据或梯度数据中的至少一种。如图8L所示,根据待量化数据的数据变动曲线可知,在训练或微调的初期阶段,各次迭代的待量化数据之间的差异性较大,待量化数据的数据变动幅度较为剧烈,此时可以目标迭代间隔的值可以较小,以及时地更新目标迭代间隔中的量化参数,保证量化精度。在训练或微调的中期阶段,待量化数据的数据变动幅度逐渐趋于平缓,此时可以增大目标迭代间隔的值,以避免频繁地更新量化参数,以提高量化效率及运算效率。在训练或微调的后期阶段,此时神经网络的训练或微调趋于稳定(即当神经网络的正向运算结果趋近于预设参考值时,该神经网络的训练或微调趋于稳定),此时可以继续增大目标迭代间隔的值,以进一步提高量化效率及运算效率。基于上述数据变动趋势,可以在神经网络的训练或微调的不同阶段采用不同的方式确定目标迭代间隔,以在保证量化精度的基础上,提高量化效率及运算效率。
具体地,如图8U所示,示出本披露又一实施例的量化参数调整方法800U的流程图。当该方法用于神经网络的训练或微调过程中时,该方法还可以包括:
S710、处理器确定当前迭代是否大于第一预设迭代;
其中,当前迭代是指处理器当前执行的迭代运算。可选地,该第一预设迭代可以是超参数,该第一预设迭代可以是根据待量化数据的数据变动曲线确定的,该第一预设迭代也可以是用户自定义设置的。可选地,该第一预设迭代可以小于一个训练周期(epoch)包含的迭代总数,其中,一个训练周期是指数据集中的所有待量化数据均完成一次正向运算和一次反向运算。
在所述当前迭代小于或等于所述第一预设迭代时,则处理器可以执行操作S711,将第一预设迭代间隔作为所述目标迭代间隔,并根据所述第一预设迭代间隔调整量化参数。
可选地,处理器可以读取用户输入的第一预设迭代,并根据该第一预设迭代与第一预设迭代间隔的对应关系,确定第一预设迭代间隔。可选地,该第一预设迭代间隔可以是超参数,该第一预设迭代间隔也可以是用户自定义设置的。此时,处理器可以直接读取用户 输入的第一预设迭代和第一预设迭代间隔,并根据该第一预设迭代间隔更新神经网络运算中的量化参数。本披露实施例中,处理器无需根据待量化数据的数据变动幅度,确定目标迭代间隔。
例如,用户输入的第一预设迭代为第100次迭代,第一预设迭代间隔为5,则在当前迭代小于或等于第100次迭代时,可以根据第一预设迭代间隔更新量化参数。即处理器可以确定在神经网络的训练或微调的第1次迭代至第100次迭代,每间隔5次迭代更新一次量化参数。具体地,处理器可以确定第1次迭代对应的数据位宽n1及点位置s1等量化参数,并采用该数据位宽n1和点位置s1等量化参数对第1次迭代至第5次迭代的待量化数据进行量化,即第1次迭代至第5次迭代可以采用相同的量化参数。之后,处理器可以确定第6次迭代对应的数据位宽n2及点位置s2等量化参数,并采用该数据位宽n2和点位置s2等量化参数对第6次迭代至第10次迭代的待量化数据进行量化,即第6次迭代至第10次迭代可以采用相同的量化参数。同理,处理器可以按照上述量化方式直至完成第100次迭代。其中,每个迭代间隔中数据位宽及点位置等量化参数的确定方式可以参见上文的描述,此处不再赘述。
再如,用户输入的第一预设迭代为第100次迭代,第一预设迭代间隔为1,则在当前迭代小于或等于第100次迭代时,可以根据第一预设迭代间隔更新量化参数。即处理器可以确定在神经网络的训练或微调的第1次迭代至第100次迭代,每次迭代均更新量化参数。具体地,处理器可以确定第1次迭代对应的数据位宽n1及点位置s1等量化参数,并采用该数据位宽n1和点位置s1等量化参数对第1次迭代的待量化数据进行量化。之后,处理器可以确定第2次迭代对应的数据位宽n2及点位置s2等量化参数,并采用该数据位宽n2和点位置s2等量化参数对第2次迭代的待量化数据进行量化,……。同理,处理器可以确定出第100次迭代的数据位宽n100以及点位置s100等量化参数,并采用该数据位宽n100和点位置s100等量化参数对第100次迭代的待量化数据进行量化。其中,每个迭代间隔中数据位宽及点位置等量化参数的确定方式可以参见上文的描述,此处不再赘述。
上文仅以数据位宽和量化参数同步更新的方式举例说明,在其他可选的实施例中,在每个目标迭代间隔中,处理器还可以根据点位置的变动幅度确定点位置的迭代间隔,并根据该点位置迭代间隔更新点位置等量化参数。
可选地,在当前迭代大于第一预设迭代时,可以表明神经网络的训练或微调处于中期阶段,此时可以获得历史迭代的待量化数据的数据变动幅度,并根据该待量化数据的数据变动幅度确定目标迭代间隔,该目标迭代间隔可以大于上述的第一预设迭代间隔,从而可以减少量化参数的更新次数,提高量化效率及运算效率。具体地,在所述当前迭代大于第一预设迭代时,则处理器可以执行操作S713,根据所述待量化数据的数据变动幅度确定目标迭代间隔,并根据所述目标迭代间隔调整量化参数。
承接上例,用户输入的第一预设迭代为第100次迭代,第一预设迭代间隔为1,则在当前迭代小于或等于第100次迭代时,可以根据第一预设迭代间隔更新量化参数。即处理器可以确定在神经网络的训练或微调的第1次迭代至第100次迭代,每次迭代均更新量化参数, 具体实现方式可以参见上文中的描述。在当前迭代大于第100次迭代时,处理器可以根据当前迭代的待量化数据及其之前的历史迭代的待量化数据,确定待量化数据的数据变动幅度,并根据该待量化数据的数据变动幅度确定目标迭代间隔。具体地,在当前迭代大于第100次迭代时,处理器可以自适应地调整当前迭代对应的数据位宽,获得该当前迭代对应的目标数据位宽,并将该当前迭代对应的目标数据位宽作为目标迭代间隔的数据位宽,其中,目标迭代间隔中迭代对应的数据位宽一致。同时,处理器可以根据当前迭代对应的目标数据位宽和待量化数据,确定当前迭代对应的点位置,并根据当前迭代对应的点位置确定第一误差。处理器还可以根据当前迭代对应的待量化数据,确定量化误差,并根据量化误差确定第二误差。之后,处理器可以根据第一误差和第二误差确定目标迭代间隔,该目标迭代间隔可以大于上述的第一预设迭代间隔。进一步地,处理器可以确定目标迭代间隔中的点位置或缩放系数等量化参数,具体确定方式可参见上文中的描述。
例如,当前迭代为第100次迭代,处理器根据待量化数据的数据变动幅度,确定目标迭代间隔的迭代间隔为3,则处理器可以确定该目标迭代间隔包括3次迭代,分别为第100次迭代、第101次迭代和第102次迭代。处理器还可以根据第100次迭代的待量化数据确定量化误差,并根据量化误差确定第二误差和第100次迭代对应的目标数据位宽,将该目标数据位宽作为目标迭代间隔对应的数据位宽,其中,第100次迭代、第101次迭代和第102次迭代对应的数据位宽均为该第100次迭代对应的目标数据位宽。处理器还可以根据该第100次迭代的待量化数据和该第100次迭代对应的目标数据位宽确定该第100次迭代对应的点位置和缩放系数等量化参数。之后,采用该第100次迭代对应的量化参数对第100次迭代、第101次迭代和第102次迭代进行量化。
进一步地,如图8V所示,示出本披露再一实施例的量化参数调整方法800V的流程图,上述方法还可以包括:
在当前迭代大于第一预设迭代时,处理器还可以执行操作S712,即处理器可以进一步确定当前迭代是否大于第二预设迭代。其中,所述第二预设迭代大于所述第一预设迭代,所述第二预设迭代间隔大于所述第一预设迭代间隔。可选地,上述第二预设迭代可以是超参数,第二预设迭代可以大于至少一个训练周期的迭代总数。可选地,第二预设迭代可以根据待量化数据的数据变动曲线确定。可选地,第二预设迭代也可以是用户自定义设置的。
在所述当前迭代大于或等于第二预设迭代时,则处理器可以执行操作S714,将第二预设迭代间隔作为所述目标迭代间隔,并根据所述第二预设迭代间隔调整所述神经网络量化过程中的参数。在当前迭代大于第一预设迭代,且当前迭代小于第二预设迭代时,则处理器可以执行上述的操作S713,根据所述待量化数据的数据变动幅度确定目标迭代间隔,并根据所述目标迭代间隔调整量化参数。
可选地,处理器可以读取用户设置的第二预设迭代,并根据第二预设迭代与第二预设迭代间隔的对应关系,确定第二预设迭代间隔,该第二预设迭代间隔大于第一预设迭代间隔。可选地,当所述神经网络的收敛程度满足预设条件时,则确定所述当前迭代大于或等于第二预设迭代。例如,在当前迭代的正向运算结果趋近于预设参考值时,可以确定该神 经网络的收敛程度满足预设条件,此时可以确定当前迭代大于或等于第二预设迭代。或者,在当前迭代对应的损失值小于或等于预设阈值时,则可以确定该神经网络的收敛程度满足预设条件。
可选地,上述的第二预设迭代间隔可以是超参数,该第二预设迭代间隔可以大于或等于至少一个训练周期的迭代总数。可选地,该第二预设迭代间隔可以是用户自定义设置的。处理器可以直接读取用户输入的第二预设迭代和第二预设迭代间隔,并根据该第二预设迭代间隔更新神经网络运算中的量化参数。例如,该第二预设迭代间隔可以等于一个训练周期的迭代总数,即每个训练周期(epoch)更新一次量化参数。
再进一步地,上述方法还包括:
当所述当前迭代大于或等于第二预设迭代,处理器还可以在每次检验迭代处确定当前数据位宽是否需要调整。如果当前数据位宽需要调整,则处理器可以从上述的操作S714切换至操作S713,以重新确定数据位宽,使得数据位宽能够满足待量化数据的需求。
具体地,处理器可以根据上述的第二误差确定数据位宽是否需要调整。处理器还可以执行上述操作S715,确定第二误差是否大于预设误差值,当所述当前迭代大于或等于第二预设迭代且所述第二误差大于预设误差值时,则切换执行操作S713,根据所述待量化数据的数据变动幅度确定迭代间隔,以根据所述迭代间隔重新确定所述数据位宽。若当前迭代大于或等于第二预设迭代,且第二误差小于或等于预设误差值,则继续执行操作S714,将第二预设迭代间隔作为所述目标迭代间隔,并根据所述第二预设迭代间隔调整所述神经网络量化过程中的参数。其中,预设误差值可以是根据量化误差对应的预设阈值确定的,当第二误差大于预设误差值时,此时说明数据位宽可能需要进一步调整,处理器可以根据所述待量化数据的数据变动幅度确定迭代间隔,以根据所述迭代间隔重新确定所述数据位宽。
例如,第二预设迭代间隔为一个训练周期的迭代总数。在当前迭代大于或等于第二预设迭代时,处理器可以按照第二预设迭代间隔更新量化参数,即每个训练周期(epoch)更新一次量化参数。此时,每个训练周期的起始迭代作为一个检验迭代,在每个训练周期的起始迭代处,处理器可以根据该检验迭代的待量化数据确定量化误差,根据量化误差确定第二误差,并根据如下公式确定第二误差是否大于预设误差值:
diff
update2=θ*diff
bit
2>T
其中,diff
update2表示第二误差,diff
bit表示量化误差,θ表示超参数,T表示预设误差值。可选地,该预设误差值可以等于第一预设阈值除以超参数。当然,该预设误差值也可以是超参数。例如,该预设误差值可以按照如下公式计算获得:T=th/10,其中,th表示第一预设阈值,超参数的取值为10。
若第二误差diff
update2大于预设误差值T,则说明数据位宽可能不能满足预设要求,此时,可以不再采用第二预设迭代间隔更新量化参数,处理器可以按照待量化数据的数据变动幅度确定目标迭代间隔,以保证数据位宽满足预设要求。即在第二误差diff
update2大于预设误差值T时,处理器从上述的操作S714切换至上述的操作S713。
当然,在其他实施例中,处理器可以根据上述的量化误差,确定数据位宽是否需要调 整。例如,第二预设迭代间隔为一个训练周期的迭代总数。在当前迭代大于或等于第二预设迭代时,处理器可以按照第二预设迭代间隔更新量化参数,即每个训练周期(epoch)更新一次量化参数。其中,每个训练周期的起始迭代作为一个检验迭代。在每个训练周期的起始迭代处,处理器可以根据该检验迭代的待量化数据确定量化误差,并在该量化误差大于或等于第一预设阈值时,则说明数据位宽可能不能满足预设要求,即处理器从上述的操作S714切换至上述的操作S713。
在一个可选的实施例中,上述的点位置、缩放系数和偏移量等量化参数可以通过显示装置进行显示。此时,用户可以通过显示装置获知神经网络运算过程中的量化参数,用户还可以自适应修改处理器确定的量化参数。同理,上述的数据位宽和目标迭代间隔等也可以通过显示装置进行显示。此时,用户可以通过显示装置获知神经网络运算过程中的目标迭代间隔和数据位宽等参数,用户还可以自适应修改处理器确定的目标迭代间隔和数据位宽等参数。
需要说明的是,关于上述确定数据位宽的目标迭代间隔和量化参数的目标迭代间隔均仅仅是例举的部分情况,而不是穷举,本领域技术人员在理解本披露技术方案的精髓的情况下,可能会在本披露技术方案的基础上产生其它的变形或者变换,比如:在确定数据位宽的目标迭代间隔内再确定量化参数的目标迭代间隔也适用于图6、图7和图8A所示的技术方案。但只要其实现的功能以及达到的技术效果与本披露类似,那么均应当属于本披露的保护范围。
利用本技术方案确定量化参数,根据量化误差对数据位宽或量化参数进行调整,并确定了对数据位宽或量化参数是否调整的目标迭代间隔,达到神经网络运算过程中在适合的时间点对数据位宽或量化参数进行调整,使得在合适的迭代时间点使用合适的量化参数,实现人工智能处理器芯片执行神经网络运算达到定点运算的速度,提升了人工智能处理器芯片的峰值算力的同时满足运算所需的浮点运算的精度。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本披露并不受所描述的动作顺序的限制,因为依据本披露,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于可选实施例,所涉及的动作和模块并不一定是本披露所必须的。
进一步需要说明的是,虽然图2、图6、图7、图8A至图8V的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图2、图6、图7、图8A至图8V中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
如图9所示,为本披露提出的一种神经网络的量化参数确定装置的硬件配置的框图。 在图9中,神经网络的量化参数确定装置10可以包括处理器110和存储器120。在图9的神经网络的量化参数确定装置10中,仅示出了与本实施例有关的组成元素。因此,对于本领域普通技术人员而言显而易见的是:神经网络的量化参数确定装置10还可以包括与图10中所示的组成元素不同的常见组成元素。比如:定点运算器。
神经网络的量化参数确定装置10可以对应于具有各种处理功能的计算设备,例如,用于生成神经网络、训练或学习神经网络、将浮点型神经网络量化为定点型神经网络、或者重新训练神经网络的功能。例如,神经网络的量化参数确定装置10可以被实现为各种类型的设备,例如个人计算机(PC)、服务器设备、移动设备等。
处理器110控制神经网络的量化参数确定装置10的所有功能。例如,处理器110通过执行神经网络的量化参数确定装置10上的存储器120中存储的程序,来控制神经网络的量化参数确定装置10的所有功能。处理器110可以由神经网络的量化参数确定装置10中提供的中央处理单元(CPU)、图形处理单元(GPU)、应用处理器(AP)、人工智能处理器芯片(IPU)等来实现。然而,本披露并不限于此。
存储器120是用于存储神经网络的量化参数确定装置10中处理的各种数据的硬件。例如,存储器120可以存储神经网络的量化参数确定装置10中的处理过的数据和待处理的数据。存储器120可存储处理器110已处理或要处理的神经网络运算过程中涉及的数据集,例如,未训练的初始神经网络的数据、在训练过程中生成的神经网络的中间数据、完成了所有训练的神经网络的数据、经量化的神经网络的数据等。此外,存储器120可以存储要由神经网络的量化参数确定装置10驱动的应用、驱动程序等。例如:存储器120可以存储与将由处理器110执行的神经网络的训练算法、量化算法等有关的各种程序。存储器120可以是DRAM,但是本披露不限于此。存储器120可以包括易失性存储器或非易失性存储器中的至少一种。非易失性存储器可以包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)、闪存、相变RAM(PRAM)、磁性RAM(MRAM)、电阻RAM(RRAM)、铁电RAM(FRAM)等。易失性存储器可以包括动态RAM(DRAM)、静态RAM(SRAM)、同步DRAM(SDRAM)、PRAM、MRAM、RRAM、铁电RAM(FeRAM)等。在实施例中,存储器120可以包括硬盘驱动器(HDD)、固态驱动器(SSD)、高密度闪存(CF)、安全数字(SD)卡、微安全数字(Micro-SD)卡、迷你安全数字(Mini-SD)卡、极限数字(xD)卡、高速缓存(caches)或记忆棒中的至少一项。
处理器110可以通过反复训练(学习)给定的初始神经网络来生成经训练的神经网络。在这种状态下,在保证神经网络的处理准确度的意义上,初始神经网络的参数为高精度数据表示格式,例如具有32比特浮点精度的数据表示格式。参数可以包括向/从神经网络输入/输出的各种类型的数据,例如:神经网络的输入/输出神经元、权值、偏置等。与定点运算相比,浮点运算过程中需要相对大量的运算和相对频繁的存储器访问。具体而言,神经网络处理所需的大部分运算已知为各种卷积运算。因此,在具有相对低的处理性能的移动设备(诸如智能电话、平板电脑、可穿戴设备等、嵌入式设备等)中,神经网络高精度数 据运算会使得移动设备的资源没有充分利用。结果是,为了在允许的精度损失范围内驱动神经网络运算,充分减少上述设备中的运算量,可以对在神经网络运算过程中涉及的高精度数据进行量化,转换为低精度的定点数。
考虑到部署神经网络的例如移动设备、嵌入式设备等设备的处理性能,神经网络的量化参数确定装置10执行将经训练的神经网络的参数转换为具有特定比特数的定点型的量化,并且神经网络的量化参数确定装置10向部署神经网络的设备发送对应的量化参数,使得在人工智能处理器芯片执行训练、微调等运算操作时为定点数运算操作。部署神经网络的设备可以是通过使用神经网络来执行语音识别、图像识别等的自主车辆、机器人、智能电话、平板设备、增强现实(AR)设备、物联网(IoT)设备等,但是本披露不限于此。
处理器110从存储器120中获取神经网络运算过程中的数据。该数据包括神经元、权值、偏置和梯度中的至少一种数据,利用图2所示的技术方案确定对应的量化参数,利用量化参数对神经网络运算过程中的目标数据进行量化。将量化后的数据执行神经网络运算操作。该运算操作包括但不限于训练、微调、推理。
处理器110根据量化误差diff
bit对数据位宽n进行调整,且处理器110可以执行图6、图7和图8所示的目标迭代间隔的方法的程序去确定数据位宽的目标迭代间隔或量化参数的目标迭代间隔。
综上,本说明书实施方式提供的一种神经网络的量化参数确定装置,其存储器120和处理器110实现的具体功能,可以与本说明书中的前述实施方式相对照解释,并能够达到前述实施方式的技术效果,这里便不再赘述。
在本实施方式中,所述处理器110可以按任何适当的方式实现。例如,所述处理器110可以采取例如微处理器或处理器以及存储可由该(微)处理器执行的计算机可读程序代码(例如软件或固件)的计算机可读介质、逻辑门、开关、专用集成电路(Application Specific Integrated Circuit,ASIC)、可编程逻辑控制器和嵌入微控制器的形式等等。
如图10所示,为本披露提出的神经网络的量化参数确定装置应用于人工智能处理器芯片的应用示意图。参考图10,如上所述,在诸如PC、服务器等神经网络的量化参数确定装置10中,处理器110执行量化操作,将神经网络运算过程中涉及的浮点数据量化为定点数,人工智能处理器芯片上的定点运算器采用量化获得的定点数执行训练、微调或推理。人工智能处理器芯片是用于驱动神经网络的专用硬件。由于人工智能处理器芯片是以相对较低的功率或性能实现的,利用本技术方案采用低精度的定点数实现神经网络运算,与高精度数据相比,读取低精度的定点数时所需内存带宽更小,可以更好的使用人工智能处理器芯片的caches,避免访存瓶颈。同时,在人工智能处理器芯片上执行SIMD指令时,在一个时钟周期内实现更多计算,达到更快地执行神经网络运算操作。
进一步地,面对同样长度的定点运算和高精度数据运算,尤其是定点运算和浮点运算之间比对可知,浮点运算计算模式更为复杂,需要更多的逻辑器件来构成浮点运算器。这样从体积上来说,浮点运算器的体积比定点运算器的体积要大。并且,浮点运算器需要消耗更多的资源去处理,达到定点运算和浮点运算二者之间的功耗差距通常是数量级的。
综上所述,本技术方案能够让人工智能处理器芯片上的浮点运算器更换为定点运算器,使得人工智能处理器芯片的功耗更低。这一点对于移动设备尤其重要。也就是说,本技术方案打开了一扇通向大量不能高效运行浮点计算代码的嵌入式系统的大门,让物联网世界广泛应用成为可能。
在本技术方案中,人工智能处理器芯片可以对应于例如神经处理单元(NPU)、张量处理单元(TPU)、神经引擎等,它们是用于驱动神经网络的专用芯片,但是本披露不限于此。
在本技术方案中,人工智能处理器芯片可以在独立于神经网络的量化参数确定装置10的单独设备中实现,神经网络的量化参数确定装置10也可以作为人工智能处理器芯片的一部分功能模块来实现。但是本披露不限于此。
在本技术方案中,通用处理器(比如CPU)的操作系统基于本技术方案生成指令,将生成的指令发送至人工智能处理器芯片(比如GPU)上,由人工智能处理器芯片去执行指令操作实现神经网络的量化参数的确定以及量化过程。还有一种应用情况,通用处理器基于本技术方案直接确定对应的量化参数,通用处理器直接根据量化参数将对应的目标数据进行量化,人工智能处理器芯片利用量化后的数据执行定点运算操作。更甚者,通用处理器(比如CPU)和人工智能处理器芯片(比如GPU)流水化操作,通用处理器(比如CPU)的操作系统基于本技术方案生成指令,且对目标数据进行拷贝的同时人工智能处理器芯片(比如GPU)进行神经网络运算操作,这样可以把某些时间消耗隐藏起来。但是本披露不限于此。
在本实施例中,本披露实施例还提供一种可读存储介质,其上存储有计算机程序,所述计算机程序被执行时实现上述所述的神经网络的量化参数确定方法。
由上可见,在神经网络运算过程中,量化时利用本披露的技术方案确定量化参数,该量化参数用于人工智能处理器对神经网络运算过程中的数据进行量化,将高精度数据转换为低精度定点数,可以减少神经网络运算过程中涉及的数据存储所有的空间大小。例如:float32转化为fix8可以将模型参数减少4倍。由于数据存储空间变小,使得神经网络部署时使用更小的空间,使得人工智能处理器芯片上的片上内存可以容纳更多的数据,减少了人工智能处理器芯片访存数据,提高计算性能。
本领域技术人员也知道,除了以纯计算机可读程序代码方式实现客户端和服务器以外,完全可以通过将方法步骤进行逻辑编程来使得客户端和服务器以逻辑门、开关、专用集成电路、可编程逻辑控制器和嵌入微控制器等的形式来实现相同功能。因此这种客户端和服务器可以被认为是一种硬件部件,而对其内包括的用于实现各种功能的装置也可以视为硬件部件内的结构。或者甚至,可以将用于实现各种功能的装置视为既可以是实现方法的软件模块又可以是硬件部件内的结构。
如图11所示,为本披露提出的一种神经网络的量化参数确定设备的功能框图。所述方法包括:
统计单元a,用于统计待量化数据,确定每种待量化数据的统计结果;其中,所述待量化数据包括所述神经网络的神经元、权值、梯度、偏置中的至少一种数据;
量化参数确定单元b,用于利用每种待量化数据的统计结果以及数据位宽确定对应量化参数;其中,所述量化参数用于人工智能处理器对神经网络运算过程中的数据进行对应量化。
在本实施例中,可选地,所述神经网络的量化参数确定设备还包括:
第一量化单元,用于利用对应量化参数对所述待量化数据进行量化。
在本实施例中,可选地,所述神经网络的量化参数确定设备还包括:
第二量化单元,用于利用对应量化参数对目标数据进行量化;其中,所述目标数据的特征与所述待量化数据的特征之间具有相似性。
在本实施例中,所述神经网络运算过程包括神经网络训练、神经网络推理、神经网络微调中的至少一种运算。
在本实施例中,所述统计单元获得的统计结果为每种待量化数据中的最大值和最小值。
在本实施例中,所述统计单元获得的统计结果为每种待量化数据中的绝对值最大值。
在本实施例中,所述统计单元根据每种待量化数据中的最大值和最小值确定所述绝对值最大值。
在本实施例中,所述量化参数确定单元根据每种待量化数据中的最大值、最小值以及所述数据位宽确定量化参数。
在本实施例中,所述量化参数确定单元根据每种待量化数据中的绝对值最大值、所述数据位宽确定量化参数。
在本实施例中,所述量化参数确定单元确定的所述量化参数为点位置参数或第一缩放系数。
在本实施例中,所述量化参数确定单元根据点位置参数和第二缩放系数确定所述第一缩放系数;其中,确定第一缩放系数时使用的点位置参数为已知固定值,或所述点位置参数和对应的所述第二缩放系数相乘的结果整体作为第一缩放系数应用于神经网络运算过程中的数据量化。
在本实施例中,所述量化参数确定单元确定的所述量化参数包括点位置参数和第二缩放系数。
在本实施例中,所述量化参数确定单元根据所述点位置参数、所述统计结果、所述数据位宽确定所述第二缩放系数。
在本实施例中,所述量化参数确定单元确定的所述量化参数还包括偏移量。
在本实施例中,所述量化参数确定单元根据每种待量化数据的统计结果确定所述偏移量。
在本实施例中,所述量化参数确定单元使用的数据位宽是预设值。
在本实施例中,所述量化参数确定单元包括调整模块和量化误差确定模块;其中,
所述调整模块,用于根据对应的量化误差对数据位宽进行调整;
所述量化误差确定模块,用于根据量化后的数据与对应的量化前的数据确定所述量化误差。
在本实施例中,所述调整模块具体用于:
所述量化误差与阈值进行比较,根据比较结果,调整所述数据位宽;其中,所述阈值包括第一阈值和第二阈值中的至少一个。
在本实施例中,所述调整模块包括第一调整子模块,其中,所述第一调整子模块用于:
所述量化误差大于等于所述第一阈值,则对所述数据位宽进行增加。
在本实施例中,所述调整模块包括第二调整子模块,其中,所述第二调整子模块用于:
所述量化误差小于等于所述第二阈值,则对所述数据位宽进行减少。
在本实施例中,所述调整模块包括第三调整子模块,其中,所述第三调整子模块用于:
所述量化误差处于所述第一阈值和所述第二阈值之间,则所述数据位宽保持不变。
在本实施例中,所述量化误差确定模块包括:
量化间隔确定子模块,用于根据所述数据位宽确定量化间隔;
第一量化误差确定子模块,用于根据所述量化间隔、所述量化后的数据的个数与对应的量化前的数据确定量化误差。
在本实施例中,所述量化误差确定模块包括:
反量化数据确定子模块,用于对量化后的数据进行反量化,获得反量化数据;其中,所述反量化数据的数据格式与对应的量化前的数据的数据格式相同;
第二量化误差确定子模块,用于根据所述量化后的数据以及对应的反量化数据确定量化误差。
在本实施例中,所述量化误差确定模块使用的所述量化前的数据是所述待量化数据。
在本实施例中,所述量化误差确定模块使用的所述量化前的数据是在目标迭代间隔内的权值更新迭代过程中涉及的待量化数据;其中,所述目标迭代间隔包括至少一次权值更新迭代,且同一目标迭代间隔内量化过程中采用相同的所述数据位宽。
在本实施例中,所述神经网络的量化参数确定设备还包括第一目标迭代间隔确定单元;其中,所述第一目标迭代间隔确定单元包括:
第一变化趋势值确定模块,用于在预判时间点,确定权值更新迭代过程中涉及的待量化数据的点位置参数的变化趋势值;其中,所述预判时间点是用于判断是否需要对所述数据位宽进行调整的时间点,所述预判时间点对应权值更新迭代完成时的时间点;
第一目标迭代间隔模块,用于根据所述点位置参数的变化趋势值确定对应所述目标迭代间隔。
在本实施例中,所述第一目标迭代间隔确定单元包括:
第二变化趋势值确定模块,用于在预判时间点,确定权值更新迭代过程中涉及的待量化数据的点位置参数的变化趋势值、数据位宽的变化趋势值;其中,所述预判时间点是用于判断是否需要对所述数据位宽进行调整的时间点,所述预判时间点对应权值更新迭代完成时的时间点;
第二目标迭代间隔模块,用于根据所述点位置参数的变化趋势值和所述数据位宽的变化趋势值确定对应所述目标迭代间隔。
在本实施例中,所述第一目标迭代间隔确定单元还包括第一预判时间点确定单元;其中,
所述第一预判时间点确定单元,用于根据所述目标迭代间隔确定所述第一预判时间点。
在本实施例中,所述第一目标迭代间隔确定单元还包括第二预判时间点确定单元;其中,所述第二预判时间点确定单元,用于根据数据变动幅度曲线确定第二预判时间点;其中,所述数据变动幅度曲线是对权值更新迭代过程中数据变动幅度情况进行统计获得的。
在本实施例中,所述第一变化趋势值确定模块和所述第二变化趋势值确定模块均根据当前预判时间点对应的点位置参数的滑动平均值、上一预判时间点对应的点位置参数的滑动平均值确定所述点位置参数的变化趋势值。
在本实施例中,所述第一变化趋势值确定模块和所述第二变化趋势值确定模块均根据当前预判时间点对应的点位置参数、上一预判时间点对应的点位置参数的滑动平均值确定所述点位置参数的变化趋势值。
在本实施例中,所述第一变化趋势值确定模块和所述第二变化趋势值确定模块均包括:
当前预判时间点对应的点位置参数确定子模块,用于根据上一预判时间点对应的点位置参数与所述数据位宽的调整值确定所述当前预判时间点对应的点位置参数;
调整结果确定子模块,用于根据所述数据位宽的调整值对所述上一预判时间点对应的点位置参数的滑动平均值进行调整,获得调整结果;
第一滑动平均值确定子模块,用于根据所述当前预判时间点对应的点位置参数、所述调整结果确定当前预判时间点对应的点位置参数的滑动平均值。
在本实施例中,所述第一变化趋势值确定模块和所述第二变化趋势值确定模块均包括:
中间结果确定子模块,用于根据上一预判时间点对应的点位置参数与上一预判时间点对应的点位置参数的滑动平均值确定当前预判时间点对应的点位置参数的滑动平均值的中间结果;
第二滑动平均值确定子模块,用于根据当前预判时间点对应的点位置参数的滑动平均值的中间结果与所述数据位宽的调整值确定所述当前预判时间点对应的点位置参数的滑动平均值。
在本实施例中,所述第二变化趋势值确定模块根据对应所述量化误差确定数据位宽的变化趋势值。
在本实施例中,所述第一目标迭代间隔确定单元还包括:
量化误差确定模块,用于确定对应量化误差;其中,所述量化误差对应的量化前的数据是所述预判时间点对应的权值更新迭代过程中涉及的待量化数据;
数据位宽确定模块,用于根据对应量化误差,确定所述目标迭代间隔内量化过程中采用的数据位宽。
在本实施例中,所述数据位宽确定模块具体用于:
所述量化误差与阈值进行比较,根据比较结果,对上一目标迭代间隔内量化过程中采用的数据位宽进行调整,调整结果作为当前目标迭代间隔内量化过程中采用的数据位宽。
在本实施例中,所述量化误差确定模块使用的所述量化前的数据是在目标迭代间隔内的权值更新迭代时涉及的待量化数据;其中,所述目标迭代间隔包括至少一次权值更新迭代,且同一目标迭代间隔内量化过程中采用相同的所述量化参数。
在本实施例中,所述神经网络的量化参数确定设备还包括第二目标迭代间隔确定单元;其中,所述第二目标迭代间隔确定单元包括:
第三变化趋势值确定模块,用于在预判时间点,确定权值更新迭代过程中涉及的待量化数据的点位置参数的变化趋势值;其中,所述预判时间点是用于判断是否需要对所述量化参数进行调整的时间点,所述预判时间点对应权值更新迭代完成时的时间点;
第三目标迭代间隔模块,用于根据所述点位置参数的变化趋势值确定对应所述目标迭代间隔。
在本实施例中,所述量化参数确定单元根据统计结果、和所述数据位宽确定所述点位置参数。
在一个实施例中,提供了一种调整数据位宽的装置,其特征在于,包括:
获取模块,用于获取用于针对待量化数据执行量化处理的数据位宽,所述数据位宽指示所述待量化数据在经过所述量化处理后的量化后数据的位宽;
量化模块,用于基于所述数据位宽,针对一组待量化数据执行量化处理,以将所述一组待量化数据转换至一组量化后数据,所述一组量化后数据具有所述数据位宽;
确定模块,用于比较所述一组待量化数据和所述一组量化后数据,确定与所述数据位宽相关联的量化误差;以及
调整基于确定的所述量化误差来调整所述数据位宽。
在本实施例中,所述比较模块包括:
间隔确定模块,用于根据所述数据位宽确定量化间隔;以及
误差确定模块,用于根据所述量化间隔、所述一组量化后数据以及所述一组待量化数据确定所述量化误差。
在本实施例中,所述误差确定模块包括:
量化模块,用于根据所述量化间隔,针对所述一组量化后数据进行反量化,以获得一组反量化数据,其中所述一组反量化数据的数据格式与所述一组待量化数据的数据格式相同;以及
量化误差确定模块,用于根据所述一组反量化数据和所述一组待量化数据,确定量化误差。
在本实施例中,所述调整模块包括:
比较模块,用于比较所述量化误差与预设阈值,所述预设阈值包括第一阈值和第二阈值中的至少一个;以及
位宽调整模块,用于根据所述比较的结果来调整所述数据位宽。
在本实施例中,所述位宽调整模块包括:
增加模块,用于响应于确定所述量化误差大于或等于第一阈值,增加所述数据位 宽。
在本实施例中,所述增加模块包括:
步长增加模块,用于根据第一预设位宽步长增加所述数据位宽,以确定调整后数据位宽。
在本实施例中,所述量化模块进一步用于基于所述调整后数据位宽,针对所述一组待量化数据执行量化处理,以将所述一组待量化数据转换至另一组量化后数据,所述另一组量化后数据具有所述调整后数据位宽;以及
所述确定模块进一步用于比较所述一组待量化数据和所述另一组量化后数据,确定与所述调整后数据位宽相关联的另一量化误差,直至所述另一量化误差小于所述第一预设阈值。
在本实施例中,所述装置迭代地被调用。
在本实施例中,所述调整模块包括:
减少模块,用于响应于确定所述量化误差小于或等于所述第二阈值,减少所述数据位宽。
在本实施例中,所述减少模块包括:
步长减小模块,用于根据第二预设位宽步长减少所述数据位宽,以确定调整后数据位宽。
在本实施例中,所述量化模块进一步用于基于所述调整后数据位宽,针对所述一组待量化数据执行量化处理,以将所述一组待量化数据转换至另一组量化后数据,所述另一组量化后数据具有所述调整后数据位宽;以及
所述确定模块进一步用于基于所述一组待量化数据和所述另一组量化后数据,确定与所述调整后数据位宽相关联的另一量化误差,直至所述另一量化误差大于所述第二预设阈值。
在本实施例中,所述装置迭代地被调用。
在本实施例中,所述调整模块包括:
保持模块,用于响应于确定所述量化误差处于所述第一阈值和所述第二阈值之间,保持所述数据位宽。
在本实施例中,进一步包括:
更新模块,用于基于所述一组待量化数据和所述调整后数据位宽,更新用于针对所述一组待量化数据执行量化处理的量化参数;以及
所述量化模块进一步用于基于更新的所述量化参数,针对所述一组待量化数据执行量化处理。
在本实施例中,幅度模块,用于获取待量化数据的数据变动幅度;
间隔模块,用于根据所述待量化数据的数据变动幅度,确定目标迭代间隔,以根据所述目标迭代间隔调整所述数据位宽,所述目标迭代间隔包括至少一次迭代。
在本实施例中,所述幅度模块包括:
点位置模块,用于获取点位置的变动幅度,其中所述点位置的变动幅度用于表征所述待量化数据的数据变动幅度,所述点位置的变动幅度与所述待量化数据的数据变动幅度正相关。
在本实施例中,所述点位置模块包括:
第一均值模块,用于根据当前检验迭代之前的上一检验迭代对应的点位置,以及所述上一检验迭代之前的历史迭代对应的点位置,确定第一均值,其中所述上一检验迭代为所述目标迭代间隔之前的上一迭代间隔对应的检验迭代;
第二均值模块,用于根据所述当前检验迭代对应的点位置及所述当前检验迭代之前的历史迭代的点位置,确定第二均值;其中所述当前检验迭代对应的点位置根据所述当前检验迭代对应的目标数据位宽和待量化数据确定;
第一误差模块,用于根据所述第一均值和所述第二均值确定第一误差,所述第一误差用于表征所述点位置的变动幅度。
在本实施例中,所述间隔模块包括:
第一间隔模块,用于根据所述第一误差确定所述目标迭代间隔,所述目标迭代间隔与所述第一误差负相关。
在本实施例中,所述幅度模块进一步包括:
趋势模块,用于获取所述数据位宽的变化趋势;
数据变动幅度模块,用于根据所述点位置的变动幅度和所述数据位宽的变化趋势,确定所述待量化数据的数据变动幅度。
在本实施例中,所述间隔模块,进一步包括:
迭代间隔模块,用于根据获取的第一误差和第二误差,确定所述目标迭代间隔;其中所述第一误差用于表征点位置的变动幅度,所述第二误差用于表征数据位宽的变化趋势。
在本实施例中,所述迭代间隔模块包括:
目标误差模块,用于将所述第一误差和所述第二误差中最大值作为目标误差;
目标迭代间隔模块,用于根据所述目标误差确定所述目标迭代间隔,其中,所述目标误差与所述目标迭代间隔负相关。
在本实施例中,所述第二误差根据量化误差确定;
其中,所述量化误差根据所述当前检验迭代中待量化数据和所述当前检验迭代的量化数据确定,所述第二误差与所述量化误差正相关。
在本实施例中,所述装置用于神经网络的训练或微调,所述装置进一步包括:
第一迭代模块,用于当所述当前迭代大于第一预设迭代时,则根据所述待量化数据的数据变动幅度确定目标迭代间隔,并根据所述目标迭代间隔调整所述量化参数。
在本实施例中,所述装置进一步包括:
第二迭代模块,用于当所述当前迭代小于或等于所述第一预设迭代时,则将第一预设迭代间隔作为所述目标迭代间隔,并根据所述第一预设迭代间隔调整所述量化参数。
在本实施例中,所述装置进一步包括:
第三迭代模块,用于当所述当前迭代大于或等于第二预设迭代时,则将第二预设迭代间隔作为所述目标迭代间隔,并根据所述第二预设迭代间隔调整所述量化参数;
其中,所述第二预设迭代大于所述第一预设迭代,所述第二预设迭代间隔大于所述第一预设迭代间隔。
在本实施例中,所述装置进一步包括:
收敛模块,用于当所述神经网络的收敛程度满足预设条件时,则确定所述当前检验迭代大于或等于第二预设迭代。
在本实施例中,所述装置进一步包括:
当所述当前迭代大于或等于第二预设迭代,且第二误差大于预设误差值时,则根据所述待量化数据的数据变动幅度确定迭代间隔,以根据所述迭代间隔重新确定所述数据位宽。
在一个实施例中,提供了一种计算机可读存储介质,其特征在于其上存储有计算机程序,所述程序被执行时实现根据上文中的任一项所述的方法。
在一个实施例中,提供了一种人工智能芯片,其特征在于,所述芯片包括根据上文中的任一项所述的用于处理数据的装置。
在一个实施例中,提供了一种电子设备,其特征在于,所述电子设备包括根据上文所述的人工智能芯片。
在一个实施例中,提供了一种板卡,其特征在于,所述板卡包括:存储器件、接口装置和控制器件以及根据上文所述的人工智能芯片;
其中,所述人工智能芯片与所述存储器件、所述控制器件以及所述接口装置相连接;
所述存储器件,用于存储数据;
所述接口装置,用于实现所述人工智能芯片与外部设备之间的数据传输;以及
所述控制器件,用于对所述人工智能芯片的状态进行监控。
在一个实施例中,所述存储器件包括:多组存储单元,每组存储单元与所述人工智能芯片通过总线连接,所述存储单元为DDR SDRAM;
所述芯片包括:DDR控制器,用于对每个所述存储单元的数据传输与数据存储的控制;
所述接口装置为标准PCIE接口。
在一个实施例中,所述确定与所述待量化层中每种待量化数据对应的量化参数,包括:
根据每种待量化数据和对应的数据位宽计算得到对应的量化参数。
在一个实施例中,所述根据每种待量化数据和对应的数据位宽计算得到对应的量化参数,包括:
当所述量化参数不包括偏移量时,根据目标数据中的绝对值最大值和所述目标数据对应的数据位宽,得到所述目标数据的点位置,所述目标数据为任意一种待量化数据。
在一个实施例中,所述根据每种待量化数据和对应的数据位宽计算得到对应的量化参数,包括:
当所述量化参数不包括偏移量时,根据目标数据和所述目标数据对应的数据位宽得到 所述目标数据量化后数据的最大值,所述目标数据为任意一种待量化数据;
根据目标数据中的绝对值最大值和所述目标数据量化后数据的最大值,得到所述目标数据的缩放系数。
在一个实施例中,所述根据每种待量化数据和对应的数据位宽计算得到对应的量化参数,包括:
当所述量化参数包括偏移量时,根据所述目标数据中的最大值、所述目标数据中的最小值和所述目标数据对应的数据位宽,得到所述目标数据的点位置,所述目标数据为任意一种待量化数据。
在一个实施例中,所述根据每种待量化数据和对应的数据位宽计算得到对应的量化参数,包括:
当所述量化参数包括偏移量时,根据目标数据和所述目标数据对应的数据位宽得到所述目标数据量化后数据的最大值,所述目标数据为任意一种待量化数据;
根据所述目标数据中的最大值、所述目标数据中的最小值和所述目标数据量化后数据的最大值,得到所述目标数据的缩放系数。
在一个实施例中,所述根据每种待量化数据和对应的数据位宽计算得到对应的量化参数,包括:
根据目标数据中的最大值和最小值,得到所述目标数据的偏移量,所述目标数据为任意一种待量化数据。
在一个实施例中,所述方法还包括:
根据目标数据和所述目标数据对应的量化数据,确定所述目标数据的量化误差,所述目标数据为任意一种待量化数据;
根据所述量化误差和误差阈值,调整所述目标数据对应的数据位宽,得到所述目标数据对应的调整位宽;
将所述目标数据对应的数据位宽更新为所述调整位宽,根据所述目标数据和所述调整位宽计算得到对应的调整量化参数,以使所述神经网络根据所述调整量化参数进行量化。
在一个实施例中,所述根据所述量化误差和误差阈值,调整所述目标数据对应的数据位宽,得到所述目标数据对应的调整位宽,包括:
当所述量化误差大于第一误差阈值时,增加所述目标数据对应的数据位宽,得到所述目标数据对应的调整位宽。
在一个实施例中,根据所述调整位宽和所述目标数据计算所述目标数据调整后的量化误差;
根据所述调整后的量化误差和所述第一误差阈值继续增加所述调整位宽,直至根据调整位宽和所述目标数据计算得到的调整后的量化误差小于或等于所述第一误差阈值。
在一个实施例中,所述根据所述量化误差和误差阈值,调整所述目标数据对应的数据位宽,包括:
当所述量化误差小于第二误差阈值时,减少所述目标数据对应的数据位宽,所述第二 误差阈值小于所述第一误差阈值。
在一个实施例中,所述方法还包括:
根据所述调整位宽和所述目标数据计算所述目标数据调整后的量化误差;
根据所述调整后的量化误差和所述第二误差阈值继续减少所述调整位宽,直至根据调整位宽和所述目标数据计算得到的调整后的量化误差大于或等于所述第二误差阈值。
在一个实施例中,在所述神经网络运算的微调阶段和/或训练阶段,所述方法还包括:
获取当前迭代以及历史迭代中目标数据的数据变动幅度,所述历史迭代为所述当前迭代之前的迭代;
根据所述目标数据的数据变动幅度,确定所述目标数据对应的目标迭代间隔,以使所述神经网络根据所述目标迭代间隔更新所述目标数据的量化参数,所述目标迭代间隔包括至少一次迭代,所述目标数据为任意一种待量化数据。
在一个实施例中,所述方法还包括:
根据所述目标数据在所述当前迭代的数据位宽,确定所述目标数据在所述目标迭代间隔内的迭代对应的数据位宽,以使所述神经网络根据所述目标数据在所述目标迭代间隔内的迭代对应的数据位宽,确定量化参数。
在一个实施例中,所述量化参数确定模块,包括:
第二量化参数确定子模块,用于根据每种待量化数据和对应的数据位宽计算得到对应的量化参数。
在一个实施例中,所述第二量化参数确定子模块,包括:
第一点位置计算单元,用于当所述量化参数不包括偏移量时,根据目标数据中的绝对值最大值和所述目标数据对应的数据位宽,得到所述目标数据的点位置,所述目标数据为任意一种待量化数据。
在一个实施例中,所述第二量化参数确定子模块,包括:
第一缩放系数计算单元,用于当所述量化参数不包括偏移量时,根据目标数据和所述目标数据对应的数据位宽得到所述目标数据量化后数据的最大值,所述目标数据为任意一种待量化数据;根据目标数据中的绝对值最大值和所述目标数据量化后数据的最大值,得到所述目标数据的缩放系数。
在一个实施例中,所述第二量化参数确定子模块,包括:
第二点位置计算单元,用于当所述量化参数包括偏移量时,根据所述目标数据中的最大值、所述目标数据中的最小值和所述目标数据对应的数据位宽,得到所述目标数据的点位置,所述目标数据为任意一种待量化数据。
在一个实施例中,所述第二量化参数确定子模块,包括:
第二缩放系数计算单元,用于当所述量化参数包括偏移量时,根据目标数据和所述目标数据对应的数据位宽得到所述目标数据量化后数据的最大值,所述目标数据为任意一种待量化数据;根据所述目标数据中的最大值、所述目标数据中的最小值和所述目标数据量化后数据的最大值,得到所述目标数据的缩放系数。
在一个实施例中,所述第二量化参数确定子模块,包括:
偏移量计算单元,用于根据目标数据中的最大值和最小值,得到所述目标数据的偏移量,所述目标数据为任意一种待量化数据。
在一个实施例中,所述装置还包括:
量化误差确定模块,用于根据目标数据和所述目标数据对应的量化数据,确定所述目标数据的量化误差,所述目标数据为任意一种待量化数据;
调整位宽确定模块,用于根据所述量化误差和误差阈值,调整所述目标数据对应的数据位宽,得到所述目标数据对应的调整位宽;
调整量化参数确定模块,用于将所述目标数据对应的数据位宽更新为所述调整位宽,根据所述目标数据和所述调整位宽计算得到对应的调整量化参数,以使所述神经网络根据所述调整量化参数进行量化。
在一个实施例中,所述调整位宽确定模块,包括:
第一调整位宽确定子模块,用于当所述量化误差大于第一误差阈值时,增加所述目标数据对应的数据位宽,得到所述目标数据对应的调整位宽。
在一个实施例中,所述调整位宽确定模块,还包括:
第一调整量化误差确定子模块,用于根据所述调整位宽和所述目标数据计算所述目标数据调整后的量化误差;
第一调整位宽循环确定子模块,用于根据所述调整后的量化误差和所述第一误差阈值继续增加所述调整位宽,直至根据调整位宽和所述目标数据计算得到的调整后的量化误差小于或等于所述第一误差阈值。
在一个实施例中,所述调整位宽确定模块,包括:
第二调整位宽确定子模块,用于当所述量化误差小于第二误差阈值时,减少所述目标数据对应的数据位宽,所述第二误差阈值小于所述第一误差阈值。
在一个实施例中,所述调整位宽确定模块,还包括:
第二调整量化误差确定子模块,用于根据所述调整位宽和所述目标数据计算所述目标数据调整后的量化误差;
第二调整位宽循环确定子模块,用于根据所述调整后的量化误差和所述第二误差阈值继续减少所述调整位宽,直至根据调整位宽和所述目标数据计算得到的调整后的量化误差大于或等于所述第二误差阈值。
在一个实施例中,在所述神经网络运算的微调阶段和/或训练阶段,所述装置还包括:
数据变动幅度确定模块,用于获取当前迭代以及历史迭代中目标数据的数据变动幅度,所述历史迭代为所述当前迭代之前的迭代;
目标迭代间隔确定模块,用于根据所述目标数据的数据变动幅度,确定所述目标数据对应的目标迭代间隔,以使所述神经网络根据所述目标迭代间隔更新所述目标数据的量化参数,所述目标迭代间隔包括至少一次迭代,所述目标数据为任意一种待量化数据。
在一个实施例中,所述装置还包括:
第一目标迭代间隔应用模块,用于根据所述目标数据在所述当前迭代的数据位宽,确定所述目标数据在所述目标迭代间隔内的迭代对应的数据位宽,以使所述神经网络根据所述目标数据在所述目标迭代间隔内的迭代对应的数据位宽,确定量化参数。
在一个实施例中,提供了一种神经网络的量化参数调整方法,其特征在于,所述方法包括:
获取待量化数据的数据变动幅度;
根据所述待量化数据的数据变动幅度,确定目标迭代间隔,以根据所述目标迭代间隔调整所述神经网络运算中的量化参数,其中,所述目标迭代间隔包括至少一次迭代,所述神经网络的量化参数用于实现对所述神经网络运算中待量化数据的量化操作。
在一个实施例中,所述量化参数包括点位置,所述点位置为所述待量化数据对应的量化数据中小数点的位置;所述方法还包括:
根据当前检验迭代对应的目标数据位宽和所述当前检验迭代的待量化数据,确定所述目标迭代间隔中迭代对应的点位置,以调整所述神经网络运算中的点位置;
其中,所述目标迭代间隔中迭代对应的点位置一致。
在一个实施例中,所述量化参数包括点位置,所述点位置为所述待量化数据对应的量化数据中小数点的位置;所述方法还包括:
根据所述当前检验迭代对应的目标数据位宽,确定所述目标迭代间隔对应的数据位宽,其中,所述目标迭代间隔中迭代对应的数据位宽一致;
根据获取的点位置迭代间隔和所述目标迭代间隔对应的数据位宽,调整所述目标迭代间隔中迭代对应的点位置,以调整所述神经网络运算中的点位置;
其中,所述点位置迭代间隔包含至少一次迭代,所述点位置迭代间隔中迭代的点位置一致。
在一个实施例中,所述点位置迭代间隔小于或等于所述目标迭代间隔。
在一个实施例中,所述量化参数还包括缩放系数,所述缩放系数与所述点位置同步更新。
在一个实施例中,所述量化参数还包括偏移量,所述偏移量与所述点位置同步更新。
在一个实施例中,所述方法还包括:
根据所述当前检验迭代的待量化数据和所述当前检验迭代的量化数据,确定量化误差,其中,所述当前检验迭代的量化数据对所述当前检验迭代的待量化数据进行量化获得;
根据所述量化误差,确定所述当前检验迭代对应的目标数据位宽。
在一个实施例中,所述根据所述量化误差,确定所述当前检验迭代对应的目标数据位宽,包括:
若所述量化误差大于或等于第一预设阈值,则增加所述当前检验迭代对应的数据位宽,获得所述当前检验迭代对应的目标数据位宽;或者,
若所述量化误差小于或等于第二预设阈值,则减小所述当前检验迭代对应的数据位宽,获得所述当前检验迭代对应的目标数据位宽。
在一个实施例中,若所述量化误差大于或等于第一预设阈值,则增加所述当前检验迭代对应的数据位宽,获得所述当前检验迭代对应的目标数据位宽,包括:
若所述量化误差大于或等于第一预设阈值,则根据第一预设位宽步长确定第一中间数据位宽;
返回执行根据所述当前检验迭代中待量化数据和所述当前检验迭代的量化数据,确定量化误差,直至所述量化误差小于所述第一预设阈值;其中,所述当前检验迭代的量化数据是根据所述第一中间数据位宽对所述当前检验迭代的待量化数据进行量化获得。
在一个实施例中,所述若所述量化误差小于或等于第二预设阈值,则减小所述当前检验迭代对应的数据位宽,包括:
若所述量化误差小于或等于第二预设阈值,则根据第二预设位宽步长确定第二中间数据位宽;
返回执行根据所述当前检验迭代中待量化数据和所述当前检验迭代的量化数据,确定量化误差,直至所述量化误差大于所述第二预设阈值;其中,所述当前检验迭代的量化数据是根据所述第二中间数据位宽对所述当前检验迭代的待量化数据进行量化获得。
在一个实施例中,所述获取待量化数据的数据变动幅度,包括:
获取点位置的变动幅度;其中,所述点位置的变动幅度能够用于表征所述待量化数据的数据变动幅度,所述点位置的变动幅度与所述待量化数据的数据变动幅度正相关。
在一个实施例中,所述获取点位置的变动幅度,包括:
根据当前检验迭代之前的上一检验迭代对应的点位置,以及所述上一检验迭代之前的历史迭代对应的点位置,确定第一均值,其中,所述上一检验迭代为所述目标迭代间隔之前的上一迭代间隔对应的检验迭代;
根据所述当前检验迭代对应的点位置及所述当前检验迭代之前的历史迭代的点位置,确定第二均值;其中,所述当前检验迭代对应的点位置根据所述当前检验迭代对应的目标数据位宽和待量化数据确定;
根据所述第一均值和所述第二均值确定第一误差,所述第一误差用于表征所述点位置的变动幅度。
在一个实施例中,所述根据当前检验迭代对应的点位置及所述当前检验迭代之前的历史迭代的点位置,确定第二均值,包括:
获取预设数量的中间滑动平均值,其中,各个所述中间滑动平均值是根据所述当前检验迭代之前所述预设数量的检验迭代确定的;
根据所述当前检验迭代的点位置以及所述预设数量的中间滑动平均值,确定所述第二均值。
在一个实施例中,所述根据所述当前检验迭代对应的点位置及所述当前检验迭代之前的历史迭代的点位置,确定第二均值,包括:
根据所述当前检验迭代对应的点位置以及所述第一均值,确定所述第二均值。
在一个实施例中,所述方法还包括:
根据获取的所述当前检验迭代的数据位宽调整值,更新所述第二均值;其中,所述当前检验迭代的数据位宽调整值根据所述当前检验迭代的目标数据位宽和初始数据位宽确定。
在一个实施例中,所述根据获取的所述当前检验迭代的数据位宽调整值,更新所述第二均值,包括:
当所述当前检验迭代的数据位宽调整值大于预设参数时,则根据所述当前检验迭代的数据位宽调整值减小所述第二均值;
当所述当前检验迭代的数据位宽调整值小于预设参数时,则根据所述当前检验迭代的数据位宽调整值增大所述第二均值。
在一个实施例中,所述根据所述待量化数据的数据变动幅度,确定目标迭代间隔,包括:
根据所述第一误差确定所述目标迭代间隔,所述目标迭代间隔与所述第一误差负相关。
在一个实施例中,所述获取待量化数据的数据变动幅度,还包括:
获取数据位宽的变化趋势;
根据所述点位置的变动幅度和所述数据位宽的变化趋势,确定所述待量化数据的数据变动幅度。
在一个实施例中,根据所述待量化数据的数据变动幅度,确定目标迭代间隔,还包括:
根据获取的第一误差和第二误差,确定所述目标迭代间隔;其中,所述第一误差用于表征点位置的变动幅度,所述第二误差用于表征数据位宽的变化趋势。
在一个实施例中,所述根据获取的所述第二误差和所述第一误差,确定所述目标迭代间隔,包括:
将所述第一误差和所述第二误差中最大值作为目标误差;
根据所述目标误差确定所述目标迭代间隔,其中,所述目标误差与所述目标迭代间隔负相关。
在一个实施例中,所述第二误差根据量化误差确定;
其中,所述量化误差根据所述当前检验迭代中待量化数据和所述当前检验迭代的量化数据确定,所述第二误差与所述量化误差正相关。
在一个实施例中,所述方法用于神经网络的训练或微调,所述方法还包括:
当所述当前迭代大于第一预设迭代时,则根据所述待量化数据的数据变动幅度确定目标迭代间隔,并根据所述目标迭代间隔调整所述量化参数。
在一个实施例中,所述方法还包括:
当所述当前迭代小于或等于所述第一预设迭代时,则将第一预设迭代间隔作为所述目标迭代间隔,并根据所述第一预设迭代间隔调整所述量化参数。
在一个实施例中,所述方法还包括:
当所述当前迭代大于或等于第二预设迭代时,则将第二预设迭代间隔作为所述目标迭代间隔,并根据所述第二预设迭代间隔调整所述量化参数;
其中,所述第二预设迭代大于所述第一预设迭代,所述第二预设迭代间隔大于所述第一预设迭代间隔。
在一个实施例中,所述方法还包括:
当所述神经网络的收敛程度满足预设条件时,则确定所述当前检验迭代大于或等于第二预设迭代。
在一个实施例中,所述方法还包括:
当所述当前迭代大于或等于第二预设迭代,且第二误差大于预设误差值时,则根据所述待量化数据的数据变动幅度确定迭代间隔,以根据所述迭代间隔重新确定所述数据位宽。
在一个实施例中,所述待量化数据为神经元数据、权值数据或梯度数据中的至少一种。
在一个实施例中,提供了一种神经网络的量化参数调整装置,其特征在于,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时,实现如上文任一项所述的方法的步骤。
在一个实施例中,所述计算机可读存储介质中存储有计算机程序,所述计算机程序被执行时,实现如上文任一项所述的方法的步骤。
在一个实施例中,提供了一种神经网络的量化参数调整装置,其特征在于,所述装置包括:
获取模块,用于获取待量化数据的数据变动幅度;
迭代间隔确定模块,用于根据所述待量化数据的数据变动幅度,确定目标迭代间隔,以根据所述目标迭代间隔调整所述神经网络运算中的量化参数,其中,所述目标迭代间隔包括至少一次迭代,所述神经网络的量化参数用于实现对所述神经网络运算中待量化数据的量化操作。
在一个实施例中,所述量化参数包括点位置,所述点位置为所述待量化数据对应的量化数据中小数点的位置;所述装置还包括:
量化参数确定模块,用于根据当前检验迭代对应的目标数据位宽和所述当前检验迭代的待量化数据,确定所述目标迭代间隔中迭代对应的点位置,以调整所述神经网络运算中的点位置;
其中,所述目标迭代间隔中迭代对应的点位置一致。
在一个实施例中,所述量化参数包括点位置,所述点位置为所述待量化数据对应的量化数据中小数点的位置;所述装置还包括:
数据位宽确定模块,用于根据所述当前检验迭代对应的目标数据位宽,确定所述目标迭代间隔对应的数据位宽,其中,所述目标迭代间隔中迭代对应的数据位宽一致;
量化参数确定模块,用于根据获取的点位置迭代间隔和所述目标迭代间隔对应的数据位宽,调整所述目标迭代间隔中迭代对应的点位置,以调整所述神经网络运算中的点位置;
其中,所述点位置迭代间隔包含至少一次迭代,所述点位置迭代间隔中迭代的点位置一致。
在一个实施例中,所述点位置迭代间隔小于或等于所述目标迭代间隔。
在一个实施例中,所述量化参数还包括缩放系数,所述缩放系数与所述点位置同步更新。
在一个实施例中,所述量化参数还包括偏移量,所述偏移量与所述点位置同步更新。
在一个实施例中,所述数据位宽确定模块包括:
量化误差确定单元,用于根据所述当前检验迭代的待量化数据和所述当前检验迭代的量化数据,确定量化误差,其中,所述当前检验迭代的量化数据对所述当前检验迭代的待量化数据进行量化获得;
数据位宽确定单元,用于根据所述量化误差,确定所述当前检验迭代对应的目标数据位宽。
在一个实施例中,所述数据位宽确定单元用于根据所述量化误差,确定所述当前检验迭代对应的目标数据位宽时,具体用于:
若所述量化误差大于或等于第一预设阈值,则增加所述当前检验迭代对应的数据位宽,获得所述当前检验迭代对应的目标数据位宽;或者,
若所述量化误差小于或等于第二预设阈值,则减小所述当前检验迭代对应的数据位宽,获得所述当前检验迭代对应的目标数据位宽。
在一个实施例中,所述数据位宽确定单元用于若所述量化误差大于或等于第一预设阈值,则增加所述当前检验迭代对应的数据位宽,获得所述当前检验迭代对应的目标数据位宽时,具体用于:
若所述量化误差大于或等于第一预设阈值,则根据第一预设位宽步长确定第一中间数据位宽;
返回执行根据所述当前检验迭代中待量化数据和所述当前检验迭代的量化数据,确定量化误差,直至所述量化误差小于所述第一预设阈值;其中,所述当前检验迭代的量化数据是根据所述第一中间数据位宽对所述当前检验迭代的待量化数据进行量化获得。
在一个实施例中,所述数据位宽确定单元用于若所述量化误差小于或等于第二预设阈值,则减小所述当前检验迭代对应的数据位宽,获得所述当前检验迭代对应的目标数据位宽时,具体用于:
若所述量化误差小于或等于第二预设阈值,则根据第二预设位宽步长确定第二中间数据位宽;
返回执行根据所述当前检验迭代中待量化数据和所述当前检验迭代的量化数据,确定量化误差,直至所述量化误差大于所述第二预设阈值;其中,所述当前检验迭代的量化数据是根据所述第二中间数据位宽对所述当前检验迭代的待量化数据进行量化获得。
在一个实施例中,所述获取模块包括:
第一获取模块,用于获取点位置的变动幅度;其中,所述点位置的变动幅度能够用于表征所述待量化数据的数据变动幅度,所述点位置的变动幅度与所述待量化数据的数据变动幅度正相关。
在一个实施例中,所述第一获取模块包括:
第一均值确定单元,用于根据当前检验迭代之前的上一检验迭代对应的点位置,以及所述上一检验迭代之前的历史迭代对应的点位置,确定第一均值,其中,所述上一检验迭代为所述目标迭代间隔之前的上一迭代间隔对应的检验迭代;
第二均值确定单元,用于根据所述当前检验迭代对应的点位置及所述当前检验迭代之前的历史迭代的点位置,确定第二均值;其中,所述当前检验迭代对应的点位置根据所述当前检验迭代对应的目标数据位宽和待量化数据确定;
第一误差确定单元,用于根据所述第一均值和所述第二均值确定第一误差,所述第一误差用于表征所述点位置的变动幅度。
在一个实施例中,所述第二均值确定单元具体用于:
获取预设数量的中间滑动平均值,其中,各个所述中间滑动平均值是根据所述当前检验迭代之前所述预设数量的检验迭代确定的;
根据所述当前检验迭代的点位置以及所述预设数量的中间滑动平均值,确定所述第二均值。
在一个实施例中,所述第二均值确定单元具体用于根据所述当前检验迭代对应的点位置以及所述第一均值,确定所述第二均值。
在一个实施例中,所述第二均值确定单元用于根据获取的所述当前检验迭代的数据位宽调整值,更新所述第二均值;
其中,所述当前检验迭代的数据位宽调整值根据所述当前检验迭代的目标数据位宽和初始数据位宽确定。
在一个实施例中,所述第二均值确定单元用于根据获取的所述当前检验迭代的数据位宽调整值,更新所述第二均值时,具体用于:
当所述当前检验迭代的数据位宽调整值大于预设参数时,则根据所述当前检验迭代的数据位宽调整值减小所述第二均值;
当所述当前检验迭代的数据位宽调整值小于预设参数时,则根据所述当前检验迭代的数据位宽调整值增大所述第二均值。
在一个实施例中,所述迭代间隔确定模块用于根据所述第一误差确定所述目标迭代间隔,所述目标迭代间隔与所述第一误差负相关。
在一个实施例中,所述获取模块还包括:
第二获取模块,用于获取数据位宽的变化趋势;根据所述点位置的变动幅度和所述数据位宽的变化趋势,确定所述待量化数据的数据变动幅度。
在一个实施例中,所述迭代间隔确定模块还用于根据获取的第一误差和第二误差,确定所述目标迭代间隔;其中,所述第一误差用于表征点位置的变动幅度,所述第二误差用于表征数据位宽的变化趋势。
在一个实施例中,所述根迭代间隔确定模块用于根据获取的第一误差和第二误差,确定所述目标迭代间隔时,具体用于:
将所述第一误差和所述第二误差中最大值作为目标误差;
根据所述目标误差确定所述目标迭代间隔,其中,所述目标误差与所述目标迭代间隔负相关。
在一个实施例中,所述第二误差根据量化误差确定;
其中,所述量化误差根据所述当前检验迭代中待量化数据和所述当前检验迭代的量化数据确定,所述第二误差与所述量化误差正相关。
在一个实施例中,所述装置用于实现神经网络的训练或微调;所述迭代间隔确定模块还用于:
当所述当前迭代大于第一预设迭代时,则根据所述待量化数据的数据变动幅度确定目标迭代间隔,并根据所述目标迭代间隔调整所述量化参数。
在一个实施例中,所述迭代间隔确定模块还用于:当所述当前迭代小于或等于所述第一预设迭代时,则将第一预设迭代间隔作为所述目标迭代间隔,并根据所述第一预设迭代间隔调整所述量化参数。
在一个实施例中,所述迭代间隔确定模块还用于:
当所述当前迭代大于或等于第二预设迭代时,则将第二预设迭代间隔作为所述目标迭代间隔,并根据所述第二预设迭代间隔调整所述量化参数;
其中,当所述神经网络的收敛程度满足预设条件时,则确定所述当前检验迭代大于或等于第二预设迭代;
所述第二预设迭代大于所述第一预设迭代,所述第二预设迭代间隔大于所述第一预设迭代间隔。
在一个实施例中,所述迭代间隔确定模块还用于:当所述当前迭代大于或等于第二预设迭代,且第二误差大于预设误差值时,则根据所述待量化数据的数据变动幅度确定迭代间隔,以根据所述迭代间隔重新确定所述数据位宽。
应该理解,上述的装置实施例仅是示意性的,本披露的设备还可通过其它的方式实现。例如,上述实施例中所述单元/模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。例如,多个单元、模块或组件可以结合,或者可以集成到另一个系统,或一些特征可以忽略或不执行。
所述作为分离部件说明的单元或模块可以是物理上分开的,也可以不是物理上分开的。作为单元或模块说明的部件可以是物理单元,也可以不是物理单元,即可以位于一个装置中,或者也可以分布到多个装置上。本披露中实施例的方案可以根据实际的需要选择其中的部分或者全部单元来实现。
另外,若无特别说明,在本披露各个实施例中的各功能单元/模块可以集成在一个单元/模块中,也可以是各个单元/模块单独物理存在,也可以两个或两个以上单元/模块集成在一起。上述集成的单元/模块既可以采用硬件的形式实现,也可以采用软件程序模块的形式实现。
应该理解,上述的装置实施例仅是示意性的,本披露的装置还可通过其它的方式实现。例如,上述实施例中所述单元/模块的划分,仅仅为一种逻辑功能划分,实际实现时可以 有另外的划分方式。例如,多个单元、模块或组件可以结合,或者可以集成到另一个系统,或一些特征可以忽略或不执行。
所述作为分离部件说明的单元或模块可以是物理上分开的,也可以不是物理上分开的。作为单元或模块说明的部件可以是物理单元,也可以不是物理单元,即可以位于一个装置中,或者也可以分布到多个装置上。本披露中实施例的方案可以根据实际的需要选择其中的部分或者全部单元来实现。
另外,若无特别说明,在本披露各个实施例中的各功能单元/模块可以集成在一个单元/模块中,也可以是各个单元/模块单独物理存在,也可以两个或两个以上单元/模块集成在一起。上述集成的单元/模块既可以采用硬件的形式实现,也可以采用软件程序模块的形式实现。
所述集成的单元/模块如果以硬件的形式实现时,该硬件可以是数字电路,模拟电路等等。硬件结构的物理实现包括但不局限于晶体管,忆阻器等等。若无特别说明,所述人工智能处理器可以是任何适当的硬件处理器,比如:CPU、GPU、FPGA、DSP和ASIC等等。若无特别说明,所述存储单元可以是任何适当的磁存储介质或者磁光存储介质,比如:阻变式存储器RRAM(Resistive Random Access Memory)、动态随机存取存储器DRAM(Dynamic Random Access Memory)、静态随机存取存储器SRAM(Static Random-Access Memory)、增强动态随机存取存储器EDRAM(Enhanced Dynamic Random Access Memory)、高带宽内存HBM(High-Bandwidth Memory)、混合存储立方HMC(Hybrid Memory Cube)等等。
所述集成的单元/模块如果以软件程序模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储器中。基于这样的理解,本披露的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储器中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本披露各个实施例所述方法的全部或部分步骤。而前述的存储器包括:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
在本技术方案中,本披露还公开了一种人工智能芯片,其包括了上述神经网络的量化参数确定设备。
在本技术方案中,本披露还公开了一种板卡,其包括存储器件、接口装置和控制器件以及上述人工智能芯片;其中,所述人工智能芯片与所述存储器件、所述控制器件以及所述接口装置分别连接;所述存储器件,用于存储数据;所述接口装置,用于实现所述人工智能芯片与外部设备之间的数据传输;所述控制器件,用于对所述人工智能芯片的状态进行监控。
图12示出根据本披露实施例的板卡的结构框图,参阅图12,上述板卡除了包括上述芯片389以外,还可以包括其他的配套部件,该配套部件包括但不限于:存储器件390、 接口装置391和控制器件392;
所述存储器件390与所述人工智能芯片通过总线连接,用于存储数据。所述存储器件可以包括多组存储单元393。每一组所述存储单元与所述人工智能芯片通过总线连接。可以理解,每一组所述存储单元可以是DDR SDRAM(英文:Double Data Rate SDRAM,双倍速率同步动态随机存储器)。
DDR不需要提高时钟频率就能加倍提高SDRAM的速度。DDR允许在时钟脉冲的上升沿和下降沿读出数据。DDR的速度是标准SDRAM的两倍。在一个实施例中,所述存储装置可以包括4组所述存储单元。每一组所述存储单元可以包括多个DDR4颗粒(芯片)。在一个实施例中,所述人工智能芯片内部可以包括4个72位DDR4控制器,上述72位DDR4控制器中64bit用于传输数据,8bit用于ECC校验。可以理解,当每一组所述存储单元中采用DDR4-3200颗粒时,数据传输的理论带宽可达到25600MB/s。
在一个实施例中,每一组所述存储单元包括多个并联设置的双倍速率同步动态随机存储器。DDR在一个时钟周期内可以传输两次数据。在所述芯片中设置控制DDR的控制器,用于对每个所述存储单元的数据传输与数据存储的控制。
所述接口装置与所述人工智能芯片电连接。所述接口装置用于实现所述人工智能芯片与外部设备(例如服务器或计算机)之间的数据传输。例如在一个实施例中,所述接口装置可以为标准PCIE接口。比如,待处理的数据由服务器通过标准PCIE接口传递至所述芯片,实现数据转移。优选的,当采用PCIE 3.0 X 16接口传输时,理论带宽可达到16000MB/s。在另一个实施例中,所述接口装置还可以是其他的接口,本披露并不限制上述其他的接口的具体表现形式,所述接口单元能够实现转接功能即可。另外,所述人工智能芯片的计算结果仍由所述接口装置传送回外部设备(例如服务器)。
所述控制器件与所述人工智能芯片电连接。所述控制器件用于对所述人工智能芯片的状态进行监控。具体的,所述人工智能芯片与所述控制器件可以通过SPI接口电连接。所述控制器件可以包括单片机(Micro Controller Unit,MCU)。如所述人工智能芯片可以包括多个处理芯片、多个处理核或多个处理电路,可以带动多个负载。因此,所述人工智能芯片可以处于多负载和轻负载等不同的工作状态。通过所述控制装置可以实现对所述人工智能芯片中多个处理芯片、多个处理和或多个处理电路的工作状态的调控。
在一种可能的实现方式中,公开了一种电子设备,其包括了上述人工智能芯片。电子设备包括数据处理装置、机器人、电脑、打印机、扫描仪、平板电脑、智能终端、手机、行车记录仪、导航仪、传感器、摄像头、服务器、云端服务器、相机、摄像机、投影仪、手表、耳机、移动存储、可穿戴设备、交通工具、家用电器、和/或医疗设备。
所述交通工具包括飞机、轮船和/或车辆;所述家用电器包括电视、空调、微波炉、冰箱、电饭煲、加湿器、洗衣机、电灯、燃气灶、油烟机;所述医疗设备包括核磁共振仪、B超仪和/或心电图仪。
依据以下条款可更好地理解前述内容:
A1.一种用于调整数据位宽的方法,其特征在于,所述方法包括:
获取用于针对待量化数据执行量化处理的数据位宽,所述数据位宽指示所述待量化数据在经过所述量化处理后的量化后数据的位宽;
基于所述数据位宽,针对一组待量化数据执行量化处理,以将所述一组待量化数据转换至一组量化后数据,所述一组量化后数据具有所述数据位宽;
比较所述一组待量化数据和所述一组量化后数据,确定与所述数据位宽相关联的量化误差;以及
基于确定的所述量化误差来调整所述数据位宽。
A2.根据条款A1所述的方法,其特征在于,比较所述一组待量化数据和所述一组量化后数据,确定与所述数据位宽相关联的量化误差包括:
根据所述数据位宽确定量化间隔;以及
根据所述量化间隔、所述一组量化后数据以及所述一组待量化数据确定所述量化误差。
A3.根据条款A2所述的方法,其特征在于,根据所述量化间隔、所述一组量化后数据以及所述一组待量化数据确定所述量化误差包括:
根据所述量化间隔,针对所述一组量化后数据进行反量化,以获得一组反量化数据,其中所述一组反量化数据的数据格式与所述一组待量化数据的数据格式相同;以及
根据所述一组反量化数据和所述一组待量化数据,确定量化误差。
A4.根据条款A1至A3中的任一项所述的方法,其特征在于,基于确定的所述量化误差来调整所述数据位宽包括:
比较所述量化误差与预设阈值,所述预设阈值包括第一阈值和第二阈值中的至少一个;以及
根据所述比较的结果来调整所述数据位宽。
A5.根据条款A4所述的方法,其特征在于,根据所述比较的结果来调整所述数据位宽包括:
响应于确定所述量化误差大于或等于第一阈值,增加所述数据位宽。
A6.根据条款A5所述的方法,其特征在于,增加所述数据位宽包括:
根据第一预设位宽步长增加所述数据位宽,以确定调整后数据位宽。
A7.根据条款A6所述的方法,其特征在于,进一步包括:
基于所述调整后数据位宽,针对所述一组待量化数据执行量化处理,以将所述一组待量化数据转换至另一组量化后数据,所述另一组量化后数据具有所述调整后数据位宽;以及
比较所述一组待量化数据和所述另一组量化后数据,确定与所述调整后数据位宽相关联的另一量化误差,直至所述另一量化误差小于所述第一预设阈值。
A8.根据条款A7所述的方法,其特征在于,所述方法迭代地被执行。
A9.根据条款A4所述的方法,其特征在于,根据所述比较的结果来调整所述数 据位宽包括:
响应于确定所述量化误差小于或等于所述第二阈值,减少所述数据位宽。
A10.根据条款A9所述的方法,其特征在于,减少所述数据位宽包括:
根据第二预设位宽步长减少所述数据位宽,以确定调整后数据位宽。
A11.根据条款A10所述的方法,其特征在于,进一步包括:
基于所述调整后数据位宽,针对所述一组待量化数据执行量化处理,以将所述一组待量化数据转换至另一组量化后数据,所述另一组量化后数据具有所述调整后数据位宽;以及
基于所述一组待量化数据和所述另一组量化后数据,确定与所述调整后数据位宽相关联的另一量化误差,直至所述另一量化误差大于所述第二预设阈值。
A12.根据条款A11所述的方法,其特征在于,所述方法迭代地被执行。
A13.根据条款A4所述的方法,其特征在于,根据所述比较的结果来调整所述数据位宽包括:
响应于确定所述量化误差处于所述第一阈值和所述第二阈值之间,保持所述数据位宽。
A14.根据条款A1至A13中的任一项所述的方法,其特征在于,进一步包括:
基于所述一组待量化数据和所述调整后数据位宽,更新用于针对所述一组待量化数据执行量化处理的量化参数;以及
基于更新的所述量化参数,针对所述一组待量化数据执行量化处理。
A15.根据条款A1所述的方法,其特征在于,进一步包括:
获取待量化数据的数据变动幅度;
根据所述待量化数据的数据变动幅度,确定目标迭代间隔,以根据所述目标迭代间隔调整所述数据位宽,所述目标迭代间隔包括至少一次迭代。
A16.根据条款A15所述的方法,其特征在于,所述获取待量化数据的数据变动幅度,包括:
获取点位置的变动幅度,其中所述点位置的变动幅度用于表征所述待量化数据的数据变动幅度,所述点位置的变动幅度与所述待量化数据的数据变动幅度正相关。
A17.根据条款A16所述的方法,其特征在于,所述获取点位置的变动幅度,包括:
根据当前检验迭代之前的上一检验迭代对应的点位置,以及所述上一检验迭代之前的历史迭代对应的点位置,确定第一均值,其中所述上一检验迭代为所述目标迭代间隔之前的上一迭代间隔对应的检验迭代;
根据所述当前检验迭代对应的点位置及所述当前检验迭代之前的历史迭代的点位置,确定第二均值;其中所述当前检验迭代对应的点位置根据所述当前检验迭代对应的目标数据位宽和待量化数据确定;
根据所述第一均值和所述第二均值确定第一误差,所述第一误差用于表征所述点 位置的变动幅度。
A18.根据条款A15所述的方法,其特征在于,所述根据所述待量化数据的数据变动幅度,确定目标迭代间隔,包括:
根据所述第一误差确定所述目标迭代间隔,所述目标迭代间隔与所述第一误差负相关。
A19.根据条款A15所述的方法,其特征在于,所述获取待量化数据的数据变动幅度,进一步包括:
获取所述数据位宽的变化趋势;
根据所述点位置的变动幅度和所述数据位宽的变化趋势,确定所述待量化数据的数据变动幅度。
A20.根据条款A19所述的方法,其特征在于,根据所述待量化数据的数据变动幅度,确定目标迭代间隔,进一步包括:
根据获取的第一误差和第二误差,确定所述目标迭代间隔;其中所述第一误差用于表征点位置的变动幅度,所述第二误差用于表征数据位宽的变化趋势。
A21.根据条款A20所述的方法,其特征在于,所述根据获取的所述第一误差和所述第二误差,确定所述目标迭代间隔,包括:
将所述第一误差和所述第二误差中最大值作为目标误差;
根据所述目标误差确定所述目标迭代间隔,其中,所述目标误差与所述目标迭代间隔负相关。
A22.根据条款A20或A21所述的方法,其特征在于,所述第二误差根据量化误差确定;
其中,所述量化误差根据所述当前检验迭代中待量化数据和所述当前检验迭代的量化数据确定,所述第二误差与所述量化误差正相关。
A23.根据条款A15至A22中的任一项所述的方法,其特征在于,所述方法用于神经网络的训练或微调,所述方法进一步包括:
当所述当前迭代大于第一预设迭代时,则根据所述待量化数据的数据变动幅度确定目标迭代间隔,并根据所述目标迭代间隔调整所述量化参数。
A24.根据条款A23所述的方法,其特征在于,所述方法进一步包括:
当所述当前迭代小于或等于所述第一预设迭代时,则将第一预设迭代间隔作为所述目标迭代间隔,并根据所述第一预设迭代间隔调整所述量化参数。
A25.根据条款A23或A24所述的方法,其特征在于,所述方法进一步包括:
当所述当前迭代大于或等于第二预设迭代时,则将第二预设迭代间隔作为所述目标迭代间隔,并根据所述第二预设迭代间隔调整所述量化参数;
其中,所述第二预设迭代大于所述第一预设迭代,所述第二预设迭代间隔大于所述第一预设迭代间隔。
A26.根据条款A25所述的方法,其特征在于,所述方法进一步包括:
当所述神经网络的收敛程度满足预设条件时,则确定所述当前检验迭代大于或等于第二预设迭代。
A27、根据条款A25所述的方法,其特征在于,所述方法进一步包括:
当所述当前迭代大于或等于第二预设迭代,且第二误差大于预设误差值时,则根据所述待量化数据的数据变动幅度确定迭代间隔,以根据所述迭代间隔重新确定所述数据位宽。
A28.一种调整数据位宽的装置,其特征在于,包括:
获取模块,用于获取用于针对待量化数据执行量化处理的数据位宽,所述数据位宽指示所述待量化数据在经过所述量化处理后的量化后数据的位宽;
量化模块,用于基于所述数据位宽,针对一组待量化数据执行量化处理,以将所述一组待量化数据转换至一组量化后数据,所述一组量化后数据具有所述数据位宽;
确定模块,用于比较所述一组待量化数据和所述一组量化后数据,确定与所述数据位宽相关联的量化误差;以及
调整基于确定的所述量化误差来调整所述数据位宽。
A29.根据条款A28所述的装置,其特征在于,所述比较模块包括:
间隔确定模块,用于根据所述数据位宽确定量化间隔;以及
误差确定模块,用于根据所述量化间隔、所述一组量化后数据以及所述一组待量化数据确定所述量化误差。
A30.根据条款A29所述的装置,其特征在于,所述误差确定模块包括:
量化模块,用于根据所述量化间隔,针对所述一组量化后数据进行反量化,以获得一组反量化数据,其中所述一组反量化数据的数据格式与所述一组待量化数据的数据格式相同;以及
量化误差确定模块,用于根据所述一组反量化数据和所述一组待量化数据,确定量化误差。
A31.根据条款A28至A30中的任一项所述的装置,其特征在于,所述调整模块包括:
比较模块,用于比较所述量化误差与预设阈值,所述预设阈值包括第一阈值和第二阈值中的至少一个;以及
位宽调整模块,用于根据所述比较的结果来调整所述数据位宽。
A32.根据条款A31所述的装置,其特征在于,所述位宽调整模块包括:
增加模块,用于响应于确定所述量化误差大于或等于第一阈值,增加所述数据位宽。
A33.根据条款A32所述的装置,其特征在于,所述增加模块包括:
步长增加模块,用于根据第一预设位宽步长增加所述数据位宽,以确定调整后数据位宽。
A34.根据条款A33所述的装置,其特征在于:
所述量化模块进一步用于基于所述调整后数据位宽,针对所述一组待量化数据执行量化处理,以将所述一组待量化数据转换至另一组量化后数据,所述另一组量化后数据具有所述调整后数据位宽;以及
所述确定模块进一步用于比较所述一组待量化数据和所述另一组量化后数据,确定与所述调整后数据位宽相关联的另一量化误差,直至所述另一量化误差小于所述第一预设阈值。
A35.根据条款A34所述的装置,其特征在于,所述装置迭代地被调用。
A36.根据条款A31所述的装置,其特征在于,所述调整模块包括:
减少模块,用于响应于确定所述量化误差小于或等于所述第二阈值,减少所述数据位宽。
A37.根据条款A36所述的装置,其特征在于,所述减少模块包括:
步长减小模块,用于根据第二预设位宽步长减少所述数据位宽,以确定调整后数据位宽。
A38.根据条款A37所述的装置,其特征在于:
所述量化模块进一步用于基于所述调整后数据位宽,针对所述一组待量化数据执行量化处理,以将所述一组待量化数据转换至另一组量化后数据,所述另一组量化后数据具有所述调整后数据位宽;以及
所述确定模块进一步用于基于所述一组待量化数据和所述另一组量化后数据,确定与所述调整后数据位宽相关联的另一量化误差,直至所述另一量化误差大于所述第二预设阈值。
A39.根据条款A38所述的装置,其特征在于,所述装置迭代地被调用。
A40.根据条款A31所述的装置,其特征在于,所述调整模块包括:
保持模块,用于响应于确定所述量化误差处于所述第一阈值和所述第二阈值之间,保持所述数据位宽。
A41.根据条款A28至A40中的任一项所述的装置,其特征在于,进一步包括:
更新模块,用于基于所述一组待量化数据和所述调整后数据位宽,更新用于针对所述一组待量化数据执行量化处理的量化参数;以及
所述量化模块进一步用于基于更新的所述量化参数,针对所述一组待量化数据执行量化处理。
A42.根据条款A28所述的装置,其特征在于,进一步包括:
幅度模块,用于获取待量化数据的数据变动幅度;
间隔模块,用于根据所述待量化数据的数据变动幅度,确定目标迭代间隔,以根据所述目标迭代间隔调整所述数据位宽,所述目标迭代间隔包括至少一次迭代。
A43.根据条款A42所述的装置,其特征在于,所述幅度模块包括:
点位置模块,用于获取点位置的变动幅度,其中所述点位置的变动幅度用于表征所述待量化数据的数据变动幅度,所述点位置的变动幅度与所述待量化数据的数据变 动幅度正相关。
A44.根据条款A43所述的装置,其特征在于,所述点位置模块,包括:
第一均值模块,用于根据当前检验迭代之前的上一检验迭代对应的点位置,以及所述上一检验迭代之前的历史迭代对应的点位置,确定第一均值,其中所述上一检验迭代为所述目标迭代间隔之前的上一迭代间隔对应的检验迭代;
第二均值模块,用于根据所述当前检验迭代对应的点位置及所述当前检验迭代之前的历史迭代的点位置,确定第二均值;其中所述当前检验迭代对应的点位置根据所述当前检验迭代对应的目标数据位宽和待量化数据确定;
第一误差模块,用于根据所述第一均值和所述第二均值确定第一误差,所述第一误差用于表征所述点位置的变动幅度。
A45.根据条款A42所述的装置,其特征在于,所述间隔模块包括:
第一间隔模块,用于根据所述第一误差确定所述目标迭代间隔,所述目标迭代间隔与所述第一误差负相关。
A46.根据条款A42所述的装置,其特征在于,所述幅度模块进一步包括:
趋势模块,用于获取所述数据位宽的变化趋势;
数据变动幅度模块,用于根据所述点位置的变动幅度和所述数据位宽的变化趋势,确定所述待量化数据的数据变动幅度。
A47.根据条款A46所述的装置,其特征在于,所述间隔模块,进一步包括:
迭代间隔模块,用于根据获取的第一误差和第二误差,确定所述目标迭代间隔;其中所述第一误差用于表征点位置的变动幅度,所述第二误差用于表征数据位宽的变化趋势。
A48.根据条款A47所述的装置,其特征在于,所述迭代间隔模块包括:
目标误差模块,用于将所述第一误差和所述第二误差中最大值作为目标误差;
目标迭代间隔模块,用于根据所述目标误差确定所述目标迭代间隔,其中,所述目标误差与所述目标迭代间隔负相关。
A49.根据条款A47或A48所述的装置,其特征在于,所述第二误差根据量化误差确定;
其中,所述量化误差根据所述当前检验迭代中待量化数据和所述当前检验迭代的量化数据确定,所述第二误差与所述量化误差正相关。
A50.根据条款A42至A49中的任一项所述的装置,其特征在于,所述装置用于神经网络的训练或微调,所述装置进一步包括:
第一迭代模块,用于当所述当前迭代大于第一预设迭代时,则根据所述待量化数据的数据变动幅度确定目标迭代间隔,并根据所述目标迭代间隔调整所述量化参数。
A51.根据条款A50所述的装置,其特征在于,所述装置进一步包括:
第二迭代模块,用于当所述当前迭代小于或等于所述第一预设迭代时,则将第一预设迭代间隔作为所述目标迭代间隔,并根据所述第一预设迭代间隔调整所述量化参 数。
A52.根据条款A50或A51所述的装置,其特征在于,所述装置进一步包括:
第三迭代模块,用于当所述当前迭代大于或等于第二预设迭代时,则将第二预设迭代间隔作为所述目标迭代间隔,并根据所述第二预设迭代间隔调整所述量化参数;
其中,所述第二预设迭代大于所述第一预设迭代,所述第二预设迭代间隔大于所述第一预设迭代间隔。
A53.根据条款A52所述的装置,其特征在于,所述装置进一步包括:
收敛模块,用于当所述神经网络的收敛程度满足预设条件时,则确定所述当前检验迭代大于或等于第二预设迭代。
A54、根据条款A52所述的装置,其特征在于,所述装置进一步包括:
当所述当前迭代大于或等于第二预设迭代,且第二误差大于预设误差值时,则根据所述待量化数据的数据变动幅度确定迭代间隔,以根据所述迭代间隔重新确定所述数据位宽。
A55.一种计算机可读存储介质,其特征在于其上存储有计算机程序,所述程序被执行时实现根据条款A1-A27中的任一项所述的方法。
A56.一种人工智能芯片,其特征在于,所述芯片包括根据条款A28至A54中的任一项所述的用于处理数据的装置。
A57.一种电子设备,其特征在于,所述电子设备包括根据条款56所述的人工智能芯片。
A58.一种板卡,其特征在于,所述板卡包括:存储器件、接口装置和控制器件以及根据条款56所述的人工智能芯片;
其中,所述人工智能芯片与所述存储器件、所述控制器件以及所述接口装置相连接;
所述存储器件,用于存储数据;
所述接口装置,用于实现所述人工智能芯片与外部设备之间的数据传输;以及
所述控制器件,用于对所述人工智能芯片的状态进行监控。
A59.根据条款A58所述的板卡,其特征在于,
所述存储器件包括:多组存储单元,每组存储单元与所述人工智能芯片通过总线连接,所述存储单元为DDR SDRAM;
所述芯片包括:DDR控制器,用于对每个所述存储单元的数据传输与数据存储的控制;
所述接口装置为标准PCIE接口。
为了解决神经网络量化的问题,我们提出了如下的方案(201910505239.7)。具体地,提供了神经网络量化方法及装置以及相关产品。
本披露涉及人工智能技术领域,尤其涉及一种神经网络量化方法及装置以及相关产品。
随着人工智能技术的不断发展,其应用领域越来越广泛,在图像识别、语音识别、自然语言处理等领域中都得到了良好的应用。然而,随着人工智能算法的复杂度提高,需要处理的数据量和数据维度都在不断增大,如何在运算效率和运算结果的准确度之间进行平衡,是人工智能领域亟待解决的问题。
有鉴于此,本披露提出了一种神经网络量化技术方案。
根据本披露的一方面,提供了一种神经网络量化方法,对于所述神经网络中的任意一层待量化层,所述方法包括:
确定与所述待量化层中每种待量化数据对应的量化参数,所述待量化数据包括神经元、权值、偏置、梯度中的至少一种;
将待量化数据根据对应的量化参数进行量化,得到量化数据,以使所述神经网络根据所述量化数据执行运算。
根据本披露的另一方面,提供了一种神经网络量化装置,所述装置用于量化所述神经网络中的任意一层待量化层,所述装置包括:
量化参数确定模块,用于确定与所述待量化层中每种待量化数据对应的量化参数,所述待量化数据包括神经元、权值、偏置、梯度中的至少一种;
量化模块,用于将待量化数据根据对应的量化参数进行量化,得到量化数据,以使所述神经网络根据所述量化数据执行运算。
根据本披露的另一方面,提供了一种人工智能芯片,所述芯片包括上述神经网络量化装置。
根据本披露的另一方面,提供了一种电子设备,所述电子设备包括如上所述的人工智能芯片。
根据本披露的另一方面,提供了一种板卡,所述板卡包括:存储器件、接口装置和控制器件以及如上所述的人工智能芯片;其中,所述人工智能芯片与所述存储器件、所述控制器件以及所述接口装置分别连接;所述存储器件,用于存储数据;所述接口装置,用于实现所述人工智能芯片与外部设备之间的数据传输;所述控制器件,用于对所述人工智能芯片的状态进行监控。
在本披露实施例中,对于所述神经网络中的任意一层待量化层,确定与所述待量化层中每种待量化数据对应的量化参数,所述待量化数据包括神经元、权值、偏置、梯度中的至少一种;将待量化数据根据对应的量化参数进行量化,得到量化数据,以使所述神经网络根据所述量化数据执行运算。采用更加符合各层待量化数据的量化参数对各待量化层进行量化,可以在保证各层运算结果准确率的前提下,提高各层的运算效率。也可以在保证神经网络整体的运算结果准确率的前提下,提高神经网络整体的运算效率。
根据下面参考附图对示例性实施例的详细说明,本披露的其它特征及方面将变得清楚。
包含在说明书中并且构成说明书的一部分的附图与说明书一起示出了本披露的示例性实施例、特征和方面,并且用于解释本披露的原理。
图2-1示出根据本披露实施例的神经网络量化方法的流程图。
图2-2示出根据本披露实施例的神经网络量化方法的流程图。
图2-3示出根据本披露实施例的神经网络量化方法的流程图。
图2-4示出根据本披露实施例的神经网络量化方法的流程图。
图2-5示出根据本披露实施例的神经网络量化方法中量化参数不包括偏移量时,量化前后的数据对应示意图。
图2-6示出根据本披露实施例的神经网络量化方法的流程图。
图2-7示出根据本披露实施例的神经网络量化方法中量化参数包括偏移量时,量化前后的数据对应示意图。
图2-8示出根据本披露实施例的神经网络量化方法的流程图。
图2-9示出根据本披露实施例的神经网络量化方法的流程图。
图2-10示出根据本披露实施例的神经网络量化方法的流程图。
图2-11示出根据本披露实施例的神经网络量化方法的流程图。
图2-12示出根据本披露实施例的神经网络量化方法的流程图。
图2-13示出根据本披露实施例的神经网络量化方法的流程图。
图2-14示出根据本披露实施例的神经网络量化方法的流程图。
图2-15示出根据本披露实施例的神经网络量化方法的流程图。
图2-16示出根据本披露实施例的神经网络量化方法的流程图。
图2-17示出根据本披露实施例的神经网络量化方法的流程图。
图2-18示出根据本披露实施例的神经网络量化方法的流程图。
图2-19示出根据本披露实施例的神经网络量化方法的流程图。
图2-20示出根据本披露实施例的神经网络量化方法的流程图。
图2-21示出根据本披露实施例的神经网络量化方法的流程图。
图2-22示出根据本披露实施例的神经网络量化方法的流程图。
图2-23示出根据本披露实施例的神经网络量化方法的流程图。
图2-24示出根据本披露实施例的神经网络量化方法的流程图。
图2-25示出根据本披露实施例的神经网络量化方法的流程图。
图2-26示出根据本披露实施例的神经网络量化装置的示意图。
图2-27示出根据本披露实施例的神经网络量化装置的示意图。
图2-28示出根据本披露实施例的神经网络量化装置的示意图。
图2-29示出根据本披露实施例的神经网络量化装置的示意图。
图2-30示出根据本披露实施例的神经网络量化装置的示意图。
图2-31示出根据本披露实施例的板卡的结构框图。
为了解决神经网络量化的问题,我们提出了如下的方案(201910505239.7)。下面将结合本披露实施例中的附图,对本披露实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本披露一部分实施例,而不是全部的实施例。基于本披露中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本披露保 护的范围。
应当理解,本披露的权利要求、说明书及附图中的术语“第一”、“第二”、“第三”和“第四”等是用于区别不同对象,而不是用于描述特定顺序。本披露的说明书和权利要求书中使用的术语“包括”和“包含”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。
还应当理解,在此本披露说明书中所使用的术语仅仅是出于描述特定实施例的目的,而并不意在限定本披露。如在本披露说明书和权利要求书中所使用的那样,除非上下文清楚地指明其它情况,否则单数形式的“一”、“一个”及“该”意在包括复数形式。还应当进一步理解,在本披露说明书和权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。
在这里专用的词“示例性”意为“用作例子、实施例或说明性”。这里作为“示例性”所说明的任何实施例不必解释为优于或好于其它实施例。
另外,为了更好的说明本披露,在下文的具体实施方式中给出了众多的具体细节。本领域技术人员应当理解,没有某些具体细节,本披露同样可以实施。在一些实例中,对于本领域技术人员熟知的方法、手段、元件和电路未作详细描述,以便于凸显本披露的主旨。
神经网络中待运算数据通常为浮点数据格式或精度较高的定点数据格式,在承载神经网络的芯片中运行神经网络时,浮点数据格式或精度较高的定点数据格式的各种待运算数据,导致神经网络运行的运算量和访存开销都较大。为提高运算效率,可以将神经网络中的待运算数据进行量化,量化后的数据格式通常为位宽较短、精度较低的定点数据格式。利用精度较低的量化后数据执行神经网络的运算,可以降低运算量和访存量。量化后的数据格式可以为位宽较短的定点数据格式。可以将浮点数据格式的待运算数据量化为定点数据格式的待运算数据,也可以将精度较高的定点格式的待运算数据量化为精度较低的定点格式的待运算数据。
可以理解的是,量化精度即量化后数据与量化前数据之间的误差的大小。量化精度可以影响神经网络运算结果的准确度。化精度越高,运算结果的准确率越高,但运算量更大、访存开销也更大。相较于位宽较短的量化后数据,位宽较长的量化后数据的量化精度更高,用于执行神经网络的运算时准确率也更高。但在用于进行神经网络的运算时,位宽较长的量化后数据运算量更大、访存开销也较大,运算效率较低。同理,对于相同的待量化数据,采用不同的量化参数得到的量化后数据有不同的量化精度,将产生不同的量化结果,对运算效率和运算结果的准确率也会带来不同的影响。对神经网络进行量化,在运算效率和运算结果的准确率之间进行平衡,可以采用更加符合待运算数据的数据特征的量化后数据位宽和量化参数。
神经网络中的待运算数据可以包括权值、神经元、偏置、梯度,在传统的对神经网络中的待运算数据进行量化时,通常为整个神经网络设置相同的量化参数。例如,神经网络中包括4个卷积层2个全连接层,待运算数据为神经元(通常为输入神经元),可以为神 经网络设置一套用于量化的量化参数A,并利用量化参数A对4个卷积层和2个全连接层的神经元进行量化。由于神经网络中各层的神经元不同,各层所用的算法也不同,利用相同的量化参数对各层进行量化,量化参数不能适应各层的神经元的特征,导致神经网络的整体量化精度低,运算结果的准确率低。另,如果在为神经网络设置一套量化参数时,因考虑运算结果的准确率、提高量化精度,设置一套位宽较长的量化后位宽,又会降低神经网络的运算效率。因此,传统的神经网络的量化方法,无法在提高量化精度和提高运算效率之间进行有效的平衡。
图2-1示出根据本披露实施例的神经网络量化方法的流程图。该神经网络量化方法可应用于通用处理器(例如中央处理器CPU、图形处理器GPU)和专用处理器(例如人工智能处理器、科学计算处理器或数字信号处理器等)中,本披露对神经网络量化方法所应用的处理器的类型不作限制。
如图2-1所示,对于所述神经网络中的任意一层待量化层,所述神经网络量化方法包括:
步骤S10,确定与所述待量化层中每种待量化数据对应的量化参数,所述待量化数据包括神经元、权值、偏置、梯度中的至少一种。
神经网络中的待量化层可以为神经网络中的任意一层。可以根据需求将神经网络中的部分层或全部层确定为待量化层。当神经网络中包括多个待量化层时,各待量化层可以连续也可以不连续。根据神经网络的不同,待量化层的种类也可以不同,例如待量化层可以为卷积层、全连接层等,本披露对待量化层的数量及类型不做限定。
在一种可能的实现方式中,所述待量化数据包括神经元、权值、偏置、梯度中的至少一种。
用于执行待量化层运算的运算数据可以包括神经元、权值、偏置和梯度。可以根据需求,将待量化层中的神经元、权值、偏置、梯度中的至少一种作为待量化数据。当待量化层中有多种待量化数据时,针对每种待量化数据可以采用本披露中的量化方法进行量化后,得到与每种待量化数据对应的量化数据,再利用各种量化数据和不需要进行量化的运算数据执行待量化层的运算。进一步的,可以根据需求,将待量化层中各种运算数据中的全部数据或部分数据确定为待量化数据,本披露对此不做限定。
神经网络运算的推理阶段可包括:将训练好的神经网络进行前向运算以完成设定任务的阶段。在神经网络的推理阶段,可以将神经元、权值、偏置和梯度中的至少一种作为待量化数据,根据本披露实施例中的方法进行量化后,利用量化后的数据完成待量化层的运算。
神经网络运算的微调阶段可包括:将训练好的神经网络进行预设数量迭代的前向运算和反向运算,进行参数的微调以适应设定任务的阶段。在神经网络运算的微调阶段,可以将神经元、权值、偏置、梯度中的至少一种,根据本披露实施例中的方法进行量化后,利用量化后的数据完成待量化层的前向运算或反向运算。
神经网络运算的训练阶段可包括:将初始化的神经网络进行迭代训练以得到训练好的 神经网络的阶段,训练好的神经网络可执行特定任务。在神经网络的训练阶段,可以将神经元、权值、偏置、梯度中的至少一种,根据本披露实施例中的方法进行量化后,利用量化后的数据完成待量化层的前向运算或反向运算。
待量化层对应的量化参数可以为一个量化参数,也可以为多个量化参数。
量化参数可以包括点位置等用于对待量化数据进行量化的参数。点位置可以用于确定量化后数据中小数点的位置。量化参数还可以包括缩放系数、偏移量等。当神经网络中包括多个待量化层时,各待量化层均可以有对应的量化参数,且各待量化层对应的量化参数可以不同,也可以相同,本披露对此不做限定。
对于待量化层中不同的待量化数据,可以对应不同的量化参数。例如,待量化层1中的神经元可以对应量化参数1,待量化层1中的权值可以对应量化参数2。确定待量化层中与每种待量化数据对应的量化参数的方式,可以包括查找预设的量化参数直接确定量化参数的方式、查找对应关系以确定量化参数的方式,或根据待量化数据计算得到量化参数的方式。例如:
可以为神经网络中的待量化层设定与待量化层中每种待量化数据对应的量化参数。可以将设定好的量化参数存储于设定的存储空间。设定的存储空间可以为片上或片外的存储空间。例如,可以将设定好的量化参数以层标识进行区分并存储于设定的存储空间。各待量化层在进行量化时,可以在设定的存储空间提取对应的量化参数后进行量化。可以根据经验值设定与每种待量化数据对应的量化参数。也可以根据需求更新设定好的与每种待量化数据对应的量化参数,例如可以根据前一层的量化参数更新后一层的量化参数。
可以根据各待量化层中的待量化数据的数据特征或待量化层的层特征,通过查找数据特征与量化参数的对应关系,或查找层特征与量化参数的对应关系,确定量化参数。例如,待量化数据的数据分布为稀疏和稠密时可以分别对应不同的量化参数。可以通过查找对应关系确定与待量化数据的数据分布对应的量化参数。又如,待量化层为卷积层或全连接层时可以分别对应不同的量化参数,当待量化层为卷积层时可以查找与卷积层对应的量化参数。
还可以根据各待量化层中的待量化数据,利用设定的量化参数计算方法,计算得到各待量化层对应的量化参数。例如,可以根据待量化数据的绝对值最大值和预设的数据位宽,利用取整算法计算得到量化参数中的点位置。
步骤S20,将待量化数据根据对应的量化参数进行量化,得到量化数据,以使所述神经网络根据所述量化数据执行运算。
可以利用设定的量化算法,根据量化参数对待量化数据进行量化,得到量化数据。例如,可以利用取整算法作为量化算法,可以根据数据位宽和点位置对待量化数据进行取整量化得到量化数据。其中,取整算法可以包括向上取整、向下取整、向零取整和四舍五入取整等。本披露对量化算法的具体实现方式不做限定。
当神经网络中有多个待量化层时,各待量化层中的每种待量化数据可以分别采用对应的量化参数进行量化。由于与各待量化数据对应的量化参数更为贴合各待量化数据自身特 征,因此各待量化层的每种量化数据的量化精度更加符合本层的运算需求。在保证本层运算结果准确率的前提下,能够提高本层的运算效率,达到本层的运算效率和运算结果准确率之间的平衡。对于神经网络整体,实现各待量化层的运算结果的准确率和运算效率之间的平衡,也就实现了神经网络整体运算结果的准确率和运算效率之间的平衡。
在神经网络的推理、训练和微调过程中,可以对目标数据进行离线量化或在线量化。其中,离线量化可以为利用量化参数对待量化数据进行离线处理。在线量化可以为利用量化参数对待量化数据进行在线处理。例如,神经网络运行在人工智能芯片上,可以将待量化数据和量化参数发送至人工智能芯片之外的运算装置进行离线量化,或利用人工智能芯片之外的运算装置对预先得到的待量化数据和量化参数进行离线量化。而在人工智能芯片运行神经网络的过程中,人工智能芯片可以对待量化数据利用量化参数进行在线量化。在神经网络中包括多个待量化层时,各待量化层可以分别进行在线量化和离线量化。本披露中对各待量化层的量化过程为在线或离线不作限定。
在本实施例中,对于所述神经网络中的任意一层待量化层,确定与所述待量化层中每种待量化数据对应的量化参数,所述待量化数据包括神经元、权值、偏置、梯度中的至少一种;将待量化数据根据对应的量化参数进行量化,得到量化数据,以使所述神经网络根据所述量化数据执行运算。采用更加符合各层待量化数据的量化参数对各待量化层进行量化,可以在保证各层运算结果准确率的前提下,提高各层的运算效率。也可以在保证神经网络整体的运算结果准确率的前提下,提高神经网络整体的运算效率。
在一种可能的实现方式中,所述量化参数包括点位置、缩放系数和偏移量中的至少一种,其中,所述点位置为量化后小数点的位置,所述缩放系数为量化后数据的最大值与待量化数据的最大绝对值之间的比值,所述偏移量为待量化数据的中间值。
在一种可能的实现方式中,量化参数可以包括点位置。可以利用如下的公式(1)对待量化数据进行量化,得到量化数据I
x:
其中,s为点位置,I
x为量化数据,F
x为待量化数据,round为进行四舍五入的取整运算。可以理解的是,也可以采用其他的取整运算方法,例如采用向上取整、向下取整、向零取整等取整运算,替换公式(1)中的四舍五入的取整运算。可以理解的是,在数据位宽一定的情况下,根据点位置量化得到的量化数据中,小数点后的位数越多,量化数据的量化精度越大。
在一种可能的实现方式中,量化参数可以包括缩放系数。可以利用如下的公式(2)对待量化数据进行量化,得到量化数据I
x:
其中,f为缩放系数,I
x为量化数据,F
x为待量化数据,round为进行四舍五入的取整运算。可以理解的是,也可以采用其他的取整运算方法,例如采用向上取整、向下取整、向零取整等取整运算,替换公式(2)中的四舍五入的取整运算。可以理解的是,在数据位宽一定的情况下,采用不同的缩放系数,可以调整量化后数据的数值范围。
在一种可能的实现方式中,量化参数可以包括偏移量。可以利用如下的公式(3)对待量化数据进行量化,得到量化数据I
x:
I
x=round(F
x-o) 公式(3)
其中,o为偏移量,I
x为量化数据,F
x为待量化数据,round为进行四舍五入的取整运算。可以理解的是,也可以采用其他的取整运算方法,例如采用向上取整、向下取整、向零取整等取整运算,替换公式(3)中的四舍五入的取整运算。可以理解的是,在数据位宽一定的情况下,采用不同的偏移量,可以调整量化后数据的数值与量化前数据之间的偏移量。
在一种可能的实现方式中,量化参数可以包括点位置和缩放系数。可以利用如下的公式(4)对待量化数据进行量化,得到量化数据I
x:
其中,s为点位置,f为缩放系数,I
x为量化数据,F
x为待量化数据,round为进行四舍五入的取整运算。可以理解的是,也可以采用其他的取整运算方法,例如采用向上取整、向下取整、向零取整等取整运算,替换公式(4)中的四舍五入的取整运算。
在一种可能的实现方式中,量化参数可以包括点位置和偏移量。可以利用如下的公式(5)对待量化数据进行量化,得到量化数据I
x:
其中,s为点位置,o为偏移量,I
x为量化数据,F
x为待量化数据,round为进行四舍五入的取整运算。可以理解的是,也可以采用其他的取整运算方法,例如采用向上取整、向下取整、向零取整等取整运算,替换公式(5)中的四舍五入的取整运算。
在一种可能的实现方式中,量化参数可以包括点位置、缩放系数和偏移量。可以利用如下的公式(6)对待量化数据进行量化,得到量化数据I
x:
其中,s为点位置,f为缩放系数,o为偏移量,I
x为量化数据,F
x为待量化数据,round为进行四舍五入的取整运算。可以理解的是,也可以采用其他的取整运算方法,例如采用向上取整、向下取整、向零取整等取整运算,替换公式(6)中的四舍五入的取整运算。
在本实施例中,量化参数包括点位置、缩放系数和偏移量中的至少一种。采用不同的量化参数的组合对待量化数据进行量化,可以产生不同精度的量化结果。可以根据需求对量化参数进行灵活组合后按需取用。
图2-2示出根据本披露实施例的神经网络量化方法的流程图。如图2-2所示,所述神经网络量化方法中的步骤S10,包括:
步骤S11,通过查找待量化数据与量化参数对应关系,确定与所述待量化层中每种待量化数据对应的量化参数。
在一种可能的实现方式中,各待量化层中与每种待量化数据对应的量化参数,可以是保存的预设值。可以为神经网络建立一个待量化数据与量化参数之间的对应关系,该对应 关系可以包括各待量化层的每种待量化数据与量化参数对应关系,并将对应关系保存在各层可以共享访问的存储空间。也可以为神经网络建立多个待量化数据与量化参数之间的对应关系,各待量化层分别对应其中一个对应关系。可以将各层的对应关系保存在本层独享的存储空间,也可以将各层的对应关系保存在各层可以共享访问的存储空间。
在待量化数据与量化参数对应关系中,可以包括多个待量化数据和与之对应的多个量化参数之间的对应关系。例如,待量化数据与量化参数对应关系A中,可以包括待量化层1的神经元和权值两个待量化数据,神经元对应点位置1、缩放系数1和偏移量1三个量化参数,权值对应点位置2和偏移量2两个量化参数。本披露对待量化数据与量化参数对应关系的具体格式不做限定。
在本实施例中,可以通过查找待量化数据与量化参数对应关系,确定与所述待量化层中每种待量化数据对应的量化参数。可以为各待量化层预设对应的量化参数,并通过对应关系进行存储后,供待量化层查找后使用。本实施例中量化参数的获取方式简单方便。
图2-3示出根据本披露实施例的神经网络量化方法的流程图。如图2-3所示,所述神经网络量化方法中的步骤S10,包括:
步骤S12,根据每种待量化数据和对应的数据位宽计算得到对应的量化参数。
可以为各待量化数据预设相应的数据位宽n。可以根据数据位宽n和各待量化数据计算得到与各待量化数据对应的量化参数。根据待量化数据自身计算得到的量化参数,更加符合待量化数据自身的特征。
可以在神经网络的推理、训练和微调过程中,待量化数据可以为神经元、权值、偏置中的至少一个。对于训练和微调过程,待量化数据还可以包括梯度。可以在神经网络的推理、训练和微调过程中,根据在线获取到的各待量化数据和与之对应的数据位宽,计算与各待量化数据对应的量化参数。
在本实施例中,根据每种待量化数据和对应的数据位宽计算得到对应的量化参数。根据在线的待量化数据计算得到的量化参数,能够更加符合神经网络待量化层中各种待量化数据自身的量化需求。
图2-4示出根据本披露实施例的神经网络量化方法的流程图。如图2-4所示,所述神经网络量化方法中步骤S12,包括:
步骤S121,当所述量化参数不包括偏移量时,根据目标数据中的绝对值最大值和所述目标数据对应的数据位宽,得到所述目标数据的点位置,所述目标数据为任意一种待量化数据。
在一种可能的实现方式中,量化参数可以包括多个参数,当量化参数不包括偏移量时,量化参数可以包括点位置和缩放系数中的至少一个。当量化参数不包括偏移量时,可以将任一待量化数据作为目标数据。目标数据可以为神经元、权值、偏置和梯度中的任意一种。
目标数据可以包括由多个元素组成的数据。可以在目标数据的各元素中确定最大值和最小值,并根据最大值的绝对值和最小值的绝对值得到目标数据中的绝对值最大值。也可以确定目标数据中各元素的绝对值,并根据各元素的绝对值得到目标数据中的绝对值最大 值。
图2-5示出根据本披露实施例的神经网络量化方法中量化参数不包括偏移量时,量化前后的数据对应示意图。如图2-5所示,Z
1为目标数据中的绝对值最大值,目标数据对应的数据位宽n为8,A为用数据位宽n量化目标数据后可以表示的最大值,A为2
s(2
n-1-1)。A需要包含Z
1,且Z
1要大于
可以用公式(7)对此进行约束:
2
s(2
n-1-1)≥Z
1>2
s-1(2
n-1-1) 公式(7)
可以根据目标数据中的绝对值最大值和数据位宽,计算得到目标数据的点位置。例如,可以利用如下公式(8)计算得到量化参数不包括偏移量时,目标数据的点位置s:
其中,ceil为向上取整,Z
1为目标数据中的绝对值最大值,s为点位置,n为目标数据对应的数据位宽。
在本实施例中,当所述量化参数不包括偏移量时,根据目标数据中的绝对值最大值和所述目标数据对应的数据位宽,得到所述目标数据的点位置。根据目标数据计算得到与之对应的点位置,可以更加符合目标数据自身的特征,使得目标数据的量化精度更高。
图2-6示出根据本披露实施例的神经网络量化方法的流程图。如图2-6所示,所述神经网络量化方法中步骤S12,包括:
步骤S122,当所述量化参数不包括偏移量时,根据目标数据和所述目标数据对应的数据位宽得到所述目标数据量化后数据的最大值,所述目标数据为任意一种待量化数据;
步骤S123,根据目标数据中的绝对值最大值和所述目标数据量化后数据的最大值,得到所述目标数据的缩放系数。
目标数据中的绝对值最大值可参照上述实施例中的相关阐述。
可以利用公式(9)计算得到量化参数不包括偏移量时,目标数据的缩放系数f:
其中,A为量化参数不包括偏移量时,目标数据量化后数据的最大值,可以利用公式(10)计算A:
在本实施例中,当量化参数不包括偏移量时,可以根据目标数据中的绝对值最大值和目标数据对应的数据位宽,计算得到目标数据对应的缩放系数。根据目标数据计算得到与之对应的缩放系数,可以更加符合目标数据自身的特征,使得目标数据的量化精度更高。
图2-7示出根据本披露实施例的神经网络量化方法中量化参数包括偏移量时,量化前后的数据对应示意图。如图2-7所示,A1和A2为用n量化目标数据后可以表示的最大值和最小值,Z
min为目标数据中所有元素的最小值,Z
max为目标数据中所有元素的最大值,
可以将目标数据按照偏移量o进行平移后,再进行量化。
图2-8示出根据本披露实施例的神经网络量化方法的流程图。如图2-8所示,所述神经网络量化方法中步骤S12,包括:
步骤S124,当所述量化参数包括偏移量时,根据所述目标数据中的最大值、所述目标数据中的最小值和所述目标数据对应的数据位宽,得到所述目标数据的点位置,所述目标数据为任意一种待量化数据。
在一种可能的实现方式中,当量化参数包括偏移量时,量化参数还可以包括点位置、缩放系数中的至少一个。如图2-7所示,可以根据公式(11)计算得到量化参数包括偏移量时目标数据的点位置s:
其中,ceil为向上取整,s为点位置,n为目标数据对应的数据位宽。
在本实施例中,当量化参数包括偏移量时,可以根据目标数据中的最大值、最小值和目标数据对应的数据位宽,计算得到目标数据对应的点位置。根据目标数据计算得到与之对应的点位置,可以更加符合目标数据自身的特征,使得目标数据的量化精度更高。
图2-9示出根据本披露实施例的神经网络量化方法的流程图。如图2-9所示,所述神经网络量化方法中步骤S12,包括:
步骤S125,当所述量化参数包括偏移量时,根据目标数据和所述目标数据对应的数据位宽得到所述目标数据量化后数据的最大值,所述目标数据为任意一种待量化数据;
步骤S126,根据所述目标数据中的最大值、所述目标数据中的最小值和所述目标数据量化后数据的最大值,得到所述目标数据的缩放系数。
在一种可能的实现方式中,当量化参数包括偏移量时,量化参数还可以包括点位置、缩放系数中的至少一个。如图2-7所示,可以根据公式(12)计算得到量化参数包括偏移量时目标数据的缩放系数f:
在本实施例中,当量化参数包括偏移量时,可以根据目标数据中的最大值、最小值和目标数据对应的数据位宽,计算得到目标数据对应的缩放系数。根据目标数据计算得到与之对应的缩放系数,可以更加符合目标数据自身的特征,使得目标数据的量化精度更高。
图2-10示出根据本披露实施例的神经网络量化方法的流程图。如图2-10所示,所述神经网络量化方法中步骤S12,包括:
步骤S127,根据目标数据中的最大值和最小值,得到所述目标数据的偏移量,所述目标数据为任意一种待量化数据。
在一种可能的实现方式中,如图2-7所示,可以利用公式(13)计算得到量化参数包括偏移量时目标数据的偏移量o:
在本实施例中,当量化参数包括偏移量时,可以根据目标数据中的最大值、最小值和目标数据对应的数据位宽,计算得到目标数据对应的偏移量。根据目标数据计算得到与之对应的偏移量,可以更加符合目标数据自身的特征,使得目标数据的量化精度更高。
图2-11示出根据本披露实施例的神经网络量化方法的流程图。如图2-11所示,所述 神经网络量化方法还包括:
步骤S30,根据目标数据和所述目标数据对应的量化数据,确定所述目标数据的量化误差,所述目标数据为任意一种待量化数据。
可以根据目标数据对应的量化数据与目标数据之间的误差,确定目标数据的量化误差。可以利用设定的误差计算方法,例如标准差计算方法、均方根误差计算方法等,计算目标数据的量化误差。
也可以根据量化参数,将目标数据对应的量化数据进行反量化后得到反量化数据,根据反量化数据与目标数据之间的误差,确定目标数据的量化误差。
当量化参数包括点位置时,可以根据公式(14)对目标数据的量化数据进行反量化,得到目标数据的反量化数据
其中:round为四舍五入的取整运算,
为目标数据的反量化数据,s为目标数据对应的点位置。
当量化参数包括缩放系数时,可以根据公式(15)对目标数据的量化数据进行反量化,得到目标数据的反量化数据
其中:round为进行四舍五入的取整运算。
为目标数据的反量化数据,f为缩放系数。
当量化参数包括偏移量时,可以根据公式(16)对目标数据的量化数据进行反量化,得到目标数据的反量化数据
其中:round为进行四舍五入的取整运算。
为目标数据的反量化数据,o为缩放系数。
当量化参数包括点位置和缩放系数时,可以根据公式(17)对目标数据的量化数据进行反量化,得到目标数据的反量化数据
当量化参数包括点位置和偏移量时,可以根据公式(18)对目标数据的量化数据进行反量化,得到目标数据的反量化数据
当量化参数包括缩放系数和偏移量时,可以根据公式(19)对目标数据的量化数据进行反量化,得到目标数据的反量化数据
当量化参数包括点位置、缩放系数和偏移量时,可以根据公式(20)对目标数据的量化数据进行反量化,得到目标数据的反量化数据
可以通过计算量化间隔相关的方法,例如可以通过公式(21)计算得到目标数据与目标数据对应的反量化数据之间的误差diff
bit:
其中,p为目标数据中的各元素的数量,s为目标数据的点位置。A的取值可以根据量化参数进行确定,当量化参数包括点位置s时,A=2
s;当量化参数包括点位置s和缩放系数f时,A=2
s×f。
也可以通过计算两个数据的均值之间的差的方法,例如通过公式(22)计算得到目标数据与目标数据对应的反量化数据之间的误差diff
bit:
也可以通过计算两个数据的差之间的均值的方法,例如通过公式(23)计算得到目标数据与目标数据对应的反量化数据之间的误差diff
bit:
步骤S40,根据所述量化误差和误差阈值,调整所述目标数据对应的数据位宽,得到所述目标数据对应的调整位宽。
可以根据经验值确定误差阈值,误差阈值可以用于表示对量化误差的期望值。当量化误差大于或小于误差阈值时,可以调整目标数对应的数据位宽,得到目标数据对应的调整位宽。可以将数据位宽调整为更长的位宽或更短的位宽,以提高或降低量化精度。
可以根据能够接受的最大误差确定误差阈值,当量化误差大于误差阈值时,说明量化精度不能达到预期,需要将数据位宽调整为更长的位宽。也可以根据较高的量化精度确定一个较小的误差阈值,当量化误差小于误差阈值时,说明量化精度较高,神经网络的运行效率将受到影响,可以适当的将数据位宽调整为更短的位宽,以适当的降低量化精度,提高神经网络的运行效率。
可以将数据位宽按照固定的位数步长进行调整,也可以根据量化误差与误差阈值之间的差值的不同,按照可变的调整步长调整数据位宽。本披露对此不做限定。
步骤S50,将所述目标数据对应的数据位宽更新为所述调整位宽,根据所述目标数据和所述调整位宽计算得到对应的调整量化参数,以使所述神经网络根据所述调整量化参数进行量化。
确定调整位宽后,可以将目标数据对应的数据位宽更新为调整位宽。例如,目标数据更新前的数据位宽为8位,调整位宽为12位,则更新后目标数据对应的数据位宽为12位。可以根据调整位宽和目标数据计算得到目标数据对应的调整量化参数。可以根据目标数据对应的调整量化参数重新对目标数据进行量化,以得到量化精度更高或更低的量化数据,使得待量化层在量化精度和处理效率之间达到平衡。
在神经网络的推理、训练和微调过程中,各层之间的待量化数据可以认为具有一定的关联性。例如,各层的待量化数据之间的均值之间的差小于设定的均值阈值,且各层的待 量化数据之间的最大值之间的差值也小于设定的差值阈值时,可以将待量化层的调整量化参数作为后续的一个或多个层的调整量化参数,用于对待量化层后续的一个或多个层的待量化数据进行量化。也可以在神经网络的训练和微调过程中,将待量化层在当前迭代得到的调整量化参数,用于在后续的迭代中对待量化层进行量化。
在一种可能的实现方式中,所述方法还包括:
在所述待量化层之后的一层或多层采用所述待量化层的量化参数。
神经网络根据调整量化参数进行量化,可以包括只在待量化层利用调整量化参数对待量化数据重新进行量化,并将重新得到的量化数据用于待量化层的运算。也可以包括在待量化层不使用调整量化参数重新对待量化数据进行量化,而在待量化层后续的一个或多个层使用调整量化参数进行量化,和/或后续的迭代中在待量化层使用调整量化参数进行量化。还可以包括在待量化层使用调整量化参数重新进行量化,并将重新得到的量化数据用于待量化层的运算,并且在待量化层后续的一个或多个层使用调整量化参数进行量化,和/或后续的迭代中在待量化层使用调整量化参数进行量化。本披露对此不作限定。
在本实施例中,根据目标数据和目标数据对应的量化数据,确定目标数据的量化误差,目标数据为任意一种待量化数据;所述量化误差和误差阈值,调整目标数据对应的数据位宽,得到目标数据对应的调整位宽;将目标数据对应的数据位宽更新为调整位宽,根据目标数据和调整位宽计算得到对应的调整量化参数,以使神经网络根据调整量化参数进行量化。根据目标数据和量化数据之间的误差调整数据位宽,并根据调整后的数据位宽计算得到调整量化参数。通过设置不同的误差阈值可以得到不同的调整量化参数,达到提高量化精度或提高运行效率等不同的量化需求。根据目标数据和目标数据的量化数据计算得到的调整量化参数,也能够更加符合目标数据自身的数据特征,达到更加符合目标数据自身需求的量化结果,在量化精度和处理效率之间达到更好的平衡。
图2-12示出根据本披露实施例的神经网络量化方法的流程图。如图2-12所示,所述神经网络量化方法中步骤S40,包括:
步骤S41,当所述量化误差大于所述第一误差阈值时,增加所述目标数据对应的数据位宽,得到所述目标数据对应的调整位宽。
可以根据能够接受的最大的量化误差,确定第一误差阈值。可以将量化误差与第一误差阈值进行比较。当量化误差大于第一误差阈值时,可以认为量化误差已经不可接受。需要提高量化精度,可以通过增加目标数据对应的数据位宽的方式,提高目标数据的量化精度。
可以将目标数据对应的数据位宽按照固定的调整步长增加,得到调整位宽。固定的调整步长可以为N位,N为正整数。每次调整数据位宽可以增加N位。每次增加后的数据位宽=原数据位宽+N位。
可以将目标数据对应的数据位宽按照可变的调整步长增加,得到调整位宽。例如,当量化误差与误差阈值之间的差值大于第一阈值时,可以按照调整步长M1调整数据位宽,当量化误差与误差阈值之间的差值小于第一阈值时,可以按照调整步长M2调整数据位宽, 其中,第一阈值大于第二阈值,M1大于M2。可以根据需求确定各可变的调整步长。本披露对数据位宽的调整步长及调整步长是否可变不做限定。
可以将目标数据按照调整位宽计算得到调整后的量化参数。利用调整后的量化参数对目标数据进行重新量化后得到的量化数据,比利用调整前的量化参数量化得到的量化数据的量化精度更高。
图2-13示出根据本披露实施例的神经网络量化方法的流程图。如图2-13所示,所述神经网络量化方法还包括:
步骤S42,根据所述调整位宽和所述目标数据计算所述目标数据调整后的量化误差;
步骤S43,根据所述调整后的量化误差和所述第一误差阈值继续增加所述调整位宽,直至根据调整位宽和所述目标数据计算得到的调整后的量化误差小于或等于所述第一误差阈值。
根据量化误差增加目标数据对应的数据位宽时,调整一次位宽后得到调整位宽,根据调整位宽计算得到调整后的量化参数,根据调整后的量化参数量化目标数据得到调整后的量化数据,再根据调整后的量化数据与目标数据计算得到目标数据调整后的量化误差,调整后的量化误差可能依然大于第一误差阈值,即根据调整一次的数据位宽可能不能满足调整目的。当调整后的量化误差依然大于第一误差阈值时,可以继续对调整后的数据位宽进行调整,即多次增加目标数据对应的数据位宽,直至根据最终得到的调整位宽和目标数据得到的调整后的量化误差小于第一误差阈值。
多次增加的调整步长可以是固定的调整步长,也可以是可变的调整步长。例如,最终的数据位宽=原数据位宽+A*N位,其中N为每次增加的固定的调整步长,A为数据位宽的增加次数。最终的数据位宽=原数据位宽+M1+M2+…+Mm,其中,M1、M2…Mm为每次增加的可变的调整步长。
在本实施例中,当量化误差大于第一误差阈值时,增加所述目标数据对应的数据位宽,得到所述目标数据对应的调整位宽。可以通过设置第一误差阈值和调整步长增加数据位宽,以使调整后的数据位宽能够满足量化的需求。当一次调整不能满足调整需求时,还可以对数据位宽进行多次调整。第一误差阈值和调整步长的设置,使得量化参数可以按照量化需求进行灵活调整,满足不同的量化需求,使得量化精度可根据自身数据特征进行自适应调整。
图2-14示出根据本披露实施例的神经网络量化方法的流程图。如图2-14所示,所述神经网络量化方法中步骤S40,包括:
步骤S44,当所述量化误差小于所述第二误差阈值时,减少所述目标数据对应的数据位宽,所述第二误差阈值小于所述第一误差阈值。
可以根据能够接受的量化误差和期望的神经网络的运行效率,确定第二误差阈值。可以将量化误差与第二误差阈值进行比较。当量化误差小于第二误差阈值时,可以认为量化误差超出预期,但运行效率过低已经不可接受。可以降低量化精度以提高神经网络的运行效率,可以通过减少目标数据对应的数据位宽的方式,降低目标数据的量化精度。
可以将目标数据对应的数据位宽按照固定的调整步长减少,得到调整位宽。固定的调整步长可以为N位,N为正整数。每次调整数据位宽可以减少N位。增加后的数据位宽=原数据位宽-N位。
可以将目标数据对应的数据位宽按照可变的调整步长减少,得到调整位宽。例如,当量化误差与误差阈值之间的差值大于第一阈值时,可以按照调整步长M1调整数据位宽,当量化误差与误差阈值之间的差值小于第一阈值时,可以按照调整步长M2调整数据位宽,其中,第一阈值大于第二阈值,M1大于M2。可以根据需求确定各可变的调整步长。本披露对数据位宽的调整步长及调整步长是否可变不做限定。
可以将目标数据按照调整位宽计算得到调整后的量化参数,利用调整后的量化参数对目标数据进行重新量化后得到的量化数据,比利用调整前的量化参数量化得到的量化数据的量化精度更低。
图2-15示出根据本披露实施例的神经网络量化方法的流程图。如图2-15所示,所述神经网络量化方法还包括:
步骤S45,根据所述调整位宽和所述目标数据计算所述目标数据调整后的量化误差;
步骤S46,根据所述调整后的量化误差和所述第二误差阈值继续减少所述调整位宽,直至根据调整位宽和所述目标数据计算得到的调整后的量化误差大于或等于所述第二误差阈值。
根据量化误差增加目标数据对应的数据位宽时,调整一次位宽后得到调整位宽,根据调整位宽计算得到调整后的量化参数,根据调整后的量化参数量化目标数据得到调整后的量化数据,再根据调整后的量化数据与目标数据计算得到目标数据调整后的量化误差,调整后的量化误差可能依然小于第二误差阈值,即根据调整一次的数据位宽可能不能满足调整目的。当调整后的量化误差依然小于第二误差阈值时,可以继续对调整后的数据位宽进行调整,即多次减少目标数据对应的数据位宽,直至根据最终得到的调整位宽和目标数据得到的调整后的量化误差大于第二误差阈值。
多次减少的调整步长可以是固定的调整步长,也可以是可变的调整步长。例如,最终的数据位宽=原数据位宽-A*N位,其中N为每次增加的固定的调整步长,A为数据位宽的增加次数。最终的数据位宽=原数据位宽-M1-M2-…-Mm,其中,M1、M2…Mm为每次减少的可变的调整步长。
在本实施例中,当量化误差小于第二误差阈值时,减少所述目标数据对应的数据位宽,得到所述目标数据对应的调整位宽。可以通过设置第二误差阈值和调整步长减少数据位宽,以使调整后的数据位宽能够满足量化的需求。当一次调整不能满足调整需求时,还可以对数据位宽进行多次调整。第二误差阈值和调整步长的设置,使得量化参数可以按照量化需求进行灵活的自适应调整,满足不同的量化需求,使得量化精度可调,在量化精度和神经网络的运行效率之间达到平衡。
在一种可能的实现方式中,所述方法还包括:
当所述量化误差大于第一误差阈值时,增加所述目标数据对应的数据位宽,以及当所 述量化误差小于第二误差阈值时,减少所述目标数据对应的数据位宽,得到所述目标数据对应的调整位宽。
也可以同时设置两个误差阈值,其中,第一误差阈值用于表示量化精度过低,可以增加数据位宽的位数,第二误差阈值用于表示量化精度过高,可以减少数据位宽的位数。第一误差阈值大于第二误差阈值,可以将目标数据的量化误差同时与两个误差阈值进行比较,当量化误差大于第一误差阈值时,增加数据位宽的位数,当量化误差小于第二误差阈值时,减少数据位宽的位数。当量化误差位于第一误差阈值和第二误差阈值之间时,数据位宽可以保持不变。
在本实施例中,通过将量化误差与第一误差阈值和第二误差阈值同时进行比较,可以根据比较结果增加或减少数据位宽,可以利用第一误差阈值和第二误差阈值更加灵活的调整数据位宽。使得数据位宽的调整结果更加符合量化需求。
图2-16示出根据本披露实施例的神经网络量化方法的流程图。如图2-16所示,在所述神经网络运算的微调阶段和/或训练阶段,所述方法还包括:
步骤S60,获取当前迭代以及历史迭代中目标数据的数据变动幅度,所述历史迭代为所述当前迭代之前的迭代。
在神经网络运算的微调阶段和/或训练阶段包括多个迭代。神经网络中的各待量化层,在进行一次正向运算和一次反向运算,并对待量化层的权值进行更新后,完成一次迭代。在多次迭代中,待量化层中的目标数据和/或目标数据对应的量化数据的数据变动幅度,可以用于衡量在不同迭代中的目标数据和/或量化数据是否可采用相同的量化参数进行量化。若当前迭代以及历史迭代中目标数据的数据变动幅度较小,例如小于设定的幅度变动阈值时,可以在数据变动幅度较小的多个迭代中采用相同的量化参数。
可以通过提取预存的量化参数的方式,确定与目标数据对应的量化参数。在不同的迭代中对目标数据进行量化时,需要在各迭代提取与目标数据对应的量化参数。若多个迭代的目标数据和/或目标数据对应的量化数据的数据变动幅度较小,可将在数据变动幅度较小的多个迭代中采用的相同的量化参数进行暂存,各迭代在进行量化时可以利用暂存的量化参数进行量化运算,不用在每次迭代提取量化参数。
也可以根据目标数据和数据位宽计算得到量化参数。在不同的迭代中对目标数据进行量化时,需要在各迭代分别计算量化参数。若多个迭代的目标数据和/或目标数据对应的量化数据的数据变动幅度较小,可在数据变动幅度较小的多个迭代中采用的相同的量化参数,则各迭代均可以直接使用其中第一个迭代计算得到的量化参数,而不是每次迭代计算量化参数。
可以理解的是,当目标数据为权值时,各迭代之间的权值在不断更新,若多个迭代的权值的数据变动幅度较小,或多个迭代的权值对应的量化数据的数据变动幅度较小,可以在多个迭代中利用相同的量化参数对权值进行量化。
步骤S70,根据所述目标数据的数据变动幅度,确定所述目标数据对应的目标迭代间隔,以使所述神经网络根据所述目标迭代间隔更新所述目标数据的量化参数,所述目标迭 代间隔包括至少一次迭代,所述目标数据为任意一种待量化数据。
可以根据目标数据的数据变动幅度确定目标迭代间隔,目标迭代间隔包括至少一次迭代,可以在目标迭代间隔内的各迭代使用相同的量化参数,即在目标迭代间隔内的各迭代不再更新目标数据的量化参数。神经网络根据目标迭代间隔更新目标数据的量化参数,包括在目标迭代间隔内的迭代,不获取预设的量化参数或不计算量化参数,即在目标迭代间隔内的迭代不更新量化参数。而在目标迭代间隔外的迭代,再获取预设的量化参数或计算量化参数,即在目标迭代间隔外的迭代更新量化参数。
可以理解的是,多个迭代之间的目标数据或目标数据的量化数据的数据变动幅度越小,确定出的目标迭代间隔包括的迭代次数越多。可以根据计算得到的数据变动幅度,查找预设的数据变动幅度与迭代间隔的对应关系,确定与计算得到的数据变动幅度对应的目标迭代间隔。可以根据需求预设数据变动幅度与迭代间隔的对应关系。也可以根据计算得到的数据变动幅度,利用设定的计算方法计算得到目标迭代间隔。本披露不限定数据变动幅度的计算方式,以及目标迭代间隔的获取方式。
在本实施例中,在神经网络运算的微调阶段和/或训练阶段,获取当前迭代以及历史迭代中目标数据的数据变动幅度,根据所述目标数据的数据变动幅度,确定目标数据对应的目标迭代间隔,以使所述神经网络根据所述目标迭代间隔更新所述目标数据的量化参数。可以根据多个迭代中目标数据或目标数据对应的量化数据的数据变动幅度,确定目标迭代间隔。神经网络可以根据目标迭代间隔确定是否更新量化参数。由于目标迭代间隔所包括的多个迭代的数据变动幅度较小,目标迭代间隔内的迭代不更新量化参数也可以保证量化精度。而目标迭代间隔内的多个迭代不更新量化参数,可以减少量化参数的提取次数或计算次数,从而提高神经网络的运算效率。
图2-17示出根据本披露实施例的神经网络量化方法的流程图。如图2-17所示,所述神经网络量化方法还包括:
步骤S80,根据所述目标数据在所述当前迭代的数据位宽,确定所述目标数据在所述目标迭代间隔内的迭代对应的数据位宽,以使所述神经网络根据所述目标数据在所述目标迭代间隔内的迭代对应的数据位宽,确定量化参数。
如本披露上述实施例所述,目标数据的量化参数可以预设,也可以根据目标数据对应的数据位宽计算得到。而不同待量化层中目标数据对应的数据位宽,或相同待量化层中目标数据在不同迭代中对应的数据位宽,可以根据本披露上述实施例中的方式进行自适应调整。
当目标数据的数据位宽不可自适应调整,为预设的数据位宽时,可以根据目标数据在当前迭代的预设的数据位宽,确定目标数据在目标迭代间隔内的迭代对应的数据位宽。在目标迭代间隔内的各迭代可不使用自身的预设值。
当目标数据的数据位宽可自适应调整时,可以根据目标数据在当前迭代对应的数据位宽,确定目标数据在目标迭代间隔内的迭代对应的数据位宽。在数据位宽可自适应调整时,数据位宽可进行一次调整或多次调整。可以将目标数据在当前迭代进行自适应调整后的数 据位宽,作为目标迭代间隔内的各迭代对应的数据位宽,在目标迭代间隔内的各迭代不再对数据位宽进行自适应调整(更新)。目标数据在当前迭代可以使用自适应调整后的数据位宽,也可以使用自适应调整前的数据位宽,本披露对此不作限定。
在目标迭代间隔以外的其他迭代,由于目标数据的数据变动幅度不满足设定条件,可以根据本披露上述的方法对数据位宽进行自适应调整,得到更加符合当前迭代的目标数据的数据位宽,也可使用本披露中的目标迭代间隔的计算方法,计算得到新的目标迭代间隔并使用,从而在保证目标迭代间隔以外的迭代的量化精度的同时,提高神经网络的运行效率。
在目标迭代间隔内的各迭代的数据位宽相同,各迭代可以根据相同的数据位宽各自计算得到对应的量化参数。量化参数可以包括点位置、缩放系数和偏移量中的至少一种。可以在目标迭代间隔内的各迭代,根据相同的数据位宽分别计算得到量化参数。量化参数包括点位置、缩放系数和偏移量时,在目标迭代间隔内的各迭代,可利用相同的数据位宽,分别计算各自对应的点位置、缩放系数和偏移量。
在根据当前迭代的数据位宽,确定目标迭代间隔内各迭代的数据位宽的同时,可以根据当前迭代的量化参数,确定目标迭代间隔内各迭代的对应的量化参数。目标迭代间隔内各迭代的量化参数,也不再重新根据相同的数据位宽计算得到,可以进一步提高神经网络的运算效率。可以根据当前迭代的全部量化参数或部分量化参数,确定目标迭代间隔内各迭代的对应的量化参数。当根据当前迭代的部分量化参数,确定目标迭代间隔内各迭代的对应的量化参数时,剩余部分的量化参数,在目标迭代间隔内各迭代仍需计算。
例如,量化参数包括点位置、缩放系数和偏移量。可以根据当前迭代的数据位宽和点位置,确定目标迭代间隔内各迭代的数据位宽和点位置。则目标迭代间隔内各迭代的缩放系数和偏移量需要根据相同的数据位宽计算得到。也可以根据当前迭代的数据位宽、点位置、缩放系数和偏移量,确定目标迭代间隔内各迭代的数据位宽、点位置、缩放系数和偏移量,则目标迭代间隔内各迭代的各量化参数均不需要计算得到。
在本实施例中,根据目标数据在当前迭代对应的数据位宽,确定目标数据在目标迭代间隔内的迭代对应的数据位宽,以使神经网络根据目标数据在目标迭代间隔内的迭代对应的数据位宽,确定量化参数。在目标迭代间隔内的各迭代的数据位宽,根据当前迭代的数据位宽确定,由于目标迭代间隔内各迭代的目标数据的数据变化幅度满足设定的条件,利用相同的数据位宽计算得到的量化参数,可以保证目标迭代间隔内的各迭代的量化精度。目标迭代间隔内各迭代使用相同的数据位宽,也可以提高神经网络的运算效率。在对神经网络进行量化后运算结果的准确率和神经网络的运算效率之间,达到平衡。
图2-18示出根据本披露实施例的神经网络量化方法的流程图。如图2-18所示,所述神经网络量化方法还包括:
步骤S90,根据所述目标数据在所述当前迭代对应的点位置,确定所述目标数据在所述目标迭代间隔内的迭代对应的点位置。
在量化参数中,相对于缩放系数和偏移量,不同的点位置对相同目标数据的量化结果 产生的影响较大。可以根据目标数据在当前迭代对应的点位置,确定目标迭代间隔内的迭代对应的点位置。当数据位宽不可自适应调整时,可以将目标数据在当前迭代预设的点位置,作为目标数据在目标迭代间隔内各迭代对应的点位置,也可以将目标数据在当前迭代根据预设的数据位宽计算得到的点位置,作为目标数据在目标迭代间隔内各迭代对应的点位置。当数据位宽可自适应调整时,可以将目标数据在当前迭代调整后的点位置,作为目标数据在目标迭代间隔内各迭代对应的点位置。
根据所述目标数据在所述当前迭代对应的点位置,确定所述目标数据在所述目标迭代间隔内的迭代对应的点位置的同时,也可以根据目标数据在当前迭代对应的缩放系数,确定所述目标数据在所述目标迭代间隔内的迭代对应的缩放系数,和/或根据目标数据在当前迭代对应的偏移量,确定所述目标数据在所述目标迭代间隔内的迭代对应的偏移量。
根据所述目标数据在所述当前迭代对应的点位置,确定所述目标数据在所述目标迭代间隔内的迭代对应的点位置的同时,还可以根据目标数据在当前迭代对应的数据位宽,确定所述目标数据在所述目标迭代间隔内的迭代对应的数据位宽,其中,目标数据在当前迭代对应的数据位宽,可以是当前迭代预设的数据位宽或自适应调整后的数据位宽。
在本实施例中,根据目标数据在当前迭代对应的点位置,确定目标数据在目标迭代间隔内的迭代对应的点位置。在目标迭代间隔内的各迭代的点位置,根据当前迭代的点位置确定,由于目标迭代间隔内各迭代的目标数据的数据变化幅度满足设定的条件,利用相同的点位置,可以保证目标迭代间隔内的各迭代的量化精度。目标迭代间隔内各迭代使用相同的点位置,也可以提高神经网络的运算效率。在对神经网络进行量化后运算结果的准确率和神经网络的运算效率之间,达到平衡。
图2-19示出根据本披露实施例的神经网络量化方法的流程图。如图2-19所示,所述神经网络量化方法中步骤S60,包括:
步骤S61,根据目标数据在当前迭代的点位置,和根据历史迭代间隔确定的与所述当前迭代对应的历史迭代的点位置,计算目标数据对应各迭代间隔的点位置的滑动平均值;
步骤S62,根据所述目标数据在当前迭代的点位置的第一滑动平均值,以及在上一迭代间隔对应迭代的点位置的第二滑动平均值,得到第一数据变动幅度;
所述步骤S70,包括:
步骤S71,根据所述第一数据变动幅度,确定所述目标数据对应的目标迭代间隔,以使所述神经网络根据所述目标迭代间隔更新所述目标数据的量化参数。
在一种可能的实现方式中,根据历史迭代间隔确定的与所述当前迭代对应的历史迭代,可以为计算目标迭代间隔的历史迭代。当前迭代与对应的目标迭代间隔之间的对应关系可以包括:
可以从当前迭代开始计数目标迭代间隔,并在当前迭代对应的目标迭代间隔结束后的下一个迭代开始重新计算目标迭代间隔。例如,当前迭代为第100代,目标迭代间隔为3,目标迭代间隔内的迭代包括:第100代、第101代和第102代,可以在第103代计算与第103代对应的目标迭代间隔,并以103代为新计算得到当目标迭代间隔内的第一个迭代。 此时,当前迭代为103代时,根据历史迭代间隔确定的与所述当前迭代对应的历史迭代为100代。
可以从当前迭代的下一个迭代开始计数目标迭代间隔,并在目标迭代间隔内的最后一个迭代开始重新计算目标迭代间隔。例如,当前迭代为第100代,目标迭代间隔为3,目标迭代间隔内的迭代包括:第101代、第102代和第103代,可以在第103代计算与第103代对应的目标迭代间隔,并以104代为新计算得到当目标迭代间隔内的第一个迭代。此时,当前迭代为103代时,根据历史迭代间隔确定的与所述当前迭代对应的历史迭代为100代。
可以从当前迭代的下一个迭代开始计数目标迭代间隔,并在目标迭代间隔结束后的下一个迭代开始重新计算目标迭代间隔。例如,当前迭代为第100代,目标迭代间隔为3,目标迭代间隔内的迭代包括:第101代、第102代和第103代,可以在第104代计算与第104代对应的目标迭代间隔,并以105代为新计算得到当目标迭代间隔内的第一个迭代。此时,当前迭代为104代时,根据历史迭代间隔确定的与所述当前迭代对应的历史迭代为100代。
可以根据需求确定当前迭代以及目标迭代间隔之间的其他的对应关系,例如可以从当前迭代之后的第N个迭代开始计数目标迭代间隔,N大于1,本披露对此不作限定。
可以理解的是,计算得到的目标数据对应各迭代间隔的点位置的滑动平均值,包括目标数据在当前迭代的点位置的第一滑动平均值,和目标数据在上一迭代间隔对应迭代的点位置的第二滑动平均值。可以利用公式(24)计算当前迭代对应点位置的第一滑动平均值m
(t):
m
(t)←α×s
(t)+(1-α)×m
(t-1) 公式(24)
其中,t为当前迭代,t-1为根据上一迭代间隔确定的历史迭代,m
(t-1)为根据上一迭代间隔确定的历史迭代的第二滑动平均值,s
(t)为当前迭代的点位置,α为第一参数。第一参数可以为超参数。
在本实施例中,根据目标数据在当前迭代的点位置,和根据历史迭代间隔确定的与所述当前迭代对应的历史迭代的点位置,计算目标数据对应各迭代间隔的点位置的滑动平均值;根据目标数据在当前迭代的点位置的第一滑动平均值,以及在上一迭代间隔对应迭代的点位置的第二滑动平均值,得到第一数据变动幅度。根据第一数据变动幅度,确定所述目标数据对应的目标迭代间隔,以使所述神经网络根据所述目标迭代间隔更新所述目标数据的量化参数。由于第一数据变动幅度可以用于衡量点位置的变化趋势,使得目标迭代间隔可以跟随目标数据点位置的变化趋势而变化,也使得计算得到的各目标迭代间隔的大小可以根据目标数据点位置的变化趋势而变化。由于量化参数根据目标迭代间隔确定,也就使得根据量化参数进行量化得到的量化数据,能够更加符合目标数据的点位置的变动趋势,在保证量化精度的同时,提高神经网络的运行效率。
图2-20示出根据本披露实施例的神经网络量化方法的流程图。如图2-20所示,所示神经网络量化方法中步骤S62包括:
步骤S621,计算所述第一滑动平均值和所述第二滑动平均值的差值;
步骤S622,将所述差值的绝对值确定为第一数据变动幅度。
可以利用公式(25)计算第一数据变动幅度diff
update1:
diff
update1=|m
(t)-m
(t-1)|=α|s
(t)-m
(t-1)| 公式(25)
可以根据第一数据变动幅度,确定目标数据对应的目标迭代间隔,以使神经网络根据目标迭代间隔更新所述目标数据的量化参数。可以根据公式(26)计算得到目标迭代间隔I:
其中,β为第二参数,γ为第三参数。第二参数和第三参数可以为超参数。
可以理解的是,第一数据变动幅度可以用于衡量点位置的变化趋势,第一数据变动幅度越大,说明量化数据的数值范围变化剧烈,在更新量化参数时需要间隔更短的目标迭代间隔I。
在本实施例中,计算所述第一滑动平均值和所述第二滑动平均值的差值;将差值的绝对值确定为第一数据变动幅度。根据滑动平均值之间的差值可以得到精确的第一数据变动幅度。
图2-21示出根据本披露实施例的神经网络量化方法的流程图。如图2-21所示,所述神经网络量化方法还包括:
步骤S63,根据在当前迭代所述目标数据和所述目标数据对应的量化数据,得到第二数据变动幅度;
所述步骤S70,包括:
步骤S72,根据所述目标数据的第一数据变动幅度和所述第二数据变动幅度,确定所述目标数据对应的目标迭代间隔,以使所述神经网络根据所述目标迭代间隔更新所述目标数据的量化参数。
可以根据在当前迭代所述目标数据和所述目标数据对应的量化数据,得到第二数据变动幅度。也可以根据在当前迭代所述目标数据和所述目标数据对应的反量化数据,得到第二数据变动幅度。
同样的,可以根据公式(23)计算得到在当前迭代中,所述目标数据和所述目标数据对应的反量化数据之间的第二数据变动幅度diff
bit。也可以利用其它误差的计算方法,计算目标数据和反量化数据之间的第二数据变动幅度diff
bit。本披露对此不作限定。
其中,z
i为目标数据,z
i
(n)为目标数据对应的反量化数据。可以理解的是,第二数据变动幅度可以用于衡量目标数据对应的数据位宽的变化趋势,第二数据变动幅度越大,目标数据越有可能需要更新对应的数据位宽,需要间隔更短的迭代进行更新,则第二数据变动幅度越大,需要目标迭代间隔更小。
在本实施例中,根据在当前迭代所述目标数据和所述目标数据对应的量化数据,得到第二数据变动幅度。根据所述目标数据的第一数据变动幅度和所述第二数据变动幅度,确定所述目标数据对应的目标迭代间隔,以使所述神经网络根据所述目标迭代间隔更新所述目标数据的量化参数。第二数据变动幅度可以用于衡量数据位宽的变动需求,则根据第一数据变动幅度和第二数据变动幅度计算得到的目标迭代间隔,可以同时跟踪点位置和数据位宽的变动,目标迭代间隔也可以更加符合目标数据自身的数据量化需求。
图2-22示出根据本披露实施例的神经网络量化方法的流程图。如图2-22所示,所述神经网络量化方法中步骤S63,包括:
步骤S631,计算在当前迭代所述目标数据和所述目标数据对应的量化数据之间的误差;
步骤S632,将所述误差的平方确定为所述第二数据变动幅度。
可以利用公式(27)计算得到第二数据变动幅度diff
update2:
diff
update2=δ*diff
bit
2 公式(27)
其中,δ为第四参数,第四参数可以为超参数。
可以理解的是,利用不同的数据位宽可以得到不同的量化参数,进而得到不同的量化数据,产生不同的第二数据变动幅度。第二数据变动幅度可以用于衡量数据位宽的变化趋势,第二数据变动幅度越大,说明需要更短的目标迭代间隔来更加频繁的更新数据位宽,即目标迭代间隔需要更小。
图2-23示出根据本披露实施例的神经网络量化方法的流程图。如图2-23所示,所述步骤S72,包括:
步骤S721,根据所述第一数据变动幅度和所述第二数据变动幅度中的最大值,确定所述目标数据对应的目标迭代间隔。
可以根据公式(28)计算得到目标迭代间隔:
其中,β为第二参数,γ为第三参数。第二参数和第三参数可以为超参数。
可以理解的是,利用第一数据变动幅度和第二数据变动幅度得到的目标迭代间隔,可以同时衡量数据位宽和点位置的变化趋势,当两者中的其一的变化趋势较大时,便可以使得目标迭代间隔产生相应的变化。目标迭代间隔可以同时追踪数据位宽和点位置的变化并做出相应的调整。使得根据目标迭代间隔更新的量化参数能够更加符合目标数据的变动趋势,最终使得根据量化参数得到的量化数据能够更加符合量化需求。
图2-24示出根据本披露实施例的神经网络量化方法的流程图。如图2-24所示,所述神经网络量化方法中步骤S60,包括:
步骤S64,在当前迭代位于更新周期以外时,获取当前迭代以及历史迭代中目标数据的数据变动幅度,所述更新周期包括至少一个迭代。
在神经网络运算的训练过程和/或微调过程中,在训练开始或微调开始的多个迭代中,目标数据的变化幅度较大。若在训练开始或微调开始的多个迭代中计算目标迭代间隔,则计算得到的目标迭代间隔可能会失去其使用的意义。可以根据预设更新周期,在更新周期 以内的各迭代,不计算目标迭代间隔,也不适用目标迭代间隔使得多个迭代使用相同的数据位宽或点位置。
当迭代进行至更新周期以外时,即当前迭代位于更新周期以外时,获取当前迭代以及历史迭代中目标数据的数据变动幅度,并根据所述目标数据的数据变动幅度,确定所述目标数据对应的目标迭代间隔,以使所述神经网络根据所述目标迭代间隔更新所述目标数据的量化参数。例如,预设更新周期为100代,则自第1代开始至第100代的迭代中,不计算目标迭代间隔。当迭代进行至101代,即当前迭代为101代时,当前迭代位于更新周期以外,此时,可以根据第101代以及第1代至第100代的迭代中目标数据的数据变动幅度,确定第101代的目标数据对应的目标迭代间隔,并在第101代或与第101间隔预设代数的迭代中,使用计算得到的目标迭代间隔。
可以自预设的代数开始计数更新周期,例如可以自第一代开始计数更新周期中多个迭代,也可以自第N代开始计数更新周期中的多个迭代,本披露对此不作限定。
在本实施例中,当迭代进行至更新周期以外时计算并使用目标迭代间隔。可以避免在神经网络运算的训练过程或微调过程的初期,由于目标数据的变动幅度较大引起的目标迭代间隔使用意义不大的问题,可以在使用目标迭代间隔的情况下,进一步提高神经网络的运行效率。
图2-25示出根据本披露实施例的神经网络量化方法的流程图。如图2-25所示,所述神经网络量化方法还包括:
步骤S100,在当前迭代位于预设周期内时,根据当前迭代、在所述预设周期的下一周期中与所述当前迭代对应的迭代以及当前迭代对应的迭代间隔,确定周期间隔;
步骤S110,根据所述目标数据在当前迭代对应的数据位宽,确定在所述周期间隔内的迭代中所述目标数据的数据位宽;或
根据所述目标数据在当前迭代对应的点位置,确定在所述周期间隔内的迭代中所述目标数据的点位置。
在神经网络运算的训练过程或微调过程中,可以包括多个周期。各周期可以包括多个迭代。用于神经网络运算的数据被完整的运算一遍为一个周期。在训练过程中,随着迭代的进行,神经网络的权值变化趋于稳定,当训练稳定后,神经元、权值、偏置和梯度等待量化数据均趋于稳定。目标数据趋于稳定后,目标数据的数据位宽和量化参数也趋于稳定。同理,在微调过程中,微调稳定后,目标数据的数据位宽和量化参数也趋于稳定。
因此,可以根据训练稳定或微调稳定的周期确定预设周期。可以将训练稳定或微调稳定所在周期以后的周期,确定为预设周期。例如训练稳定的周期为第M个周期,则可以将第M个周期以后的周期作为预设周期。在预设周期内,可以每间隔一个周期计算一个目标迭代间隔,并根据计算得到的目标迭代间隔调整一次数据位宽或量化参数,以减少数据位宽或量化参数的更新次数,提高神经网络的运行效率。
例如,预设周期为第M个周期以后的周期。在第M+1个周期中,根据第M个周期中的第P个迭代计算得到的目标迭代间隔,截止至第M+1个周期中的第Q个迭代。根据第 M+1个周期中的第Q
m+1个迭代计算得到与之对应的目标迭代间隔I
m+1。在第M+2个周期中,与第M+1个周期中的第Q
m+1个迭代对应的迭代为第Q
m+2个迭代。在自第M+1个周期中的第Q
m+1个迭代开始,直至第M+2个周期中第Q
m+2+I
m+1个迭代为止,为周期间隔。在周期间隔内的各迭代,均采用第M+1个周期中的第Q
m+1个迭代确定的数据位宽或点位置等量化参数。
在本实施例中,可以设置周期间隔,在神经网络运算的训练或微调达到稳定后,根据周期间隔,每周期更新一次数据位宽或点位置等量化参数。周期间隔可以在训练稳定或微调稳定后,减少数据位宽或点位置的更新次数,在保证量化精度的同时,提高神经网络的运行效率。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本披露并不受所描述的动作顺序的限制,因为依据本披露,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于可选实施例,所涉及的动作和模块并不一定是本披露所必须的。
进一步需要说明的是,虽然图2-1至图2-6的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图图2-1至图2-6中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
图2-26示出根据本披露实施例的神经网络量化装置的示意图。如图2-26所示,本披露提供一种神经网络量化装置,所述装置用于量化所述神经网络中的任意一层待量化层,所述装置包括:
量化参数确定模块10,用于确定与所述待量化层中每种待量化数据对应的量化参数,所述待量化数据包括神经元、权值、偏置、梯度中的至少一种;
量化模块20,用于将待量化数据根据对应的量化参数进行量化,得到量化数据,以使所述神经网络根据所述量化数据执行运算。
在一种可能的实现方式中,所述量化参数包括点位置、缩放系数和偏移量中的至少一种,其中,
所述点位置为量化后小数点的位置,
所述缩放系数为量化后数据的最大值与待量化数据的最大绝对值之间的比值,
所述偏移量为待量化数据的中间值。
图2-27示出根据本披露实施例的神经网络量化装置的示意图。如图2-27所示,所述量化参数确定模块10,包括:
第一量化参数确定子模块11,用于通过查找待量化数据与量化参数对应关系,确定与 所述待量化层中每种待量化数据对应的量化参数。
在一种可能的实现方式中,所述量化参数确定模块10,包括:
第二量化参数确定子模块12,用于根据每种待量化数据和对应的数据位宽计算得到对应的量化参数。
在一种可能的实现方式中,所述第二量化参数确定子模块12,包括:
第一点位置计算单元121,用于当所述量化参数不包括偏移量时,根据目标数据中的绝对值最大值和所述目标数据对应的数据位宽,得到所述目标数据的点位置,所述目标数据为任意一种待量化数据。
在一种可能的实现方式中,所述第二量化参数确定子模块12,包括:
第一缩放系数计算单元122,用于当所述量化参数不包括偏移量时,根据目标数据和所述目标数据对应的数据位宽得到所述目标数据量化后数据的最大值,所述目标数据为任意一种待量化数据;根据目标数据中的绝对值最大值和所述目标数据量化后数据的最大值,得到所述目标数据的缩放系数。
在一种可能的实现方式中,所述第二量化参数确定子模块12,包括:
第二点位置计算单元123,用于当所述量化参数包括偏移量时,根据所述目标数据中的最大值、所述目标数据中的最小值和所述目标数据对应的数据位宽,得到所述目标数据的点位置,所述目标数据为任意一种待量化数据。
在一种可能的实现方式中,所述第二量化参数确定子模块12,包括:
第二缩放系数计算单元124,用于当所述量化参数包括偏移量时,根据目标数据和所述目标数据对应的数据位宽得到所述目标数据量化后数据的最大值,所述目标数据为任意一种待量化数据;根据所述目标数据中的最大值、所述目标数据中的最小值和所述目标数据量化后数据的最大值,得到所述目标数据的缩放系数。
在一种可能的实现方式中,所述第二量化参数确定子模块12,包括:
偏移量计算单元125,用于根据目标数据中的最大值和最小值,得到所述目标数据的偏移量,所述目标数据为任意一种待量化数据。
图2-28示出根据本披露实施例的神经网络量化装置的示意图。如图2-28所示,在一种可能的实现方式中,所述装置还包括:
量化误差确定模块30,用于根据目标数据和所述目标数据对应的量化数据,确定所述目标数据的量化误差,所述目标数据为任意一种待量化数据;
调整位宽确定模块40,用于根据所述量化误差和误差阈值,调整所述目标数据对应的数据位宽,得到所述目标数据对应的调整位宽;
调整量化参数确定模块50,用于将所述目标数据对应的数据位宽更新为所述调整位宽,根据所述目标数据和所述调整位宽计算得到对应的调整量化参数,以使所述神经网络根据所述调整量化参数进行量化。
在一种可能的实现方式中,所述调整位宽确定模块40,包括:
第一调整位宽确定子模块41,用于当所述量化误差大于第一误差阈值时,增加所述目 标数据对应的数据位宽,得到所述目标数据对应的调整位宽。
在一种可能的实现方式中,所述调整位宽确定模块40,还包括:
第一调整量化误差确定子模块42,用于根据所述调整位宽和所述目标数据计算所述目标数据调整后的量化误差;
第一调整位宽循环确定子模块43,用于根据所述调整后的量化误差和所述第一误差阈值继续增加所述调整位宽,直至根据调整位宽和所述目标数据计算得到的调整后的量化误差小于或等于所述第一误差阈值。
在一种可能的实现方式中,所述调整位宽确定模块40,包括:
第二调整位宽确定子模块44,用于当所述量化误差小于第二误差阈值时,减少所述目标数据对应的数据位宽,所述第二误差阈值小于所述第一误差阈值。
在一种可能的实现方式中,所述调整位宽确定模块40,还包括:
第二调整量化误差确定子模块45,用于根据所述调整位宽和所述目标数据计算所述目标数据调整后的量化误差;
第二调整位宽循环确定子模块46,用于根据所述调整后的量化误差和所述第二误差阈值继续减少所述调整位宽,直至根据调整位宽和所述目标数据计算得到的调整后的量化误差大于或等于所述第二误差阈值。
图2-29示出根据本披露实施例的神经网络量化装置的示意图。如图2-29所示,在一种可能的实现方式中,在所述神经网络运算的微调阶段和/或训练阶段,所述装置还包括:
数据变动幅度确定模块60,用于获取当前迭代以及历史迭代中目标数据的数据变动幅度,所述历史迭代为所述当前迭代之前的迭代;
目标迭代间隔确定模块70,用于根据所述目标数据的数据变动幅度,确定所述目标数据对应的目标迭代间隔,以使所述神经网络根据所述目标迭代间隔更新所述目标数据的量化参数,所述目标迭代间隔包括至少一次迭代,所述目标数据为任意一种待量化数据。
在一种可能的实现方式中,所述装置还包括:
第一目标迭代间隔应用模块80,用于根据所述目标数据在所述当前迭代的数据位宽,确定所述目标数据在所述目标迭代间隔内的迭代对应的数据位宽,以使所述神经网络根据所述目标数据在所述目标迭代间隔内的迭代对应的数据位宽,确定量化参数。
在一种可能的实现方式中,所述装置还包括:
第二目标迭代间隔应用模块90,用于根据所述目标数据在所述当前迭代对应的点位置,确定所述目标数据在所述目标迭代间隔内的迭代对应的点位置。
在一种可能的实现方式中,所述数据变动幅度确定模块60,包括:
滑动平均值计算子模块61,用于根据目标数据在当前迭代的点位置,和根据历史迭代间隔确定的与所述当前迭代对应的历史迭代的点位置,计算目标数据对应各迭代间隔的点位置的滑动平均值;
第一数据变动幅度确定子模块62,用于根据所述目标数据在当前迭代的点位置的第一滑动平均值,以及在上一迭代间隔对应迭代的点位置的第二滑动平均值,得到第一数据变 动幅度;
所述目标迭代间隔确定模块70,包括:
第一目标迭代间隔确定子模块71,用于根据所述第一数据变动幅度,确定所述目标数据对应的目标迭代间隔,以使所述神经网络根据所述目标迭代间隔更新所述目标数据的量化参数。
在一种可能的实现方式中,所述第一数据变动幅度确定子模块62,包括:
第一数据变动幅度确定单元621,用于计算所述第一滑动平均值和所述第二滑动平均值的差值;将所述差值的绝对值确定为第一数据变动幅度。
在一种可能的实现方式中,所述数据变动幅度确定模块60,还包括:
第二数据变动幅度确定子模块63,用于根据在当前迭代所述目标数据和所述目标数据对应的量化数据,得到第二数据变动幅度;
所述目标迭代间隔确定模块70,包括:
第二目标迭代间隔确定子模块72,用于根据所述目标数据的第一数据变动幅度和所述第二数据变动幅度,确定所述目标数据对应的目标迭代间隔,以使所述神经网络根据所述目标迭代间隔更新所述目标数据的量化参数。
在一种可能的实现方式中,所述第二数据变动幅度确定模块63,包括:
第二数据变动幅度确定单元631,用于计算在当前迭代所述目标数据和所述目标数据对应的量化数据之间的误差;将所述误差的平方确定为所述第二数据变动幅度。
在一种可能的实现方式中,所述第二目标迭代间隔确定子模块72,用于根据所述第一数据变动幅度和所述第二数据变动幅度中的最大值,确定所述目标数据对应的目标迭代间隔。
在一种可能的实现方式中,所述数据变动幅度确定模块60,包括:
第三数据变动幅度确定子模块64,用于在当前迭代位于更新周期以外时,获取当前迭代以及历史迭代中目标数据的数据变动幅度,所述更新周期包括至少一个迭代。
图2-30示出根据本披露实施例的神经网络量化装置的示意图。如图2-30所示,在一种可能的实现方式中,所述装置还包括:
周期间隔确定模块100,用于在当前迭代位于预设周期内时,根据当前迭代、在所述预设周期的下一周期中与所述当前迭代对应的迭代以及当前迭代对应的迭代间隔,确定周期间隔;
第一周期间隔应用模块110,用于根据所述目标数据在当前迭代对应的数据位宽,确定在所述周期间隔内的迭代中所述目标数据的数据位宽;或
第二周期间隔应用模块120,用于根据所述目标数据在当前迭代对应的点位置,确定在所述周期间隔内的迭代中所述目标数据的点位置。
在一种可能的实现方式中,所述装置还包括:
量化参数沿用模块130,用于在所述待量化层之后的一层或多层采用所述待量化层的量化参数。
应该理解,上述的装置实施例仅是示意性的,本披露的装置还可通过其它的方式实现。例如,上述实施例中所述单元/模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。例如,多个单元、模块或组件可以结合,或者可以集成到另一个系统,或一些特征可以忽略或不执行。
所述作为分离部件说明的单元或模块可以是物理上分开的,也可以不是物理上分开的。作为单元或模块说明的部件可以是物理单元,也可以不是物理单元,即可以位于一个装置中,或者也可以分布到多个装置上。本披露中实施例的方案可以根据实际的需要选择其中的部分或者全部单元来实现。
另外,若无特别说明,在本披露各个实施例中的各功能单元/模块可以集成在一个单元/模块中,也可以是各个单元/模块单独物理存在,也可以两个或两个以上单元/模块集成在一起。上述集成的单元/模块既可以采用硬件的形式实现,也可以采用软件程序模块的形式实现。
所述集成的单元/模块如果以硬件的形式实现时,该硬件可以是数字电路,模拟电路等等。硬件结构的物理实现包括但不局限于晶体管,忆阻器等等。若无特别说明,所述人工智能处理器可以是任何适当的硬件处理器,比如CPU、GPU、FPGA、DSP和ASIC等等。若无特别说明,所述存储单元可以是任何适当的磁存储介质或者磁光存储介质,比如,阻变式存储器RRAM(Resistive Random Access Memory)、动态随机存取存储器DRAM(Dynamic Random Access Memory)、静态随机存取存储器SRAM(Static Random-Access Memory)、增强动态随机存取存储器EDRAM(Enhanced Dynamic Random Access Memory)、高带宽内存HBM(High-Bandwidth Memory)、混合存储立方HMC(Hybrid Memory Cube)等等。
所述集成的单元/模块如果以软件程序模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储器中。基于这样的理解,本披露的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储器中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本披露各个实施例所述方法的全部或部分步骤。而前述的存储器包括:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
在一种可能的实现方式中,本披露还公开了一种人工智能芯片,其包括了上述数据同步装置。
在一种可能的实现方式中,本披露还公开了一种板卡,其包括存储器件、接口装置和控制器件以及上述人工智能芯片;其中,所述人工智能芯片与所述存储器件、所述控制器件以及所述接口装置分别连接;所述存储器件,用于存储数据;所述接口装置,用于实现所述人工智能芯片与外部设备之间的数据传输;所述控制器件,用于对所述人工智能芯片的状态进行监控。
图2-31示出根据本披露实施例的板卡的结构框图,参阅图2-31,上述板卡除了包括上述芯片389以外,还可以包括其他的配套部件,该配套部件包括但不限于:存储器件390、接口装置391和控制器件392;
所述存储器件390与所述人工智能芯片通过总线连接,用于存储数据。所述存储器件可以包括多组存储单元393。每一组所述存储单元与所述人工智能芯片通过总线连接。可以理解,每一组所述存储单元可以是DDR SDRAM(英文:Double Data Rate SDRAM,双倍速率同步动态随机存储器)。
DDR不需要提高时钟频率就能加倍提高SDRAM的速度。DDR允许在时钟脉冲的上升沿和下降沿读出数据。DDR的速度是标准SDRAM的两倍。在一个实施例中,所述存储装置可以包括4组所述存储单元。每一组所述存储单元可以包括多个DDR4颗粒(芯片)。在一个实施例中,所述人工智能芯片内部可以包括4个72位DDR4控制器,上述72位DDR4控制器中64bit用于传输数据,8bit用于ECC校验。可以理解,当每一组所述存储单元中采用DDR4-3200颗粒时,数据传输的理论带宽可达到25600MB/s。
在一个实施例中,每一组所述存储单元包括多个并联设置的双倍速率同步动态随机存储器。DDR在一个时钟周期内可以传输两次数据。在所述芯片中设置控制DDR的控制器,用于对每个所述存储单元的数据传输与数据存储的控制。
所述接口装置与所述人工智能芯片电连接。所述接口装置用于实现所述人工智能芯片与外部设备(例如服务器或计算机)之间的数据传输。例如在一个实施例中,所述接口装置可以为标准PCIE接口。比如,待处理的数据由服务器通过标准PCIE接口传递至所述芯片,实现数据转移。优选的,当采用PCIE 3.0 X 16接口传输时,理论带宽可达到16000MB/s。在另一个实施例中,所述接口装置还可以是其他的接口,本披露并不限制上述其他的接口的具体表现形式,所述接口单元能够实现转接功能即可。另外,所述人工智能芯片的计算结果仍由所述接口装置传送回外部设备(例如服务器)。
所述控制器件与所述人工智能芯片电连接。所述控制器件用于对所述人工智能芯片的状态进行监控。具体的,所述人工智能芯片与所述控制器件可以通过SPI接口电连接。所述控制器件可以包括单片机(Micro Controller Unit,MCU)。如所述人工智能芯片可以包括多个处理芯片、多个处理核或多个处理电路,可以带动多个负载。因此,所述人工智能芯片可以处于多负载和轻负载等不同的工作状态。通过所述控制装置可以实现对所述人工智能芯片中多个处理芯片、多个处理和或多个处理电路的工作状态的调控。
在一种可能的实现方式中,公开了一种电子设备,其包括了上述人工智能芯片。电子设备包括数据处理装置、机器人、电脑、打印机、扫描仪、平板电脑、智能终端、手机、行车记录仪、导航仪、传感器、摄像头、服务器、云端服务器、相机、摄像机、投影仪、手表、耳机、移动存储、可穿戴设备、交通工具、家用电器、和/或医疗设备。
所述交通工具包括飞机、轮船和/或车辆;所述家用电器包括电视、空调、微波炉、冰箱、电饭煲、加湿器、洗衣机、电灯、燃气灶、油烟机;所述医疗设备包括核磁共振仪、B超仪和/或心电图仪。
依据以下条款可更好地理解前述内容:
B1、一种神经网络量化方法,对于所述神经网络中的任意一层待量化层,所述方法包括:
确定与所述待量化层中每种待量化数据对应的量化参数,所述待量化数据包括神经元、权值、偏置、梯度中的至少一种;
将待量化数据根据对应的量化参数进行量化,得到量化数据,以使所述神经网络根据所述量化数据执行运算。
B2、根据条款B1所述的方法,所述量化参数包括点位置、缩放系数和偏移量中的至少一种,其中,
所述点位置为量化后小数点的位置,
所述缩放系数为量化后数据的最大值与待量化数据的最大绝对值之间的比值,
所述偏移量为待量化数据的中间值。
B3、根据条款B1或B2所述的方法,所述确定与所述待量化层中每种待量化数据对应的量化参数,包括:
通过查找待量化数据与量化参数对应关系,确定与所述待量化层中每种待量化数据对应的量化参数。
B4、根据条款B1或B2所述的方法,所述确定与所述待量化层中每种待量化数据对应的量化参数,包括:
根据每种待量化数据和对应的数据位宽计算得到对应的量化参数。
B5、根据条款B4所述的方法,所述根据每种待量化数据和对应的数据位宽计算得到对应的量化参数,包括:
当所述量化参数不包括偏移量时,根据目标数据中的绝对值最大值和所述目标数据对应的数据位宽,得到所述目标数据的点位置,所述目标数据为任意一种待量化数据。
B6、根据条款B4所述的方法,所述根据每种待量化数据和对应的数据位宽计算得到对应的量化参数,包括:
当所述量化参数不包括偏移量时,根据目标数据和所述目标数据对应的数据位宽得到所述目标数据量化后数据的最大值,所述目标数据为任意一种待量化数据;
根据目标数据中的绝对值最大值和所述目标数据量化后数据的最大值,得到所述目标数据的缩放系数。
B7、根据条款B4所述的方法,所述根据每种待量化数据和对应的数据位宽计算得到对应的量化参数,包括:
当所述量化参数包括偏移量时,根据所述目标数据中的最大值、所述目标数据中的最小值和所述目标数据对应的数据位宽,得到所述目标数据的点位置,所述目标数据为任意一种待量化数据。
B8、根据条款B4所述的方法,所述根据每种待量化数据和对应的数据位宽计算得到对应的量化参数,包括:
当所述量化参数包括偏移量时,根据目标数据和所述目标数据对应的数据位宽得到所述目标数据量化后数据的最大值,所述目标数据为任意一种待量化数据;
根据所述目标数据中的最大值、所述目标数据中的最小值和所述目标数据量化后数据的最大值,得到所述目标数据的缩放系数。
B9、根据条款B4所述的方法,所述根据每种待量化数据和对应的数据位宽计算得到对应的量化参数,包括:
根据目标数据中的最大值和最小值,得到所述目标数据的偏移量,所述目标数据为任意一种待量化数据。
B10、根据条款B1至B9中任一项所述的方法,所述方法还包括:
根据目标数据和所述目标数据对应的量化数据,确定所述目标数据的量化误差,所述目标数据为任意一种待量化数据;
根据所述量化误差和误差阈值,调整所述目标数据对应的数据位宽,得到所述目标数据对应的调整位宽;
将所述目标数据对应的数据位宽更新为所述调整位宽,根据所述目标数据和所述调整位宽计算得到对应的调整量化参数,以使所述神经网络根据所述调整量化参数进行量化。
B11、根据条款B10所述的方法,所述根据所述量化误差和误差阈值,调整所述目标数据对应的数据位宽,得到所述目标数据对应的调整位宽,包括:
当所述量化误差大于第一误差阈值时,增加所述目标数据对应的数据位宽,得到所述目标数据对应的调整位宽。
B12、根据条款B11所述的方法,所述方法还包括:
根据所述调整位宽和所述目标数据计算所述目标数据调整后的量化误差;
根据所述调整后的量化误差和所述第一误差阈值继续增加所述调整位宽,直至根据调整位宽和所述目标数据计算得到的调整后的量化误差小于或等于所述第一误差阈值。
B13、根据条款B10或B11所述的方法,所述根据所述量化误差和误差阈值,调整所述目标数据对应的数据位宽,包括:
当所述量化误差小于第二误差阈值时,减少所述目标数据对应的数据位宽,所述第二误差阈值小于所述第一误差阈值。
B14、根据条款B13所述的方法,所述方法还包括:
根据所述调整位宽和所述目标数据计算所述目标数据调整后的量化误差;
根据所述调整后的量化误差和所述第二误差阈值继续减少所述调整位宽,直至根据调整位宽和所述目标数据计算得到的调整后的量化误差大于或等于所述第二误差阈值。
B15、根据条款B1至B14中任一项所述的方法,在所述神经网络运算的微调阶段和/或训练阶段,所述方法还包括:
获取当前迭代以及历史迭代中目标数据的数据变动幅度,所述历史迭代为所述当前迭代之前的迭代;
根据所述目标数据的数据变动幅度,确定所述目标数据对应的目标迭代间隔,以使所 述神经网络根据所述目标迭代间隔更新所述目标数据的量化参数,所述目标迭代间隔包括至少一次迭代,所述目标数据为任意一种待量化数据。
B16、根据条款B15所述的方法,所述方法还包括:
根据所述目标数据在所述当前迭代的数据位宽,确定所述目标数据在所述目标迭代间隔内的迭代对应的数据位宽,以使所述神经网络根据所述目标数据在所述目标迭代间隔内的迭代对应的数据位宽,确定量化参数。
B17、根据条款B15所述的方法,所述方法还包括:
根据所述目标数据在所述当前迭代对应的点位置,确定所述目标数据在所述目标迭代间隔内的迭代对应的点位置。
B18、根据条款B15所述的方法,所述获取当前迭代以及历史迭代中目标数据的数据变动幅度,包括:
根据目标数据在当前迭代的点位置,和根据历史迭代间隔确定的与所述当前迭代对应的历史迭代的点位置,计算目标数据对应各迭代间隔的点位置的滑动平均值;
根据所述目标数据在当前迭代的点位置的第一滑动平均值,以及在上一迭代间隔对应迭代的点位置的第二滑动平均值,得到第一数据变动幅度;
所述根据所述目标数据的数据变动幅度,确定所述目标数据对应的目标迭代间隔,以使所述神经网络根据所述目标迭代间隔更新所述目标数据的量化参数,包括:
根据所述第一数据变动幅度,确定所述目标数据对应的目标迭代间隔,以使所述神经网络根据所述目标迭代间隔更新所述目标数据的量化参数。
B19、根据条款B18所述的方法,所述根据所述目标数据在当前迭代的点位置的第一滑动平均值,以及在上一迭代间隔对应迭代的点位置的第二滑动平均值,得到第一数据变动幅度,包括:
计算所述第一滑动平均值和所述第二滑动平均值的差值;
将所述差值的绝对值确定为第一数据变动幅度。
B20、根据条款B18所述的方法,所述方法还包括:
根据在当前迭代所述目标数据和所述目标数据对应的量化数据,得到第二数据变动幅度;
所述根据所述目标数据的数据变动幅度,确定所述目标数据对应的目标迭代间隔,以使所述神经网络根据所述目标迭代间隔更新所述目标数据的量化参数,包括:
根据所述目标数据的第一数据变动幅度和所述第二数据变动幅度,确定所述目标数据对应的目标迭代间隔,以使所述神经网络根据所述目标迭代间隔更新所述目标数据的量化参数。
B21、根据条款B20述的方法,所述根据在当前迭代所述目标数据和所述目标数据对应的量化数据,得到第二数据变动幅度,包括:
计算在当前迭代所述目标数据和所述目标数据对应的量化数据之间的误差;
将所述误差的平方确定为所述第二数据变动幅度。
B22、根据条款B20所述的方法,所述根据所述目标数据的第一数据变动幅度和所述第二数据变动幅度,确定所述目标数据对应的目标迭代间隔,包括:
根据所述第一数据变动幅度和所述第二数据变动幅度中的最大值,确定所述目标数据对应的目标迭代间隔。
B23、根据条款B15至B22中任一项所述的方法,所述获取当前迭代以及历史迭代中目标数据的数据变动幅度,包括:
在当前迭代位于更新周期以外时,获取当前迭代以及历史迭代中目标数据的数据变动幅度,所述更新周期包括至少一个迭代。
B24、根据条款B15至B23中任一项所述的方法,所述方法还包括:
在当前迭代位于预设周期内时,根据当前迭代、在所述预设周期的下一周期中与所述当前迭代对应的迭代以及当前迭代对应的迭代间隔,确定周期间隔;
根据所述目标数据在当前迭代对应的数据位宽,确定在所述周期间隔内的迭代中所述目标数据的数据位宽;或
根据所述目标数据在当前迭代对应的点位置,确定在所述周期间隔内的迭代中所述目标数据的点位置。
B25、根据条款B1至B24中任一项所述的方法,所述方法还包括:
在所述待量化层之后的一层或多层采用所述待量化层的量化参数。
B26、一种神经网络量化装置,所述装置用于量化所述神经网络中的任意一层待量化层,所述装置包括:
量化参数确定模块,用于确定与所述待量化层中每种待量化数据对应的量化参数,所述待量化数据包括神经元、权值、偏置、梯度中的至少一种;
量化模块,用于将待量化数据根据对应的量化参数进行量化,得到量化数据,以使所述神经网络根据所述量化数据执行运算。
B27、根据条款B26所述的装置,所述量化参数包括点位置、缩放系数和偏移量中的至少一种,其中,
所述点位置为量化后小数点的位置,
所述缩放系数为量化后数据的最大值与待量化数据的最大绝对值之间的比值,
所述偏移量为待量化数据的中间值。
B28、根据条款B25或B27所述的装置,所述量化参数确定模块,包括:
第一量化参数确定子模块,用于通过查找待量化数据与量化参数对应关系,确定与所述待量化层中每种待量化数据对应的量化参数。
B29、根据条款B26或B27所述的装置,所述量化参数确定模块,包括:
第二量化参数确定子模块,用于根据每种待量化数据和对应的数据位宽计算得到对应的量化参数。
B30、根据条款B29所述的装置,所述第二量化参数确定子模块,包括:
第一点位置计算单元,用于当所述量化参数不包括偏移量时,根据目标数据中的绝对 值最大值和所述目标数据对应的数据位宽,得到所述目标数据的点位置,所述目标数据为任意一种待量化数据。
B31、根据条款B29所述的装置,所述第二量化参数确定子模块,包括:
第一缩放系数计算单元,用于当所述量化参数不包括偏移量时,根据目标数据和所述目标数据对应的数据位宽得到所述目标数据量化后数据的最大值,所述目标数据为任意一种待量化数据;根据目标数据中的绝对值最大值和所述目标数据量化后数据的最大值,得到所述目标数据的缩放系数。
B32、根据条款B29所述的装置,所述第二量化参数确定子模块,包括:
第二点位置计算单元,用于当所述量化参数包括偏移量时,根据所述目标数据中的最大值、所述目标数据中的最小值和所述目标数据对应的数据位宽,得到所述目标数据的点位置,所述目标数据为任意一种待量化数据。
B33、根据条款B29所述的装置,所述第二量化参数确定子模块,包括:
第二缩放系数计算单元,用于当所述量化参数包括偏移量时,根据目标数据和所述目标数据对应的数据位宽得到所述目标数据量化后数据的最大值,所述目标数据为任意一种待量化数据;根据所述目标数据中的最大值、所述目标数据中的最小值和所述目标数据量化后数据的最大值,得到所述目标数据的缩放系数。
B34、根据条款B29所述的装置,所述第二量化参数确定子模块,包括:
偏移量计算单元,用于根据目标数据中的最大值和最小值,得到所述目标数据的偏移量,所述目标数据为任意一种待量化数据。
B35、根据条款B26至B34中任一项所述的装置,所述装置还包括:
量化误差确定模块,用于根据目标数据和所述目标数据对应的量化数据,确定所述目标数据的量化误差,所述目标数据为任意一种待量化数据;
调整位宽确定模块,用于根据所述量化误差和误差阈值,调整所述目标数据对应的数据位宽,得到所述目标数据对应的调整位宽;
调整量化参数确定模块,用于将所述目标数据对应的数据位宽更新为所述调整位宽,根据所述目标数据和所述调整位宽计算得到对应的调整量化参数,以使所述神经网络根据所述调整量化参数进行量化。
B36、根据条款B35所述的装置,所述调整位宽确定模块,包括:
第一调整位宽确定子模块,用于当所述量化误差大于第一误差阈值时,增加所述目标数据对应的数据位宽,得到所述目标数据对应的调整位宽。
B37、根据条款B36所述的装置,所述调整位宽确定模块,还包括:
第一调整量化误差确定子模块,用于根据所述调整位宽和所述目标数据计算所述目标数据调整后的量化误差;
第一调整位宽循环确定子模块,用于根据所述调整后的量化误差和所述第一误差阈值继续增加所述调整位宽,直至根据调整位宽和所述目标数据计算得到的调整后的量化误差小于或等于所述第一误差阈值。
B38、根据条款B35或B36所述的装置,所述调整位宽确定模块,包括:
第二调整位宽确定子模块,用于当所述量化误差小于第二误差阈值时,减少所述目标数据对应的数据位宽,所述第二误差阈值小于所述第一误差阈值。
B39、根据条款B38所述的装置,所述调整位宽确定模块,还包括:
第二调整量化误差确定子模块,用于根据所述调整位宽和所述目标数据计算所述目标数据调整后的量化误差;
第二调整位宽循环确定子模块,用于根据所述调整后的量化误差和所述第二误差阈值继续减少所述调整位宽,直至根据调整位宽和所述目标数据计算得到的调整后的量化误差大于或等于所述第二误差阈值。
B40、根据条款B26至B39中任一项所述的装置,在所述神经网络运算的微调阶段和/或训练阶段,所述装置还包括:
数据变动幅度确定模块,用于获取当前迭代以及历史迭代中目标数据的数据变动幅度,所述历史迭代为所述当前迭代之前的迭代;
目标迭代间隔确定模块,用于根据所述目标数据的数据变动幅度,确定所述目标数据对应的目标迭代间隔,以使所述神经网络根据所述目标迭代间隔更新所述目标数据的量化参数,所述目标迭代间隔包括至少一次迭代,所述目标数据为任意一种待量化数据。
B41、根据条款B40所述的装置,所述装置还包括:
第一目标迭代间隔应用模块,用于根据所述目标数据在所述当前迭代的数据位宽,确定所述目标数据在所述目标迭代间隔内的迭代对应的数据位宽,以使所述神经网络根据所述目标数据在所述目标迭代间隔内的迭代对应的数据位宽,确定量化参数。
B42、根据条款B40所述的装置,所述装置还包括:
第二目标迭代间隔应用模块,用于根据所述目标数据在所述当前迭代对应的点位置,确定所述目标数据在所述目标迭代间隔内的迭代对应的点位置。
B43、根据条款B40所述的装置,所述数据变动幅度确定模块,包括:
滑动平均值计算子模块,用于根据目标数据在当前迭代的点位置,和根据历史迭代间隔确定的与所述当前迭代对应的历史迭代的点位置,计算目标数据对应各迭代间隔的点位置的滑动平均值;
第一数据变动幅度确定子模块,用于根据所述目标数据在当前迭代的点位置的第一滑动平均值,以及在上一迭代间隔对应迭代的点位置的第二滑动平均值,得到第一数据变动幅度;
所述目标迭代间隔确定模块,包括:
第一目标迭代间隔确定子模块,用于根据所述第一数据变动幅度,确定所述目标数据对应的目标迭代间隔,以使所述神经网络根据所述目标迭代间隔更新所述目标数据的量化参数。
B44、根据条款B43所述的装置,所述第一数据变动幅度确定子模块,包括:
第一数据变动幅度确定单元,用于计算所述第一滑动平均值和所述第二滑动平均值的 差值;将所述差值的绝对值确定为第一数据变动幅度。
B45、根据条款B43所述的装置,所述数据变动幅度确定模块,包括:
第二数据变动幅度确定子模块,用于根据在当前迭代所述目标数据和所述目标数据对应的量化数据,得到第二数据变动幅度;
所述目标迭代间隔确定模块,包括:
第二目标迭代间隔确定子模块,用于根据所述目标数据的第一数据变动幅度和所述第二数据变动幅度,确定所述目标数据对应的目标迭代间隔,以使所述神经网络根据所述目标迭代间隔更新所述目标数据的量化参数。
B46、根据条款B45述的装置,所述第二数据变动幅度确定子模块,包括:
第二数据变动幅度确定单元,用于计算在当前迭代所述目标数据和所述目标数据对应的量化数据之间的误差;将所述误差的平方确定为所述第二数据变动幅度。
B47、根据条款B45所述的装置,所述第二目标迭代间隔确定子模块,用于根据所述第一数据变动幅度和所述第二数据变动幅度中的最大值,确定所述目标数据对应的目标迭代间隔。
B48、根据条款B40至B47中任一项所述的装置,所述数据变动幅度确定模块,包括:
第三数据变动幅度确定子模块,用于在当前迭代位于更新周期以外时,获取当前迭代以及历史迭代中目标数据的数据变动幅度,所述更新周期包括至少一个迭代。
B49、根据条款B40至B48中任一项所述的装置,所述装置还包括:
周期间隔确定模块,用于在当前迭代位于预设周期内时,根据当前迭代、在所述预设周期的下一周期中与所述当前迭代对应的迭代以及当前迭代对应的迭代间隔,确定周期间隔;
第一周期间隔应用模块,用于根据所述目标数据在当前迭代对应的数据位宽,确定在所述周期间隔内的迭代中所述目标数据的数据位宽;或
第二周期间隔应用模块,用于根据所述目标数据在当前迭代对应的点位置,确定在所述周期间隔内的迭代中所述目标数据的点位置。
B50、根据条款B26至B49中任一项所述的装置,所述装置还包括:
量化参数沿用模块,用于在所述待量化层之后的一层或多层采用所述待量化层的量化参数。
B51、一种人工智能芯片,所述芯片包括如条款B26-B50中任意一项所述的神经网络量化装置。
B52、一种电子设备,所述电子设备包括如条款B51所述的人工智能芯片。
B53、一种板卡,所述板卡包括:存储器件、接口装置和控制器件以及如条款B51所述的人工智能芯片;
其中,所述人工智能芯片与所述存储器件、所述控制器件以及所述接口装置分别连接;
所述存储器件,用于存储数据;
所述接口装置,用于实现所述人工智能芯片与外部设备之间的数据传输;
所述控制器件,用于对所述人工智能芯片的状态进行监控。
B54、根据权利要求B53所述的板卡,所述存储器件包括:多组存储单元,每一组所述存储单元与所述人工智能芯片通过总线连接,所述存储单元为:DDR SDRAM;
所述芯片包括:DDR控制器,用于对每个所述存储单元的数据传输与数据存储的控制;
所述接口装置为:标准PCIE接口。
以上已经描述了本披露的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场中的技术的改进,或者使本技术领域的其它普通技术人员能理解本文披露的各实施例。
上文描述了为解决神经网络量化的问题而提出的方案(201910505239.7)。
为了解决量化参数调整的问题,我们提出了如下的方案(201910528537.8)。具体地,提出了量化参数调整方法、装置及相关产品。
本披露涉及计算机技术领域,尤其涉及一种神经网络的量化参数调整方法、装置及相关产品。
随着人工智能技术的不断发展,其应用领域越来越广泛,在图像识别、语音识别、自然语言处理等领域中都得到了良好的应用。然而,随着人工智能算法的复杂度提高,待处理数据的数据量和数据维度都在不断增大,不断增大的数据量等对运算装置的数据处理效率、存储装置的存储容量及访存效率等提出了较大的挑战。
为解决上述技术问题,传统技术采用固定位宽对神经网络的运算数据进行量化,即将浮点型的运算数据转换为定点型的运算数据,以实现神经网络的运算数据的压缩。但神经网络的不同运算数据之间可能存在较大的差异,传统量化方法针对整个神经网络采用相同量化参数(如点位置)进行量化,往往会导致精度较低,影响数据运算结果。
有鉴于此,本披露提出了一种神经网络的量化参数调整方法、装置及相关产品,能够提高神经网络的量化精度,保证运算结果的正确性和可靠性。
本披露提供了一种神经网络的量化参数调整方法,所述方法包括:
获取待量化数据的数据变动幅度;
根据所述待量化数据的数据变动幅度,确定目标迭代间隔,以根据所述目标迭代间隔调整所述神经网络运算中的量化参数,其中,所述目标迭代间隔包括至少一次迭代,所述神经网络的量化参数用于实现对所述神经网络运算中待量化数据的量化操作。
本披露还提供了一种神经网络的量化参数调整装置,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时,实现上述任一项所述的方法的步骤。具体地,处理器执行上述计算机程序时,实现如下操作:
获取待量化数据的数据变动幅度;
根据所述待量化数据的数据变动幅度,确定目标迭代间隔,以根据所述目标迭代间隔调整所述神经网络运算中的量化参数,其中,所述目标迭代间隔包括至少一次迭代,所述神经网络的量化参数用于实现对所述神经网络运算中待量化数据的量化操作。
本披露还提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序,所述计算机程序被执行时,实现上述任一项所述的方法的步骤。具体地,上述计算机程序被执行时,实现如下操作:
获取待量化数据的数据变动幅度;
根据所述待量化数据的数据变动幅度,确定目标迭代间隔,以根据所述目标迭代间隔调整所述神经网络运算中的量化参数,其中,所述目标迭代间隔包括至少一次迭代,所述神经网络的量化参数用于实现对所述神经网络运算中待量化数据的量化操作。
本披露还提供了一种神经网络的量化参数调整装置,所述装置包括:
获取模块,用于获取待量化数据的数据变动幅度;
迭代间隔确定模块,用于根据所述待量化数据的数据变动幅度,确定目标迭代间隔,以根据所述目标迭代间隔调整所述神经网络运算中的量化参数,其中,所述目标迭代间隔包括至少一次迭代,所述神经网络的量化参数用于实现对所述神经网络运算中待量化数据的量化操作。
本披露的神经网络的量化参数调整方法、装置及相关产品,通过获取待量化数据的数据变动幅度,并根据该待量化数据的数据变动幅度确定出目标迭代间隔,从而可以根据该目标迭代间隔调整神经网络的量化参数,这样可以根据确定待量化数据的数据分布特性确定神经网络在不同运算阶段的量化参数。相较于现有技术中,针对同一神经网络的各种运算数据均采用相同的量化参数的方式,本披露的方法及装置能够提高神经网络量化过程中的精度,进而保证运算结果的准确性和可靠性。进一步地,通过确定目标迭代间隔还可以提高量化效率。
本披露所涉及的附图包含在说明书中并且构成说明书的一部分的附图与说明书一起示出了本披露的示例性实施例、特征和方面,并且用于解释本披露的原理。
图3-1示出本披露一实施例的量化参数调整方法的应用环境示意图;
图3-2示出本披露一实施例的待量化数据和量化数据的对应关系示意图;
图3-3示出本披露一实施例的待量化数据的转换示意图;
图3-4示出本披露一实施例的量化参数调整方法的流程图;
图3-5示出本披露一实施例的待量化数据在运算过程中的变动趋势图;
图3-6示出本披露一实施例的参数调整方法中目标迭代间隔的确定方法的流程图;
图3-7示出本披露一实施例中点位置的变动幅度的确定方法的流程图;
图3-8示出本披露一实施例中第二均值的确定方法的流程图;
图3-9示出本披露一实施例中数据位宽调整方法的流程图;
图3-10示出本披露另一实施例中数据位宽调整方法的流程图;
图3-11示出本披露又一实施例中数据位宽调整方法的流程图;
图3-12示出本披露再一实施例中数据位宽调整方法的流程图;
图3-13示出本披露另一实施例中第二均值的确定方法的流程图;
图3-14示出本披露另一实施例的量化参数调整方法的流程图;
图3-15示出本披露一实施例的量化参数调整方法中调整量化参数的流程图;
图3-16示出本披露另一实施例的参数调整方法中目标迭代间隔的确定方法的流程图;
图3-17示出本披露又一实施例的参数调整方法中目标迭代间隔的确定方法的流程图;
图3-18示出本披露又一实施例的量化参数调整方法的流程图;
图3-19示出本披露再一实施例的量化参数调整方法的流程图;
图3-20示出本披露一实施例的量化参数调整装置的结构框图;
图3-21示出本披露一实施例的量化参数调整装置的结构框图;
图3-22示出本披露一实施例的量化参数调整装置的结构框图;
图3-23示出本披露一实施例的量化参数调整装置的结构框图;
图3-24示出本披露一实施例的量化参数调整装置的结构框图;
图3-25示出根据本披露实施例的板卡的结构框图。
为了解决量化参数调整的问题,我们提出了如下的方案(201910528537.8)。下面将结合本披露实施例中的附图,对本披露实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本披露一部分实施例,而不是全部的实施例。基于本披露中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本披露保护的范围。
应当理解,本披露的权利要求、说明书及附图中的术语“第一”、“第二”等是用于区别不同对象,而不是用于描述特定顺序。本披露的说明书和权利要求书中使用的术语“包括”和“包含”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。
还应当理解,在此本披露说明书中所使用的术语仅仅是出于描述特定实施例的目的,而并不意在限定本披露。如在本披露说明书和权利要求书中所使用的那样,除非上下文清楚地指明其它情况,否则单数形式的“一”、“一个”及“该”意在包括复数形式。还应当进一步理解,在本披露说明书和权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。
随着人工智能算法的复杂度提高,待处理数据的数据量和数据维度也在不断增大,而传统的神经网络算法通常采用浮点数据格式来执行神经网络运算,这就使得不断增大的数据量等对运算装置的数据处理效率、存储装置的存储容量及访存效率等提出了较大的挑战。为解决上述问题,可以对神经网络运算过程涉及的运算数据进行量化,即将浮点表示的运算数据转化为定点表示的运算数据,从而减小存储装置的存储容量及访存效率,并提高运算装置的运算效率。但传统的量化方法是在神经网络的整个训练过程中均采用相同的数据位宽和量化参数(如小数点的位置)对神经网络的不同运算数据进行量化,由于不同的运算数据之间具有差异性,或者,训练过程中不同阶段的运算数据具有差异性,使得采用上 述量化方法进行量化时,往往会导致精度不够,从而会影响运算结果。
基于此,本披露提供了一种神经网络的量化参数调整方法,该方法可以应用于包含存储器110和处理器120的量化参数调整装置中。图3-1为该量化参数调整装置100的结构框图,其中,该量化参数调整装置100的处理器120可以是通用处理器,该量化参数调整装置100的处理器120也可以是人工智能处理器,该量化参数调整装置100的处理器还可以包含通用处理器和人工智能处理器,此处不做具体限定。该存储器110可以用于存储神经网络运算过程中的运算数据,该运算数据可以是神经元数据、权值数据或梯度数据中的一种或多种。该存储器110还可以用于存储计算机程序,该计算机程序被上述的处理器120执行时,能够实现本披露实施例中的量化参数调整方法。该方法能够应用于神经网络的训练或微调过程中,并根据神经网络的训练或微调过程的不同阶段的运算数据的分布特性,动态地调整运算数据的量化参数,从而提高神经网络的量化过程的精度,进而保证运算结果的准确性和可靠性。
若无特别说明,所述人工智能处理器可以是任何适当的硬件处理器,比如CPU、GPU、FPGA、DSP和ASIC等等。若无特别说明,所述存储器可以是任何适当的磁存储介质或者磁光存储介质,比如,阻变式存储器RRAM(Resistive Random Access Memory)、动态随机存取存储器DRAM(Dynamic Random Access Memory)、静态随机存取存储器SRAM(Static Random-Access Memory)、增强动态随机存取存储器EDRAM(Enhanced Dynamic Random Access Memory)、高带宽内存HBM(High-Bandwidth Memory)或混合存储立方HMC(Hybrid Memory Cube)等等。
为更好地理解本披露的内容,以下首先介绍本披露实施例中量化过程及量化过程涉及到的量化参数。
本披露实施例中,量化是指将第一数据格式的运算数据转化为第二数据格式的运算数据。其中,该第一数据格式的运算数据可以是浮点表示的运算数据,该第二数据格式的运算数据可以是定点表示的运算数据。由于浮点表示的运算数据通常会占用较大的存储空间,因此通过将浮点表示的运算数据转换为定点表示的运算数据,可以节约存储空间,并提高运算数据的访存效率及运算效率等。
可选地,量化过程中的量化参数可以包括点位置和/或缩放系数,其中,点位置是指量化后的运算数据中小数点的位置。缩放系数是指量化数据的最大值与待量化数据的最大绝对值之间的比值。进一步地,量化参数还可以包括偏移量,偏移量是针对非对称的待量化数据而言,是指该待量化数据中多个元素的中间值,具体地,偏移量可以是待量化数据中多个元素的中点值。当该待量化数据为对称的待量化数据时,量化参数可以不包含偏移量,此时可以根据该待量化数据确定点位置和/或缩放系数等量化参数。
如图3-2所示,待量化数据为相对于原点对称的数据,假设Z
1为待量化数据中元素的绝对值的最大值,待量化数据对应的数据位宽为n,A为用数据位宽n对待量化数据进行量化后的量化数据可以表示的最大值,A为2
s(2
n-1-1),A需要包含Z
1,且Z
1要大于
因此有公式(1)的约束:
2
s(2
n-1-1)≥Z
1>2
s-1(2
n-1-1) 公式(1)
处理器可以根据待量化数据中的绝对值最大值Z1和数据位宽n,计算得到点位置s。例如,可以利用如下公式(2)计算得到待量化数据对应的点位置s:
其中,ceil为向上取整,Z
1为待量化数据中的绝对值最大值,s为点位置,n为数据位宽。
此时,当采用点位置s对待量化数据进行量化时,浮点表示的待量化数据F
x可以表示为:F
x≈I
x×2
s,其中,I
x是指量化后的n位二进制表示值,s表示点位置。其中,该待量化数据对应的量化数据为:
其中,s为点位置,I
x为量化数据,F
x为待量化数据,round为进行四舍五入的取整运算。可以理解的是,也可以采用其他的取整运算方法,例如采用向上取整、向下取整、向零取整等取整运算,替换公式(3)中的四舍五入的取整运算。可以理解的是,在数据位宽一定的情况下,根据点位置量化得到的量化数据中,小数点后的位数越多,量化数据的量化精度越大。
进一步地,该待量化数据对应的中间表示数据F
x1可以是:
其中,s为根据上述公式(2)确定的点位置,F
x为待量化数据,round为进行四舍五入的取整运算。F
x1可以是对上述的量化数据I
x进行反量化获得的数据,该中间表示数据F
x1的数据表示格式与上述的待量化数据F
x的数据表示格式一致,该中间表示数据F
x1可以用于计算量化误差,详见下文。其中,反量化是指量化的逆过程。
可选地,缩放系数可以包括第一缩放系数,该第一缩放系数可以按照如下方式进行计算:
其中,Z1为待量化数据中的绝对值最大值,A为用数据位宽n对待量化数据进行量化后数据的量化数据可以表示的最大值,A为2
s(2
n-1-1)。
此时,处理器可以采用点位置和第一缩放系数结合的方式对待量化数据F
x进行量化,获得量化数据:
其中,s为根据上述公式(2)确定的点位置,f
1为第一缩放系数,I
x为量化数据,F
x为待量化数据,round为进行四舍五入的取整运算。可以理解的是,也可以采用其他的取整运算方法,例如采用向上取整、向下取整、向零取整等取整运算,替换公式(6)中的四舍五入的取整运算。
进一步地,该待量化数据对应的中间表示数据F
x1可以是:
其中,s为根据上述公式(2)确定的点位置,f
1为缩放系数,F
x为待量化数据,round为进行四舍五入的取整运算。F
x1可以是对上述的量化数据I
x进行反量化获得的数据,该中间表示数据F
x1的数据表示格式与上述的待量化数据F
x的数据表示格式一致,该中间表示数据F
x1可以用于计算量化误差,详见下文。其中,反量化是指量化的逆过程。
可选地,该缩放系数还可以包括第二缩放系数,该第二缩放系数可以按照如下方式进行计算:
处理器可以单独使用第二缩放系数对待量化数据F
x进行量化,获得量化数据:
其中,f
2为第二缩放系数,I
x为量化数据,F
x为待量化数据,round为进行四舍五入的取整运算。可以理解的是,也可以采用其他的取整运算方法,例如采用向上取整、向下取整、向零取整等取整运算,替换公式(9)中的四舍五入的取整运算。可以理解的是,在数据位宽一定的情况下,采用不同的缩放系数,可以调整量化后数据的数值范围。
进一步地,该待量化数据对应的中间表示数据F
x1可以是:
其中,f
2为第二缩放系数,F
x为待量化数据,round为进行四舍五入的取整运算。F
x1可以是对上述的量化数据I
x进行反量化获得的数据,该中间表示数据F
x1的数据表示格式与上述的待量化数据F
x的数据表示格式一致,该中间表示数据F
x1可以用于计算量化误差,详见下文。其中,反量化是指量化的逆过程。
进一步地,上述第二缩放系数可以是根据点位置和第一缩放系数f
1确定。即第二缩放系数可以按照如下公式进行计算:
f
2=2
s×f
1 公式(11)
其中,s为根据上述公式(2)确定的点位置,f
1是按照上述公式(5)计算获得的第一缩放系数。
可选地,本披露实施例的量化方法不仅能够实现对称数据的量化,还可以实现对非对称数据的量化。此时,处理器可以将非对称的数据转化为对称数据,以避免数据的“溢出”。具体地,量化参数还可以包括偏移量,该偏移量可以是待量化数据的中点值,该偏移量可以用于表示待量化数据的中点值相对于原点的偏移量。如图3-3所示,处理器可以对待量化数据的数据分布进行统计,获得待量化数据中所有元素中的最小值Z
min,以及该待量化数据中所有元素中的最大值Z
max,之后处理器可以根据该最小值Z
min和最大值Z
max计算获得上述偏移量。具体的偏移量计算方式如下:
其中,o表示偏移量,Z
min表示待量化数据所有元素中的最小值,Z
max表示待量化数据所有元素中的最大值。
进一步地,处理器可以根据该待量化数据所有元素中的最小值Z
min和最大值Z
max确定该待量化数据中的绝对值最大值Z
2,
这样,处理器可以根据偏移量o将待量化数据进行平移,将非对称的待量化数据转化为对称的待量化数据,如图3-3所示。处理器还可以根据该待量化数据中的绝对值最大值Z
2进一步确定点位置s,其中,点位置可以按照如下公式进行计算:
其中,ceil为向上取整,s为点位置,n为数据位宽。
之后,处理器可以根据该偏移量及其对应的点位置对待量化数据进行量化,获得量化数据:
其中,s为根据上述公式(14)确定的点位置,o为偏移量,I
x为量化数据,F
x为待量化数据,round为进行四舍五入的取整运算。可以理解的是,也可以采用其他的取整运算方法,例如采用向上取整、向下取整、向零取整等取整运算,替换公式(15)中的四舍五入的取整运算。
进一步地,该待量化数据对应的中间表示数据F
x1可以是:
其中,s为根据上述公式(14)确定的点位置,o为偏移量,F
x为待量化数据,round为进行四舍五入的取整运算。F
x1可以是对上述的量化数据I
x进行反量化获得的数据,该中间表示数据F
x1的数据表示格式与上述的待量化数据F
x的数据表示格式一致,该中间表示数据F
x1可以用于计算量化误差,详见下文。其中,反量化是指量化的逆过程。
进一步可选地,处理器可以根据该待量化数据中的绝对值最大值Z
2进一步确定点位置s和第一缩放系数f
1,其中,点位置s具体计算方式可参见上述公式(14)。第一缩放系数f
1可以按照如下公式进行计算:
处理器可以根据偏移量及其对应的第一缩放系数f
1和点位置s,对待量化数据进行量化,获得量化数据:
其中,f
1为第一缩放系数,s为根据上述公式(14)确定的点位置,o为偏移量,I
x为量化数据,F
x为待量化数据,round为进行四舍五入的取整运算。可以理解的是,也可以采用其他的取整运算方法,例如采用向上取整、向下取整、向零取整等取整运算,替换公式(18)中的四舍五入的取整运算。
进一步地,该待量化数据对应的中间表示数据F
x1可以是:
其中,f
1为第一缩放系数,s为根据上述公式(14)确定的点位置,o为偏移量,F
x为待量化数据,round为进行四舍五入的取整运算。F
x1可以是对上述的量化数据I
x进行反量化获得的数据,该中间表示数据F
x1的数据表示格式与上述的待量化数据F
x的数据表示格式一致,该中间表示数据F
x1可以用于计算量化误差,详见下文。其中,反量化是指量化的逆过程。
可选地,该缩放系数还可以包括第二缩放系数,该第二缩放系数可以按照如下方式进行计算:
处理器可以单独使用第二缩放系数对待量化数据F
x进行量化,获得量化数据:
其中,f
2为第二缩放系数,I
x为量化数据,F
x为待量化数据,round为进行四舍五入的取整运算。可以理解的是,也可以采用其他的取整运算方法,例如采用向上取整、向下取整、向零取整等取整运算,替换公式(21)中的四舍五入的取整运算。可以理解的是,在数据位宽一定的情况下,采用不同的缩放系数,可以调整量化后数据的数值范围。
进一步地,该待量化数据对应的中间表示数据F
x1可以是:
其中,f
2为第二缩放系数,F
x为待量化数据,round为进行四舍五入的取整运算。F
x1可以是对上述的量化数据I
x进行反量化获得的数据,该中间表示数据F
x1的数据表示格式与上述的待量化数据F
x的数据表示格式一致,该中间表示数据F
x1可以用于计算量化误差,详见下文。其中,反量化是指量化的逆过程。
进一步地,上述第二缩放系数可以根据点位置和第一缩放系数f
1确定。即第二缩放系数可以按照如下公式进行计算:
f
2=2
s×f
1 公式(23)
其中,s为根据上述公式(14)确定的点位置,f
1是按照上述公式(17)计算获得的第一缩放系数。
可选地,处理器还可以根据偏移量o对待量化数据进行量化,此时点位置s和/或缩放系数可以为预设值。此时,处理器根据偏移量对待量化数据进行量化,获得量化数据:
I
x=round(F
x-o) 公式(24)
其中,o为偏移量,I
x为量化数据,F
x为待量化数据,round为进行四舍五入的取整运算。可以理解的是,也可以采用其他的取整运算方法,例如采用向上取整、向下取整、向零取整等取整运算,替换公式(24)中的四舍五入的取整运算。可以理解的是,在数据位宽一定的情况下,采用不同的偏移量,可以调整量化后数据的数值与量化前数据之间的偏移量。
进一步地,该待量化数据对应的中间表示数据F
x1可以是:
F
x1=round(F
x-o)+o 公式(25)
其中,o为偏移量,F
x为待量化数据,round为进行四舍五入的取整运算。F
x1可以是对上述的量化数据I
x进行反量化获得的数据,该中间表示数据F
x1的数据表示格式与上述的待量化数据F
x的数据表示格式一致,该中间表示数据F
x1可以用于计算量化误差,详见下文。其中,反量化是指量化的逆过程。
本披露的量化操作不仅可以用于上述浮点数据的量化,还可以用于实现定点数据的量化。可选地,该第一数据格式的运算数据也可以是定点表示的运算数据,该第二数据格式的运算数据可以是定点表示的运算数据,且第二数据格式的运算数据的数据表示范围小于第一数据格式的数据表示范围,第二数据格式的小数点位数大于第一数据格式的小数点位数,即第二数据格式的运算数据相较于第一数据格式的运算数据具有更高的精度。例如,该第一数据格式的运算数据为占用16位的定点数据,该第二数据格式可以是占用8位的定点数据。本披露实施例中,可以通过定点表示的运算数据进行量化处理,从而进一步减小运算数据占用的存储空间,提高运算数据的访存效率及运算效率。
本披露一实施例的量化参数调整方法,能够应用于神经网络的训练或微调过程中,从而在神经网络的训练或微调过程中,动态地调整神经网络运算过程中运算数据的量化参数,以提高该神经网络的量化精度。其中,神经网络可以是深度神经网络或卷积神经网络等等,此处不做具体限定。
应当清楚的是,神经网络的训练(Training)是指对神经网络(该神经网络的权值可以是随机数)进行多次迭代运算(iteration),使得神经网络的权值能够满足预设条件的过程。其中,一次迭代运算一般包括一次正向运算、一次反向运算和一次权值更新运算。正向运算是指根据神经网络的输入数据进行正向推理,获得正向运算结果的过程。反向运算是根据正向运算结果与预设参考值确定损失值,并根据该损失值确定权值梯度值和/或输入数据梯度值的过程。权值更新运算是指根据权值梯度值调整神经网络的权值的过程。具体地,神经网络的训练过程如下:处理器可以采用权值为随机数的神经网络对输入数据进行正向运算,获得正向运算结果。之后处理器根据该正向运算结果与预设参考值确定损失值,根据该损失值确定权值梯度值和/或输入数据梯度值。最后,处理器可以根据权值梯度值更新神经网络的梯度值,获得新的权值,完成一次迭代运算。处理器循环执行多次迭代运算,直至神经网络的正向运算结果满足预设条件。例如,当神经网络的正向运算结果收敛于预设参考值时,结束训练。或者,当神经网络的正向运算结果与预设参考值确定的损失值小于或等于预设精度时,结束训练。
微调是指对神经网络(该神经网络的权值已经处于收敛状态而非随机数)进行多次迭代运算,以使得神经网络的精度能够满足预设需求的过程。该微调过程与上述训练过程基本一致,可以认为是对处于收敛状态的神经网络进行重训练的过程。推理(Inference)是指采用权值满足预设条件的神经网络进行正向运算,从而实现识别或分类等功能的过程,如采用神经网络进行图像识别等等。
本披露实施例中,在上述神经网络的训练或微调过程中,可以在神经网络运算的不同阶段采用不同的量化参数对神经网络的运算数据进行量化,并根据量化后的数据进行迭代 运算,从而可以减小神经网络运算过程中的数据存储空间,提高数据访存效率及运算效率。如图3-4所示,上述方法可以包括:
S100、获取待量化数据的数据变动幅度。
可选地,处理器可以直接读取该待量化数据的数据变动幅度,该待量化数据的数据变动幅度可以是用户输入的。
可选地,处理器也可以根据当前迭代的待量化数据和历史迭代的待量化数据,计算获得上述的待量化数据的数据变动幅度,其中当前迭代是指当前执行的迭代运算,历史迭代是指在当前迭代之前执行的迭代运算。例如,处理器可以获取当前迭代的待量化数据中元素的最大值以及元素的平均值,以及各个历史迭代的待量化数据中元素的最大值以及元素的平均值,并根据各次迭代中元素的最大值和元素的平均值,确定待量化数据的变动幅度。若当前迭代的待量化数据中元素的最大值与预设数量的历史迭代的待量化数据中元素的最大值较为接近,且当前迭代的待量化数据中元素的平均值与预设数量的历史迭代的待量化数据中元素的平均值较为接近时,则可以确定上述的待量化数据的数据变动幅度较小。否则,则可以确定待量化数据的数据变动幅度较大。再如,该待量化数据的数据变动幅度可以采用待量化数据的滑动平均值或方差等进行表示,此处不做具体限定。
本披露实施例中,该待量化数据的数据变动幅度可以用于确定是否需要调整待量化数据的量化参数。例如,若待量化数据的数据变动幅度较大,则可以说明需要及时调整量化参数,以保证量化精度。若待量化数据的数据变动幅度较小,则当前检验迭代及其之后一定数量的迭代可以沿用历史迭代的量化参数,从而可以避免频繁的调整量化参数,提高量化效率。
其中,每次迭代涉及至少一个待量化数据,该待量化数据可以是浮点表示的运算数据,也可以是定点表示的运算数据。可选地,每次迭代的待量化数据可以是神经元数据、权值数据或梯度数据中的至少一种,梯度数据还可以包括神经元梯度数据和权值梯度数据等。
S200、根据所述待量化数据的数据变动幅度,确定目标迭代间隔,以根据该目标迭代间隔调整神经网络运算中的量化参数,其中,所述目标迭代间隔包括至少一次迭代,所述神经网络的量化参数用于实现对所述神经网络运算中待量化数据的量化操作。
可选地,该量化参数可以包括上述的点位置和/或缩放系数,其中,缩放系数可以包括第一缩放系数和第二缩放系数。具体的点位置计算方法可以参见上述的公式(2),缩放系数的计算方法可参见上述的公式(5)或(8),此处不再赘述。可选地,该量化参数还可以包括偏移量,该偏移量的计算方法可参见上述的公式(12);更进一步地,处理器还可以根据按照公式(14)确定点位置,根据上述的公式(17)或(20)确定缩放系数。本披露实施例中,处理器可以根据确定的目标迭代间隔,更新上述的点位置、缩放系数或偏移量中的至少一种,以调整该神经网络运算中的量化参数。也就是说,该神经网络运算中的量化参数可以根据神经网络运算中待量化数据的数据变动幅度进行更新,从而可以保证量化精度。
可以理解的是,通过对神经网络训练或微调过程中的运算数据的变化趋势进行统计和 分析,可以得到待量化数据的数据变动曲线。如图3-5所示,根据该数据变动曲线可以获知,在神经网络训练或微调的初期,不同迭代的待量化数据的数据变动较为剧烈,随着训练或微调运算的进行,不同迭代的待量化数据的数据变动逐渐趋于平缓。因此,在神经网络训练或微调的初期,可以较为频繁地调整量化参数;在神经网络训练或微调的中期和后期,可以间隔多次迭代或训练周期再调整量化参数。本披露的方法即是通过确定合适的迭代间隔,以取得量化精度和量化效率的平衡。
具体地,处理器可以通过待量化数据的数据变动幅度,确定目标迭代间隔,以根据该目标迭代间隔调整神经网络运算中的量化参数。可选地,该目标迭代间隔可以随着待量化数据的数据变动幅度的减小而增大。也就是说,该待量化数据的数据变动幅度越大时,则该目标迭代间隔越小,表明量化参数的调整越频繁。该待量化数据的数据变动幅度越小时,则该目标迭代间隔越大,表明量化参数的调整越不频繁。当然,在其他实施例中,上述的目标迭代间隔还可以是超参数,例如,该目标迭代间隔可以是用户自定义设置的。
可选地,上述的权值数据、神经元数据及梯度数据等各种待量化数据可以分别具有的不同的迭代间隔。相应地,处理器可以分别获取各种待量化数据对应的数据变动幅度,以分别根据每种待量化数据的数据变动幅度,确定相应种类的待量化数据对应的目标迭代间隔。也就是说,各种待量化数据的量化过程可以是异步进行的。本披露实施例中,由于不同种类的待量化数据之间具有差异性,因此可以采用不同的待量化数据的数据变动幅度,确定相应的目标迭代间隔,并分别根据相应的目标迭代间隔确定对应的量化参数,从而可以保证待量化数据的量化精度,进而保证神经网络的运算结果的正确性。
当然,在其他实施例中,针对不同种类的待量化数据还可以确定相同的目标迭代间隔,以根据该目标迭代间隔调整相应待量化数据对应的量化参数。例如,处理器可以分别获取各种待量化数据的数据变动幅度,并根据最大的待量化数据的数据变动幅度确定目标迭代间隔,并根据该目标迭代间隔分别确定各种待量化数据的量化参数。更进一步地,不同种类的待量化数据还可以采用相同的量化参数。
进一步可选地,上述的神经网络可以包括至少一个运算层,该待量化数据可以是各个运算层涉及的神经元数据、权值数据或梯度数据中的至少一种。此时,处理器可以获得当前运算层涉及的待量化数据,并根据上述方法确定当前运算层中各种待量化数据的数据变动幅度及对应的目标迭代间隔。
可选地,处理器可以在每次迭代运算过程中均确定一次上述的待量化数据的数据变动幅度,并根据相应的待量化数据的数据变动幅度确定一次目标迭代间隔。也就是说,处理器可以在每次迭代均计算一次目标迭代间隔。具体的目标迭代间隔的计算方式可参见下文中的描述。进一步地,处理器可以根据预设条件从各次迭代中选定检验迭代,在各次检验迭代处确定待量化数据的变动幅度,并根据检验迭代对应的目标迭代间隔对量化参数等的更新调整。此时,若该迭代不是选定检验迭代,处理器可以忽略该迭代对应的目标迭代间隔。
可选地,每个目标迭代间隔可以对应一检验迭代,该检验迭代可以是该目标迭代间隔 的起始迭代,也可以是该目标迭代间隔的终止迭代。处理器可以在各个目标迭代间隔的检验迭代处调整神经网络的量化参数,以实现根据目标迭代间隔调整神经网络运算的量化参数。其中,检验迭代可以是用于核查当前量化参数是否满足待量化数据的需求的时间点。该调整前的量化参数可以与调整后的量化参数相同,也可以与调整后的量化参数不同。可选地,相邻的检验迭代之间的间隔可以大于或等于一个目标迭代间隔。
例如,该目标迭代间隔可以从当前检验迭代开始计算迭代数量,该当前检验迭代可以是该目标迭代间隔的起始迭代。例如,当前检验迭代为第100次迭代,处理器根据待量化数据的数据变动幅度,确定目标迭代间隔的迭代间隔为3,则处理器可以确定该目标迭代间隔包括3次迭代,分别为第100次迭代、第101次迭代和第102次迭代。处理器可以在该第100次迭代处调整神经网络运算中的量化参数。其中,当前检验迭代是处理器当前执行量化参数更新调整时对应的迭代运算。
可选地,目标迭代间隔还可以是从当前检验迭代的下一次迭代开始计算迭代数量,该当前检验迭代可以是当前检验迭代之前的上一迭代间隔的终止迭代。例如,当前检验迭代为第100次迭代,处理器根据待量化数据的数据变动幅度,确定目标迭代间隔的迭代间隔为3,则处理器可以确定该目标迭代间隔包括3次迭代,分别为第101次迭代、第102次迭代和第103次迭代。处理器可以在该第100次迭代和第103次迭代处调整神经网络运算中的量化参数。本披露对目标迭代间隔的确定方式不做具体限定。
在一个实施例中,根据上文中点位置、缩放系数及偏移量的计算公式可以看出,量化参数往往与待量化数据相关,因此,上述操作S100中,待量化数据的数据变动幅度也可以通过量化参数的变动幅度间接确定,该待量化数据的数据变动幅度可以通过量化参数的变动幅度进行表征。具体地,如图3-6所示,上述操作S100可以包括:
S110、获取点位置的变动幅度;其中,所述点位置的变动幅度能够用于表征所述待量化数据的数据变动幅度,所述点位置的变动幅度与所述待量化数据的数据变动幅度正相关。
可选地,点位置的变动幅度能够间接反应待量化数据的变动幅度。该点位置的变动幅度可以是根据当前检验迭代的点位置和至少一次历史迭代的点位置确定的。其中,当前检验迭代的点位置及各次历史迭代的点位置可以根据公式(2)进行确定。当然,当前检验迭代的点位置及各次历史迭代的点位置还可以根据公式(14)进行确定。
例如,处理器还可以计算当前检验迭代的点位置和历史迭代的点位置的方差等,并根据该方差确定点位置的变动幅度。再如,处理器可以根据当前检验迭代的点位置和历史迭代的点位置的平均值,确定点位置的变动幅度。具体地,如图3-7所示,上述操作S110可以包括:
S111、根据所述当前检验迭代之前的上一检验迭代对应的点位置,以及所述上一检验迭代之前的历史迭代对应的点位置,确定第一均值。其中,上一检验迭代为上一次调整所述量化参数时对应的迭代,上一检验迭代与所述当前检验迭代之间间隔至少一个迭代间隔。
可选地,至少一次历史迭代可以分属于至少一个迭代间隔中,每个迭代间隔可以对应有一个检验迭代,相邻的两个检验迭代可以具有一个迭代间隔。上述操作S111中的上一 检验迭代可以是目标迭代间隔之前的上一迭代间隔对应的检验迭代。
可选地,该第一均值可以按照如下公式进行计算:
M1=a1×s
t-1+a2×s
t-2+a3×s
t-3+…+am×s
1 公式(26)
其中,a1~am是指各次迭代的点位置对应的计算权重,s
t-1是指上一检验迭代对应的点位置,s
t-2,s
t-3…s
1是指上一检验迭代之前的历史迭代对应的点位置,M1是指上述的第一均值。进一步地,根据数据的分布特性,历史迭代与该上一检验迭代距离越远,对该上一检验迭代附近的迭代的点位置的分布及变动幅度影响越小,因此,上述计算权重可以按照a1~am的顺序依次减小。
例如,上一检验迭代为神经网络运算的第100次迭代,历史迭代可以是第1次迭代至第99次迭代,则处理器可以获得该第100次迭代的点位置(即s
t-1),并获得该第100次迭代之前的历史迭代的点位置,即s
1可以指神经网络的第1次迭代对应的点位置……,s
t-3可以指神经网络的第98次迭代对应的点位置,s
t-2可以指神经网络的第99次迭代对应的点位置。进一步地,处理器可以根据上述公式计算获得第一均值。
更进一步地,该第一均值可以根据各个迭代间隔对应的检验迭代的点位置进行计算。例如,该第一均值可以按照如下公式进行计算:
M1=a1×s
t-1+a2×s
t-2+a3×s
t-3+…+am×s
1;
其中,a1~am是指各次检验迭代的点位置对应的计算权重,s
t-1是指上一检验迭代对应的点位置,s
t-2,s
t-3…s
1是指上一检验迭代之前的预设数量的迭代间隔的检验迭代对应的点位置,M1是指上述的第一均值。
例如,上一检验迭代为神经网络运算的第100次迭代,历史迭代可以是第1次迭代至第99次迭代,该99次历史迭代可以分属于11个迭代间隔。比如,第1次迭代至第9次迭代属于第1个迭代间隔,第10次迭代至第18次迭代属于第2个迭代间隔,……,第90次迭代至第99次迭代属于第11个迭代间隔。则处理器可以获得该第100次迭代的点位置(即s
t-1),并获得该第100次迭代之前的迭代间隔中检验迭代的点位置,即s
1可以指神经网络的第1个迭代间隔的检验迭代对应的点位置(比如s
1可以指神经网络的第1次迭代对应的点位置),……,s
t-3可以指神经网络的第10个迭代间隔的检验迭代对应的点位置(比如s
t-3可以指神经网络的第81次迭代对应的点位置),s
t-2可以指神经网络的第11个迭代间隔的检验迭代对应的点位置(比如,s
t-2可以指神经网络的第90次迭代对应的点位置)。进一步地,处理器可以根据上述公式计算获得第一均值M1。
本披露实施例中,为方便举例说明,假定该迭代间隔包含的迭代数量相同。而在实际使用过程中,该迭代间隔包含的迭代数量可以不相同。可选地,该迭代间隔包含的迭代数量随迭代的增加而增加,即随着神经网络训练或微调的进行,迭代间隔可以越来越大。
再进一步地,为进一步简化计算,降低数据占用的存储空间,上述第一均值M1可以采用如下公式进行计算:
M1=α×s
t-1+(1-α)×M0 公式(27)
其中,α是指上一检验迭代对应的点位置的计算权重,s
t-1是指上一检验迭代对应的 点位置,M0是指该上一检验迭代之前的检验迭代对应的滑动平均值,该M0的具体计算方式可参照上述的M1的计算方式,此处不再赘述。
S112、根据当前检验迭代对应的点位置及所述当前检验迭代之前的历史迭代的点位置,确定第二均值。其中,当前检验迭代对应的点位置可以根据当前检验迭代的目标数据位宽和待量化数据确定。
可选地,该第二均值M2可以按照如下公式进行计算:
M2=b1×s
t+b2×s
t-1+b3×s
t-2+…+bm×s
1 公式(28)
其中,b1~bm是指各次迭代的点位置对应的计算权重,s
t是指当前检验迭代对应的点位置,s
t-1,s
t-2…s
1是指当前检验迭代之前的历史迭代对应的点位置,M2是指上述的第二均值。进一步地,根据数据的分布特性,历史迭代与该当前检验迭代距离越远,对该当前检验迭代附近的迭代的点位置的分布及变动幅度影响越小,因此,上述计算权重可以按照b1~bm的顺序依次减小。
例如,当前检验迭代为神经网络运算的第101次迭代,该当前检验迭代之前的历史迭代是指第1次迭代至第100次迭代。则处理器可以获得该第101次迭代的点位置(即s
t),并获得该第101次迭代之前的历史迭代的点位置,即s
1可以指神经网络的第1次迭代对应的点位置……,s
t-2可以指神经网络的第99次迭代对应的点位置,s
t-1可以指神经网络的第100次迭代对应的点位置。进一步地,处理器可以根据上述公式计算获得第二均值M2。
可选地,该第二均值可以根据各个迭代间隔对应的检验迭代的点位置进行计算。具体地,如图3-8所示,上述操作S112可以包括如下操作:
S1121、获取预设数量的中间滑动平均值,其中,各个所述中间滑动平均值是根据所述当前检验迭代之前所述预设数量的检验迭代确定,所述检验迭代为调整所述神经网络量化过程中的参数时对应的迭代;
S1122、根据所述当前检验迭代的点位置以及所述预设数量的中间滑动平均值,确定所述第二均值。
例如,该第二均值可以按照如下公式进行计算:
M2=b1×s
t+b2×s
t-1+b3×s
t-2+…+bm×s
1;
其中,b1~bm是指各次迭代的点位置对应的计算权重,s
t是指当前检验迭代对应的点位置,s
t-1,s
t-2…s
1是指当前检验迭代之前的检验迭代对应的点位置,M2是指上述的第二均值。
例如,当前检验迭代为第100次迭代,历史迭代可以是第1次迭代至第99次迭代,该99次历史迭代可以分属于11个迭代间隔。比如,第1次迭代至第9次迭代属于第1个迭代间隔,第10次迭代至第18次迭代属于第2个迭代间隔,……,第90次迭代至第99次迭代属于第11个迭代间隔。则处理器可以获得该第100次迭代的点位置(即s
t),并获得该第100次迭代之前的迭代间隔中检验迭代的点位置,即s
1可以指神经网络的第1个迭代间隔的检验迭代对应的点位置(比如s
1可以指神经网络的第1次迭代对应的点位置),……,s
t-2可以指神经网络的第10个迭代间隔的检验迭代对应的点位置(比如s
t-2可 以指神经网络的第81次迭代对应的点位置),s
t-1可以指神经网络的第11个迭代间隔的检验迭代对应的点位置(比如,s
t-1可以指神经网络的第90次迭代对应的点位置)。进一步地,处理器可以根据上述公式计算获得第二均值M2。
本披露实施例中,为方便举例说明,假定该迭代间隔包含的迭代数量相同。而在实际使用过程中,该迭代间隔包含的迭代数量可以不相同。可选地,该迭代间隔包含的迭代数量随迭代的增加而增加,即随着神经网络训练或微调的进行,迭代间隔可以越来越大。
更进一步地,为简便计算,降低数据占用的存储空间,处理器可以根据所述当前检验迭代对应的点位置以及所述第一均值,确定所述第二均值,即上述第二均值可以采用如下公式进行计算:
M2=β×s
t+(1-β)×M1 公式(29)
其中,β是指当前检验迭代对应的点位置的计算权重,M1是指上述的第一均值。
S113、根据所述第一均值和所述第二均值确定第一误差,所述第一误差用于表征所述当前检验迭代及所述历史迭代的点位置的变动幅度。
可选地,第一误差可以等于第二均值与上述的第一均值之间的差值的绝对值。具体地,上述的第一误差可以按照如下公式进行计算:
diff
update1=|M2-M1|=β|s
(t)-M1| 公式(30)
可选地,上述的当前检验迭代的点位置可以根据当前检验迭代的待量化数据和当前检验迭代对应的目标数据位宽确定,具体的点位置计算方式可以参见上文的公式(2)或公式(14)。其中,上述当前检验迭代对应的目标数据位宽可以是超参数。进一步可选地,该当前检验迭代对应的目标数据位宽可以是用户自定义输入的。可选地,在神经网络训练或微调过程中的待量化数据对应的数据位宽可以是不变的,即同一神经网络的同种待量化数据采用同一数据位宽进行量化,例如,针对该神经网络在各次迭代中的神经元数据均采用8比特的数据位宽进行量化。
可选地,神经网络训练或微调过程中的待量化数据对应的数据位宽为可变的,以保证数据位宽能够满足待量化数据的量化需求。也就是说,处理器可以根据待量化数据,自适应的调整该待量化数据对应的数据位宽,获得该待量化数据对应的目标数据位宽。具体地,处理器可以首先确定当前检验迭代对应的目标数据位宽,之后,处理器可以根据该当前检验迭代对应的目标数据位宽及该当前检验迭代对应的待量化数据,确定当前检验迭代对应的点位置。
具体地,如图3-9所示,上述操作S110可以包括:
S114、根据所述当前检验迭代的待量化数据和所述当前检验迭代的量化数据,确定量化误差,其中,所述当前检验迭代的量化数据是通过对所述当前检验迭代的待量化数据进行量化获得。
可选地,上述处理器可以采用初始数据位宽对待量化数据进行量化,获得上述的量化数据。该当前检验迭代的初始数据位宽可以是超参数,该当前检验迭代的初始数据位宽也可以是根据该当前检验迭代之前的上一检验迭代的待量化数据确定的。
具体地,处理器可以根据当前检验迭代的待量化数据和当前检验迭代的量化数据,确定中间表示数据。可选地,所述中间表示数据与上述的待量化数据的表示格式一致。例如,处理器可以对上述的量化数据进行反量化,获得与待量化数据的表示格式一致的中间表示数据,其中,反量化是指量化的逆过程。例如,该量化数据可以采用上述公式(3)获得,处理器还可以按照上述公式(4)对量化数据进行反量化,获得相应的中间表示数据,并根据待量化数据和中间表示数据确定量化误差。
进一步地,处理器可以根据待量化数据及其对应的中间表示数据计算获得量化误差。设当前检验迭代的待量化数据为F
x=[z
1,z
2…,z
m],该待量化数据对应的中间表示数据为F
x1=[z
1
(n),z
2
(n)…,z
m
(n)]。处理器可以根据该待量化数据F
x及其对应的中间表示数据F
x1确定误差项,并根据该误差项确定量化误差。
可选地,处理器可以根据中间表示数据F
x1中各元素的和,以及待量化数据F
x中各元素的和确定上述的误差项,该误差项可以是中间表示数据F
x1中各元素的和与待量化数据F
x中各元素的和的差值。之后,处理器可以根据该误差项确定量化误差。具体的量化误差可以按照如下公式进行确定:
其中,z
i为待量化数据中的元素,z
i
(n)为中间表示数据F
x1的元素。
可选地,处理器可以分别计算待量化数据中各元素与中间表示数据F
x1中相应元素的差值,获得m个差值,并将该m个差值的和作为误差项。之后,处理器可以根据该误差项确定量化误差。具体的量化误差可以按照如下公式确定:
其中,z
i为待量化数据中的元素,z
i
(n)为中间表示数据F
x1的元素。
可选地,上述待量化数据中各元素与中间表示数据F
x1中相应元素的差值可以约等于2
s-1,因此,上述量化误差还可以按照如下公式确定:
其中,m为目标数据对应的中间表示数据F
x1的数量,s为点位置,z
i为待量化数据中的元素。
可选地,所述中间表示数据也可以与上述的量化数据的数据表示格式一致,并根据该中间表示数据和量化数据确定量化误差。例如,待量化数据可以表示为:F
x≈I
x×2
s,则可以确定出中间表示数据
该中间表示数据I
x1可以与上述的量化数据具有相同的数据表示格式。此时处理器可以根据中间表示数据I
x1和上述公式(3)计算获得的
确定量化误差。具体的量化误差确定方式可参照上述的公式(31)~公式(33)。
S115、根据所述量化误差,确定所述当前检验迭代对应的目标数据位宽。
具体地,处理器可以根据该量化误差,自适应地调整当前检验迭代对应的数据位宽, 确定该当前检验迭代调整后的目标数据位宽。当该量化误差满足预设条件时,则可以保持当前检验迭代对应的数据位宽不变,即该当前检验迭代的目标数据位宽可以等于初始数据位宽。当量化误差不满足预设条件时,处理器可以调整当前检验迭代的待量化数据对应的数据位宽,获得当前检验迭代对应的目标数据位宽。当处理器采用该目标数据位宽对当前检验迭代的待量化数据进行量化时,量化误差满足上述的预设条件。可选地,上述的预设条件可以是用户设置的预设阈值。
可选地,如图3-10所示,上述操作S115可以包括:
S1150、处理器可以判断上述的量化误差是否大于或等于第一预设阈值。
若所述量化误差大于或等于第一预设阈值,则可以执行操作S1151,增大所述当前检验迭代对应的数据位宽,获得当前检验迭代的目标数据位宽。当量化误差小于第一预设阈值时,则可以保持当前检验迭代的数据位宽不变。
进一步可选地,处理器可以经过一次调整获得上述的目标数据位宽。例如,当前检验迭代的初始数据位宽为n1,处理器可以经一次调整确定该目标数据位宽n2=n1+t,其中,t为数据位宽的调整值。其中,采用该目标数据位宽n2对当前检验迭代的待量化数据进行量化时,获得的量化误差可以小于所述第一预设阈值。
进一步可选地,处理器可以经过多次调整获得目标数据位宽,直至量化误差小于第一预设阈值,并将该量化误差小于第一预设阈值时的数据位宽作为目标数据位宽。具体地,若所述量化误差大于或等于第一预设阈值,则根据第一预设位宽步长确定第一中间数据位宽;之后处理器可以根据该第一中间数据位宽对当前检验迭代的待量化数据进行量化,获得量化数据,并根据所述当前检验迭代中待量化数据和所述当前检验迭代的量化数据,确定量化误差,直至所述量化误差小于所述第一预设阈值。处理器可以将该量化误差小于第一预设阈值时对应的数据位宽,作为该目标数据位宽。
例如,当前检验迭代的初始数据位宽为n1,处理器可以采用该初始数据位宽n1对当前检验迭代的待量化数据A进行量化,获得量化数据B1,并根据该待量化数据A和量化数据B1计算获得量化误差C1。在量化误差C1大于或等于第一预设阈值时,处理器确定第一中间数据位宽n2=n1+t1,其中,t1为第一预设位宽步长。之后,处理器可以根据该第一中间数据位宽n2对当前检验迭代的待量化数据进行量化,获得当前检验迭代的量化数据B2,并根据该待量化数据A和量化数据B2计算获得量化误差C2。若该量化误差C2大于或等于第一预设阈值时,处理器确定第一中间数据位宽n2=n1+t1+t1,之后根据该新的第一中间数据位宽对当前检验迭代的待量化数据A进行量化,并计算相应的量化误差,直至量化误差小于第一预设阈值。若量化误差C1小于第一预设阈值,则可以保持该初始数据位宽n1不变。
更进一步地,上述的第一预设位宽步长可以是恒定值,例如,每当量化误差大于第一预设阈值时,则处理器可以将当前检验迭代对应的数据位宽增大相同的位宽值。可选地,上述的第一预设位宽步长也可以是可变值,例如,处理器可以计算量化误差与第一预设阈值的差值,若该量化误差与第一预设阈值的差值越小,则第一预设位宽步长的值越小。
可选地,如图3-11所示,上述操作S115还可以包括:
S1152、处理器可以判断上述的量化误差是否小于或等于第一预设阈值。
若所述量化误差小于或等于第二预设阈值,则可以执行操作S1153,减小所述当前检验迭代对应的数据位宽,获得当前检验迭代的目标数据位宽。当量化误差大于第二预设阈值时,则可以保持当前检验迭代的数据位宽不变。
进一步可选地,处理器可以经过一次调整获得上述的目标数据位宽。例如,当前检验迭代的初始数据位宽为n1,处理器可以经一次调整确定该目标数据位宽n2=n1-t,其中,t为数据位宽的调整值。其中,采用该目标数据位宽n2对当前检验迭代的待量化数据进行量化时,获得的量化误差可以大于所述第二预设阈值。
进一步可选地,处理器可以经过多次调整获得目标数据位宽,直至量化误差大于第二预设阈值,并将该量化误差大于第二预设阈值时的数据位宽作为目标数据位宽。具体地,若所述量化误差小于或等于第一预设阈值,则根据第二预设位宽步长确定第二中间数据位宽;之后处理器可以根据该第二中间数据位宽对当前检验迭代的待量化数据进行量化,获得量化数据,并根据所述当前检验迭代中待量化数据和所述当前检验迭代的量化数据,确定量化误差,直至所述量化误差大于所述第二预设阈值。处理器可以将该量化误差大于第二预设阈值时对应的数据位宽,作为该目标数据位宽。
例如,当前检验迭代的初始数据位宽为n1,处理器可以采用该初始数据位宽n1对当前检验迭代的待量化数据A进行量化,获得量化数据B1,并根据该待量化数据A和量化数据B1计算获得量化误差C1。在量化误差C1小于或等于第二预设阈值时,处理器确定第二中间数据位宽n2=n1-t2,其中,t2为第二预设位宽步长。之后,处理器可以根据该第二中间数据位宽n2对当前检验迭代的待量化数据进行量化,获得当前检验迭代的量化数据B2,并根据该待量化数据A和量化数据B2计算获得量化误差C2。若该量化误差C2小于或等于第二预设阈值时,处理器确定第二中间数据位宽n2=n1-t2-t2,之后根据该新的第二中间数据位宽对当前检验迭代的待量化数据A进行量化,并计算相应的量化误差,直至量化误差大于第二预设阈值。若量化误差C1大于第二预设阈值,则可以保持该初始数据位宽n1不变。
更进一步地,上述的第二预设位宽步长可以是恒定值,例如,每当量化误差小于第二预设阈值时,则处理器可以将当前检验迭代对应的数据位宽减小相同的位宽值。可选地,上述的第二预设位宽步长也可以是可变值,例如,处理器可以计算量化误差与第二预设阈值的差值,若该量化误差与第二预设阈值的差值越小,则第二预设位宽步长的值越小。
可选地,如图3-12所示,当处理器确定量化误差小于第一预设阈值,且量化误差大于第二预设阈值时,可以保持当前检验迭代的数据位宽不变,其中,第一预设阈值大于第二预设阈值。即当前检验迭代的目标数据位宽可以等于初始数据位宽。其中,图3-12中仅以举例的方式说明本披露一实施例的数据位宽确定方式,图3-12中各个操作的顺序可以适应性调整,此处并不做具体限定。
本披露实施例中,由于当前检验迭代的数据位宽发生变化时,会相应的带来点位置的 变化。但此时点位置的变化并非是待量化数据的数据变动引起的,根据上述公式(30)确定的第一误差计算获得的目标迭代间隔可能不准确,从而会影响量化的精度。因此,在当前检验迭代的数据位宽发生变化时,可以相应的调整上述的第二均值,以保证第一误差能够准确的反映点位置的变动幅度,进而保证目标迭代间隔的准确性和可靠性。具体地,如图3-13所示,上述方法还可以包括:
S116、根据所述目标数据位宽,确定所述当前检验迭代的数据位宽调整值;
具体地,处理器可以根据当前检验迭代的目标数据位宽和初始数据位宽,确定当前检验迭代的数据位宽调整值。其中,该数据位宽调整值=目标数据位宽-初始数据位宽。当然,处理器还可以直接获得当前检验迭代的数据位宽调整值。
S117、根据所述当前检验迭代的数据位宽调整值,更新上述的第二均值。
具体地,若数据位宽调整值大于预设参数(例如,该预设参数可以等于零)时,即当前检验迭代的数据位宽增加时,处理器可以相应地减少第二均值。若数据位宽调整值小于预设参数(例如,该预设参数可以等于零)时,即当前检验迭代的数据位宽减少时,处理器可以相应地增加第二均值。若数据位宽调整值等于预设参数,即当数据位宽调整值等于0时,此时当前迭代对应的待量化数据未发生改变,更新后的第二均值等于更新前的第二均值,该更新前的第二均值根据上述公式(29)计算获得。可选地,若数据位宽调整值等于预设参数,即当数据位宽调整值等于0时,处理器可以不更新第二均值,即处理器可以不执行上述操作S117。
例如,更新前的第二均值M2=β×s
t+(1-β)×M1;当前检验迭代对应的目标数据位宽n2=初始数据位宽n1+Δn时,其中,Δn表示数据位宽调整值。此时,更新后的第二均值M2=β×(s
t-Δn)+(1-β)×(M1-Δn)。当前检验迭代对应的目标数据位宽n2=初始数据位宽n1-Δn时,其中,Δn表示数据位宽调整值,此时,更新后的第二均值M2=β×(s
t-Δn)+(1-β)×(M1+Δn),其中,s
t是指当前检验迭代是根据目标数据位宽确定的点位置。
再如,更新前的第二均值M2=β×s
t+(1-β)×M1;当前检验迭代对应的目标数据位宽n2=初始数据位宽n1+Δn时,其中,Δn表示数据位宽调整值。此时,更新后的第二均值M2=β×s
t+(1-β)×M1-Δn。再如,当前检验迭代对应的目标数据位宽n2=初始数据位宽n1-Δn时,其中,Δn表示数据位宽调整值,此时,更新后的第二均值M2=β×s
t+(1-β)×M1+Δn,其中,s
t是指当前检验迭代是根据目标数据位宽确定的点位置。
进一步地,如图3-6所示,上述操作S200可以包括:
S210、根据点位置的变动幅度,确定目标迭代间隔,其中,该目标迭代间隔与上述的点位置的变动幅度负相关。即上述的点位置的变动幅度越大,则该目标迭代间隔越小。上述的点位置的变动幅度越小,则该目标迭代间隔越大。
如上所述,上述的第一误差可以表征点位置的变动幅度,因此,如图3-7所示,上述操作S210可以包括:
S211、处理器可以根据所述第一误差确定所述目标迭代间隔,其中,目标迭代间隔与所述第一误差负相关。即第一误差越大,则说明点位置的变化幅度越大,进而表明待量化数据的数据变动幅度越大,此时,目标迭代间隔越小。
具体地,处理器可以根据以下公式计算得到目标迭代间隔I:
其中,I为目标迭代间隔,diff
update1表示上述的第一误差,δ和γ可以为超参数。
可以理解的是,第一误差可以用于衡量点位置的变动幅度,第一误差越大,表明点位置的变动幅度越大,进而说明待量化数据的数据变动幅度越大,目标迭代间隔需要设置得越小。也就是说,第一误差越大,量化参数的调整越频繁。
在本实施例中,通过计算点位置的变动幅度(第一误差),并根据点位置的变动幅度确定目标迭代间隔。由于量化参数根据目标迭代间隔确定,也就使得根据量化参数进行量化得到的量化数据,能够更加符合目标数据的点位置的变动趋势,在保证量化精度的同时,提高神经网络的运行效率。
可选地,处理器在当前检验迭代处确定目标迭代间隔后,可以进一步在当前检验迭代处确定目标迭代间隔对应的量化参数和数据位宽等参数,从而根据目标迭代间隔更新量化参数。其中,量化参数可以包括点位置和/或缩放系数。进一步地,该量化参数还可以包括偏移量。该量化参数的具体计算方式可参见上文中的描述。如图3-14所示,上述方法还可以包括:
S300、处理器根据目标迭代间隔调整神经网络运算中的量化参数。
具体地,处理器可以根据目标迭代间隔确定检验迭代,并在各个检验迭代处更新目标迭代间隔,还可以在各个检验迭代处更新量化参数。例如,神经网络运算中的数据位宽保持不变,此时,处理器可以在各个检验迭代处直接根据检验迭代的待量化数据,调整点位置等量化参数。再如,神经网络运算中的数据位宽可变,此时,处理器可以在各个检验迭代处更新数据位宽,并根据更新后的数据位宽和该检验迭代的待量化数据,调整点位置等量化参数。
本披露实施例中,处理器在各个检验迭代处更新量化参数,以保证当前量化参数满足待量化数据的量化需求。其中,更新前的目标迭代间隔与更新后的目标迭代间隔可以相同,也可以不同。更新前的数据位宽与更新后的数据位宽可以相同,也可以不同;即不同迭代间隔的数据位宽可以相同,也可以不同。更新前的量化参数与更新后的量化参数可以相同,也可以不同;即不同迭代间隔的量化参数可以相同,也可以不同。
可选地,上述操作S300中,处理器可以在检验迭代处确定目标迭代间隔中的量化参数,以调整神经网络运算中的量化参数。
在一种情况下,该神经网络运算中的各次迭代对应的数据位宽均不发生变化,即该神经网络运算中各次迭代对应的数据位宽均相同,此时,处理器可以通过确定目标迭代间隔中的点位置等量化参数,实现根据目标迭代间隔对神经网络运算中的量化参数的调整的目的。其中,该目标迭代间隔中迭代对应的量化参数可以是一致的。也就是说,目标迭代间 隔中的各次迭代均采用同一点位置,仅在各次检验迭代处更新确定点位置等量化参数,从而可以避免每次迭代都对量化参数进行更新调整,从而减少了量化过程中的计算量,提高了量化操作的效率。
可选地,针对上述数据位宽不变的情况,目标迭代间隔中迭代对应的点位置可以保持一致。具体地,处理器可以根据当前检验迭代的待量化数据和该当前检验迭代对应的目标数据位宽,确定当前检验迭代对应的点位置,并将该当前检验迭代对应的点位置作为该目标迭代间隔对应的点位置,该目标迭代间隔中迭代均沿用当前检验迭代对应的点位置。可选地,该当前检验迭代对应的目标数据位宽可以是超参数。例如,该当前检验迭代对应的目标数据位宽是由用户自定义输入的。该当前检验迭代对应的点位置可以参见上文的公式(2)或公式(14)计算。
在一种情况下,该神经网络运算中的各次迭代对应的数据位宽可以发生变化,即不同目标迭代间隔对应的数据位宽可以不一致,但目标迭代间隔中各次迭代的数据位宽保持不变。其中,该目标迭代间隔中迭代对应的数据位宽可以是超参数,例如,该目标迭代间隔中迭代对应的数据位宽可以是用户自定义输入的。在一种情况下,该目标迭代间隔中迭代对应的数据位宽也可以是处理器计算获得的,例如,处理器可以根据当前检验迭代的待量化数据,确定当前检验迭代对应的目标数据位宽,并将该当前检验迭代对应的目标数据位宽作为目标迭代间隔对应的数据位宽。
此时,为简化量化过程中的计算量,该目标迭代间隔中对应的点位置等量化参数也可以保持不变。也就是说,目标迭代间隔中的各次迭代均采用同一点位置,仅在各次检验迭代处更新确定点位置等量化参数以及数据位宽,从而可以避免每次迭代都对量化参数进行更新调整,从而减少了量化过程中的计算量,提高了量化操作的效率。
可选地,针对上述目标迭代间隔对应的数据位宽不变的情况,目标迭代间隔中迭代对应的点位置可以保持一致。具体地,处理器可以根据当前检验迭代的待量化数据和该当前检验迭代对应的目标数据位宽,确定当前检验迭代对应的点位置,并将该当前检验迭代对应的点位置作为该目标迭代间隔对应的点位置,该目标迭代间隔中迭代均沿用当前检验迭代对应的点位置。可选地,该当前检验迭代对应的目标数据位宽可以是超参数。例如,该当前检验迭代对应的目标数据位宽是由用户自定义输入的。该当前检验迭代对应的点位置可以参见上文的公式(2)或公式(14)计算。
可选地,目标迭代间隔中迭代对应的缩放系数可以一致。处理器可以根据当前检验迭代的待量化数据,确定当前检验迭代对应的缩放系数,并将该当前检验迭代对应的缩放系数作为目标迭代间隔中各次迭代的缩放系数。其中,该目标迭代间隔中迭代对应的缩放系数一致。
可选地,目标迭代间隔中迭代对应的偏移量一致。处理器可以根据当前检验迭代的待量化数据,确定当前检验迭代对应的偏移量,并将该当前检验迭代对应的偏移量作为目标迭代间隔中各次迭代的偏移量。进一步地,处理器还可以确定待量化数据所有元素中的最小值和最大值,并进一步确定点位置和缩放系数等量化参数,具体可参见上文中的描述。 该目标迭代间隔中迭代对应的偏移量一致。
例如,该目标迭代间隔可以从当前检验迭代开始计算迭代数量,即目标迭代间隔对应的检验迭代可以是目标迭代间隔的起始迭代。例如,当前检验迭代为第100次迭代,处理器根据待量化数据的数据变动幅度,确定目标迭代间隔的迭代间隔为3,则处理器可以确定该目标迭代间隔包括3次迭代,分别为第100次迭代、第101次迭代和第102次迭代。进而处理器可以根据第100次迭代对应的待量化数据和目标数据位宽,确定该第100次迭代对应的点位置等量化参数,并可以采用该第100次迭代对应的点位置等量化参数对第100次迭代、第101次迭代和第102次迭代进行量化。这样,处理器在第101次迭代和第102次迭代无需计算点位置等量化参数,减少了量化过程中的计算量,提高了量化操作的效率。
可选地,目标迭代间隔还可以是从当前检验迭代的下一次迭代开始计算迭代数量,即该目标迭代间隔对应的检验迭代也可以是该目标迭代间隔的终止迭代。例如,当前检验迭代为第100次迭代,处理器根据待量化数据的数据变动幅度,确定目标迭代间隔的迭代间隔为3。则处理器可以确定该目标迭代间隔包括3次迭代,分别为第101次迭代、第102次迭代和第103次迭代。进而处理器可以根据第100次迭代对应的待量化数据和目标数据位宽,确定该第100次迭代对应的点位置等量化参数,并可以采用该第100次迭代对应的点位置等量化参数对第101次迭代、第102次迭代和第103次迭代进行量化。这样,处理器在第102次迭代和第103次迭代无需计算点位置等量化参数,减少了量化过程中的计算量,提高了量化操作的效率。
本披露实施例中,同一目标迭代间隔中各次迭代对应的数据位宽及量化参数均一致,即同一目标迭代间隔中各次迭代对应的数据位宽、点位置、缩放系数及偏移量均保持不变,从而在神经网络的训练或微调过程中,可以避免频繁地调整待量化数据的量化参数,减少了量化过程中的计算量,从而可以提高量化效率。并且,通过在训练或微调的不同阶段根据数据变动幅度,动态地调整量化参数,可以保证量化精度。
在另一情况下,该神经网络运算中的各次迭代对应的数据位宽可以发生变化,但目标迭代间隔中各次迭代的数据位宽保持不变。此时,目标迭代间隔中迭代对应的点位置等量化参数也可以不一致。处理器还可以根据当前检验迭代对应的目标数据位宽,确定目标迭代间隔对应的数据位宽,其中,目标迭代间隔中迭代对应的数据位宽一致。之后,处理器可以根据该目标迭代间隔对应的数据位宽和点位置迭代间隔,调整神经网络运算过程中的点位置等量化参数。可选地,如图3-15所示,上述操作S300还可以包括:
S310、根据当前检验迭代的待量化数据,确定目标迭代间隔对应的数据位宽;其中,该目标迭代间隔中迭代对应的数据位宽一致。也就是说,神经网络运算过程中的数据位宽每隔一个目标迭代间隔更新一次。可选地,该目标迭代间隔对应的数据位宽可以为当前检验迭代的目标数据位宽。该当前检验迭代的目标数据位宽可参见上文中的操作S114和S115,此处不再赘述。
例如,该目标迭代间隔可以从当前检验迭代开始计算迭代数量,即目标迭代间隔对应 的检验迭代可以是目标迭代间隔的起始迭代。例如,当前检验迭代为第100次迭代,处理器根据待量化数据的数据变动幅度,确定目标迭代间隔的迭代间隔为6,则处理器可以确定该目标迭代间隔包括6次迭代,分别为第100次迭代至第105次迭代。此时,处理器可以确定第100次迭代的目标数据位宽,且第101次迭代至第105次迭代沿用该第100次迭代的目标数据位宽,无需在第101次迭代至第105次迭代计算目标数据位宽,从而减少计算量,提高量化效率及运算效率。之后,第106次迭代可以作为当前检验迭代,并重复上述确定目标迭代间隔,以及更新数据位宽的操作。
可选地,目标迭代间隔还可以是从当前检验迭代的下一次迭代开始计算迭代数量,即该目标迭代间隔对应的检验迭代也可以是该目标迭代间隔的终止迭代。例如,当前检验迭代为第100次迭代,处理器根据待量化数据的数据变动幅度,确定目标迭代间隔的迭代间隔为6。则处理器可以确定该目标迭代间隔包括6次迭代,分别为第101次迭代至第106次迭代。此时,处理器可以确定第100次迭代的目标数据位宽,且第101次迭代至106次迭代沿用该第100次迭代的目标数据位宽,无需在第101次迭代至106次迭代计算目标数据位宽,从而减少计算量,提高量化效率及运算效率。之后,第106次迭代可以作为当前检验迭代,并重复上述确定目标迭代间隔,以及更新数据位宽的操作。
S320、处理器根据获取的点位置迭代间隔和所述目标迭代间隔对应的数据位宽,调整所述目标迭代间隔中迭代对应的点位置,以调整所述神经网络运算中的点位置等量化参数。
其中,所述点位置迭代间隔包含至少一次迭代,所述点位置迭代间隔中迭代的点位置一致。可选地,该点位置迭代间隔可以是超参数,例如,该点位置迭代间隔可以是用户自定义输入的。
可选地,所述点位置迭代间隔小于或等于所述目标迭代间隔。当该点位置迭代间隔与上述的目标迭代间隔相同时,处理器可以在当前检验迭代处同步更新数据位宽和点位置等量化参数。进一步可选地,目标迭代间隔中迭代对应的缩放系数可以一致。更进一步地,目标迭代间隔中迭代对应的偏移量一致。此时,该目标迭代间隔中的迭代对应的数据位宽和点位置等量化参数均相同,从而可以降低计算量,提高量化效率和运算效率。具体实现过程与上述实施例基本一致,可参见上文的描述,此处不再赘述。
当点位置迭代间隔小于上述的目标迭代间隔时,处理器可以在目标迭代间隔对应的检验迭代处更新数据位宽和点位置等量化参数,并在该点位置迭代间隔确定的子检验迭代处更新点位置等量化参数。由于在数据位宽不变的情况下,点位置等量化参数可以根据待量化数据进行微调,因此,在同一目标迭代间隔内也可以对点位置等量化参数进行调整,以进一步提高量化精度。
具体地,处理器可以根据当前检验迭代和点位置迭代间隔确定子检验迭代,该子检验迭代用于调整点位置,该子检验迭代可以是目标迭代间隔中的迭代。进一步地,处理器可以根据子检验迭代的待量化数据和目标迭代间隔对应的数据位宽,调整目标迭代间隔中迭代对应的点位置,其中,点位置的确定方式可以参照上述的公式(2)或公式(14),此处不再赘述。
例如,当前检验迭代为第100次迭代,该目标迭代间隔为6,该目标迭代间隔包含的迭代为第100次迭代至第105次迭代。处理器获取的点位置迭代间隔为I
s1=3,则可以从当前检验迭代开始间隔三次迭代调整一次点位置。具体地,处理器可以将第100次迭代作为上述的子检验迭代,并计算获得该第100次迭代对应的点位置s1,在第100次迭代、第101次迭代和第102次迭代共用点位置s1进行量化。之后,处理器可以根据点位置迭代间隔I
s1将第103次迭代作为上述的子检验迭代,同时处理器还可以根据第103次迭代对应的待量化数据和目标迭代间隔对应的数据位宽n确定第二个点位置迭代间隔对应的点位置s2,则在第103次迭代至第105次迭代中可以共用上述的点位置s2进行量化。本披露实施例中,上述的更新前的点位置s1与更新后的点位置s2的值可以相同,也可以不同。进一步地,处理器可以在第106次迭代重新根据待量化数据的数据变动幅度,确定下一目标迭代间隔以及该下一目标迭代间隔对应的数据位宽及点位置等量化参数。
再如,当前检验迭代为第100次迭代,该目标迭代间隔为6,该目标迭代间隔包含的迭代为第101次迭代至第106次迭代。处理器获取的点位置迭代间隔为I
s1=3,则可以从当前检验迭代开始间隔三次迭代调整一次点位置。具体地,处理器可以根据当前检验迭代的待量化数据和当前检验迭代对应的目标数据位宽n1,确定第一个点位置迭代间隔对应的点位置为s1,则在第101次迭代、第102次迭代和103次迭代共用上述的点位置s1进行量化。之后,处理器可以根据点位置迭代间隔I
s1将第104次迭代作为上述的子检验迭代,同时处理器还可以根据第104次迭代对应的待量化数据和目标迭代间隔对应的数据位宽n1确定第二个点位置迭代间隔对应的点位置s2,则在第104次迭代至第106次迭代中可以共用上述的点位置s2进行量化。本披露实施例中,上述的更新前的点位置s1与更新后的点位置s2的值可以相同,也可以不同。进一步地,处理器可以在106次迭代重新根据待量化数据的数据变动幅度,确定下一目标迭代间隔以及该下一目标迭代间隔对应的数据位宽及点位置等量化参数。
可选地,该点位置迭代间隔可以等于1,即每次迭代均更新一次点位置。可选地,该点位置迭代间隔可以相同,也可以不同。例如,该目标迭代间隔包含的至少一个点位置迭代间隔可以是依次增大的。此处仅以举例的说明本实施例的实现方式,并不用于限定本披露。
可选地,该目标迭代间隔中迭代对应的缩放系数也可以不一致。进一步可选地,该缩放系数可以与上述的点位置同步更新,也就是说,该缩放系数对应的迭代间隔可以等于上述的点位置迭代间隔。即每当处理器更新确定点位置时,会相应地更新确定缩放系数。
可选地,该目标迭代间隔中迭代对应的偏移量也可以不一致。进一步地,该偏移量可以与上述的点位置同步更新,也就是说,该偏移量对应的迭代间隔可以等于上述的点位置迭代间隔。即每当处理器更新确定点位置时,会相应地更新确定偏移量。当然,该偏移量也可以与上述地点位置或数据位宽异步更新,此处不做具体限定。更进一步地,处理器还可以确定待量化数据所有元素中的最小值和最大值,并进一步确定点位置和缩放系数等量化参数,具体可参见上文中的描述。
在另一种实施例中,处理器可以根据点位置的变动幅度和待量化数据的数据位宽的变化,综合确定待量化数据的数据变动幅度,并根据该待量化数据的数据变动幅度确定目标迭代间隔,其中,该目标迭代间隔可以用于更新确定数据位宽,即处理器可以在每个目标迭代间隔的检验迭代处更新确定数据位宽。由于点位置可以反映定点数据的精度,数据位宽可以反映定点数据的数据表示范围,因而通过综合点位置的变动幅度和待量化数据的数据位宽变化,可以保证量化后的数据既能够兼顾精度,也能够满足数据表示范围。可选地,点位置的变化幅度可以采用上述的第一误差进行表征,数据位宽的变化可以根据上述的量化误差进行确定。具体地,如图3-16所示,上述方法可以包括:
S400、获取第一误差,第一误差能够表征点位置的变动幅度,该点位置的变动幅度可以表示待量化数据的数据变动幅度;具体地,上述第一误差的计算方式可参见上文中操作S110中的描述,此处不再赘述。
S500、获取第二误差,所述第二误差用于表征所述数据位宽的变化。
可选地,上述的第二误差可以根据量化误差进行确定,该第二误差与上述的量化误差正相关。具体地,如图3-16所示,上述操作S500可以包括:
S510、根据所述当前检验迭代中待量化数据和所述当前检验迭代的量化数据,确定量化误差,其中,所述当前检验迭代的量化数据根据初始数据位宽对所述当前检验迭代的待量化数据进行量化获得。其中,具体的量化误差确定方式可参见上文中操作S114中的描述,此处不再赘述。
S520、根据所述量化误差确定所述第二误差,所述第二误差与所述量化误差正相关。
具体地,第二误差可以按照如下公式进行计算:
diff
update2=θ*diff
bit
2 公式(34)
其中,diff
update2表示上述的第二误差,diff
bit表示上述的量化误差,θ可以为超参数。
S600、根据所述第二误差和所述第一误差,确定所述目标迭代间隔。
具体地,处理器可以根据第一误差和第二误差计算获得目标误差,并根据目标误差确定目标迭代间隔。可选地,目标误差可以是第一误差和第二误差进行加权平均计算获得。例如,目标误差=K*第一误差+(1-K)*第二误差,其中,K为超参数。之后,处理器可以根据该目标误差确定目标迭代间隔,目标迭代间隔与该目标误差负相关。即目标误差越大,目标迭代间隔越小。
可选地,该目标误差还可以根据第一误差和第二误差中的最值进行确定,此时第一误差或第二误差的权重取值为0。具体地,如图3-17所示,上述操作S600可以包括:
S610、将所述第一误差和所述第二误差中最大值作为目标误差。
具体地,处理器可以比较第一误差diff
update1和第二误差diff
update2的大小,当第一误差diff
update1大于第二误差diff
update2时,则该目标误差等于第一误差diff
update1。当第一误差diff
update1小于第二误差时,则该目标误差等于第二误差diff
update2。当第一误差diff
update1等于第二误差时,则该目标误差可以时第一误差diff
update1或第二误差diff
update2。即目标误差diff
update可以按照如下公式进行确定:
diff
update=max(diff
update1,diff
update2) 公式(35)
其中,diff
update是指目标误差,diff
update1是指第一误差,diff
update2是指第二误差。
S620、根据所述目标误差确定所述目标迭代间隔,其中,所述目标误差与所述目标迭代间隔负相关。具体地,目标迭代间隔可以按照如下方式进行确定,
可以根据以下公式计算得到目标迭代间隔:
其中,I表示目标迭代间隔,diff
update表示上述的目标误差,δ和γ可以为超参数。
可选地,上述实施例中,神经网络运算中数据位宽可变,并可以通过第二误差衡量数据位宽的变化趋势。此种情况下,如图3-17所示,处理器在确定目标迭代间隔后,可以执行操作S630,确定目标迭代间隔中迭代对应的数据位宽,其中,该目标迭代间隔中迭代对应的数据位宽一致。具体地,处理器可以根据当前检验迭代的待量化数据,确定目标迭代间隔对应的数据位宽。也就是说,神经网络运算过程中的数据位宽每隔一个目标迭代间隔更新一次。可选地,该目标迭代间隔对应的数据位宽可以为当前检验迭代的目标数据位宽。该当前检验迭代的目标数据位宽可参见上文中的操作S114和S115,此处不再赘述。
例如,该目标迭代间隔可以从当前检验迭代开始计算迭代数量,即目标迭代间隔对应的检验迭代可以是目标迭代间隔的起始迭代。例如,当前检验迭代为第100次迭代,处理器根据待量化数据的数据变动幅度,确定目标迭代间隔的迭代间隔为6,则处理器可以确定该目标迭代间隔包括6次迭代,分别为第100次迭代至第105次迭代。此时,处理器可以确定第100次迭代的目标数据位宽,且第101次迭代至第105次迭代沿用该第100次迭代的目标数据位宽,无需在第101次迭代至第105次迭代计算目标数据位宽,从而减少计算量,提高量化效率及运算效率。之后,第106次迭代可以作为当前检验迭代,并重复上述确定目标迭代间隔,以及更新数据位宽的操作。
可选地,目标迭代间隔还可以是从当前检验迭代的下一次迭代开始计算迭代数量,即该目标迭代间隔对应的检验迭代也可以是该目标迭代间隔的终止迭代。例如,当前检验迭代为第100次迭代,处理器根据待量化数据的数据变动幅度,确定目标迭代间隔的迭代间隔为6。则处理器可以确定该目标迭代间隔包括6次迭代,分别为第101次迭代至第106次迭代。此时,处理器可以确定第100次迭代的目标数据位宽,且第101次迭代至106次迭代沿用该第100次迭代的目标数据位宽,无需在第101次迭代至106次迭代计算目标数据位宽,从而减少计算量,提高量化效率及运算效率。之后,第106次迭代可以作为当前检验迭代,并重复上述确定目标迭代间隔,以及更新数据位宽的操作。
再进一步地,处理器还可以在检验迭代处确定目标迭代间隔中的量化参数,以根据目标迭代间隔调整神经网络运算中的量化参数。即该神经网络运算中的点位置等量化参数可以与数据位宽同步更新。
在一种情况下,该目标迭代间隔中迭代对应的量化参数可以是一致的。可选地,处理器可以根据当前检验迭代的待量化数据和该当前检验迭代对应的目标数据位宽,确定当前检验迭代对应的点位置,并将该当前检验迭代对应的点位置作为该目标迭代间隔对应的点 位置,其中该目标迭代间隔中迭代对应的点位置一致。也就是说,目标迭代间隔中的各次迭代均沿用当前检验迭代的点位置等量化参数,避免了每次迭代都对量化参数进行更新调整,从而减少了量化过程中的计算量,提高了量化操作的效率。
可选地,目标迭代间隔中迭代对应的缩放系数可以一致。处理器可以根据当前检验迭代的待量化数据,确定当前检验迭代对应的缩放系数,并将该当前检验迭代对应的缩放系数作为目标迭代间隔中各次迭代的缩放系数。其中,该目标迭代间隔中迭代对应的缩放系数一致。
可选地,目标迭代间隔中迭代对应的偏移量一致。处理器可以根据当前检验迭代的待量化数据,确定当前检验迭代对应的偏移量,并将该当前检验迭代对应的偏移量作为目标迭代间隔中各次迭代的偏移量。进一步地,处理器还可以确定待量化数据所有元素中的最小值和最大值,并进一步确定点位置和缩放系数等量化参数,具体可参见上文中的描述。该目标迭代间隔中迭代对应的偏移量一致。
例如,该目标迭代间隔可以从当前检验迭代开始计算迭代数量,即目标迭代间隔对应的检验迭代可以是目标迭代间隔的起始迭代。例如,当前检验迭代为第100次迭代,处理器根据待量化数据的数据变动幅度,确定目标迭代间隔的迭代间隔为3,则处理器可以确定该目标迭代间隔包括3次迭代,分别为第100次迭代、第101次迭代和第102次迭代。进而处理器可以根据第100次迭代对应的待量化数据和目标数据位宽,确定该第100次迭代对应的点位置等量化参数,并可以采用该第100次迭代对应的点位置等量化参数对第100次迭代、第101次迭代和第102次迭代进行量化。这样,处理器在第101次迭代和第102次迭代无需计算点位置等量化参数,减少了量化过程中的计算量,提高了量化操作的效率。
可选地,目标迭代间隔还可以是从当前检验迭代的下一次迭代开始计算迭代数量,即该目标迭代间隔对应的检验迭代也可以是该目标迭代间隔的终止迭代。例如,当前检验迭代为第100次迭代,处理器根据待量化数据的数据变动幅度,确定目标迭代间隔的迭代间隔为3。则处理器可以确定该目标迭代间隔包括3次迭代,分别为第101次迭代、第102次迭代和第103次迭代。进而处理器可以根据第100次迭代对应的待量化数据和目标数据位宽,确定该第100次迭代对应的点位置等量化参数,并可以采用该第100次迭代对应的点位置等量化参数对第101次迭代、第102次迭代和第103次迭代进行量化。这样,处理器在第102次迭代和第103次迭代无需计算点位置等量化参数,减少了量化过程中的计算量,提高了量化操作的效率。
本披露实施例中,同一目标迭代间隔中各次迭代对应的数据位宽及量化参数均一致,即同一目标迭代间隔中各次迭代对应的数据位宽、点位置、缩放系数及偏移量均保持不变,从而在神经网络的训练或微调过程中,可以避免频繁地调整待量化数据的量化参数,减少了量化过程中的计算量,从而可以提高量化效率。并且,通过在训练或微调的不同阶段根据数据变动幅度,动态地调整量化参数,可以保证量化精度。
在另一种情况下,处理器还可以根据点位置等量化参数对应的点位置迭代间隔确定目 标迭代间隔中的量化参数,以根据调整神经网络运算中的量化参数。即该神经网络运算中的点位置等量化参数可以与数据位宽异步更新,处理器可以在目标迭代间隔的检验迭代处更新数据位宽和点位置等量化参数,处理器还可以根据点位置迭代间隔单独更新目标迭代间隔中迭代对应的点位置。
具体地,处理器还可以根据当前检验迭代对应的目标数据位宽,确定目标迭代间隔对应的数据位宽,其中,目标迭代间隔中迭代对应的数据位宽一致。之后,处理器可以根据该目标迭代间隔对应的数据位宽和点位置迭代间隔,调整神经网络运算过程中的点位置等量化参数。即如图3-17所示,在确定目标迭代间隔对应的数据位宽之后,处理器还可以执行操作S640,根据获取的点位置迭代间隔和所述目标迭代间隔对应的数据位宽,调整所述目标迭代间隔中迭代对应的点位置,以调整所述神经网络运算中的点位置。其中,所述点位置迭代间隔包含至少一次迭代,所述点位置迭代间隔中迭代的点位置一致。可选地,该点位置迭代间隔可以是超参数,例如,该点位置迭代间隔可以是用户自定义输入的。
可选地,所述点位置迭代间隔小于或等于所述目标迭代间隔。当该点位置迭代间隔与上述的目标迭代间隔相同时,处理器可以在当前检验迭代处同步更新数据位宽和点位置等量化参数。进一步可选地,目标迭代间隔中迭代对应的缩放系数可以一致。更进一步地,目标迭代间隔中迭代对应的偏移量一致。此时,该目标迭代间隔中的迭代对应的数据位宽和点位置等量化参数均相同,从而可以降低计算量,提高量化效率和运算效率。具体实现过程与上述实施例基本一致,可参见上文的描述,此处不再赘述。
当点位置迭代间隔小于上述的目标迭代间隔时,处理器可以在目标迭代间隔对应的检验迭代处更新数据位宽和点位置等量化参数,并在该点位置迭代间隔确定的子检验迭代处更新点位置等量化参数。由于在数据位宽不变的情况下,点位置等量化参数可以根据待量化数据进行微调,因此,在同一目标迭代间隔内也可以对点位置等量化参数进行调整,以进一步提高量化精度。
具体地,处理器可以根据当前检验迭代和点位置迭代间隔确定子检验迭代,该子检验迭代用于调整点位置,该子检验迭代可以是目标迭代间隔中的迭代。进一步地,处理器可以根据子检验迭代的待量化数据和目标迭代间隔对应的数据位宽,调整目标迭代间隔中迭代对应的点位置,其中,点位置的确定方式可以参照上述的公式(2)或公式(14),此处不再赘述。
例如,当前检验迭代为第100次迭代,该目标迭代间隔为6,该目标迭代间隔包含的迭代为第100次迭代至第105次迭代。处理器获取的点位置迭代间隔为I
s1=3,则可以从当前检验迭代开始间隔三次迭代调整一次点位置。具体地,处理器可以将第100次迭代作为上述的子检验迭代,并计算获得该第100次迭代对应的点位置s1,在第100次迭代、第101次迭代和第102次迭代共用点位置s1进行量化。之后,处理器可以根据点位置迭代间隔I
s1将第103次迭代作为上述的子检验迭代,同时处理器还可以根据第103次迭代对应的待量化数据和目标迭代间隔对应的数据位宽n确定第二个点位置迭代间隔对应的点位置s2,则在第103次迭代至第105次迭代中可以共用上述的点位置s2进行量化。本披露实 施例中,上述的更新前的点位置s1与更新后的点位置s2的值可以相同,也可以不同。进一步地,处理器可以在第106次迭代重新根据待量化数据的数据变动幅度,确定下一目标迭代间隔以及该下一目标迭代间隔对应的数据位宽及点位置等量化参数。
再如,当前检验迭代为第100次迭代,该目标迭代间隔为6,该目标迭代间隔包含的迭代为第101次迭代至第106次迭代。处理器获取的点位置迭代间隔为I
s1=3,则可以从当前检验迭代开始间隔三次迭代调整一次点位置。具体地,处理器可以根据当前检验迭代的待量化数据和当前检验迭代对应的目标数据位宽n1,确定第一个点位置迭代间隔对应的点位置为s1,则在第101次迭代、第102次迭代和103次迭代共用上述的点位置s1进行量化。之后,处理器可以根据点位置迭代间隔I
s1将第104次迭代作为上述的子检验迭代,同时处理器还可以根据第104次迭代对应的待量化数据和目标迭代间隔对应的数据位宽n1确定第二个点位置迭代间隔对应的点位置s2,则在第104次迭代至第106次迭代中可以共用上述的点位置s2进行量化。本披露实施例中,上述的更新前的点位置s1与更新后的点位置s2的值可以相同,也可以不同。进一步地,处理器可以在第106次迭代重新根据待量化数据的数据变动幅度,确定下一目标迭代间隔以及该下一目标迭代间隔对应的数据位宽及点位置等量化参数。
可选地,该点位置迭代间隔可以等于1,即每次迭代均更新一次点位置。可选地,该点位置迭代间隔可以相同,也可以不同。例如,该目标迭代间隔包含的至少一个点位置迭代间隔可以是依次增大的。此处仅以举例的说明本实施例的实现方式,并不用于限定本披露。
可选地,该目标迭代间隔中迭代对应的缩放系数也可以不一致。进一步可选地,该缩放系数可以与上述的点位置可以同步更新,也就是说,该缩放系数对应的迭代间隔可以等于上述的点位置迭代间隔。即每当处理器更新确定点位置时,会相应的更新确定缩放系数。
可选地,该目标迭代间隔中迭代对应的偏移量也可以不一致。进一步地,该偏移量可以与上述的点位置可以同步更新,也就是说,该偏移量对应的迭代间隔可以等于上述的点位置迭代间隔。即每当处理器更新确定点位置时,会相应地更新确定偏移量。当然,该偏移量也可以与上述地点位置或数据位宽异步更新,此处不做具体限定。更进一步地,处理器还可以确定待量化数据所有元素中的最小值和最大值,并进一步确定点位置和缩放系数等量化参数,具体可参见上文中的描述。
在其他可选的实施例中,点位置、缩放系数和偏移量三个量化参数之间也可以是异步的,即点位置迭代间隔、缩放系数迭代间隔和偏移量迭代间隔中的一个或三个均不相同。其中,点位置迭代间隔和缩放系数迭代间隔均小于或等于目标迭代间隔。偏移量迭代间隔可以小于目标迭代间隔。由于偏移量只与待量化数据的分布相关,因此,在一种可选的实施方式中,该偏移量也可以与目标迭代间隔完全异步,即偏移量迭代间隔也可以大于目标迭代间隔。
在一种可选的实施例中,上述的方法可以用于神经网络的训练或微调过程中,以实现对神经网络微调或训练过程涉及的运算数据的量化参数进行调整,以提高神经网络运算过 程中涉及的运算数据的量化精度及效率。该运算数据可以是神经元数据、权值数据或梯度数据中的至少一种。如图3-5所示,根据待量化数据的数据变动曲线可知,在训练或微调的初期阶段,各次迭代的待量化数据之间的差异性较大,待量化数据的数据变动幅度较为剧烈,此时可以目标迭代间隔的值可以较小,以及时地更新目标迭代间隔中的量化参数,保证量化精度。在训练或微调的中期阶段,待量化数据的数据变动幅度逐渐趋于平缓,此时可以增大目标迭代间隔的值,以避免频繁地更新量化参数,以提高量化效率及运算效率。在训练或微调的后期阶段,此时神经网络的训练或微调趋于稳定(即当神经网络的正向运算结果趋近于预设参考值时,该神经网络的训练或微调趋于稳定),此时可以继续增大目标迭代间隔的值,以进一步提高量化效率及运算效率。基于上述数据变动趋势,可以在神经网络的训练或微调的不同阶段采用不同的方式确定目标迭代间隔,以在保证量化精度的基础上,提高量化效率及运算效率。
具体地,如图3-18所示,当该方法用于神经网络的训练或微调过程中时,该方法还可以包括:
S710、处理器确定当前迭代是否大于第一预设迭代;
其中,当前迭代是指处理器当前执行的迭代运算。可选地,该第一预设迭代可以是超参数,该第一预设迭代可以是根据待量化数据的数据变动曲线确定的,该第一预设迭代也可以是用户自定义设置的。可选地,该第一预设迭代可以小于一个训练周期(epoch)包含的迭代总数,其中,一个训练周期是指数据集中的所有待量化数据均完成一次正向运算和一次反向运算。
在所述当前迭代小于或等于所述第一预设迭代时,则处理器可以执行操作S711,将第一预设迭代间隔作为所述目标迭代间隔,并根据所述第一预设迭代间隔调整量化参数。
可选地,处理器可以读取用户输入的第一预设迭代,并根据该第一预设迭代与第一预设迭代间隔的对应关系,确定第一预设迭代间隔。可选地,该第一预设迭代间隔可以是超参数,该第一预设迭代间隔也可以是用户自定义设置的。此时,处理器可以直接读取用户输入的第一预设迭代和第一预设迭代间隔,并根据该第一预设迭代间隔更新神经网络运算中的量化参数。本披露实施例中,处理器无需根据待量化数据的数据变动幅度,确定目标迭代间隔。
例如,用户输入的第一预设迭代为第100次迭代,第一预设迭代间隔为5,则在当前迭代小于或等于第100次迭代时,可以根据第一预设迭代间隔更新量化参数。即处理器可以确定在神经网络的训练或微调的第1次迭代至第100次迭代,每间隔5次迭代更新一次量化参数。具体地,处理器可以确定第1次迭代对应的数据位宽n1及点位置s1等量化参数,并采用该数据位宽n1和点位置s1等量化参数对第1次迭代至第5次迭代的待量化数据进行量化,即第1次迭代至第5次迭代可以采用相同的量化参数。之后,处理器可以确定第6次迭代对应的数据位宽n2及点位置s2等量化参数,并采用该数据位宽n2和点位置s2等量化参数对第6次迭代至第10次迭代的待量化数据进行量化,即第6次迭代至第10次迭代可以采用相同的量化参数。同理,处理器可以按照上述量化方式直至完成第100 次迭代。其中,每个迭代间隔中数据位宽及点位置等量化参数的确定方式可以参见上文的描述,此处不再赘述。
再如,用户输入的第一预设迭代为第100次迭代,第一预设迭代间隔为1,则在当前迭代小于或等于第100次迭代时,可以根据第一预设迭代间隔更新量化参数。即处理器可以确定在神经网络的训练或微调的第1次迭代至第100次迭代,每次迭代均更新量化参数。具体地,处理器可以确定第1次迭代对应的数据位宽n1及点位置s1等量化参数,并采用该数据位宽n1和点位置s1等量化参数对第1次迭代的待量化数据进行量化。之后,处理器可以确定第2次迭代对应的数据位宽n2及点位置s2等量化参数,并采用该数据位宽n2和点位置s2等量化参数对第2次迭代的待量化数据进行量化,……。同理,处理器可以确定出第100次迭代的数据位宽n100以及点位置s100等量化参数,并采用该数据位宽n100和点位置s100等量化参数对第100次迭代的待量化数据进行量化。其中,每个迭代间隔中数据位宽及点位置等量化参数的确定方式可以参见上文的描述,此处不再赘述。
上文仅以数据位宽和量化参数同步更新的方式举例说明,在其他可选的实施例中,在每个目标迭代间隔中,处理器还可以根据点位置的变动幅度确定点位置的迭代间隔,并根据该点位置迭代间隔更新点位置等量化参数。
可选地,在当前迭代大于第一预设迭代时,可以表明神经网络的训练或微调处于中期阶段,此时可以获得历史迭代的待量化数据的数据变动幅度,并根据该待量化数据的数据变动幅度确定目标迭代间隔,该目标迭代间隔可以大于上述的第一预设迭代间隔,从而可以减少量化参数的更新次数,提高量化效率及运算效率。具体地,在所述当前迭代大于第一预设迭代时,则处理器可以执行操作S713,根据所述待量化数据的数据变动幅度确定目标迭代间隔,并根据所述目标迭代间隔调整量化参数。
承接上例,用户输入的第一预设迭代为第100次迭代,第一预设迭代间隔为1,则在当前迭代小于或等于第100次迭代时,可以根据第一预设迭代间隔更新量化参数。即处理器可以确定在神经网络的训练或微调的第1次迭代至第100次迭代,每次迭代均更新量化参数,具体实现方式可以参见上文中的描述。在当前迭代大于第100次迭代时,处理器可以根据当前迭代的待量化数据及其之前的历史迭代的待量化数据,确定待量化数据的数据变动幅度,并根据该待量化数据的数据变动幅度确定目标迭代间隔。具体地,在当前迭代大于第100次迭代时,处理器可以自适应地调整当前迭代对应的数据位宽,获得该当前迭代对应的目标数据位宽,并将该当前迭代对应的目标数据位宽作为目标迭代间隔的数据位宽,其中,目标迭代间隔中迭代对应的数据位宽一致。同时,处理器可以根据当前迭代对应的目标数据位宽和待量化数据,确定当前迭代对应的点位置,并根据当前迭代对应的点位置确定第一误差。处理器还可以根据当前迭代对应的待量化数据,确定量化误差,并根据量化误差确定第二误差。之后,处理器可以根据第一误差和第二误差确定目标迭代间隔,该目标迭代间隔可以大于上述的第一预设迭代间隔。进一步地,处理器可以确定目标迭代间隔中的点位置或缩放系数等量化参数,具体确定方式可参见上文中的描述。
例如,当前迭代为第100次迭代,处理器根据待量化数据的数据变动幅度,确定目标 迭代间隔的迭代间隔为3,则处理器可以确定该目标迭代间隔包括3次迭代,分别为第100次迭代、第101次迭代和第102次迭代。处理器还可以根据第100次迭代的待量化数据确定量化误差,并根据量化误差确定第二误差和第100次迭代对应的目标数据位宽,将该目标数据位宽作为目标迭代间隔对应的数据位宽,其中,第100次迭代、第101次迭代和第102次迭代对应的数据位宽均为该第100次迭代对应的目标数据位宽。处理器还可以根据该第100次迭代的待量化数据和该第100次迭代对应的目标数据位宽确定该第100次迭代对应的点位置和缩放系数等量化参数。之后,采用该第100次迭代对应的量化参数对第100次迭代、第101次迭代和第102次迭代进行量化。
进一步地,如图3-19所示,上述方法还可以包括:
在当前迭代大于第一预设迭代时,处理器还可以执行操作S712,即处理器可以进一步确定当前迭代是否大于第二预设迭代。其中,所述第二预设迭代大于所述第一预设迭代,所述第二预设迭代间隔大于所述第一预设迭代间隔。可选地,上述第二预设迭代可以是超参数,第二预设迭代可以大于至少一个训练周期的迭代总数。可选地,第二预设迭代可以根据待量化数据的数据变动曲线确定。可选地,第二预设迭代也可以是用户自定义设置的。
在所述当前迭代大于或等于第二预设迭代时,则处理器可以执行操作S714,将第二预设迭代间隔作为所述目标迭代间隔,并根据所述第二预设迭代间隔调整所述神经网络量化过程中的参数。在当前迭代大于第一预设迭代,且当前迭代小于第二预设迭代时,则处理器可以执行上述的操作S713,根据所述待量化数据的数据变动幅度确定目标迭代间隔,并根据所述目标迭代间隔调整量化参数。
可选地,处理器可以读取用户设置的第二预设迭代,并根据第二预设迭代与第二预设迭代间隔的对应关系,确定第二预设迭代间隔,该第二预设迭代间隔大于第一预设迭代间隔。可选地,当所述神经网络的收敛程度满足预设条件时,则确定所述当前迭代大于或等于第二预设迭代。例如,在当前迭代的正向运算结果趋近于预设参考值时,可以确定该神经网络的收敛程度满足预设条件,此时可以确定当前迭代大于或等于第二预设迭代。或者,在当前迭代对应的损失值小于或等于预设阈值时,则可以确定该神经网络的收敛程度满足预设条件。
可选地,上述的第二预设迭代间隔可以是超参数,该第二预设迭代间隔可以大于或等于至少一个训练周期的迭代总数。可选地,该第二预设迭代间隔可以是用户自定义设置的。处理器可以直接读取用户输入的第二预设迭代和第二预设迭代间隔,并根据该第二预设迭代间隔更新神经网络运算中的量化参数。例如,该第二预设迭代间隔可以等于一个训练周期的迭代总数,即每个训练周期(epoch)更新一次量化参数。
再进一步地,上述方法还包括:
当所述当前迭代大于或等于第二预设迭代,处理器还可以在每次检验迭代处确定当前数据位宽是否需要调整。如果当前数据位宽需要调整,则处理器可以从上述的操作S714切换至操作S713,以重新确定数据位宽,使得数据位宽能够满足待量化数据的需求。
具体地,处理器可以根据上述的第二误差确定数据位宽是否需要调整。处理器还可以 执行上述操作S715,确定第二误差是否大于预设误差值,当所述当前迭代大于或等于第二预设迭代且所述第二误差大于预设误差值时,则切换执行操作S713,根据所述待量化数据的数据变动幅度确定迭代间隔,以根据所述迭代间隔重新确定所述数据位宽。若当前迭代大于或等于第二预设迭代,且第二误差小于或等于预设误差值,则继续执行操作S714,将第二预设迭代间隔作为所述目标迭代间隔,并根据所述第二预设迭代间隔调整所述神经网络量化过程中的参数。其中,预设误差值可以是根据量化误差对应的预设阈值确定的,当第二误差大于预设误差值时,此时说明数据位宽可能需要进一步调整,处理器可以根据所述待量化数据的数据变动幅度确定迭代间隔,以根据所述迭代间隔重新确定所述数据位宽。
例如,第二预设迭代间隔为一个训练周期的迭代总数。在当前迭代大于或等于第二预设迭代时,处理器可以按照第二预设迭代间隔更新量化参数,即每个训练周期(epoch)更新一次量化参数。此时,每个训练周期的起始迭代作为一个检验迭代,在每个训练周期的起始迭代处,处理器可以根据该检验迭代的待量化数据确定量化误差,根据量化误差确定第二误差,并根据如下公式确定第二误差是否大于预设误差值:
diff
update2=θ*diff
bit
2>T
其中,diff
update2表示第二误差,diff
bit表示量化误差,θ表示超参数,T表示预设误差值。可选地,该预设误差值可以等于第一预设阈值除以超参数。当然,该预设误差值也可以是超参数。例如,该预设误差值可以按照如下公式计算获得:T=th/10,其中,th表示第一预设阈值,超参数的取值为10。
若第二误差diff
update2大于预设误差值T,则说明数据位宽可能不能满足预设要求,此时,可以不再采用第二预设迭代间隔更新量化参数,处理器可以按照待量化数据的数据变动幅度确定目标迭代间隔,以保证数据位宽满足预设要求。即在第二误差diff
update2大于预设误差值T时,处理器从上述的操作S714切换至上述的操作S713。
当然,在其他实施例中,处理器可以根据上述的量化误差,确定数据位宽是否需要调整。例如,第二预设迭代间隔为一个训练周期的迭代总数。在当前迭代大于或等于第二预设迭代时,处理器可以按照第二预设迭代间隔更新量化参数,即每个训练周期(epoch)更新一次量化参数。其中,每个训练周期的起始迭代作为一个检验迭代。在每个训练周期的起始迭代处,处理器可以根据该检验迭代的待量化数据确定量化误差,并在该量化误差大于或等于第一预设阈值时,则说明数据位宽可能不能满足预设要求,即处理器从上述的操作S714切换至上述的操作S713。
在一个可选的实施例中,上述的点位置、缩放系数和偏移量等量化参数可以通过显示装置进行显示。此时,用户可以通过显示装置获知神经网络运算过程中的量化参数,用户还可以自适应修改处理器确定的量化参数。同理,上述的数据位宽和目标迭代间隔等也可以通过显示装置进行显示。此时,用户可以通过显示装置获知神经网络运算过程中的目标迭代间隔和数据位宽等参数,用户还可以自适应修改处理器确定的目标迭代间隔和数据位宽等参数。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本披露并不受所描述的动作顺序的限制,因为依据本披露,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于可选实施例,所涉及的动作和模块并不一定是本披露所必须的。
本披露一实施例还提供了一种神经网络的量化参数调整装置200,该量化参数调整装置200可以设置于一处理器中。例如,该量化参数调整装置200可以置于通用处理器中,再如,该量化参数调整装置也可以置于一人工智能处理器中。如图3-20所示,所述装置200包括:
获取模块210,用于获取待量化数据的数据变动幅度;
迭代间隔确定模块220,用于根据所述待量化数据的数据变动幅度,确定目标迭代间隔,以根据所述目标迭代间隔调整所述神经网络运算中的量化参数,其中,所述目标迭代间隔包括至少一次迭代,所述神经网络的量化参数用于实现对所述神经网络运算中待量化数据的量化操作。
可选地,所述量化参数包括点位置,所述点位置为所述待量化数据对应的量化数据中小数点的位置。如图3-21所示,所述装置还包括:
量化参数确定模块230,用于根据当前检验迭代对应的目标数据位宽和所述当前检验迭代的待量化数据,确定所述目标迭代间隔中迭代对应的点位置,以调整所述神经网络运算中的点位置;
其中,所述目标迭代间隔中迭代对应的点位置一致。
可选地,所述量化参数包括点位置,所述点位置为所述待量化数据对应的量化数据中小数点的位置;如图3-23或图3-24所示,所述装置还包括:
数据位宽确定模块240,用于根据所述当前检验迭代对应的目标数据位宽,确定所述目标迭代间隔对应的数据位宽,其中,所述目标迭代间隔中迭代对应的数据位宽一致;
量化参数确定模块230,用于根据获取的点位置迭代间隔和所述目标迭代间隔对应的数据位宽,调整所述目标迭代间隔中迭代对应的点位置,以调整所述神经网络运算中的点位置;
其中,所述点位置迭代间隔包含至少一次迭代,所述点位置迭代间隔中迭代的点位置一致。
可选地,所述点位置迭代间隔小于或等于所述目标迭代间隔。
可选地,所述量化参数还包括缩放系数,所述缩放系数与所述点位置同步更新。
可选地,所述量化参数还包括偏移量,所述偏移量与所述点位置同步更新。
可选地,如图3-24所示,所述数据位宽确定模块240包括:
量化误差确定单元241,用于根据所述当前检验迭代的待量化数据和所述当前检验迭代的量化数据,确定量化误差,其中,所述当前检验迭代的量化数据是对所述当前检验迭代的待量化数据进行量化获得的;
数据位宽确定单元242,用于根据所述量化误差,确定所述当前检验迭代对应的目标数据位宽。
可选地,所述数据位宽确定单元242用于根据所述量化误差,确定所述当前检验迭代对应的目标数据位宽时,具体用于:
若所述量化误差大于或等于第一预设阈值,则增加所述当前检验迭代对应的数据位宽,获得所述当前检验迭代对应的目标数据位宽;或者,
若所述量化误差小于或等于第二预设阈值,则减小所述当前检验迭代对应的数据位宽,获得所述当前检验迭代对应的目标数据位宽。
可选地,所述数据位宽确定单元242用于在若所述量化误差大于或等于第一预设阈值,则增加所述当前检验迭代对应的数据位宽,获得所述当前检验迭代对应的目标数据位宽时,具体用于:
若所述量化误差大于或等于第一预设阈值,则根据第一预设位宽步长确定第一中间数据位宽;
返回根据所述当前检验迭代中待量化数据和所述当前检验迭代的量化数据,确定量化误差,直至所述量化误差小于所述第一预设阈值;其中,所述当前检验迭代的量化数据是根据所述第一中间数据位宽对所述当前检验迭代的待量化数据进行量化获得。
可选地,所述数据位宽确定单元242用于在若所述量化误差小于或等于第二预设阈值,则减小所述当前检验迭代对应的数据位宽,获得所述当前检验迭代对应的目标数据位宽时,具体用于:
若所述量化误差小于或等于第二预设阈值,则根据第二预设位宽步长确定第二中间数据位宽;
返回根据所述当前检验迭代中待量化数据和所述当前检验迭代的量化数据,确定量化误差,直至所述量化误差大于所述第二预设阈值;其中,所述当前检验迭代的量化数据是根据所述第二中间数据位宽对所述当前检验迭代的待量化数据进行量化获得。
可选地,所述获取模块210包括:
第一获取模块211,用于获取点位置的变动幅度;其中,所述点位置的变动幅度能够用于表征所述待量化数据的数据变动幅度,所述点位置的变动幅度与所述待量化数据的数据变动幅度正相关。
可选地,如图3-23或图3-24所示,所述第一获取模块211包括:
第一均值确定单元2110,用于根据当前检验迭代之前的上一检验迭代对应的点位置,以及所述上一检验迭代之前的历史迭代对应的点位置,确定第一均值,其中,所述上一检验迭代为所述目标迭代间隔之前的上一迭代间隔对应的检验迭代;
第二均值确定单元2111,用于根据所述当前检验迭代对应的点位置及所述当前检验迭代之前的历史迭代的点位置,确定第二均值;其中,所述当前检验迭代对应的点位置根据所述当前检验迭代对应的目标数据位宽和待量化数据确定;
第一误差确定单元2112,用于根据所述第一均值和所述第二均值确定第一误差,所 述第一误差用于表征所述点位置的变动幅度。
可选地,所述第二均值确定单元2111具体用于:
获取预设数量的中间滑动平均值,其中,各个所述中间滑动平均值是根据所述当前检验迭代之前所述预设数量的检验迭代确定的;
根据所述当前检验迭代的点位置以及所述预设数量的中间滑动平均值,确定所述第二均值。
可选地,所述第二均值确定单元2111具体用于根据所述当前检验迭代对应的点位置以及所述第一均值,确定所述第二均值。
可选地,所述第二均值确定单元2111还用于根据获取的所述当前检验迭代的数据位宽调整值,更新所述第二均值;
其中,所述当前检验迭代的数据位宽调整值根据所述当前检验迭代的目标数据位宽和初始数据位宽确定。
可选地,所述第二均值确定单元2111用于根据获取的所述当前检验迭代的数据位宽调整值,更新所述第二均值时,具体用于:
当所述当前检验迭代的数据位宽调整值大于预设参数时,则根据所述当前检验迭代的数据位宽调整值减小所述第二均值;
当所述当前检验迭代的数据位宽调整值小于预设参数时,则根据所述当前检验迭代的数据位宽调整值增大所述第二均值。
可选地,所述迭代间隔确定模块220用于根据所述第一误差确定所述目标迭代间隔,所述目标迭代间隔与所述第一误差负相关。
可选地,所述获取模块210还包括:
第二获取模块212,用于获取数据位宽的变化趋势;根据所述点位置的变动幅度和所述数据位宽的变化趋势,确定所述待量化数据的数据变动幅度。
可选地,所述迭代间隔确定模块220用于根据获取的第一误差和第二误差,确定所述目标迭代间隔;其中,所述第一误差用于表征点位置的变动幅度,所述第二误差用于表征数据位宽的变化趋势。
可选地,所述根迭代间隔确定模块220用于根据获取的第一误差和第二误差,确定所述目标迭代间隔时,具体用于:
将所述第一误差和所述第二误差中最大值作为目标误差;
根据所述目标误差确定所述目标迭代间隔,其中,所述目标误差与所述目标迭代间隔负相关。
可选地,所述第二误差根据量化误差确定;其中,所述量化误差根据所述当前检验迭代中待量化数据和所述当前检验迭代的量化数据确定,所述第二误差与所述量化误差正相关。
可选地,所述装置用于实现神经网络的训练或微调;所述迭代间隔确定模块220还用于:
当所述当前迭代大于第一预设迭代时,则根据所述待量化数据的数据变动幅度确定目标迭代间隔,并根据所述目标迭代间隔调整所述量化参数。
可选地,所述迭代间隔确定模块220还用于:当所述当前迭代小于或等于所述第一预设迭代时,则将第一预设迭代间隔作为所述目标迭代间隔,并根据所述第一预设迭代间隔调整所述量化参数。
可选地,所述迭代间隔确定模块220还用于:
当所述当前迭代大于或等于第二预设迭代时,则将第二预设迭代间隔作为所述目标迭代间隔,并根据所述第二预设迭代间隔调整所述量化参数;
其中,当所述神经网络的收敛程度满足预设条件时,则确定所述当前检验迭代大于或等于第二预设迭代;
所述第二预设迭代大于所述第一预设迭代,所述第二预设迭代间隔大于所述第一预设迭代间隔。
可选地,所述迭代间隔确定模块220还用于:当所述当前迭代大于或等于第二预设迭代,且第二误差大于预设误差值时,则根据所述待量化数据的数据变动幅度确定迭代间隔,以根据所述迭代间隔重新确定所述数据位宽。
应当清楚的是,本披露实施例各个模块或单元的工作原理与上述方法中各个操作的实现过程基本一致,具体可参见上文的描述,此处不再赘述。应该理解,上述的装置实施例仅是示意性的,本披露的装置还可通过其它的方式实现。例如,上述实施例中所述单元/模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。例如,多个单元、模块或组件可以结合,或者可以集成到另一个系统,或一些特征可以忽略或不执行。上述集成的单元/模块既可以采用硬件的形式实现,也可以采用软件程序模块的形式实现。所述集成的单元/模块如果以硬件的形式实现时,该硬件可以是数字电路,模拟电路等等。硬件结构的物理实现包括但不局限于晶体管,忆阻器等等。
所述集成的单元/模块如果以软件程序模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储器中。基于这样的理解,本披露的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储器中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本披露各个实施例所述方法的全部或部分步骤。而前述的存储器包括:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
在一个实施例中,本披露还提供了一种计算机可读存储介质,该存储介质中存储有计算机程序,该计算机程序被处理器或装置执行时,实现如上述任一实施例中的方法。具体地,该计算机程序被处理器或装置执行时,实现如下方法:
获取待量化数据的数据变动幅度;
根据所述待量化数据的数据变动幅度,确定目标迭代间隔,以根据所述目标迭代间隔 调整所述神经网络运算中的量化参数,其中,所述目标迭代间隔包括至少一次迭代,所述神经网络的量化参数用于实现对所述神经网络运算中待量化数据的量化操作。
应当清楚的是,本披露实施例各个操作的实现与上述方法中各个操作的实现过程基本一致,具体可参见上文的描述,此处不再赘述。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。上述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
在一种可能的实现方式中,还公开了一种人工智能芯片,其包括了上述量化参数调整装置。
在一种可能的实现方式中,还公开了一种板卡,其包括存储器件、接口装置和控制器件以及上述人工智能芯片;其中,所述人工智能芯片与所述存储器件、所述控制器件以及所述接口装置分别连接;所述存储器件,用于存储数据;所述接口装置,用于实现所述人工智能芯片与外部设备之间的数据传输;所述控制器件,用于对所述人工智能芯片的状态进行监控。
图3-25示出根据本披露实施例的板卡的结构框图,参阅图3-25,上述板卡除了包括上述芯片389以外,还可以包括其他的配套部件,该配套部件包括但不限于:存储器件390、接口装置391和控制器件392;
所述存储器件390与所述人工智能芯片通过总线连接,用于存储数据。所述存储器件可以包括多组存储单元393。每一组所述存储单元与所述人工智能芯片通过总线连接。可以理解,每一组所述存储单元可以是DDR SDRAM(英文:Double Data Rate SDRAM,双倍速率同步动态随机存储器)。
DDR不需要提高时钟频率就能加倍提高SDRAM的速度。DDR允许在时钟脉冲的上升沿和下降沿读出数据。DDR的速度是标准SDRAM的两倍。在一个实施例中,所述存储装置可以包括4组所述存储单元。每一组所述存储单元可以包括多个DDR4颗粒(芯片)。在一个实施例中,所述人工智能芯片内部可以包括4个72位DDR4控制器,上述72位DDR4控制器中64bit用于传输数据,8bit用于ECC校验。可以理解,当每一组所述存储单元中采用DDR4-3200颗粒时,数据传输的理论带宽可达到25600MB/s。
在一个实施例中,每一组所述存储单元包括多个并联设置的双倍速率同步动态随机存储器。DDR在一个时钟周期内可以传输两次数据。在所述芯片中设置控制DDR的控制器,用于对每个所述存储单元的数据传输与数据存储的控制。
所述接口装置与所述人工智能芯片电连接。所述接口装置用于实现所述人工智能芯片与外部设备(例如服务器或计算机)之间的数据传输。例如在一个实施例中,所述接口装置可以为标准PCIE接口。比如,待处理的数据由服务器通过标准PCIE接口传递至所述芯片,实现数据转移。优选的,当采用PCIE 3.0 X 16接口传输时,理论带宽可达到16000MB/s。在另一个实施例中,所述接口装置还可以是其他的接口,本披露并不限制上 述其他的接口的具体表现形式,所述接口单元能够实现转接功能即可。另外,所述人工智能芯片的计算结果仍由所述接口装置传送回外部设备(例如服务器)。
所述控制器件与所述人工智能芯片电连接。所述控制器件用于对所述人工智能芯片的状态进行监控。具体的,所述人工智能芯片与所述控制器件可以通过SPI接口电连接。所述控制器件可以包括单片机(Micro Controller Unit,MCU)。如所述人工智能芯片可以包括多个处理芯片、多个处理核或多个处理电路,可以带动多个负载。因此,所述人工智能芯片可以处于多负载和轻负载等不同的工作状态。通过所述控制装置可以实现对所述人工智能芯片中多个处理芯片、多个处理和/或多个处理电路的工作状态的调控。
在一种可能的实现方式中,公开了一种电子设备,其包括了上述人工智能芯片。电子设备包括数据处理装置、机器人、电脑、打印机、扫描仪、平板电脑、智能终端、手机、行车记录仪、导航仪、传感器、摄像头、服务器、云端服务器、相机、摄像机、投影仪、手表、耳机、移动存储、可穿戴设备、交通工具、家用电器、和/或医疗设备。
所述交通工具包括飞机、轮船和/或车辆;所述家用电器包括电视、空调、微波炉、冰箱、电饭煲、加湿器、洗衣机、电灯、燃气灶、油烟机;所述医疗设备包括核磁共振仪、B超仪和/或心电图仪。
依照以下条款可以更好地理解本披露的内容:
C1、一种神经网络的量化参数调整方法,所述方法包括:
获取待量化数据的数据变动幅度;
根据所述待量化数据的数据变动幅度,确定目标迭代间隔,以根据所述目标迭代间隔调整所述神经网络运算中的量化参数,其中,所述目标迭代间隔包括至少一次迭代,所述神经网络的量化参数用于实现对所述神经网络运算中待量化数据的量化操作。
C2、根据条款C1所述的方法,所述量化参数包括点位置,所述点位置为所述待量化数据对应的量化数据中小数点的位置;所述方法还包括:
根据当前检验迭代对应的目标数据位宽和所述当前检验迭代的待量化数据,确定所述目标迭代间隔中迭代对应的点位置,以调整所述神经网络运算中的点位置;
其中,所述目标迭代间隔中迭代对应的点位置一致。
C3、根据条款C1所述的方法,其特征在于,所述量化参数包括点位置,所述点位置为所述待量化数据对应的量化数据中小数点的位置;所述方法还包括:
根据所述当前检验迭代对应的目标数据位宽,确定所述目标迭代间隔对应的数据位宽,其中,所述目标迭代间隔中迭代对应的数据位宽一致;
根据获取的点位置迭代间隔和所述目标迭代间隔对应的数据位宽,调整所述目标迭代间隔中迭代对应的点位置,以调整所述神经网络运算中的点位置;
其中,所述点位置迭代间隔包含至少一次迭代,所述点位置迭代间隔中迭代的点位置一致。
C4、根据条款C2或C3所述的方法,所述点位置迭代间隔小于或等于所述目标迭代间隔。
C5、根据条款C1-C4任一项所述的方法,所述量化参数还包括缩放系数,所述缩放系数与所述点位置同步更新。
C6、根据条款C1-C5任一项所述的方法,所述量化参数还包括偏移量,所述偏移量与所述点位置同步更新。
C7、根据条款C1-C6任一项所述的方法,所述方法还包括:
根据所述当前检验迭代的待量化数据和所述当前检验迭代的量化数据,确定量化误差,其中,所述当前检验迭代的量化数据对所述当前检验迭代的待量化数据进行量化获得;
根据所述量化误差,确定所述当前检验迭代对应的目标数据位宽。
C8、根据条款C1-C7所述的方法,所述根据所述量化误差,确定所述当前检验迭代对应的目标数据位宽,包括:
若所述量化误差大于或等于第一预设阈值,则增加所述当前检验迭代对应的数据位宽,获得所述当前检验迭代对应的目标数据位宽;或者,
若所述量化误差小于或等于第二预设阈值,则减小所述当前检验迭代对应的数据位宽,获得所述当前检验迭代对应的目标数据位宽。
C9、根据条款C8所述的方法,若所述量化误差大于或等于第一预设阈值,则增加所述当前检验迭代对应的数据位宽,获得所述当前检验迭代对应的目标数据位宽,包括:
若所述量化误差大于或等于第一预设阈值,则根据第一预设位宽步长确定第一中间数据位宽;
返回根据所述当前检验迭代中待量化数据和所述当前检验迭代的量化数据,确定量化误差,直至所述量化误差小于所述第一预设阈值;其中,所述当前检验迭代的量化数据是根据所述第一中间数据位宽对所述当前检验迭代的待量化数据进行量化获得。
C10、根据条款C8所述的方法,所述若所述量化误差小于或等于第二预设阈值,则减小所述当前检验迭代对应的数据位宽,包括:
若所述量化误差小于或等于第二预设阈值,则根据第二预设位宽步长确定第二中间数据位宽;
返回根据所述当前检验迭代中待量化数据和所述当前检验迭代的量化数据,确定量化误差,直至所述量化误差大于所述第二预设阈值;其中,所述当前检验迭代的量化数据是根据所述第二中间数据位宽对所述当前检验迭代的待量化数据进行量化获得。
C11、根据条款C1-C10任一项所述的方法,所述获取待量化数据的数据变动幅度,包括:
获取点位置的变动幅度;其中,所述点位置的变动幅度能够用于表征所述待量化数据的数据变动幅度,所述点位置的变动幅度与所述待量化数据的数据变动幅度正相关。
C12、根据条款C1-C11所述的方法,所述获取点位置的变动幅度,包括:
根据当前检验迭代之前的上一检验迭代对应的点位置,以及所述上一检验迭代之前的历史迭代对应的点位置,确定第一均值,其中,所述上一检验迭代为所述目标迭代间隔之前的上一迭代间隔对应的检验迭代;
根据所述当前检验迭代对应的点位置及所述当前检验迭代之前的历史迭代的点位置,确定第二均值;其中,所述当前检验迭代对应的点位置根据所述当前检验迭代对应的目标数据位宽和待量化数据确定;
根据所述第一均值和所述第二均值确定第一误差,所述第一误差用于表征所述点位置的变动幅度。
C13、根据条款C12所述的方法,所述根据当前检验迭代对应的点位置及所述当前检验迭代之前的历史迭代的点位置,确定第二均值,包括:
获取预设数量的中间滑动平均值,其中,各个所述中间滑动平均值是根据所述当前检验迭代之前所述预设数量的检验迭代确定的;
根据所述当前检验迭代的点位置以及所述预设数量的中间滑动平均值,确定所述第二均值。
C14、根据条款C12所述的方法,所述根据所述当前检验迭代对应的点位置及所述当前检验迭代之前的历史迭代的点位置,确定第二均值,包括:
根据所述当前检验迭代对应的点位置以及所述第一均值,确定所述第二均值。
C15、根据条款C12所述的方法,所述方法还包括:
根据获取的所述当前检验迭代的数据位宽调整值,更新所述第二均值;其中,所述当前检验迭代的数据位宽调整值根据所述当前检验迭代的目标数据位宽和初始数据位宽确定。
C16、根据条款C15所述的方法,所述根据获取的所述当前检验迭代的数据位宽调整值,更新所述第二均值,包括:
当所述当前检验迭代的数据位宽调整值大于预设参数时,则根据所述当前检验迭代的数据位宽调整值减小所述第二均值;
当所述当前检验迭代的数据位宽调整值小于预设参数时,则根据所述当前检验迭代的数据位宽调整值增大所述第二均值。
C17、根据条款C12所述的方法,所述根据所述待量化数据的数据变动幅度,确定目标迭代间隔,包括:
根据所述第一误差确定所述目标迭代间隔,所述目标迭代间隔与所述第一误差负相关。
C18、根据条款C11-C17任一项所述的方法,所述获取待量化数据的数据变动幅度,还包括:
获取数据位宽的变化趋势;
根据所述点位置的变动幅度和所述数据位宽的变化趋势,确定所述待量化数据的数据变动幅度。
C19、根据条款C18所述的方法,根据所述待量化数据的数据变动幅度,确定目标迭代间隔,还包括:
根据获取的第一误差和第二误差,确定所述目标迭代间隔;其中,所述第一误差用于表征点位置的变动幅度,所述第二误差用于表征数据位宽的变化趋势。
C20、根据条款C19所述的方法,所述根据获取的所述第二误差和所述第一误差,确定所述目标迭代间隔,包括:
将所述第一误差和所述第二误差中最大值作为目标误差;
根据所述目标误差确定所述目标迭代间隔,其中,所述目标误差与所述目标迭代间隔负相关。
C21、根据条款C19或C20所述的方法,所述第二误差根据量化误差确定;
其中,所述量化误差根据所述当前检验迭代中待量化数据和所述当前检验迭代的量化数据确定,所述第二误差与所述量化误差正相关。
C22、根据条款C1-C21任一项所述的方法,所述方法用于神经网络的训练或微调,所述方法还包括:
当所述当前迭代大于第一预设迭代时,则根据所述待量化数据的数据变动幅度确定目标迭代间隔,并根据所述目标迭代间隔调整所述量化参数。
C23、根据条款C22所述的方法,所述方法还包括:
当所述当前迭代小于或等于所述第一预设迭代时,则将第一预设迭代间隔作为所述目标迭代间隔,并根据所述第一预设迭代间隔调整所述量化参数。
C24、根据条款C22或C23所述的方法,所述方法还包括:
当所述当前迭代大于或等于第二预设迭代时,则将第二预设迭代间隔作为所述目标迭代间隔,并根据所述第二预设迭代间隔调整所述量化参数;
其中,所述第二预设迭代大于所述第一预设迭代,所述第二预设迭代间隔大于所述第一预设迭代间隔。
C25、根据条款C24所述的方法,所述方法还包括:
当所述神经网络的收敛程度满足预设条件时,则确定所述当前检验迭代大于或等于第二预设迭代。
C26、根据条款C24所述的方法,所述方法还包括:
当所述当前迭代大于或等于第二预设迭代,且第二误差大于预设误差值时,则根据所述待量化数据的数据变动幅度确定迭代间隔,以根据所述迭代间隔重新确定所述数据位宽。
C27、根据条款C1-C26任一项所述的方法,所述待量化数据为神经元数据、权值数据或梯度数据中的至少一种。
C28、一种神经网络的量化参数调整装置,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时,实现如条款C1-C27任一项所述的方法的步骤。
C29、一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序,所述计算机程序被执行时,实现如条款C1-C27任一项所述的方法的步骤。
C30、一种神经网络的量化参数调整装置,所述装置包括:
获取模块,用于获取待量化数据的数据变动幅度;
迭代间隔确定模块,用于根据所述待量化数据的数据变动幅度,确定目标迭代间隔, 以根据所述目标迭代间隔调整所述神经网络运算中的量化参数,其中,所述目标迭代间隔包括至少一次迭代,所述神经网络的量化参数用于实现对所述神经网络运算中待量化数据的量化操作。
C31、根据条款C30所述的装置,所述量化参数包括点位置,所述点位置为所述待量化数据对应的量化数据中小数点的位置;所述装置还包括:
量化参数确定模块,用于根据当前检验迭代对应的目标数据位宽和所述当前检验迭代的待量化数据,确定所述目标迭代间隔中迭代对应的点位置,以调整所述神经网络运算中的点位置;
其中,所述目标迭代间隔中迭代对应的点位置一致。
C32、根据条款C30所述的装置,所述量化参数包括点位置,所述点位置为所述待量化数据对应的量化数据中小数点的位置;所述装置还包括:
数据位宽确定模块,用于根据所述当前检验迭代对应的目标数据位宽,确定所述目标迭代间隔对应的数据位宽,其中,所述目标迭代间隔中迭代对应的数据位宽一致;
量化参数确定模块,用于根据获取的点位置迭代间隔和所述目标迭代间隔对应的数据位宽,调整所述目标迭代间隔中迭代对应的点位置,以调整所述神经网络运算中的点位置;
其中,所述点位置迭代间隔包含至少一次迭代,所述点位置迭代间隔中迭代的点位置一致。
C33、根据条款C32所述的装置,所述点位置迭代间隔小于或等于所述目标迭代间隔。
C34、根据条款C31-C33任一项所述的装置,所述量化参数还包括缩放系数,所述缩放系数与所述点位置同步更新。
C35、根据条款C31-C33任一项所述的装置,所述量化参数还包括偏移量,所述偏移量与所述点位置同步更新。
C36、根据条款C31-C 33任一项所述的装置,所述数据位宽确定模块包括:
量化误差确定单元,用于根据所述当前检验迭代的待量化数据和所述当前检验迭代的量化数据,确定量化误差,其中,所述当前检验迭代的量化数据对所述当前检验迭代的待量化数据进行量化获得;
数据位宽确定单元,用于根据所述量化误差,确定所述当前检验迭代对应的目标数据位宽。
C37、根据条款C36所述的装置,所述数据位宽确定单元用于根据所述量化误差,确定所述当前检验迭代对应的目标数据位宽时,具体用于:
若所述量化误差大于或等于第一预设阈值,则增加所述当前检验迭代对应的数据位宽,获得所述当前检验迭代对应的目标数据位宽;或者,
若所述量化误差小于或等于第二预设阈值,则减小所述当前检验迭代对应的数据位宽,获得所述当前检验迭代对应的目标数据位宽。
C38、根据条款C37所述的装置,所述数据位宽确定单元用于若所述量化误差大于或等于第一预设阈值,则增加所述当前检验迭代对应的数据位宽,获得所述当前检验迭代 对应的目标数据位宽时,具体用于:
若所述量化误差大于或等于第一预设阈值,则根据第一预设位宽步长确定第一中间数据位宽;
返回根据所述当前检验迭代中待量化数据和所述当前检验迭代的量化数据,确定量化误差,直至所述量化误差小于所述第一预设阈值;其中,所述当前检验迭代的量化数据是根据所述第一中间数据位宽对所述当前检验迭代的待量化数据进行量化获得。
C39、根据条款C37所述的装置,所述数据位宽确定单元用于若所述量化误差小于或等于第二预设阈值,则减小所述当前检验迭代对应的数据位宽,获得所述当前检验迭代对应的目标数据位宽时,具体用于:
若所述量化误差小于或等于第二预设阈值,则根据第二预设位宽步长确定第二中间数据位宽;
返回根据所述当前检验迭代中待量化数据和所述当前检验迭代的量化数据,确定量化误差,直至所述量化误差大于所述第二预设阈值;其中,所述当前检验迭代的量化数据是根据所述第二中间数据位宽对所述当前检验迭代的待量化数据进行量化获得。
C40、根据条款C30-C39任一项所述的装置,所述获取模块包括:
第一获取模块,用于获取点位置的变动幅度;其中,所述点位置的变动幅度能够用于表征所述待量化数据的数据变动幅度,所述点位置的变动幅度与所述待量化数据的数据变动幅度正相关。
C41、根据条款C40所述的方法,所述第一获取模块包括:
第一均值确定单元,用于根据当前检验迭代之前的上一检验迭代对应的点位置,以及所述上一检验迭代之前的历史迭代对应的点位置,确定第一均值,其中,所述上一检验迭代为所述目标迭代间隔之前的上一迭代间隔对应的检验迭代;
第二均值确定单元,用于根据所述当前检验迭代对应的点位置及所述当前检验迭代之前的历史迭代的点位置,确定第二均值;其中,所述当前检验迭代对应的点位置根据所述当前检验迭代对应的目标数据位宽和待量化数据确定;
第一误差确定单元,用于根据所述第一均值和所述第二均值确定第一误差,所述第一误差用于表征所述点位置的变动幅度。
C42、根据条款C41所述的装置,所述第二均值确定单元具体用于:
获取预设数量的中间滑动平均值,其中,各个所述中间滑动平均值是根据所述当前检验迭代之前所述预设数量的检验迭代确定的;
根据所述当前检验迭代的点位置以及所述预设数量的中间滑动平均值,确定所述第二均值。
C43、根据条款C41所述的装置,所述第二均值确定单元具体用于根据所述当前检验迭代对应的点位置以及所述第一均值,确定所述第二均值。
C44、根据条款C41所述的装置,所述第二均值确定单元还用于根据获取的所述当前检验迭代的数据位宽调整值,更新所述第二均值;
其中,所述当前检验迭代的数据位宽调整值根据所述当前检验迭代的目标数据位宽和初始数据位宽确定。
C45、根据条款C44所述的装置,所述第二均值确定单元还用于根据获取的所述当前检验迭代的数据位宽调整值,更新所述第二均值时,具体用于:
当所述当前检验迭代的数据位宽调整值大于预设参数时,则根据所述当前检验迭代的数据位宽调整值减小所述第二均值;
当所述当前检验迭代的数据位宽调整值小于预设参数时,则根据所述当前检验迭代的数据位宽调整值增大所述第二均值。
C46、根据条款C41所述的装置,所述迭代间隔确定模块用于根据所述第一误差确定所述目标迭代间隔,所述目标迭代间隔与所述第一误差负相关。
C47、根据条款C40所述的装置,所述获取模块还包括:
第二获取模块,用于获取数据位宽的变化趋势;根据所述点位置的变动幅度和所述数据位宽的变化趋势,确定所述待量化数据的数据变动幅度。
C48、根据条款C47所述的装置,所述迭代间隔确定模块还用于根据获取的第一误差和第二误差,确定所述目标迭代间隔;其中,所述第一误差用于表征点位置的变动幅度,所述第二误差用于表征数据位宽的变化趋势。
C49、根据条款C48所述的装置,所述根迭代间隔确定模块用于根据获取的第一误差和第二误差,确定所述目标迭代间隔时,具体用于:
将所述第一误差和所述第二误差中最大值作为目标误差;
根据所述目标误差确定所述目标迭代间隔,其中,所述目标误差与所述目标迭代间隔负相关。
C50、根据条款C48或C49所述的装置,所述第二误差根据量化误差确定;
其中,所述量化误差根据所述当前检验迭代中待量化数据和所述当前检验迭代的量化数据确定,所述第二误差与所述量化误差正相关。
C51、根据条款C30-C50任一项所述的装置,所述装置用于实现神经网络的训练或微调;所述迭代间隔确定模块还用于:
当所述当前迭代大于第一预设迭代时,则根据所述待量化数据的数据变动幅度确定目标迭代间隔,并根据所述目标迭代间隔调整所述量化参数。
C52、根据条款C51所述的装置,所述迭代间隔确定模块还用于:当所述当前迭代小于或等于所述第一预设迭代时,则将第一预设迭代间隔作为所述目标迭代间隔,并根据所述第一预设迭代间隔调整所述量化参数。
C53、根据条款C51或C52所述的装置,所述迭代间隔确定模块还用于:
当所述当前迭代大于或等于第二预设迭代时,则将第二预设迭代间隔作为所述目标迭代间隔,并根据所述第二预设迭代间隔调整所述量化参数;
其中,当所述神经网络的收敛程度满足预设条件时,则确定所述当前检验迭代大于或等于第二预设迭代;
所述第二预设迭代大于所述第一预设迭代,所述第二预设迭代间隔大于所述第一预设迭代间隔。
C54、根据条款C53所述的装置,所述迭代间隔确定模块还用于:当所述当前迭代大于或等于第二预设迭代,且第二误差大于预设误差值时,则根据所述待量化数据的数据变动幅度确定迭代间隔,以根据所述迭代间隔重新确定所述数据位宽。
以上已经描述了本披露的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场中的技术的改进,或者使本技术领域的其它普通技术人员能理解本文披露的各实施例。
上文描述了为解决量化参数调整的问题而提出的方案(201910528537.8)。