随机性不是噪声,是搜索工具:玻尔兹曼、GPT 和统计学家说的是同一件事

2026-08-18 · Steve Chan

《从玻尔兹曼到辛顿》 第 5 节有一句话,是整篇文章里唯一一句 没有公式的结论:

随机性不是噪声,是搜索工具。

《GPT 是更高级的"万能谷歌搜索"》 讲的是另一条线: 关键词 → 向量 → 高维空间 → GPT,搜索每一代都在更高的维度上做。

这两篇文章看起来一篇讲物理,一篇讲检索。本文的主张是:它们是同一句话的两种说法。 顺便回答另外两个问题——物理世界里的"搜索"到底是什么, 以及为什么统计学家开口闭口都是"随机过程"。

三句话版本:

  1. 搜索 = 在一个大得没法穷举的状态空间里,生成候选 + 打分。 确定性算法只会走它已经索引过的路;随机性是唯一能生成"索引里没有的候选"的算子。
  2. 温度 \(T\) 是这两篇文章共用的那个旋钮。 \(T\to 0\) 是 grep / argmax / 贪心下降,\(T\to\infty\) 是白噪声, 有用的搜索发生在中间——而且最优温度不是常数,是一条下降的调度曲线。
  3. 统计学家不是在描述世界有多随机,他们是在造工具。 蒙特卡洛 1946 年被发明出来的第一天,随机性就是一个算法,不是一个误差项。

目录

  1. 那句话的原始语境:51% 和 98%
  2. 先把"搜索"定义清楚:状态空间、打分、提议
  3. 温度是唯一的旋钮:自由能把探索和利用写成了一行
  4. 把搜索进化史重排成一部温度史
  5. 随机性在检索栈里出现的四个位置
  6. 物理世界的搜索是什么
  7. 统计学家为什么满嘴随机过程
  8. 三条线合成一张表
  9. 边界:什么时候随机性没有用
  10. 运行 demo

1. 那句话的原始语境:51% 和 98%

先把那句话放回它的上下文。1982 年的 Hopfield 网络更新规则是确定性的:

\[s_i \leftarrow \operatorname{sign}(h_i), \qquad h_i = \sum_j w_{ij} s_j\]

它单调下山,所以必然停在某个局部极小上——可能是你存进去的记忆, 也可能是一个你从来没存过的"伪记忆"。1985 年辛顿和塞诺夫斯基改了一行:

\[s_i \leftarrow +1 \ \text{以概率}\ \sigma\!\left(\frac{2h_i}{T}\right)\]

允许上山。配上柯克帕特里克 1983 年的模拟退火(\(T\) 从高到低几何下降), 同一个能量地形、同一批随机初态,结果分成两半。 本文配套 demo(第 10 节,12 个自旋、200 个随机初态、全局最小 \(E=-15.1937\))跑出来是:

策略 命中全局最小 平均终态能量
贪心下降(\(T=0\)) 51.5% \(-13.3607\)
模拟退火(\(2.0 \to 0.05\)) 98.5% \(-15.1484\)

差的那 47 个百分点,全部由"允许做出让当前分数变差的一步"买来。 这就是那句话的全部内容:噪声在这里不是被容忍的,是被主动注入的, 而且注入量是一个需要调度的超参数。

2. 先把"搜索"定义清楚:状态空间、打分、提议

四篇文章讲的东西能接上,是因为它们的对象可以写成同一个四元组:

\[\big(\;\mathcal{X},\; E(\cdot),\; q(\cdot \mid \cdot),\; B\;\big)\]
  • \(\mathcal{X}\):状态空间。网页集合、向量库里的 \(10^9\) 个点、\(2^N\) 个自旋组态、 长度 \(T\) 的 token 序列(\(|\mathcal{V}|^T\) 个)、蛋白质的所有构象。
  • \(E(x)\):打分函数。物理里叫能量(越低越好),检索里叫相关性, 机器学习里叫损失,进化里叫适应度(差一个负号),RL 里叫奖励。
  • \(q(x' \mid x)\):提议分布。下一步从哪儿来。确定性算法的 \(q\) 是一个 \(\delta\) 函数。
  • \(B\):预算。你能做多少次打分。

有了这个写法,确定性搜索的失败模式只有三种,而且和随机性的关系各不相同:

失败模式 症状 随机性有没有用
组合爆炸 \(\lvert\mathcal{X}\rvert\) 大到不能枚举(\(2^{100}\)、\(50257^{2048}\)) 有用:采样是唯一能在 \(O(1)\) 空间里遍历的办法
局部极小 地形有高低,但贪心卡在半山腰 有用:这正是第 1 节那 47 个百分点
地形平坦 \(E\) 在提议分布下方差为 0 没用:见第 9 节,跑多久都是随机游走

\(\lvert\mathcal{X}\rvert\) 的量级值得停一下。GPT 生成一段 2048 token 的回答, 状态空间是 \(50257^{2048} \approx 10^{9628}\) 个序列。 可观测宇宙的原子数大约 \(10^{80}\)。 "从 \(10^{9628}\) 个序列里找一个好的"这件事,不可能用任何确定性的枚举完成。 它只能被采样。

3. 温度是唯一的旋钮:自由能把探索和利用写成了一行

玻尔兹曼分布

\[p(x) = \frac{e^{-E(x)/T}}{Z}, \qquad Z = \sum_{x'} e^{-E(x')/T}\]

的两个极限,正好是两代搜索:

\[T \to 0:\quad p \to \delta_{\arg\min E} \qquad\text{(grep、argmax、贪心、精确匹配)}\]
\[T \to \infty:\quad p \to \text{均匀分布} \qquad\text{(白噪声、随机猜)}\]

中间发生了什么,用自由能看最清楚。玻尔兹曼分布是下面这个泛函的唯一最小值点:

\[F[p] = \underbrace{\mathbb{E}_p[E]}_{\text{平均分数}} \;-\; T\underbrace{H[p]}_{\text{熵(保留了多少可能性)}}\]

这一行就是 exploration / exploitation 的完整定义。 \(T\) 是你愿意为"多保留一比特可能性"付出多少分数。 \(T=0\) 时熵一文不值,于是你把全部筹码压在当前最优上; \(T\) 很大时分数一文不值,于是你什么都不信。 所谓"调温度",从来不是在调噪声大小,是在调你给可能性定的价。

第 10 节的实验 C 扫了固定温度:

\(T\) 0.01 0.10 0.30 0.50 1.00 2.00 5.00
命中全局最小 50.0% 60.0% 73.5% 61.0% 38.5% 6.5% 1.0%

非单调。随机性是有剂量的药:太少跳不出局部极小,太多把已经找到的结构也一起融掉。 而且注意——任何固定温度(最好 73.5%)都打不过退火调度(98.5%)。 高温阶段负责找到正确的"盆地",低温阶段负责在盆地里定位。 这条经验在四个地方原封不动地复现:模拟退火的冷却调度、 学习率调度(warmup 后 cosine 衰减)、扩散模型的噪声调度、 以及 RL 训练里 rollout 温度从高到低的安排。

顺便,\(\sigma(2h_i/T)\) 里的 sigmoid 不是启发式,它是 \(e^{-E/T}/Z\) 在单个自旋上的精确条件分布; 推导见 《从玻尔兹曼到辛顿》 第 5.2 节。 关于 \(T\to 0\) 这个极限本身,还可以看 《高中觉得最玄乎的"极限",其实是大模型"从犹豫到笃定"的那个旋钮》。

4. 把搜索进化史重排成一部温度史

《GPT 是更高级的"万能谷歌搜索"》 里那张四代表, 按"相似度怎么算"排。换成按温度排,会看到一件被表格藏住的事: 四代进化的实质,是把打分函数从阶跃函数一路软化成连续可微的, 从而让温度这个旋钮第一次有意义。

代际 打分函数 \(E\) 有效温度 地形长什么样
1. 关键词倒排 命中/不命中(0-1 阶跃) \(T=0\) 一片平原 + 若干根针,梯度处处为 0
2. 向量检索 \(-\langle q, d\rangle\)(连续) \(T=0\)(仍取 top-k) 有坡度了,但只在检索这一步用
3. 高维 embedding + ANN 学出来的距离 \(T=0\),但索引构建用随机 坡度是学出来的(见第 5 节)
4. GPT logits(每层每个位置都有) 每层 \(T=1\),解码 \(T\) 可调 一个有 \(10^{9628}\) 个点的离散空间,被软化成处处可微

第 4 代那一行有两个 \(T\),值得拆开:

(a)注意力里的 \(T\)。 attention 的核心是

\[\operatorname{softmax}\!\left(\frac{QK^{\mathsf T}}{\sqrt{d_k}}\right) V\]

那个 \(\sqrt{d_k}\) 就是温度。Vaswani 等人在论文脚注里给的理由是: \(d_k\) 大时点积的方差随 \(d_k\) 增长,softmax 会被推进饱和区、梯度趋近 0—— 用能量的语言说就是温度太低,分布冻结成 one-hot,检索退化成硬查表。 除以 \(\sqrt{d_k}\) 是在升温,把它调回一个"软"的区间。 所以 《GPT 是更高级的"万能谷歌搜索"》 里 "softmax 是 WHERE 子句的软化版"这个说法,可以说得更硬一点: attention 是一次 \(T=1\) 的玻尔兹曼加权检索,权重就是 \(e^{-E/T}/Z\), 其中 \(E = -q\cdot k/\sqrt{d_k}\)。第 1 代的 WHERE 是 \(T=0\) 的同一个式子。

(b)解码里的 \(T\)。 p = softmax(logits / T) 加上 top-k / top-p, 是在 \(10^{9628}\) 个序列上做的一次逐位置的退火搜索。 \(T\to 0\) 就是 greedy decoding——于是复读、"The the the"、模式坍缩; \(T\) 太大就是胡说。幻觉和创造力是同一个旋钮的两侧,不是两个问题。 这也解释了为什么 beam search 在开放式生成上反而不好:它是低温 + 宽搜, 搜到的是"平均意义上最安全"的那条路,正好是分布的众数而不是典型样本。

5. 随机性在检索栈里出现的四个位置

一个容易被忽略的事实:在 GPT 出现之前,随机性早就是检索工程的主力, 只是它藏在索引构建里,不在查询里。

位置 做法 随机性在干什么
索引 LSH(Indyk–Motwani 1998):随机超平面做哈希 用随机投影换维度——JL 引理保证 \(O(\log n / \epsilon^2)\) 维就能保距离
索引 HNSW / NSW:图里加随机长边 造小世界图,让贪心游走能跨盆地;这就是图上的退火
训练 word2vec / 对比学习的负采样 用随机负例近似那个算不动的 \(Z\)(见第 7 节)
训练 dropout、mini-batch SGD 在参数空间里搜索,噪声推着解离开尖锐极小

第二行值得说透。HNSW 的查询是贪心的:从入口点出发,每步走向离 query 更近的邻居。 纯贪心在近邻图上会卡死在局部最优——解法不是给查询加噪声, 而是在建图时随机地插入长程边。 换句话说:随机性可以加在提议分布里(退火),也可以预先烧进地形的连通结构里(小世界图)。 两者是等价的补救,针对的是同一个病。

第四行则说明:GPT 的训练和推理都是搜索,只是搜索空间不同。 SGD 在参数空间 \(\mathbb{R}^{|\theta|}\) 里搜,mini-batch 的采样噪声是它的温度 (\(\text{噪声} \propto \eta / \sqrt{B}\),所以学习率和 batch size 一起决定"温度"); 解码在序列空间里搜;RL 的 rollout 在策略空间里搜。 三层都靠采样,三层都有温度调度。

6. 物理世界的搜索是什么

现在回答那个最直接的问题。

物理世界的搜索 = 系统在能量地形上的热弛豫。 它的"查询"是初始条件,"索引"是能量函数 \(E\)(由相互作用决定), "提议分布"是热运动,"接受准则"是玻尔兹曼因子,"预算"是时间。

但这里要立刻打一个补丁,否则整个类比会变成神秘主义: 物理系统并不在优化任何东西,它只是在弛豫。 "搜索"是我们对这个过程的算法学翻译。 不过这个翻译是双向可编译的,而且历史上就是反着走的: 模拟退火(Kirkpatrick 1983)是照抄冶金学的退火工艺写出来的算法, Metropolis 判据(1953)本来是为了算硬球流体的状态方程。 先有物理,后有算法。

几个具体例子:

(1)化学反应速率。 阿伦尼乌斯公式

\[k = A\,e^{-E_a/RT}\]

和 Metropolis 接受率 \(\min(1, e^{-\Delta E/T})\) 是同一个函数形式。 反应物越过势垒,靠的就是热涨落——温度不够,反应"搜索"不到过渡态。 加热催化反应,和调高采样温度跳出局部极小,是同一件事的两个词汇表。

(2)蛋白质折叠:莱文塔尔悖论。 一条 100 残基的链,每个残基的二面角哪怕只取 3 种构象, 状态空间也有 \(3^{100} \approx 5\times 10^{47}\)。 每次构象转换按 \(10^{-13}\) 秒算,穷举需要 \(5\times 10^{34}\) 秒; 宇宙年龄才 \(4\times 10^{17}\) 秒。可实际折叠只要微秒到秒。 莱文塔尔 1969 年提出这个悖论时,答案在 1990 年代才成型: 能量地形不是平的,是一个漏斗(Bryngelson–Wolynes 的"最小挫败原理")。 漏斗提供坡度,热运动提供跨越小势垒的能力,两者缺一不可。 这正好是第 2 节那张失败模式表的物理版:光有随机性不够,地形必须有结构。

(3)结晶 vs 玻璃。 慢冷 → 单晶(全局最小);急冷(淬火)→ 玻璃(冻结在局部极小)。 这是"退火调度"这个词的字面来源,也是第 3 节那张温度扫描表的物理原版。 自旋玻璃里"很多个亚稳态、系统再也走不出去"的现象叫遍历性破缺—— Parisi 因为搞清楚这件事拿了 2021 年诺贝尔物理学奖。 用检索的语言说:遍历性破缺 = 你的采样器再也访问不到某些区域了, 于是时间平均不再等于空间平均,估计有偏。

(4)进化。 突变 = 提议分布,选择 = 接受准则,适应度 = \(-E\)。 "地形"这个词就是从 Sewall Wright 1932 年的 fitness landscape 来的, 比模拟退火早半个世纪。而且进化里也有温度上限: 艾根的错误阈值(error threshold)——突变率一旦超过临界值, 基因组信息会被"融化"掉,种群解体成随机序列(error catastrophe)。 这和 \(T=5\) 时命中率掉到 1.0%、和高温解码的胡言乱语,是同一条曲线的同一端。

(5)量子力学:对所有路径求和。 费曼路径积分说,粒子的振幅是所有路径的加权和 \(\sum_{\text{paths}} e^{iS/\hbar}\)。 做一次 Wick 转动(\(t \to -i\tau\)),它就变成配分函数 \(\sum e^{-S_E/\hbar}\)—— 和 \(\sum e^{-E/kT}\) 一模一样,\(\hbar\) 站在温度的位置上。 经典极限 \(\hbar \to 0\) 给出最小作用量原理,也就是零温、贪心、唯一一条路。 "物理世界在搜索"这个说法,在量子层面是字面成立的: 它确实对所有候选路径都做了打分求和,只是相位相消掉了绝大多数。

(6)大脑。 神经元的放电本身就是随机的,突触释放是概率性的。 辛顿 1985 年那条学习律之所以在当年被认为"生物上可实现", 一部分原因就是它只需要局部相关 \(\langle s_i s_j\rangle\) 加上随机采样, 而反向传播需要一套并不存在的反向通路。 RL 里的 Boltzmann exploration(\(\pi(a) \propto e^{Q(a)/T}\)) 则是把这套东西直接写成了策略。

7. 统计学家为什么满嘴随机过程

因为随机过程是他们的算法,不是他们的世界观。 这里有一个长期的语义误会:工程师听到"随机"想到的是误差、抖动、要被消除的东西; 统计学家说"随机过程"时,多半是在说一个他自己构造出来的、有已知稳态分布的对象。

理由一:高维积分没有确定性解法。 这不是懒,是定理。确定性求积在 \(d\) 维上的误差是 \(O(N^{-r/d})\), 指数里有 \(d\);蒙特卡洛是 \(O(\sigma/\sqrt{N})\),和 \(d\) 无关。 第 10 节实验 A 的真实输出(固定 \(10^6\) 次函数求值):

\(d\) 每维格点 \(n\) 网格相对误差 MC 相对误差
1 1000000 \(3.0\times10^{-14}\) \(9.6\times10^{-5}\)
3 99 \(9.0\times10^{-6}\) \(2.3\times10^{-4}\)
5 15 \(6.6\times10^{-4}\) \(3.9\times10^{-4}\)
10 3 \(3.4\times10^{-2}\) \(3.7\times10^{-4}\)
20 1 \(8.6\times10^{-1}\) \(4.8\times10^{-4}\)

低维网格碾压蒙特卡洛(\(d=1\) 时好 9 个数量级),\(d=5\) 附近交叉, \(d=20\) 时网格法每维只剩 1 个点、误差 86%,而蒙特卡洛的误差纹丝不动。 这张表就是"随机性是搜索工具"的定量证明: 在高维空间里,随机采样不是精度上的妥协,它是唯一还在工作的方法。 而 GPT 的每一个期望、每一个 \(Z\)、每一次 RL 的 advantage,都活在几千维以上。

理由二:\(Z\) 算不动,所以只能采样。 玻尔兹曼机死在 \(Z = \sum_s e^{-E(s)}\) 上(\(2^N\) 项); 贝叶斯死在证据 \(p(D) = \int p(D\mid\theta)p(\theta)\,d\theta\) 上; 对比学习死在全库负例上。三者是同一个积分。 解法也是同一个:造一条随机过程,让它的稳态分布正好是你要的分布,然后让它跑。 这就是 MCMC:给定目标 \(\pi\),构造转移核 \(P\) 满足细致平衡

\[\pi(x)\,P(x \to x') = \pi(x')\,P(x' \to x)\]

Metropolis–Hastings 的接受率 \(\min\!\left(1, \frac{\pi(x')q(x\mid x')}{\pi(x)q(x'\mid x)}\right)\) 就是解这个方程解出来的。注意这里的因果方向:不是"世界是随机的所以要用概率描述", 而是"我要算一个积分,所以我设计了一个随机过程"。

理由三:遍历定理是"游走可以代替穷举"的定理形式。 时间平均 = 空间平均:

\[\lim_{K\to\infty} \frac{1}{K}\sum_{k=1}^{K} f(x_k) = \mathbb{E}_{\pi}[f]\]

第 10 节实验 D 是它的数值版:12 个自旋、\(T=1\), 穷举 4096 个状态算出 \(\langle E\rangle = -13.8168\); 一条跑了 20000 sweep 的 Gibbs 链给出 \(-13.8394\),绝对误差 0.0226; 所有 \(\langle s_i s_j\rangle\) 的平均绝对误差 0.0048。 这里的关键不是"采样也能算对",而是采样的代价与 \(2^N\) 无关。 \(N=12\) 时穷举更划算;\(N=500\) 时穷举需要 \(10^{150}\) 次, 而 Gibbs 链还是 \(20000\times 500\) 次单点更新。玻尔兹曼机学习律里的负相 \(\langle s_i s_j\rangle_{\text{model}}\) 就是靠这个估的, CD-1 更进一步:只跑一步。

理由四:随机性还兼职做正则化。 bootstrap 是在"可能的数据集"空间里搜索;dropout 是在子网络空间里搜索; mini-batch 噪声偏好平坦极小(Hochreiter–Schmidhuber 1997 就在讲这件事)。 扩散模型把这件事做到了极致:前向加噪 = 升温到 \(T=\infty\), 反向去噪 = 一次退火,Song–Ermon 的 annealed Langevin dynamics 连名字都没改。

所以"统计学家嘴上总说着随机过程",翻译过来是: 他手上大部分问题都是高维空间里的求和,而随机过程是他唯一算得动的求和方式。

一张分野表,区分两种完全不同的"随机":

噪声观(工程师的默认) 算法观(本文的主题)
随机来自 测量误差、外部扰动 我自己注入的
数学位置 模型里的 \(\epsilon\) 提议分布 \(q\)、转移核 \(P\)
目标 消除、滤掉、求均值 调度它、控制它的剂量
典型例子 高斯白噪声、传感器抖动 MCMC、退火、dropout、rollout 采样、扩散
多了会怎样 精度下降 错误阈值 / 幻觉 / 模式融化
少了会怎样 更好 卡在局部极小,51.5%

8. 三条线合成一张表

概念 物理 算法 / GPT 统计
状态空间 相空间、构象空间 token 序列、参数、向量库 样本空间 \(\Omega\)
打分 能量 \(E\) / 作用量 \(S\) 损失、logits、相关性 负对数似然
分布 \(e^{-E/kT}/Z\) \(\operatorname{softmax}(\ell/T)\) 吉布斯测度、后验
归一化 配分函数 \(Z\) 词表上求和(\(O(V)\)) 证据 \(p(D)\)
随机的角色 热涨落 采样解码、SGD 噪声、rollout 提议分布、MCMC
温度 \(kT\) temperature、\(\sqrt{d_k}\)、\(\eta/\sqrt{B}\) 退火重要性采样的 \(\beta\)
调度 慢冷 vs 淬火 LR schedule、噪声 schedule 模拟退火、并行回火
零温极限 基态、最小作用量 argmax、greedy decode、grep MAP 估计
高温灾难 熔化、error catastrophe 幻觉、胡言乱语 采样器不收敛
卡住 遍历性破缺、玻璃态 局部极小、模式坍缩 链混合太慢

同一列的三个词,指的是同一个数学对象。 玻尔兹曼机学习律里的负相是 Gibbs 采样,Gibbs 采样是 MCMC, MCMC 是物理弛豫的离散化。 这不是类比,是同一个式子被三个学科各命名了一次。

9. 边界:什么时候随机性没有用

必须写清楚这一条,否则"加点随机性"会变成一句万金油。

随机性只在地形有结构时有用。 《从玻尔兹曼到辛顿》 第 8.3 节记了一次失败:MBPP 的 RL 跑了 415 步、16.7 小时,reward 恒为 0。 原因是二值奖励下 8B base 的 pass@k \(\approx 0\),于是所有 rollout 的 advantage \(A^{(k)} = r^{(k)} - \bar{r} \equiv 0\),梯度恒等于零——不是小,是零。

\[\text{若 } \operatorname{Var}_{y\sim\pi}\big[r(y)\big] = 0 \quad\Longrightarrow\quad \nabla_\theta J \equiv 0\]

地形是完全平的。平面上的退火,跑多久都是随机游走。 解法不是提高采样温度(那只会更慢地随机游走),而是把平面改造成阶梯: 把二值奖励拆成"有没有 tag / JSON 合不合法 / 函数名对不对 / 参数匹配了几成"的分档。

于是有一个很实用的判据,在决定"加随机"还是"改设计"之前先算一下:

在你的提议分布下采 \(K\) 个候选,看打分的方差。 方差 \(=0\) → 改打分函数(造坡度),加噪声没用。 方差 \(>0\) 但候选高度相关 → 改提议分布(增大步长 / 加长程边)。 方差大且候选多样,但结果不稳 → 这才是调温度和调度的场合。

第二条边界:温度过高会毁掉已经找到的结构(\(T=5\) → 1.0%)。 第三条:采样只在链能混合时才无偏——遍历性破缺时, 你的估计会稳定地收敛到一个错误的值,而且看不出来。 RLHF 里的模式坍缩、long-context 下的注意力退化,都属于这一类。

10. 运行 demo

python scripts/randomness_as_search_demo.py

只依赖 numpy,约 30 秒跑完,全部数字以 ASCII 打印。本文引用的所有数值都来自它的输出:

A. 固定 1e6 次函数求值:网格 vs 蒙特卡洛
     d     每维格点 n       网格实际点数       网格相对误差      MC 相对误差     MC 标准差
     1    1000000      1000000     2.96e-14     9.55e-05   4.00e-05
     2       1000      1000000     5.91e-08     9.81e-05   1.08e-04
     3         99       970299     9.04e-06     2.32e-04   2.03e-04
     5         15       759375     6.57e-04     3.85e-04   2.34e-04
    10          3        59049     3.35e-02     3.72e-04   1.96e-04
    20          1            1     8.56e-01     4.79e-04   3.77e-04

B. 同一地形(12 自旋,全局最小 E = -15.1937),200 个随机初态
   策略                           命中全局最小         平均终态能量       最好终态
   贪心下降(T=0)                    51.5%       -13.3607   -15.1937
   模拟退火(2.0→0.05)               98.5%       -15.1484   -15.1937

C. 固定温度扫描:随机性有最优剂量
        T       命中全局最小         平均终态能量
     0.01       50.0%       -13.4712
     0.10       60.0%       -13.8494
     0.30       73.5%       -15.0144
     0.50       61.0%       -14.9832
     1.00       38.5%       -13.7331
     2.00        6.5%        -9.9526
     5.00        1.0%        -4.3925

D. T=1.0 下的期望:穷举 4096 个状态 vs 一条跑了 20000 sweep 的 Gibbs 链
   <E>      精确  -13.8168   采样  -13.8394   绝对误差 0.0226
   <s_i s_j>  最大绝对误差 0.0123   平均绝对误差 0.0048
   代价对比:穷举 4096 次能量计算 vs 采样 240000 次单点更新

四个实验分别对应本文的四条主张:

  • A → 高维空间里,随机采样不是妥协,是唯一还在工作的方法(第 7 节)。
  • B → 允许上山,命中率从 51.5% 到 98.5%(第 1 节)。
  • C → 随机性有最优剂量,而且调度打得过任何固定值(第 3 节)。
  • D → 一条随机过程可以替代 \(2^N\) 的穷举(第 7 节)。

C 里有一个实现细节值得说明:固定温度那一栏是跑完 60 sweep 后直接读终态, 没有淬火。所以高温行读到的其实是热涨落中的一个样本,不是那个温度下的"最好结果"—— 这恰恰是解码时 temperature=1.2 会发生的事:你拿到的是一个典型样本,不是众数。


小结

回到开头那三个问题。

「随机性不是噪声,是搜索工具」怎么理解? 把搜索写成 \((\mathcal{X}, E, q, B)\) 之后,确定性算法的 \(q\) 是 \(\delta\) 函数—— 它只能沿着已知的坡走,因此必然停在第一个局部极小。 随机性是候选生成器:它是唯一能产出"当前分数更差、但可能通向更好盆地"的那类候选的算子。 第 1 节的 51.5% → 98.5% 就是这句话的价格标签。

和"GPT 是更高级的搜索"什么关系? 是同一条线的两段。搜索四代进化的实质,是把打分函数从 0-1 阶跃软化成处处可微, 从而让温度这个旋钮第一次有意义。 attention 是 \(T=1\) 的玻尔兹曼加权检索(\(\sqrt{d_k}\) 就是那个温度), 解码是序列空间上的退火,SGD 是参数空间上的退火。 GPT 不只是"在更高维度上搜索",它是"在更高维度上做玻尔兹曼搜索"。

物理世界对应的搜索是什么? 热运动在能量地形上的弛豫:查询是初条件,索引是相互作用,温度是预算的分配方式。 化学反应越过势垒、蛋白质在 \(10^{47}\) 个构象里微秒级折叠、 金属慢冷成单晶、物种在适应度地形上爬坡、 乃至路径积分对所有路径求和——都是同一台机器。 而且方向是从物理流向算法的:模拟退火是抄冶金学的。

统计学家为什么满嘴随机过程? 因为他手上的问题基本都是高维求和,而 \(d=20\) 时确定性网格每维只剩一个点。 他说的"随机过程"通常不是在描述世界的不确定,而是他造出来的一台积分机: 构造一个稳态分布正好是目标分布的马尔可夫链,让它跑,用时间平均换空间平均。 从 1946 年乌拉姆算纸牌胜率、1953 年 Metropolis 算硬球状态方程那天起, 随机性在这一行里就一直是算法,从来不是误差。

一句话:搜索 = 生成候选 + 打分。随机性负责前一半,地形负责后一半。 两边都不能塌。