本文对数据压缩的「前世今生」进行简要的回顾,重点分析基于深度学习的有损压缩、无损压缩方法,对基于深度学习的数据压缩进行了探讨和展望。
1、数据压缩背景知识
众所周知,信息理论和机器学习之间具有很强的关联性,人们经常把它们称为「同一枚硬币的两面」。二者一个特别重要的联系体现在数据概率模型和数据压缩方法之间的本质等价性。香农的信源编码定理(Shannon-Fano Coding)可以看作是描述这一思想的基本定理,而哈夫曼编码(Huffman Coding)、算术编码(Arithmetic Coding)和最近发展起来的非对称数字系统(Asymmetric Numeral Systems,ANS)等都是经典的基于统计模型实现数据压缩的算法,即基于对信息中单个字符出现频率的统计而设计的。除去以统计概率为基础的方法外,经典的数据压缩方法还包括基于字典模型的压缩技术,例如 LZ77、LZ78、LZW 等,以及熵编码 (Entropy Encoding),游程编码 (Run-Length Encoding) 等。
我们在日常中经常用到的数据压缩的工具基本都是上述几种经典方法的变种、组合或优化,很少有单独使用某一种技术。例如,gzip 的压缩原理是:先使用 LZ77 算法的一个变种进行压缩,对得到的结果再使用静态或动态哈夫曼编码的方法进行压缩;bzip2 的压缩原理为:使用了一个游程编码器进行编码,接下来块排序压缩和 Move-to-Front(MTF ) 变换进一步产生大量相同符号,进一步使用另一个游程编码器进行编码。最后结果用 Huffman 编码,将一个消息头与其打包;LZMA 是 Deflate 和 LZ77 算法改良和优化后的压缩算法,而 Deflate 则是同时使用了 LZ77 算法与哈夫曼编码的一个无损数据压缩算法。但是,面对大数据时代的数据处理,传统的数据压缩方法显得越来越力不从心,无法满足大体量、快速增长和结构复杂等特征的数据压缩,尤其是实时数据压缩的处理要求。
近年来,机器学习领域经历了爆炸式的发展,一些研究人员使用传统神经网络模型在数据压缩领域获得了较好的效果。将原始图像经由神经网络处理后,仅需存储神经网络权重而无需存储图像本身的信息,从而在不降低图像质量的情况下获得了较高的压缩比。以此为基础,将神经网络与其它压缩技术结合、改进神经网络结构、改进神经网络的训练算法等,进一步推进了神经网络在数据压缩中的应用。但是,神经网络是浅层网络,模型的收敛速度、稳定性、权值更新的有效性等都存在不足,此外,神经网络依赖于有标签的预训练数据,这在实际应用场景中很难满足。
2、基于深度学习的数据压缩
深度学习的引入有效解决了传统方法存在的问题。与传统压缩技术相比,基于深度学习的方法具有下列的天然优势:
- 由于深度学习的参数是基于大量实际数据推导出来的,而传统的数据压缩编码方法主要是基于先验知识手工构建的,因此深度学习的优良内容自适应性优于基于信号处理的模型。
- 深度学习的方法有效利用了较大的接受域 (Receptive Field),因此不但能利用相邻的信息还可以利用远距离的样本提高编码效率,但传统的编码工具只利用相邻的样本,难以利用远距离的样本。
- 基于深度学习的压缩方法是灵活的,可以根据特定的域特征进一步减少比特率,同时实现快速处理,深度学习的内部表示适合于现代数据处理。
与传统神经网络压缩技术相比,基于深度学习的方法优势在于:(1)基于多层网络结构,深度学习模型具有较好的非线性映射能力,因此能有利于学习到数据(特别是图像)的深层次特征。(2)深度学习模型通过多层学习和权值微调的过程,提高了训练速度,从而能满足大体量数据压缩的要求。(3)更深的学习层次能够更加有效的去除掉冗余数据特征,从而获得更高的压缩比。
到目前为止,随机神经网络(Random Neural Network)、卷积神经网络(Convolutional Neural Network,CNN)、递归神经网络(Recurrent Neural Networks,RNN)、生成对抗网络(Generative Adversarial Networks,GAN)、变分自动编码器((Variational) Auto-Encoder,VAE)等都陆续应用到了数据压缩中。本文从近两年重要学术会议的研究成果中选择了基于 GAN 和 VAE 的两种深度学习数据压缩技术进行分析与讨论。
1. GAN 在有损压缩中的应用
论文标题:Deep generative models for distribution preserving lossy compression,NIPS2018
地址:https://arxiv.org/abs/1805.11057?context=stat
这篇文章提出了一种分布保持的有损压缩系统(Distribution-Preserving Lossy Compression,DPLC)。该系统应用于图像压缩场景,在不同的压缩比率下编码器能够生成与原始数据分布一致的编码,其解码器则以零比特率生成独立同分布样本,然后随着比特率的增加逐渐产生包含更多原始图像内容的重构,最终在足够高的比特率情况下实现完美的重建。
对于随机变量 X,令 P_X 表示 X 的分布,E_X[X] 表示期望。W~P_X 表示 W 遵从 P_X 的分布,X~Y 表示 X 和 Y 为同分布的。在标准的有损压缩系统中,编码器的任务是生成编码 E: X→W,从而将原始输入编码为 R 比特的码,解码器的任务是将码映射回原始空间 D: W→X,同时最小化某些失真度量 d:XxX,任务目标函数表示为:
在传统压缩方法中,E 和 D 具有典型确定性,因此不同的重构输入的数量 X^:=D(E(x)) 由 2^R 限定,这就导致重建的 X^会出现降质的问题,例如引起图像的模糊、模块化等。为了解决这一问题,需要向目标函数中增加一个约束项,即「重构实例的分布遵循训练数据的分布」:
增加这一约束项相当于学习了 R=0 时一般未知分布 P_X 的精确生成模型,考虑到生成模型,自然地我们就想到了引入 GAN。为了减少上式的松弛对平均值问题的偏差,将 D 分解为 D=G o B,其中 G 为生成模型(从固定的先验分布 P_Z 中提取样本作为输入,训练以最小化 P_G(Z) 和 P_X 之间的差异),B 为随机函数(与原目标函数 E 一起训练以最小化固定值 G 的失真)。瓦瑟斯坦距离(Wasserstein Distance)可以被定义为任意的运输成本函数,因此适用于本文对于量化重建质量的失真度量 D。对于随机变量 X 和 Y,Wasserstein 距离为:
其中 P(P_X,P_Y) 是 (X,Y) 的所有联合分布的集合。令 (X,d』) 表示一个度量空间,我们设置 c(x,y)=d』(x,y) 时,通过 Kantorovich-Rubinstein 对偶得到:
其中 F1 是有界 1-Lipschitz 函数的一类 f:X->R。本文使用的生成模型 G 通过最小化 P_X 和 P_G(Z) 之间的 Wasserstein 距离来学习,学习的方法有两种(i)通过 Wasserstein 自动编码器(Wasserstein Autoencoder,WAE),其中 G o F 参数化 P_X 和 P_G(Z) 之间的耦合,或者(ii)通过 Wasserstein GAN(WGAN)。本文提出 Wasserstein++,将 WAE 和 WGAN 结合起来。将经过训练的生成模型 G 与利用速率约束编码器 E 和随机函数 B 来实现本文提出的 DPLC 系统,从而在保证 P_X 和 P_X^在所有速率下都相似的同时,将 X 和 X^之间的失真减至最小。完整的 DPLC 见图 1。
图 1. DPLC 总体结构
压缩过程为了从原始数据中学习 G、B 和 E,将每个分量参数化为深度神经网络,并通过随机梯度下降(SGD)求解相应的优化问题。如前所述,G*可以通过 WGAN 或 WAE 学习。由于 WAE 框架自然的包含了一个编码器,它能保证潜在空间 Z 的结构易于编码,而使用 WGAN 则不具有这样的特性。在本文的实验中,我们观察到使用 WAE 的图像中边缘的锐化程度弱于 WGAN。另一方面,由于 WAE 目标由于重建误差项而严重惩罚了模式丢失,因此 WAE 比 WGAN 更不容易发生模式丢失。为了结合这两种方法的优点,我们通过 Wd 的凸组合,提出了 Wd 的原形式和对偶形式的新的优化组合:
基于 G(Z) 或 G(F(X) 的伪样本训练 f,由于 F(X) 和 P_Z 之间的不匹配(在优化过程开始时更为明显),这些样本一般不会遵循相同的分布。因此需要做下面的调整:
- 基于 G(Z.~) 的样本训练 f,其中 Z.~=UZ+(1-U)F(X),U~Uniform(0,1)。
- 基于 F(X) 中的样本训练 G,计算 WGAN 和 WAE 的损失项。
本文在两个标准的生成性建模基准图像数据集上完成实验,CelebA 和 LSUN 卧室,其中图像都缩小到 64x64 分辨率。图 2 给出了不同方法的测试 MSE(越小越好)、重建 FID(越小越好)和条件像素方差 PV(越大越好)。CelebA 的结果显示在最上面一行,LSUN 卧室的结果显示在最下面一行。本文提出的 DPLC 模型的 PV 随着速率的降低而稳定地增加,也就是说,它们生成的有效图像内容逐渐多于 GC。
图 2. 不同方法的实验结果
2. VAE 在无损压缩中的应用:
论文标题:Bit-Swap: Recursive Bits-Back Coding for Lossless Compression with Hierarchical Latent Variables, ICML2019
地址:https://arxiv.org/abs/1905.06845
这篇文章探讨了 Variational Auto-Encoding (VAE) 在压缩技术中的应用,提出了一种 Bit-Swap 无损压缩方法。根据经典的统计理论数据压缩,任何数据分布都可以转换成一种无损编码,在这种编码中,每个数据点都被编码成一个与模型分配的负对数概率相等的比特数。当模型与真实的数据分布相匹配时,可以获得最佳的预期码长。因此,基于概率似然性设计的无损压缩算法需要解决两个问题:一是利用模型逼近真实数据分布,二是找到实用的压缩算法满足与此模型兼容的条件并保证码长为-log p_θ(x)。本文引入 VAE,对原始概率分布进行多层分解,利用潜在变量模型计算原始数据的近似边缘分布,与经典 ANS 压缩技术相结合,实现快速的压缩和解压缩。
给定离散原始数据 x = (x1,..., xD),其分布表示为 p_data,基于概率似然性设计的 ANS 无损压缩机制为:使用概率 p_θ(x),当其码长满足-log p_θ(x)=-log p_data(x) 时,得到的平均码长 E[-log p_θ(x)] 接近数据 H(x) 的熵,即得到最优压缩方案的平均码长。ANS 使用一元概率分布或完全分解概率分布 p(x) 来编码原始符号向量 x,从而产生-log p(x) 比特位。ANS 算法的状态是具有堆栈结构的比特流:每次编码符号时,其比特位都被推到堆栈的最右侧;每次解码符号时,比特位都从堆栈的最右侧弹出。图 3 给出 ANS 的工作机制。
图 3. ANS 以类似堆栈的方式操作位流
本文使用潜在变量模型计算原始数据 p_data(x) 的近似边缘分布 p_θ(x):
其中 z 为潜在变量。VAE 引入推理模型 q_θ(z|x) 来逼近模型后验概率 p_θ(z|x):
由于 D_KL>=0,通过联合优化证据下限(Evidence Lower Bound,ELBO)和 log p_θ(x) 的下限,可以得到推理模型和生成模型如下:
编码端的处理流程如下:
- 发送者发送一个使用先验 p(z) 和 x 进行编码得到的潜在样本 z~q_θ(z|x),使用 p_θ(x|z) 进行编码;
- 使用 q_θ(z|x) 从比特流中解码得到 z,之后从比特流中减去-log q_θ(z|x) 长度的比特位;
- 使用 p_θ(x|z) 对 x 进行编码,向比特流中增加-log p_θ(x|z) 长度的比特位;
- 使用 p(z) 对 x 进行编码,向比特流中增加-log p_(z) 长度的比特位;
- 最终得到了一个长度为 N_total:=N_init+log q_θ(z|x)-log p_θ(x|z)-log p_(z) 比特位的比特流,并发送给接收端。
接收端通过将 ANS 初始化为接收到的比特流来解码数据,然后以相反的顺序进行,并交换编码和解码操作。
当模型具有许多潜在变量时,在传递初始比特流 N_init 时就会带来效率问题(这也是深度学习大量参数所带来的问题)。为解决这一问题,本文使用层次潜在变量模型,即具有多个潜在变量且其采样过程服从形式的马尔可夫链的 VAE,如图 4:
图 4. 层次潜在变量模型
此时近似边缘分布 p_θ(x) 为:
为每个隐层 z_i 定义推理模型 q_θ(z_i|z_(i-1)),这样可以基于变分界限计算边缘概率 p_θ(x),此时 ELBO 目标函数为:
在本文提出的 Bit-Swap 模型中,生成模型和推理模型的采样过程都服从随机变量之间的马尔可夫链依赖关系。与标准 VAE 的处理类似,数据 x 是根据潜在变量 z_1 生成的。然而,z_1 不再是固定的先验值,而是由第二个潜在变量 z_2 生成的。类似的,z_2 也不是固定先验值,而是由第三个潜在变量 z_3 生成的,依此类推。这些嵌套依赖项使我们能够递归地应用 bits back 参数。我们可以对第一个潜在变量应用 bits back 参数的前两个步骤:首先解码 z_1,然后直接编码 x,这将向比特流中添加新的比特位,z_2,L 的进一步解码操作将需要较少的初始比特来继续。以类似的方式递归地应用第二个潜在变量 z_2 的 bits back 参数:首先解码 z_2,然后编码 z_1。Bit-Swap 所需的初始位的数量上限为:
本文提出的 Bit-Swap 数据压缩算法完整的算法如下:
以三个隐藏层为例,Bit-Swap 的过程如图 5 所示。
图 5. Bit-Swap 过程示意
本文在 ImageNet 的 32×32 像素随机块上训练分层潜变量模型。为了测试,独立于测试集拍摄了 100 幅图像。100 幅图像的压缩比见表 1。这 100 幅图像被裁剪成每边 32 像素的倍数,这样就可以用 32 个像素块来拟合一个网格。网格被视为一个数据集,必须按顺序处理才能被压缩。作者在基线方案中使用相同的裁剪图像,而不是先将图像分成 32 x 32 像素的块。
表 1. ImageNet 100 幅图像的压缩比(未缩放和裁剪)
关于深度学习在数据压缩中的应用,作者单独建立了研究主页,更新相关的研究成果并提供代码、视频下载等,感兴趣的可以访问 https://bair.berkeley.edu/blog/2019/09/19/bit-swap/。
3、基于深度学习的数据压缩应用前景展望
由上文的分析和具体论文实例的结果可以看出,深度学习方法在处理数据压缩问题时,不再像传统方法一样尝试找到数据自身的统计特征、数值特征等,而是自动挖掘复杂结构的数据内在特征。深度学习的数据挖掘和重构能力使得其能够在保持数据特征、保证编码效果的同时获得较高的压缩比。
尽管应用效果很好,但深度学习方法还是存在自身局限性:
- 当数据量大、数据结构复杂时,深度学习的整体结构也会变得非常复杂,当进行较深层次的训练时,模型所需要的时间会急速增长。由本文选择的两篇实例可以看到,作者在实验中都将图像进行了缩小处理,例如 32×32、64x64 大小的图片,作者也在讨论中提到,如果使用原始大小的图片,计算时间和成本都会非常巨大;
- 深度学习方法还是缺少对内在机理的分析,在不同的数据压缩应用中还是以「黑盒」的方式使用,主要方法就是通过调整训练层、参数等改进压缩效果。
正如深度学习在其它机器学习场景中应用的情况,基于深度学习的数据压缩获得了让人惊喜的效果,但仍然存在一些问题。不断提升的视频清晰度码率,对低延迟网络无比依赖的应用程序,以及一众 VR 和 AR 设备的投入使用,在这样的背景下,数据压缩仍然是需要长期投入研究的领域。深度学习研究和在工业场景中的应用任重而道远。