Eiko : 因为大家表示看Diffusion model一脸懵逼,所以我打算在讲它之前先来一个概率论基础速成(Crash Course)
这是一个快速“游览路线”,类似于观光巴士,带大家遍历和快速了解现代概率论中最基本的概念,并且瞄准理解Diffusion Models所需的最少数学基础。因为是快速观光,不会有完整的证明和一学期的基础概率论课程教学。
希望补充详细基础的同学可以观看我几年前的概率论教程(有视频和讲义),或者课下自行找资料补习学习owo!
以前的完整讲义:Probability Theory 2022
现代概率论用一个测度空间三元模型来描述“随机世界”:
\[ (\Omega, \mathcal F, \mathbb P).\]
样本空间 \(\Omega\):通常认为这是“所有可能结果的集合”。实际上你可以理解为所有“世界线”的集合,\(\Omega\)中每一个元素都是一条“世界线”,在每一条世界线上发生的事情都是完全确定的,没有随机性。所有随机性的来源就是来自于对“世界线”的选取。
还有一种理解方式,就是把\(\Omega\)想象成“随机数种子”的空间。确定了一个种子之后,所有随机事件就都是“确定的”。
例:一次抛硬币:\(\Omega = \{H, T\}\)
例:一次掷骰子:\(\Omega = \{1,2,3,4,5,6\}\)
事件集合(可测集, \(\sigma\)-代数) \(\mathcal F\):一批我们“可以谈论其概率/可以测量和了解”的\(\Omega\)的子集(称为\(\sigma\)-代数)。
你可以这么理解:这个子集里面的世界线构成的集合是我们可以通过做实验,阅读各种实验结果和做各种计算能够理解和测量概率的子集。不可测的子集对我们没有意义。
例子
对于投一次骰子来说,事件“点数是偶数”对应的事件集合是 \[A = \{2,4,6\}\]
随机变量: 随机变量就是一个\(\Omega\to \mathbb{R}\) 的(可测)函数
概率测度 \(\mathbb P\):这是一个魔法机器
\[\mathbb P : \mathcal F \to [0,1]\]
它给每个事件 \(A \in \mathcal F\) 分配一个介于 \(0\) 和 \(1\) 之间的数 \(\mathbb P(A)\),表示事件发生的“可能性大小”。
对任意事件 \(A, A_1, A_2, \dots \in \mathcal F\),概率测度必须满足如下三条公理:
非负性: \[ \mathbb P(A) \ge 0. \]
规范化:
\[ \mathbb P(\Omega) = 1. \] “所有世界线加在一起概率为1”。
可数可加性:如果 \(A_1, A_2, \dots\) 两两不相交(即 \(A_i \cap A_j = \varnothing\) 当 \(i\neq j\)),则
\[ \mathbb P\left(\bigcup_{i=1}^\infty A_i\right) = \sum_{i=1}^\infty \mathbb P(A_i). \]
在有限 / 可数情形下,可以把这理解成:把不重叠的情况的概率加起来,就是“其中之一发生”的概率。
- \(\Omega\) 是“所有世界线”,\(\mathcal F\) 是“我们能描述和测量的事件”,\(\mathbb P\) 是“给每个事件打一个 0–1 之间的分数”。
例:一次掷骰子
样本空间:\(\Omega = \{1,2,3,4,5,6\}\)。
事件集合:\(\mathcal F = 2^{\Omega}\)(所有子集都当作事件)。
概率测度(均匀):对每个单点 \(\{k\}\),设 \(\mathbb P(\{k\}) = 1/6\).
小练习 1(Easy) 一次掷骰子,设事件
在现代语言中:
随机变量是一个(可测)函数
\[ X: \Omega \to \mathbb R \]
把每个结果 \(\omega\in \Omega\) 变成一个实数 \(X(\omega)\)
直觉:
例:掷骰子 在掷骰子的例子中,\(\Omega = \{1,2,3,4,5,6\}\), 令 \(X(\omega) = \omega\)。那这个随机变量\(X\)测量的就是“点数本身”。
我们希望回答类似问题:
对一个测试集\(B\subset \mathbb{R}\), \(X\) 的值落在 \(B\) 内的概率是多少?
你可能想说,这是\(\mathbb P(B)\)吗?不对,因为\(\mathbb P\)是从\(\Omega\)的子集到\([0,1]\)的函数,而不是从\(\mathbb{R}\)的子集到\([0,1]\)上的函数!这下怎么办呢?
答案:我们能测量的只有“世界线集合”中的“可测子集”。我们只需要知道,哪些世界线中\(X\)的值会落在\(B\)里面,然后用\(\mathbb P\)测量这个世界线集合的大小就可以了!
定义:
\[\mathbb P_X(B) := \mathbb P(X \in B) := \mathbb P(\{\omega \in \Omega: X(\omega) \in B\}). \]
有趣的是,这个\(\mathbb P_X\)现在是从\(\mathbb{R}\)上的(可测)子集到\([0,1]\)的函数,不再是从\(\Omega\)的子集到\([0,1]\)的函数。
这其实就是概率测度的前推:
给定两个测度空间\((\Omega,\mathcal{F}), (\Omega', \mathcal F')\), 一个随机(可测)函数\(X:\Omega\to \Omega'\),还有一个\((\Omega,\mathcal F)\)上的概率测度\(\mathbb P:\mathcal{F}\to [0,1]\), 我们可以把这个概率测度顺着\(X\)推到\(X\)的像空间上:\(X_*\mathbb P = \mathbb P_X\) 是一个 \((\Omega',\mathcal{F}')\)上的概率测度。
对于\(X:\Omega\to \mathbb{R}\)的特殊情形,我们把这个\(X_*\mathbb P\)叫做\(X\)的分布:
直觉图像: \(\Omega\) 上的概率“质量”通过 \(X\) 被“推到”实数轴上,形成了 \(X\) 的分布。
期望值就是一个随机变量的“平均值”,它相当于把随机变量在每条世界线上的取值按照其概率加权求和,对于分布测度集中在离散的点上的随机变量,可以写成:
\[ \mathbb E[X] = \sum_{\omega\in\Omega} X(\omega)\mathbb P(\omega). \]
对于一般的随机变量,需要按照\(X\)的分布\(\mathbb P_X\)作为测度对\(f(x)=x\)积分。
如果即对任何可测集\(A\subset \mathbb{R}\)都有
\[\mathbb P_X(A) = \int_A p_X(x) \mathrm dx = \int_{-\infty}^{\infty} p_X(x) 1_A(x)\mathrm dx\]
那么\(\mathbb P_X\)就叫是连续型分布,简单记为\(\mathbb P_X(\mathrm dx) = p_X(x)\mathrm dx\). \(p_X(x)\)就叫做\(X\)的概率密度函数,使用概率密度函数可以将任何\(X\)的函数的期望值计算为
\[ \mathbb E[f(X)] = \int_\mathbb{R}f(x) \mathbb P_X(\mathrm dx) = \int_{-\infty}^{\infty} f(x) p_X(x)\mathrm dx. \]
取特例\(f(x)=x\),就是期望值\(E[X]\)
\[ \mathbb E[X] = \int_\mathbb{R}x \mathbb P_X(\mathrm dx) = \int_{-\infty}^{\infty} x p_X(x)\mathrm dx. \]
小练习 2(核心练习) 掷一枚公平硬币两次:\(\Omega = \{HH, HT, TH, TT\}\) 每个世界线的概率都为 \(1/4\)。
定义随机变量 \(X(\omega)\) 为“正面出现次数”。
如果已知事件\(B\)发生,那么我们知道,我们所在的世界线是全体世界线中的一个子集\(B\).
这时我们再去测量未知事件\(A\)的概率,就会发生变化!
给定一个事件 \(B\),我们只在“\(B\) 已经发生”的世界线里看另一个事件 \(A\) 的概率,这就是 条件概率:
\[ \mathbb P(A\mid B) = \frac{\mathbb P(A\cap B)}{\mathbb P(B)}, \quad \mathbb P(B)>0. \]
直觉:
小练习 3(Easy) 掷骰子一次。令
小提示:\(B=\{4,5,6\}\),在这个小世界里,\(A\cap B=\{4,6\}\)。
假设事件 \(B_1,\dots,B_n\) 把整个世界“分块”:
那么对任何事件 \(A\):
\[ \mathbb P(A) = \sum_{i=1}^n \mathbb P(A\mid B_i) \cdot \mathbb P(B_i). \]
(证明:非常简单,利用可数可加性和条件概率的定义)
直觉:
把“先落在哪块\(B_i\) ”当作第一步,“在这块里 \(A\) 发生的概率”当作第二步,然后把所有路径的概率加起来,就能得到\(A\)的概率。
我们知道\(\mathbb P(A\cap B) = \mathbb P(A|B)\mathbb P(B)\),从另一个方向看同时它也等于 \(\mathbb P(B|A)\mathbb P(A)\)。于是
\[\mathbb P(A|B)\mathbb P(B) = \mathbb P(B|A)\mathbb P(A).\]
这就得到了
Bayes 公式:
\[ \mathbb P(A\mid B) = \frac{\mathbb P(B\mid A)\mathbb P(A)}{\mathbb P(B)}. \]
配合全概率公式,若 (B) 可以写成“在 (A) 与非 (A) 的两种情况下”发生:
\[ \mathbb P(B) = \mathbb P(B\mid A)\mathbb P(A) + \mathbb P(B\mid A^c)\mathbb P(A^c) \]
则
\[ \mathbb P(A\mid B) = \frac{\mathbb P(B\mid A)\mathbb P(A)}{\mathbb P(B\mid A)\mathbb P(A) + \mathbb P(B\mid A^c)\mathbb P(A^c)}. \]
如果我们假设\(A\)是我们想要了解的目标,\(B\)是我们观察到的数据,那么在 Bayesian 统计推断的语言中,这三项概率有具体的含义和名字:
\[ \text{后验} \propto \text{先验} \times \text{似然}. \]
小练习 4(核心练习) 某疾病在人群中的患病率为 1%(先验:\(\mathbb P(\text{病})=0.01\))。 已知某测试具有如下似然函数:
(1) 假设我们从人群中随机抽取了一个人,设\(D=\)“有病”,\(T=\)“测试阳性”。写出
(2) 用全概率公式计算 \(\mathbb P(T)\)。
(3) 用 Bayes 公式计算 \(\mathbb P(D\mid T)\):假如一个从人群中随机抽取的人测试阳性,真正患病的概率是多少?
(4) 回顾,在这个问题中,哪些是“先验”,哪些是“似然”,哪些是“后验”?
正态分布,是一种常见的连续型实值随机变量的分布。它的具体成因我们没有时间解释,但是它的分布密度像一个钟形曲线。
一个实值随机变量 (X) 服从正态分布,记为
\[ X \sim N(\mu, \sigma^2), \]
其中
它的密度函数为
\[ f(x) = \frac{1}{\sqrt{2\pi}\sigma} \exp\left(-\frac{(x-\mu)^2}{2\sigma^2}\right). \]
回顾分布的密度函数的含义是:对于任何一个\(\mathbb{R}\)上的可测集\(A\), 我们有
\[\mathbb P_X(A) = \int_A f(x) \mathrm dx = \int_{-\infty}^{\infty} f(x) 1_A(x)\mathrm dx.\]
标准正态分布:如果\(\mu=0,\sigma=1\), \(N(0,1)\) 就是标准正态分布。
任何正态分布的随机变量的分布函数都可以表达为标准正态分布的分布函数:
\[\mathbb P_{N(\mu,\sigma^2)}(A) = \mathbb P_{N(0,1)}\left(\frac{A-\mu}{\sigma}\right).\]
如果\(X \sim N(0, 1)\), 那么\(a + b X \sim N(a, b^2)\).
如果 \(X\sim N(\mu,\sigma^2)\),大致有:
只要知道 \(\mu,\sigma\),就能大概估计正态分布的随机变量“落在某个区间里的概率”。
很多现实量(身高、考试误差、测量误差、许多独立小扰动的和) 在实践中经常近似正态分布,这是中心极限定理的直观表现:
许多独立的,误差幅度在同一尺度内的扰动叠加在一起,会产生大致正态分布的总和效果。
先看离散时间随机游走:
画出 \(S_n\) 随时间 \(n\) 变化的折线图,就是一个“左右乱走”的轨迹。
如果我们把步长变小、时间步长也变小,并做适当缩放, 在极限情况下得到的就是一个连续时间、连续路径的随机过程,称为布朗运动。
一个 标准布朗运动 \((W_t)_{t\ge 0}\)(一维)满足:
- \(W_t\) 就像是“把随机游走的步子无限变小、频率无限变快”得到的极限曲线;
- 任意时间段上的增量都是正态的,且与不相交时间段上的增量独立。
小练习 6(挑战) 想象粒子在一维线上做随机游走:每秒向左/向右走 1 步(概率 1/2)。
提示:这在直觉上指向“布朗运动”的连续极限。
一个普通微分方程(ODE)
\[ \mathrm dx_t = f(x_t,t) \mathrm dt \]
可以读作:
当前状态 \(x_t\) 确定了时间\(t\)“瞬间”的变化速度 \(f(x_t,t)\)。
如果系统除了确定的变化速率之外,还受到“持续的小随机扰动”,我们就得到随机微分方程(SDE):
\[ \mathrm dX_t = \mu(X_t,t)\mathrm dt + \sigma(X_t,t)\mathrm dW_t. \]
非正式地读作:
\(\mathrm dX_t\)(在很短时间内的变化)由两部分组成:
- 漂移(drift):\(\mu(X_t,t)\mathrm dt\),表示平均趋势;
- 噪声 / 扰动(noise):\(\sigma(X_t,t)\mathrm dW_t\),来自布朗运动的随机抖动,强度由 \(\sigma\) 决定。
这里 \(W_t\) 是一个布朗运动。
我们说过\(W_t\)是连续但处处不可导的,怎么可以写\(\mathrm dW_t\)?
答:这不是一个通常含义的微分,和微积分中的微分(线性近似)不是一个概念。你可以大致理解成\(\mathrm dW_t = Z\sqrt{\mathrm dt}\) 其中 \(Z\sim N(0,1)\).
其严格处理需要用Ito微积分的框架。
在计算机中,我们常用Euler–Maruyama 方法用离散时间随机过程来近似 SDE:
时间步长 \(\Delta t\) 下:
\[ X_{t+\Delta t} \approx X_t + \mu(X_t,t)\Delta t +\sigma(X_t,t)\sqrt{\Delta t}Z_t \]
其中 \(Z_t \sim N(0,1)\) 为独立标准正态随机变量。
纯噪声: \[ \mathrm dX_t = \sigma \mathrm dW_t. \]
没有漂移,只有随机抖动;
这是缩放后的布朗运动:\(X_t = \sigma W_t\)。
带漂移的布朗运动: \[ \mathrm dX_t = \mu\mathrm dt + \sigma \mathrm dW_t. \]
系统往某个方向漂移(速度 \(\mu\)),同时叠加随机抖动;
Euler–Maruyama 近似: \[ X_{t+\Delta t} = X_t + \mu \Delta t + \sigma \sqrt{\Delta t}Z. \]
小练习 7(核心练习) 考虑 SDE
\[ \mathrm dX_t = \mathrm dt + 0.5\cdot \mathrm dW_t \quad X_0 = 0. \]
取时间步长 \(\Delta t = 0.01\)。
写出 Euler–Maruyama 离散近似公式:\(X_{t+\Delta t}\) 用 \(X_t\) 表示。
尝试在电脑上模拟 0 到 1 的轨迹,并缩短步长观察变化
这一讲义里,我们快速走过了:
概率空间与概率测度:用测度空间三元组 \((\Omega,\mathcal F,\mathbb P)\) 模型描述随机世界;
前推测度,随机变量于期望值:随机变量 \(X\) 把 \(\Omega\) 上的概率“推到”实数轴上,得到分布测度 \(\mathbb P_X\)。对分布测度积分得到期望值\(\mathbb{E}[f(X)]\).
条件概率与 Bayes 公式:在“已知某件事发生”的前提下更新未知事件的概率,形成 Bayesian 的先验–似然–后验框架;
正态分布:钟形曲线,两个参数 \(\mu,\sigma\),大量小扰动的和近似正态,68–95–99.7 规则;
布朗运动:连续时间的“随机游走极限”,增量独立、正态,并且路径连续;
SDE:在 ODE 的基础上加入布朗噪声:\(\mathrm dX_t = \mu\mathrm dt + \sigma \mathrm dW_t\),用 Euler–Maruyama 方法可以在计算机上数值模拟。