用于机器学习模型的量化的制作方法

文档序号:19788166发布日期:2020-01-24 13:53阅读:289来源:国知局
用于机器学习模型的量化的制作方法



背景技术:

近几年来,机器学习技术正在不断地发展,在计算机视觉、语音处理、人工智能等众多领域取得了巨大的突破,显著地提高了机器算法在图像分类、目标检测、语音识别、机器翻译、内容过滤等多个任务中的性能,并且在互联网、视频监控等不同行业中得到了广泛应用。机器学习模型基于参数集来处理输入数据。机器学习模型的参数集通常非常大且内部处理复杂,因此模型表示和计算开销在许多应用中是一个显著障碍,特别是对于具有有限存储和计算资源的设备而言。为了克服这个困难,已经提出了一些降低模型复杂度的方案,包括精简模型结构、减少模型的参数以及量化。量化方案指的是将机器学习模型的处理所涉及的数值由精度较高的表示形式(例如浮点数格式)变换为精度较低的量化值(例如由少量比特表示的值),这可以显著降低模型表示和处理的复杂度。



技术实现要素:

根据本公开的实现,提出了一种用于机器学习模型的量化的方案。在该方案中,获得机器学习模型中的处理单位所使用的处理参数的当前值。基于预定数目的基础量化参数的当前值和特定于处理参数的二值量化参数的当前值来量化处理参数的当前值,以获得处理参数的量化值,二值量化参数与基础量化参数分别对应,并且预定数目与用于量化的比特数目相同。基于处理参数的量化值与处理参数的当前值之间的差异,更新基础量化参数的当前值和二值量化参数的当前值,以用于特定于处理参数的量化。以此方式,不仅能够获得由网络量化带来的存储和处理开销的降低,而且还能进一步提高量化准确度。

提供发明内容部分是为了简化的形式来介绍对概念的选择,其在下文的具体实施方式中将被进一步描述。发明内容部分无意标识要求保护的主题的关键特征或主要特征,也无意限制要求保护的主题的范围。

附图说明

图1示出了能够实施本公开的多个实现的计算设备的框图;

图2示出了在一个已训练的机器学习模型中的不同层的权值和输入的可能值的直方图统计分布;

图3a和图3b示出了根据本公开的实现的量化函数的示例;

图4示出了根据本公开的一些实现的用于机器学习模型的量化的过程的流程图;

图5a示出了在量化之前的处理参数的浮点值和根据本公开的实现量化之后的处理参数的量化值的直方图统计分布的比较;以及

图5b示出了在量化之前的输入的浮点值和根据本公开的实现量化之后的输入的量化值的直方图统计分布的比较。

这些附图中,相同或相似参考符号用于表示相同或相似元素。

具体实施方式

现在将参照若干示例实现来论述本公开。应当理解,论述了这些实现仅是为了使得本领域普通技术人员能够更好地理解且因此实现本公开,而不是暗示对本主题的范围的任何限制。

如本文所使用的,术语“包括”及其变体要被解读为意味着“包括但不限于”的开放式术语。术语“基于”要被解读为“至少部分地基于”。术语“一个实现”和“一种实现”要被解读为“至少一个实现”。术语“另一个实现”要被解读为“至少一个其他实现”。术语“第一”、“第二”等等可以指代不同的或相同的对象。下文还可能包括其他明确的和隐含的定义。

图1示出了能够实施本公开的多个实现的计算设备100的框图。应当理解,图1所示出的计算设备100仅仅是示例性的,而不应当构成对本公开所描述的实现的功能和范围的任何限制。如图1所示,计算设备100包括通用计算设备形式的计算设备100。计算设备100的组件可以包括但不限于一个或多个处理器或处理单元110、存储器120、存储设备130、一个或多个通信单元140、一个或多个输入设备150以及一个或多个输出设备160。

在一些实现中,计算设备100可以被实现为具有计算能力的各种用户终端或服务终端。服务终端可以是各种服务提供方提供的服务器、大型计算设备等。用户终端诸如是任意类型的移动终端、固定终端或便携式终端,包括移动手机、站点、单元、设备、多媒体计算机、多媒体平板、互联网节点、通信器、台式计算机、膝上型计算机、笔记本计算机、上网本计算机、平板计算机、个人通信系统(pcs)设备、个人导航设备、个人数字助理(pda)、音频/视频播放器、数码相机/摄像机、定位设备、电视接收器、无线电广播接收器、电子书设备、游戏设备或者其任意组合,包括这些设备的配件和外设或者其任意组合。还可预见到的是,计算设备100能够支持任意类型的针对用户的接口(诸如“可佩戴”电路等)。

处理单元110可以是实际或虚拟处理器并且能够根据存储器120中存储的程序来执行各种处理。在多处理器系统中,多个处理单元并行执行计算机可执行指令,以提高计算设备100的并行处理能力。处理单元110也可以被称为中央处理单元(cpu)、微处理器、控制器、微控制器。

计算设备100通常包括多个计算机存储介质。这样的介质可以是计算设备100可访问的任何可以获得的介质,包括但不限于易失性和非易失性介质、可拆卸和不可拆卸介质。存储器120可以是易失性存储器(例如寄存器、高速缓存、随机访问存储器(ram))、非易失性存储器(例如,只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、闪存)或其某种组合。存储器120可以包括图像识别模块122,这些程序模块被配置为执行本文所描述的各种实现的功能。图像识别模块122可以由处理单元110访问和运行,以实现相应功能。

存储设备130可以是可拆卸或不可拆卸的介质,并且可以包括机器可读介质,其能够用于存储信息和/或数据并且可以在计算设备100内被访问。计算设备100可以进一步包括另外的可拆卸/不可拆卸、易失性/非易失性存储介质。尽管未在图1中示出,可以提供用于从可拆卸、非易失性磁盘进行读取或写入的磁盘驱动和用于从可拆卸、非易失性光盘进行读取或写入的光盘驱动。在这些情况中,每个驱动可以由一个或多个数据介质接口被连接至总线(未示出)。

通信单元140实现通过通信介质与另外的计算设备进行通信。附加地,计算设备100的组件的功能可以以单个计算集群或多个计算机器来实现,这些计算机器能够通过通信连接进行通信。因此,计算设备100可以使用与一个或多个其他服务器、个人计算机(pc)或者另一个一般网络节点的逻辑连接来在联网环境中进行操作。

输入设备150可以是一个或多个各种输入设备,例如鼠标、键盘、触摸屏、摄像头、追踪球、语音输入设备等。输出设备160可以是一个或多个输出设备,例如显示器、扬声器、打印机等。计算设备100还可以根据需要通过通信单元140与一个或多个外部设备(未示出)进行通信,外部设备诸如存储设备、显示设备等,与一个或多个使得用户与计算设备100交互的设备进行通信,或者与使得计算设备100与一个或多个其他计算设备通信的任何设备(例如,网卡、调制解调器等)进行通信。这样的通信可以经由输入/输出(i/o)接口(未示出)来执行。

在一些实现中,除了被集成在单个设备上之外,计算设备100的各个部件中的一些或所有部件还可以以云计算架构的形式被设置。在云计算架构中,这些部件可以被远程布置,并且可以一起工作以实现本公开所描述的功能。在一些实现中,云计算提供计算、软件、数据访问和存储服务,它们不需要终端用户知晓提供这些服务的系统或硬件的物理位置或配置。在各种实现中,云计算使用适当的协议通过广域网(诸如因特网)提供服务。例如,云计算提供商通过广域网提供应用,并且它们可以通过web浏览器或任何其他计算组件被访问。云计算架构的软件或组件以及相应的数据可以被存储在远程位置处的服务器上。云计算环境中的计算资源可以在远程数据中心位置处被合并或者它们可以被分散。云计算基础设施可以通过共享数据中心提供服务,即使它们表现为针对用户的单一访问点。因此,可以使用云计算架构从远程位置处的服务提供商提供本文所描述的组件和功能。备选地,它们可以从常规服务器被提供,或者它们可以直接或以其他方式被安装在客户端设备上。

计算设备100可以用于实施本公开的多种实现中的用于机器学习模型的量化。计算设备100能够通过输入设备150接收被构建的机器学习模型170,以便于执行关于该模型的量化。机器学习模型170是能够从已有数据中学习到一定的知识和能力用于处理新数据。机器学习模型170可以被设计用于执行各种任务,诸如图像分类、目标检测、语音识别、机器翻译、内容过滤等等。机器学习模型170的示例包括但不限于各类深度神经网络(dnn)、支持向量机(svm)、决策树、随机森林模型等等。在本公开的实现,机器学习模型也可以被称为“学习网络”。在下文中,术语“学习模型”、“学习网络”、“模型”和“网络”可替换地使用。

图1中将机器学习模型170被示出为一种深度神经网络。深度神经网络具有分层架构,每一网络层具有一个或多个处理节点(称为神经元或滤波器),用于处理。在深度神经网络中,前一层执行处理后的输出是下一层的输入,其中架构中的第一层接收网络输入用于处理,而最后一层的输出被提供为网络输出。如图1所示,机器学习模型170包括网络层172、174、176等,其中网络层172接收网络输入,网络层176提供网络输出。

在深度神经网络中,网络内的主要处理操作是交织的线性和非线性变换。这些处理被分布在各个处理节点。图1还示出了模型170中的一个节点171的放大视图。节点171接收多个输入值a1、a2、a3等等,并且基于相应处理参数(诸如权重w1、w2、w3等)对输入值进行处理,以生成输出z。节点171可以被设计为利用一个激活函数来处理输入,这可以被表示为:

z=σ(wta)(1)

其中表示节点171的输入向量(其中包括元素a1、a2、a3等);表示节点171所使用的处理参数中的权重向量(其中包括元素w1、w2、w3等),每个权重用于加权相应的输入;n表示输入值的数目;σ()表示节点171所使用的激活函数,激活函数可以是线性函数、非线性函数。神经网络中常用的激活函数包括sigmoid函数、relu函数、tanh函数、maxout函数等等。节点171的输出也可以被称为激活值。取决于网络设计,每一网络层的输出(即激活值)可以被提供给下一层的一个、多个或全部节点作为输入。

在一些实现中,节点171的处理参数还可以包括针对每个输入的偏置,此时公式(1)可以被改写为:

z=σ(wta+b)(2)

其中表示节点171所使用的处理参数中的偏置向量(其中包括元素b1、b2、b3等),每个偏置用于偏置相应的输入和加权的结果。

在机器学习模型170中的每个网络层可以包括一个或多个节点171,当以网络层为单位来查看机器学习模型170中的处理时,每个网络层的处理也可以被类似表示为公式(1)或公式(2)的形式,此时a表示网络层的输入向量,而w表示网络层的权重。

计算设备100的处理单元110可以通过运行量化模块122来进行关于机器学习模型170的量化。量化模块122被配置为对机器学习模型170的处理所涉及的值执行量化操作,以获得量化值。量化值可以被提供给输出单元160以便输出到期望的目的设备。

应当理解,图1示出的机器学习模型的架构以及其中的网络层和处理节点的数目均是示意性的。在不同的应用中,根据需要,机器学习模型可以被设计为具有其他架构。

下文将分析执行关于机器学习模型的量化的一些可能的原因。从以上关于图1描述的机器学习模型的处理可以看出,随着机器学习模型的架构更复杂(例如包括更多网络层、更多处理节点和/或网络层之间的连接更加紧密(例如全连)),模型中的处理将会更复杂,因为需要使用更多的处理参数并且需要处理更多的输入。例如,机器学习模型的一些层执行卷积操作,这由多个卷积滤波器构成,该层所需的处理参数的维度是其中c、h和w分别表示卷积层的卷积核的通道数目、卷积核高度和卷积核宽度。很多机器学习模型还采用全连层,即前一层的全部处理节点的输入都连接到后一层的每个节点。在这样的网络中所需要的处理参数的数量也非常大。通常,很多深度神经网络将具有数千万的权重、同样数量级的偏置值、大量在内部传送的输入。这对机器学习模型的训练和使用都会带来困难。

在机器学习模型的训练过程中,训练数据被输入机器学习模型,机器学习模型基于处理参数的当前值对输入进行处理,以生成网络输出。处理参数会根据训练目标不断更新。处理参数的更新值被视作当前值并且继续被用于处理当前的输入。因此,在训练过程中,机器学习模型中的处理操作要基于处理参数的当前值和输入的当前值不断执行,直到达到训练的收敛条件。训练后获得的参数集被存储以用于表示该机器学习模型。在已训练的机器学习模型的使用过程中,根据使用的需要,处理参数被调用来处理模型的输入。

机器学习模型的处理参数和输入的真实值通常符合浮点数形式,因此在计算机存储和处理中使用浮点数格式来存储这些值是容易想到的。然而,以浮点数格式表示机器学习模型的处理参数和/或输入不仅会带来存储资源的较大开销。此外,处理参数的向量和输入向量之间需要执行内积操作,这种浮点数与浮点数之间的处理操作将带来非常高的计算开销。由此可见,机器学习模型的处理参数的存储以及模型处理开销都很大。这使得机器学习模型的训练、甚至机器学习模型的使用都难以在资源有限的设备(诸如移动电话)上执行,因而极大限制了机器学习模型的实际应用。

已经提出了一些方案用于降低机器学习模型的表示复杂度和提高处理效率。一种类型的方案是从提高处理效率的角度出发,提出了要设计紧凑的机器学习模型架构。例如,这类方案之一提出了利用微型网络来增强局部建模,将网络中处理消耗大的全连层替换为全局平均池化层。还有一种类型的方案是降低已有机器学习模型架构中的处理参数的数目。例如,通过研究深度神经网络中的滤波器权重的冗余度,一些方案提出了使用低阶近似来替换预训练权重。还有一些方案着重于研究如何减少网络层连接数,以便降低网络处理所需的参数。还有一种可能的方案是通过结构化稀疏性来使网络正则化,以获得易于硬件实现的机器学习模型。

还有另外一些方案涉及网络量化。网络量化指的是利用量化器(或量化设备、量化模块)将机器学习模型的处理所涉及的数值由精度较高的表示形式(例如浮点数格式)变换为精度较低的量化值(例如由少量比特表示的值)。这样,可以存储由少量比特表示的二进制量化值以及利用这个量化值来执行处理,这可以显著降低模型表示和处理的复杂度。网络量化是以牺牲网络处理的准确度来实现复杂度的降低。一般而言,典型量化器中的量化处理可以被表示为以下的量化函数,该量化函数是一个分段常值函数:

q(x)=qi,,如果x∈(ti,ti+1](3)

其中x表示要被量化的值,qi(其中i=1,...,m)表示第i个量化等级,(ti,ti+1]表示量化区间。量化器通过量化函数将一个量化区间内的所有值都量化到对应的量化等级,并且量化值可以由log2m比特编码成量化等级对应的索引。

量化网络权重可以生成高度压缩且节约存储的机器学习模型。例如,如果使用n比特来量化每个权重值,与使用32位或64位浮点数格式来表示的情况相比,压缩率可达此外,如果权重和要处理的输入均被量化,公式(1)或公式(2)中权重和输入的内积处理可以通过逐比特操作,诸如xnor操作(即,异或非逻辑操作)和popcnt(即,统计比特串中“1”的数目的操作)。这样的逐比特操作效率非常高。在许多一般处理平台、诸如cpu和gpu中,xnor操作和popcnt操作可以在一个或若干时钟周期内处理至少64个比特,这实现了指数级的处理提速(可能达到64倍提速)。由此可见,通过量化来降低机器学习模型的存储和计算复杂度是非常有效的。

已经存在一些网络量化方案。例如,有些量化方案提出将模型的权重量化到仅两个可能的值,例如-1和1(这也称为二值化或1比特量化)。在另外一些量化方案中,还提出将模型的权重和各个层的输入均进行量化。为了获得更高的准确度,每个权重和输入也可以被量化为更多比特。

然而,已有的方案均采用均匀量化技术,即各个量化区间的宽度(也称为量化步长)相同。例如,在一个简单的二值量化中,量化函数被表示为一个符号函数,其中如果x≥0,则q(x)=+1,如果x<0,则q(x)=-1。如果选用2比特或更多个比特来进行量化,所有量化步长(qi+1-qi)相等。在均匀量化的基础上,根据已有的方案,同样的量化方法(即同样的量化区间配置)将被用于量化整个模型的处理参数和输入。

发明人通过研究发现,单一的均匀量化方案不适合所有机器学习模型和同一机器学习模型中的全部网络层或处理节点。如果量化时所选择的量化区间不合适,将会引起较大的量化误差,带来网络准确度的降低。量化误差指的是量化值(以有限比特数表示)与真实值之间的差异。通常期望优化的量化器对于所有输入数据分布都产生最小量化误差,这可以被表示为:

其中p(x)表示要被量化的值x的概率密度函数,q(x)表示当前对x施加的量化器,q*(x)表示优化后的量化器。公式(4)表示优化的量化器要使得对于值x的可能分布都获得最小量化误差。

然而,处理参数以及输入的值跨模型或者跨网络层都会有不同变化,而且在网络训练阶段处理参数的取值均是未知的。这些原因都导致无法保证均匀量化对于机器学习模型的处理参数或输入都是最优量化选择。

图2示出了在一个已训练的机器学习模型中的不同层的权值和输入的可能值的直方图统计分布,其中值以浮点数格式来表示。每个直方图以相同步长的纵向长条指示对应取值区域的统计数目。直方图210示出了在模型中的一个层中的一个处理节点处的权重取值的分布;直方图220示出了在另一个层中的一个处理节点处的权重取值的分布。直方图230示出了与直方图210相同的层接收到的输入取值的分布;直方图240示出了与直方图220相同的层接收到的输入取值的分布。从图2可以看出,权重和输入的分布是复杂的,在不同层、不同处理节点之间都可能变化。因此,单一的均匀量化显然无法确保量化误差最小。在训练阶段,由于处理参数的取值还未确定,依靠通过简单分析取值来选择较优的量化器也是不现实的。

根据本公开的实现,提出了一种用于机器学习模型的量化的方案。该方案不采用固定均匀量化方式,而是采用一种可学习的量化方式:针对机器学习模型中的特定处理单位(例如,网络层或网络层中的处理节点)来具体学习对于该处理单位的处理参数如何量化,从而获得特定于处理单位的量化。以此方式,不仅能够获得由网络量化带来的存储和处理开销的降低,而且还能进一步提高量化准确度。

为了针对机器学习模型中的特定处理单位学习量化,一种朴素的策略是通过优化量化器中的量化等级{qi}来实现。然而,这样的策略将会使得量化函数与逐比特操作不兼容。这在机器学习模型的场景下是不期望的。

通过研究量化空间,发明人将量化处理限定到与逐比特操作相兼容的子空间。在这个子空间中,量化值可以通过一组基础量化参数的值和一组二值量化参数值共同来确定,这有助于利用学习的方式针对特定机器学习模型的处理单位来确定特定量化方式。在描述如何学习针对特定处理单位的量化之前,首先介绍作为可学习量化的基础的量化子空间。发明人已经发现,均匀量化可以认为是能够兼容于逐比特操作。原因在于,均匀量化实际上是利用一个归一化因数将浮点数值映射到最接近的定点整数值,使得均匀量化能够兼容于逐比特操作的关键性质是量化值可以被分解为比特值的线性组合,因此均匀量化也称为线性编码。具体地,由k个比特的二值编码表示的整数q实际上是以下两个向量之间的内积,即

其中bi∈{0,1},即bi。

考虑到均匀量化所提供的与逐位操作的兼容性,为了学习量化,在本公开的实现中,量化能够在一组基础量化参数的值和一组二值量化参数的值的基础上实现。这样的量化可以被表示为如下的量化函数:

qours(x,v)=vtei,如果x∈(ti,ti+1](6)

其中v表示基础量化参数向量,其中的元素包括k个基础量化参数v1、……vk,即(k是用于量化的比特数目,也称为比特宽度);ei表示二值量化参数向量。二值量化参数向量中的元素包括与基础量化参数向量分别对应的二值量化参数,并且每个二值量化参数可以取预定一对值之一。例如,每个二值量化参数可以在0和1之间选择取值,或者在-1和1之间选择取值(为了便于描述,以下在-1和1之间进行二值化为例来讨论。因此,ei∈{-1,1}k(i=1,...,2k),也即每个二值量化参数的取值可以从[-1,...,-1]到[1,...,1]。对于k比特的量化,需要2k个量化等级,每个量化等级被表示为qi=vtei,其中i=1,...,2k。给定量化等级{qi}并且假设可以推导出对于要量化的任何值x,能够最小化量化误差(例如公式(4)中的量化误差)的量化等级是ti=(qi-1+qi)/2(i=2,...,2k)。在i=1和i=2k时,t1=-∞并且

图3a和图3b示出了根据公式(6)所示的量化函数的一些示例。图3a示出的是2比特量化的情况,并且图3b示出的是3比特量化的情况。在图3a的示例中,基础量化参数向量的值被表示为v=[v1,v2]t。映射图310示出了如何基于基础量化参数和相应的二值化参数的取值来生成量化等级,而分段曲线312示出了对应的量化函数。在图3b的示例中,基础量化参数向量的值被表示为v=[v1,v2,v3]t。映射图320示出了如何基于基础量化参数和相应的二值化参数的取值来生成量化等级,而分段曲线322示出了对应的量化函数。

通过以上讨论可知,在可以被表示为一组基础量化参数和一组二值量化参数的量化中,通过确定基础量化参数和二值量化参数的值即可执行量化,并且还能够实现逐比特操作。因此,本公开的实现基于以上讨论如何针对特定机器学习模型来学习这样的量化。以下通过具体示例来进一步描述本公开的各种实现。

现在参照图4,其中示出了根据本公开一些实现的用于机器学习模型的量化的过程400的流程图。过程400可以由计算设备100来实现。为便于讨论,将参照图1来描述过程400。计算设备100根据过程400来训练量化模块130,以使得量化模块130能够利用训练后的量化参数(包括基础量化参数和二值量化参数)来执行针对机器学习模型170的量化。

在框410,计算设备100获得机器学习模型170中的处理单位所使用的处理参数的当前值。根据本公开的实现,针对特定处理单位,期望学习到优化的量化方式用于量化该处理单位的处理参数。在一些实现中,处理单位可以是机器学习模型170的处理节点171,也称为滤波器或神经元。在这样的实现中,可以训练出特定于处理单位的量化参数以用于该处理单位的处理参数的量化。在另外一些实现中,处理单位可以是机器学习模型170的网络层,例如网络层172、174、176等。在这样的实现中,可以训练出特定于网络层的量化参数以用于该处理单位的处理参数的量化。

在一些实现中,可以针对已训练的机器学习模型170来确定合适的量化参数。已训练的机器学习模型170,每个处理单位,诸如处理节点或网络层所使用的处理参数的值已被确定。此时,计算设备100所获得的处理参数的当前值即为已训练的处理单位的处理参数。在一些实现中,可以联合地训练机器学习模型170和用于量化的基础量化参数和二值量化参数。因为在训练过程中,处理参数的值还未确定,并且随着每一轮的训练而不断更新。此时,计算设备100所获得的处理参数的当前值是在训练的当前迭代中所确定的处理参数的值。机器学习模型170和两类量化参数的联合训练将在下文详细描述。在一些实现中,处理参数的当前值可以使用浮点数格式,诸如被表示为32位浮点数或64位浮点数等等。

处理单位可能具有多个处理参数,形成处理参数的集合。处理参数可以包括用于加权处理单位的输入的权重。权重的数目与被输入到该节点的输入的数目有关或者相同。处理参数还可以包括用于偏置加权结果的偏置值。对于处理节点或网络层形式的处理单位,其中使用的处理参数的数目可能较大。如后续讨论的,期望能够确定合适的量化参数,以适于这些处理参数的可能取值进行正确量化。如此,所确定的量化参数特定于该处理单位的处理参数。

在框420,计算设备100基于预定数目的基础量化参数的当前值和特定于处理参数的二值量化参数的当前值来量化处理参数的当前值,以获得处理参数的量化值。二值量化参数与基础量化参数在以上已经讨论。二值量化参数与基础量化参数分别对应,并且基础量化参数的数目与用于量化的比特数目相同。用于量化的比特数目可以例如由用户指定或者根据精度需要而确定。对于每个处理参数的量化可以由公式(6)表示。通过公式(9)可以确定每个处理参数的量化值。

过程400用于训练基础量化参数和二值量化参数的取值,因此通常需要迭代执行多次才能确定最终基础量化参数的值。基础量化参数的当前值和二值量化参数的当前值表示在当前迭代中所确定的基础量化参数和二值量化参数的值。在初始阶段,基础量化参数和二值量化参数可以具有随机化的值。

在框430,计算设备100基于处理参数的量化值与处理参数的当前值之间差异,更新基础量化参数和二值量化参数的当前值,以用于特定于处理单位的处理参数的量化。处理参数的量化值与处理参数的当前值之间差异被用作量化参数的更新目目标。期望量化参数和二值量化参数的取值被更新后能够继续减小处理参数的量化值与处理参数的当前值之间差异。

可以基于处理参数的量化值与处理参数的当前值之间差异来构建目标函数,以便引导基础量化参数和二值量化参数的更新。目标函数可以被表示为通过和处理参数的量化值与处理参数的当前值之间差异相关的损失函数。假设是要被量化的处理参数的当前值,其中n表示处理参数的数目。再假设基础量化参数被表示为其中k表示预定基础量化参数,其与用于量化的比特数目相同;二值量化参数被表示为b=[b1,...,bn]∈{-1,1}k×n,其中bi∈{-1,1}n(i=1,...,k)表示用于量化x中全部值的第i个比特的二值化取值,其中包括与基础量化参数对应的二值化取值。目标函数可以被表示为:

其中要求b∈{-1,1}k×n,v*和b*分别表示v和b的更新值。根据公式(7)可知,基础量化参数和二值量化参数的更新目标是找到v和b的取值,使得处理参数的量化误差较小或最小化。

在一些实现中,由于公式(7)较复杂,直接求解该公式来确定最优解是较困难,并且会随着b的尺寸增加而更困难。为了提高计算效率,在一些实现中,以块坐标下降方式交替更新基础量化参数和二值量化参数。具体地,可以在固定基础量化参数的当前值的情况下,更新二值量化参数的当前值,以获得二值量化参数的当前值。在更新基础量化参数的当前值时,可以固定二值量化参数的当前值。这两种更新可以交替进行,每次迭代中仅一个二值量化参数被更新。

在基础量化参数的当前值固定时(即,给定v),二值量化参数的当前值可以通过查找量化区间来更新。具体地,可以基于基础量化参数的当前值和二值量化参数的多个候选值来确定多个量化区间。二值量化参数的候选值是预定数目的-1和预定数目的+1的组合,即每个二值量化参数的取值可以从[-1,...,-1]到[1,...,1]。量化区间可以如以上讨论的,由来表示,其中ti=(qi-1+qi)/2(i=2,...,2k),qi由基础量化参数的当前值和二值量化参数的各个候选值确定。每个量化区间对应于一个取值范围,例如一个量化区间可以对应于一个取值范围(ti,ti+1]。

然后,从多个量化区间中选择一个量化区间,以使处理参数的当前值落入在所选择的量化区间对应的取值范围内。根据量化,每个量化区间都对应于一个候选量化值,落入到该量化区间内的值将被量化到该候选量化值。通过查找处理参数的当前值落入在哪个候选量化区间,来选择该候选量化区间。之后,将二值量化参数的当前值更新为用于限定所选择的量化区间的至少一个候选值中的一个。对于除了第一个和最后一个量化区间之外,每个量化区间由多个量化值限定两端。在一些实现中,可以统一选择限定量化区间的较小取值的一段中的一个后候选值。例如,如果处理参数的当前值落入由ti和ti+1限定的量化区间,可以选择用于生成ti的二值量化参数的候选值作为二值量化参数的更新值。

在二值量化参数的当前值固定的情况下(即,给定b),公式(7)将被简化为线性回归问题,其具有一个封闭解,这可以被表示为:

v*=(bbt)-1bx(8)

在一些实现中,计算设备100迭代执行框420和430中的操作,每次迭代中基础量化参数或二值量化参数可以被更新一次。在一些实现中,为了获得更多量或度,可以使用移动平均数策略来更新基础量化参数和二值量化参数。每次更新都需要使得公式(7)中处理参数的量化误差减小或至少不变。

如以上提及的,计算设备100可以机器学习模型170的训练过程中联合训练基础量化参数和二值量化参数,即联合更新基础量化参数和二值量化参数的当前值以及处理参数的当前值。通过这种联合训练,不仅能够由良好量化参数带来的量化误差降低,而且还适于更好逼近训练目标,从而提高模型准确性。

通常,机器学习模型170的训练分为前向传播和后向传播两个方向。在前向传播阶段,机器学习模型170接收用于训练的模型输入,基于处理参数的当前值来模型输入,以生成最终的模型输出。在这个前向传播中,可以获得处理参数的当前值来执行基础量化参数和二值量化参数的更新。处理参数的更新是在训练过程的后向传播阶段中进行,其中基于机器学习模型170的目标函数来更新处理参数的当前值。在一些实现中,计算设备100可以在训练过程的前向传播阶段中更新基础量化参数的当前值和二值量化参数的当前值。

在后向传播阶段,一种方法是基于后向梯度会还来更新处理参数。由于其中量化的引入,量化函数的梯度几乎都是零,这难以实现梯度回传。在一些实现,可以特别地计算由于处理参数的更新的梯度。具体地,对于在公式(6)中定义t2和之间的处理参数的值,可以将梯度确定为1,对于处于其他范围的值,将梯度确定为0。

以上讨论了如何确定基础量化参数和二值量化参数以用于特定于处理单位的处理参数的量化。在一些实现中,可以为机器学习模型170中的多个处理单位确定特定的量化参数值以用于后续量化。由于不同处理单位的处理参数的取值可能变化较大,通过为不同处理单位确定特定的量化参数,可以提高量化的准确性,从而提高机器学习模型中的处理的准确性。

在一些实现中,除了为处理单位的处理参数确定特定量化参数之外,计算设备100还可以为处理单位的输入也确定量化参数以用于输入的值的量化。处理单位的输入是前一层的输出,也被称为激活值。特定于输入的量化参数是必要的,因为处理单位的输入的取值与处理参数的取值的分布也可能不同。通过同时量化处理单位的处理参数和输入的值,除了降低对处理参数和输入的值的存储需求之外,处理单位中的处理操作将会变为高效的逐比特操作,这将极大提高处理效率,降低处理资源开销。

在此先详细介绍利用本公开的实现的量化,如何执行对处理参数和输入执行逐比特操作。假设特定于处理参数和输入的量化参数的取值均已确定。对于处理参数,假设一个处理单位的处理参数的取值是(n表示处理参数的数目),用于量化该处理单位的处理参数的基础量化参数的取值是二值量化参数的取值是其中kw是用于量化处理参数的预定比特数目,表示用于量化w中全部值的第i个比特的二值化取值,包括与基础量化参数对应的二值化取值。类似地,对于输入,假设输入的取值是用于量化该处理单位的输入的基础量化参数的取值是二值量化参数的取值其中ka是用于量化输入的预定比特数目,表示用于量化a中全部值的第i个比特的二值化取值。在量化基础上,处理参数和输入的取值的相乘(内积)操作可以被表示为:

其中⊙表示通过逐比特操作(诸如xnor和popcnt)执行的内积操作。

用于处理单位的输入的量化参数值的确定与用于处理参数的量化参数值的确定类似。具体地,计算设备100可以获得处理单位的输入的当前值。处理单位使用处理参数的当前值来处理输入的当前值。计算设备100还可以基于另一预定数目的基础量化参数和二值量化参数的当前值来量化输入的当前值,以获得输入的量化值。此处的基础量化参数和二值量化参数是特定于处理单位的输入的参数,有时也称为第二基础量化参数和第二二值量化参数。另一预定数目与用于量化输入的比特数目相同。量化输入的比特数目可以与量化输出参数的比特数目相同或者不同,这均可以根据用户配置或者实际需要来设置。

类似地,计算设备100还可以基于输入的量化值与输入的当前值之间差异,更新基础量化参数和二值量化参数的当前值,以用于特定于处理单位的输入的量化。与特定于处理参数的基础量化参数和二值量化参数的更新类似,例如通过最小化公式(7)来确定。特定于输入的基础量化参数和二值量化参数的更新也可以在机器学习模型170的训练过程中进行,在训练过程的前向传播阶段进行。特定于输入的基础量化参数和二值量化参数的更新也可以是交替的。为了简洁,特定于输入的基础量化参数和二值量化参数的更新将不再详细赘述。

在机器学习模型170的训练阶段,所获得的输入的当前值是有限的,因为输入的当前值主要取决于用于模型训练的训练数据,而在模型使用过程中模型的总体输入在此阶段是未知的并且变化可能较大。考虑到这个问题,在一些实现中,可以对基础量化参数应用移动平均数策略来更新。

以上讨论了如何通过训练和学习来确定特定于处理单位(例如处理节点或网络层)的基础量化参数和二值量化参数的取值。在一些实现中,对于处理参数,可以按处理节点来确定基础量化参数和二值量化参数的取值,因为不同处理节点的处理参数的取值分布可能差异较大。在一些实现中,对于输入(即激活值),可以按网络层来确定基础量化参数和二值量化参数的取值,因为输入是跨网络层传输,网络层中的不同处理节点连接到的都是前一层的输出,因此同一层中的不同处理节点接收到的输入的取值分布差异不大或者甚至是相同输入值。

在确定基础量化参数和二值量化参数的取值后,计算设备100中的量化模块122可以使用特定于处理单位的处理参数或输入的量化参数值来对相应的处理参数或输入的值进行量化。在机器学习模型170的使用阶段,特定于处理参数的基础量化参数和二值量化参数的取值将被用于量化处理参数的已训练值,并且将处理参数的量化值存储。在一些实现中,在确定量化值时,可以基于以上公式(6)所讨论的,基于确定基础量化参数的当前值和二值量化参数的当前值的内积结果,并且基于内积结果来确定处理参数的量化值。

根据本公开的实现,通过训练特定于处理单位的量化参数用于执行量化,特别是与机器学习模型的训练联合起来进行量化参数的训练,可以获得更好的量化参数用于实现更准确的量化。图5a示出了在量化之前的处理参数(在此处是权重)的浮点值和根据本公开的实现量化之后的处理参数的量化值的直方图统计分布的比较。图5b示出了在量化之前的输入的浮点值和根据本公开的实现量化之后的输入的量化值的直方图统计分布的比较。注意,与浮点值有关的直方图是常规直方图,其中以相同步长的纵向长条包含对应取值区域的浮点值;与量化值有关的直方图中的纵向长条包含量化到对应量区间的所有量化值。

直方图510示出了在机器学习模型中的一个层的一个处理节点处的权重的浮点值的分布,直方图512示出了根据本公开的实现对同一处理节点处的权重的浮点值进行量化之后的量化值的分布。直方图520示出了在机器学习模型中的另一层的一个处理节点处的权重的浮点值的分布,直方图522示出了根据本公开的实现对同一处理节点处的权重的浮点值进行量化之后的量化值的分布。

直方图530示出了在机器学习模型中的一个层的输入的浮点值的分布,直方图532示出了根据本公开的实现对同一层的输入的浮点值进行量化之后的量化值的分布。直方图540示出了在机器学习模型中的另一层的输入的浮点值的分布,直方图542示出了根据本公开的实现对同一层的输入的浮点值进行量化之后的量化值的分布。

从图5a和图5b可以看出,根据本公开的实现的量化可以不是均匀量化,而是随着不同层或不同处理单位而变化,更贴近处理单位的处理参数或输入的真实分布。相比于均匀量化,这可以有效降低量化误差。

以下列出了本公开的一些示例实现方式。

在一方面,本公开提供了一种由计算机实现的方法,包括:获得机器学习模型中的处理单位所使用的处理参数的当前值;基于预定数目的基础量化参数的当前值和二值量化参数的当前值来量化处理参数的当前值,以获得处理参数的量化值,二值量化参数与基础量化参数分别对应,并且预定数目与用于处理参数的量化的比特数目相同;以及基于处理参数的量化值与处理参数的当前值之间的差异,更新基础量化参数的当前值和二值量化参数的当前值,以用于特定于处理单位的处理参数的量化。

在一些实现中,更新基础量化参数的当前值和二值量化参数的当前值包括:在机器学习模型的训练过程中,联合地更新基础量化参数的当前值和二值量化参数的当前值以及处理参数的当前值。

在一些实现中,与处理参数的当前值的更新联合地更新基础量化参数的当前值和二值量化参数的当前值包括:在训练过程的前向传播阶段中,更新基础量化参数的当前值和二值量化参数的当前值;以及在训练过程的后向传播阶段中,更新处理参数的当前值。

在一些实现中,更新基础量化参数的当前值和二值量化参数的当前值包括:在固定基础量化参数的当前值的情况下,更新二值量化参数的当前值;以及在固定二值量化参数的当前值的情况下,更新基础量化参数的当前值。

在一些实现中,更新二值量化参数的当前值包括:基于基础量化参数的当前值和二值量化参数的多个候选值来确定多个量化区间,每个量化区间对应于一个取值范围并且由基础量化参数的当前值和二值量化参数的多个候选值中的至少一个候选值的内积结果限定;选择多个量化区间中的量化区间,以使处理参数的当前值落入在所选择的量化区间对应的取值范围内;以及将二值量化参数的当前值更新为用于限定所选择的量化区间的至少一个候选值中的一个。

在一些实现中,基础量化参数为第一基础量化参数并且二值量化参数为第一二值量化参数,方法进一步包括:获得处理单位的输入的当前值,处理单位使用处理参数的当前值来处理输入的当前值;基于另一预定数目的第二基础量化参数和第二二值量化参数的当前值来量化输入的当前值,以获得输入的量化值,第二二值量化参数与第二基础量化参数分别对应,并且另一预定数目与用于输入的量化的比特数目相同;以及基于输入的量化值与输入的当前值之间差异,更新第二基础量化参数和第二二值量化参数的当前值,以用于特定于处理单位的输入的量化。

在一些实现中,量化处理参数的当前值包括:确定基础量化参数的当前值和二值量化参数的当前值的内积结果;以及基于内积结果来确定处理参数的量化值。

在一些实现中,处理单位包括机器学习模型的网络层或者机器学习模型的网络层中的处理节点。

在一些实现中,处理参数的当前值使用浮点数格式。

在另一方面,本公开提供了一种电子设备。该设备包括:处理单元;以及存储器,耦合至处理单元并且包含存储于其上的指令,指令在由处理单元执行时使设备执行动作,动作包括:获得机器学习模型中的处理单位所使用的处理参数的当前值;基于预定数目的基础量化参数的当前值和二值量化参数的当前值来量化处理参数的当前值,以获得处理参数的量化值,二值量化参数与基础量化参数分别对应,并且预定数目与用于处理参数的量化的比特数目相同;以及基于处理参数的量化值与处理参数的当前值之间的差异,更新基础量化参数的当前值和二值量化参数的当前值,以用于特定于处理单位的处理参数的量化。

在一些实现中,更新基础量化参数的当前值和二值量化参数的当前值包括:在机器学习模型的训练过程中,联合地更新基础量化参数的当前值和二值量化参数的当前值以及处理参数的当前值。

在一些实现中,与处理参数的当前值的更新联合地更新基础量化参数的当前值和二值量化参数的当前值包括:在训练过程的前向传播阶段中,更新基础量化参数的当前值和二值量化参数的当前值;以及在训练过程的后向传播阶段中,更新处理参数的当前值。

在一些实现中,更新基础量化参数的当前值和二值量化参数的当前值包括:在固定基础量化参数的当前值的情况下,更新二值量化参数的当前值;以及在固定二值量化参数的当前值的情况下,更新基础量化参数的当前值。

在一些实现中,更新二值量化参数的当前值包括:基于基础量化参数的当前值和二值量化参数的多个候选值来确定多个量化区间,每个量化区间对应于一个取值范围并且由基础量化参数的当前值和二值量化参数的多个候选值中的至少一个候选值的内积结果限定;选择多个量化区间中的量化区间,以使处理参数的当前值落入在所选择的量化区间对应的取值范围内;以及将二值量化参数的当前值更新为用于限定所选择的量化区间的至少一个候选值中的一个。

在一些实现中,基础量化参数为第一基础量化参数并且二值量化参数为第一二值量化参数,设备进一步包括:获得处理单位的输入的当前值,处理单位使用处理参数的当前值来处理输入的当前值;基于另一预定数目的第二基础量化参数和第二二值量化参数的当前值来量化输入的当前值,以获得输入的量化值,第二二值量化参数与第二基础量化参数分别对应,并且另一预定数目与用于输入的量化的比特数目相同;以及基于输入的量化值与输入的当前值之间差异,更新第二基础量化参数和第二二值量化参数的当前值,以用于特定于处理单位的输入的量化。

在一些实现中,量化处理参数的当前值包括:确定基础量化参数的当前值和二值量化参数的当前值的内积结果;以及基于内积结果来确定处理参数的量化值。

在一些实现中,处理单位包括机器学习模型的网络层或者机器学习模型的网络层中的处理节点。

在一些实现中,处理参数的当前值使用浮点数格式。

在又一方面,本公开提供了一种计算机程序产品。计算机程序产品被存储在计算机存储介质中并且包括机器可执行指令,机器可执行指令在由设备执行时使设备执行动作,动作包括:获得机器学习模型中的处理单位所使用的处理参数的当前值;基于预定数目的基础量化参数的当前值和二值量化参数的当前值来量化处理参数的当前值,以获得处理参数的量化值,二值量化参数与基础量化参数分别对应,并且预定数目与用于处理参数的量化的比特数目相同;以及基于处理参数的量化值与处理参数的当前值之间的差异,更新基础量化参数的当前值和二值量化参数的当前值,以用于特定于处理单位的处理参数的量化。

在一些实现中,更新基础量化参数的当前值和二值量化参数的当前值包括:在机器学习模型的训练过程中,联合地更新基础量化参数的当前值和二值量化参数的当前值以及处理参数的当前值。

在一些实现中,与处理参数的当前值的更新联合地更新基础量化参数的当前值和二值量化参数的当前值包括:在训练过程的前向传播阶段中,更新基础量化参数的当前值和二值量化参数的当前值;以及在训练过程的后向传播阶段中,更新处理参数的当前值。

在一些实现中,更新基础量化参数的当前值和二值量化参数的当前值包括:在固定基础量化参数的当前值的情况下,更新二值量化参数的当前值;以及在固定二值量化参数的当前值的情况下,更新基础量化参数的当前值。

在一些实现中,更新二值量化参数的当前值包括:基于基础量化参数的当前值和二值量化参数的多个候选值来确定多个量化区间,每个量化区间对应于一个取值范围并且由基础量化参数的当前值和二值量化参数的多个候选值中的至少一个候选值的内积结果限定;选择多个量化区间中的量化区间,以使处理参数的当前值落入在所选择的量化区间对应的取值范围内;以及将二值量化参数的当前值更新为用于限定所选择的量化区间的至少一个候选值中的一个。

在一些实现中,基础量化参数为第一基础量化参数并且二值量化参数为第一二值量化参数,设备进一步包括:获得处理单位的输入的当前值,处理单位使用处理参数的当前值来处理输入的当前值;基于另一预定数目的第二基础量化参数和第二二值量化参数的当前值来量化输入的当前值,以获得输入的量化值,第二二值量化参数与第二基础量化参数分别对应,并且另一预定数目与用输入的量化的比特数目相同;以及基于输入的量化值与输入的当前值之间差异,更新第二基础量化参数和第二二值量化参数的当前值,以用于特定于处理单位的输入的量化。

在一些实现中,量化处理参数的当前值包括:确定基础量化参数的当前值和二值量化参数的当前值的内积结果;以及基于内积结果来确定处理参数的量化值。

在一些实现中,处理单位包括机器学习模型的网络层或者机器学习模型的网络层中的处理节点。

在一些实现中,处理参数的当前值使用浮点数格式。

在又一方面,本公开提供了一种计算机可读介质,其上存储有计算机可执行指令,计算机可执行指令在由设备执行时使设备执行以上方面中的方法。

本文中以上描述的功能可以至少部分地由一个或多个硬件逻辑部件来执行。例如,非限制性地,可以使用的示范类型的硬件逻辑部件包括:现场可编程门阵列(fpga)、专用集成电路(asic)、专用标准产品(assp)、芯片上系统的系统(soc)、负载可编程逻辑设备(cpld)等等。

用于实施本公开的方法的程序代码可以采用一个或多个编程语言的任何组合来编写。这些程序代码可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器或控制器,使得程序代码当由处理器或控制器执行时使流程图和/或框图中所规定的功能/操作被实施。程序代码可以完全在机器上执行、部分地在机器上执行,作为独立软件包部分地在机器上执行且部分地在远程机器上执行或完全在远程机器或服务器上执行。

在本公开的上下文中,机器可读介质可以是有形的介质,其可以包含或存储以供指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合地使用的程序。机器可读介质可以是机器可读信号介质或机器可读储存介质。机器可读介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体系统、装置或设备,或者上述内容的任何合适组合。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦除可编程只读存储器(eprom或快闪存储器)、光纤、便捷式紧凑盘只读存储器(cd-rom)、光学储存设备、磁储存设备、或上述内容的任何合适组合。

此外,虽然采用特定次序描绘了各操作,但是这应当理解为要求这样操作以所示出的特定次序或以顺序次序执行,或者要求所有图示的操作应被执行以取得期望的结果。在一定环境下,多任务和并行处理可能是有利的。同样地,虽然在上面论述中包含了若干具体实现细节,但是这些不应当被解释为对本公开的范围的限制。在单独的实现的上下文中描述的某些特征还可以组合地实现在单个实现中。相反地,在单个实现的上下文中描述的各种特征也可以单独地或以任何合适的子组合的方式实现在多个实现中。

尽管已经采用特定于结构特征和/或方法逻辑动作的语言描述了本主题,但是应当理解所附权利要求书中所限定的主题未必局限于上面描述的特定特征或动作。相反,上面所描述的特定特征和动作仅仅是实现权利要求书的示例形式。

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