算数编码才是压缩的本质

一直以来,大家对于大模型的理解都接受了“压缩即是智慧”这个思想,这个想法源自 Compression for AGI - Jack Rae | Stanford MLSys #76

里面核心模式只有一个:

代码
  1. 假定我有一个程序 f,我将 f 的代码传输给另一端;
  2. 我有一个序列需要传输,我通过 f 对逐个字符出现的概率进行了预测;
  3. 我根据算数编码,将结果编码后,传输给了另一端;
  4. 最后传输的信息量最小。

这不过是算数编码的定义好不好!!! 哪里有什么神奇的地方。。。

如果非说细节,也不过就是说明了为什么不用传输参数,将大模型的训练跟编码合到了一起而已。这完全证明不了大模型为什么有效果,以及为什么更大的模型效果更好。说出来的道理仅仅是:概率预测得越准,使用算数编码的压缩率越高。这件事结合算数编码的定义,不就是显然的问题吗?

而且它原始的流程中,也没有能体现出“Next Token Prediction”的优越性和必要性。

  1. 如果序列很小,那么压缩效率的核心是 f 的代码量。此时使用 lambda:x=x 达到的效果最好。
  2. 如果序列很大,那么传参也不会是压缩算法优劣的核心差别。那么其他模式训练出来的能对文本做良好概率预测的模型都可以达到好的压缩效果。
  3. 如果序列中等,我们需要的是是否存在一个方法,一次传输了多个算数编码和多个残差,能否通过这些信息还原出初始编码?针对这个问题,我们单独开一章来分析

是否只能用 NTP 做压缩?

由自然归纳法,如果一次传输两个编码和两个残差,能还原出原始信息,那么,一次传输 $n$ 个算数编码和 $n$ 个残差就一定可以还原出原始编码。

假设我们使用的算法的过程是先用除第一个字符以外的所有字符来预测第一个字符的概率,同时梯度下降;然后再用除第二个字符以外的其他字符预测第二个字符的概率,同时梯度下降。这样可以得到两个算数编码和两个残差,应该如何用这些信息还原初始的字符呢?

方法和不确定型自动机的原理类似,或者用更土的办法来理解算法:

实验

我们用词表中的所有字符,重试这个过程,看哪个字符可以匹配上。

虽然计算效率相比原版的 $\mathcal{O}(1)$,这个方法的复杂度是 $\mathcal{O}(n^2)$,但至少从压缩率的角度来看,我们对算法的要求没有计算速度方面的考量,更不用提这个算法一定是可以被优化的。

以此推广,也就是对于任何模式的文本预测算法,都可以用同样的方法进行信息解压缩。于是不同方法之间在压缩率方面的差距还是会回归到对概率预测的精度上。甚至理论上看,使用了更多上下文的算法,应当可以比只做 “Next Token Prediction” 的算法精度更高。

其他的无效解读

至于残差究竟是不是用信息熵,其实对这个压缩算法没有什么核心的影响,无论哪种残差该反向传播依旧按原本的方式传播,无所谓其物理意义。因为所有的意义都只体现在传递的残差能否还原原来的编码。残差能对应上什么物理意义的各种解释其实对压缩率和计算都没有帮助。

结论

所以那个演讲其实不过是个披着数学魔术的神奇表演,本质上不过是说:大模型谁的性能好,谁就是更好的大模型——典型的废话文学新版本了。