什么是 Entropy?
Jason Fantl
一个计算机科学博客
[ ](https://jasonfantl.com/posts/What-is-Entropy/<javascript:location.href = 'mailto:' + ['Jasonemerald','gmail.com'].join('@')>) Home 什么是 Entropy? Post Cancel
什么是 Entropy?
发布于 2025年3月21日
作者 _Jason Fantl _
40 分钟 阅读
人们对 entropy 有很多说法:entropy 随时间增加,entropy 是无序的,entropy 随能量增加,entropy 决定了时间的箭头等等。但我不知道 entropy 是什么,而且根据我发现的,大多数其他人也不知道。这是我希望在第一次被告知 entropy 时就有的介绍,希望你觉得它有帮助。我的目标是,在这篇长文结束时,我们将对这些陈述有一个严格而直观的理解,特别是,为什么在时间向前移动时,宇宙看起来与时间向后移动时不同。
这段旅程从定义和理解 entropy 开始。在不同的学科中,关于 entropy 有多个正式的定义——热力学、统计力学、信息论——但它们都共享一个中心思想:entropy 量化了不确定性。对 entropy 最简单的介绍是通过信息论,它将引导我们了解物理系统中的 entropy,然后最终了解 entropy 和时间之间的关系。
信息论
想象一下,你想向你的朋友传达一些随机事件的结果,比如骰子的结果或彩票的中奖者,但你想用尽可能少的比特(只有 1 和 0)来做这件事。你能用多少个比特?
信息论的创始人 Claude Shannon 在他在 Bell 实验室工作期间,试图回答诸如此类的问题。他正在开发通信和压缩的数学基础,最终他发现消息所需的最小比特数与消息的不确定性直接相关。然后,他能够制定一个公式来量化消息的不确定性。当他与他在 Bell 实验室的物理学家同事 John von Neumann 分享时,von Neumann 建议称之为 entropy,原因有二:
Von Neumann, Shannon 报道,建议将该函数称为“entropy”有两个很好的理由。“这个名称已经被使用了,”他据说说道,“而且,它会在辩论中给你带来很大的优势,因为没有人真正知道 entropy 到底是什么。”Shannon 将该函数称为“entropy”,并将其用作“不确定性”的度量,在写作中不加区分地交替使用这两个词。——Harold A. Johnson (ed.), Heat Transfer, Thermodynamics and Education: Boelter Anniversary Volume (New York: McGraw-Hill, 1964), p. 354.
稍后我们将看到 Shannon 的 entropy 与先前存在的 entropy 定义之间的关系不仅仅是巧合,它们是紧密相连的。
但现在让我们看看 Shannon 是如何找到这些通常模糊的术语“信息”和“不确定性”的定义的。
在信息论中,观察到的状态的信息被正式定义为传达该状态所需的比特数(至少对于具有二的幂的等可能结果的系统,我们很快就会看到如何推广它)。以下是一些信息的示例:
- 如果我抛一枚公平的硬币,我需要一个比特的信息来告诉你结果:我用
0
表示正面,用1
表示反面。 - 如果我掷一个公平的 8 面骰子,我可以用 3 个比特表示结果:我用
000
表示 1,用001
表示 2,用010
表示 3,等等。
系统可能的结果越多,表示其结果所需的比特(信息)就越多。如果一个系统有 N 个等可能的结果,那么表示该系统的一个结果需要 log2(N) 个比特的信息。
Entropy 被定义为表示系统状态所需的预期比特数(这是一个谎言,但这是目前最有用的定义,我们稍后会修复它)。因此,硬币的 entropy 为 1,因为平均而言,我们预计需要 1 个比特的信息来表示硬币的结果。一个 8 面骰子的 entropy 将为 3 个比特,因为我们预计平均需要 3 个比特来表示结果。
最初看起来,entropy 是一个不必要的定义,因为我们可以直接查看表示系统结果需要多少比特,并使用该值,但这仅在结果的机会都同样可能时才成立。
现在想象一下,我有一个加权的 8 面骰子,因此数字 7 出现 50% 的时间,而其余的面出现 ≈7.14% 的时间。现在,如果我们很聪明,我们可以减少传达骰子结果所需的预期比特数。我们可以决定用 0
表示 7,所有其他数字将用 1XXX
表示,其中 X
是一些唯一的比特。这意味着 50% 的时间我们只需要使用 1 个比特的信息来表示结果,而另外 50% 的时间我们使用 4 个比特,因此预期的比特数(骰子的 entropy)为 2.5。这低于公平的 8 面骰子的 3 个比特的 entropy。
幸运的是,我们不需要为每个可能的系统提出一个巧妙的编码方案,对于表示具有概率 p 的状态需要多少比特的信息,存在一种模式。我们知道如果 p=0.5,例如硬币正面朝上,那么需要 1 个比特的信息来表示该结果。如果 p=0.125,例如一个公平的 8 面骰子落在数字 5 上,则需要 3 个比特的信息来表示该结果。如果 p=0.5,例如我们不公平的 8 面骰子落在数字 7 上,那么需要 1 个比特的信息,就像硬币一样,这表明重要的是结果的概率。有了这个,我们可以发现一个公式来表示具有概率 p 的状态所需的比特数。
I(p)=−log2(p)
这个值 I 通常被称为 信息内容 或 惊喜,因为状态发生的概率越低,发生时的惊喜就越大。
当概率较低时,惊喜程度较高,当概率较高时,惊喜程度较低。这是一个比“所需的比特数”更通用的公式,因为它允许极有可能(例如 99% 的可能性)的状态具有小于 1 的惊喜程度,如果我们试图将该值解释为“表示结果所需的比特数”,这将毫无意义。
现在我们可以修复我们对 entropy 的定义(我之前说的谎言)。Entropy 不一定是用于表示系统的预期比特数(尽管当您使用最佳编码方案时是这样),但更一般地说,entropy 是系统的预期 惊喜。
现在我们可以计算系统的 entropy,例如骰子或硬币或任何具有已知结果概率的系统。具有 N 个可能结果(每个结果的概率为 pi(总和为 1))的系统的预期惊喜(entropy)可以计算为
(Shannon entropy)∑i=1Npi⋅I(pi)=−∑i=1Npi⋅log2(pi)
请注意,如果所有 N 个概率都相同(因此 pi=1N),那么 entropy 方程可以简化为
−∑i=1Npi⋅log2(pi)⇒log2(N)
以下是一些使用 (Shannon entropy) 的基本示例。
- 一枚公平的硬币的 entropy 是
−(0.5⋅log2(0.5)+0.5⋅log2(0.5))=log2(2)=1
- 一个公平的 8 面骰子的 entropy 是
−∑i=180.125⋅log2(0.125)=log2(8)=3
- 一个不公平的 8 面骰子的 entropy,其中骰子在 99% 的时间内落在某个面上,而在其余 1% 的时间内落在其他面上,概率相等(每个面约为 0.14%),是
−(0.99⋅log2(0.99)+∑i=170.0014⋅log2(0.0014))=0.10886668511648723 希望现在更直观地理解 entropy 代表不确定性。一个 8 面骰子的 entropy 比一枚硬币的 entropy 更高,因为我们对 8 面骰子的结果比对硬币的结果更不确定(8 个等可能的结果比仅 2 个等可能的结果更不确定)。但是,即使是一枚硬币,一个高度不公平的 8 面骰子也具有更低的 entropy,因为我们对不公平骰子的结果非常确定。现在我们有一个实际的方程来量化系统的不确定性(entropy)。
目前尚不清楚 entropy 的这个定义与无序、热量或时间有何关系,但 entropy 作为不确定性的这个概念对于理解宇宙的 entropy 至关重要,我们稍后将对此进行探讨。为了参考,entropy 的这个定义被称为 Shannon entropy。
我们现在将继续,但我建议进一步研究信息论。它对数据压缩、纠错、密码学甚至语言学都有许多重要的直接影响,并且几乎触及任何处理不确定性、信号或知识的领域。
物理 Entropy
现在我们将从一个非常不同的角度来看 entropy,即统计力学。我们从每个学生都被赋予的对 entropy 的尝试和真实的介绍开始。
盒子里的球
我将给你一个装有 10 个球的盒子,p0 到 p9,我们将计算盒子左侧和右侧有多少个球。假设每个球同样可能在任何一侧。我们立刻就可以看到,我们计算出所有的球都在盒子左侧的可能性很小,而每侧都有相等数量的球的可能性更大。这是为什么?
好吧,只有一种状态可以让我们计算出所有的球都在左侧,那就是每个球都在左侧(真是令人震惊,但请坚持下去)。但是,有很多方法可以使盒子保持平衡:我们可以让 p0 到 p4 在一侧,其余的在另一侧,或者让相同的组从左到右翻转,或者我们可以让所有偶数球在一侧,奇数球在另一侧,或者再次翻转,或者任何其他许多可能的组合。
这个盒子是一个我们可以测量 entropy 的系统,至少在我告诉你每一侧有多少个球时是这样。可能需要一段时间才能看到,但想象一下这个盒子,我们左右两侧的计数作为一个系统,结果将是找出盒子中所有单独的球的位置,类似于掷骰子并查看它落在哪个面上。
这意味着我们计算出所有球都在左侧的盒子只有一种可能的结果:所有的球都在左侧。我们将认为这个系统具有 0 entropy(没有预期的惊喜),因为我们已经知道我们将在哪里找到每个单独的球。
两侧平衡的盒子(每侧 5 个)有许多可能的等可能的结果,事实上,我们可以对其进行计数。组合学中一个著名的方程是 N-choose-k 方程,它精确地计算了这种情况。它告诉我们,我们有 252 种可能的方式可以在每侧放置 5 个球。该系统的 entropy 将为 −∑i=12521252⋅log2(1252)=log2(252)=7.9772799235。这与计算一个 252 面骰子的 entropy 相同。
如果我们增加球的数量,平衡盒子的 entropy 将会增加,因为会有更多的可能的组合可以构成一个平衡盒子。
我们应该将这些结果解释为:满足大规模测量(计算每一侧的球数)的方式越多,系统的 entropy 就越高。当所有的球都在左侧时,只有一种方法可以满足该测量,因此它具有较低的 entropy。当有很多方法可以在两侧平衡它时,它具有较高的 entropy。
在这里,我们看到 1000 个球在一个盒子里弹跳。它们都将从左侧开始,因此盒子将具有 0 entropy,但是一旦球开始向右移动并改变每一侧的计数,entropy 将会增加。
在统计力学中,大规模测量的正式术语是 宏观状态,而可以满足该测量的特定状态是 微观状态。我们将把盒子每一侧的球数的测量称为宏观状态,而单个球位置的不同组合称为微观状态。因此,重新表述上述内容:只有一种微观状态代表所有球都被计算在一侧的宏观状态,并且有许多微观状态代表平衡盒子的宏观状态。
但是,为什么我们决定测量左右两侧的球数?我们可以测量一个不同的宏观状态,entropy 会有所不同。
宏观状态
想象一下,我们不选择盒子的左右两侧来计算球数,而是计算盒子中每个像素中有多少个球。在这种情况下,entropy 几乎总是最大化,因为球很少共享一个像素。即使所有的球都在盒子的左侧,它们也可能仍然各自占据一个不同的像素,并且测量的 entropy 与球均匀分布在盒子中的情况相同。
如果我们使用昂贵的仪器来测量盒子并高精度地跟踪球,那么 entropy 很少会发生变化,并且会非常高。如果我们使用廉价的仪器,只能判断球是否在盒子的左侧或右侧,那么 entropy 会很低,并且如果某些球暂时最终落在盒子的同一侧,则很容易波动。
让我们再次运行完全相同的盒子中 1000 个球的模拟,仍然从左侧的球开始。但是,这次我们计算一个 50x50 网格中每个单元格中有多少个球,而不是之前的两个单元格(左侧和右侧单元格)。entropy 将很高,因为有很多微观状态代表一堆只有一个球的单元格,并且 entropy 不会发生太大变化,因为两个球很少共享同一个单元格。回想一下,如果两个球共享同一个单元格,则计数会增加,并且与每个单元格中只有一个球的两个单元格相比,满足计数为 2 的单元格的微观状态更少。
Entropy 并非物理系统本身固有的,而是与我们对它的描述有关——即,我们正在测量的宏观状态以及我们观察它的分辨率。
这种测量系统的较低分辨率版本(例如计算盒子左侧或右侧有多少个球)的过程称为 粗粒化。
我们如何选择/测量宏观状态,即我们如何对系统进行粗粒化,取决于我们正在解决的问题。
- 想象一下,你有一个气体盒子(就像我们盒子里的球一样,但规模是盒子里的 1025 个球),我们在盒子的左侧和右侧放置一个温度读取器。这给了我们宏观状态:两个计数,即盒子左右两侧的平均球速。然后,我们可以通过比较温度读取器相等的时间与它们相差 T 度的时间来计算 entropy。一旦我们了解了时间和 entropy 如何相互作用,我们将使用此模型来表明两个温度读取器预计会随着时间的推移收敛到相同的值。
- 想象一下,你对人群中许多不同的人的基因组进行测序,你可以根据你关心的事情选择许多不同的宏观状态。你可以计算所有序列中有多少个每种核苷酸,从而可以量化 DNA 中四个核苷酸的可变性。你可以通过计算在人群中该位置使用了多少个核苷酸类型来计算 DNA 序列中每个单独位置的 entropy,从而使你可以识别在个体中恒定或在个体中变化的 DNA 部分。
你选择测量宏观状态的方式可以采用多种形式,具体取决于你可以测量的内容和/或你关心测量的内容。
但是,一旦我们有了一个宏观状态,我们需要一种方法来识别所有微观状态并为其分配概率。
微观状态
当我们查看大小相等的单元格中球在盒子中的位置时,很容易看出每个球同样可能位于任何一个单元格中,因此每个微观状态同样可能。这使得 entropy 的计算非常简单,我们只需使用 (Shannon entropy) 的简化版本来发现,对于满足给定宏观状态的 W 微观状态,系统的 entropy 为 log2(W)。将这个想法扩展到不太可能出现的微观状态并不难。
例如,让我们计算一个盒子(左侧有 5 个球,右侧有 5 个球)的 entropy,但是我们将盒子中的一个球替换为一个会被磁铁拉到左侧的金属球。在这种情况下,每个微观状态的概率不再同样可能。如果我们假设金属球有 80% 的可能性位于左侧而不是右侧,则盒子的 entropy 可以计算如下:对于所有 252 个微观状态,其中 126 个微观状态的金属球位于左侧,这有 0.8 的概率为真,而另 126 个微观状态的金属球位于右侧,这有 0.2 的概率。这意味着使用 (Shannon entropy) 我们得到的 entropy 为
−∑i=11260.2126⋅log2(0.2126)−∑i=11260.8126⋅log2(0.8126)=7.69921
这比装有普通球的盒子的 7.9772799235 entropy 略小。这正是我们应该预期的,我们对这个系统的结果更加确定,因为我们知道其中一个球更有可能在哪里。
但这引发了一个微妙的问题:为什么我们选择这组特定的微观状态?例如,如果我们具有左侧 5 个球和右侧 5 个球的宏观状态,但是我们决定使用 50x50 网格的单元格来描述微观状态,那么与我们使用 2x1 网格的左右两侧相比,满足宏观状态的微观状态要多得多。
让我们计算一下这两个示例的 entropy。请记住,它们都具有相同的宏观状态:左侧 5 个球,右侧 5 个球。
- 如果我们选择使用在将盒子分成两半的两个单元格之间查看单个球的位置的微观状态,那么我们可以使用 n-choose-k 来计算出在两个单元格中可能有 252 种球的组合。这给了我们 log2(252)=7.977279923 的 entropy。
- 如果我们选择使用在将盒子分成网格的 50x50 (2500) 个单元格之间查看单个球的位置的微观状态,那么我们可以使用 n-choose-k 来计算出在盒子的两半中可能有 252 种球的组合,对于每种组合,每个球都可以在 50x25 (1250) 个单元格中的任何一个单元格中。这给了我们 log2(252∗125010)=110.8544037 的 entropy。
该结果与我们对 entropy 的信息论理解非常吻合:当我们允许更多的微观状态来表示相同的宏观状态时,我们对系统所处的微观状态更加不确定。但是,该结果确实引起了一些担忧。
如果不同的微观状态给出不同的 entropy,我们如何为我们的问题选择正确的微观状态?与宏观状态不同,使用哪些微观状态的决定不是由我们的仪器或问题的范围决定的,而必须由进行计算的人员决定。通常,对于物理系统,人们会使用捕获与宏观状态相关的所有相关信息的微观状态集。例如,如果我们的宏观状态是关于盒子左侧或右侧的球,那么我们可能不在乎球的速度或质量或其他任何东西,而只在乎球的位置。
另一个担忧是,如果相同的物理系统具有相同的宏观状态,但根据我们使用的微观状态表示形式而具有不同的 entropy,则感觉是错误的。通常,我们期望物理系统具有不变的测量值,而与我们决定用于测量的内部表示形式无关。但是,entropy 的情况并非如此。我们需要记住,entropy 是系统的不确定性,并且 entropy 的定义完全取决于我们对什么不确定,对于物理系统而言,这些都是微观状态。这类似于有人问“有多少个零件组成了这台机器?”,对此我们应该回答“你如何定义一个‘零件’?”。当我们问“这个宏观状态的 entropy 是多少?”时,我们需要回答“我们使用什么微观状态?”。
话虽如此,我们的直觉告诉我们的一些小事实是正确的,尽管它不适用于一般情况。虽然当我们改变微观状态时,系统的 entropy 会发生变化,但是 如果 新的微观状态统一地乘以旧的微观状态,则宏观状态之间的 entropy 的相对差异将相等。也就是说,如果每个原始微观状态都分为相同数量的精细微观状态,则每个宏观状态的 entropy 都会增加一个常数。我们迷失在术语中了,一个例子将演示这一点。
让我们再次拿出盒子中的 10 个球,我们将计算几个不同宏观状态和微观状态表示形式的系统的 entropy。我们用 (L, R)
表示盒子每一侧的球数,其中 L
是左侧的球数,R
是右侧的球数。然后,我们使用单元格的 2x1 网格(仅盒子的左右两侧)的微观状态和 50x50 网格的单元格来计算 entropy。
(10,0)| (9,1)| (8,2)| (7,3)| (6,4)| (5,5)| (4,6)| (3,7)| (2,8)| (1,9)| (0,10)
---|---|---|---|---|---|---|---|---|---|---
2x1| 0.00000| 3.32193| 5.49185| 6.90689| 7.71425| 7.97728| 7.71425| 6.90689| 5.49185| 3.32193| 0.00000
50x50| 102.87712| 106.19905| 108.36898| 109.78401| 110.59137| 110.85440| 110.59137| 109.78401| 108.36898| 106.19905| 102.87712
如果我们查看,我们会发现 50x50 网格微观状态值中的 entropy 只是 2x1 网格值加上一个常数。在两种情况下的相对 entropy 都是相同的。如果我们用数学方法显示如何计算 entropy,这会更加清楚。对于 2x1 网格,我们使用方程 log2((10L)),对于 50x50 网格,我们使用 log2(125010(10L))=log2(125010)+log2((10L))。从数学上我们可以看到,它与 2x1 网格的 entropy 相同,只是偏移了 log2(125010)。
你可以想象,如果我们沿着微观状态添加另一个维度,我们将再次将 entropy 增加一个常数。例如,如果 10 个球中的每一个都可以是 3 种颜色之一,那么微观状态的数量将增长 310 倍,因此整个系统的 entropy 将增加 log2(310)。
当我们使用彼此倍数的不同微观状态时,我们的直觉是正确的,但是如果微观状态不能如此整齐地彼此倍增,则该直觉会失败。一个简单的例子是,如果我们将盒子的左侧表示为一个单元格,而将右侧表示为一个 50x25 网格的单元格,则 entropy 看起来非常不同。以下是再次出现的表,但添加了我们的非均匀微观状态的行。我们如何计算宏观状态 (3,7) 的 entropy 的一个例子是:有 120 种等可能的方式可以将 3 个球放置在左侧,将 7 个球放置在右侧,但是右侧的球也可以处于 12507 种不同的状态,因此 entropy 为 log2(120⋅12507)=78.920877252。
(10,0)| (9,1)| (8,2)| (7,3)| (6,4)| (5,5)| (4,6)| (3,7)| (2,8)| (1,9)| (0,10)
---|---|---|---|---|---|---|---|---|---|---
2x1| 0.00000| 3.32193| 5.49185| 6.90689| 7.71425| 7.97728| 7.71425| 6.90689| 5.49185| 3.32193| 0.00000
50x50| 102.87712| 106.19905| 108.36898| 109.78401| 110.59137| 110.85440| 110.59137| 109.78401| 108.36898| 106.19905| 102.87712
mixed| 0.00000| 13.60964| 26.06728| 37.77003| 48.86510| 59.41584| 69.44052| 78.92088| 87.79355| 95.91134| 102.87712
一个有趣的注意事项是,当所有的球都在左侧时,entropy 为零,但是当所有的球都在右侧时,entropy 被最大化。同样,希望这能够从我们对 entropy 的理解中得到解释,entropy 衡量了相对于我们的微观状态的不确定性。如果我们知道所有的球都在左侧,那么我们知道它们必须在单个左侧单元格中,因此没有不确定性。如果我们知道球都在右侧,那么它们可能在 125010 个微观状态中的任何一个状态中,因此不确定性很高。
显然,在测量系统的 entropy 时,我们需要小心并了解我们正在选择哪些微观状态。幸运的是,对于大多数物理系统,我们使用标准的微观状态,即系统中球(粒子)的位置和动量的均匀网格。要使用的另一个标准微观状态是位置和动量的连续空间。
连续微观状态
到目前为止,我们已经研究了离散的微观状态集——例如单元格中的球。但是在物理系统中,微观状态通常是连续的:位置和动量可以在连续体上变化。我们如何在这种情况