30u30 中文导读 / 30 天目录 / 第 7 天

第 7 天 · 熵一路上涨,复杂度却先升后降

第 1 单元Quantifying the Rise and Fall of Complexity in Closed Systems: The Coffee AutomatonScott Aaronson, Sean M. Carroll, Lauren OuellettearXiv · 2014
这是导读,不是翻译。先用 10 分钟拿到这篇论文的思想地图,再去读 原论文 →,去原仓库的 07_coffee_automaton/ 目录 → 动手写代码。
给孩子讲:这一天有 10 岁孩子能听懂的讲义,带猜字游戏和动手活动,可打印。打开儿童讲义 → · PDF 简体 · PDF 繁體

一句话

论文用二维元胞自动机模拟奶油混入咖啡,用压缩后的文件大小估计熵和“表观复杂度”。结果显示:熵单调上升,复杂度先升后降;而且粒子之间必须有交互,复杂度才会明显出现。

论文讲了什么

结论先行:封闭系统的熵(entropy)只增不减,但系统“看起来有多复杂”会先升后降。这篇论文把这个直觉变成一个可以在电脑上跑的实验。

问题。把奶油倒进黑咖啡:开始时上白下黑,结构很简单;最后完全混匀,也很简单;中间出现卷须和漩涡,看起来最复杂。第 6 天 Aaronson 的博客文章提出了这个猜想。难点是“复杂”缺少可计算的定义。柯氏复杂度(Kolmogorov complexity)不可计算,而且它把纯随机噪声算成最复杂的东西,和直觉相反。

方法。作者做了 3 件事:

关键结果。

附录给出一个分析论证:非交互模型的复杂度在整个过程中保持很低。作者也承认:交互模型里复杂度必然上升这一点,目前还没有严格证明。

关键概念

柯氏复杂度(Kolmogorov complexity)
能输出某个字符串的最短程序长度。它衡量“最少要多少信息才能描述这个对象”。它不可计算,而且纯随机串的值最大。
表观复杂度(apparent complexity)
论文用的复杂度指标:先粗粒化,再估计结果的柯氏复杂度。纯有序和纯随机的状态得分都低,有宏观结构的状态得分高。
粗粒化(coarse-graining)
把 g×g 小块取平均并分档,相当于站远一点看图。它去掉单个粒子的随机细节,只保留观察者关心的宏观形状。
用压缩近似信息量(compression as a proxy)
柯氏复杂度算不出来,就用 gzip 压缩后的字节数代替。压缩得越小,说明数据里的规律越多。这是一个上界估计,不是精确值。
交互模型(interacting model)
每格只能放 1 个粒子,粒子只能和邻居交换位置。粒子之间互相阻挡,于是出现了非交互模型里没有的宏观结构。

历史位置:为什么值得读

它回答的是一个物理学家的追问。热力学第二定律说熵会增加,但没有说复杂结构从哪来、何时消失。2011 年 Sean Carroll 在一次会议上提出这个问题,Aaronson 写博客回应,提出“复杂动力学第一定律”的猜想(第 6 天)。这篇论文是两人带着学生 Ouellette 做的第一次量化实验。

它把“复杂”从口号变成了可测量的量。此前有几种候选定义:精巧度(sophistication)、逻辑深度(logical depth)、光锥复杂度(light-cone complexity)。作者讨论后选了最容易计算的方案:粗粒化加压缩。这个选择不完美,但给出了可以复现、可以改进的基线。

它为什么出现在 Ilya 的清单里。清单前半段反复出现同一条线索:学习就是压缩。第 4、5 天讲最小描述长度,第 26 天讲柯氏复杂度。这篇论文补上了“结构”这一面:真正值得学习的,是去掉噪声之后剩下的宏观规律。神经网络泛化,本质上也是学到数据的粗粒化结构,而不是记住每个像素。

学前准备

在原仓库怎么学

这一天不需要下载数据集,全部数据由模拟生成。建议按下面的顺序学:

  1. 读 README.md 的目录结构,它按论文第 3 到第 9 节组织。先对照论文读一遍,知道每节对应哪段代码。
  2. 读 implementation.py。它实现了交互和非交互两个模型,以及 3 档和修正后两种粗粒化测量。先看模型的单步更新函数。
  3. 运行 train_minimal.py。默认参数跑交互模型;加 --compare-models 对比两个模型;加 --compare-methods 对比两种粗粒化;加 --scaling 跑规模实验。
  4. 打开 notebook.ipynb 一步步复现曲线。画图函数在 visualization.py,包括熵与复杂度曲线、网格快照、规模分析和压缩器对比 4 类图。
  5. 做 exercises/ 的 5 个练习:01 自己写粗粒化和复杂度测量;02 对比交互与非交互模型;03 规模分析;04 修正粗粒化;05 对比不同压缩器。卡住时再看 exercises/solutions/。
  6. 最后用 paper_notes.md 和 CHEATSHEET.md 自查理解。

今天再看

“学习即压缩”这条线索在大语言模型时代更强了。语言模型的预训练损失就是对下一个 token 的编码长度。2023 年 DeepMind 的论文直接把语言模型当压缩器用,压缩率超过 gzip 这类通用工具。

这篇论文的度量方法已经显得粗糙。gzip 只能发现局部重复,发现不了“漩涡”这种几何规律。如果换成神经网络压缩器,表观复杂度的曲线很可能会变。复杂度峰值的位置也依赖粗粒化尺度 g,而 g 由人来选。

核心问题仍然开放。什么样的数据“有结构”?模型应该记住什么、忽略什么?今天讨论数据质量和合成数据时,人们问的还是这篇论文的问题:怎样区分有意义的结构和随机噪声。

容易卡住的地方

延伸阅读