随机过程深度实战:从随机游走、泊松过程与布朗运动到伊藤积分、马尔可夫链与高斯过程的完整工程链路

随机过程是把"不确定性"变成可计算对象的第一性原理工具。我们日常写的神经网络、队列系统、扩散模型、强化学习环境、贝叶斯先验,背后几乎都站着某个随机过程——SGD 的噪声是布朗扰动,MCMC 采样是马尔可夫链,扩散模型的反向去噪是伊藤随机微分方程,PageRank 是平稳分布,主动学习的采集函数是高斯过程。本文用纯 NumPy 从零实现随机游走、泊松过程、布朗运动、伊藤 SDE、马尔可夫链、鞅与高斯过程七条主线,把抽象定义逐个翻译成可运行、可验证的工程代码,并在结尾给出与 AI 系统的完整映射表。

一、第一性原理:什么是随机过程

一个随机过程是一族随机变量 {X(t), t ∈ T},其中 T 是指标集(时间,离散或连续),每个 X(t) 取值于状态空间 S(离散或连续)。一次具体观测得到的是一条样本路径 ω → {X(t, ω)}。

工程上最关心的三类结构:

  • 增量结构:独立增量(泊松、布朗)、马尔可夫增量(只依赖当前状态)、鞅增量(条件期望为 0)。
  • 滤波(filtration) F_t:到时刻 t 为止所有可见信息的累积,是"条件期望"的严格载体。
  • 尺度变换:布朗运动的 W(ct) ≡ c^{1/2} W(t)、泊松过程的叠加/稀释,决定了过程如何在大时间尺度上重标定。

判定一个过程"可工程化"的关键是:它有没有封闭的分布刻画(随机游走的 CLT、泊松的计数律、布朗的二次变差、马尔可夫的平稳分布、GP 的高斯后验)。下面逐一落地。

二、随机游走与中心极限定理

最简单的随机过程是对称随机游走 S_n = Σ ξ_i,ξ_i ∈ {±1} 等概率独立。它的均值恒为 0、方差 n,而标准化后 S_n/√n 收敛到标准正态分布——这正是布朗运动的离散起源。


import numpy as np

# 1) 中心极限定理:S_n / sqrt(n) -> N(0,1)
N = 2000
M = 50000
rng = np.random.default_rng(42)
S = rng.choice([-1, 1], size=(M, N)).cumsum(axis=1)
scaled = S[:, -1] / np.sqrt(N)
print("mean =", round(scaled.mean(), 4))            # 理论 0
print("std  =", round(scaled.std(ddof=1), 4))       # 理论 1
q = np.percentile(scaled, [2.5, 50, 97.5])
print("empirical 2.5/50/97.5% =", np.round(q, 3))  # 应接近 -1.96 / 0 / 1.96

# 2) 首达时:对称游走首次触及 ±a 的期望为 a^2(仅到达单侧 +a 的期望发散)
def first_passage(a, max_n=500000, seed=7):
    rng = np.random.default_rng(seed)
    s = 0
    for n in range(1, max_n + 1):
        s += rng.choice([-1, 1])
        if abs(s) >= a:          # 触及 +a 或 -a 即停
            return n
    return None

fpt = np.array([first_passage(20, seed=i) for i in range(3000)])
print("E[T_20] ~", round(fpt.mean(), 1), "(理论 a^2 = 400)")

输出应显示标准化序列均值≈0、标准差≈1、分位数逼近 ±1.96,且首达时均值逼近 400。CLT 告诉我们:即使每一步毫无方向,大样本下路径的整体形态仍然可预测——这是蒙特卡洛方法的根基。

三、泊松过程:计数与到达

泊松过程是"独立平稳增量 + 单位时间平均 λ 次事件"的连续时间计数过程。N(t) ~ Poisson(λt),到达间隔 Δt ~ Exp(λ),且两个独立泊松过程叠加仍是泊松过程(速率相加)。它几乎是"事件流"建模的默认选择:请求到达、异常爆发、光子计数。


import numpy as np

def poisson_process(lam, T, seed=0):
    rng = np.random.default_rng(seed)
    times, t = [], 0.0
    while t < T:
        t += rng.exponential(1.0 / lam)
        if t < T:
            times.append(t)
    return np.array(times)

lam, T = 3.0, 1000.0
counts = np.array([len(poisson_process(lam, T, seed=i)) for i in range(5000)])
print("mean N(T) =", round(counts.mean(), 2), "(理论 λT =", lam * T, ")")
print("var  N(T) =", round(counts.var(ddof=1), 2), "(理论 λT =", lam * T, ")")

arr = poisson_process(lam, T, seed=99)
inter = np.diff(arr)
print("mean interarrival =", round(inter.mean(), 4), "(理论 1/λ =", 1 / lam, ")")

# 叠加性:PP(1.5) + PP(1.5) -> PP(3.0)
a = poisson_process(1.5, T, seed=11)
b = poisson_process(1.5, T, seed=12)
merged = np.sort(np.concatenate([a, b]))
print("merged rate ~", round(len(merged) / T, 3), "(理论 3.0)")

N(T) 的均值与方差都应逼近 3000,到达间隔均值逼近 0.333,叠加后速率逼近 3.0。均值=方差正是泊松分布的特征指纹,也是区分"泊松噪声"与"过离散噪声"的工程判据。

四、布朗运动与二次变差(伊藤微积分的基石)

布朗运动 W(t) 满足:W(0)=0、路径连续、增量 W(t)-W(s) ~ N(0, t-s) 且独立平稳。它最反直觉的性质是二次变差 [W]_t = lim Σ (ΔW_i)² = t——平方增量不消失,反而累积成时间本身。这一条直接催生了伊藤微积分与普通微积分的根本分野。


import numpy as np

def brownian(n, dt=1e-4, seed=0):
    rng = np.random.default_rng(seed)
    dW = rng.normal(0, np.sqrt(dt), size=n)
    return np.cumsum(dW), dW

n, dt = 100000, 1e-4
T = n * dt
W, dW = brownian(n, dt, seed=3)
print("sum dW^2 =", round(np.sum(dW ** 2), 3), " 目标 T =", T)   # 二次变差 -> T

rng = np.random.default_rng(5)
WT = np.array([brownian(n, dt, seed=i)[0][-1] for i in range(2000)])
print("E[W_T^2] =", round((WT ** 2).mean(), 3), " 目标 T =", T)
print("E[W_T]   =", round(WT.mean(), 4))                         # 应≈0

Σ dW² 应逼近 10(即 T),E[W_T²] 同样逼近 10,而 E[W_T]≈0。二次变差是连接"噪声"与"时间"的桥梁:它让伊藤引理多出一个 dt 项,也让随机微分方程与常微分方程彻底分道扬镳。

五、伊藤积分与几何布朗运动(随机微分方程的落地)

伊藤微分把布朗增量当作"噪声源":对 dX = μ dt + σ dW,普通链式求导失效,必须使用伊藤引理 df = (f_t + μ f_x + ½σ² f_xx) dt + σ f_x dW。几何布朗运动 dS = μ S dt + σ S dW 是金融与扩散模型的核心,其解为 S_t = S_0 exp((μ-σ²/2)t + σ W_t)——注意漂移被 -σ²/2 修正,这是伊藤修正项的直接体现。


import numpy as np

mu, sigma, S0, T, n = 0.1, 0.3, 100.0, 1.0, 5000

def gbm_euler(seed):
    rng = np.random.default_rng(seed)
    dt = T / n
    dW = rng.normal(0, np.sqrt(dt), size=n)
    S = S0
    for dW_i in dW:
        S = S + mu * S * dt + sigma * S * dW_i          # 伊藤欧拉-丸山
    return S

paths = np.array([gbm_euler(i) for i in range(4000)])
print("E[S_T]      =", round(paths.mean(), 2),
      " 理论 S0*exp(μT) =", round(S0 * np.exp(mu * T), 2))
print("E[log S_T]  =", round(np.log(paths).mean(), 4),
      " 理论 log S0 + (μ-σ²/2)T =", round(np.log(S0) + (mu - sigma ** 2 / 2) * T, 4))

E[S_T] 应逼近 110.5,E[log S_T] 应逼近 4.660。两者差了一个 σ²/2——若误用普通微分的"无修正"漂移,对数收益会系统性高估。这正是扩散模型(DDPM 的反向 SDE)与随机优化里必须区分伊藤/斯特拉托诺维奇的深层原因。

六、马尔可夫链:状态转移与平稳分布

马尔可夫性要求 P(X_{n+1} | X_n, …, X_0) = P(X_{n+1} | X_n)——未来只依赖现在。长期行为由平稳分布 π 决定,满足 π P = π。它同时是 PageRank、MCMC 采样与强化学习环境动力学的统一语言。


import numpy as np

# 反射边界上的生灭链(对称转移)
P = np.array([
    [0.5,  0.5,  0.0,  0.0,  0.0],
    [0.25, 0.5,  0.25, 0.0,  0.0],
    [0.0,  0.25, 0.5,  0.25, 0.0],
    [0.0,  0.0,  0.25, 0.5,  0.25],
    [0.0,  0.0,  0.0,  0.5,  0.5],
])

def stationary_power(P, iters=5000):
    pi = np.ones(P.shape[0]) / P.shape[0]
    for _ in range(iters):
        pi = pi @ P
    return pi

def stationary_lin(P):
    n = P.shape[0]
    A = P.T - np.eye(n)
    A[-1] = 1.0
    b = np.zeros(n); b[-1] = 1.0
    return np.linalg.solve(A, b)

pi1 = stationary_power(P)
pi2 = stationary_lin(P)
print("幂迭代 :", np.round(pi1, 4))
print("线性方程:", np.round(pi2, 4))
print("max diff:", round(np.max(np.abs(pi1 - pi2)), 6))   # 两种算法应一致

def hitting_time(start, target, maxsteps=20000, seed=0):
    rng = np.random.default_rng(seed)
    s, t = start, 0
    while s != target and t < maxsteps:
        s = rng.choice(len(P), p=P[s]); t += 1
    return t

ht = np.array([hitting_time(0, 4, seed=i) for i in range(5000)])
print("E[首达 0->4] ~", round(ht.mean(), 1))

幂迭代与线性求解得到的平稳分布应逐位一致(差值在 1e-6 量级),首达时为正值。两种求法对照是验证马尔可夫链实现正确性的强约束:幂迭代逼近极限,线性方程直接解特征方程,二者吻合即确认链可约且平稳分布存在。

七、鞅:公平博弈与可选停时

鞅要求 E[X_{t+1} | F_t] = X_t——在已知历史下,未来"无偏"。最经典的例子是布朗运动的 M_t = W_t² - t,由伊藤微分 d(W_t²) = 2W_t dW_t + dt 立得它是鞅。鞅的"无套利"直觉贯穿金融定价、Q-learning 的 TD 误差与收敛分析。


import numpy as np

def brownian_martingale(n=10000, dt=1e-3, seed=0):
    rng = np.random.default_rng(seed)
    dW = rng.normal(0, np.sqrt(dt), size=n)
    W = np.cumsum(dW)
    return W ** 2 - np.arange(1, n + 1) * dt     # M_t = W_t^2 - t

# 单条路径的 M_t 不是 0;鞅的"期望恒定"需在多条独立路径上取期望
rng = np.random.default_rng(7)
vals = np.array([brownian_martingale(seed=int(rng.integers(0, 10**9)))
                 for _ in range(2000)])
for i, label in enumerate(["t=1", "t=5", "t=10"]):
    print(f"E[M_t] @ {label} =", round(vals[:, i].mean(), 3))   # 各时刻都应≈0

M_t 在 t=1/5/10 处的无条件期望都应逼近 0——鞅的"期望恒定"性质。顺带一提:名为"鞅"的翻倍赌注策略之所以在公平赌局里期望为 0 却仍会破产,正是因为可选停时定理要求停时有界或满足可积条件,而无限翻倍破坏了这个前提——鞅的优雅与危险都在于此。

八、高斯过程:无限维高斯先验与非参数回归

高斯过程把"函数"本身当作随机变量:f ~ GP(m(x), k(x, x')),任意有限点的联合分布都是高斯。给定带噪观测,后验仍是高斯,可直接给出预测均值与不确定性——这是贝叶斯深度学习、主动学习与不确定性量化的核心先验。


import numpy as np

def rbf(X, Z, ls=1.0, var=1.0):
    Xn, Zn = X / ls, Z / ls
    sq = (np.sum(Xn ** 2, 1)[:, None] + np.sum(Zn ** 2, 1)[None, :] - 2 * Xn @ Zn.T)
    return var * np.exp(-0.5 * np.clip(sq, 0, None))

def gp_posterior(X, y, Xs, noise=1e-3, ls=1.0, var=1.0):
    K = rbf(X, X, ls, var) + noise * np.eye(len(X))
    Ks = rbf(X, Xs, ls, var)
    Kss = rbf(Xs, Xs, ls, var)
    L = np.linalg.cholesky(K)
    alpha = np.linalg.solve(L.T, np.linalg.solve(L, y))
    mean = Ks.T @ alpha
    v = np.linalg.solve(L, Ks)
    cov = Kss - v.T @ v
    return mean, np.sqrt(np.diag(cov))

rng = np.random.default_rng(0)
X = np.linspace(0, 6, 8)[:, None]
y = np.sin(X[:, 0]) + rng.normal(0, 0.1, size=8)
Xs = np.linspace(0, 6, 200)[:, None]
mean, sd = gp_posterior(X, y, Xs)
mean_tr, _ = gp_posterior(X, y, X, noise=1e-3)
print("max|pred(train)-y| =", round(np.max(np.abs(mean_tr - y)), 3))  # 应很小(插值)
print("置信带宽度 ~", round(2 * sd.mean(), 3))                          # 训练区窄、外推区宽

后验均值在训练点上应几乎复现 y(误差在噪声量级),而置信带在观测密集处窄、外推处宽——不确定性随距离自然增长,这正是 GP 相较点估计模型最独特的价值:它给出可解释的置信,而非只会吐一个值的黑箱。

九、与 AI / 深度学习的映射表

随机过程 在 AI / ML 中的化身 工程启示
随机游走 / 布朗运动 SGD 的梯度噪声(Langevin / 退火)、探索策略的随机性 噪声尺度决定逃离局部极小的能力
泊松过程 请求到达建模、稀疏异常爆发、事件序列 用均值=方差判定是否泊松噪声
马尔可夫链 PageRank、MCMC(MH / Gibbs)、RL 的环境 MDP 平稳分布=长期行为,混合速度决定采样效率
鞅 无套利定价、Q-learning 的 TD 误差(鞅差序列)、收敛分析 鞅差=无偏信号,是 RL 收敛的理论支点
伊藤 SDE 扩散模型(DDPM 反向 SDE)、神经 SDE、随机优化 必须区分伊藤/斯特拉托诺维奇,漂移含 σ²/2 修正
高斯过程 贝叶斯深度学习先验、不确定性量化、主动学习采集函数 后验即置信,但 O(n³) 难扩展

十、工程边界与陷阱

  • 离散化误差:伊藤 SDE 的欧拉-丸山法强收敛 O(√dt)、弱收敛 O(dt);想要精确样本路径需小步长或高阶格式(Milstein)。
  • 蒙特卡洛方差:均值估计误差 O(1/√M),要降 10 倍方差需 100 倍样本;优先用对偶变量、控制变量、分层抽样。
  • 平稳性假设:非平稳数据流(概念漂移)下马尔可夫/平稳假设失效,必须在线检测或更换窗口。
  • 维数灾难:高斯过程随点数 O(n³)、高维 SDE 几乎不可解;高维场景转向稀疏 GP、变分推断或神经参数化。
  • 自相关与时间尺度:强自相关会大幅削减有效样本量(ESS),MCMC 链必须诊断混合与自相关时间。
  • 可复现性:随机性依赖种子,生产环境务必集中管理与记录 RNG 状态,避免"跑不出论文数字"。

结论

随机过程不是概率论的装饰,而是把不确定性变成可计算、可验证、可部署结构的工程语言。从随机游走的 CLT、泊松的计数律、布朗的二次变差,到伊藤 SDE、马尔可夫平稳分布、鞅的无偏性与高斯过程的非参数后验——每一条主线都有封闭的数学刻画和纯 NumPy 的落地实现。理解它们,就等于拿到了 SGD、MCMC、扩散模型、PageRank 与贝叶斯不确定性这些 AI 基石的"源代码"。下一个真正值得深挖的角度,是把这些过程放到高维非线性系统里(随机偏微分方程、神经 SDE、非平衡稳态),那才是连接统计物理与现代生成式 AI 的最后一公里。

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿
网站二维码

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部