数据压缩技术简史
简单来说,如果没有数据压缩技术,我们无法使用WinRAR对邮件中的附件进行瘦身;如果没有数据压缩技术,市面上的数字录音笔只能录不到20分钟的语音;如果没有数据压缩技术,从网上下载一部电影可能需要半年时间...但是这一切究竟是怎么发生的呢?数据压缩技术是如何从无到有发展起来的?一千多年前,中国学者就知道用“班玛”这样的缩写来指代班固和司马迁。这种崇尚简单的习俗一直延续到今天的互联网时代:当我们在BBS上用“7456”来代表“气死我”或者用“B4”来代表“以前”的时候,我们至少应该知道这其实是最简单的数据压缩。
严格来说,数据压缩起源于人们对概率的理解。我们在对文本信息进行编码时,如果对出现概率较高的字母给予较短的编码,对出现概率较低的字母给予较长的编码,总的编码长度可以缩短很多。早在计算机出现之前,著名的莫尔斯电码就已经成功实践了这一准则。在莫尔斯电码表中,每个字母对应一个独特的点和破折号的组合。出现概率最高的字母E被编码为点“.”,而具有较低出现概率的字母Z被编码为“-..”。显然,这可以有效地缩短最终的代码长度。
信息论之父C. E .香农首先用数学语言阐述了概率与信息冗余的关系。香农在1948发表的论文《传播的数学理论》中指出,任何信息都存在冗余,冗余与信息中每个符号(数字、字母或单词)的概率或不确定性有关。香农借鉴了热力学的概念,将排除冗余的平均信息量称为“信息熵”,并给出了计算信息熵的数学表达式。这篇伟大的论文后来被誉为信息论的开山之作,信息熵也奠定了所有数据压缩算法的理论基础。本质上,数据压缩的目的是消除信息中的冗余,信息熵及相关定理通过数学手段精确描述了信息冗余的程度。利用信息熵公式,人们可以计算出信息编码的极限,即在一定的概率模型下,无损压缩的编码长度不能小于信息熵公式给出的结果。
有了完整的理论,接下来的事情就是想办法实现具体的算法,尽量让算法的输出接近信息熵的极限。当然,大多数工程技术人员都知道,把一个理论从数学公式发展成实用技术并不容易,就像只用一个公式E = MC ^ 2制造核武器一样。设计特定压缩算法的过程通常更像是一个数学游戏。开发者首先要寻找一种方法,能够尽可能准确地统计或估计符号在信息中出现的概率,然后设计一套编码规则,用最短的代码描述每个符号。统计知识对于之前的工作还是相当有效的。迄今为止,人们已经先后实现了静态模型、半静态模型、自适应模型、马尔可夫模型、部分匹配预测模型等概率统计模型。相对而言,编码方式的发展更为曲折。
在1948中,Shannon提出了信息熵理论和一种简单的编码方法——Shannon编码。在1952中,R. M. Fano进一步提出了Fano编码。这些早期的编码方法揭示了变长编码的基本规律,确实可以达到一定的压缩效果,但离真正实用的压缩算法还很远。
第一个实用的编码方法是由D. A. Huffman在他的论文1952中提出的。直到今天,很多数据结构的教材在讨论二叉树的时候,仍然会提到这种叫做霍夫曼编码的方法。霍夫曼编码在计算机领域是如此著名,甚至编码本身的发明过程也成了热门话题。据说1952年,年轻的霍夫曼还是麻省理工的学生。他设计这种看似简单却意义深远的编码方法,是为了向老师证明他不能参加某门课程的期末考试。
霍夫曼编码效率高,运算速度快,实现灵活。自20世纪60年代以来,它被广泛应用于数据压缩领域。比如早期UNIX系统中不为现代人所熟知的压缩程序COMPACT,其实就是霍夫曼0阶自适应编码的具体实现。80年代初,霍夫曼编码出现在CP/M和DOS系统中,其代表程序叫SQ。今天,霍夫曼编码出现在许多著名的压缩工具和算法中(如WinRAR、gzip和JPEG)。而霍夫曼编码得到的编码长度只是信息熵计算结果的一个近似值,并不能真正逼近信息熵的极限。正因为如此,现代压缩技术通常只把霍夫曼作为最终的编码方式,而不是整个数据压缩算法。
科学家从未放弃挑战信息熵极限的理想。1968左右,P. Elias发展了Shannon和Fano编码方法,从数学角度构造了更完善的Shannon-Fano-Elias编码。遵循这种编码方法的思想,在1976中,J. Rissanen提出了一种编码方法——算术编码,可以成功地逼近信息熵的极限。1982年,Rissanen和G. G. Langdon一起改进了算术编码。然后,人们将算术编码与J. G. Cleary和I. H. Witten在1984中提出的部分匹配预测模型(PPM)相结合,发展出一种压缩效果近乎完美的算法。今天那些号称压缩效果世界第一的以PPMC、PPMD或PPMZ命名的通用压缩算法,其实就是这种思想的具体实现。
对于无损压缩,PPM模型和算术编码的结合可以最大程度地逼近信息熵的极限。看来压缩技术的发展可以到此为止了。遗憾的是,事情往往没有想象的那么简单:算术编码虽然可以获得最短的编码长度,但其复杂性也使得算术编码的任何具体实现都慢如蜗牛。即使在摩尔定律盛行、CPU速度日新月异的今天,算术编码程序的运行速度也很难满足日常应用的需求。没办法,要不是后面提到的两个犹太人,我们不知道什么时候才能用上WinZIP这样方便实用的压缩工具。逆向思维永远是科技领域出奇制胜的法宝。就在大多数人绞尽脑汁改进霍夫曼或算术编码,以获得一种运行速度和压缩效果都很“完美”的编码时,j·齐夫和a·伦佩尔两位聪明的犹太人,脱离了霍夫曼和算术编码的设计思路,创造了一系列比霍夫曼编码更有效、比算术编码更快的压缩算法。我们通常用这两个犹太姓氏的缩写,将这些算法统称为LZ系列算法。
按时间顺序,LZ系列算法的发展大致如下:齐夫和莱姆佩尔在1977年发表了一篇题为《顺序数据压缩的通用算法》的论文,论文中描述的算法被后人称为LZ77算法。在1978中,他们发表了这篇论文的续篇“通过可变速率编码压缩单个序列”,并描述了名为LZ78的压缩算法。1984年,T. A. Welch发表了一篇题为《高性能数据压缩技术》的论文,描述了他在Sperry研究中心(后来并入Unisys)的研究成果。这是LZ78算法的变体,后来被称为LZW算法。在1990之后,T. C. Bell等人提出了许多LZ系列算法的变体或改进版本。
讲真,LZ系列算法的思路并不新颖,既没有深厚的理论背景,也没有复杂的数学公式。他们只是延续了几千年来人们对词典的推崇和喜爱,以一种极其巧妙的方式将词典技术应用到通用数据压缩领域。一般来说,当你把文章中的每一个字都换成字典中的页码和行号时,你其实已经掌握了LZ系列算法的真正含义。这种基于字典模型的思想虽然表面上与香农和霍夫曼开创的统计方法有很大不同,但实际上却能逼近信息熵的极限。而且从理论上可以证明LZ系列算法本质上仍然符合信息熵的基本规律。
LZ系列算法的优势很快在数据压缩领域得到体现,使用LZ系列算法的工具和软件数量呈爆炸式增长。使用LZW算法的压缩程序最早出现在UNIX系统上,很快成为UNIX世界的压缩标准。其次是MS-DOS环境下的ARC程序,以及PKWare、PKARC等仿制品。20世纪80年代,著名的压缩工具LHarc和ARJ就是LZ77算法的杰出代表。
今天,LZ77、LZ78、LZW算法及其变体几乎垄断了整个通用数据压缩领域。我们熟悉的压缩工具有PKZIP、WinZIP、WinRAR、gzip等,文件格式有ZIP、GIF、PNG等。,这些都得益于LZ系列算法。甚至PGP等加密文件格式也选择了LZ系列算法作为其数据压缩标准。
没有人能否认两个犹太人对数据压缩技术的贡献。我只想强调一点,在工程技术领域,片面追求理论上的完美,往往事倍功半。如果我们总是能像齐夫和伦佩尔那样从另一个角度思考,也许你和我可以发明一种新的算法,并在技术展览的历史上留名。LZ系列算法基本解决了一般数据压缩中速度和压缩效果兼顾的问题。然而,在数据压缩领域,还有另一个更广阔的世界等待着我们去探索。香农的信息论告诉我们,信息的先验知识越多,我们能压缩的就越小。换句话说,如果压缩算法的设计目标不是任意数据源,而是基本属性已知的特殊数据,压缩效果会进一步提高。这就提醒我们,除了开发通用的压缩算法,还必须认真研究针对各种特殊数据的特殊压缩算法。例如,在当今的数字生活中,分布在各种数字设备如数码相机、数字录音机、数字随身听和数字摄像机中的图像、音频和视频信息必须经过有效压缩才能存储在硬盘上或通过USB电缆传输。事实上,多媒体信息的压缩一直是数据压缩领域的一个重要课题,它的每一个分支都有可能主导未来的某一个技术趋势,给数码产品、通讯设备和应用软件的开发者带来无限商机。
先说图像数据的压缩。一般来说,图像可以分为二值图像、灰度图像、彩色图像等不同类型。每种类型图像的压缩方法也不同。
传真技术的发明和广泛使用促进了二值图像压缩算法的快速发展。CCITT(国际电报电话咨询委员会,ITU的附属机构)为传真应用建立了一系列图像压缩标准,专门用于压缩和传输二进制图像。这些标准一般包括70年代末的CCITT Group 1和Group 2的CCITT Group 3,1980,以及CCITT Group 4的1984。为了适应不同类型的传真图像,这些标准中使用的编码方法包括一维MH编码和二维MR编码,其中使用了游程编码(RLE)和霍夫曼编码。今天,当我们在办公室或家里收发传真时,我们大多使用CCITT Group 3压缩标准,而一些基于数字网络和存储二进制图像的TIFF文件的传真设备使用CCITT Group 4压缩标准。在1993中,由CCITT和ISO(国际标准化组织)建立的联合二值图像专家组(JBIG)进一步将二值图像压缩发展成更通用的JBIG标准。
事实上,对于二值图像以及不连续的灰度和彩色图像,很多通用的压缩算法,包括LZ系列算法,都可以达到很好的压缩效果。比如诞生于1987的GIF图像文件格式使用的是LZW压缩算法,出现于1995的PNG格式比GIF格式更完善,它选择的是LZ77算法的变种zlib来压缩图像数据。此外,人们实际上已经利用上述的霍夫曼编码、算术编码和PPM模型构造了许多有效的图像压缩算法。
而对于更常见的灰度或彩色图像(如数码照片),其像素值在空间上是连续变化的,一般压缩算法的优势就不那么明显了。幸运的是,科学家们发现,如果在压缩这类图像数据时,允许改变一些不重要的像素值或允许损失一些精度(压缩一般数据时,我们绝不会容忍精度的任何损失,但在压缩和显示一张数码照片时,如果一片森林中某些树叶的颜色稍暗,看照片的人通常不会察觉),我们可能会在压缩效果上有所突破。这种思想在数据压缩领域具有革命性的地位:通过在用户的容忍范围内损失一些精度,我们可以将图像(包括音频和视频)压缩到原始大小的十分之一、百分之一甚至千分之一,这远远超出了一般压缩算法的容量极限。或许,这类似于生活中常说的“退一步海阔天空”的道理。
这种允许精度损失的压缩也称为有损压缩。在图像压缩领域,著名的JPEG标准是有损压缩算法中的经典。JPEG标准由联合图像专家组(JPEG)于1986年制定,1994后成为国际标准。JPEG以离散余弦变换为核心算法,通过调整质量系数来控制图像的精度和大小。对于照片等连续变化的灰度或彩色图像,JPEG一般可以在保证图像质量的前提下,将图像压缩到原来大小的十分之一到二十分之一。如果不考虑图像质量,JPEG甚至可以把图像压缩到“无限小”。
JPEG标准的最新发展是JPEG 2000,它是1996制定的,2001正式成为国际标准。与JPEG相比,JPEG 2000有了很大的改进,其中最重要的是用离散小波变换(DWT)代替了JPEG标准中的离散余弦变换。在相同的文件大小下,JPEG 2000压缩图像比JPEG具有更高的质量和更少的精度损失。JPEG 2000作为一种新的标准,目前还没有得到广泛的应用,但包括数码相机厂商在内的许多企业都看好它的应用前景,JPEG 2000在图像压缩领域充分发挥作用的日子应该不会特别遥远。
JPEG标准中为了压缩效果而损失精度的设计思想直接影响了视频数据的压缩技术。CCITT在1988中制定了可视电话和会议电视的H.261建议草案。H.261的基本思想是使用类似JPEG标准的算法对视频流中的每一帧图像进行压缩,同时使用运动补偿的帧间预测来消除视频流时间维度上的冗余信息。在此基础上,1993年,ISO通过了运动图像专家组(MPEG)提出的MPEG-1标准。MPEG-1可以有效地编码普通质量的视频数据。现在我们看到的大多数VCD碟片都是用MPEG-1标准来压缩视频数据的。
为了支持更清晰的视频图像,尤其是数字电视等高端应用,ISO在1994中提出了新的MPEG-2标准(相当于CCITT的H.262标准)。MPEG-2对图像质量进行分类,可以适应普通电视节目、会议电视、高清数字电视等不同质量的视频应用。在我们的生活中,能够为DVD提供高清画面的是MPEG-2标准。
互联网的发展对视频压缩提出了更高的要求。在内容交互、对象编辑和随机访问等新需求的刺激下,ISO在1999中采用了MPEG-4标准(相当于CCITT的H.263和H.263+标准)。MPEG-4标准具有更高的压缩比,并支持诸如并发数据流的编码、基于内容的交互式操作、时域中增强的随机存取、容错和基于内容的尺度可变性等高级特性。互联网上出现的DivX和XviD文件格式使用MPEG-4标准来压缩视频数据。它们能以更小的存储空间或通信带宽提供堪比DVD的高清视频,让我们在互联网上发布或下载数字电影的梦想得以实现。
正如视频压缩与电视行业的发展密不可分一样,音频数据压缩技术最早是由无线电广播和语音通信领域的技术人员开发出来的。其中,对语音编码和压缩技术的研究最为活跃。自H. Dudley在1939年发明声码器以来,人们相继发明了脉码调制(PCM)、线性预测(LPC)、矢量量化(VQ)、自适应变换编码(ATC)、子带编码(SBC)等语音分析处理技术。这些语音技术不仅可以收集语音特征和获得数字信号,而且通常可以减少信息冗余。像图像压缩领域的JPEG,为了获得更高的编码效率,大部分语音编码技术都允许一定程度的精度损失。而且,为了更好地存储或传输二进制数据的语音信号,这些语音编码技术在将语音信号转换成数字信息后,总是使用霍夫曼编码、算术编码等通用压缩算法来进一步减少数据流中的冗余信息。
对于存储在电脑和数码电器(如数码录音笔、数码随身听)中的普通音频信息,MPEG系列中的音频压缩标准是最常用的压缩方式。例如,MPEG-1标准提供了三种可选的音频压缩标准,即第一层、第二层和第三层***,MPEG-2进一步引入了AAC(高级音频编码)音频压缩标准。MPEG-4标准的音频部分支持不同类型的应用,例如合成音频编码和自然音频编码。在众多音频压缩标准中,MPEG-1 Layer III可能是最著名的一个,也就是我们常说的MP3音频压缩标准。从MP3播放器到MP3手机,从硬盘上堆积如山的MP3文件,到互联网上不断下载有版权纠纷的MP3,MP3早已超越了数据压缩技术的范畴,成为了时尚文化的象征。
显然,在多媒体信息正在成为主流信息形式的数字时代,数据压缩技术仍有相当大的发展空间,尤其是对于图像、音频和视频。毕竟,人们对信息数量和质量的追求是无止境的。从信息熵到算术编码,从犹太人到WinRAR,从JPEG到MP3,数据压缩技术的发展史就像一张充满创新、挑战、突破和变革的羊皮画卷。或许,我们在这里不厌其烦地列出年代、数字、标准、文件,只是想告诉你,前人的成就,不过是后人有望超越的目标。谁知道未来几年还会出现多少香农和霍夫曼?
说到未来,还可以补充一些与数据压缩技术发展趋势相关的话题。
在1994中,M. Burrows和D. J. Wheeler ***提出了一种新的通用数据压缩算法。该算法的核心思想是对字符串旋转后得到的字符矩阵进行排序和变换。一种类似的变换算法被称为伯罗斯-惠勒变换,简称BWT变换。由Burrows和Wheeler设计的BWT算法完全不同于所有以前的通用压缩算法,就像齐夫和Lempel找到了另一种方法一样。如今,BWT算法在开源压缩工具bzip中取得了巨大的成功,bzip对文本文件的压缩效果远远好于使用LZ系列算法的工具软件。这至少可以说明,即使在日益成熟的通用数据压缩领域,只要在理念和技术上不断创新,我们仍然可以找到新的突破。
分形压缩技术是近年来图像压缩领域的一个热点。这种技术起源于B. Mandelbrot在1977年创立的分形几何。M. Barnsley在20世纪80年代后期为分形压缩奠定了理论基础。自20世纪90年代以来,A. Jacquin等人提出了许多实验性的分形压缩算法。今天,许多人认为分形压缩是图像压缩领域最有潜力的技术体系,但也有许多人对此不屑一顾。不管它的前景如何,分形压缩技术的研究和发展提醒我们,经过几十年的快速发展,也许我们需要一种新的理论或者几种更有效的数学模型来支撑和推动数据压缩技术的飞跃。
人工智能是另一个可能对数据压缩的未来产生重大影响的关键词。既然香农认为信息能不能压缩,能压缩到什么程度,直接关系到信息的不确定性,那么假设有一天人工智能技术成熟了,计算机也能像人一样,根据少量已知的上下文推测后续信息,那么把信息压缩到原来的万分之一甚至十万分之一就不再是天方夜谭了。
回顾历史之后,人们总喜欢思考未来。但未来终究是未来。如果仅凭你我几句话就能梳理出未来的技术发展趋势,那技术创新的工作岂不是很枯燥?对我来说,未来并不重要。重要的是在网上下载一些大片,然后躺在沙发上享受数据压缩带来的无限快乐。