用于压缩神经网络的参数的方法和装置

文档序号:348384 发布日期:2021-12-03 浏览:18次 >En<

阅读说明:本技术 用于压缩神经网络的参数的方法和装置 (Method and apparatus for compressing parameters of neural network ) 是由 保罗·海濑 阿图罗·马尔班冈萨雷斯 海勒·基希霍夫 塔尔马伊·马林克 德特勒夫·马尔佩 斯 于 2020-03-18 设计创作,主要内容包括:描述了一种用于对神经网络的权重参数进行编码的编码器。该编码器被配置为:获得神经网络的多个权重参数;使用上下文相关算术编码来对神经网络的权重参数进行编码;根据一个或多个先前编码的权重参数和/或根据一个或多个权重参数的数字表示的一个或多个先前编码的语法元素来选择用于对权重参数进行编码或用于对权重参数的数字表示的语法元素进行编码的上下文;以及使用所选择的上下文对权重参数或权重参数的语法元素进行编码。还描述了相应的解码器、量化器、方法和计算机程序。(An encoder for encoding weight parameters of a neural network is described. The encoder is configured to: obtaining a plurality of weight parameters of the neural network; encoding weight parameters of the neural network using context dependent arithmetic coding; selecting a context for encoding the weight parameter or for encoding a syntax element of the digital representation of the weight parameter in dependence on one or more previously encoded weight parameters and/or in dependence on one or more previously encoded syntax elements of the digital representation of the one or more weight parameters; and encoding the weight parameter or a syntax element of the weight parameter using the selected context. A corresponding decoder, quantizer, method and computer program are also described.)

用于压缩神经网络的参数的方法和装置

技术领域

根据本发明的一方面的实施例涉及用于对神经网络的权重参数进行编码的编码器。

根据本发明的一方面的其他实施例涉及用于对神经网络的权重参数进行解码的解码器。

根据本发明的一方面的其他实施例涉及用于量化神经网络的权重参数的量化器。

根据本发明的一方面的其他实施例涉及相应的方法和计算机程序。

根据本发明的一方面的实施例涉及对神经网络进行量化并将其转化为比特流从而得到其压缩表示的装置。

其他实施例将由所附权利要求限定。

应当注意,由权利要求限定的任何实施例可以由本文描述的任何细节(特征和功能)来补充。

此外,本文描述的实施例可以单独地使用,并且还可以由权利要求中包括的任何特征来补充。

此外,应当注意,本文描述的各个方面可以单独地或组合地使用。因此,可以向所述各个方面的每个方面添加细节,而无需向所述方面的另一方面添加细节。

还应当注意,本公开明确地或隐含地描述了可在视频编码器(用于提供输入视频信号的编码表示的装置)和视频解码器(用于基于编码表示提供视频信号的解码表示的装置)中使用的特征。因此,本文描述的任何特征可以在视频编码器的上下文中和视频解码器的上下文中使用。

此外,本文公开的与方法相关的特征和功能也可以用于装置(被配置为执行这种功能)中。此外,本文公开的关于装置的任何特征和功能也可以用于相应的方法中。换句话说,本文公开的方法可以由关于装置描述的任何特征和功能来补充。

而且,如将在“替代实施方式”部分中描述的,本文描述的任何特征和功能可以以硬件或软件来实现,或使用硬件和软件的组合来实现。

此外,本文描述的任何特征和语法元素可以可选地以单独的方式和以组合的方式二者引入到视频比特流中。

背景技术

本文描述了一种装置,其将神经网络量化并且转化为比特流,从而得到神经网络的压缩表示。

该装置的方法可以被划分为不同的主要部分,其由以下各项组成:

1、相关性估计

2、量化

3、无损编码

4、无损解码

在深入研究该装置的方法之前,首先将简要地介绍神经网络的主题。

神经网络:在其最基本的形式中,神经网络构成仿射变换链,后跟逐元素非线性函数。它们可以被表示为有向非循环图,如在下面的图像中所描绘的。每个节点需要特定值,该值通过与边缘的相应权重值相乘而被前向传播到下一节点。然后,所有传入值被简单地聚合。

图1示出了前馈神经网络的图形表示的示例。具体地,该2层神经网络是将4维输入向量映射到实线中的非线性函数。

在数学上,图1的神经网络将以下列方式计算输出:

输出=σ(W2·σ(W1·输入))

其中,W2和W1是神经网络权重参数(边缘权重),σ是某种非线性函数。例如,所谓的卷积层也可以通过将它们描述为矩阵-矩阵乘积来使用,如“cuDNN:Efficient Primitivesfor Deep Learning”(Sharan Chetlur等人;arXiv:1410.0759,2014)中所述。从现在开始,将把从给定输入计算输出的过程称为推理。而且,将把中间结果称为隐藏层或隐藏激活值,其构成线性变换+逐元素非线性,例如上面的第一点积+非线性的计算。

通常,神经网络配备有数百万个参数,因此可能需要数百MB来得以表示。因此,它们需要大量计算资源来执行,因为其推理过程涉及对大型矩阵之间的许多点积运算的计算。因此,降低执行这些点积的复杂度非常重要。

相关性估计:降低神经网络推理的复杂度的一种方法是量化权重参数。量化的直接结果是降低了存储器复杂度,然而,如稍后将看到的,量化还可以允许减少执行推理的运行时间。

为了以最高效的方式量化权重参数,需要能够区分网络的“更相关的”或“较不相关的”部分。也就是说,需要每个参数(或参数集)的“重要性”的度量,以便知晓在对网络的预测精度影响最小的同时,可能会对这些参数产生多大的扰动。

下面将介绍一些传统的解决方案。

文献中提出了若干种相关性估计方法。一些提出了基于网络的泰勒扩展(Taylorexpansion)的度量。例如,在“Second order derivatives for network pruning:Optimalbrain surgeon”(Babak Hassibi等人;Advances in neural information processingsystems,1993)、“Optimal brain damage”(Yann LeCun等人;Advances in neuralinformation processing systems,1990)和“Pruning convolutional neural networksfor resource efficient inference”(Pavlo Molchanov等人;arXiv:1611.06440,2016)中。

在其他工作中,一些所提出的度量基于参数的大小。例如,在“Channel pruningfor accelerating very deep neural networks”(Yihui He等人;Proceedings of theIEEE International Conference on Computer Vision,2017)、“Pruning filters forefficient convnets”(Hao Li等人;arXiv:1608.08710,2016)和“Learning both Weightsand Connections for Efficient Neural Networks”(Song Han等人;arXiv:1506.02626,2015)中。

此外,还提出了其他度量,例如“Network trimming:A data-driven neuronpruning approach towards efficient deep architectures”(Hengyuan Hu等人;arXiv:1607.03250,2016)中的零激活计数、“Structured pruning of deep convolutionalneural networks”(Saiid Anwar等人;ACM Journal on Emerging Technologies inComputing Systems(JETC),2017)中的粒子滤波技术、“Nisp:Pruning networks usingneuron importance score propagation”(Ruichi Yu等人;Proceedings of the IEEEConference on Computer Vision and Pattern Recognition,2018)中的诸如神经元重要性分数传播(NISP)等的自定义度量或“On pixel-wise explanations for non-linearclassifier decisions by layer-wise relevance propagation”(Sebastian Bach等人;PLOS ONE,10(7):e0130140,2015)中的层相关性传播方法。

作为并行的工作思路,文献研究了可缩放的贝叶斯(Bayesian)方法并且将其应用于神经网络。例如,在“Variational Dropout and theLocal Reparameterization Trick”(Diederik P.Kingma等人;arXiv:1506.02557,2015)、“Variational Dropout SparsifiesDeep Neural Networks”(Dmitry Molchanov等人;arXiv:1701.05369,2017)和“BayesianCompression for Deep Learning”(Christos Louizos等人;arXiv:1705.08665,2017)中。

这里的目标不仅仅是学习良好执行任务的单个神经网络,而且还学习这些神经网络的整体分布。因此,作为结果,学习算法将输出每个权重参数的充分统计数据,例如,均值和方差。作为直接的结果,可以直接从权重参数的二阶统计数据(因此,从其方差)导出每个权重参数的“相关性”。换句话说,参数的方差越高,该值的相关性越小,因为在不影响网络输出决策的情况下可以使该参数自其均值发生极大的扰动。

鉴于这种情况,需要一种概念,该概念在将神经网络压缩为其压缩表示与网络的预测精度(当被急切压缩时会受到不利影响)之间提供改善的折衷。

发明内容

本发明的一方面是一种用于编码神经网络的权重参数的编码器。该编码器获得神经网络的多个权重参数,并且使用上下文相关算术编码对权重参数进行编码。其中,该编码器选择用于对权重参数或权重参数的数字表示的语法元素进行编码的上下文。该选择根据一个或多个先前编码的权重参数和/或一个或多个权重参数的数字表示的语法元素来执行。然后,该编码器使用所选择的上下文对权重参数或权重参数的语法元素进行编码。

权重参数例如可以是wi或qi或li,并且神经网络例如可以是神经网络的量化版本。上下文相关算术编码例如可以是上下文自适应二进制算术编码(CABAC),其中,作为一个示例,为不同的上下文确定bin值的概率,并且其中,例如,每个bin与上下文相关联。

该编码器选择用于对权重参数(例如,wi)进行编码(其可以是算术编码)的上下文,例如具有上下文索引C的上下文。可替代地,可以对语法元素(例如,零标志“sig_flag”或符号标志“sign_flag”)进行编码,可能是算术编码。语法元素还可以是权重参数的绝对值的编码表示或权重参数的绝对值的最高有效部分的编码表示,其例如可以是一元序列bin或截断的一元序列bin。此外,语法元素还可以是权重参数的绝对值的最低有效部分的编码表示,例如,固定长度序列。

语法元素是指权重参数的数字表示,例如,经舍入或经量化的数字表示。

而且,该编码器根据先前编码的权重参数(例如,wi)和/或一个或多个权重参数的数字表示的语法元素来选择上下文。

已经发现,利用取决于先前编码的权重参数或语法元素的上下文进行编码有益于神经网络的压缩。

在优选实施例中,该编码器根据与给定上下文相关联的一个或多个先前编码的bin值来确定与给定上下文相关联的给定bin的bin值的概率。

其中,bin例如可以表示权重参数的零标志或符号标志或者权重参数的绝对值表示的比特。bin值例如可以是二进制的,即,0和1。每个bin与一个上下文相关联,但是也可以与一个以上的上下文相关联。

与一个或多个上下文相关联的编码bin值例如可以指代bin的值,其可以表示先前编码的权重参数的零标志、符号标志或绝对值表示的一个或多个比特。

已经发现,可以根据先前编码的权重参数来确定这些元素的概率。

在另一优选实施例中,该编码器以下列方式之一选择用于编码权重参数的零标志的上下文,其中权重参数是指当前编码的权重参数。

可以根据先前编码的权重参数的符号来执行该选择。

可以从至少三个不同的零标志上下文中执行该选择。该选择根据先前编码的权重参数是等于零、小于零还是大于零来选择三个上下文之一。

可以根据当前编码的权重参数是否是权重参数矩阵的扫描行或者扫描列中的第一权重参数来执行该选择。

对此的一个示例是对于从最小x索引向较大x索引的扫描顺序,当前编码的权重参数的x索引是否采用最小可能值,例如,0。

另一示例是对于从最大x索引向较小x索引的扫描顺序,当前编码的权重参数的x索引是否采用最大可能值。

又一示例是对于从最小y索引向较大y索引的扫描顺序,当前编码的权重参数的y索引是否采用最小可能值,例如,0。

再一示例是对于从最大y索引向较小y索引的扫描顺序,当前编码的权重参数的y索引是否采用最大可能值。

其中,例如,在当前编码的权重参数是权重参数矩阵的扫描行或扫描列中的第一权重参数时选择性地使用预定上下文。

可以根据当前编码的权重参数之前的权重参数是否已经被编码和/或可用来执行该选择。

在这种情况下,之前例如是指权重参数矩阵的扫描行或扫描列的扫描方向。

还可以组合选择标准,使得以如下方式执行该选择:如果先前编码的权重参数为零并且当前编码的权重参数之前的权重参数尚未被编码且不可用,则选择第一上下文;而如果先前编码的权重参数小于零,则选择第二上下文;以及如果先前编码的权重参数大于零,则选择第三上下文。

换句话说,在先前编码的权重参数为零的情况下且在当前编码的权重参数之前的权重参数(例如,当考虑权重参数矩阵的扫描行或扫描列的扫描方向时)尚未被编码的情况下且在当前编码的权重参数之前的权重参数(例如,当考虑权重参数矩阵的扫描行或扫描列的扫描方向时)不可用(例如,当考虑扫描方向时,当前编码的权重参数之前的权重参数的位置在权重矩阵之外)的情况下,选择用于对权重参数(例如,当前编码的权重参数)的零标志进行编码的第一上下文。

在先前编码的权重参数(例如,在当前编码的权重参数之前)小于零的情况下,选择用于对权重参数(例如,当前编码的权重参数)的零标志进行编码的第二上下文。

最后,在先前编码的权重参数(再次例如,在当前编码的权重参数之前)大于零的情况下,选择用于对权重参数(例如,当前编码的权重参数)的零标志进行编码的第三上下文。

再次,编码可以是算术编码,并且零标志例如可以是语法元素“sig_flag”。

已经发现,根据上述标准来选择用于零标志的上下文可以改善压缩。

在另一优选实施例中,该编码器确定多个状态标识符,其以数值的形式表示在相对于当前编码的权重参数的位置的多个位置处的多个权重参数的状态。然后,该编码器例如线性地组合状态标识符,以便获得表示当前编码的权重参数的上下文的上下文索引值。当前编码的权重参数例如可以是当前编码的权重参数的零标志,例如语法元素“sig_flag”。其中,例如,状态标识符值的每个可能的集或组合被映射到上下文值或甚至映射到唯一的上下文值。

状态标识符例如可以被称为sx-1,y、sx,y-1、Sx-1,y-1,并且可以将状态例如表示为可用性、编码状态(即,已编码或未编码)、零状态(即,等于零或不等于零)、符号、大小(例如,绝对值)等。

组合的一个示例是根据C=sx-1,y+3*sx,y-1+9*sx-1,y-1。于是,所获得的上下文索引可以例如是C。

为此,优选地,如上文所详述的,该编码器根据一行中有多少零值的(例如,先前编码的)权重参数和/或不可用的权重参数与当前编码的权重参数相邻来选择上下文。

不可用的权重参数例如可以被称为lx-1,y、lx-2,y、lx-3,y并且由状态标识符sx-1,y、sx-2,y、sx-3,y表示。

为此,进一步优选地,多个权重参数被布置成矩阵,并且权重参数被表示为1x-1,y、lx-2,y和lx-3,y并且分别对应于矩阵中的位置(x-1,y)、(x-2,y)和(x-3,y),并且由状态标识符sx-1,y、sx-2,y、sx-3,y表示。

还可以将多个权重参数布置成矩阵,并且如果矩阵中的位置(x,y)不可用(例如,位于矩阵之外或尚未被编码),或者位置(x,y)处的权重参数等于零,则位置(x,y)的状态标识符sx,y等于第一值(例如,0);如果位置(x,y)处的权重参数小于零,则位置(x,y)的状态标识符sx,y等于第二值(例如,1);以及如果位置(x,y)处的权重参数大于0,则位置(x,y)的状态标识符sx,y等于第三值(例如,2)。

可替代地,多个权重参数被布置成矩阵,并且如果矩阵中的位置(x,y)不可用(例如,位于矩阵之外或尚未被编码),或者位置(x,y)处的权重参数等于零,则位置(x,y)的状态标识符sx,y等于第一值(例如,0);以及如果位置(x,y)可用(例如,位于矩阵之内并且已经被编码)并且位置(x,y)处的权重参数不等于零,则位置(x,y)的状态标识符sx,y等于第二值(例如,1)。

已经发现,这样的上下文建模方案适合广泛的神经网络。

在另一优选实施例中,再次如上文所详述的,该编码器根据当从当前编码的权重参数看去(例如,考虑)时存在于预定方向上的最近的非零(例如,先前编码的)权重参数(例如,在权重向量矩阵中的)的距离来选择上下文。其中,例如,在确定最近的非零权重参数的距离时考虑预定数量的权重参数。

该方向可以由例如向左或在左手侧或者以类似的方式指示。

已经发现,通过根据先前已编码的最近的非零权重参数的距离选择上下文可以改善压缩。

在另一优选实施例中,该编码器仅考虑与当前编码的权重参数相邻的单个先前编码的权重参数来选择用于对权重参数的零标志(例如,语法元素“sig_flag”)或符号标志(例如,语法元素“sign_flag”)进行编码的上下文。

其中,当前编码的权重参数可以例如位于权重参数矩阵中的位置(x,y)处,并且先前编码的权重参数可以例如位于位置(x-1,y)或(x,y-1)处。相邻可以例如意指作为左邻居、作为上邻居、作为直接邻居等。

为此,优选地,该编码器可以确定该单个先前编码的权重参数的状态标识符,其中,如果该单个先前编码的权重参数不可用或位置(x,y)处的权重参数等于零,则状态标识符等于第一值(例如,0)。如果该单个先前编码的权重参数小于零,则状态标识符等于第二值(例如,1)。如果该单个先前编码的权重参数大于0,则状态标识符等于第三值(例如,2)。然后,该编码器根据状态标识符从例如三个上下文中选择上下文。

其中,“不可用”例如意指先前编码的权重参数位于权重参数矩阵之外或尚未被编码。

已经发现,通过仅考虑优选与当前编码的权重参数相邻的一个先前编码的权重参数来选择上下文,可以改善压缩。

在另一优选实施例中,该编码器根据先前编码的权重参数是小于零、等于零还是大于零来选择不同的上下文。

已经发现,当用于当前编码的权重参数的上下文取决于先前编码的权重参数是小于零、等于零还是大于零时,可以改善压缩。

在另一优选实施例中,在先前编码的权重参数不可用的情况下,该编码器选择与先前编码的权重参数的零值相关联的上下文。

其中,“不可用”例如意指先前编码的权重参数位于权重参数矩阵之外或尚未被编码。

已经发现,当与零值相关联的上下文取决于先前编码的权重参数是否可用时,可以改善压缩。

在另一优选实施例中,该编码器对表示权重参数的绝对值或其最高有效部分的一元码或截断一元码的二进制值进行算术编码。

已经发现,使用编码器对(截断)一元码的二进制值进行编码允许将本发明用于以这种方式运行的神经网络,从而利用其固有的简单性和鲁棒性。

在另一优选实施例中,该编码器对截断一元码的二进制值进行算术编码,其中截断一元码的二进制值描述权重参数的绝对值是否大于与二进制值的比特位置相关联的相应阈值。其中,该编码器提供与给定权重参数相关联的截断一元码,使得在给定权重参数小于预定值的情况下,截断一元码以例如0的二进制值终止,从而指示权重参数不大于与截断一元码的最后二进制值的比特位置相关联的相应阈值。此外,该编码器提供与另一给定权重参数相关联的截断一元码,使得在给定权重参数不小于(可替代地,大于或等于)预定值使得截断一元码不包括终止二进制值而是在其长度上受到限制的情况下,截断一元码以例如1的二进制值终止,从而指示权重参数大于与截断一元码的最后二进制值的比特位置相关联的相应阈值。由此,例如,在一元码达到预定最大可允许长度的情况下和/或在与当前比特位置或下一比特位置相关联的阈值(例如,X)大于或等于预定阈值(例如,abs_max)的情况下,选择性地省略一元码的终止二进制值,或者选择性地省略提供另一二进制值。

已经发现,可以提高压缩效率,这是因为如果在编码器和解码器侧已知最大绝对值abs_max,则当对于要传输的下一abs_level_greater_X而言X>=abs_max成立时,可以终止对abs_level_greater_X语法元素的编码。

在另一优选实施例中,该编码器对一元码或截断一元码的二进制值进行算术编码,该二进制值描述权重参数的绝对值是否大于与相应二进制值的相应比特位置相关联的相应阈值。其中,与相邻比特位置相关联的阈值之间的差在第一比特位置范围中是恒定的,例如,通过在第一比特位置范围中将X增加1;而在第一比特位置范围之后的第二比特位置范围中以指数方式增加,例如,通过在第二比特位置范围中根据X=X+2k增加X,其中k于是随比特位置的增加而增加1。

已经发现,通过本发明的一方面,可以改善相应一元码的压缩。

在另一优选实施例中,在第二比特位置范围之后的第三比特位置范围中,与相邻比特位置相关联的阈值之间的差是恒定的,例如,等于第二比特位置范围上的倒数第二个阈值与最后阈值之间的差。

已经发现,利用与相邻比特位置相关联的阈值之间的恒定差可以提高压缩效率。

在另一优选实施例中,该编码器例如根据比特位置X来选择用于对一元码或截断一元码的不同位置处的比特进行编码的不同上下文,其中,例如,比特位置X处的比特指示要编码的权重参数的绝对值是否大于X。

已经发现,通过根据比特位置选择上下文,可以改善压缩。

在另一优选实施例中,该编码器根据当前编码的权重参数的符号(例如,根据符号标志,例如,语法元素“sign_flag”)从两个可能的上下文中选择用于对一元码或截断一元码的给定比特位置(例如,比特位置X)处的比特进行编码的上下文。

另一种可能性是该编码器根据当前编码的参数的符号(例如,根据符号标志(例如,语法元素“sign_flag”))以及可选地还根据比特位置,从每个比特位置的两个可能的上下文中选择用于对一元码或截断一元码的在第一范围的一个或多个比特位置内(例如,对于X小于预定数量(例如,X’)的比特位置)的比特进行编码的上下文。该编码器独立于当前编码的权重参数的符号(例如,仅根据比特位置X),选择用于对一元码或截断一元码的在第二范围的一个或多个比特位置内(例如,对于X大于或等于预定数量(例如,X’)的比特位置X)的比特进行编码的上下文。

已经发现,从两个可能的上下文中选择用于对比特进行编码的上下文也可以改善压缩效率。

在另一优选实施例中,该编码器使用预定的(例如,固定的)上下文或使用算术编码的旁路模式来对一元码或截断一元码的在第二范围的一个或多个比特位置中的比特(例如,X大于或等于预定义数量X’的abs_level_greater_X标志)进行编码。

在另一优选实施例中,该编码器使用预定的(例如,固定的)上下文或使用算术编码的旁路模式来对权重参数的绝对值的固定比特余数(例如,权重参数的绝对值的最低有效部分)进行编码。

已经发现,通过对特定的比特位置范围或对固定的比特余数使用旁路模式的固定上下文,可以改善压缩。

在另一优选实施例中,该编码器对表示权重参数的绝对值或其最高有效部分的一元码或截断一元码的多个二进制值(例如,abs_level_greater_X,其中X可以例如以1的步长或以大于1的步长或以递增的步长增加)进行算术编码。

已经发现,对一元码的二进制值进行编码也可以提高压缩效率。

在另一优选实施例中,一元码或截断一元码的二进制值(例如,abs_level_greater_X)指示权重参数(例如,当前编码的权重参数)的绝对值是否大于X。

已经发现,如果以这种方式构造一元码,则压缩可以特别高效。

在另一优选实施例中,在X小于预定值(例如,X’)的情况下,该编码器例如根据权重参数的符号从两个可能的上下文中选择用于对考虑中的二进制值abs_level_greater_X进行编码的上下文;以及在X大于或等于预定值的情况下,使用与独立于符号的比特位置相关联的预定上下文,并且可以不依赖于该比特位置。

已经发现,以这种方式选择上下文也可以改善压缩。

在另一优选实施例中,权重参数至少在逻辑上按矩阵的行和列组织。其中,例如,与给定层的给定第i个神经元的不同输入信号相关联的权重值可以布置在第i行中,并且其中,与给定层的第j个输入信号相关联的权重值可以布置在第j列中;或者其中,例如,与给定层的给定第i个神经元的不同输入信号相关联的权重值可以布置在第i列中,并且其中,与给定层的第j个输入信号相关联的权重值可以布置在第j行中。

由此,对权重参数进行编码的顺序是沿矩阵的第一行或列,然后沿矩阵的后续第二行或列,例如,在第一行(或列)和第二行(或列)中均沿相同的方向,或者在第一行(或列)和第二行(或列)中沿相反的方向。

已经发现,如果以这种方式组织矩阵,则根据本发明的一方面的压缩是特别高效的。

在本发明的另一方面,与上文针对编码器描述的相同的概念和原理可以应用于解码器,因此不再重复。解码自然地与相应的解压缩相关联。

具体地,本发明的另一方面是用于对神经网络的权重参数进行解码的解码器。该解码器获得表示神经网络的权重参数的多个比特,并且使用上下文相关算术编码对权重参数进行解码。其中,该解码器选择用于对权重参数或权重参数的数字表示的语法元素进行解码的上下文。该选择根据一个或多个先前解码的权重参数和/或一个或多个权重参数的数字表示的语法元素来执行。然后,解码器使用所选择的上下文对权重参数或权重参数的语法元素进行解码。

权重参数例如可以是wi或qi或li,并且神经网络例如可以是神经网络的量化版本。上下文相关算术编码例如可以是上下文自适应二进制算术编码(CABAC),其中,作为一个示例,为不同的上下文确定bin值的概率,并且其中,例如,每个bin与上下文相关联。

该解码器选择用于对权重参数(例如,wi)进行解码(其可以是算术解码)的上下文,例如具有上下文索引C的上下文。可替代地,可以对语法元素(例如,零标志“sig_flag”或符号标志“sign_flag”)进行解码,可能是算术解码。语法元素还可以是权重参数的绝对值的解码表示或权重参数的绝对值的最高有效部分的解码表示,其例如可以是一元序列bin或截断的一元序列bin。此外,语法元素还可以是权重参数的绝对值的最低有效部分的解码表示,例如,固定长度序列。

语法元素是指权重参数的数字表示,例如,经舍入或经量化的数字表示。

而且,该解码器根据先前解码的权重参数(例如,wi)和/或一个或多个权重参数的数字表示的语法元素来选择上下文。

已经发现,利用取决于先前解码的权重参数或语法元素的上下文进行解码有益于神经网络的压缩。

在优选实施例中,该解码器根据与给定上下文相关联的一个或多个先前解码的bin值来确定与给定上下文相关联的给定bin的bin值的概率。

其中,bin例如可以表示权重参数的零标志或符号标志或者权重参数的绝对值表示的比特。bin值例如可以是二进制的,即,0和1。每个bin与一个上下文相关联,但是也可以与一个以上的上下文相关联。

与一个或多个上下文相关联的解码bin值例如可以指代bin的值,其可以表示先前解码的权重参数的零标志、符号标志或绝对值表示的一个或多个比特。

已经发现,可以根据先前解码的权重参数来确定这些元素的概率。

在另一优选实施例中,该解码器以下列方式之一选择用于解码权重参数的零标志的上下文,其中权重参数是指当前解码的权重参数。

可以根据先前解码的权重参数的符号来执行该选择。

可以从至少三个不同的零标志上下文中执行该选择。该选择根据先前解码的权重参数是等于零、小于零还是大于零来选择三个上下文之一。

可以根据当前解码的权重参数是否是权重参数矩阵的扫描行或者扫描列中的第一权重参数来执行该选择。

对此的一个示例是对于从最小x索引向较大x索引的扫描顺序,当前解码的权重参数的x索引是否采用最小可能值,例如,0。

另一示例是对于从最大x索引向较小x索引的扫描顺序,当前解码的权重参数的x索引是否采用最大可能值。

又一示例是对于从最小y索引向较大y索引的扫描顺序,当前解码的权重参数的y索引是否采用最小可能值,例如,0。

再一示例是对于从最大y索引向较小y索引的扫描顺序,当前解码的权重参数的y索引是否采用最大可能值。

其中,例如,在当前解码的权重参数是权重参数矩阵的扫描行或扫描列中的第一权重参数时选择性地使用预定上下文。

可以根据当前解码的权重参数之前的权重参数是否已经被解码和/或可用来执行该选择。

在这种情况下,之前例如是指权重参数矩阵的扫描行或扫描列的扫描方向。

还可以组合选择标准,使得以如下方式执行该选择:如果先前解码的权重参数为零并且当前解码的权重参数之前的权重参数尚未被解码并且不可用,则选择第一上下文;而如果先前解码的权重参数小于零,则选择第二上下文;以及如果先前解码的权重参数大于零,则选择第三上下文。

换句话说,在先前解码的权重参数为零的情况下且在当前解码的权重参数之前的权重参数(例如,当考虑权重参数矩阵的扫描行或扫描列的扫描方向时)尚未被解码的情况下且在当前解码的权重参数之前的权重参数(例如,当考虑权重参数矩阵的扫描行或扫描列的扫描方向时)不可用(例如,当考虑扫描方向时,当前解码的权重参数之前的权重参数的位置在权重矩阵之外)的情况下,选择用于对权重参数(例如,当前解码的权重参数)的零标志进行解码的第一上下文。

在先前解码的权重参数(例如,在当前解码的权重参数之前)小于零的情况下,选择用于对权重参数(例如,当前解码的权重参数)的零标志进行解码的第二上下文。

最后,在先前解码的权重参数(再次例如,在当前解码的权重参数之前)大于零的情况下,选择用于对权重参数(例如,当前解码的权重参数)的零标志进行解码的第三上下文。

再次,解码可以是算术解码,并且零标志例如可以是语法元素“sig_flag”。

已经发现,根据上述标准来选择用于零标志的上下文可以改善压缩。

在另一优选实施例中,该解码器确定多个状态标识符,其以数值的形式表示在相对于当前解码的权重参数的位置的多个位置处的多个权重参数的状态。然后,该解码器例如线性地组合状态标识符,以便获得表示当前解码的权重参数的上下文的上下文索引值。当前解码的权重参数例如可以是当前解码的权重参数的零标志,例如语法元素“sig_flag”。其中,例如,状态标识符值的每个可能的集或组合被映射到上下文值或甚至映射到唯一的上下文值。

状态标识符例如可以被称为sx-1,y、sx,y-1、sx-1,y-1,并且可以将状态例如表示为可用性、解码状态(即,已解码或未解码)、零状态(即,等于零或不等于零)、符号、大小(例如,绝对值)等。

组合的一个示例是根据C=sx-1,y+3*sx,y-1+9*sx-1,y-1。于是,所获得的上下文索引可以例如是C。

为此,优选地,如上文所详述的,该解码器根据一行中有多少零值的(例如,先前解码的)权重参数和/或不可用的权重参数与当前解码的权重参数相邻来选择上下文。

不可用的权重参数例如可以被称为1x-1,y、lx-2,y、lx-3,y并且由状态标识符sx-1,y、Sx-2,y、sx-3,y表示。

为此,进一步优选地,多个权重参数被布置成矩阵,并且权重参数被表示为lx-1,y、lx-2,y和lx-3,y并且分别对应于矩阵中的位置(x-1,y)、(x-2,y)和(x-3,y),并且由状态标识符sx-1,y、sx-2,y、sx-3,y表示。

还可以将多个权重参数布置成矩阵,并且如果矩阵中的位置(x,y)不可用(例如,位于矩阵之外或尚未被解码),或者位置(x,y)处的权重参数等于零,则位置(x,y)的状态标识符sx,y等于第一值(例如,0);如果位置(x,y)处的权重参数小于零,则位置(x,y)的状态标识符sx,y等于第二值(例如,1),以及如果位置(x,y)处的权重参数大于0,则位置(x,y)的状态标识符sx,y等于第三值(例如,2)。

可替代地,多个权重参数被布置成矩阵,并且如果矩阵中的位置(x,y)不可用(例如,位于矩阵之外或尚未被解码),或者位置(x,y)处的权重参数等于零,则位置(x,y)的状态标识符sx,y等于第一值(例如,0);以及如果位置(x,y)可用(例如,位于矩阵之内并且已经被解码)并且位置(x,y)处的权重参数不等于零,则位置(x,y)的状态标识符sx,y等于第二值(例如,1)。

已经发现,这样的上下文建模方案适合广泛的神经网络。

在另一优选实施例中,再次如上文所详述的,该解码器根据当从当前解码的权重参数看去(例如,考虑)时存在于预定方向上的最近的非零(例如,先前解码的)权重参数(例如,在权重向量矩阵中的)的距离来选择上下文。其中,例如,在确定最近的非零权重参数的距离时考虑预定数量的权重参数。

该方向可以由例如向左或在左手侧或者以类似的方式指示。

已经发现,通过根据先前已解码的最近的非零权重参数的距离选择上下文可以改善压缩。

在另一优选实施例中,该解码器仅考虑与当前解码的权重参数相邻的单个先前解码的权重参数来选择用于对权重参数的零标志(例如,语法元素“sig_flag”)或符号标志(例如,语法元素“sign_flag”)进行解码的上下文。

其中,当前解码的权重参数可以例如位于权重参数矩阵中的位置(x,y)处,并且先前解码的权重参数可以例如位于位置(x-1,y)或(x,y-1)处。相邻可以例如意指作为左邻居、作为上邻居、作为直接邻居等。

为此,优选地,该解码器可以确定该单个先前解码的权重参数的状态标识符,其中,如果该单个先前解码的权重参数不可用或位置(x,y)处的权重参数等于零,则状态标识符等于第一值(例如,0)。如果该单个先前解码的权重参数小于零,则状态标识符等于第二值(例如,1)。如果该单个先前解码的权重参数大于0,则状态标识符等于第三值(例如,2)。然后,该解码器根据状态标识符从例如三个上下文中选择上下文。

其中,“不可用”例如意指先前解码的权重参数位于权重参数矩阵之外或尚未被解码。

已经发现,通过仅考虑优选与当前解码的权重参数相邻的一个先前解码的权重参数来选择上下文,可以改善压缩。

在另一优选实施例中,该解码器根据先前解码的权重参数是小于零、等于零还是大于零来选择不同的上下文。

已经发现,当用于当前解码的权重参数的上下文取决于先前解码的权重参数是小于零、等于零还是大于零时,可以改善压缩。

在另一优选实施例中,在先前解码的权重参数不可用的情况下,该解码器选择与先前解码的权重参数的零值相关联的上下文。

其中,“不可用”例如意指先前解码的权重参数位于权重参数矩阵之外或尚未被解码。

已经发现,当与零值相关联的上下文取决于先前解码的权重参数是否可用时,可以改善压缩。

在另一优选实施例中,该解码器对表示权重参数的绝对值或其最高有效部分的一元码或截断一元码的二进制值进行算术解码。

已经发现,使用解码器对(截断的)一元码的二进制值进行解码允许将本发明的一方面用于以这种方式运行的神经网络,从而利用其固有的简单性和鲁棒性。

在另一优选实施例中,该解码器对截断一元码的二进制值进行算术解码,其中截断一元码的二进制值描述权重参数的绝对值是否大于与二进制值的比特位置相关联的相应阈值。其中,该解码器提供与给定权重参数相关联的截断一元码,使得在给定权重参数小于预定值的情况下,截断一元码以例如0的二进制值终止,从而指示权重参数不大于与截断一元码的最后二进制值的比特位置相关联的相应阈值。此外,该解码器提供与另一给定权重参数相关联的截断一元码,使得在给定权重参数不小于(可替代地,大于或等于)预定值使得截断一元码不包括终止二进制值而是在其长度上受到限制的情况下,截断一元码以例如1的二进制值终止,从而指示权重参数大于与截断一元码的最后二进制值的比特位置相关联的相应阈值。由此,例如,在一元码达到预定最大可允许长度的情况下和/或在与当前比特位置或下一比特位置相关联的阈值(例如,X)大于或等于预定阈值(例如,abs max)的情况下,选择性地省略一元码的终止二进制值,或者选择性地省略提供另一二进制值。

已经发现,可以提高压缩效率,这是因为如果在解码器和解码器侧已知最大绝对值abs max,则当对于下一要传输的abs_level_greater_X而言X>=abs_max成立时,可以终止对abs_level_greater_X语法元素的解码。

在另一优选实施例中,该解码器对一元码或截断一元码的二进制值进行算术解码,该二进制值描述权重参数的绝对值是否大于与相应二进制值的相应比特位置相关联的相应阈值。其中,与相邻比特位置相关联的阈值之间的差在第一比特位置范围中是恒定的,例如,通过在第一比特位置范围中将X增加1;而在第一比特位置范围之后的第二比特位置范围中以指数方式增加,例如,通过在第二比特位置范围中根据X=X+2k增加X,其中k于是随比特位置的增加而增加1。

已经发现,通过本发明的一方面,可以改善相应一元码的压缩。

在另一优选实施例中,在第二比特位置范围之后的第三比特位置范围中,与相邻比特位置相关联的阈值之间的差是恒定的,例如等于第二比特位置范围上的倒数第二个阈值与最后阈值之间的差。

已经发现,利用与相邻比特位置相关联的阈值之间的恒定差可以提高压缩效率。

在另一优选实施例中,该解码器例如根据比特位置X来选择用于对一元码或截断一元码的不同位置处的比特进行解码的不同上下文,其中,例如,比特位置X处的比特指示要解码的权重参数的绝对值是否大于X。

已经发现,通过根据比特位置选择上下文,可以改善压缩。

在另一优选实施例中,该解码器根据当前解码的权重参数的符号(例如,根据符号标志,例如,语法元素“sign_flag”)从两个可能的上下文中选择用于对一元码或截断一元码的给定比特位置(例如,比特位置X)处的比特进行解码的上下文。

另一种可能性是该解码器根据当前解码的参数的符号(例如,根据符号标志(例如,语法元素“sign_flag”))以及可选地还根据比特位置,从每个比特位置的两个可能的上下文中选择用于对一元码或截断一元码的在第一范围的一个或多个比特位置内(例如,对于X小于预定数量(例如,X’)的比特位置X)的比特进行解码的上下文。该解码器独立于当前解码的权重参数的符号(例如,仅根据比特位置X),选择用于对一元码或截断一元码的在第二范围的一个或多个比特位置内(例如,对于X大于或等于预定数量(例如,X’)的比特位置X)的比特进行解码的上下文。

已经发现,从两个可能的上下文中选择用于对比特进行解码的上下文也可以改善压缩效率。

在另一优选实施例中,该解码器使用预定的(例如,固定的)上下文或使用算术编码的旁路模式来对一元码或截断一元码的在第二范围的一个或多个比特位置中的比特(例如,X大于或等于预定义数量X’的abs_level_greater_X标志)进行解码。

在另一优选实施例中,该解码器使用预定的(例如,固定的)上下文或使用算术编码的旁路模式来对权重参数的绝对值的固定比特余数(例如,权重参数的绝对值的最低有效部分)进行解码。

已经发现,通过对特定的比特位置范围或对固定的比特余数使用旁路模式的固定上下文,可以改善压缩。

在另一优选实施例中,该解码器对表示权重参数的绝对值或其最高有效部分的一元码或截断一元码的多个二进制值(例如,abs_level_greater_X,其中X可以例如以1的步长或以大于1的步长或以递增的步长增加)进行算术解码。

已经发现,对一元码的二进制值进行解码也可以提高压缩效率。

在另一优选实施例中,一元码或截断一元码的二进制值(例如,abs_level_greater_X)指示权重参数(例如,当前解码的权重参数)的绝对值是否大于X。

已经发现,如果以这种方式构造一元码,则压缩可以特别高效。

在另一优选实施例中,在X小于预定值(例如,X’)的情况下,该解码器例如根据权重参数的符号从两个可能的上下文中选择用于对考虑中的二进制值abs_level_greater_X进行解码的上下文;以及在X大于或等于预定值的情况下,该解码器使用与独立于符号的比特位置相关联的预定上下文,并且可以不依赖于该比特位置。

已经发现,以这种方式选择上下文也可以改善压缩。

在另一优选实施例中,权重参数至少在逻辑上按矩阵的行和列组织。其中,例如,与给定层的给定第i个神经元的不同输入信号相关联的权重值可以布置在第i行中,并且其中,与给定层的第j个输入信号相关联的权重值可以布置在第j列中;或者其中,例如,与给定层的给定第i个神经元的不同输入信号相关联的权重值可以布置在第i列中,并且其中,与给定层的第j个输入信号相关联的权重值可以布置在第j行中。

由此,对权重参数进行解码的顺序是沿矩阵的第一行或列,然后沿矩阵的后续第二行或列,例如,在第一行(或列)和第二行(或列)中均沿相同的方向,或者在第一行(或列)和第二行(或列)中沿相反的方向。

已经发现,如果以这种方式组织矩阵,则根据本发明的一方面的压缩是特别高效的。

在本发明的另一方面,描述了一种用于量化神经网络的权重参数的量化器。该量化器获得神经网络的多个输入权重参数(例如,wi),并且通过使用失真度量Di,k和使用比特量值(例如,Ri,k)来基于输入权重参数(例如,wi)确定量化权重参数(例如,qi),其中失真度量描述由于使用不同的量化值(例如,qi,k)(例如,不同的量化步长)而不是未量化的输入权重参数所引起的预期失真,且比特量值描述所估计或计算的针对不同的量化值(例如,qi,k)的表示(例如,编码或算术编码)的比特贡献。

已经发现,通过使用这种失真度量来确定量化权重参数,可以改善对神经网络的权重参数的量化。

在优选实施例中,该量化器根据所计算或估计的输入权重参数的方差(例如,σi 2)来确定失真度量,例如,使得失真度量描述由于使用相对于所计算或估计的方差的给定量化值而引起的预期失真。

已经发现,根据所计算或所估计的方差确定失真度量改善了量化。

在另一优选实施例中,该量化器计算用于描述输入权重参数与量化值之间的偏差的二次误差(例如,(wi-qi,k)2)与输入权重参数的所计算或估计的方差(例如,σi 2(例如,标准差σi的平方))之间的商,

以便获得与输入权重参数(例如,wi)和量化值(例如,qi,k)相关联的失真度量(例如,Di,k)。

已经发现,以这种方式计算失真度量是特别高效的。

在另一优选实施例中,该量化器评估代价(cost)函数,例如costi,k=Di,k+λ*Ri,k,其组合针对与给定输入权重参数(例如,wi)相关联的多个可能量化值(例如,由索引k指定)的失真度量(例如,Di,k)和比特量值(例如,Ri,k)),并且根据该代价函数的评估来选择量化值作为与给定输入权重参数相关联的量化权重参数,例如使得该量化权重参数使该代价函数最小化。

已经发现,为了在压缩效率和预测精度之间获得良好的权衡,可以评估如上所述的代价函数,并且可以应用率失真优化量化。

在另一优选实施例中,该量化器选择与给定输入权重参数(例如,wi)相关联的量化权重参数(例如,qi),以最小化索引k上的上述代价函数,其中Di,k是描述由于使用具有索引k的量化值(例如,qi,k)(例如,不同的量化步长)而不是未量化的输入权重参数(例如,wi)所引起的(例如,与预期方差相关的)预期失真(例如,绝对的或相对的失真)的失真度量,其中,例如,Di,k是wi、qi,k和权重参数的所确定或估计的方差σi 2的函数。而且,Ri,k是描述表示具有索引k的量化值或候选量化值(例如,qi,k)所需的估计或计算的比特数量的比特量值,并且其中,λ是预定值。

已经发现,通过最小化代价函数,可以改善压缩效率。

在另一优选实施例中,该量化器根据例如将不同量化值编码或算术编码为比特流所需的估计或计算的比特数量来获得比特量值,例如Ri,k

已经发现,通过根据编码所需的比特数量获得比特量值,可以改善量化效率。

在另一优选实施例中,该量化器确定量化权重参数(例如,qi),使得与所确定的量化权重参数相关联的失真度量小于或等于预定值,例如,使得输入权重参数与所确定的量化权重参数之间的偏差小于输入权重参数的标准差或至多等于输入权重参数的标准差。

已经发现,如果失真度量小于或等于预定值,则可以提高预测的精度。

在另一优选实施例中,该量化器使用训练神经网络(例如,人工神经网络)的学习算法(例如,训练算法)来获得描述权重参数的方差的方差信息(例如,σi 2)。

已经发现,通过训练获得方差信息可以改善方差信息的质量,从而提高预测的精度。

在另一优选实施例中,该量化器使用训练神经网络(例如,人工神经网络)的学习算法(例如,训练算法)来获得描述权重参数的均值的均值信息(例如,σi 2)作为输入权重参数,其中该均值信息接着由量化器量化,例如用于神经网络的高效存储或高效操作,或者用于比特流中的高效编码和传输。

已经发现,如上所述,由此可以使与神经网络有关的存储或操作更高效。

在另一优选实施例中,该量化器根据用于对量化权重参数进行基于上下文的算术编码的上下文来确定比特量值,其中,例如,鉴于当前上下文,该量化器可以确定或估计对不同的量化权重参数值进行算术编码将需要多少比特,其中该当前上下文可以通过先前编码的量化权重参数来确定。

已经发现,通过根据用于基于上下文的算术编码的上下文来确定比特量值,可以提高量化效率。

在本发明的另一方面,描述了一种用于对神经网络的权重参数进行编码的编码器,其包括如上所述的量化器。其中,该量化器基于输入权重参数获得量化权重参数,并且该编码器使用上下文相关算术编码(例如,使用上下文自适应二进制算术编码(CABAC))来编码神经网络的量化权重参数(例如,qi)(例如,量化版本),其中,例如,为不同的上下文确定bin值的概率,其中,例如,每个bin与上下文相关联。

这种编码器优选地包括上述编码器的任何特征或特征组合或功能。

已经发现,包括如上所述的量化器的编码器改善了编码操作。

其他方面涉及用于编码、解码和量化神经网络的权重参数的相应方法。

这些方法基于与上述装置相同的考虑。然而,应当注意,每种方法可以由本文描述的、也针对装置的任何特征、功能和细节来补充。此外,所述方法可以由所述装置的特征、功能和细节以单独和组合的方式来补充。

具体地,用于编码和解码的方法包括:获得神经网络的多个权重参数,例如wi或qi或li;以及使用上下文相关算术编码(例如,使用上下文自适应二进制算术编码(CABAC))来对神经网络的权重参数(例如,wi或qi或li)(例如,量化版本)进行编码或解码,其中,例如,为不同的上下文确定bin值的概率,其中,例如,每个bin与上下文相关联。

本发明的另一方面涉及一种计算机程序,该计算机程序当在计算机上运行时用于执行本文描述的方法。

附图说明

随后将参考附图描述根据本发明的一方面的实施例,附图中:

图1示出了前馈神经网络的图形表示;

图2示出了根据本发明的一方面的编码器的示例性实施例;

图3示出了根据本发明的一方面的解码器的示例性实施例;以及

图4示出了根据本发明的一方面的量化器的示例性实施例。

具体实施方式

在下文中,将描述用于确定神经网络系数的一些方法,其可以例如与本文公开的其他概念组合使用。然而,应当注意,也可以使用用于确定神经网络系数的不同方法。

例如,这里提出的装置应用基于较新的贝叶斯方法的相关性估计。具体地,其应用了“Variational Dropout Sparsifies Deep Neural Networks”(Dmitry Molchanov;arXiv:1701.05369,2017)中提出的算法。可以应用该算法以便估计网络的每个权重参数的最优均值和方差,用于解决特定任务。一旦估计出这些,就对权重参数的均值应用相关性加权量化算法。

具体地,它使用每个参数的标准差作为允许量化的区间大小的度量(稍后会对此进行详细介绍)。

装置提出了用于估计均值和方差的两个权项。

第一选项完全如上述文献所述应用该算法。因此,它训练每个权重参数的均值和方差两者,以便获得用于解决任务的最优配置。均值的初始化可以是随机的,也可以是从预训练的网络中获得的。这种方法的优点是所得到的网络可以被高度量化和压缩。然而,不利的是它需要大量计算资源以进行训练。这里,需要整个训练数据集来估计均值和方差。

第二选项没有第一选项的缺点(即,需要大量计算资源),这是因为它采用预训练的网络作为初始化并且将其参数固定为分布的均值(因此,是不变的)。然后,通过应用上述算法仅估计每个参数的方差。虽然这种方法可能无法获得高压缩增益,但是其优点在于计算资源大大减少,这是因为该选项只估计方差。在整个训练数据集可用或只有数据样本的子集(例如,验证集)可用的情况下,可以应用该方法。

上述算法将前向传播方法重新定义为随机算法,并且替代地使变分目标最小化。具体地,该算法试图使正则化目标最小化:

其中,第一项试图找到很好地解决任务的每个参数(如由psi参数化的)的均值和方差,而另一项试图稀疏化均值并且使方差最大化。

因此,第二选项试图找到可以应用于网络的预训练值的最大方差(或扰动),同时对其精度影响最小。第一选项试图另外找到均值最大数量为0的网络。因此,当应用第一选项时,通常会获得更高的压缩增益,但是代价是必须应用大量计算资源用于估计。

在下文中,将描述一种方法,其可以例如用于神经网络参数的量化(例如,用于如上所述确定的参数的量化)。该量化方法可以例如与本文公开的任何其他概念组合地使用,但是也可以单独地使用。

量化:基于所估计的网络的均值和方差,装置对参数的均值应用上下文自适应相关性加权量化方法。

图4示出了根据本发明的一方面的量化器的示例。示出了用于量化神经网络320的权重参数的量化器300获得神经网络320的多个输入权重参数310。量化器300使用失真度量340并使用比特量值来基于输入权重参数310,来确定量化权重参数330,其中失真度量340描述由于使用不同的量化值而不是未量化的输入权重参数所引起的预期失真,比特量值描述所估计或计算的针对不同的量化值的表示的比特贡献。

然而,应当注意,可以使用不同的量化概念/量化架构。在下文中,将描述可以用于量化(例如,用于神经网络参数的量化)的一些可选细节,这些细节可以以单独和组合的方式使用。

失真度量:以下加权的距离度量

例如可以用作失真度量,其中wi是权重序列的第i个权重,并且其中σi是相关联的标准差,并且其中qi,k是wi的多个可能量化版本中的第k个量化版本。注意,如果量化权重qi,k处于相应的标准差区间内,则失真值Di,k不超过1。

给定权重的量化版本通过量化函数Q(·)导出,该量化函数可以例如将量化值qi,k限制为等距的,从而允许定点表示。

率失真优化量化:为了在压缩效率和预测精度之间获得良好的权衡,可以应用率失真优化量化。因此,可以利用失真度量Di,k和比特量Ri,k为每个候选量化权重qi,k定义代价函数:

costi,k=Di,k+λ·Ri,k

参数λ控制运算点并且可以根据实际应用来选择。例如,可以应用如上所述的失真度量Di,k。根据编码算法,可以估计比特量Ri,k。其是将qi,k编码到比特流中所需的比特数量。然后,给定λ,使代价函数costi,k在k上最小化。

还可能感兴趣的是仅允许Di,k不超过1的量化权重。在这种情况下,保证量化权重qi,k处于权重wi的标准差区间内。

在下文中,将描述无损编码和解码的概念,例如神经网络参数或量化神经网络参数的无损编码和解码。无损编码和解码的概念可以例如与上述神经网络参数确定组合和/或与上述量化组合地使用,但是也可以单独地采用。

无损编码和解码:如果在先前步骤中应用了均匀量化器,则量化权重参数可以由整数值(权重等级)和缩放因子来表示。缩放因子可以被称为量化步长,其可以例如对于整个层是固定的。为了恢复一个层的所有量化权重参数,解码器可以知晓该层的步长和维度。例如,可以分开地对它们进行传输。在这种情况下,二进制模式被简单地写入比特流,以维度(整数)开始,后跟步长Δ(例如,32比特浮点数)。

利用上下文自适应二进制算术编码(CABAC)对整数进行编码:然后可以使用熵编码技术传输量化权重等级(整数表示)。因此,使用扫描将权重层映射到量化权重等级序列。

图2示出了根据本发明的一方面的编码器的示例。示出了用于对神经网络120的权重参数110进行编码的编码器100获得神经网络120的多个权重参数110。然后,编码器100使用上下文相关算术编码130对神经网络120的权重参数110进行编码,其中编码器100从若干可用的上下文1401、1402、……140n中选择用于对一个权重参数110进行编码或用于对权重参数的数字表示的语法元素110a进行编码的上下文。该选择根据用于选择的特定标准150来执行。本文献描述了该标准150的许多可能选项。一个可能的标准150是根据一个或多个先前编码的权重参数和/或根据一个或多个权重参数的数字表示的一个或多个先前编码的语法元素来执行该选择。编码器使用所选择的上下文对权重参数110或权重参数的语法元素110a进行编码。

然而,应当注意,可以使用不同的编码概念。在下文中,将描述可以用于编码(例如,用于神经网络参数的编码)的一些可选细节,这些细节可以以单独和组合的方式使用。

作为可选示例,在优选实施例中,使用行优先扫描顺序,从矩阵的最上面的行开始,从左到右对所包含的值进行编码。这样,从顶部到底部对所有行进行编码。

作为另一可选示例,在另一优选实施例中,在应用行优先扫描之前对矩阵进行转置。

作为另一可选示例,在另一优选实施例中,在应用行优先扫描之前,将矩阵水平地和/或竖直地翻转和/或向左或向右旋转90/180/270度。

对于多级的编码,使用CABAC(上下文自适应二进制算术编码)。细节可以在“Context-Based Adaptive Binary Arithmetic Coding in the H.264/AVC VideoCompression Standard”(D.Marpe等人;IEEE transactions on circuits and systemsfor video technology,Vol.13,No.7,pp.620-636,2003年7月)中找到。因此,量化权重等级l被分解为一系列二进制符号或语法元素,然后可以将其传递给二进制算术编码器(CABAC)。

在第一步骤中,针对量化权重等级导出二进制语法元素sig_flag,其指定相应等级是否等于零。如果sig_flag等于1,则导出另一二进制语法元素sign_flag。bin指示当前权重等级是为正(例如,bin=0)还是为负(例如,bin=1)。

接下来,对一元序列bin进行编码,后跟固定长度序列,如下:

变量k以非负整数初始化,且X以1<<k初始化。

对一个或多个语法元素abs_level_greater_X进行编码,其指示量化权重等级的绝对值大于X。如果abs_level_greater_X等于1,则更新变量k(例如,增加1),然后将1<<k添加到X,并对另一abs_level_greater_X进行编码。继续该过程直到abs_level_greater_X等于0为止。之后,长度为k的固定长度码足以完成量化权重索引的编码。例如,可以使用k比特来对变量rem=X一|l|进行编码。或者可替代地,变量rem′可以被定义为rem′=(1<<k)-rem-1,其中使用k比特对其进行编码。可替代地,可以使用变量rem到k比特的固定长度码的任何其他映射。

当在每个abs_level_greater_X之后将k增加1时,该方法与应用指数哥伦布编码(exponential Golomb coding)相同(如果不考虑sign_flag)。

另外,如果在编码器和解码器侧已知最大绝对值abs max,则当对于下一要传输的abs_level_greater_X而言X>=abs_max成立时,可以终止对abs_level_greater_X语法元素的编码。

利用CABAC对整数进行解码:量化权重等级(整数表示)的解码与编码操作类似。

图3示出了根据本发明的一方面的解码器的示例。示出了用于对神经网络220的权重参数260进行解码的解码器200获得神经网络220的多个权重参数260。然后,解码器200使用上下文相关算术编码230对神经网络220的权重参数260进行解码,其中解码器200从若干可用的上下文2401、2402、……240n中选择用于对一个权重参数260进行解码或用于对权重参数的数字表示的语法元素260a进行解码的上下文。该选择根据用于选择的特定标准250来执行。本文献描述了该标准250的许多可能选项。一个可能的标准250是根据一个或多个先前解码的权重参数和/或根据一个或多个权重参数的数字表示的一个或多个先前解码的语法元素来执行该选择。解码器使用所选择的上下文对权重参数260或权重参数的语法元素260a进行解码。

然而,应当注意,可以使用不同的解码概念。在下文中,将描述可以用于解码(例如,用于神经网络参数的解码)的一些可选细节,这些细节可以以单独和组合的方式使用。

解码器首先解码sig_flag。如果它等于1,则随后对sign_flag和一元abs_level_greater_X序列进行解码,其中k的更新(以及因此X的增量)必须遵循与编码器中相同的规则。最后,对k比特的固定长度码进行解码并且将其解释为整数(例如,rem或rem′,取决于两者中的哪一个被编码)。然后,解码后的量化权重等级的绝对值|l|可以根据X重构,并且形成固定长度部分。例如,如果rem用作固定长度部分,则|l|=X-rem。或者可替代地,如果rem′被编码,则|l|=X+1+rem′-(1<<k)。作为最后的步骤,需要根据解码的sign_flag将符号(sign)应用于|l|,从而产生量化权重等级l。最后,通过将量化权重等级l乘以步长Δ来重构量化权重q。

在优选实施例中,k以0初始化并且如下地进行更新。在每个abs_level_greater_X等于1之后,根据以下规则进行k的所需更新:如果X>X’,则k增加1,其中X’是取决于应用的常数。例如,X’是由编码器导出并且用信号通知给解码器的数字(例如,在0和100之间)。

上下文建模:在CABAC熵编码中,使用二进制概率建模对量化权重等级的大多数语法元素进行编码。每个二进制决策(bin)与上下文相关联。上下文表示一类编码bin的概率模型。基于已经用相应的上下文编码的bin的值,针对每个上下文估计两个可能的bin值之一的概率。根据应用,可以应用不同的上下文建模方法。通常,对于与量化权重编码相关的若干个bin,基于已传输的语法元素来选择用于编码的上下文。根据实际应用,可以选择不同的概率估计器,例如SBMP(基于状态的多参数估计器)或者HEVC或VTM-4.0的概率估计器。例如,该选择影响压缩效率和复杂度。

SBMP的细节可以在“JVET-K0430-v3-CE5-related:State-based probabilityestimator”(H.Kirchhoffer等人;JVET,Ljubljana;2018)中找到。

HEVC的更多细节可以在“ITU-T H.265High efficiency videocoding”(ITU-International Telecommunication Union,Series H:Audiovisual and multimediasystems-Infrastructure of audiovisual services-Coding ofmoving video,2015年4月)中找到。

并且,VTM-4.0的细节可以在“JVET-M1001-v6-Versatile Video Coding(Draft4)”(B.Bross等人;in JVET,Marrakech,2019)中找到。

下面描述一种适合广泛的神经网络的上下文建模方案。为了对权重矩阵中特定位置(x,y)处的量化权重等级l进行解码,将局部模板应用于当前位置。该模板包含多个其他(有序)位置,例如(x-1,y)、(x,y-1)、(x-1,y-1)等。对于每个位置,导出状态标识符。

在优选实施例(以Si1表示)中,位置(x,y)的状态标识符sx,y被导出如下:如果位置(x,y)指向矩阵之外,或者如果位置(x,y)处的量化权重等级lx,y尚未被解码或等于零,则状态标识符sx,y=0。否则,状态标识符应为sx,y=lx,y<0?1:2。

在另一优选实施例(以Si2表示)中,位置(x,y)的状态标识符sx,y被导出如下:如果位置(x,y)指向矩阵之外,或者如果位置(x,y)处的量化权重等级lx,y尚未被解码或等于零,则状态标识符sx,y=0。否则,状态标识符应为sx,y=1。

对于特定模板,导出状态标识符序列,并且将状态标识符的值的每个可能集映射到上下文索引,从而标识要使用的上下文。对于不同的语法元素,模板和映射可以是不同的。例如,从包含(有序)位置(x-1,y)、(x,y-1)、(x-1,y-1)的模板中导出有序状态标识符序列sx-1,y、sx,y-1、sx-1,y-1。例如,该序列可以被映射到上下文索引C=sx-1,y+3*sx,y-1+9*sx-1,y-1。例如,上下文索引C可以用于标识针对sig_flag的多个上下文。

在优选实施例(以方法1表示)中,位置(x,y)处的量化权重等级lx,y的sig_flag或sign_flag的局部模板仅由一个位置(x-1,y)(即,左邻居)组成。根据优选实施例Si1导出相关联的状态标识符sx-1,y

对于sig_flag,根据sx-1,y的值从三个上下文中选择一个,或者对于sign_flag,根据sx-1,y的值从三个其他上下文中选择一个。

在另一优选实施例(以方法2表示)中,sig_flag的局部模板包含三个有序位置(x-1,y)、(x-2,y)、(x-3,y)。根据优选实施例Si2导出相关联的状态标识符序列sx-1,y、sx-2,y、sx-3,y

对于sig_flag,上下文索引C被导出如下:

如果sx-1,y≠0,则C=0。否则,如果sx-2,y≠0,则C=1。否则,如果sx-3,y≠0,则C=2。否则C=3。

这也可以由以下等式表示:

C=(sx-1,y≠0)?0:((sx-2,y≠0)?1:((sx-3,y≠0)?2;3))

以相同的方式,可以增加或减少向左的邻居的数量,使得上下文索引C等于到向左的下一非零权重的距离(不超过模板大小)。

例如,每个abs_level_greater_X标志可以应用自己组的两个上下文。然后,根据sign_flag的值从两个上下文中选择一个。

在优选实施例中,对于X小于预定义数量X’的abs_level_greater_X标志,根据X和/或sign_flag的值来区分不同的上下文。

在优选实施例中,对于X大于或等于预定义数量X’的abs_level_greater_X标志,仅根据X来区分不同的上下文。

在另一优选实施例中,使用固定码长1(例如,使用算术编码器的旁路模式)对X大于或等于预定义数量X’的abs_level_greater_X标志进行编码。

此外,还可以在不使用上下文的情况下对一些或所有语法元素进行编码。替代地,利用1比特的固定长度来对它们进行编码。例如,使用CABAC的所谓旁路bin。

在另一优选实施例中,使用旁路模式对固定长度余数rem进行编码。

在另一优选实施例中,编码器确定预定义数量X’、对于X<X’的每个语法元素abs_level_greater_X根据符号区分两个上下文,以及对于X>=X’的每个abs_level_greater_X使用一个上下文。

特别有利的方面

根据本发明的一方面,每个参数的估计标准差可以被解释为相应的相关性评分,并且相应地对量化步骤的失真度量进行加权。

此外,可以基于平均参数值及其方差的分布应用上下文自适应量化方法。

最后,可以适配解码过程以便能够执行高效的点积运算。

这些概念中的任何概念可以可选地与任何其他方面组合地或以单独采用的方式地用于任何实施例中。

一般化

这里提出的装置(或者,一般而言,本文公开的任何实施例)可以被一般化并且与其他相关性评分度量适配。即,可以将量化过程中应用的失真函数一般化为

Di=Rid(wi,q(wi))

其中现在d(.,.)可以是任何距离度量,且Ri可以是任何相关性评分度量。

然而,也可以可选地使用任何其他失真函数。甚至可以组合一个以上的失真函数以生成供本文描述的任何概念使用的失真度量。

其他工作:已有一些著作提出了应用加权熵约束量化算法。细节可以在“Towardsthe limit of network quantization”(Yoojin Choi等人;CoRR,abs/1612.01543,2016)以及“Weighted-entropy-based quantization for deep neural networks”(EunhyeokPark等人;CVPR,2017)中找到。然而,它们的量化算法基于用于标量量化的熵约束劳埃德算法(Lloyd algorithm)(另请参见“Source Coding:Part I of Fundamentals of Sourceand Video Coding”(Thomas Wiegand and Heiko Schwarz,Foundations andinSignal Processing:Vol.4:No.1-2,2011)),因此不应用任何基于上下文的自适应算法,也不应用旨在改善相关联的点积算法的任何优化。此外,与本文献中应用的方法相对地,它们的相关性评分基于泰勒扩展法的方法或基于参数大小的方法。

然而,已经发现,上述文献中描述的概念可以可选地以单独或组合的方式与本文献的一个或多个方面一起使用。

结论

总而言之,本文描述的实施例可以可选地由这里描述的任何要点或方面来补充。然而,应当注意,这里描述的要点和方面可以单独地或组合地使用,并且可以以单独和组合的方式引入到本文描述的任何实施例中。

替代实施方式

虽然已经在装置的上下文中描述了一些方面,但是清楚的是,这些方面还表示对相应方法的描述,其中块或设备对应于方法步骤或方法步骤的特征。类似地,在方法步骤的上下文中描述的方面也表示对相应装置的相应块或项目或特征的描述。一些或所有方法步骤可以由(或使用)硬件装置来执行,例如微处理器、可编程计算机或电子电路。在一些实施例中,一个或多个最重要的方法步骤可以由这样的装置执行。

根据某些实施方式要求,本发明的一方面的实施例可以以硬件或软件来实现。该实现可以使用其上存储有电子可读控制信号的数字存储介质来执行,例如软盘、DVD、蓝光、CD、ROM、PROM、EPROM、EEPROM或闪存,这些电子可读控制信号与可编程计算机系统协作(或能够协作),从而执行相应的方法。因此,数字存储介质可以是计算机可读的。

根据本发明的一方面的一些实施例包括具有电子可读控制信号的数据载体,这些电子可读控制信号能够与可编程计算机系统协作,从而执行本文描述的方法之一。

通常,本发明的一方面的实施例可以被实现为具有程序代码的计算机程序产品,当该计算机程序产品在计算机上运行时,该程序代码可操作用于执行方法之一。该程序代码可以例如存储在机器可读载体上。

其他实施例包括存储在机器可读载体上的用于执行本文描述的方法之一的计算机程序。

换句话说,因此,本发明方法的一个实施例是具有程序代码的计算机程序,当该计算机程序在计算机上运行时,该程序代码用于执行本文描述的方法之一。

因此,本发明方法的另一实施例是包括记录在其上的用于执行本文描述的方法之一的计算机程序的数据载体(或数字存储介质或计算机可读介质)。该数据载体、数字存储介质或记录介质通常是有形的和/或非暂时性的。

因此,本发明方法的另一实施例是表示用于执行本文描述的方法之一的计算机程序的数据流或信号序列。该数据流或信号序列可以例如被配置为经由数据通信连接(例如,经由因特网)来传送。

另一实施例包括被配置为或适配为执行本文描述的方法之一的处理装置,例如计算机或可编程逻辑器件。

另一实施例包括其上安装有用于执行本文描述的方法之一的计算机程序的计算机。

根据本发明的一方面的另一实施例包括被配置为将用于执行本文描述的方法之一的计算机程序传送(例如,电子地或光学地)到接收机的装置或系统。该接收机可以例如是计算机、移动设备、存储器设备等。该装置或系统可以例如包括用于将计算机程序传送到接收机的文件服务器。

在一些实施例中,可编程逻辑器件(例如,现场可编程门阵列)可以用于执行本文描述的方法的一些或全部功能。在一些实施例中,现场可编程门阵列可以与微处理器协作以便执行本文描述的方法之一。通常,所述方法优选地由任何硬件装置执行。

本文描述的装置可以使用硬件装置或使用计算机或使用硬件装置和计算机的组合来实现。

本文描述的装置或本文描述的装置的任何组件可以至少部分地以硬件和/或软件来实现。

本文描述的方法可以使用硬件装置或使用计算机或使用硬件装置和计算机的组合来执行。

本文描述的方法或本文描述的装置的任何组件可以至少部分地由硬件和/或软件来执行。

上述实施例仅用于说明本发明的一方面的原理。应当理解,本文描述的布置和细节的修改和变化对于本领域的其他技术人员而言将是显而易见的。因此,其意图是仅由后附专利权利要求的范围限制,而不由通过对本文实施例的描述和说明而呈现的具体细节限制。

36页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:与无线电力发射器的通信

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!

技术分类