掌桥专利:专业的专利平台
掌桥专利
首页

使用整数神经网络的数据压缩

文献发布时间:2023-06-19 10:52:42


使用整数神经网络的数据压缩

背景技术

本说明书涉及数据压缩。

对数据进行压缩是指确定在存储器中占用较少空间的数据的表示。压缩数据可以被存储(例如,在逻辑数据存储区域或物理数据存储设备中),通过通信网络(例如,因特网)传送到目的地,或者以任何其他方式使用。通常,能够(近似地或确切地)根据数据的压缩表示来重构数据。

发明内容

本说明书描述在一个或多个位置中的一个或多个计算机上实现为计算机程序的系统,所述系统可以通过使用整数神经网络在各种硬件和软件平台上可靠地执行数据压缩和数据解压缩。

根据一个方面,提供了一种由一个或多个数据处理装置执行的用于对数据进行熵编码的方法,该方法定义包括多个分量的序列,其中每个分量从预先确定的可能代码符号的离散集中指定相应代码符号,该方法包括:对于多个分量中的每个分量:使用整数神经网络处理包括(i)先于序列中的该分量的数据的一个或多个分量中的每一个的相应整数表示、(ii)表征数据的一个或者多个相应潜在变量的整数表示或者(iii)两者的输入,以生成定义数据的分量在预先确定的可能代码符号集上的概率分布的数据,其中:该整数神经网络具有多个整数神经网络参数值,并且多个整数神经网络参数值中的每一个都是整数;整数神经网络包括多个整数神经网络层,每个整数神经网络层被配置成处理相应整数神经网络层输入以生成相应整数神经网络层输出,并且处理整数神经网络层输入以生成整数神经网络层输出包括:通过使用整数值运算根据多个整数神经网络层参数处理整数神经网络层输入来生成中间结果;以及通过将整数值的激活函数应用于中间结果来生成整数神经网络层输出;以及使用针对多个分量中的每个分量确定的相应概率分布来生成数据的熵编码表示。

在一些实施方式中,预先确定的可能代码符号集可以包括整数值集。

在一些实施方式中,数据可以表示图像。

在一些实施方式中,数据可以表示通过使用不同的整数神经网络处理图像而生成的图像的潜在表示。

在一些实施方式中,使用针对多个分量中的每个分量确定的相应概率分布来生成数据的熵编码表示可以包括使用算术代码化过程以使用针对多个分量中的每个分量确定的相应概率分布来生成数据的熵编码表示。

在一些实施方式中,通过使用整数值运算根据整数神经网络层参数集来处理整数神经网络层输入来生成中间结果可以包括,通过将整数神经网络层输入乘以整数值的参数矩阵或通过整数值的卷积滤波器对整数神经网络层输入进行卷积来生成第一中间结果。

在一些实施方式中,所述方法可进一步包括通过将整数值的偏差矢量添加到所述第一中间结果而生成第二中间结果。

在一些实施方式中,所述方法可以进一步包括通过将第二中间结果的每个分量除以整数值的重新缩放因子而生成第三中间结果,其中使用舍入除法运算来执行除法。

在一些实施方式中,整数值的激活函数可以由查找表定义,该查找表定义从预先确定的整数值集中的每个整数值到相应整数输出的映射。

在一些实施方式中,可以通过训练过程来确定整数神经网络的多个整数神经网络参数值;并且在训练整数神经网络期间,可以将整数神经网络参数值存储为浮点值,并且被存储为浮点值的整数神经网络参数值可以在被用于计算之前被舍入为整数值。将存储为浮点值的整数神经网络参数值舍入为整数值可以包括:缩放浮点值;和将所缩放的浮点值舍入为最接近的整数值。浮点值可以在被缩放之前通过参数化映射进行变换,其中参数化映射r(·)通过下述定义:

在一些实施方式中,整数神经网络可以包括整数神经网络层,该整数神经网络层被配置成通过将整数值的激活应用于中间结果来生成整数神经网络层输出,其中,整数值的激活函数执行裁剪运算,并且在训练整数神经网络期间,将激活函数的梯度替换为缩放的广义高斯概率密度。

在一些实施方式中,可以通过使用神经网络处理数据来生成表征数据的一个或多个相应潜在变量。

在一些实施方式中,对于所述多个分量中的每一个,该分量在预先确定的代码符号集上的概率分布可为与通过均匀分布而卷积的高斯分布,并且定义该分量在预先确定的代码符号集上的概率分布的数据可以包括高斯分布的相应平均值和标准差参数。

根据另一方面,提供一种用于对定义包括分量集的序列的数据进行熵解码的方法,其中每个分量从预先确定的可能代码符号的离散集中指定相应代码符号。该方法包括获得数据的熵编码表示;从数据的熵编码表示生成数据的每个分量的相应重构,对于数据的每个分量,包括:确定在预先确定的可能代码符号集上的相应概率分布;和使用预先确定的可能代码符号集上的相应概率分布,对数据的分量进行熵解码。

对于每个分量,确定在预先确定的可能代码符号集上的相应概率分布包括:使用整数神经网络处理包括(i)先于分量序列中的分量的数据的一个或多个先前确定的分量中的每一个的相应整数表示、(ii)表征数据的一个或多个潜在变量的整数表示或(iii)两者的输入,以生成定义在预先确定的可能代码符号集上的相应概率分布的数据。整数神经网络具有整数神经网络参数值集,并且每个整数神经网络参数值都是整数。整数神经网络包括整数神经网络层集,每个整数神经网络层被配置成处理相应整数神经网络层输入以生成相应整数神经网络层输出,并处理整数神经网络层输入以生成整数神经网络层输出包括:通过使用整数值运算根据整数神经网络层参数集处理整数神经网络层输入来生成中间结果;和通过将整数值的激活函数应用于中间结果来生成整数神经网络层输出。

在一些实施方式中,数据可以表示通过使用不同的整数神经网络处理图像而生成的图像的潜在表示。

在一些实施方式中,使用在预先确定的可能代码符号集上的相应概率分布来对数据的分量进行熵解码可以包括使用算术解码过程来使用在预先确定的可能代码符号集上的相应概率分布来对数据的分量进行熵解码。

根据又一方面,提供了一种系统,该系统包括一个或多个计算机和存储指令的一个或多个存储设备,所述指令当由一个或多个计算机执行时使该一个或多个计算机执行上述方法方面的操作。

根据另一方面,提供了一种或多种计算机存储介质,其存储指令,所述指令当由一个或多个计算机执行时,使该一个或多个计算机执行上述方法方面的操作。

将容易理解,在一个方面的上下文中描述的特征可以与其他方面组合。

可以实现本说明书中描述的主题的特定实施例,以实现以下优点中的一个或多个。

本说明书描述一种数据压缩系统,该数据压缩系统通过使用一个或多个神经网络处理数据以生成熵模型,并且然后使用熵模型对数据进行熵编码来压缩数据。“熵模型”指定每个代码符号在表示数据的代码符号的有序合集中的相应代码符号概率分布(即,在可能代码符号集上的概率分布,例如,整数),如下面更加详细描述的。解压缩系统可以通过使用一个或多个神经网络来再现熵模型,并且然后使用熵模型对数据进行熵解码来对数据进行解压缩。

通常,压缩系统和解压缩系统可以在例如使用浮点算术和数值舍入运算的不同实现的不同硬件或软件平台上操作。因此,使用浮点算术执行运算可能导致解压缩系统计算熵模型,该熵模型与由压缩系统计算的熵模型略有不同。但是,为了使由压缩系统压缩的数据能够由解压缩系统可靠地重构,压缩系统和解压缩系统必须使用相同的熵模型。压缩系统和解压缩系统所使用的相应熵模型之间的即使很小的差异也可能导致灾难性的解码失败,例如,其中由解压缩系统重构的数据与由压缩系统压缩的数据实质上不同。

在本说明书中描述的压缩系统和解压缩系统均使用整数神经网络来计算熵模型,即,使用整数算术、查找表或两者来实现所有操作的神经网络。整数神经网络可以跨不同的硬件和软件平台确定性地操作,即,独立于不同平台如何实现浮点算术和数值舍入运算。因此,使用整数神经网络使压缩系统和解压缩系统能够独立于硬件和软件平台计算相同的熵模型,并且从而使压缩系统和解压缩系统能够在不同的硬件和软件平台上可靠地操作,即,通过减少灾难性的解码失败的可能性。

除了增加压缩系统和解压缩系统的可靠性外,使用整数神经网络可能即相对于使用浮点神经网络对压缩系统和解压缩系统的性能(例如,速率失真性能)的影响很小。

本说明书的主题的一个或多个实施例的细节在附图和以下描述中阐述。根据说明书、附图和权利要求书,本主题的其他特征、方面和优点将变得显而易见。

附图说明

图1示出示例整数神经网络。

图2图示可以应用于整数神经网络层的中间结果以生成层输出的非线性(激活函数)的示例。

图3图示使用下述对同一图像进行熵解码的结果:(i)使用整数神经网络所计算的熵模型,和(ii)使用浮点算术的熵模型。

图4是使用利用整数神经网络所计算的熵模型对数据集进行熵编码的示例压缩系统的框图。

图5是使用利用整数神经网络所计算的熵模型对数据集进行熵解码的示例解压缩系统的框图。

图6示出描述可以被压缩/解压缩系统使用的整数神经网络的示例架构的表。

图7图示使用下述的压缩/解压缩系统的速率失真性能的比较:(i)整数神经网络,和(ii)使用浮点算术的神经网络。

图8是在使用(i)实现浮点算法的神经网络和(ii)整数神经网络时比较由于在RGB图像的数据集上的浮点舍入误差而引起的解压缩失败率的频率的示例。

图9是用于处理整数层输入以生成整数层输出的示例过程的流程图。

图10是用于使用利用整数神经网络所计算的熵模型来处理压缩数据的示例过程的流程图。

图11是用于使用利用整数神经网络所计算的熵模型来重构压缩数据的示例过程的流程图。

在各个附图中,相同的附图标记和名称指示相同的元件。

具体实施方式

本规范描述了一种压缩系统和解压缩系统,所述压缩系统和解压缩系统可以通过使用整数神经网络(即,使用整数算术、查找表或两者实现所有运算的神经网络)跨各种硬件和软件平台可靠地操作。

压缩系统通过使用熵模型对代码符号进行熵编码(例如,算术代码化或霍夫曼代码化)来压缩通过代码符号(即,整数值)的有序合集表示的数据(例如,图像数据、视频数据、音频数据、文本数据、或者任何其他适当种类的数据)。如贯穿本文档中所使用的,“代码符号”指的是从可能元素的离散集合中提取的元素,例如,整数值。熵模型定义与表示数据的代码符号的有序合集中的每个代码符号相对应的相应代码符号概率分布(即,在可能代码符号集上的概率分布)。解压缩系统可以使用与压缩系统相同的熵模型对数据进行熵解码。

通常,压缩系统可以通过使用“有条件的”熵模型来更有效地压缩数据,即,该熵模型是基于被压缩的数据来动态计算的熵模型,而不是例如预定义的熵模型。解压缩系统也必须动态地计算熵模型,以便对数据进行解压缩。通常,压缩和解压缩系统可以在例如不同地实现浮点算术和数值舍入运算的不同的硬件或软件平台上操作,这可以使压缩和解压缩系统计算不同的熵模型。在一个示例中,压缩系统可以在数据中心中实现,而解压缩系统可以在用户设备上实现。但是,为了使由压缩系统压缩的数据由解压缩系统可靠地重构,压缩系统和解压缩系统必须使用相同的熵模型。压缩系统和解压缩系统使用的相应熵模型之间的即使很小的差异也可能导致灾难性的解码失败。

本说明书中描述的压缩和解压缩系统使用跨硬件和软件平台确定性地操作的整数神经网络来计算用于对数据进行熵编码/解码的熵模型。因此,在本说明书中描述的压缩和解压缩系统可以跨不同的硬件和软件平台可靠地操作,同时大大降低由于用于对数据进行熵编码/解码的熵模型之间的差异而导致的解码失败的风险。

如贯穿本文档使用的,术语整数算术是指应用于整数输入以生成整数输出的基本算术运算(例如,加法、减法、乘法和除法)。在除法的情况下,除法结果的任何小数部分都可以忽略或四舍五入,以确保输出是整数值。如贯穿本文档所使用的,查找表是指存储定义从预先确定的输入值集中的每个输入值到预先计算的输出值的映射的数据的数据结构。

通常,压缩系统和解压缩系统可以被共定位或远程地定位,并且能够以各种方式中的任一种将由压缩系统生成的压缩数据提供给解压缩系统。例如,压缩数据可以被存储(例如,在物理数据存储设备或逻辑数据存储区域中),然后随后从存储中检索并提供给解压缩系统。作为另一示例,可以通过通信网络(例如,因特网)将压缩数据传送到目的地,在该目的地中,压缩数据随后被检索并提供给解压缩系统。

压缩系统可以用于压缩任何适当种类的数据,例如,图像数据、音频数据、视频数据或文本数据。

这些特征和其他特征将在下面更详细地描述。

图1示出示例整数神经网络100,其可以被实现为一个或多个位置中的一个或多个计算机上的计算机程序。整数神经网络100被配置成使用由整数算术、查找表或两者实现的运算来处理整数值网络输入102,以生成整数值网络输出104。压缩系统(例如,如参考图4所描述的)和解压缩系统(例如,如参考图5所描述的)可以使用整数神经网络(例如,整数神经网络100)可靠地计算相同的熵模型,尽管在不同的硬件或软件平台上进行操作。

整数神经网络100使用一个或多个整数神经网络层(例如,整数神经网络层106)处理网络输入102,以生成网络输出104。通常,网络输入102和网络输出104可以被表示为整数值的有序合集,例如,整数值的矢量或矩阵。

每个整数神经网络层106被配置成使用由整数算术、查找表或二者实现的运算处理整数值层输入108,以生成整数值层输出110。例如,整数神经网络层106可以根据以下运算来处理层输入u以生成层输出w:

w=g(v) (2)

其中,按顺序:将线性变换H应用于层输入u,添加偏置矢量b,将结果逐元素除以矢量c以产生中间结果v,并且然后将逐元素非线性(激活函数)g(·)应用于中间结果以生成层输出w。整数神经网络层参数H、b、和c以及所有中间结果都定义为整数。为了将中间结果v定义为整数,逐元素的除法运算

其中\\是向下取整数运算。

等式(1)中提到的线性变换H的形式取决于整数神经网络层的类型。在一个示例中,整数神经网络层可以是完全连接层,并且线性变换H可以被实现为矩阵乘法,即,其通过将层输入u与整数值参数矩阵相乘来变换该层输入u。在另一示例中,整数神经网络层可以是卷积层,并且线性变换H可以被实现为卷积运算,即,其通过将层输入u与一个或多个整数值的卷积核进行卷积来变换该层输入u。通常,将线性变换H应用于层输入u涉及矩阵乘法或卷积运算,这会增加中间结果v的整数溢出的可能性。除以参数c(这是可选的)可以减少中间结果v的整数溢出的可能性。

等式(2)中提到的非线性g(·)可以以各种方式中的任何一种来实现。在一个示例中,非线性g(·)可以是将中间结果v的值裁剪在预先确定的范围内的整流线性单元(ReLU)非线性,例如:

g

其中,在此示例中,g(·)将中间结果的值裁剪为范围[0,255]。在另一个示例中,非线性g(·)可以是双曲正切非线性,例如:

其中Q(·)表示将其输入四舍五入为最接近的整数值的量化运算符。在该示例中,双曲正切非线性可以由查找表表示,以确保其输出独立于任何特定平台上的双曲正切函数的实现。

在一些情况下,非线性g(·)可能会被缩放以使其范围与用来表示整数层输出的位宽相匹配。整数的位宽是指用于表示整数的位数(例如,二进制数字)。在一个示例中,整数层输出可以是位宽为4个二进制数字的有符号整数,这意味着它可以采用-7到7范围内的整数值,并且可以缩放非线性g(·)以生成在范围-7至7中的整数输出,例如,如在公式(5)中。缩放非线性g(·)以使其范围与整数层输出的位宽相匹配,可以通过最大化对层输出的动态范围的使用来使整数层能够生成更丰富的层输出。

可以使用任何适当的整数格式来表示整数神经网络层106的学习参数和(中间)输出。例如,参考等式(1)-(2),整数神经网络层106的学习参数和(中间)输出可以具有以下格式:

H:8位有符号整数

b,v:32位有符号整数

c:32位无符号的整数

W:8位无符号的整数

整数神经网络100可以具有任何适当的神经网络架构。参考图6更详细地描述由压缩系统(参考图4描述)和解压缩系统(参考图5描述)使用的整数神经网络的示例架构。

在训练过程中,将迭代地调整整数神经网络的参数值,以优化目标函数,例如,速率失真目标函数,如下面参考等式(15)-(18)所述。更具体地,在多个训练迭代的每一个中,可以基于梯度下降优化过程(例如,Adam)使用目标函数相对于整数神经网络的参数的梯度来调整整数神经网络的参数值。为了在训练期间有效地累积小梯度信号,整数神经网络参数存储为浮点值,但在用于计算之前被映射(舍入)为整数值。即,在每次训练迭代中,整数神经网络参数的浮点表示在用于计算训练迭代的整数神经网络参数值更新之前被映射到整数值。接下来描述将整数神经网络参数H、b和c(参考等式(1)描述)的浮点表示映射到整数表示的一些示例。

在一个示例中,可以通过将浮点值的偏置矢量参数b′映射为如下来获得整数值的偏置矢量参数b:

b=Q(2

其中K是整数表示的位宽b,并且Q(·)表示将其输入舍入为最接近的整数值的量化运算符。将浮点值的偏置矢量参数b′缩放了2

在另一个示例中,可以通过映射浮点值的除法参数映射c′作为下述来获得整数值的除法参数C:

c=Q(2

其中K是整数表示c的位宽,并且Q(·)表示将其输入舍入为最接近的整数值的量化运算符。在此示例中,参数化映射r(·)确保c的值始终为正同时在接近零的c′上温和地按比例缩小梯度幅度,这可以减少引起中间结果v出现较大波动(尤其c′是较小时)时的扰动的可能性。

在另一个示例中,线性变换H可以是由H=[h

h

s(h′)=(max((-2

其中Q(·)表示将其输入舍入到最接近的整数值的量化运算符,K是卷积滤波器的整数表示的每个分量的位宽,L是卷积滤波器h′中的最小浮点值,H是卷积滤波器h′中的最大浮点值,并且∈是正常数。在该示例中,缩放参数S重新缩放每个卷积滤波器,使得其最小和最大参数值中的至少一个命中动态范围边界(-2

在训练期间,相对于整数神经网络的浮点值参数来计算目标函数的梯度。但是,在一些情况下,由于整数神经网络执行的某些运算是不可微分的,所以无法直接计算梯度。在这些情况下,可以应用对不可微分运算的梯度的近似值,以训练整数神经网络。以下是这种近似的一些示例。

在一个示例中,从浮点值到整数神经网络参数的整数值的映射使用不可微分的量化运算符,例如,如参考等式(6)、(7)和(9)所描述的。在该示例中,量化运算符的梯度可以由恒等函数代替。特别地,参考等式(6)、(7)和(9),可以将梯度计算为:

其中

在另一示例中,舍入除法运算

在另一个示例中,非线性(激活函数)g(·)(请参考等式(2))可以是不可微分的,并且非线性的梯度可以用近似非线性的连续函数的梯度来代替。在特定示例中,非线性可以是量化的ReLU,如参考等式(4)所描述的,并且非线性的梯度可以由具有形状参数β的缩放的广义高斯概率密度代替,例如,通过下述给定:

其中,

在训练完成后,从对应的浮点值的网络参数(例如,根据等式(6)-(10))计算整数值的网络参数(例如,H、b和c,如参考等式(1)所述)不止一次。此后,整数值的网络参数可以用于推断,例如,用于计算由压缩/解压缩系统使用的熵模型,这将在下面更详细地描述。

图2图示非线性(激活函数)的示例,其可以应用于整数神经网络层的中间结果以生成层输出,例如,如参考等式(2)所描述的。特别地,曲线图202使用圆(例如,圆204)来图示将整数值裁剪到范围[0,15]的量化的ReLU非线性g

图3图示使用下述对同一图像进行熵解码的结果:(i)使用整数神经网络所计算的熵模型-302,和(ii)使用浮点算术所计算的熵模型-304。当使用浮点算术计算熵模型时,图像最初被正确解码(从左上角开始),直到浮点舍入误差导致由压缩系统和解压缩系统计算出的相应熵模型之间的细微差异,在此时误差以灾难性方式传播,从而导致图像解码不正确。

通常,压缩系统可以使用一个或多个整数神经网络来确定用于对表示数据集(例如,图像数据、视频数据或音频数据)的代码符号的有序合集进行熵编码的熵模型。例如,通过将每个浮点值舍入到最接近的整数值来将数据的表示量化为浮点值的有序合集,可以获得表示该数据的代码符号的有序合集。如前所述,熵模型指定与表示数据的代码符号的有序合集的每个分量(代码符号)相对应的相应代码符号概率分布。压缩系统可以通过使用一个或多个整数神经网络处理:(i)一个或多个先前代码符号的整数表示,(ii)表征数据的一个或多个潜在变量的整数表示,或者(iii)两者,来生成代码符号的有序合集的每个分量的代码符号概率分布。表征数据的“潜在变量”是指数据的可替代的表示,其例如通过使用一个或多个神经网络处理数据而生成。

图4是使用由整数神经网络所计算的熵模型对数据集进行熵编码的示例压缩系统400的框图。压缩系统400是示例系统,其被实现为在实现以下描述的系统、组件和技术的一个或多个位置中的一个或多个计算机上的计算机程序。提供压缩系统400仅出于说明的目的,并且通常,压缩系统400的各种组件是可选的,并且压缩系统的其他架构是可能的。

压缩系统400使用以下各项来处理输入数据402以生成表示输入数据402的压缩数据404:(1)编码器整数神经网络406、(2)超编码器整数神经网络408、(3)超解码器整数神经网络410、(4)熵模型整数神经网络412和任选地(5)上下文整数神经网络414。如将参考图5更详细地描述的,使用速率失真目标函数来联合地训练由压缩系统使用的整数神经网络(以及由解压缩系统使用的整数神经网络)。通常,本文档中描述的每个整数神经网络能够具有使得它能够执行其描述的功能的任何适当的整数神经网络架构。参考图6更详细地描述由压缩系统和解压缩系统使用的整数神经网络的示例架构。

编码器整数神经网络406被配置成处理输入数据402的量化(整数)表示(x)以生成表示输入数据的代码符号(整数)420的有序合集。在一个示例中,输入数据可以是图像,编码器整数神经网络406可以是卷积整数神经网络,并且代码符号420可以是通过编码器整数神经网络406的最终层输出的多通道特征图。

压缩系统400使用超编码器整数神经网络408、超解码器整数神经网络410和熵模型整数神经网络412以生成用于对表示输入数据的代码符号420进行熵编码的条件熵模型,这将在下面更详细地描述。

超编码器整数神经网络408被配置成处理代码符号420以生成被称为“超先验”422(z)(有时称作“超参数”)的潜在变量集合(表征代码符号)。在一个示例中,超编码器整数神经网络408可以是卷积整数神经网络,并且超先验422可以是由超编码器整数神经网络408的最终层输出的多通道特征图。超先验隐式地表征将使得表示输入数据的代码符号420能够被高效地压缩的输入数据相关熵模型。

压缩数据404通常包括超先验422的压缩表示以使得解压缩系统能够再生条件熵模型。为此,压缩系统400生成超先验422的压缩表示426,例如,作为比特串,即,二进制数字串。在一个示例中,压缩系统400根据指定一个或多个预先确定的代码符号概率分布的预先确定的熵模型使用熵编码引擎438来对超先验422进行压缩。

超解码器整数神经网络410被配置成处理超先验422以生成超解码器输出428(Ψ),并且熵模型整数神经网络412被配置成处理超解码器输出428以生成条件熵模型。也就是说,超解码器410和熵模型整数神经网络412联合地对超先验进行解码以生成显式地定义条件熵模型的输出。

条件熵模型指定与表示输入数据的每个代码符号420相对应的相应代码符号概率分布。通常,熵模型整数神经网络412的输出指定定义条件熵模型的每个代码符号概率分布的分布参数。在一个示例中,条件熵模型的每个代码符号概率分布可以是与单位均匀分布卷积的(通过均值和标准差参数来参数化的)高斯分布。在此示例中,熵模型整数神经网络412的输出可以将高斯分布的均值参数

其中,N是表示输入数据的代码符号420的有序合集中的代码符号的数量,μ

任选地,压缩系统400能够在确定条件熵模型时附加地使用上下文整数神经网络414。上下文整数神经网络414被配置成(即,依照代码符号的排序)自回归地处理代码符号420以生成每个代码符号的相应整数“上下文输出”430(Φ)。每个代码符号的上下文输出仅取决于在表示输入数据的代码符号的有序合集中在该代码符号之前的代码符号,而不取决于该代码符号它本身或者取决于紧跟该代码符号之后的代码符号。可以将代码符号的上下文输出430理解为因果场境信息,该因果场境信息可以由熵模型整数神经网络412使用来生成代码符号的更准确的代码符号概率分布。

熵模型整数神经网络412能够处理由上下文整数神经网络414生成的上下文输出430(即,除了超解码器输出428之外)以生成条件熵模型。通常,每个代码符号的代码符号概率分布取决于代码符号的上下文输出,并且任选地,取决于在该代码符号之前的代码符号的上下文输出,而不取决于紧跟该代码符号之后的代码符号的上下文输出。如将参考图5更详细地描述的,这导致条件熵模型对表示输入数据的代码符号的因果依赖性,这确保解压缩系统能够从压缩数据再生条件熵模型。

和必须作为边信息包括在压缩数据404中(从而增加总压缩文件大小)的超先验422对比,自回归上下文整数神经网络414提供“免费”信息源(折扣计算成本),因为它不要求添加任何边信息。联合地训练上下文整数神经网络414和超编码器整数神经网络408使得超先验422能够存储与上下文输出430互补的信息,同时避免能够使用上下文输出430来准确地预测的信息。

熵编码引擎432被配置成通过依照条件熵模型对表示输入数据的代码符号420进行熵编码来对该代码符号420进行压缩。熵编码引擎432能够实现任何适当的熵编码技术,例如,算术代码化技术、范围代码化技术或霍夫曼代码化技术。压缩代码符号434可以被以各种方式中的任一种表示,例如,被表示为比特串。

压缩系统400基于以下各项生成压缩数据404:(i)压缩代码符号434和(ii)压缩超先验426。例如,压缩系统可以通过级联表示压缩代码符号434和压缩超先验426的相应比特串来生成压缩数据。

可选地,压缩系统400可以使用上下文整数神经网络414而不是超先验422来确定用于对表示数据的代码符号进行熵编码的熵模型。在这些情况下,压缩系统400不使用超编码器整数神经网络408或超解码器整数神经网络410。相反,压缩系统400通过使用上下文整数神经网络100自回归地处理表示数据的代码符号420以生成上下文输出430并且然后使用熵模型整数神经网络412处理上下文输出430而生成熵模型。

可选地,可以使用浮点算术而不是整数算术和查找表来实现编码器整数神经网络406,即,可以将编码器神经网络实现为常规浮点神经网络而不是整数神经网络。编码器神经网络406不用于计算熵模型,并且因此使用浮点算术实现编码器神经网络406不会影响解压缩系统对熵模型的可再现性。但是,使用浮点算术实现编码器神经网络仍可能导致解压缩系统无法准确重构原始输入数据,而将编码器神经网络实现为整数神经网络可以使解压缩系统精确重构原始输入数据数据。

通常,解压缩系统可以使用一个或多个整数神经网络来再生由压缩系统计算的相同熵模型,并且然后使用熵模型对代码符号进行熵解码。更具体地,解压缩系统可以通过使用一个或多个整数神经网络来处理:(i)一个或多个先前代码符号的整数表示,(ii)表征数据的一个或多个潜在变量的整数表示,或(iii)两者,来生成代码符号的有序合集的每个分量的代码符号概率分布。作为使用整数神经网络的结果,即使压缩系统和解压缩系统在不同的硬件或软件平台(例如,使用浮点运算的不同的实现方式)上运行,解压缩系统也可以计算出与压缩系统计算出的熵模型完全匹配的熵模型。

图5是使用由整数神经网络所计算的熵模型对数据集进行熵解码的示例解压缩系统500的框图。解压缩系统500是示例系统,其被实现为在实现以下描述的系统、组件和技术的一个或多个位置中的一个或多个计算机上的计算机程序。这里仅出于说明目的描述解压缩系统500,并且通常,解压缩系统500的各种组件是可选的,并且解压缩系统的其他架构是可能的。

解压缩系统500使用以下各项来处理由压缩系统生成的压缩数据404以生成近似原始输入数据的重构502:(1)超解码器神经网络510、(2)熵模型整数神经网络412、(3)解码器整数神经网络504和任选地(4)上下文整数神经网络114。由解压缩系统使用的超解码器整数神经网络410、熵模型整数神经网络412和上下文整数神经网络414共享与由压缩系统使用的对应整数神经网络相同的参数值。

为了再生条件熵模型,解压缩系统500从压缩数据404获得超先验422。例如,解压缩系统500可以通过使用熵解码引擎506来对被包括在压缩数据404中的超先验422的压缩表示426进行熵解码来获得超先验422。在此示例中,熵解码引擎506可以使用用于对超先验422的压缩表示426进进行熵编码的同一(例如,预先确定的)熵模型来对该超先验422的压缩表示426进行熵解码。

超解码器整数神经网络410被配置成处理经量化的超先验422以生成超解码器输出428(Ψ),并且熵模型整数神经网络412被配置成处理超解码器输出428以生成条件熵模型,即,以类似于压缩系统的方式。熵解码引擎208被配置成根据条件熵模型对压缩数据404中包括的压缩代码符号434进行熵解码以恢复代码符号420。

在压缩系统使用了上下文整数神经网络414来确定条件熵模型的情况下,解压缩系统500也使用上下文整数神经网络114来再生条件熵模型。如参考图4所描述的,上下文整数神经网络414被配置成自回归地处理表示输入数据的代码符号420以生成用于每个代码符号的相应上下文输出430。在最初接收到压缩数据404之后,解压缩系统500不能够访问被提供作为上下文整数神经网络414的输入的解压缩代码符号420的完整集。如将在下面更详细地描述的,解压缩系统500通过根据代码符号的排序对代码符号420顺序地解压缩来说明这个。由上下文整数神经网络414生成的上下文输出430被提供给熵模型整数神经网络412,熵模型整数神经网络412将上下文输出430连同超解码器输出428一起处理以生成条件熵模型。

为了说明解压缩系统500最初不能够访问被提供作为上下文整数神经网络414的输入的解压缩代码符号420的完整集,解压缩系统500根据代码符号的排序顺序地对代码符号420进行解压缩。特别地,解压缩系统可以使用例如预先确定的代码符号概率分布对第一代码符号进行解压缩。为了对每个后续代码符号进行解压缩,上下文整数神经网络414处理一个或多个先前代码符号(即,其已经被解压缩)以生成对应上下文输出430。熵模型整数神经网络412然后处理(i)上下文输出430、(ii)超解码器输出428和任选地(iii)一个或多个先前上下文输出430,以生成对应代码符号概率分布,其随后用于对代码符号进行解压缩。

解码器整数神经网络504被配置成处理代码符号420的有序合集以生成近似输入数据的重构502。也就是说,由解码器整数神经网络504执行的运算近似地使由参考图4描述的编码器整数神经网络执行的运算反转。

能够使用机器学习训练技术(例如,随机梯度下降)来联合地训练压缩系统和解压缩系统以优化速率失真目标函数。更具体地,能够联合地训练编码器整数神经网络、超编码器整数神经网络、超解码器整数神经网络、上下文整数神经网络、熵模型整数神经网络和解码器整数神经网络以优化速率失真目标函数。在一个示例中,速率失真目标函数(“性能度量”)

其中

通常,更复杂的超先验能够指定使得表示输入数据的代码符号能够被以较高速率压缩的更准确的条件熵模型。然而,增加超先验的复杂度可以使超先验它本身被以较低速率压缩。通过联合地训练压缩系统和解压缩系统,能够从训练数据中直接学习以下各项之间的平衡:(i)压缩超先验的大小,和(ii)来自更准确的熵模型的增加的压缩率。

在一些实现方式中,压缩系统和解压缩系统不使用编码器神经网络或解码器神经网络。在这些实现方式中,如上所述,压缩系统能够通过直接量化输入数据来生成表示输入数据的代码符号,并且解压缩系统能够生成输入数据的重构作为对代码符号进行解压缩的结果。

图6示出描述了在输入数据由图像构成的特定情况下由压缩/解压缩系统使用的整数神经网络的示例架构的表600。更具体地,表600描述了编码器整数神经网络602、解码器整数神经网络604、超编码器整数神经网络606、超解码器整数神经网络608、上下文整数神经网络610和熵模型整数神经网络612的示例架构。

表600的每一行对应于相应层。卷积层被指定有“Conv(卷积)”前缀接着有核大小、通道数和下采样步幅。例如,编码器整数神经网络602的第一层使用5×5核与192个通道以及步幅为2。“Deconv(解卷积)”前缀对应于上采样卷积,然而“Masked(掩码)”对应于掩码卷积。GDN代表广义除法归一化,而IGDN是GDN的逆。

在参考图6描述的示例架构中,熵模型整数神经网络使用1×1核。此架构使得熵模型整数神经网络能够生成具有如下性质的条件熵模型:与每个代码符号相对应的代码符号概率分布不取决于与后续代码符号相对应的上下文输出(如早前所述)。作为另一示例,能通过使用掩码卷积核实现相同效果。

图7图示压缩/解压缩系统的速率失真性能的比较,该压缩/解压缩系统使用:(i)整数神经网络(702)和(ii)实现浮点算术的神经网络(704)。曲线图700的水平轴指示压缩数据的每个像素的位数,并且垂直轴指示重构数据的峰值信噪比(PSNR)(向左和向上更好一些)。可以理解,使用整数神经网络几乎不会改变压缩/解压缩系统的速率失真性能,但是能够使该系统可靠地部署在不同的硬件和软件平台上。

图8是当使用(i)实现浮点算术的神经网络(802),和(ii)整数神经网络(804)时比较RGB数据集上由于浮点舍入误差导致的解压缩失败率的频率的示例。当压缩和解压缩系统在同一平台(例如,806)上实现时,在使用任何一个系统时都不会发生解压缩失败。当压缩和解压缩系统在不同平台(例如,不同的CPU、不同的GPU、或者一个在CPU上、一个在GPU上)上实现时,使用实现浮点算术的神经网络时会发生大量的解压缩失败,而当使用整数神经网络时不会发生解压缩失败。可以理解,使用整数神经网络可以大大改善在不同硬件或软件平台上实现的压缩/解压缩系统的可靠性。

图9是用于处理整数层输入以生成整数层输出的示例过程900的流程图。为了方便起见,过程900将被描述为由位于一个或多个位置的一个或多个计算机的系统执行。例如,整数神经网络,例如,图1的整数神经网络100根据本说明书适当地编程,可以执行过程900。

系统接收整数层输入(902)。整数层输入可以表示为整数值的有序合集,例如,整数值的矢量或矩阵。

系统通过使用整数值运算根据整数神经网络层参数的值来处理整数神经网络层输入来生成中间结果(904)。例如,系统可以通过将层输入乘以整数值的参数矩阵或通过利用整数卷积滤波器对层输入进行卷积来生成第一中间输出。该系统可以通过将整数值的偏差矢量添加到第一中间结果来生成第二中间输出。该系统可以通过将第二中间结果的每个分量除以整数值的缩放因子来生成第三中间结果,其中使用舍入除法运算来执行除法。参考等式(1)描述生成中间结果的示例。可以使用整数算术或使用预先计算的查找表来实现整数值运算。

系统通过将整数值的激活函数应用于中间结果来生成层输出(906)。整数值的激活函数可以是例如经量化的ReLU激活函数(例如,如参考等式(4)描述的)或经量化的双曲正切激活函数(例如,如参考等式(5)描述的)。可以例如使用整数算术或使用查找表来实现激活功能,该查找表定义从预先确定的整数值集中的每个整数值到相应的预先计算的整数输出的映射。

图10是用于使用利用整数神经网络所计算的熵模型来压缩数据的示例过程1000的流程图。为了方便起见,将过程1000描述为由位于一个或多个位置的一个或多个计算机的系统执行。例如,压缩系统,例如,图4的压缩系统400,根据本说明书适当地编程,可以执行过程4000。

系统接收要压缩的数据(1002)。数据可以是任何适当种类的数据,例如,图像数据、音频数据、视频数据或文本数据。

系统生成数据的表示作为代码符号的有序合集(例如,序列)(1004)。在一个示例中,系统将数据的表示量化为浮点值的有序合集,以生成数据的表示作为整数值(代码符号)的有序合集。在另一示例中,在量化数据之后,系统可以使用编码器整数神经网络来处理数据,并且将编码器整数神经网络的输出识别为表示数据的代码符号。在该示例中,编码器整数神经网络的输出可以被称为数据的“潜在表示”。

系统使用一个或多个整数神经网络来生成熵模型,该熵模型指定表示数据的代码符号的有序合集的每个分量(代码符号)的相应的代码符号概率分布(1006)。例如,系统可以通过使用一个或多个整数神经网络处理包括(i)先于分量(代码符号)之前的一个或多个分量(代码符号)中的每一个的相应整数表示、(ii)表征数据的一个或多个潜在变量的整数表示或(iii)两者的输入,来生成每个代码符号的代码符号概率分布。可以例如通过使用一个或多个其他整数神经网络处理表示数据的代码符号来生成表征数据的潜在变量。参考图4更详细地描述了使用整数神经网络来生成熵模型的示例。在参考图4描述的示例中,表征数据的潜在变量被称为“超先验”。

系统熵使用熵模型对表示数据的代码符号进行编码(1008)。即,系统使用针对表示数据的代码符号的有序合集的每个分量(代码符号)确定的相应代码符号概率分布,来生成数据的熵编码表示。该系统可以使用用于对编码符号进行熵编码的任何适当的熵编码技术,例如,算术编码过程。

系统使用熵编码的代码符号来确定数据的压缩表示(1010)。参考图4描述从熵编码的代码符号确定数据的压缩表示的示例。

图11是用于使用利用整数神经网络所计算的熵模型来重构压缩数据的示例过程1100的流程图。为了方便起见,将过程1100描述为由位于一个或多个位置的一个或多个计算机的系统执行。例如,解压缩系统,例如,图5的解压缩系统500根据本说明书适当地编程,可以执行过程1100。

系统例如从数据存储(例如,逻辑数据存储区域或物理数据存储设备)获得压缩数据,或者作为在数据通信网络(例如,因特网)上的传输获得压缩数据(1102)。通常,压缩数据包括表示原始数据的代码符号的有序合集的熵编码表示。参考图10描述用于生成压缩数据的示例过程。

系统使用一个或多个整数神经网络来再生用于对表示数据的代码符号进行熵编码的熵模型(1104)。熵模型指定表示数据的代码符号的有序合集的每个分量(代码符号)的相应的代码符号概率分布。系统可以通过使用一个或多个整数神经网络处理包括(i)先于分量(代码符号)的一个或多个分量(代码符号)中的每一个的相应整数表示、(ii)表征数据的一个或多个潜在变量的整数表示或(iii)两者的输入,来生成每个分量(代码符号)的代码符号概率分布。参考图5更详细地描述使用整数神经网络来再生熵模型的示例。在参考图5描述的示例中,表征数据的潜在变量被称为“超先验”,被包括在压缩数据中,即,除了表示数据的熵编码的代码符号之外。

系统使用由熵模型指定的对应代码符号概率分布来对表示数据的代码符号的有序合集的每个分量(代码符号)进行熵解码(1106)。该系统可以使用例如算术解码或霍夫曼解码过程来对代码符号进行熵解码。

系统生成原始数据的重构(1108)。例如,熵解码的代码符号本身可以表示输入数据的重构。作为另一个示例,该系统可以通过使用解码器整数神经网络(例如,如参考图5所描述的)处理熵解码的代码符号来生成原始数据的重构。

本说明书连同系统和计算机程序组件一起使用术语“被配置”。对于要被配置成执行特定操作或动作的一个或多个计算机的系统意指系统已在其上安装了在操作中使该系统执行这些操作或动作的软件、固件、硬件或软件、固件、硬件的组合。对于要被配置成执行特定操作或动作的一个或多个计算机程序意指该一个或多个程序包括指令,所述指令当由数据处理装置执行时,使该装置执行操作或动作。

本说明书中描述的主题和功能操作的实施例可用数字电子电路、用有形地具体实现的计算机软件或固件、用包括本说明书中公开的结构及其结构等同物的计算机硬件或者用它们中的一个或多个的组合来实现。本说明书中描述的主题的实施例可作为一个或多个计算机程序被实现,所述一个或多个计算机程序即在有形非暂时性存储介质上编码以供由数据处理装置执行或者控制数据处理装置的操作的计算机程序指令的一个或多个模块。计算机存储介质可以是机器可读存储设备、机器可读存储基板、随机或串行访问存储设备或它们中的一个或多个的组合。替换地或此外,可将程序指令编码在人工生成的传播信号上,所述传播信号例如是机器生成的电、光或电磁信号,该传播信号被生成来对信息进行编码以用于传输到适合的接收器装置以供由数据处理装置执行。

术语“数据处理装置”指代数据处理硬件并且包含用于处理数据的所有种类的装置、设备和机器,作为示例包括可编程处理器、计算机或多个处理器或计算机。装置还可以是或者进一步包括专用逻辑电路,例如,FPGA(现场可编程门阵列)或ASIC(专用集成电路)。装置除了包括硬件之外还可以可选地包括为计算机程序创建执行环境的代码,例如,构成处理器固件、协议栈、数据库管理系统、操作系统或它们中的一个或多个的组合的代码。

也可以被称为或者描述为程序、软件、软件应用、app、模块、软件模块、脚本或代码的计算机程序可用包括编译或解释语言或声明或过程语言的任何形式的编程语言编写;并且它可被以任何形式部署,包括作为独立程序或者作为模块、组件、子例行程序或适合于在计算环境中使用的其它单元。程序可以但是不必对应于文件系统中的文件。程序可以被存储在保持其它程序或数据的文件的一部分中,例如存储在标记语言文档中的一个或多个脚本;在专用于所述程序的单个文件中或者在多个协调文件中,例如存储代码的一个或多个模块、子程序或部分的文件。可以将计算机程序部署为在位于一个站点上或跨多个站点分布并通过数据通信网络互连的一个计算机上或在多个计算机上执行。

类似地,在本说明书中术语“引擎”广泛地用于指代被编程来执行一个或多个具体功能的基于软件的系统、子系统或过程。通常,引擎将作为安装在一个或多个位置中的一个或多个计算机上的一个或多个软件模块或组件被实现。在一些情况下,一个或多个计算机将专用于特定引擎;在其它情况下,可在同一计算机或多个计算机上安装并运行多个引擎。

本说明书中描述的过程和逻辑流程可由执行一个或多个计算机程序的一个或多个可编程计算机执行以通过对输入数据进行操作并生成输出来执行功能。过程和逻辑流程还可由例如是FPGA或ASIC的专用逻辑电路执行,或者通过专用逻辑电路和一个或多个编程计算机的组合来执行。

适合于执行计算机程序的计算机可基于通用微处理器或专用微处理器或两者,或任何其它种类的中央处理器。通常,中央处理单元将从只读存储器或随机存取存储器或两者接收指令和数据。计算机的必要元件是用于执行或者实行指令的中央处理单元以及用于存储指令和数据的一个或多个存储设备。中央处理单元和存储器可由专用逻辑电路补充或者并入在专用逻辑电路中。通常,计算机还将包括用于存储数据的一个或多个大容量存储设备,例如磁盘、磁光盘或光盘,或者操作上被耦合以从所述一个或多个大容量存储设备接收数据或者将数据传送到所述一个或多个大容量存储设备,或者两者以用于存储数据。然而,计算机不必具有这样的设备。此外,计算机可被嵌入在另一设备中,所述另一设备例如是移动电话、个人数字助理(PDA)、移动音频或视频播放器、游戏控制器、全球定位系统(GPS)接收器或便携式存储设备,例如通用串行总线(USB)闪存驱动器等。

适合于存储计算机程序指令和数据的计算机可读介质包括所有形式的非易失性存储器、介质和存储设备,作为示例包括半导体存储设备,例如EPROM、EEPROM和闪速存储器设备;磁盘,例如内部硬盘或可移动盘;磁光盘;以及CD ROM和DVD-ROM盘。

为了提供与用户的交互,可在计算机上实现本说明书中描述的主题的实施例,所述计算机具有用于向用户显示信息的显示设备以及用户可用来向该计算机提供输入的键盘和定点设备,所述显示设备例如是CRT(阴极射线管)或LCD(液晶显示器)监视器,所述定点设备例如是鼠标或轨迹球。其它种类的设备也可用于提供与用户的交互;例如,提供给用户的反馈可以是任何形式的感觉反馈,例如视觉反馈、听觉反馈或触觉反馈;并且可以任何形式接收来自用户的输入,包括声、语音或触觉输入。此外,计算机可通过向由用户使用的设备发送文档并从由用户使用的设备接收文档来与用户交互;例如,通过响应于从web浏览器接收到请求而向用户的设备上的web浏览器发送网页。另外,计算机可通过向个人设备发送文本消息或其它形式的消息并且继而从用户接收响应消息来与用户交互,所述个人设备例如是正在运行消息传送应用的智能电话。

用于实现机器学习模型的数据处理装置还可包括例如用于处理机器学习训练或生产,即推理、工作负载的公共和计算密集部分的专用硬件加速器单元。

可使用机器学习框架来实现和部署机器学习模型,所述机器学习框架例如是TensorFlow框架、Microsoft Cognitive Toolkit框架、Apache Singa框架或Apache MXNet框架。

本说明书中描述的主题的实施例可被实现在计算系统中,所述计算系统包括后端组件,例如作为数据服务器;或者包括中间件组件,例如应用服务器;或者包括前端组件,例如具有用户可用来与本说明书中描述的主题的实现方式交互的图形用户界面、web浏览器或app的客户端计算机;或者包括一个或多个这样的后端、中间件或前端组件的任何组合。系统的组件可通过例如通信网络的任何形式或介质的数字数据通信来互连。通信网络的示例包括局域网(LAN)和广域网(WAN),例如互联网。

计算系统可包括客户端和服务器。客户端和服务器一般地彼此远离并通常通过通信网络来交互。客户端和服务器的关系借助于在相应的计算机上运行并且彼此具有客户端-服务器关系的计算机程序而产生。在一些实施例中,服务器向用户设备传输例如HTML页面的数据例如以用于向与作为客户端的设备交互的用户显示数据并从该用户接收用户输入的目的。可在服务器处从设备接收在用户设备处生成的数据,例如,用户交互的结果。

虽然本说明书包含许多具体实施方式细节,但是这些不应该被解释为对任何发明的或可能要求保护的范围的限制,而是相反地被解释为对可能特定于特定发明的特定实施例的特征的描述。也可在单个实施例中组合地实现在本说明书中在单独的实施例的上下文中描述的某些特征。相反地,也可单独地或者按照任何适合的子组合在多个实施例中实现在单个实施例的上下文中描述的各种特征。此外,尽管特征可能在上面被描述按照某些组合起作用并且甚至最初被如此要求保护,但是来自要求保护的组合的一个或多个特征可在一些情况下被从该组合中除去,并且所要求保护的组合可以针对子组合或子组合的变化。

类似地,虽然按照特定次序在附图中描绘并在权利要求书中记载操作,但是这不应该被理解为要求按照所示的特定次序或者以先后次序执行这样的操作,或者要求执行所有图示的操作以实现所预期的结果。在某些情况下,多任务处理和并行处理可以是有利的。此外,上述实施例中的各种系统模块和组件的分离不应该被理解为在所有实施例中要求这样的分离,并且应该理解的是,所描述的程序组件和系统一般地可被一起集成在单个软件产品中或者包装到多个软件产品中。

已描述了主题的特定实施例。其它实施例在所附权利要求的范围内。例如,权利要求中记载的动作可被以不同的次序执行并仍然实现所预期的结果。作为一个示例,附图中描绘的过程不一定要求所示的特定次序或顺序次序以实现所预期的结果。在一些情况下,多任务处理和并行处理可以是有利的。

要求保护的权利要求是:

相关技术
  • 使用整数神经网络的数据压缩
  • 基于整数小波变换的曲线矢量数据压缩式编码方案
技术分类

06120112716370