专栏首页AI科技大本营的专栏伯克利人工智能研究院开源深度学习数据压缩方法Bit-Swap,性能创新高

伯克利人工智能研究院开源深度学习数据压缩方法Bit-Swap,性能创新高

作者 | Friso Kingma

译者 | Tianyu

责编 | 夕颜

出品 | AI科技大本营(ID: rgznai100)

【导读】在本篇文章中,伯克利人工智能研究院(BAIR)介绍了一种可扩展的、基于深度学习的高效无损数据压缩技术。该技术基于之前的 bits-back 编码和非对称数字系统,对隐变量模型进行压缩的方法进行了扩展。在实验中,Bit-Swap 在高度多样化的图集的表现上超过了压缩器中的 benchmark。BAIR 开源了该方法的代码,对模型进行了优化,并提供了 demo 和预训练好的 Bit-Swap 模型,可以用来对任何图片进行压缩和解压缩。欢迎观看文末链接里的视频,其中包含对 bits-back 编码和 Bit-Swap 原理的解释。

高维数据的无损压缩

该研究的目标是,设计一种可用于图像等高维数据的高效无损压缩方法。实现这一目标,要同时解决两个问题:

  1. 选择一个可以紧密捕捉输入数据潜在分布的统计模型;
  2. 开发一种可扩展的压缩算法,它可以充分发掘模型的压缩潜能

任何压缩方法的压缩比都严重依赖于一个因素:模型的容量。而近年来深度学习的飞速发展,使得我们可以对基于复杂高维数据的概率模型进行有效的优化。这些进步为无损压缩技术的发展提供了更多可能性。如今有一些先进的技术结合了自回归模型和熵编码,如算术编码和非对称数字系统(ANS, asymmetric numeral systems),都具有很不错的压缩比。然而,自回归结构使解压过程比压缩过程慢了几个数量级。

幸运的是,ANS 具有并行计算的能力。为了充分利用这一特性,我们将注意力放在了全因子分布的建模上。由于这个限制,我们不得不基于此进行模型的选择,并构建新的编码方案。

近期研究

最近提出的基于非对称数字系统的 Bits-Back(BB-ANS, Bits-Back with Asymmetric Numeral Systems)方法,通过将潜变量模型与 ANS 结合来缓解了这个问题。潜变量模型定义了未被观察的随机变量,但这些变量的值影响了数据的分布。例如,如果我们所观察的数据包含图像,图像的构成可能依赖于边的位置和纹理,这些特征都属于隐变量。这类模型可以使用全因子分布,并通过 VAE 框架进行有效的优化。

使得 BB-ANS 可以基于隐变量模型进行压缩的关键要素是 bits-back 编码,事实证明这种方法天生适用于 ANS。Bits-back 编码可以保证压缩结果接近于负的 ELBO(Evidence Lower Bound),只有初始化的时候需要一点额外的开销。当一次性压缩较长的序列时,这种额外的开销就显得很微不足道了。

成果

当我们把隐变量模型设计成复杂的高密度估计器时,模型被限制在全因子分布上,这会影响模型的灵活性。因此,我们采用分层隐变量模型来解决这个问题,该模型相比于单个的隐变量模型具有更大的容量。我们通过递归的方式对隐变量模型进行扩展,将全因子先验分布替换为第二个隐变量模型,将其先验替换为第三个隐变量模型,以此类推。

例如,如果所观察的数据是图像,图像的构成取决于边的位置和纹理的分布,这些特征又依赖于物体的位置,而物体的位置又依赖于场景的构成,等等。因此,如果我们让每一层都只依赖于它的上一层,这个模型可能要设计成多层嵌套的隐变量模型:所观察数据的分布受第一个隐变量层控制,第一个隐变量层的分布受第二个隐变量层控制,以此类推直到最上面一层,而这层具有无条件先验分布。

基于这个想法,我们开发了全新的编码技术,名为递归式 bits-back 编码。正如这个方法的名字,我们在每一层上递归地使用 bits-back 编码,从底层到顶层依次处理嵌套隐变量模型。我们将递归式 bits-back 编码和特定的分层隐变量模型相结合,得到了 Bit-Swap 模型。Bit-Swap 有以下几个优势:

  1. 用递归的形式使用 bits-back 编码可以节省模型的开销,而且不会随模型的深度增加而增加。这与直接在分层隐变量模型上使用 BB-ANS 有所不同,不会忽略隐变量的拓扑性,也不会将全部隐变量层当作单个向量处理,而导致模型的开销随着层次深度增加而增大。
  2. Bit-Swap 还可以达到负 ELBO 的压缩水平,所需的开销也更小。
  3. 基于每层的先验分布进行隐变量层的嵌套叠加,除了最上面一层,使每一个隐变量层都拥有更复杂的分布。嵌套结构使 ELBO 更为紧凑,即更低的压缩比。
  4. 我们通过模型维持全因子分布,使得整个编码过程可以并行。基于 GPU 实现的 ANS 以及模型的并行,我们实现了高速的压缩和解压缩。该方法的瓶颈在于 ANS 的实际操作,但我们对此保持乐观,相信其固有的并行性可以解决这一问题。未来 Bit-Swap 将会有更大幅度的提升。

结果

我们从 ImageNet 中随机选取 32x32 像素的图,进行分层隐变量模型的训练。我们又从测试集中选取另外 100 个图进行测试,这 100 个图同样被处理为 32x32 像素,这样就可以适用于由 32x32 像素块组成的网格了。该网格可以看作为一个数据集,使用 Bit-Swap 和 BB-ANS 以序列的形式进行处理。接下来,我们用 Bit-Swap 和 BB-ANS 处理单个序列,即每次压缩一张图片。我们使用相同的图片,与 baseline 进行对比。结果如上图所示。我们相信可以通过使用更高像素的图和更复杂的模型获得更好的结果。全部结果可参见论文。

Demo

来尝试用 Bit-Swap 压缩你自己的图片吧。把这个 GitHub 文件夹(https://github.com/fhkingma/bitswap)克隆到本地,运行脚本 demo_compress.py 和 demo_decompress.py,demo_compress.py 会使用 Bit-Swap 进行压缩处理,并与 GNU Gzip、bzip2、LZMA、PNG 和 WebP 等压缩方法进行对比。demo_decompress.py 会对 Bit-Swap 压缩文件进行解压缩。

注意:如果输入的文件是已经被压缩的(JPEG、PNG 等),程序会先对文件进行解压缩,输出为 RGB 像素数据。接下来,RGB 像素数据就成了输入,Bit-Swap 会对其进行压缩,得到比 RGB 像素数据更小的结果。有人可能注意到了,原始的 RGB 像素数据比输入的文件包含了更多的信息量。在将 JPEG 文件转为 RGB 数据时,文件大小上的差异尤为明显。这是因为 JPEG 是一种有损的压缩形式,它包含一个量化步骤,该步骤会使原始图片丢失掉大部分信息。量化过程实现了可预测的模式,但也不得不使用了有损的压缩技术。然而当解压 JPEG 文件并将其转化为 RGB 时,无论是什么模式,我们都存储了每一个像素值,从而保留了更大的信息量。

原文链接:

https://bair.berkeley.edu/blog/2019/09/19/bit-swap/

(*本文为 AI科技大本营翻译文章,转载请微信联系1092722531)

本文分享自微信公众号 - AI科技大本营(rgznai100),作者:CSDN App

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-10-03

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • AI一分钟|“盗取无人车机密”的苹果工程师辩称无罪,已获保释;利用AI分析卫星遥感照片抓违章建筑

    据彭博社报道,前苹果华裔工程师张晓浪(Zhang Xiaolang)被控为一家中国初创企业窃取苹果在自动驾驶汽车项目商业机密,但在加州圣何塞的一家联邦法庭上他请...

    AI科技大本营
  • Get了!用Python制作数据预测集成工具 | 附代码

    经过算法比较,发现这里我们选择使用sklearn简单的多元回归进行拟合数据可以达到比较好的效果。

    AI科技大本营
  • 2019最新实战!给程序员的7节深度学习必修课,最好还会Python!

    从 2017 年开始,fast.ai 创始人、数据科学家 Jeremy Howard 以每年一迭代的方式更新“针对编程者的深度学习课程”(Practical D...

    AI科技大本营
  • android自定义view(自定义数字键盘)

    至此,我们写的差不多了,然后就是要提供一个接口,对外开放,方便用的时候调用,获取到数字或者其他信息:

    用户2802329
  • 《笨办法学Python》 第4课手记

    《笨办法学Python》 第4课手记 这节课目的是让你掌握变量,跟C语言非常类似,很简单。 左边是变量名用”=”号给变量赋值。 不同的是我没有看到变量声明,作者...

    Steve Wang
  • 以服务为中心的NFV管理

    NFV是通过x86服务器上的虚拟化技术实现网络功能,初期主要是用于对性能要求不高场景,来降低组网成本并使网络结构更灵活。随着SDN的迅速发展,NFV可以无缝应用...

    SDNLAB
  • 让Atom的go plus插件兼容govendor

    目前,go plus插件不会在项目的vendor目录搜索, 有人提了issue,被残忍的关闭了. 解决方案: 在go path里面建立一个目录叫 vendor,...

    Linker
  • minifilter 与用户态的通信

    驱动层的步骤 1. 创建通信端口 FltCreateCommunicationPort     对于安全对象,必须设置OBJ_KERNEL_HANDLE...

    战神伽罗
  • 笔记 |《深度学习原理与TensorFlow实践》学习笔记(四)

    作者 | 王清 目录 CNN应用之图像风格化实例 如何量化风格 快速风格化的两种模型训练生成风格的滤镜 生成对抗网络介绍GAN GAN的基本思想 GAN的基本框...

    AI科技大本营
  • 「Mysql索引原理(十六)」维护索引和表-更新索引统计信息

    MySQL的査询优化器会通过两个API来了解存储引擎的索引值的分布信息,以决定如何使用索引。第一个API是 records_in_range(),...

    源码之路

扫码关注云+社区

领取腾讯云代金券