5D Library › 行动的经典与统计力学 · English

第三章 双势阱与克莱默斯逃逸率

两个山谷

想象一条起伏的地形线,有两个山谷,中间隔着一道山脊。一颗小球停在左边山谷底部,周围不断有随机的晃动。大多数晃动只让小球在谷底附近抖动;偶尔,一连串恰好同方向的晃动把它推上山脊,它就滚进右边的山谷。化学反应、蛋白质折叠、磁畴翻转、种群在两种状态之间的切换,都可以用这种图景描述。

本章把它借来描述习惯:左边的山谷是一个熟悉、省力的旧习惯,右边的山谷是一个更好的新习惯,山脊是从旧到新必须付出的「活化能」。这仍然是简化模型:人的行为状态不是一维坐标,也没有可以测量的「势能」。模型的价值在于它给出一个定量的、可以讨论的关系:等待时间如何依赖于山脊的高度和晃动的强度。

双势阱与过阻尼朗之万方程

推导

最简单的双势阱是

U(x)=ax4−bx2(a,b>0),U(x) = a x^4 – b x^2 \quad (a, b > 0),

两个极小值在 x=±b/2ax = \pm\sqrt{b/2a},中间的极大值(势垒顶)在 x=0x = 0,势垒高度 ΔU=b2/4a\Delta U = b^2/4a。若运动受强摩擦支配(过阻尼),状态随时间的变化由过阻尼朗之万方程描述:

dx=−U′(x)dt+2DdW,\mathrm{d}x = -U'(x)\,\mathrm{d}t + \sqrt{2D}\,\mathrm{d}W,

右边第一项是势能的「下坡力」,第二项是强度为 DD 的随机扰动(在物理中 DD 对应温度 kBTk_B T)。

证据

阿伦尼乌斯在 1889 年从实验总结出反应速率随温度呈指数变化 (Arrhenius 1889)。克莱默斯在 1940 年从布朗运动出发推导出越过势垒的速率;在过阻尼极限下,

r=U″(xmin)|U″(xmax)|2πe−ΔU/D,r = \frac{\sqrt{U''(x_{\min})\,|U''(x_{\max})|}}{2\pi}\, e^{-\Delta U / D},

平均等待时间约为 τ=1/r∝eΔU/D\tau = 1/r \propto e^{\Delta U/D} (Kramers 1940)。这一结果在势垒远高于噪声(ΔU/D≫1\Delta U/D \gg 1)时成立,五十年间被大量实验和数值研究检验和推广 (Hänggi et al. 1990)。

模拟与公式对照

推导

取 a=1/4a = 1/4、b=1/2b = 1/2,两个谷底在 x=±1x = \pm 1,势垒高度 0.25。程序让小球从左谷底出发,记录它到达右谷底所需的时间,每种噪声强度重复 100 次,与克莱默斯公式比较。

# Overdamped Langevin motion in the double well U(x) = a x^4 - b x^2  (a = 1/4, b = 1/2):
#   dx = -U'(x) dt + sqrt(2 D) dW
# Wells at x = -1 and x = +1, barrier at x = 0 of height dU = b^2 / (4a) = 0.25.
# Kramers (1940), overdamped limit: escape rate r = sqrt(U''(well) |U''(barrier)|) / (2 pi) * exp(-dU / D).
# Simplified model; "noise" D stands for the everyday fluctuations that occasionally push a state over.
import math, random
random.seed(7)
A, B = 0.25, 0.5
DU = B * B / (4 * A)
U2_WELL, U2_TOP = 4 * B, 2 * B                  # U'' at the wells and |U''| at the barrier: 2 and 1
DT = 0.01

def force(x):
    return -(4 * A * x ** 3 - 2 * B * x)

def mean_escape_time(D, n=100):
    s = math.sqrt(2 * D * DT)
    total = 0.0
    for _ in range(n):
        x, t = -1.0, 0.0
        while x < 1.0:                    # from the bottom of one well to the bottom of the other
            x += force(x) * DT + s * random.gauss(0, 1)
            t += DT
        total += t
    return total / n

print("noise D   dU/D   simulated mean time   Kramers 1/r   ratio")
for D in (1 / 16, 1 / 20, 1 / 24):
    sim = mean_escape_time(D)
    kr = 2 * math.pi / math.sqrt(U2_WELL * U2_TOP) * math.exp(DU / D)
    print(f"{D:7.4f}   {DU / D:4.1f}   {sim:19.0f}   {kr:11.0f}   {sim / kr:5.2f}")
print("Kramers is the leading term for large dU/D; the simulation also includes the slide into the far well")
print("each +1 in dU/D multiplies the waiting time by e = 2.7")
# noise D   dU/D   simulated mean time   Kramers 1/r   ratio
#  0.0625    4.0                   274           243    1.13
#  0.0500    5.0                   752           659    1.14
#  0.0417    6.0                  2080          1792    1.16
# Kramers is the leading term for large dU/D; the simulation also includes the slide into the far well
# each +1 in dU/D multiplies the waiting time by e = 2.7

模拟得到的平均时间比克莱默斯公式高约 15%,这在预料之中:公式是 ΔU/D\Delta U/D 很大时的首项近似,而模拟还包括了越过山脊后滑进右谷底的时间。重要的是比例关系:ΔU/D\Delta U/D 每增加 1,等待时间就乘以约 2.7(自然常数 ee)。从 4 到 6,等待时间增加了七倍以上。等待时间对势垒高度与噪声之比极其敏感,这是本章其余部分的出发点。

两种缩短等待的办法

等待时间 τ∝eΔU/D\tau \propto e^{\Delta U/D} 给出两条路:降低势垒 ΔU\Delta U,或者给整个地形施加一个倾斜。

  • 降低势垒对应把改变拆成很小的步骤:每一步需要的「活化能」都很小。
  • 施加倾斜对应一个持续的外部拉力:U(x)−FxU(x) – Fx。同伴的期待、与他人的约定、固定的展示日期,都可以看作把地形朝新习惯一侧倾斜的力。

推导

让旧习惯(左谷)略深一些,取噪声 D=0.025D = 0.025,使基线的 ΔU/D\Delta U/D 约为 11。程序计算各种干预下离开旧谷的等待时间,以及到达新谷之后「复发」回旧谷的等待时间。

# Two ways to shorten the Kramers waiting time tau ~ exp(dU / D) for leaving the old well:
#   (1) lower the barrier (break the change into small steps that each need little activation);
#   (2) tilt the landscape with a steady outside pull F (a partner, a commitment), U(x) - F x.
# Old habit = left well (made slightly deeper by c), new habit = right well. Simplified model.
import math
A, B, C, D = 0.25, 0.5, 0.03, 0.025

def landscape(b, F):
    U = lambda x: A * x ** 4 - b * x ** 2 + (C - F) * x
    dU = lambda x: 4 * A * x ** 3 - 2 * b * x + (C - F)
    d2U = lambda x: 12 * A * x ** 2 - 2 * b
    roots = []
    for x0 in (-1.5, 0.0, 1.5):                 # Newton from three starting points
        x = x0
        for _ in range(60):
            x -= dU(x) / d2U(x)
        roots.append(x)
    left, top, right = sorted(roots)
    if abs(top - left) < 1e-6 or abs(right - top) < 1e-6:
        return None                              # the barrier has vanished: no waiting at all
    pref = lambda w: 2 * math.pi / math.sqrt(d2U(w) * abs(d2U(top)))
    tau_go = pref(left) * math.exp((U(top) - U(left)) / D)
    tau_back = pref(right) * math.exp((U(top) - U(right)) / D)
    return U(top) - U(left), tau_go, tau_back

base = landscape(B, 0.0)
print(f"baseline: barrier {base[0]:.3f}, dU/D = {base[0] / D:.1f}, waiting time {base[1]:.2e}, relapse time {base[2]:.1e}")
cases = [("barrier lowered by a quarter", B * math.sqrt(0.75), 0.0),
         ("barrier halved", B * math.sqrt(0.5), 0.0),
         ("steady pull F = 0.05", B, 0.05),
         ("steady pull F = 0.10", B, 0.10),
         ("barrier halved + pull F = 0.05", B * math.sqrt(0.5), 0.05)]
for label, b, F in cases:
    r = landscape(b, F)
    print(f"{label:31s} barrier {r[0]:.3f}  waiting time {r[1]:.2e}  ({base[1] / r[1]:8.0f}x shorter)"
          f"  relapse time {r[2]:.1e}")
print(f"pull removed after the switch: relapse time back to {base[2]:.1e} (the tilt must persist to hold)")
# baseline: barrier 0.281, dU/D = 11.2, waiting time 3.27e+05, relapse time 3.1e+04
# barrier lowered by a quarter    barrier 0.216  waiting time 2.85e+04  (      11x shorter)  relapse time 3.2e+03
# barrier halved                  barrier 0.151  waiting time 2.57e+03  (     127x shorter)  relapse time 3.7e+02
# steady pull F = 0.05            barrier 0.230  waiting time 4.52e+04  (       7x shorter)  relapse time 2.2e+05
# steady pull F = 0.10            barrier 0.184  waiting time 7.37e+03  (      44x shorter)  relapse time 1.8e+06
# barrier halved + pull F = 0.05  barrier 0.109  waiting time 4.98e+02  (     657x shorter)  relapse time 1.8e+03
# pull removed after the switch: relapse time back to 3.1e+04 (the tilt must persist to hold)
三种地形。蓝:基线,旧习惯在左,略深;金:势垒高度减半(把改变拆成小步);红:持续外力 F = 0.10 使地形向右倾斜。

结果有三点值得注意。

第一,在这个参数下,把势垒减半使等待时间缩短约 127 倍,减半加上一个小的持续拉力缩短约 657 倍,也就是两到三个数量级。原先的设想说干预能使逃逸时间「缩短数个数量级」,在模型中是成立的,但前提是 ΔU/D\Delta U/D 很大;在人身上,我们无法测量 ΔU/D\Delta U/D,所以「几个数量级」只是模型的说法,不是对任何人的预测。

第二,只降低势垒,复发也同样变容易了。势垒是双向的:把山脊削低,从新谷回到旧谷的路也变短了。表中「势垒减半」一行,复发时间从约 3 万降到几百。拆小步能帮人开始,但不能帮人留住。

第三,倾斜同时缩短出发时间、延长复发时间:持续拉力 F = 0.10 使复发时间增加到约 180 万。但最后一行说明,一旦把拉力撤掉,复发时间就回到基线水平。在这个模型里,外部拉力必须持续存在,新状态才稳得住,除非地形本身发生了改变(第四章)。

证据怎么说

证据

「降低启动门槛」一类的干预有较好的证据。执行意图(「当情境 X 出现时,我就做 Y」)的元分析显示,它对目标达成有中到大的效应,d 约为 0.65 (Gollwitzer and Sheeran 2006)。习惯研究则显示,在稳定情境中反复执行一个简单行为,自动化程度随练习次数逐渐上升并趋于平台;一项在真实生活中追踪 96 名志愿者的研究里,曲线拟合良好的 39 人达到平台 95% 所需的时间中位数为 66 天,个体之间从 18 天到 254 天不等 (Lally et al. 2010; Wood and Rünger 2016)。

证据

「外部拉力」一类的证据更复杂。一项同时比较 54 种提升健身房到访次数干预的大型研究发现,许多干预在干预期内有小到中等的效果,但效果大多不大,而且干预结束后能否持续,证据很弱 (Milkman et al. 2021)。这与模型第三点的提示一致:拉力撤掉后,复发的速度会回到原来的水平。

注

「微习惯」「两分钟法则」这类流行做法,目前缺少直接比较不同步长的随机对照试验。本书把它们视为「降低势垒」的一种实现,并在下面写成假说。

假说 · 尚未验证

尚未确立。 模型预测,「只降低势垒」与「降低势垒加持续外部拉力」两种方案,在启动阶段的差别不大,但在撤掉支持之后的复发率上差别明显:只降低势垒的一组复发更快。可以在一项三臂随机试验中检验:A 组常规目标设定;B 组把目标拆成两分钟以内的小步;C 组在 B 的基础上每周向一位同伴报告。主要结局为干预结束后第 4 至 8 周仍维持该行为的比例。如果 C 组与 B 组在干预后的维持率上没有差别,或 B 组的维持率不低于 A 组,模型的这一预测就被推翻。

类比的限度

物理中的噪声是没有方向的热运动;人的生活中的「扰动」——一次旅行、一场病、一位新朋友——常常有方向,也会改变地形本身。物理中的势垒高度是确定的;人的「势垒」受情绪、疲劳、环境的影响,每天都不同。最重要的是,物理中的小球不会自己决定去哪个山谷,而人会:意图、价值与计划都是这个一维模型没有包含的变量。这个模型的用处是提醒一种关系:等待时间对势垒与扰动之比是指数敏感的,所以小的结构性改变可能比加倍的意志努力更有效;它不能告诉任何人他的势垒有多高。

参考文献

Arrhenius, Svante. 1889. “Über Die Reaktionsgeschwindigkeit Bei Der Inversion von Rohrzucker Durch säuren.” Zeitschrift für Physikalische Chemie 4: 226–48.
Gollwitzer, Peter M., and Paschal Sheeran. 2006. “Implementation Intentions and Goal Achievement: A Meta-Analysis of Effects and Processes.” Advances in Experimental Social Psychology 38: 69–119.
Hänggi, Peter, Peter Talkner, and Michal Borkovec. 1990. “Reaction-Rate Theory: Fifty Years After Kramers.” Reviews of Modern Physics 62 (2): 251–341.
Kramers, H. A. 1940. “Brownian Motion in a Field of Force and the Diffusion Model of Chemical Reactions.” Physica 7 (4): 284–304.
Lally, Phillippa, Cornelia H. M. van Jaarsveld, Henry W. W. Potts, and Jane Wardle. 2010. “How Are Habits Formed: Modelling Habit Formation in the Real World.” European Journal of Social Psychology 40 (6): 998–1009.
Milkman, Katherine L., Dena Gromet, Hung Ho, et al. 2021. “Megastudies Improve the Impact of Applied Behavioural Science.” Nature 600: 478–83.
Wood, Wendy, and Dennis Rünger. 2016. “Psychology of Habit.” Annual Review of Psychology 67: 289–314.

Fan, Y. (2026). Classical and Statistical Mechanics of Human Action: Psychological Inertia, Static Friction Thresholds, Kramers Escape Rate in Double-Well Potentials and Habit Phase Transitions, Read Beside East Asian Philosophy of Practice [行动的经典与统计力学] (Version 1.0.0). 5D Library. https://doi.org/10.5281/zenodo.23738774 · Licensed under Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International (CC BY-NC-ND 4.0).