一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

用于训练神经网络的方法、设备和计算机可读存储介质与流程

2022-06-05 19:25:29 来源:中国专利 TAG:


1.本披露一般地涉及人工智能领域。更具体地,本披露涉及用于通过硬件平台来训练神经网络的方法、设备、集成电路、板卡和计算机可读存储介质。


背景技术:

2.随着人工智能领域技术的不断发展,如何高效地训练神经网络以获得良好的神经网络模型成为当前关注的一个焦点。现有的神经网络在训练中通常采用浮点型数据来执行运算以期获得好的训练结果。尽管浮点型数据具有相对较高的数据精度,但在训练过程中会对运行神经网络的硬件平台提出更高的硬件要求,例如更大的存储空间及更高的功耗。另外,在一些训练场景中,使用精度相对较低的定点型数据也同样可以达到与浮点型数据相同或近似的训练效果,从而使得应用浮点型数据在一些情况下并不必要。
3.另外,相对较低位宽的数据所能表示的数据范围有限。以16位的浮点型数据为例,其所能表示的最小精度的数值是5.9604
×
10-8
。然而,在执行神经网络训练的反向传播时,通常有可能会得到小于5.9604
×
10-8
的数值。换句话说,该得到的值超出了16位浮点数所能表示的范围。此时,如果依然采用16位浮点数来表示该值,则该值即为0。显然,这样的归零操作会对计算的准确性和精度产生明显的影响。


技术实现要素:

4.为了解决在上文中所提到的一些或全部的问题,提供一种对神经网络进行高效训练的方式,本披露在多个方面中提供了如下的技术方案。
5.在一个方面中,本披露提供一种用于训练神经网络的设备,其中训练所述神经网络包括迭代执行的前向传播和反向传播,所述设备包括:缩放电路,其配置成根据缩放因子对所述前向传播获得的损失值进行缩放,以获得缩放的损失值;更新电路,其配置成基于所述缩放的损失值来执行所述反向传播中的更新操作;以及调整电路,其配置成至少根据所述反向传播中的梯度数据来调整所述缩放因子,以便用于下一代反向传播中所述损失值的缩放。
6.在又一个方面中,本披露提供一种集成电路,其包括如上所述并且将在下面多个实施例中讨论的设备。
7.在又一个方面中,本披露提供一种板卡,其包括如上所述并且将在下面多个实施例中讨论的设备。
8.在另一个方面中,本披露提供一种用于训练神经网络的方法,其中训练所述神经网络包括迭代执行的前向传播和反向传播,所述方法包括:根据缩放因子对所述前向传播获得的损失值进行缩放,以获得缩放的损失值;基于所述缩放的损失值来执行所述反向传播中的更新操作;以及至少根据所述反向传播中的梯度数据来调整所述缩放因子,以便用于下一代反向传播中所述损失值的缩放。
9.在又一方面中,本披露提供一种用于训练神经网络的设备。该设备包括至少一个
处理器。该设备还包括至少一个存储器,其存储有计算机程序代码,所述至少一个存储器和所述计算机程序代码被配置为利用所述处理器,以使得所述设备执行前述的方法和在下文所描述的该方法的多个实施例。
10.在一个方面中,本披露提供一种计算机可读存储介质,其存储有用于训练神经网络的计算机程序,当所述计算机程序由一个或多个处理器运行时,实现前述的方法和在下文所描述的该方法的多个实施例。
11.通过上述用于训练神经网络的设备、方法、集成电路、板卡和计算机可读存储介质,在训练神经网络的反向传播中,本披露的方案可以自适应地或者适时地调整损失值的大小,以便在利用低精度类型的操作数据进行反向更新操作时,免受由于低精度数据类型数据表达范围过小而导致结果产生误差的影响,由此提高了运算的准确性和精度。另外,由于本方案对损失值的调整,也使得将高精度数据量化成低精度数据以参与运算更具有适用性,由此扩展了神经网络的运算场景。进一步,由于本披露的方案支持将高精度数据量化成低精度数据以参与神经网络内的相关运算,也令计算场景不受处理器芯片所能支持的运算位数的限制,从而扩展了处理器的使用场景。另外,由于低精度数据类型的使用(例如使用定点数来进行神经网络的相关运算例如乘加操作),从而本披露的方案也加速了神经网络的训练过程并且减小了计算开销和功耗。另外,通过经本披露方案所训练的神经网络,其可以被广泛运用于图像处理、语音识别、数据采集等各类领域,也极大地改善相关领域的效率成本。
附图说明
12.通过结合附图,可以更好地理解本发明的上述特征,并且其众多目的,特征和优点对于本领域技术人员而言是显而易见的,其中相同的附图标记表示相同的元件,并且其中:
13.图1是示出可以应用本披露的技术方案的神经网络的示例性框图;
14.图2是示出根据本披露实施例的用于训练神经网络的设备的功能框图;
15.图3是示出根据本披露实施例的神经网络中前向传播以及反向传播中的更新操作的示例性流程图;
16.图4是示出根据本披露实施例的涉及量化误差原理的曲线图;
17.图5是示出根据本披露实施例的用于训练神经网络的方法的流程图;
18.图6是示出根据本披露实施例的一种组合处理装置的结构图;以及
19.图7是示出根据本披露实施例的一种板卡的结构示意图。
具体实施方式
20.现在将参考附图描述本发明的实施例。应当理解,为了说明的简单和清楚,在认为合适的情况下,可以在附图中重复附图标记以指示对应或类似的元件。另外,本技术阐述了许多具体细节以便提供对本文所述实施例的透彻理解。然而,本领域普通技术人员在本公开的教导下,可以在没有这些具体细节的情况下实施本文所描述的多个实施例。在其他情况下,本方没有详细描述公知的方法、过程和组件,以免不必要地模糊本文描述的实施例。而且,该描述不应被视为限制本文描述的实施例的范围。
21.如前所述,本披露的方案主要应用于人工智能领域,特别是应用于对神经网络进
行高效的训练中,因此为了便于理解本披露的方案,下面将首先对本披露所涉及的神经网络架构及其工作原理进行介绍。
22.神经网络(“neural network”,简称“nn”)是一种模仿生物神经网络的结构和功能的数学模型,神经网络由大量的神经元连接进行计算。因此,神经网络是一种计算模型,由大量的节点(或称“神经元”)相互连接构成。每个节点代表一种特定的输出函数,称为激活函数(“activation function”)。每两个神经元之间的连接都代表一个通过该连接信号的加权值,称之为权值,这相当于神经网络的记忆。神经网络的输出则依神经元之间的连接方式以及权值和激活函数的不同而不同。在神经网络中,神经元是神经网络的基本单位。它获得一定数量的输入和一个偏置,当信号(值)到达时会乘以一个权值。连接是将一个神经元连接到另一层或同一层的另一个神经元,连接伴随着与之相关联的权值。另外,偏置是神经元的额外输入,它始终为1,并具有自己的连接权值。这确保即使所有的输入都为空(全部为0),神经元也会激活。
23.在应用中,如果不对神经网络中的神经元应用一个非线性函数,神经网络只是一个线性函数而已,那么它并不比单个神经元强大。如果让一个神经网络的输出结果在0到1之间,例如,在猫狗鉴别的例子中,可以把接近于0的输出视为猫,将接近于1的输出视为狗。为了完成这个目标,在神经网络中引入激活函数,比如:sigmoid激活函数。关于这个激活函数,其返回值通常是一个介于0到1的数字。因此,激活函数用于将非线性引入神经网络,它会将神经网络运算结果缩小到较小的范围内。实际上,激活函数怎样表达并不重要,重要的是通过一些权值将一个非线性函数参数化,可以通过改变这些权值来改变这个非线性函数。
24.图1是示出可以应用本披露的技术方案的神经网络100的示例性框图。如图1中所示,该神经网络100包括输入层和输出层以及位于该输入层和输出层之间的多个隐藏层,在图中示例性示为卷积层、激活层、池化层和全连接层。
25.输入层的神经元被称为输入神经元,在本例中绘出3个输入神经元,其接收3个输入信号x1,x2,x3。输入层作为神经网络中的第一层,接受需要输入信号(值)并将它们传递到下一层。通常情况下,输入层不会对输入信号(值)做操作,并且没有关联的权值和偏置。对于特定的神经网络,例如卷积神经网络,其输入层可以处理多维数据。常见地,一维卷积神经网络的输入层接收一维或二维数组,其中一维数组通常为时间或频谱采样;二维数组可以包含多个通道;二维卷积神经网络的输入层接收二维或三维数组;三维卷积神经网络的输入层接收四维数组,以此类推。在一些特定的应用场景中,也可以在输入层处对数据进行预处理操作,例如可以对数据去均值、归一化及降维等操作。
26.隐藏层包含用于对输入数据应用不同变换的神经元(节点)。在图1所示出的神经网络中包括了四个隐藏层,即包括4个神经元(节点)的卷积层、4个神经元的激活层、2个神经元的池化层、6个神经元的全连接层。最后,由全连接层的运算值传递给输出层。输出层的神经元被称为输出神经元。输出层接收来自最后一个隐藏层的输出。在图1所示的神经网络中,输出层有2个神经元,有2个输出信号y1和y2。从所示出的隐藏层可以看出,基于特定的隐藏层,每个隐藏层的每一个神经元可以或可以不与下一层的每一个神经元进行连接,例如激活层和池化层的神经元是部分连接,而池化层与全连接层之间是全连接。
27.下面对于本例中的示例性隐藏层进行简要的描述。需要理解的是这里关于上述各
个隐藏层的描述仅仅是示例性的而非限制性的,本披露的技术方案并不受图1所示神经网络隐藏层结构的限制,并且本领域技术人员根据本披露的教导可以对图1所示出的神经网络结构进行修改,例如根据应用的需要增加一个或多个层,或去除图1所示结构中的一个或多个层,而这些操作依然涵盖于本披露所涵盖的技术方案之内。
28.作为本例中的第一个隐藏层-卷积层,其功能通常是对输入数据进行特征提取,其内部可以包含多个卷积核,组成卷积核的每个元素可以对应于一个权重系数和一个偏差量,类似于一个前馈神经网络的神经元。当处理图片数据时,在卷积层中,图片中的每一个特征首先局部感知,然后更高层次地对局部进行综合操作,从而得到全局信息。卷积层参数可以包括卷积核大小、步长和填充,三者共同决定卷积层输出特征图的尺寸,是卷积神经网络的超参数。在应用中,卷积层内每个神经元都与前一层中位置接近的区域的多个神经元相连,该区域的大小取决于卷积核的大小。卷积核在工作时,会有规律地扫过输入特征,对输入特征做矩阵元素乘法求和(乘加)并叠加偏差量。
29.接收上述卷积层输出的激活层实际上是对卷积层的输出结果做一次非线性映射。常用的激励函数有:sigmoid函数、tanh函数、relu函数、leaky、relu函数、elu函数及maxout函数等。通过这些激活函数之后,前一层的输出将变得相对复杂,从而提升了神经网络模型的表达能力。
30.池化层主要用于特征降维,压缩数据和参数的数量,减小过拟合,同时提高模型的容错性。通常,池化方法主要包括最大池化和平均池化。在卷积层进行特征提取并且经激活层处理后,输出的特征图会被传递至池化层进行特征选择和信息过滤。池化层包含预设定的池化函数,其功能是将特征图中单个点的结果替换为其相邻区域的特征图统计量。池化层选取池化区域与卷积核扫描特征图步骤相同,该步骤可以由池化大小、步长和填充进行控制。
31.经过前面的卷积 激活 池化后,神经网络的信号处理流程到达全连接层,其位于本例神经网络隐藏层的最后部分。特征图在全连接层中会失去空间拓扑结构,被展开为向量并通过激励函数输出。全连接层可以对提取的特征进行非线性组合以得到输出,即全连接层本身不被期望具有特征提取能力,而是试图利用现有的高阶特征完成学习目标。另外在全连接层还可以进行局部归一化(lrn)、数据增强等操作,以便增加神经网络的鲁棒性。
32.尽管在图1中未示出,在神经网络中的每一层处具有与该层关联的一个或多个算子(将结合图2来具体描述)以执行相对应的计算操作。算子在神经网络中是一个函数空间到函数空间上的映射。广义上来讲,对任何函数进行某一项操作都可以认为是一个算子。简言之,算子可以是映射、关系或者变换。例如,对于卷积层(或其他需要执行卷积操作的层)存在卷积算子,该卷积算子可以具体化为一个或多个卷积计算公式的表达。通过利用该卷积算子将输入数据与卷积核进行计算,可以获得卷积操作后的结果值。
33.上面对图1所示出神经网络结构及其节点的功能进行了示例性的描述。在实际应用中,为了获得良好的神经网络模型,预先会提供大量的样本数据(包含输入和输出)对初始神经网络进行训练。训练完成后,就获得训练后的神经网络。该受训后的神经网络可以对于将来的真实环境的输入给出一个正确的输出。
34.在开始讨论神经网络的训练之前,需要定义损失函数。损失函数是一个衡量神经网络在执行某个特定任务的表现函数。在有些实施例中,损失函数可以如此得到:在训练某
神经网络过程中,对每一个样本数据,都沿着神经网络传递得到输出值,然后将这个输出值与期望值做差再求平方,这样计算出来的损失函数就是预测值与真实值之间的距离,而训练神经网络目的就是将这个距离或损失函数的取值减小。在某些实施例中,损失函数可以表示为:
[0035][0036]
上式中,y代表期望值,指样本数据集合中每个样本数据通过神经网络得到的实际结果,i是样本数据集合中每个样本数据的索引。表示期望值y与实际结果之间的误差值。m为样本数据集合中样本数据的个数。
[0037]
以猫狗鉴别的实际应用场景为例。假定一个数据集由猫和狗的图片组成,如果图片是狗,对应的标签是1,如果图片是猫,对应的标签是0。这个标签就是对应上述公式中的期望值y,在向神经网络传递每一张样本图片的时候,实际是想通过神经网络来获得识别结果,即图片中的动物是猫还是狗。为了计算损失函数,必须遍历样本数据集中的每一张样本图片,获得每一张样本图片对应的实际结果然后按照上面的定义计算损失函数。如果损失函数的数值(简称“损失值”)比较大,例如超过一个预定的阈值,则说明神经网络还没有训练好,此时就需要借助于前述的反向传播过程来对权值进一步调整。
[0038]
在开始训练神经网络的时候,需要对权值进行随机初始化。在大多数的情况下,初始化的神经网络并不能提供一个很好的训练结果。在训练的过程中,假设以一个很糟糕的神经网络开始,通过训练可以得到一个具有高准确率的网络。
[0039]
神经网络的训练过程分为两个阶段,第一阶段是信号的正向处理操作(在本披露中称为“前向传播过程”),训练从输入层经过隐藏层,最后到达输出层。第二阶段是反向传播梯度操作(在本披露中称为后向传播过程),训练从输出层到隐藏层,最后到输入层,根据梯度依次调节神经网络中每层的权值和偏置。
[0040]
在前向传播过程中,将输入值输入到神经网络的输入层,经过多个隐藏层的相关算子执行的相应运算,可以从神经网络的输出层得到所谓的预测值的输出。当输入值提供给神经网络的输入层时,其可以不进行任何操作或依应用场景做一些必要的预处理。在隐藏层中,第二个隐藏层从第一个隐藏层获取预测中间结果值并进行计算操作和激活操作,然后将得到的预测中间结果值传递给下一个隐藏层。在后面的层中执行相同的操作,最后在神经网络的输出层得到输出值。在经过前向传播过程的正向处理后,通常可以得到一个被称为预测值的输出值。为了计算误差,可以将预测值与实际输出值进行比较,获得对应的误差值。
[0041]
在反向传播过程中,可以使用微分学的链式法则来对各层的权值进行更新,以期在下一次的前向传播过程中获得相对于前次较低的误差值。在链式法则中,首先计算对应神经网络的最后一层权值的误差值的导数(称这些导数为梯度)。然后,使用这些梯度来计算神经网络中的倒数第二层的梯度。重复此过程,直到得到神经网络中每个权值对应的梯度。最后,将神经网络中每个权值减去对应的梯度,从而对权值进行一次更新,以达到减少误差值的目的。与前向传播过程中利用各类算子(在本披露中称为前向算子)类似,在对应的反向传播过程中也存在与前向传播过程中的前向算子相对应的反向算子。例如,对于前
述卷积层中的卷积算子,其包括前向传播过程中的前向卷积算子和反向传播过程中的反卷积算子。
[0042]
在神经网络进行训练的过程中,神经网络每经过一次信号的正向处理的前向传播过程以及对应一次误差的反向传播过程,神经网络中的权值利用梯度进行一次更新,此时称为一次迭代(iteration)。为了获得精度符合预期的神经网络,在训练过程中需要很庞大的样本数据集,而一次性将样本数据集输入进计算设备(例如计算机)几乎是不可能的。因此,为了解决这个问题,需要将样本数据集划分成多个块,按块传递给计算机,每块数据集经过前向传播过程的正向处理后,对应进行一次反向传播过程中的更新神经网络的权值操作。当一个完整的样本数据集通过了神经网络一次正向处理并且对应返回了一次权值更新,这个过程称为一个周期(epoch)。实际中,在神经网络中传递一次完整的数据集是不够的,需要将完整的数据集在同一神经网络中传递多次,即需要多个周期,最终获得精度符合预期的神经网络。
[0043]
在神经网络进行训练的过程中,通常用户希望训练的速度越快越好,并且准确率越高越好,但这样的期望通常受神经网络数据的数据类型的影响。在很多应用场景中,神经网络的数据通过高精度数据格式表示(例如浮点数)。以前向传播过程中的卷积操作和反向传播过程中的反向卷积操作为例,当在计算设备中央处理单元(“cpu”)和图形处理单元(“gpu”)上执行这两项操作时,为了确保数据精度,几乎所有的输入、权重和梯度都是浮点类型数据。
[0044]
以浮点类型格式作为高精度数据格式为例,根据计算机体系结构可知,基于浮点数的运算表示法则、定点数的运算表示法则,对于同样长度的浮点运算和定点运算来说,浮点运算计算模式更为复杂,需要更多的逻辑器件来构成浮点运算器。这样从体积上来说,浮点运算器的体积比定点运算器的体积要大。进一步,浮点运算器需要消耗更多的资源去处理,使得定点运算和浮点运算二者之间的功耗差距通常是数量级的,由此造成显著的计算成本差异。然而,根据实验发现,定点运算比浮点运算执行速度快,而且精度损失并不大,因此在人工智能芯片中采用定点运算处理大量的神经网络运算(例如卷积和全连接运算)是可行的方案。例如,可以将涉及前向卷积、前向全连接、反向卷积和反向全连接算子的输入、权重和梯度的浮点型数据均进行量化后进行定点数运算,并且在算子运算完成后将低精度的数据转换成高精度数据。
[0045]
以量化对象是神经网络的权值、且量化后的权值均为8-bit定点数(相对于浮点数的低精度类型)为例,由于一个神经网络中常常有数百万连接,几乎所有空间都被神经元连接的权值所占据,并且这些权值有可能都是不同的浮点数。每层权值都趋向于某个确定区间的正态分布,例如(-3.0,3.0)。将神经网络中每层的权值对应的最大值和最小值保存下来,将每个浮点数值采用8-bit定点数表示。其中,在最大值、最小值范围内区间线性划分256个量化间隔,每个量化间隔用一个8-bit定点数表示。例如:在(-3.0,3.0)区间内,字节0表示-3.0,字节255表示3.0。以此类推,字节128表示0。
[0046]
在执行量化操作过程中,通常会涉及到两个量化参数:shift和n,其中shift是定点数点的位置(即本披露的“点位置参数”),n是定点数比特位宽(即本披露的“位宽参数”),n初始可以人为设定,shift则通过待量化数据的分布范围和n,利用下式来计算得到:
[0047][0048]
其中z是待量化数据f的绝对值的最大值max(|f|)。使用f表示量化前的浮点数据,i表示量化后的n位定点数,则从f到i的定点变换方法可以通过下式来计算:
[0049]
f≈i
×2shift
ꢀꢀꢀ
(3)
[0050]
其中step=2s为量化步长(最小量化间隔),得到的定点数i可以通过下式来表达:
[0051][0052]
当需要将量化后得到的定点数转换成浮点数,则可以执行反量化操作,则反量化后的值可以通过下式来表达:
[0053][0054]
可以看出,通过上述量化的定点数有利于神经网络的加速训练、减小芯片体积并显著减小计算开销。特别地,可以在训练神经网络的前向传播中对神经元数据和权值数据进行上述的量化操作,并且在训练神经网络的反向传播中对用于更新操作的梯度数据进行量化操作。当在上述量化操作中引入一些相关算子(稍后结合图3来详细描述)时,可以优化量化操作,从而在充分利用量化操作的同时尽量不引入过多的量化开销,由此加速神经网络训练、提高训练精度并减小计算开销。
[0055]
如前所述,尽管上述的量化操作给神经网络的训练带来明显的技术优势,但在一些应用场景中,当损失值由相对低精度的数据类型来表达时,例如以前面例子的16位浮点数(其相对于32位、64位或更高位的浮点数来说相对精度较低)来表达时,由于数值表达范围的限制,必然对反向传播中的更新操作产生不良的影响。为此,本披露提出了一种有效的损失值调整方案以克服上述缺陷,提高神经网络的训练准确性,从而加速训练。
[0056]
图2是示出根据本披露实施例的用于训练神经网络的设备200的功能框图。如图2所示,该设备200包括缩放电路202、更新电路204和调整电路206。在一个或多个实施例中,设备200还可以包括量化电路208。根据本披露的方案,缩放电路可以配置成根据缩放因子对训练神经网络过程中的前向传播获得的损失值进行缩放,以获得缩放的损失值。通过将损失值进行放大,可以有效地避免由于低精度数据的数值表达范围受限而造成后续的更新操作出现错误,从而导致整个训练过程的延缓和低效。为了便于理解,假定本披露的损失值表示为loss,则可以利用下式来对其进行缩放:
[0057]
loss_scale=loss
×
scale
ꢀꢀꢀꢀꢀ
(6)
[0058]
在上面的式(6)中,scale表示本披露的缩放因子,而loss_scale表示缩放后的缩放因子。
[0059]
在对损失值执行缩放操作后,更新电路可以配置成基于上述缩放的损失值来执行反向传播中的更新操作。在一个实施例中,这里的更新操作可以涉及对权值的更新以及在反向传播方向上从前一层向后一层传送的梯度数据更新。如前所述,反向传播的更新操作中涉及到各种类型数据的量化操作,例如前文描述的从高精度数据(如浮点数)到低精度数据(如定点数)的量化操作和从低精度数据到高精度数据的反量化操作。为此,设备200的量
化电路208可以配置成根据量化参数来对操作数据执行量化操作,以及基于所述操作数据来确定是否对前述的量化参数进行更新。进一步,调整电路可以配置成在量化电路确定更新量化参数时,调整前述的缩放因子以用于下一代反向传播中损失值的缩放。在一些实施例中,可以根据反向传播中的梯度数据来调整该缩放因子。
[0060]
根据不同的应用场景,上述的操作数据可以包括神经网络训练过程内的各种类型的数据。例如,在一个实施例中,所述操作数据可以包括梯度数据。基于此,量化参数可以包括应用于量化梯度数据的第一点位置参数或第一位宽参数,并且调整电路可以配置成当所述第一点位置参数或第一位宽参数更新时,调整所述缩放因子以用于下一代反向传播中所述损失值的缩放。
[0061]
在一个实施例中,所述操作数据可以包括梯度数据和神经元数据,所述量化参数可以包括用于梯度数据和神经元数据的第二点位置参数或第二位宽参数。基于此,本披露的调整电路可以配置成当第二点位置参数或第二位宽参数更新时,调整缩放因子以用于下一代反向传播中所述损失值的缩放。
[0062]
在一个实施例中,所述操作数据可以包括梯度数据、神经元数据和权值数据三者,所述量化参数包括用于三者的第三点位置参数或第三位宽参数,并且调整电路可以配置成当第三点位置参数或第三位宽参数更新时,调整所述缩放因子以用于下一代反向传播中所述损失值的缩放。
[0063]
根据计算场景的不同,量化操作可以具有不同的执行方式。鉴于此,本披露的量化电路可以包括正量化电路和反量化电路,其中正量化电路可以配置成根据量化参数将高精度数据类型(例如浮点型)的操作数据量化成低精度数据类型(例如定点型)的操作数据,而反量化电路可以配置成根据量化参数将低精度数据类型的操作数据反量化成高精度数据类型的操作数据。在一些实施例中,除了执行量化操作以外,本披露的量化电路还可以对是否进行量化参数的更新做出判断。为此,在一个实施例中,量化电路可以配置成根据操作数据的量化误差来确定是否对量化参数进行更新。在一个实施场景中,本披露的量化电路可以配置成基于操作数据在量化前和量化后的均值来执行运算,以确定前述的量化误差。
[0064]
在反向传播的更新操作中,关键性的任务是如何有效和准确地更新权值数据。为此,本披露的更新电路可以配置成利用缩放的损失值来获得权值梯度数据。相应地,上述量化电路中的反量化电路可以配置成将所述权值梯度数据从低精度数据类型(例如定点数)反量化成高精度数据类型(例如浮点数)的权值梯度数据。进一步,更新电路可以配置成利用缩放因子和高精度数据类型的权值梯度数据对权值进行更新。例如,当得到的损失值是16位长度的浮点数时,可以通过缩放因子将其放大后进行反向更新操作(其中包括量化成定点数进行计算的操作),并且在针对于权值梯度的计算时,可以将其转换成高精度数据(例如32位长度的浮点数)。然后,可以以缩放因子成反比的形式来缩小该32位长度的浮点数,以计算权值梯度数据,从而对权值进行更新。关于该量化和更新过程,下文还将做进一步的描述。
[0065]
以前述式(6)为基础,当利用loss_scale进行反传时(包括对相应层的操作数据进行量化操作和计算),可以得到用于各层权值更新的权值梯度w_grad。接着,为了保证计算的精度,可以将w_grad转换成高精度类型数据(例如将其从相对低精度的16位浮点数转换成相对高精度的32位浮点数),并且通过下式(7)计算权值梯度的实际值,并且利用该实际
值来对权值进行更新:
[0066]
w_grad_real=w_grad/scale
ꢀꢀꢀ
(7)
[0067]
就本披露的缩放因子“scale”而言,可以通过多种方式来对其进行调整。在一个实施例中,可以根据一个或多个超参数来对缩放因子来进行调整。在另一个实施例中,可以根据梯度数据的数据分布来确定该缩放因子。在一个实施例中,还可以基于预设的阈值和梯度数据的最大值来确定缩放因子。
[0068]
上面结合图2对本披露的设备进行了描述。需要理解的是本披露的设备可以应用于神经网络中的一层或多层。特别地,当神经网络是多层的层结构时,即神经网络包括多个中间的隐藏层时,本披露的量化电路可以配置成针对每一层来确定是否对量化参数进行更新。当量化电路在任意一层处确定需要更新量化参数时,例如基于前述的量化误差确定需要更新量化参数时,此时调整电路将相应地动态调整缩放因子,以用于下一代反向传播中的损失值的缩放。
[0069]
图3是示出根据本披露实施例的神经网络300中前向传播和反向传播中的更新操作的示例性流程图。
[0070]
如图3中的虚框所示,该神经网络300可以实施为包括前向传播中的运算块301,反向传播过程中的梯度更新块302和权值更新块303。为了便于理解和描述本披露的方案,图3所示出的神经网络可以视为仅包括单个的隐藏层(例如卷积层)的网络或仅包括一类操作(仅卷积操作)的网络,而本领域技术人员根据上文和下面的描述,将理解本披露的方案同样地也适用于隐藏层包括多个层或多种其他类型操作的情形。
[0071]
进一步示出于图3中的是前述的多个算子,其具体可以包括量化算子“quantify”,前向卷积算子“convfwd”,权重梯度算子“convbpfilter”和输入数据梯度算子“convbpdata”。下面将按照训练神经网络的前向传播过程和反向传播过程(包括权值更新和梯度更新的操作)的顺序来描述图3中的流程。这里需要指出的是,在图3中,“x”表示输入神经元数据、“w”表示权值、“dx”表示输入梯度、“dy”表示输出梯度,“[]”内的内容表示具体的数据类型,“paramx”表示神经元数据的量化参数,“paramw”表示权值的量化参数,而“paramdy”表示梯度的量化参数。
[0072]
首先,可以接收输入的神经元数据x[fp32]和初始的权值w[fp32]。如括号中所示出的,二者都是具有32位长度的浮点数。可以理解的是这里32位仅仅是示例性的,其也可以是16位或其他位宽的浮点数。如前所述,通过例如本披露的量化电路执行的量化操作,可以将二者量化为定点数。为此,在一个实施例中,可以在本披露的量化电路上实现量化算子“quantify”。该量化算子可以包括量化策略算子和量化参数算子。在一个实施例中,所述量化策略算子可以至少用于确定是否执行量化参数的更新操作,而所述量化参数算子可以至少用于确定量化参数,并使用所述量化参数对所述高精度数据类型(在本披露的例子中是浮点数)的神经网络数据执行所述量化操作。
[0073]
在一些应用场景中,上述的量化策略算子可以负责计算量化误差diff
bit
、和量化周期趋势值diff
update
。由于量化误差的确定对于量化周期、数据位宽的调整等方面具有重要意义,下面将对其进行具体描述。
[0074]
假定在一个场景中,待量化的数据为f=[f1,f2,...,fm],使用n位定点进行量化后
得到的数据为则可以通过下式来计算量化误差:
[0075][0076]
即:
[0077][0078]
当diff
bit
大于阈值th时,则可以考虑将量化位宽增加t位,从而新的量化位宽为n=n t,这里th和t都是可变的超参数。
[0079]
可以看出,上面量化误差的确定涉及利用均值函数mean()的计算,而该量化误差的计算方式具有如下的意义:
[0080]
如图4中所示出的曲线1和2的两种浮点数数据分布,假设其中一个量化间隔为[a,b],[a,c]之间的浮点数量化到a,[c,b]之间的浮点数量化到b,假定数据满足高斯分布p(x)~g(0,σ),则量化前的均值为
[0081][0082]
量化后的均值为:
[0083][0084]
并且从图4中可以看出,分布在c处的切线斜率为k。经过推导与近似计算,|k|越大(即分布越集中)并且量化间隔越大,则meanf和的差距越大。通过实验可以知道,分布越集中的数据量化后对训练最终结果带来的误差越大,所以可以使用量化前后的均值的差距来模拟量化给训练带来的实际误差。为了保持该误差不增大,在量化分布更为集中的数据(|k|)时,应使量化间隔减小,即增加量化位宽。本披露正是基于这样的理论基础,在考虑了量化误差对训练精度和效果所带来的影响后,提出可变的量化周期和数据位宽的方案。
[0085]
为减小训练过程中计算量化参数所带来的计算消耗,可以不每代都根据当前待量化数据计算量化参数,而是间隔一定代数进行量化参数更新。在不更新的代里,量化数据时可以使用存储下来的上一次更新得到的量化参数。只要更新间隔选择合适,这并不会带来训练精度损失,这是因为在训练过程中待量化数据(例如权值和梯度数据)的变化是相对稳定的,具有一定连续性和相似性。一种简单的方式是使用固定的更新周期,但是固定的更新周期适应性较差,因此本披露还提出自适应的更新周期调整。
[0086]
设间隔“interval”代(即量化周期)来更新量化参数,其计算方法如下:
[0087]
首先引入shift随着训练迭代周期的滑动平均值m
[0088]
m(i)←
α
×
shift (1-a)
×m(i-1)
ꢀꢀꢀ
(12)
[0089]
引入衡量shift变化趋势的diff
update1

[0090]
diff
update1
=|m
(i)-m
(i-1)
|
ꢀꢀꢀ
(13)
[0091]
diff
update1
越大,则说明数值范围变化越激烈,需要更高的更新频率,即interval越小。
[0092]
衡量定点位宽n变化趋势diff
update2

[0093][0094]
diff
update2
越大则越需要更大的量化位宽,需要更新位宽,间隔频率更高。
[0095]
将上述的两种衡量同时考虑,则得到前述的量化周期趋势值diff
update
如下:
[0096]
diff
update
=max(diff
update1
,diff
update2
)
ꢀꢀꢀ
(15)
[0097]
最后计算得到interva1:
[0098][0099]
在上面的等式中,α、β、γ、δ、t和th可以是超参数,并且β和γ既可以为经验值,也可以为超参数。另外,常规的超参数的优化方法均适于β和γ。
[0100]
上面对量化策略算子如何计算量化误差diff
bit
和量化周期趋势值diff
update
进行了详细地描述。在一个实现场景中,本披露的量化策略算子的输入可以包括量化前的数据和量化后的数据、量化参数(主要用到shift的滑动平均值m)、量化周期i(既可以是输入,也可以是输出)和输出量化位宽,其中量化周期和输出量化位宽可以作为输入传递给量化参数算子。
[0101]
进一步,量化参数算子的输入可以包括待量化数据、量化参数(包括点数shift、点数的滑动平均值m、缩放系数等)、数据位宽(表示输出的量化后数据采用哪种位宽)以及量化周期。在一些应用场景中,量化周期可以是控制量化算子是否要计算量化参数的变量。例如,当量化周期等于0时,可以执行量化参数的统计。当然,这里的设置也仅仅是示例性的,并且本领域技术人员基于本文的教导也可以赋予量化周期其他的含义,或采用不同的形式来进行控制。在另外一些应用场景中,如果对量化参数进行了统计,则还需把新的量化参数更新到旧的量化参数的地址。否则,此次量化操作将依然采用旧的量化参数。
[0102]
根据不同的实现方式或应用场景,量化算子可以对当前整个板卡内同一层数据进行量化。由此得到的量化参数既可以接着在多机多卡之间同步,也可以不进行这样的同步。当不进行同步时,每个板卡内可以维护一份量化参数。附加地,每个处理器核在计算出量化参数后进行同步,综合得到最终的全局的量化参数。
[0103]
返回到图3的处理流程,再经过上述的量化算子的量化操作后,将获得新的量化参数和量化后的定点数,即量化参数“paramx”、“paramw”和量化后的数据“x[int8]”(对应8位定点型的神经元)、w[int8](对应8位定点型的权重),并且将该四项作为输入送入到前向卷积算子convfwd中执行运算,以获得浮点型的结果y[fp16](对应16位浮点型数据)。在一些场景中,此处前向卷积算子convfwd的输出也可以是32位浮点型数据。在该卷积运算过程中,前向卷积算子convfwd可以对定点型的神经元数据和权值数据执行例如乘加操作的运算。例如,当输入的神经元数据是图像数据而对应的权值是卷积核(filter),则卷积操作可以是对应的图像矩阵和filter的对应位置元素的相乘再求和,最后再加上偏置b,从而获得一个特征图作为输出结果。为了保持输出的数据仍是浮点型数据,本披露的卷积算子也可
以融合有反量化算子,其例如可以通过本披露的量化电路中的反量化电路来实施。由此,可以将输出结果反量化为16位的浮点型数据y[fp16]。这里的反量化操作可以涉及利用前述的量化参数paramx和paramw来确定反量化时的步长,即前述式(5)中的step,从而将定点数反量化为高精度的浮点数。
[0104]
如前所述,基于前向传播过程所获得的训练结果,可以确定损失函数lossdiff,其例如可以通过结合图1所描述的式(1)的方式来获得,此处不再赘述。在获得该lossdiff的损失值后,根据本披露的方案,可以利用缩放电路对其进行缩放(即执行图中所示出的“scaling”操作),以用于反向传播中的运算。例如,可以使用式(6)来确定缩放后的损失值。
[0105]
接着,训练流程将进入到反向传播过程,这其中涉及反向梯度更新块302和权值更新块303来执行反向传播过程。为此,本披露通过更新电路来实施两个算子,即图中所示出的权重梯度算子“convbpfilter”和输入数据梯度算子“convbpdata”。在一个或多个实施例中,convbpdata的功能可以是计算输入神经元数据x的梯度。根据链式求导法则推导,可以得到x的梯度计算公式为:
[0106][0107]
进一步,convbpfilter的功能可以是计算权重w的梯度,根据链式求导法则推导,可得w的梯度计算公式为:
[0108][0109]
在上面的两个公式中,w,x,δ分别表示权重、输入以及来自上一层的输入梯度数据,表示卷积操作,rot180函数则表示将数据旋转180度。
[0110]
下面对反向传播过程所涉及的具体操作进行示例性描述,以便于理解反向梯度更新块和权值更新块中所涉及到的操作。
[0111]
在反向传播过程中,对于包括两层或两层以上的多个神经元的神经网络来说,针对每一层,首先对输入梯度数据例如向量(相当于图中的经调整后的dy[fp16])和本层的权值矩阵进行加权求和,以计算出本层的输出梯度向量(相当于图中的dx[fp16]),其中涉及到由反量化电路执行的从定点数到浮点数的反量化操作。另外,该输入梯度向量(相当于图中的dy[fp16])与前向传播过程时的输入神经元数据进行运算(例如对位相乘),可以得到本层权值的梯度(相当于图中的dw[fp32])。接着,可以利用前式(7)对其进行缩放来获得实际的权值梯度。然后,可以根据所得到的本层权值的实际梯度来更新本层的权值(相当于图中的w[fp32])。
[0112]
基于上述的处理过程,本披露的方案在通过对损失函数lossdiff的损失值进行缩放后,可以获得当前的输入梯度数据。接着,将其经过量化算子quantify进行量化,以得到8位定点型输入梯度数据dy[int8]和关于该梯度数据的量化参数paramdy。接着,可以将本层在前向传播过程中的对应权值量化参数paramw、8位定点型权值w[int8]、连同前述获得的输入梯度dy[int8]和梯度量化参数paramdy作为输入送入到输入数据梯度算子convbpdata进行运算,以获得本层的输出梯度dx[fp16]作为反向传播方向上的下一层(如果存在的话)的输入梯度数据(即dy[fp16])。进一步,可以将输入梯度dy[int8]、梯度数据的量化参数paramdy连同本层前向传播过程中的对应量化参数paramx和前述量化后的神经元数据x[int8]作为输入送入到权重梯度算子convbpfilter,以获得本层的权值梯度dw[fp32]。接
着,通过求解器solver,可以基于dw[fp32](经如前所述的相应缩放后)来计算得到本层更新的权值w[fp32],以用于下一次前向传播过程中的运算。
[0113]
通过上面的描述,本领域技术人员可以理解,在反向传播过程中,权重w和输入神经元数据x可以复用前向传播过程中使用的数据,因此反向传播过程中只需要量化梯度dy,梯度dy量化后的结果是量化参数paramdy和量化数据dy[int8],而无需对输入的神经元数据和权重数据再次量化,从而减少了数据的多次量化,缩短了训练的时间。
[0114]
上面结合图3对本披露的训练方案及其所涉及的量化操作进行了详细的描述。如前所述,当本披露的量化电路在反向传播过程中确定需要对量化参数进行更新时,则本披露的调整电路将相应地对缩放因子进行调整。在一个实施例中,可以基于下式来计算调整的缩放因子:
[0115]
t=floor(log2(th/m1))
ꢀꢀꢀ
(19)
[0116]
scale_new=scale
×
pow(2,t)
ꢀꢀꢀ
(20)
[0117]
其中上式中的th是超参数,其可以例如根据神经元数据的大小来设置,例如为512。m1可以是反向传播中梯度数据的最大值。floor()表示向下取整函数,而pow(x,y)函数表示求x的y次幂(或次方)。
[0118]
图5是示出根据本披露实施例的用于训练神经网络的方法500的流程图,其中这里训练神经网络的过程包括迭代执行的前向传播和反向传播。如图5中所示,在步骤502处,方法500根据缩放因子对所述前向传播获得的损失值进行缩放,以获得缩放的损失值。接着,在步骤504处,方法500基于所述缩放的损失值来执行所述反向传播中的更新操作。在一个实施例中,这里的更新操作可以包括梯度更新和权值更新。在步骤506处,方法500至少根据所述反向传播中的梯度数据来调整所述缩放因子,以便用于下一代反向传播中所述损失值的缩放。根据前文结合图3的描述,本领域技术人员可以理解量化操作穿插于前述的更新操作中,从而有利地加速更新操作的执行。进一步,步骤506的输出即为调整后的缩放因子,并且该缩放因子被反馈至步骤502,以用于对损失值进行新的缩放。可以看出,可以反复执行方法500,直至神经网络的损失值达到预期值,从而完成神经网络的训练。
[0119]
基于上面的描述,本领域技术人员可以理解方法500可以由本披露结合图2所描述的设备200来执行,因此结合图2对设备200具体操作的描述也适用于方法500所执行的步骤,此处不再赘述。
[0120]
图6是示出根据本披露实施例的一种组合处理装置600的结构图。如图6中所示,该组合处理装置600包括计算处理装置602、接口装置604、其他处理装置606和存储装置608。根据不同的应用场景,计算处理装置中可以包括一个或多个计算装置610,该计算装置可以配置用于执行本文结合附图1-5所描述的操作。特别地,在一些应用场景中,计算装置610可以包括本披露结合图2所描述的设备200,并且执行结合图5所描述的步骤。
[0121]
在不同的实施例中,本披露的计算处理装置可以配置成执行用户指定的操作。在示例性的应用中,该计算处理装置可以实现为单核人工智能处理器或者多核人工智能处理器。类似地,包括在计算处理装置内的一个或多个计算装置可以实现为人工智能处理器核或者人工智能处理器核的部分硬件结构或电路,以实现例如本披露所公开的各类电路,例如缩放电路、更新电路、量化电路或调整电路。当多个计算装置实现为人工智能处理器核或人工智能处理器核的部分硬件结构时,就本披露的计算处理装置而言,其可以视为具有单
核结构或者同构多核结构。
[0122]
在示例性的操作中,本披露的计算处理装置可以通过接口装置与其他处理装置进行交互,以共同完成用户指定的操作。根据实现方式的不同,本披露的其他处理装置可以包括中央处理器(central processing unit,cpu)、图形处理器(graphics processing unit,gpu)、人工智能处理器等通用和/或专用处理器中的一种或多种类型的处理器。这些处理器可以包括但不限于数字信号处理器(digital signal processor,dsp)、专用集成电路(application specific integrated circuit,asic)、现场可编程门阵列(field-programmable gate array,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等,并且其数目可以根据实际需要来确定。如前所述,仅就本披露的计算处理装置而言,其可以视为具有单核结构或者同构多核结构。然而,当将计算处理装置和其他处理装置共同考虑时,二者可以视为形成异构多核结构。
[0123]
在一个或多个实施例中,该其他处理装置可以作为本披露的计算处理装置(其可以具体化为人工智能例如神经网络运算的相关运算装置)与外部数据和控制的接口,执行包括但不限于数据搬运、对计算装置的开启和/或停止等基本控制。在另外的实施例中,其他处理装置也可以和该计算处理装置协作以共同完成运算任务。
[0124]
在一个或多个实施例中,该接口装置可以用于在计算处理装置与其他处理装置间传输数据和控制指令。例如,该计算处理装置可以经由所述接口装置从其他处理装置中获取输入数据,写入该计算处理装置片上的存储装置(或称存储器)。进一步,该计算处理装置可以经由所述接口装置从其他处理装置中获取控制指令,写入计算处理装置片上的控制缓存中。替代地或可选地,接口装置也可以读取计算处理装置的存储装置中的数据并传输给其他处理装置。
[0125]
附加地或可选地,本披露的组合处理装置还可以包括存储装置。如图中所示,该存储装置分别与所述计算处理装置和所述其他处理装置连接。在一个或多个实施例中,存储装置可以用于保存所述计算处理装置和/或所述其他处理装置的数据,该数据例如可以是本披露的操作数据,包括但不限于量化前或量化后的神经元数据、权值数据和/或梯度数据。在一些实施例中,该数据可以是在计算处理装置或其他处理装置的内部或片上存储装置中无法全部保存的数据。
[0126]
在一些实施例里,本披露还公开了一种芯片(例如图7中示出的芯片702)。在一种实现中,该芯片是一种系统级芯片(system on chip,soc),并且集成有一个或多个如图6中所示的组合处理装置。该芯片可以通过对外接口装置(如图7中示出的对外接口装置706)与其他相关部件相连接。该相关部件可以例如是摄像头、显示器、鼠标、键盘、网卡或wifi接口。在一些应用场景中,该芯片上可以集成有其他处理单元(例如视频编解码器)和/或接口模块(例如dram接口)等。在一些实施例中,本披露还公开了一种芯片封装结构,其包括了上述芯片。在一些实施例里,本披露还公开了一种板卡,其包括上述的芯片封装结构。下面将结合图bb对该板卡进行详细地描述。
[0127]
图7是示出根据本披露实施例的一种板卡700的结构示意图。如图7中所示,该板卡包括用于存储数据的存储器件704,其包括一个或多个存储单元710。该存储器件可以通过例如总线等方式与控制器件708和上文所述的芯片702进行连接和数据传输。进一步,该板卡还包括对外接口装置706,其配置用于芯片(或芯片封装结构中的芯片)与外部设备712
(例如服务器或计算机等)之间的数据中继或转接功能。例如,待处理的数据可以由外部设备通过对外接口装置传递至芯片。又例如,所述芯片的计算结果可以经由所述对外接口装置传送回外部设备。根据不同的应用场景,所述对外接口装置可以具有不同的接口形式,例如其可以采用标准pcie接口等。
[0128]
在一个或多个实施例中,本披露板卡中的控制器件可以配置用于对所述芯片的状态进行调控。为此,在一个应用场景中,该控制器件可以包括单片机(micro controller unit,mcu),以用于对所述芯片的工作状态进行调控。
[0129]
根据上述结合图6和图7的描述,本领域技术人员可以理解本披露也公开了一种电子设备或装置,其可以包括一个或多个上述板卡、一个或多个上述芯片和/或一个或多个上述组合处理装置。
[0130]
根据不同的应用场景,本披露的电子设备或装置可以包括服务器、云端服务器、服务器集群、数据处理装置、机器人、电脑、打印机、扫描仪、平板电脑、智能终端、pc设备、物联网终端、移动终端、手机、行车记录仪、导航仪、传感器、摄像头、相机、摄像机、投影仪、手表、耳机、移动存储、可穿戴设备、视觉终端、自动驾驶终端、交通工具、家用电器、和/或医疗设备。所述交通工具包括飞机、轮船和/或车辆;所述家用电器包括电视、空调、微波炉、冰箱、电饭煲、加湿器、洗衣机、电灯、燃气灶、油烟机;所述医疗设备包括核磁共振仪、b超仪和/或心电图仪。本披露的电子设备或装置还可以被应用于互联网、物联网、数据中心、能源、交通、公共管理、制造、教育、电网、电信、金融、零售、工地、医疗等领域。进一步,本披露的电子设备或装置还可以用于云端、边缘端、终端等与人工智能、大数据和/或云计算相关的应用场景中。在一个或多个实施例中,根据本披露方案的算力高的电子设备或装置可以应用于云端设备(例如云端服务器),而功耗小的电子设备或装置可以应用于终端设备和/或边缘端设备(例如智能手机或摄像头)。在一个或多个实施例中,云端设备的硬件信息和终端设备和/或边缘端设备的硬件信息相互兼容,从而可以根据终端设备和/或边缘端设备的硬件信息,从云端设备的硬件资源中匹配出合适的硬件资源来模拟终端设备和/或边缘端设备的硬件资源,以便完成端云一体或云边端一体的统一管理、调度和协同工作。
[0131]
需要说明的是,为了简明的目的,本披露将一些方法及其实施例表述为一系列的动作及其组合,但是本领域技术人员可以理解本披露的方案并不受所描述的动作的顺序限制。因此,依据本披露的公开或教导,本领域技术人员可以理解其中的某些步骤可以采用其他顺序来执行或者同时执行。进一步,本领域技术人员可以理解本披露所描述的实施例可以视为可选实施例,即其中所涉及的动作或模块对于本披露某个或某些方案的实现并不一定是必需的。另外,根据方案的不同,本披露对一些实施例的描述也各有侧重。鉴于此,本领域技术人员可以理解本披露某个实施例中没有详述的部分,也可以参见其他实施例的相关描述。
[0132]
在具体实现方面,基于本披露的公开和教导,本领域技术人员可以理解本披露所公开的若干实施例也可以通过本文未公开的其他方式来实现。例如,就前文所述的电子设备或装置实施例中的各个单元来说,本文在考虑了逻辑功能的基础上对其进行划分,而实际实现时也可以有另外的划分方式。又例如,可以将多个单元或组件结合或者集成到另一个系统,或者对单元或组件中的一些特征或功能进行选择性地禁用。就不同单元或组件之间的连接关系而言,前文结合附图所讨论的连接可以是单元或组件之间的直接或间接耦
合。在一些场景中,前述的直接或间接耦合涉及利用接口的通信连接,其中通信接口可以支持电性、光学、声学、磁性或其它形式的信号传输。
[0133]
在本披露中,作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元示出的部件可以是或者也可以不是物理单元。前述部件或单元可以位于同一位置或者分布到多个网络单元上。另外,根据实际的需要,可以选择其中的部分或者全部单元来实现本披露实施例所述方案的目的。另外,在一些场景中,本披露实施例中的多个单元可以集成于一个单元中或者各个单元物理上单独存在。
[0134]
在一些实现场景中,上述集成的单元可以采用软件程序模块的形式来实现。如果以软件程序模块的形式实现并作为独立的产品销售或使用时,所述集成的单元可以存储在计算机可读取存储器中。基于此,当本披露的方案以软件产品(例如计算机可读存储介质)的形式体现时,该软件产品可以存储在存储器中,其可以包括若干指令用以使得计算机设备(例如个人计算机、服务器或者网络设备等)执行本披露实施例所述方法的部分或全部步骤。前述的存储器可以包括但不限于u盘、闪存盘、只读存储器(read only memory,rom)、随机存取存储器(random access memory,ram)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
[0135]
在另外一些实现场景中,上述集成的单元也可以采用硬件的形式实现,即为具体的硬件电路,其可以包括数字电路和/或模拟电路等。电路的硬件结构的物理实现可以包括但不限于物理器件,而物理器件可以包括但不限于晶体管或忆阻器等器件。鉴于此,本文所述的各类装置(例如计算装置或其他处理装置)可以通过适当的硬件处理器来实现,例如cpu、gpu、fpga、dsp和asic等。进一步,前述的所述存储单元或存储装置可以是任意适当的存储介质(包括磁存储介质或磁光存储介质等),其例如可以是可变电阻式存储器(resistive random access memory,rram)、动态随机存取存储器(dynamic random access memory,dram)、静态随机存取存储器(static random access memory,sram)、增强动态随机存取存储器(enhanced dynamic random access memory,edram)、高带宽存储器(high bandwidth memory,hbm)、混合存储器立方体(hybrid memory cube,hmc)、rom和ram等。
[0136]
虽然本文已经示出和描述了本披露的多个实施例,但对于本领域技术人员显而易见的是,这样的实施例只是以示例的方式来提供。本领域技术人员可以在不偏离本披露思想和精神的情况下想到许多更改、改变和替代的方式。应当理解的是在实践本披露的过程中,可以采用对本文所描述的本披露实施例的各种替代方案。所附权利要求书旨在限定本披露的保护范围,并因此覆盖这些权利要求范围内的等同或替代方案。
[0137]
依据以下条款可更好地理解前述内容:
[0138]
条款a1、一种用于训练神经网络的设备,其中训练所述神经网络包括迭代执行的前向传播和反向传播,所述设备包括:
[0139]
缩放电路,其配置成根据缩放因子对所述前向传播获得的损失值进行缩放,以获得缩放的损失值;
[0140]
更新电路,其配置成基于所述缩放的损失值来执行所述反向传播中的更新操作;以及
[0141]
调整电路,其配置成至少根据所述反向传播中的梯度数据来调整所述缩放因子,
以便用于下一代反向传播中所述损失值的缩放。
[0142]
条款a2、根据条款a1所述的设备,其中所述设备还包括量化电路,其配置成:
[0143]
根据量化参数对参与所述更新操作的操作数据执行量化操作;以及
[0144]
基于所述操作数据来确定是否对所述量化参数进行更新。
[0145]
条款a3、根据条款a1或a2所述的设备,其中所述操作数据包括所述梯度数据,所述量化参数包括第一点位置参数或第一位宽参数,并且所述调整电路配置成当所述第一点位置参数或所述第一位宽参数更新时,调整所述缩放因子以用于下一代反向传播中所述损失值的缩放。
[0146]
条款a4、根据条款a1-a3的任意一项所述的设备,其中所述操作数据包括所述梯度数据和神经元数据,所述量化参数包括第二点位置参数或第二位宽参数,并且所述调整电路配置成当所述第二点位置参数或所述第二位宽参数更新时,调整所述缩放因子以用于下一代反向传播中所述损失值的缩放。
[0147]
条款a5、根据条款a1-a4的任意一项所述的设备,其中所述操作数据包括所述梯度数据、神经元数据和权值数据,所述量化参数包括第三点位置参数或第三位宽参数,并且所述调整电路配置成当所述第三点位置参数或所述第三位宽参数更新时,调整所述缩放因子以用于下一代反向传播中所述损失值的缩放。
[0148]
条款a6、根据条款a1-a5的任意一项所述的设备,其中所述量化电路包括正量化电路和反量化电路,其中所述正量化电路配置成根据所述量化参数将高精度数据类型的操作数据量化成低精度数据类型的操作数据,而所述反量化电路配置成根据所述量化参数将低精度数据类型的操作数据反量化成高精度数据类型的操作数据。
[0149]
条款a7、根据条款a1-a6的任意一项所述的设备,其中所述高精度数据类型是浮点型数据类型并且所述低精度数据类型是定点型数据类型。
[0150]
条款8、根据条款a1-a7的任意一项所述的设备,其中所述更新电路配置成利用所述缩放的损失值来获得所述梯度数据中的权值梯度数据,并且所述反量化电路配置成将所述权值梯度数据反量化成高精度数据类型的权值梯度数据,并且所述更新电路配置成利用所述缩放因子和所述高精度数据类型的权值梯度数据对权值进行更新。
[0151]
条款9、根据条款a1-a8的任意一项所述的设备,其中所述调整电路配置成根据所述梯度数据的数据分布来确定所述缩放因子。
[0152]
条款10、根据条款a1-a9的任意一项所述的设备,其中所述调整电路配置成根据所述梯度数据的最大值和预设的阈值来确定所述缩放因子。
[0153]
条款a11、根据条款a1-a10的任意一项所述的设备,其中所述量化电路配置成根据所述操作数据的量化误差来确定是否对所述量化参数进行更新。
[0154]
条款a12、根据条款a1-a11的任意一项所述的设备,其中所述量化电路配置成基于所述操作数据在量化前和量化后的均值来执行运算,以确定所述量化误差。
[0155]
条款a13、根据条款a1-a12的任意一项所述的设备,其中所述神经网络包括由多个神经元连接形成的多层结构,并且其中所述量化电路配置成针对每一层来确定是否对所述量化参数进行更新,以及当所述量化电路在任意一层处确定更新所述量化参数时,所述调整电路配置成动态地调整所述缩放因子以用于下一代反向传播中所述损失值的缩放。
[0156]
条款a14、一种集成电路,其包括根据条款a1-a13的任意一项所述的设备。
[0157]
条款a15、一种板卡,其包括根据条款a1-a14的任意一项所述的设备。
[0158]
条款a16、一种用于训练神经网络的方法,其中训练所述神经网络包括迭代执行的前向传播和反向传播,所述方法包括:
[0159]
根据缩放因子对所述前向传播获得的损失值进行缩放,以获得缩放的损失值;
[0160]
基于所述缩放的损失值来执行所述反向传播中的更新操作;以及
[0161]
至少根据所述反向传播中的梯度数据来调整所述缩放因子,以便用于下一代反向传播中所述损失值的缩放。
[0162]
条款a17、根据条款a16所述的方法,其中所述方法还包括执行量化操作,该量化操作包括:
[0163]
根据量化参数对参与所述更新操作的操作数据执行量化;以及
[0164]
基于所述操作数据来确定是否对所述量化参数进行更新。
[0165]
条款a18、根据条款a16或a17所述的方法,其中所述操作数据包括所述梯度数据,所述量化参数包括第一点位置参数或第一位宽参数,并且所述调整包括:
[0166]
当所述第一点位置参数或所述第一位宽参数更新时,调整所述缩放因子以用于下一代反向传播中所述损失值的缩放。
[0167]
条款a19、根据条款a16-a18的任意一项所述的方法,其中所述操作数据包括所述梯度数据和神经元数据,所述量化参数包括第二点位置参数或第二位宽参数,并且所述调整包括:
[0168]
当所述第二点位置参数或所述第二位宽参数更新时,调整所述缩放因子以用于下一代反向传播中所述损失值的缩放。
[0169]
条款a20、根据条款a16-a19的任意一项所述的方法,其中所述操作数据包括所述梯度数据、神经元数据和权值数据,所述量化参数包括第三点位置参数或第三位宽参数,并且所述调整包括:
[0170]
当所述第三点位置参数或所述第三位宽参数更新时,调整所述缩放因子以用于下一代反向传播中所述损失值的缩放。
[0171]
条款a21、根据条款a16-a20的任意一项所述的方法,其中所述量化操作包括正量化操作和反量化操作,其中所述正量化操作包括根据所述量化参数将高精度数据类型的操作数据量化成低精度数据类型的操作数据,而所述反量化操作包括根据所述量化参数将低精度数据类型的操作数据反量化成高精度数据类型的操作数据。
[0172]
条款a22、根据条款a16-a21的任意一项所述的方法,其中所述高精度数据类型是浮点型数据类型并且所述低精度数据类型是定点型数据类型。
[0173]
条款a23、根据条款a16-a22的任意一项所述的方法,其中所述反向传播中的所述更新操作包括利用所述缩放的损失值来获得所述梯度数据中的权值梯度数据,并且所述反量化操作包括将所述权值梯度数据反量化成高精度数据类型的权值梯度数据,并且所述反向传播中的更新操作包括利用所述缩放因子和所述高精度数据类型的权值梯度数据对权值进行更新。
[0174]
条款a24、根据条款a16-a23的任意一项所述的方法,其中所述调整包括根据所述梯度数据的数据分布来确定所述缩放因子。
[0175]
条款a25、根据条款a16-a24的任意一项所述的方法,其中所述调整包括根据所述
梯度数据的最大值和预设的阈值来确定所述缩放因子。
[0176]
条款a26、根据条款a16-a25的任意一项所述的方法,其中所述量化包括根据所述操作数据的量化误差来确定是否对所述量化参数进行更新。
[0177]
条款a27、根据条款a16-a26的任意一项所述的方法,其中所述量化包括基于所述操作数据在量化前和量化后的均值来执行运算,以确定所述量化误差。
[0178]
条款a28、根据条款a16-a27的任意一项所述的方法,其中所述神经网络包括由多个神经元连接形成的多层结构,并且其中所述方法包括:
[0179]
针对每一层来确定是否对所述量化参数进行更新;以及
[0180]
当在任意一层处确定更新所述量化参数时,动态地调整所述缩放因子以用于下一代反向传播中所述损失值的缩放。
[0181]
条款a29、一种计算机可读存储介质,其存储有用于训练神经网络的计算机程序,当所述计算机程序由一个或多个处理器运行时实现根据权利要求条款a16-28的任意一项所述的方法。
[0182]
条款a30、一种用于训练神经网络的设备,包括:至少一个处理器;至少一个存储器,其存储有计算机程序代码,所述至少一个存储器和所述计算机程序代码被配置为利用所述处理器,以使得所述设备执行根据条款a16-a28的任意一项所述的方法。
[0183]
应当理解,本披露的权利要求、说明书及附图中的术语“第一”、“第二”、“第三”和“第四”等是用于区别不同对象,而不是用于描述特定顺序。本披露的说明书和权利要求书中使用的术语“包括”和“包含”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。
[0184]
还应当理解,在此本披露说明书中所使用的术语仅仅是出于描述特定实施例的目的,而并不意在限定本披露。如在本披露说明书和权利要求书中所使用的那样,除非上下文清楚地指明其它情况,否则单数形式的“一”、“一个”及“该”意在包括复数形式。还应当进一步理解,在本披露说明书和权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。
[0185]
如在本说明书和权利要求书中所使用的那样,术语“如果”可以依据上下文被解释为“当...时”或“一旦”或“响应于确定”或“响应于检测到”。类似地,短语“如果确定”或“如果检测到[所描述条件或事件]”可以依据上下文被解释为意指“一旦确定”或“响应于确定”或“一旦检测到[所描述条件或事件]”或“响应于检测到[所描述条件或事件]”。
[0186]
以上对本披露实施例进行了详细介绍,本文中应用了具体个例对本披露的原理及实施方式进行了阐述,以上实施例的说明仅用于帮助理解本披露的方法及其核心思想。同时,本领域技术人员依据本披露的思想,基于本披露的具体实施方式及应用范围上做出的改变或变形之处,都属于本披露保护的范围。综上所述,本说明书内容不应理解为对本披露的限制。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献