压缩就是预测!大模型本质是超级压缩器
压缩和预测,在数学上竟然是同一件事。大语言模型不是在“思考”,它只是在做你手机里压缩软件每天都在做的事情。这篇文章会带你从零开始,拆穿这个反直觉的真相。
压缩与预测的等价性
压缩和语言模型在数学和本质上是在解决同一个问题。压缩的目标是寻找数据中的规律(冗余)来减小体积,而语言模型的目标是预测下一个词(或符号)是什么。
- 压缩的“成本”:一个符号出现的概率越高,表示它的成本(比特数)就越低。
- 预测的“代价”:一个语言模型对下一个符号的预测越准确(即概率越高),它为此付出的“代价”(交叉熵损失)就越低。
这两者在数学上共享同一个公式,即负对数似然(-log2(P)),这也正是信息论中熵(Entropy) 的计算方式。
一个字母重复了九次,暴露了压缩的全部秘密
先做个简单的游戏。给你一串字符:AAAAAAAAABBBBCCDAAADDDDDDDDD。数一下,一共28个字符。按照电脑最常用的ASCII编码,每个字符占8个比特,这串东西占224个比特。现在换个写法:A9B4C2D1A3D9,意思就是9个A,4个B,2个C,1个D,3个A,9个D。数数看,12个字符,96个比特,文件大小直接砍掉57%。
这种压缩方法叫游程编码,是最简单粗暴的压缩方式之一。但它揭示了一个底层逻辑:压缩的本质是找到数据里的规律,然后用更短的方式把规律记下来。数据越有规律,压缩效果越好。
那么问题来了:什么样的数据最有规律?答案是那些你能提前猜到的数据!
一个字母在Q后面,价值翻了五千倍
刚才那个例子里,每个字母出现的概率是我们算出来的。A出现了12次,总共28个字符,概率是0.429,D是0.357,B是0.143,C是0.071。概率越高,压缩后占的比特越少。但问题在于,这个概率是孤立的,它没考虑字母出现的上下文。
举个极端例子。在整个英语里,字母U出现的概率大约是0.028。但如果U前面放一个Q,情况就变了,U跟在Q后面的概率飙升到0.999。0.028和0.999差了35倍。这意味着如果你知道前一个字母是Q,你几乎可以百分百确定下一个字母是U,根本不需要花太多比特去记录它。数学上怎么算这个差距?U的全局概率0.028,对应的比特数是负的log2(0.028),约等于5.16个比特;U跟在Q后面的概率0.999,对应的比特数只有0.001个比特。同一个字母,因为上下文不同,记录它需要的比特数差了五千倍。
这就是上下文的威力!
压缩工具里把这种考虑前一个符号的模型叫做一阶模型。你可以继续往上加,二阶模型看前两个符号,三阶看前三个,N阶看前N个。模型阶数越高,预测越准,压缩效果越好。
那问题又来了:最高阶的模型能有多高。
一句话从144比特压到21比特,靠的是猜
为了让你直观感受上下文带来的差距,我们看个实验。把“TO BE OR NOT TO BE”这句话用算术编码压缩。
不用上下文模型,压缩后大约47个比特;用一阶模型,也就是看前一个字母来预测下一个,压缩后只有21个比特。
原文144个比特,一阶模型直接压到21个比特,压缩率从67%提升到了85%。
方法很简单:让概率分布更倾斜,越倾斜压缩比越高。而让概率分布更倾斜的唯一办法,就是更准确地预测下一个符号是什么。
这就是压缩和预测的第一层关系:压缩需要预测,预测越准,压缩越小。
算术编码:把整篇文章变成一个数字
说到这里,得稍微讲一下压缩工具到底怎么用概率来压数据。
目前主流的压缩工具,比如gzip和Brotli,内部有三个核心部件:变换、模型、熵编码器。变换是预处理,把数据变得更有规律;模型负责计算每个符号的概率;熵编码器拿着这些概率,把数据变成最终的比特流。熵编码器里最经典的一种叫算术编码,它的思路很疯狂:把整段数据变成一个数字。
具体怎么操作?假设你要压缩“ABABAAC”这串字符。先算每个字母的概率:A是0.571,B是0.286,C是0.143。在0到1的区间上,按概率大小给每个字母划一块地,A占0到0.571,B占0.571到0.857,C占0.857到1。然后从头开始读字符串,每读一个字母,就把当前区间缩小到那个字母对应的子区间里;下一个字母来了,继续在子区间里按同样的比例再切。读完所有字母,你得到一个极其微小的区间,比如0.38730到0.38855。这个区间里的任何一个数字,都能代表整段原始数据。选一个比特数最少的数字,比如0.3876953125,原始字符串“ABABAAC”用ASCII编码需要56个比特,这个数字只需要10个比特,压缩率82%。
解码的时候反过来,拿着这个数字,同样的概率分布,看它落在哪个区间就输出哪个字母,然后缩小范围继续找。整个过程像是一个猜谜游戏。你猜得越准,最终那个数字需要的比特就越少。
香农熵:压缩的天花板,谁也突破不了
那么问题来了:压缩有没有极限?有,这个极限叫香农熵!
熵的计算公式是负的log2(概率)的加权平均,通俗点说,熵告诉你每个符号平均至少需要多少个比特。这是理论下限,任何无损压缩算法都不可能低于这个数字。
那为什么没有出现一个万能压缩器,能把所有数据都压到极限?因为熵是跟着概率走的,不同数据的概率分布不一样。想压得更小,就得让概率分布更倾斜;想让概率分布更倾斜,就得更好地预测下一个符号。
绕回来了,压缩的天花板由预测能力决定。
如何从压缩走向预测?
从简单压缩到复杂预测的演变过程:
从频率到概率:压缩的第一步是建立数据的统计模型。最简单的模型是统计每个符号出现的频率,并将其转化为概率。符号出现越频繁,概率越高,就能被编码成更短的比特串。
从概率到熵:熵代表在无损压缩下,每个符号所需的理论最小平均比特数。熵是压缩的“地板”,概率分布越“倾斜”(即某些符号概率极高),熵就越低,压缩效果就越好。
从上下文到预测:为了让概率分布更“倾斜”,引入了上下文(Context) 的概念。一个符号的概率不是孤立的,它强烈依赖于前面的符号。例如,字母'U'在'Q'之后出现的概率远高于其全局概率。这种考虑前N个符号的模型被称为阶数(Order-N)模型。实验证明,使用一阶模型(Order-1) 可以将一段文本的压缩大小减少一半以上
大语言模型:史上最疯狂的预测器
现在我们来说大语言模型!
你向ChatGPT提问,它给你回答,这过程看起来跟压缩八竿子打不着。但拆开看,LLM做的工作和算术编码里的模型完全一样。你输入的那段提示词,就是上下文。LLM根据这个上下文,给词表里所有可能的下一个词分配一个概率。哪个词概率最高,它就选哪个,拼到上下文后面,继续预测下一个。这就是LLM生成文本的全部秘密,它就是个高级自动补全。
现在把LLM放进压缩流程里。算术编码需要一个模型来提供概率,LLM本质上就是一个概率模型。
区别在于,LLM的上下文窗口极其巨大,模型参数量动辄上千亿,它能看到的前面N个符号,N可以成千上万,这相当于一个超高阶的上下文模型。把LLM当成压缩器的模型部分,用算术编码做最后的熵编码,理论上能达到惊人的压缩比。
有人做了实验,用一阶模型压缩狄更斯那句 famous quote“这是最好的时代,这是最坏的时代……”压缩后是434个比特,占原文的24%;用GPT-2压缩同一段话,只用了176个比特,占原文的10%。GPT-2在今天看来已经是远古模型了,换成GPT-4或者Claude,数字会更夸张。
训练大模型,本质上是在训练一个压缩器
这里有一个更反直觉的点:LLM的训练目标叫交叉熵损失,交叉熵的数学形式和压缩里的熵几乎一模一样。
LLM训练时做的事情,就是不断调整模型参数,让它在给定上下文的情况下,给真实下一个词分配尽可能高的概率。概率越高,交叉熵越小;交叉熵越小,意味着如果用这个模型去做压缩,每个符号需要的平均比特数越少。
所以训练LLM,本质上就是在训练一个压缩器。
模型越擅长预测下一个词,它就越擅长压缩数据!
反过来说也成立:一个模型压缩数据的能力越强,说明它对数据的预测越准。
这就是2023年Google DeepMind那篇论文的核心论点:语言建模和压缩是同一件事的两种表达。
大模型:终极预测器与压缩器
因此,LLM大模型本质上就是一个超高阶的、基于海量数据训练出来的上下文模型。
工作原理一致:LLM根据输入的上下文(Prompt),为词表中所有可能的下一个词(Token) 分配一个概率分布。这和一个熵编码器根据上下文模型来压缩数据的过程完全相同。
性能卓越:一个在大量文本上训练良好的LLM,能做出极其准确的预测,从而将数据的熵(即理论最小体积)压得非常低。对比一阶模型和GPT-2压缩狄更斯名言的效果,GPT-2的表现显著更优。
训练目标一致:LLM的训练目标——最小化交叉熵损失(Cross-Entropy Loss),本质上就是在最小化其预测结果与真实数据之间的“比特数”。
那为什么不用LLM来压缩所有文件
听到这里你可能会想:既然LLM压缩能力这么强,为什么不用它来替代gzip和Brotli?答案很简单:成本。
压缩的目标不只是把数据压到最小,而是在给定的资源约束下把数据压到最小。你打开一个网页,服务器用gzip压缩HTML,你的浏览器用内置的小模型解压,整个过程几乎不消耗额外资源。如果换成LLM呢?浏览器和服务器都得装一份LLM,随便一个像样的模型都得好几个GB,光是把模型传给你就已经比要传输的网页大几千倍了。更别说每次请求都要跑一次推理,压缩和解压的速度会慢到无法接受。
对于压缩网页这种 trivial 的任务,用LLM就像用洲际导弹打蚊子。就算你要压缩的数据集比LLM本身大得多,所需的计算量也让这件事不现实。所以LLM不会取代gzip,不是因为它不够强,而是因为它太强了,强到用不起。
同一个公式,两个世界
算术编码是1970年代末发明的,它能把数据压缩到离熵极限只差几个比特。
今天的熵编码器竞争的是速度和内存,不是压缩比。真正拉开差距的是模型,是那个提供概率的家伙。模型越好,预测越准,熵越低,压缩越小。LLM是目前人类能造出来的最好的预测器,而它们被训练的目标,就是最小化那个比特数。在压缩领域,那个数叫熵;在语言模型领域,那个数叫交叉熵。同一个公式,两个名字。
压缩就是预测,LLM就是压缩器。只不过这个压缩器太大了,大到没人用它来压缩文件。但它的每一次回答,本质上都在做算术编码里那个模型在做的事:给定上下文,猜下一个是什么。猜对了,信息量就少;猜错了,信息量就多。这就是为什么AI有时候会胡说八道,因为它在猜,而且有时候猜错了。你以为它在思考,其实它只是在做你手机里那个压缩软件每天都在做的事情,只不过它做得更好,也更贵。
原文期刊:ngrok博客 / 发表日期:2026年8月11日 / 原文标题:Compression is prediction / 作者单位背景:ngrok工程团队