第 20 章 计算统计的现代应用:生成、采样与推断

一幅图像怎样从杂乱的噪声中逐渐产生?一句话怎样从一个开头不断向后延伸?生成式人工智能(generative artificial intelligence)把这些问题带到了日常生活中。从统计计算的角度看,图像与文本都可以表示为数据,生成新内容就是利用从数据中学到的规律产生新样本。

前面的章节已经讨论过相近的问题。例如,拟合一个混合正态分布后,可以从拟合分布中抽样;估计一个回归模型后,可以对新观测作预测。图像与文本的维数更高、依赖关系更复杂,但条件概率、回归、优化和随机模拟仍然是理解其计算过程的基础。

本章从图像与文本的生成方式讲起,再讨论三个随之出现的问题:怎样加快生成,怎样在随机输出中嵌入可检测的信号,以及怎样利用模型预测作可靠的统计推断。

20.1 学习目标与路线

先看图像由清晰变为噪声,再观察训练好的模型怎样生成图像;随后把文本拆成真实词元,逐步验证草稿、观察随机评分,最后回到评论标签的误差校正。

学完本章后,读者应当能够:

  1. 推导高斯加噪的边际分布,说明噪声回归怎样进入反向生成算法;
  2. 用概率质量分解证明投机采样的正确性,并区分接受率与实际加速;
  3. 通过小词表算例解释水印的条件分布、边际分布和检测信号;
  4. 由预测误差校正构造总体均值估计,计算其标准误和置信区间;
  5. 说明低秩适配与直接偏好优化如何使用矩阵计算、正则化和二元似然。

本章以第 4 章的矩阵方法、第 6 章的优化、第 9 章的随机数生成和第 10 章的 Monte Carlo 为基础。条件分布与回归的相关内容可分别回看第 15 章和第 12 章。四个主体案例可以依次阅读;低秩适配和直接偏好优化两节为拓展内容。

20.1.1 训练与生成

生成模型(generative model)利用观测数据学习产生新样本的概率规律。使用这类模型时,需要区分训练与生成两个阶段。训练阶段给定许多样本,通过损失函数评价模型,再用优化算法调整参数。生成阶段固定已经学到的参数,按照相应的抽样规则产生输出。即使参数不变,不同的随机数也可以得到不同样本。

以手写数字为例,训练数据包含许多不同写法的数字图像。训练的目标是学习笔画、形状等在数据中的规律;生成时则产生新的像素组合。与前面拟合分布后抽样的例子一样,需要分别考察模型拟合得怎样,以及抽样程序是否实现了所规定的生成机制。

本章涉及的模型可以用神经网络(neural network)表示。这里先把神经网络看作一个带有许多可调参数的函数:输入数据,计算预测,再根据损失调整参数。这与回归模型的基本计算结构相通。下面先明确函数的输入、输出与训练目标,再分析其中的统计计算。

20.1.2 图像与文本怎样进入模型

一幅灰度图像可以表示为像素亮度组成的矩阵;彩色图像通常用红、绿、蓝三个通道表示。例如,一幅 \(32\times32\) 的彩色图像有 \(32\times32\times3=3072\) 个数值。将这些数值按固定顺序排列,就得到一个高维向量。生成图像需要协调这些分量之间的关系,才能形成连贯的颜色与形状。

去噪扩散概率模型(denoising diffusion probabilistic model,DDPM)采用逐步生成的方式。训练时给图像加入已知噪声,让模型学习根据带噪图像预测噪声;生成时从新噪声出发,反复使用学到的预测器更新图像。后面将说明,回归训练为何能够为这个反向过程提供所需的信息。

文本需要先转换为离散单位。词元(token)可以是一个汉字、一个词,也可以是词的一部分或标点。分词器(tokenizer)按照固定规则把文字转换为词元编号。大语言模型(large language model,LLM)根据已有词元序列,计算下一个词元在词表上的概率。

例如,给定开头“The cat”,模型会为可能的后续词元分配概率。若抽到带有前导空格的“sat”,上下文就变为“The cat sat”;模型再根据这个新上下文计算下一步概率。一次完整的生成反复执行下面的步骤:

\[ \text{已有上下文}\;\longrightarrow\; \text{下一词元的概率}\;\longrightarrow\; \text{抽取词元}\;\longrightarrow\; \text{扩展上下文}. \]

每次抽到的词元都会影响后续的条件分布,直到产生结束标记或达到规定长度。这里的随机性出现在按概率选择词元的步骤;计算概率所使用的模型参数保持固定。后面的分词示例将具体展示文字、词元与编号之间的关系。

20.1.3 从生成到加速、检测与推断

逐词元生成需要反复计算条件概率。当模型较大时,计算概率本身可能比抽取一个离散随机数昂贵得多。投机采样(speculative sampling)因此引入一个计算较便宜的草稿模型,先提出若干候选,再由目标模型批量验证。它要解决的统计问题是:怎样利用近似模型节省计算,同时保持目标模型规定的输出分布?

同一个上下文通常允许多种后续表达,随机选择也为嵌入信号提供了空间。文本水印(text watermarking)利用秘密规则影响生成时的选择,使输出与该规则产生统计关联。SynthID-Text 是其中一种方法;理解其机制需要用到离散抽样与假设检验。

模型还可以为大量文本提供分类预测。例如,将课程评论分为正面和负面,再估计总体正面比例。但预测可能出错,增加预测数量并不会自动消除系统偏差。预测驱动推断(prediction-powered inference,PPI)利用少量真实标签估计预测误差,再校正大量预测形成的统计量。本章最后由此回到偏差、方差与置信区间。

这几个问题分别涉及生成机制、计算效率、统计信号和总体推断。低秩适配与直接偏好优化作为两项拓展,进一步说明矩阵计算和优化方法怎样参与模型训练。

以下各节在需要时引入记号。正态分布记号的第二个参数表示方差,多维时表示协方差矩阵。

20.2 从高斯噪声到复杂分布

20.2.1 先观察图像怎样变化

给图像向量的每个分量逐步加入高斯噪声,原本可辨认的颜色、边缘和物体会逐渐消失。下面从一张照片出发,按同一条前向马尔科夫轨迹记录不同加噪时刻。

图像的前向加噪

拖动滑块,观察图像怎样变成噪声

加噪图像
同一条递推轨迹中的状态

最初还能辨认颜色和轮廓。随着噪声增加,像素中的原始信号逐渐减弱。

到后期,问题已经从“修掉几个噪点”变成“从一个高度不确定的状态产生合理图像”。

显示时将像素截到可显示范围,递推状态本身不截断。

反向生成需要学习噪声预测器。下面展示一个在 CIFAR-10 图像上训练的 DDPM 从噪声生成图像的过程。左图是不断更新的随机状态,右图是模型在当前时刻对原始图像的预测;随着生成过程推进,两者逐渐接近。

DDPM 的反向生成

从噪声到图像:观察一次完整的反向生成

当前随机状态
当前随机状态
本步原图预测
本步对原始图像的预测

每幅图像为 32 × 32 像素。生成过程共 1000 步,模型参数保持固定;右图为当前步骤对原始图像的预测。

前向加噪从给定图像出发,反向生成则从新抽取的噪声出发,产生新的图像。这里的反向过程不以恢复前面的照片为目标。

20.2.2 生成模型要学习什么

设观测数据 \(x^{(1)},\ldots,x^{(n)}\) 来自未知分布 \(q_0\)。传统的参数建模先选择一个分布族,再估计参数。例如,对具有两个峰的数据拟合混合正态模型,可以用 EM 估计混合权重、分量均值与方差,再利用随机数生成方法抽取新样本。

8 章的混合模型已经体现了这种“拟合后抽样”的思路。生成模型的目标与此相通:希望建立一个可计算的机制,其输出分布接近 \(q_0\)。区别在于,面对高维、复杂的数据时,直接选择一个简单的密度族可能不够灵活。DDPM 的策略是先构造一个从数据到简单噪声的过程,再学习与它相反的生成方向。(Ho, Jain, and Abbeel 2020)

生成时从一个新抽取的噪声向量出发,没有对应的原始图像或已保存的加噪轨迹。因此,需要学习给定当前带噪状态时,较少噪声状态的条件分布。

20.2.3 从回归到去噪

回归需要输入与预测目标。这里可以主动构造这样的数据对:取一张训练图像,加上自己产生的随机噪声,把带噪图像和噪声时刻作为输入,把所加噪声作为预测目标。噪声由程序产生,因此训练时知道每个分量的目标值,可以计算预测误差并调整参数。

模型看到的是带噪图像,并不知道其中哪一部分来自原图、哪一部分来自噪声。它要从许多训练样本中学习这种区分。按照平方损失拟合时,理想预测器给出的是在当前观测下的条件平均噪声。这正是前面回归与条件期望之间的联系。

预测噪声以后,可以据此计算较少噪声状态的更新方向。反向生成还需要规定每一步的随机波动,不能只把预测噪声一次减掉就结束。因此,下面依次解决三个问题:怎样加噪,反向条件分布具有怎样的形式,以及噪声回归如何进入反向更新。

20.2.4 前向过程:为什么任意噪声时刻都能直接采样

记原始图像向量为 \(X_0\),第 \(t\) 步的带噪向量为 \(X_t\)。选定 \(T\) 个噪声步和一组数 \(0<\beta_t<1\),令

\[ \alpha_t=1-\beta_t,\qquad \bar\alpha_t=\prod_{s=1}^t\alpha_s,\qquad \bar\alpha_0=1. \]

前向过程定义为

\[\begin{equation} X_t=\sqrt{\alpha_t}X_{t-1}+\sqrt{\beta_t}Z_t, \qquad Z_t\overset{\mathrm{iid}}\sim N(0,I). \tag{20.1} \end{equation}\]

所有 \(Z_t\)\(X_0\) 独立。每一步同时缩小原有信号并加入新的高斯噪声。收缩系数使原始信号逐渐减弱。若输入本来服从 \(N(0,I)\),则一次更新后的分布仍为 \(N(0,I)\)

把前两步展开,有

\[ X_2=\sqrt{\alpha_2\alpha_1}X_0 +\sqrt{\alpha_2\beta_1}Z_1+\sqrt{\beta_2}Z_2. \]

后两项是独立高斯变量的线性组合,其协方差为

\[ (\alpha_2\beta_1+\beta_2)I =(1-\alpha_1\alpha_2)I. \]

重复这个计算即可得到

\[\begin{equation} X_t\mid X_0=x_0 \sim N\!\left(\sqrt{\bar\alpha_t}x_0, (1-\bar\alpha_t)I\right). \tag{20.2} \end{equation}\]

因此,要产生给定时刻 \(t\) 的训练样本,无须先模拟前面 \(t-1\) 步。直接产生 \(\varepsilon\sim N(0,I)\),令

\[\begin{equation} X_t=\sqrt{\bar\alpha_t}X_0+ \sqrt{1-\bar\alpha_t}\,\varepsilon \tag{20.3} \end{equation}\]

即可。式 (20.3) 用于单个时刻的边际采样;若要画出同一条前向马尔科夫轨迹,应使用式 (20.1),逐步更新,以保留时刻之间的依赖。

\(\bar\alpha_T\) 足够小时,数据项受到很强的衰减,\(X_T\) 的分布可以接近标准正态。终点近似的准确程度还取决于原始分布及噪声日程。噪声日程的选择需要兼顾终点接近简单分布与反向计算的难度;改进的 DDPM 工作也专门研究了日程和反向方差等设计。(Nichol and Dhariwal 2021)

一个可计算的例子。

\[ X_0\sim \tfrac12N(-2,0.25)+\tfrac12N(2,0.25). \]

由高斯计算,时刻 \(t\) 的分布为

\[\begin{equation} q_t=\tfrac12N\!\left(-2\sqrt{\bar\alpha_t},\,1-0.75\bar\alpha_t\right) +\tfrac12N\!\left(2\sqrt{\bar\alpha_t},\,1-0.75\bar\alpha_t\right). \tag{20.4} \end{equation}\]

随着 \(\bar\alpha_t\) 减小,两个分量的均值向零靠近,分量方差向1靠近,原本清楚的双峰逐渐变成接近标准正态的单峰。这里发生变化的是整个分布,而不只是某一个数据点的外观。

20.1 用同一坐标范围比较四个噪声水平。下面的函数直接计算混合正态密度,其中 dnorm()sd 参数需要传入标准差。

forward_density <- function(x, a) {
  component_sd <- sqrt(1 - 0.75 * a)
  0.5 * dnorm(x, -2 * sqrt(a), component_sd) +
    0.5 * dnorm(x, 2 * sqrt(a), component_sd)
}
双峰分布在高斯加噪中的变化。实线为四个噪声水平下的解析边际密度,虚线为标准正态密度;各面板使用相同坐标范围。

图20.1: 双峰分布在高斯加噪中的变化。实线为四个噪声水平下的解析边际密度,虚线为标准正态密度;各面板使用相同坐标范围。

20.2.5 反向条件分布:知道原始数据与不知道原始数据

由前向模型,对于 \(t\ge2\),给定 \(X_0=x_0\) 时,\((X_{t-1},X_t)\) 联合高斯。因此可以用贝叶斯公式或高斯条件分布公式计算

\[\begin{equation} q(x_{t-1}\mid x_t,x_0) =N\!\left(x_{t-1};\widetilde\mu_t(x_t,x_0),\widetilde\beta_t I\right), \tag{20.5} \end{equation}\]

其中

\[ \widetilde\beta_t= \frac{1-\bar\alpha_{t-1}}{1-\bar\alpha_t}\beta_t, \]

\[\begin{equation} \widetilde\mu_t(x_t,x_0)= \frac{\sqrt{\bar\alpha_{t-1}}\beta_t}{1-\bar\alpha_t}x_0 +\frac{\sqrt{\alpha_t}(1-\bar\alpha_{t-1})}{1-\bar\alpha_t}x_t. \tag{20.6} \end{equation}\]

(20.6) 是原始数据与当前状态的加权组合。它提供了一种“理想教师”:训练时有原始样本 \(x_0\),所以能够计算理想反向均值。但是,生成时没有 \(x_0\),真正需要的是

\[\begin{equation} q(x_{t-1}\mid x_t) =\int q(x_{t-1}\mid x_t,x_0)q(x_0\mid x_t)\,dx_0. \tag{20.7} \end{equation}\]

即使积分号内给定 \(x_0\) 的条件分布是高斯,积分后的分布也一般不再是单个高斯。DDPM 对反向转移使用可学习的高斯近似;“给定原始数据后的精确高斯计算”和“生成时使用的高斯模型”是两个不同层次。(Ho, Jain, and Abbeel 2020)

这一点也解释了为什么生成不能只输出一次条件均值。对前面的对称双峰分布,在给定 \(X_t=0\) 时,\(X_0\) 的条件分布仍然关于零对称,因此条件均值是零。可是在噪声不太小的情况下,它仍可能把相当多的概率质量放在正、负两侧。输出均值只给出一个折中位置;从条件分布抽样才保留不确定性。

20.2 将这个差别画出来。取 \(a=\bar\alpha_t=0.1\)\(x_t=0\),两个分量的条件权重仍为 \(1/2\);各分量条件均值为 \(\pm 2(1-a)/(1-0.75a)\),条件方差为 \(0.25(1-a)/(1-0.75a)\)

原始变量在带噪观测为零时的条件分布。条件均值为零,条件密度的两个峰仍位于两侧。本图由混合正态模型解析计算。

图20.2: 原始变量在带噪观测为零时的条件分布。条件均值为零,条件密度的两个峰仍位于两侧。本图由混合正态模型解析计算。

20.2.6 预测噪声:把生成学习改写为回归

现在用一个带参数的函数 \(\varepsilon_\theta(x,t)\) 预测式 (20.3) 中的噪声。它接收一个带噪向量和噪声时刻,输出同维度的向量。本节不指定这个函数的内部结构,只要求它可以拟合数据并计算参数梯度。

常用的训练目标是

\[\begin{equation} L_{\mathrm{simple}}(\theta) =\mathbb E_{X_0,t,\varepsilon} \left[\left\|\varepsilon- \varepsilon_\theta\!\left( \sqrt{\bar\alpha_t}X_0+\sqrt{1-\bar\alpha_t}\varepsilon,t \right)\right\|^2\right], \tag{20.8} \end{equation}\]

其中 \(t\)\(\{1,\ldots,T\}\) 上均匀抽取。原始数据、时刻与所加噪声共同构成训练随机性。

为什么这个目标有意义?固定时刻 \(t\),令 \(g_t^*(x)=\mathbb E[\varepsilon\mid X_t=x]\)。平方损失的条件期望分解给出

\[\begin{equation} \mathbb E\|\varepsilon-g(X_t)\|^2 =\mathbb E\|\varepsilon-g_t^*(X_t)\|^2 +\mathbb E\|g_t^*(X_t)-g(X_t)\|^2. \tag{20.9} \end{equation}\]

因此,在不限制函数类的总体问题中,最优预测器就是条件平均噪声。噪声预测器拟合的是带噪观测所包含的可预测部分。有限样本、有限函数类和未完全收敛的优化,会使实际预测器与这个理想函数存在差异。

由于我们主动产生了 \(\varepsilon\),训练标签是可获得的。又因为式 (20.3) 允许直接构造任意时刻的带噪样本,每次参数更新只需抽取一个时刻,不必先生成整条前向链。这里结合了高斯边际计算、Monte Carlo 近似和随机梯度优化。

噪声预测训练步骤

  1. 选定噪声日程,初始化预测器参数 \(\theta\)
  2. 抽取一批原始样本 \(x_0\),为每个样本独立抽取时刻 \(t\) 和标准正态噪声 \(\varepsilon\)
  3. 用式 (20.3) 构造 \(x_t\),计算预测噪声与真实噪声的平方误差。
  4. 用小批量损失的梯度更新参数,重复步骤 2—3 直到达到训练停止条件。

训练完成后保留函数 \(\varepsilon_\theta\),生成阶段固定其参数。

与似然计算的联系。 DDPM 也可以作为含有潜变量 \(X_1,\ldots,X_T\) 的概率模型,从变分界得到训练准则。对中间步骤,相关的高斯 KL 项可写成带权的噪声预测平方损失,权重含有

\[ w_t=\frac{\beta_t^2}{2\sigma_t^2\alpha_t(1-\bar\alpha_t)}. \]

(20.8) 省去了这组时间权重,因此是常用的简化训练目标,不能直接把它称为未经改变的原始负对数似然或原始变分界。端点观测模型还需要另行处理。(Ho, Jain, and Abbeel 2020)

20.2.7 从预测噪声到生成样本

由式 (20.3),对原始数据的估计可写成

\[\begin{equation} \widehat x_0(x_t,t)= \frac{x_t-\sqrt{1-\bar\alpha_t}\,\varepsilon_\theta(x_t,t)} {\sqrt{\bar\alpha_t}}. \tag{20.10} \end{equation}\]

把它代入式 (20.6) 并整理,得到反向均值的常用参数化:

\[\begin{equation} \mu_\theta(x_t,t)= \frac{1}{\sqrt{\alpha_t}} \left[x_t- \frac{\beta_t}{\sqrt{1-\bar\alpha_t}} \varepsilon_\theta(x_t,t)\right]. \tag{20.11} \end{equation}\]

对于中间步骤,程序按

\[\begin{equation} X_{t-1}=\mu_\theta(X_t,t)+\sigma_t Z, \qquad Z\sim N(0,I) \tag{20.12} \end{equation}\]

更新,新的 \(Z\) 与此前随机数独立。\(\sigma_t^2\) 是所选反向模型的方差,基础版本可以取预先规定的值,例如 \(\beta_t\)\(\widetilde\beta_t\);它不是所有情形下真实反向条件方差的精确表达。(Ho, Jain, and Abbeel 2020; Nichol and Dhariwal 2021)

反向生成步骤

  1. 抽取初始向量 \(x_T\sim N(0,I)\)
  2. \(t=T,T-1,\ldots,2\),计算预测噪声与反向均值,按式 (20.12) 抽取下一状态。
  3. 计算 \(\mu_\theta(x_1,1)\),作为最终输出。

这里采用原始论文展示算法的最后一步均值输出。章首实际图像记录还使用了公开模型配置中的原图预测截断:先将预测的像素限制在训练数据范围内,再计算反向均值。若要计算严格的样本密度或似然,还需要另行指定端点观测模型。

生成中的随机性具有两种作用。初始随机向量决定了生成从哪里开始;中间步骤的随机扰动则用于保留反向分布的不确定性。仅仅沿预测方向移动并不自动等价于原来的随机采样程序。存在具有不同噪声设置的其他有效采样方法,但必须重新说明其更新规则,而不是随意删除式 (20.12) 的噪声项。

20.3 对照训练和生成的数据流。训练时可获得自生噪声作为回归标签;生成时固定参数,只更新随机状态。

DDPM 的训练与生成。上路用数据和已知噪声构造回归问题;下路反复调用固定的噪声预测器,生成新的随机样本。

图20.3: DDPM 的训练与生成。上路用数据和已知噪声构造回归问题;下路反复调用固定的噪声预测器,生成新的随机样本。

20.2.8 去噪为什么包含分布的信息

给定时刻 \(t\),定义关于数据变量的得分函数(score function)

\[ s_t(x)=\nabla_x\log q_t(x). \]

它是对数据位置 \(x\) 求导,不是经典参数估计中对模型参数求导的得分。得分建模提供了扩散与随机采样之间的另一种联系。(Y. Song et al. 2021)

\(a=\bar\alpha_t\)。由高斯扰动核,

\[ q_t(x)=\int q_0(u)\, \phi_{1-a}(x-\sqrt a\,u)\,du, \]

其中 \(\phi_{1-a}\) 是协方差为 \((1-a)I\) 的零均值高斯密度。在可交换微分与积分的条件下,对 \(x\) 求导并除以 \(q_t(x)\),得到

\[\begin{equation} s_t(x)=-\frac{x-\sqrt a\,\mathbb E[X_0\mid X_t=x]}{1-a} =-\frac{\mathbb E[\varepsilon\mid X_t=x]}{\sqrt{1-a}}. \tag{20.13} \end{equation}\]

因此,理想的噪声回归函数同时给出了带噪分布的对数密度梯度,将回归预测与生成更新联系起来。

\(q_t(x)=\widetilde q_t(x)/C_t\),其中归一化常数 \(C_t\) 不依赖 \(x\),则 \(\nabla_x\log C_t=0\)。因此,得分不需要显式携带这个归一化常数。这与后验计算中常利用未归一化密度的思想相呼应,但两者的使用方式不同。

与 MCMC 的联系和区别。 常见 MCMC 从一个给定目标密度出发构造转移,希望长期样本反映同一个目标分布。DDPM 则从数据学习随噪声水平变化的反向机制,在有限的生成步骤中依次经过不同分布。两者分别围绕给定目标的平稳抽样和随噪声水平变化的反向生成组织计算。扩散、得分建模与连续时间随机过程的更统一说明见 (Y. Song et al. 2021)

计算误差来自哪里。 终点分布与标准正态之间可能存在差别;噪声预测器可能存在统计和优化误差;用有限步和规定形式近似反向过程会产生误差;用有限个生成样本计算统计量又会产生 Monte Carlo 误差。增加生成样本量主要减少最后一种误差,不会自动修正训练不足或模型偏差。

更快的扩散采样由此成为自然问题。去噪扩散隐式模型(denoising diffusion implicit model,DDIM)给出了可以使用相关训练结果的另一类采样路径;连续时间视角进一步把问题联系到微分方程的数值求解。相关扩展可参见 (J. Song, Meng, and Ermon 2021; Holderrieth and Erives 2025)

20.2.9 R 示例:双峰分布的反向生成

双峰例子还可以用来检查生成程序。记 \(a=\bar\alpha_t\)\(v_a=1-0.75a\),时刻 \(t\) 的两个分量均值为 \(\pm2\sqrt a\)、方差为 \(v_a\)。由两个分量密度之比可得,正分量的条件权重为

\[ w_+(x)=\frac{1}{1+\exp\{-4\sqrt a\,x/v_a\}}. \]

于是 \(2w_+(x)-1=\tanh(2\sqrt a\,x/v_a)\)。对混合密度求导,再使用式 (20.13),得到理想噪声回归函数

\[\begin{equation} \varepsilon^*(x,a)=\frac{\sqrt{1-a}}{v_a} \left[x-2\sqrt a\tanh\left(\frac{2\sqrt a\,x}{v_a}\right)\right]. \tag{20.14} \end{equation}\]

这次我们知道数据分布,所以可以解析计算预测器。代码使用这个理想函数,单独观察给定噪声日程与高斯反向更新的结果。

exact_noise <- function(x, a) {
  va <- 1 - 0.75 * a
  sqrt(1 - a) / va * (x - 2 * sqrt(a) * tanh(2 * sqrt(a) * x / va))
}
ddpm_mixture <- function(n, T = 1000) {
  beta <- seq(0.0001, 0.02, length.out = T)
  alpha <- 1 - beta
  abar <- cumprod(alpha)
  abar_prev <- c(1, head(abar, -1))
  reverse_variance <- beta * (1 - abar_prev) / (1 - abar)
  x <- rnorm(n)
  for (t in T:1) {
    predicted_noise <- exact_noise(x, abar[t])
    x <- (x - beta[t] / sqrt(1 - abar[t]) * predicted_noise) / sqrt(alpha[t])
    if (t > 1) x <- x + sqrt(reverse_variance[t]) * rnorm(n)
  }
  x
}
set.seed(2101)
generated <- ddpm_mixture(5000)
c(样本均值 = mean(generated), 样本方差 = var(generated),
  正值比例 = mean(generated > 0))
#>  样本均值  样本方差  正值比例 
#> -0.009631  4.298630  0.497400

原始混合分布的均值为 0、方差为 \(0.25+2^2=4.25\),正值概率为 \(1/2\)。图 20.4 比较生成样本与原始密度。这个程序省去了预测器拟合误差,但仍使用有限步高斯反向近似,终点也以标准正态初始化,因此不要求有限样本直方图与理论密度完全重合。

使用解析噪声预测器的反向生成。直方图为 5000 个生成值,实线为原始双峰密度。该例用于核对反向更新,并非训练神经网络所得的结果。

图20.4: 使用解析噪声预测器的反向生成。直方图为 5000 个生成值,实线为原始双峰密度。该例用于核对反向更新,并非训练神经网络所得的结果。

若要观察回归拟合本身,可以固定一个时刻,从原始混合分布产生训练样本,再主动加噪。下面用自然三次样条拟合噪声,并在独立验证样本上比较拟合函数与解析条件均值。

noise_pairs <- function(n, a) {
  x0 <- sample(c(-2, 2), n, replace = TRUE) + rnorm(n, sd = 0.5)
  eps <- rnorm(n)
  data.frame(xt = sqrt(a) * x0 + sqrt(1 - a) * eps, eps = eps)
}
set.seed(2111)
a_fit <- 0.3
training <- noise_pairs(4000, a_fit)
validation <- noise_pairs(4000, a_fit)
noise_fit <- lm(eps ~ splines::ns(xt, df = 12), data = training)
fitted_noise <- predict(noise_fit, newdata = validation)
oracle_noise <- exact_noise(validation$xt, a_fit)
c(验证噪声预测误差 = mean((validation$eps - fitted_noise)^2),
  理想噪声预测误差 = mean((validation$eps - oracle_noise)^2),
  函数逼近误差 = mean((fitted_noise - oracle_noise)^2))
#> 验证噪声预测误差 理想噪声预测误差     函数逼近误差 
#>         0.529295         0.528079         0.002854

即使使用解析条件均值,预测误差也不会降为零,因为给定带噪观测后,原始噪声仍有不确定性。式 (20.9) 说明了不可约误差与函数逼近误差的区别。这里的样条只拟合一个时刻;完整学习型生成器还需要覆盖所有噪声时刻。

20.2.10 训练变好与一次去噪,是两种时间轴

一次反向采样中,模型参数固定,变化的是噪声时刻。训练过程中,模型参数不断更新,生成能力也随之变化。下图展示不同训练阶段生成的手写数字。

DDPM 在 60 轮训练中的生成效果。各帧展示不同训练阶段的生成样本。

图20.5: DDPM 在 60 轮训练中的生成效果。各帧展示不同训练阶段的生成样本。

训练轮次、噪声时刻与随机种子对应三个不同的变化:模型的学习进展、一次生成中的状态演化,以及同一模型产生的不同样本。

20.3 拓展:低秩适配与矩阵计算

4 章利用矩阵分解提取低维结构。本节把低秩结构用于限制可训练的参数更新。

一个复杂模型通常包含大量线性变换。只考察其中一处:\(h=W_0x\),其中 \(W_0\in\mathbb R^{d\times k}\)。当模型需要适应某类新数据时,直接调整 \(W_0\) 的每个元素,需要更新 \(dk\) 个参数。

低秩适配(low-rank adaptation,LoRA)将更新限制为低秩形式:

\[\begin{equation} h=W_0x+cBAx,\qquad B\in\mathbb R^{d\times r},\quad A\in\mathbb R^{r\times k}. \tag{20.15} \end{equation}\]

其中 \(r\) 远小于 \(d,k\)\(c\) 是缩放系数,常用形式为预设常数除以 \(r\)。训练时固定 \(W_0\),只更新 \(A,B\)(Hu et al. 2022)

从线性代数看,\(BAx\) 先把 \(k\) 维输入映射到 \(r\) 维空间,再映射到 \(d\) 维输出空间。矩阵 \(BA\) 的秩至多为 \(r\),因此所有输出修正都落在 \(B\) 的列空间中;这个低维空间本身也是学习得到的。

\(d=k=100\)\(r=2\),可训练参数由10,000个变为400个。基础矩阵 \(W_0\) 仍然保留。存储基础模型与执行其原有计算仍然需要资源。

低秩更新 · 参数量可以算出来

改变秩,观察需要训练多少参数

输入4096 维
A
B
输出修正4096 维

这是单个 4096 × 4096 权重矩阵的参数计数。训练参数比例不等于总显存比例,也不表示模型精度相同。

它与 SVD 的联系。 截断 SVD 给出的是一个已知矩阵在相应范数下的低秩近似。LoRA 则直接根据任务损失学习更新因子 \(A,B\),通常既不先计算完整更新,也不先对原权重做截断 SVD。因此,LoRA 的近似对象和拟合目标都与直接压缩已知权重矩阵不同。

还有一个能连接优化章节的小细节。暂取 \(c=1\),设任务损失对更新矩阵的梯度为 \(G\)。链式法则给出

\[ \nabla_B L=GA^\mathsf T,\qquad \nabla_A L=B^\mathsf T G. \]

如果 \(A,B\) 都初始化为零,这两项梯度也都为零。将一个因子随机初始化、另一个初始化为零,既能让初始更新为零,又能使训练开始移动;这也是原始 LoRA 所采用的初始化思路。(Hu et al. 2022)

低秩约束是一种计算与表达能力的取舍,不保证任意任务都能用很小的秩完成。这种参数化也可用于其他包含矩阵权重的模型,并与不同任务损失结合。

20.4 保持目标分布的投机采样

20.4.1 从句子到真实词元

大语言模型接收和生成的是词元序列。下面以 Qwen2.5 的分词器为例,观察同一段文字如何被编码。

Qwen2.5 的词元划分

一句话,在模型里是什么样子?

ID 表示词元在词表中的索引。

在 Qwen2.5 的分词规则下,“今天”对应一个词元,“unbelievable”却被拆成 unbelievable 三个词元;英文的空格也可能与后面的词一起编码。不同分词器的边界和编号可以不同,因此讨论词元数量时要说明所用分词器。

分词器只把文本映射到编号。接下来,语言模型根据已有编号序列计算下一个编号的概率;抽样器再按这些概率选择一个编号,并将它解码为文本。这三个环节分别是编码、概率计算和随机抽样。

20.4.2 文本生成也是随机模拟

设文本由离散单位 \(V_1,\ldots,V_L\) 组成,概率的链式分解为

\[\begin{equation} p(v_{1:L})=\prod_{t=1}^L p_t(v_t\mid v_{<t}). \tag{20.16} \end{equation}\]

模型在每一步给出当前词表上的概率向量,再从中抽取一个词元。即使计算一个离散随机数很便宜,得到这个概率向量本身也可能需要一次昂贵的模型计算。常规逐词元生成反复执行“计算概率—抽样—扩展上下文”。

投机采样引入一个计算更便宜的草稿模型。草稿模型先提出候选,大模型再验证候选;通过接受与修正规则,最终输出仍服从大模型的目标分布。(Leviathan, Kalman, and Matias 2023; Chen et al. 2023)

为了先看清数学机制,固定当前上下文,记目标概率为 \(p(v)\)、草稿概率为 \(q(v)\)。两者在同一离散空间上定义,并且都已经归一化。这里的 \(p\) 应是实际希望采样的分布;若使用温度调整、截断等规则,应先说明这些操作后的目标概率,并在接受率计算中使用同一版本的概率。

20.4.3 接受部分与修正部分

首先抽取候选 \(V\sim q\)。对于抽中的候选,以概率

\[\begin{equation} a(V)=\min\left\{1,\frac{p(V)}{q(V)}\right\} \tag{20.17} \end{equation}\]

接受。由于候选是从 \(q\) 抽出的,实际被抽中的位置有 \(q(V)>0\);如果某个位置 \(q(v)=0\)\(p(v)>0\),它仍可能通过后面的修正步骤产生。

如果候选被拒绝,则从残差分布抽取输出:

\[\begin{equation} r(v)=\frac{[p(v)-q(v)]_+}{R},\qquad R=\sum_u[p(u)-q(u)]_+. \tag{20.18} \end{equation}\]

其中 \([z]_+=\max(z,0)\)。当 \(R=0\) 时,两个分布相同,候选不会被拒绝,也不需要计算残差分布。

为什么这个程序正确?某个 \(v\) 通过接受分支成为输出的概率质量是

\[ q(v)a(v)=\min\{p(v),q(v)\}. \]

总拒绝概率为

\[ 1-\sum_v\min\{p(v),q(v)\} =\sum_v[p(v)-q(v)]_+=R. \]

因此,它通过拒绝后的修正分支成为输出的概率质量是 \(Rr(v)=[p(v)-q(v)]_+\)。两条分支相加:

\[\begin{equation} P(\text{输出}=v) =\min\{p(v),q(v)\}+[p(v)-q(v)]_+ =p(v). \tag{20.19} \end{equation}\]

这个证明只需要离散概率和分布分解,却揭示了算法最重要的性质:草稿误差可以由一个精确的概率修正补回来。这里保证的是输出分布相同,不是换一个算法后每次都输出同一句话,也不是相同随机种子下得到逐项相同的结果。

与通常的拒绝采样有何不同? 在某些经典拒绝采样算法中,拒绝后重新从同一提议分布抽样。本节算法在拒绝后使用的是目标分布相对草稿分布不足部分形成的残差;不应把式 (20.18) 省略成“拒绝就重新抽一次”。

20.4.4 一个三点分布的完整计算

设词表只有 \(A,B,C\),并取

\[ p=(0.6,0.3,0.1),\qquad q=(0.4,0.4,0.2). \]

候选 目标概率 \(p\) 草稿概率 \(q\) 接受概率 接受分支提供的质量 修正分支补足的质量
\(A\) 0.6 0.4 1 0.4 0.2
\(B\) 0.3 0.4 0.75 0.3 0
\(C\) 0.1 0.2 0.50 0.1 0

总接受概率是0.8,拒绝概率是0.2。因为目标分布只有在 \(A\) 处比草稿分布多出概率质量,所以拒绝后的残差分布集中在 \(A\)。最终输出概率恰为 \((0.6,0.3,0.1)\)

20.6 对应上述概率分解。下面的 R 函数按同一规则产生独立样本,返回值同时记录候选是否被接受。

speculative_one <- function(p, q) {
  v <- sample.int(length(q), 1, prob = q)
  accepted <- runif(1) < min(1, p[v] / q[v])
  if (!accepted) {
    residual <- pmax(p - q, 0)
    v <- sample.int(length(p), 1, prob = residual)
  }
  c(value = v, accepted = as.integer(accepted))
}
p_target <- c(A = 0.6, B = 0.3, C = 0.1)
p_draft <- c(A = 0.4, B = 0.4, C = 0.2)
set.seed(2102)
spec_draws <- replicate(20000, speculative_one(p_target, p_draft))
data.frame(
词元= names(p_target), 目标概率 = unname(p_target),
  模拟频率 = tabulate(spec_draws["value", ], nbins = 3) / ncol(spec_draws),
  频率标准误 = sqrt(p_target * (1 - p_target) / ncol(spec_draws)),
  row.names = NULL
)
#>   词元 目标概率 模拟频率 频率标准误
#> 1    A      0.6   0.5949   0.003464
#> 2    B      0.3   0.3012   0.003240
#> 3    C      0.1   0.1038   0.002121
mean(spec_draws["accepted", ])
#> [1] 0.8038

本例的频率误差应与表中的 Monte Carlo 标准误一起解释。这里核对的是采样分布,代码没有模拟大模型计算,因此运行时间不能用于评估文本生成的加速比。

投机采样的概率质量分解。实色柱由公共质量与残差质量堆叠成目标概率,虚线框表示草稿概率。

图20.6: 投机采样的概率质量分解。实色柱由公共质量与残差质量堆叠成目标概率,虚线框表示草稿概率。

另一个有用的结论是

\[\begin{equation} P(\text{接受}) =\sum_v\min\{p(v),q(v)\} =1-\frac12\sum_v|p(v)-q(v)|. \tag{20.20} \end{equation}\]

右侧的差异度量是总变差距离。这使模型近似质量与计算效率建立了直接联系:两个分布越接近,候选平均越容易被接受。但正确性不要求近似非常好;近似差主要会降低效率。

20.4.5 真正的加速来自批量验证

若每提出一个候选,都立即调用大模型验证一个词元,通常不能形成明显的计算优势。实际算法让草稿模型先连续提出 \(b\) 个候选,再让大模型对这一段候选对应的多个前缀进行批量评分。(Leviathan, Kalman, and Matias 2023; Chen et al. 2023)

设当前已有上下文 \(h\),草稿为 \(v_1,\ldots,v_b\)。大模型计算的是

\[ p_1(\cdot\mid h),\; p_2(\cdot\mid h,v_1),\;\ldots,\; p_{b+1}(\cdot\mid h,v_1,\ldots,v_b). \]

之后按顺序执行接受判断。若在第 \(j\) 个位置首次拒绝,则前 \(j-1\) 个词元保留,第 \(j\) 个位置按对应残差分布重新抽取,后续草稿全部丢弃。原因很简单:第 \(j\) 个词元改变后,后面那些基于旧前缀计算的概率不再适用于新文本。

如果 \(b\) 个候选全部接受,还可以从已经得到的第 \(b+1\) 个目标分布抽取一个额外词元。然后以新的已接受前缀开始下一轮。正确性的逐步论证始终依赖同一原则:只在此前前缀已经确定时,使用该前缀下的 \(p_t,q_t\) 和残差修正。

按块执行的投机采样步骤

  1. 草稿模型连续提出 \(b\) 个候选,并保存各步完整的草稿概率向量。
  2. 目标模型批量计算这些候选前缀下的目标概率向量。
  3. 按顺序用式 (20.17) 判断是否接受。首次拒绝时,按式 (20.18) 抽取替代词元,舍弃后续草稿。
  4. 若全部接受,从第 \(b+1\) 个目标分布中追加一个词元。
  5. 以更新后的文本为前缀重复以上步骤,直到出现终止符或达到长度限制。

把这个规则放到一句具体文本中看。假设已经确认的前缀是 The capital,草稿继续提出 of France is Lyon.。下面使用真实词元边界,但为说明接受与残差规则,手工指定当前地名位置的概率。

草稿的验证与修正

草稿写出 Lyon,验证时发生什么?

已确认前缀:The capital

当前地名候选 目标概率 p 草稿概率 q
␠Paris 0.80 0.40
␠Lyon 0.05 0.25
␠London 0.05 0.20
其他词元合计 0.10 0.15

设前三个词元均被接受,地名位置的概率如下表,并设“其他词元”的每一项均满足 q ≥ p。接受规则由概率比决定。

首次拒绝后,旧草稿的句号也被丢弃。即使它看起来仍然合理,验证它所用的条件分布对应的也是旧前缀;新的前缀应在下一轮重新计算。这正是“按块评分”和“按顺序决定保留”之间的区别。

分布相同的数学结论与实际提速是两回事。速度还取决于草稿模型的计算代价、接受率、批量验证方式以及硬件开销。有限精度、截断概率、词表不一致或实现顺序错误,也会影响程序是否符合理论算法。因此,不能把“目标分布保持不变”写成“在所有环境下都能达到固定倍数的加速”。

20.5 随机生成中的文本水印

20.5.1 在生成过程中嵌入信号

判断文本的来源,至少有两种不同思路。一种是生成结束后,根据语言风格或其他特征猜测其来源;另一种是在生成时主动嵌入某种结构,再用相应规则检查该结构。文本水印属于后一种。

SynthID-Text 是一种用于文本生成的水印机制。SynthID-Text 把水印放在离散采样环节,核心机制是锦标赛式采样:候选词元按秘密伪随机评分竞争,最终输出与评分发生统计关联。(Dathathri et al. 2024; Google 2026)

设当前位置的模型分布为 \(p_t(v\mid h_t)\)。给定秘密密钥 \(k\) 和近期上下文,通过一个确定性规则得到种子 \(r_t\),再为不同层构造评分函数

\[\begin{equation} g_\ell(v,r_t)\in\{0,1\},\qquad \ell=1,\ldots,m. \tag{20.21} \end{equation}\]

同一密钥、上下文、层和词元必须得到相同评分,检测时才能重建规则。所谓“随机”,在实现上通常体现为伪随机函数;检测器据此重建生成时的评分。本章的概率推导先使用独立公平随机位的理想模型,随后再解释与实际密钥系统的差别。

某一层评分为 1 的词元构成该层的高分集合;锦标赛通过候选间的比较,提高输出落入高分集合的概率。

20.5.2 从单场比赛到多层锦标赛

固定当前上下文,记基础分布为 \(p\)。先从 \(p\) 独立抽取两个候选 \(U_1,U_2\)。若一个候选的评分高于另一个,选择高分者;若评分相同,在两个候选位置之间公平选择。如果两个候选碰巧是同一个词元,最终当然还是这个词元。

多层情形可以用一棵二叉比赛树解释。以两层为例,从 \(p\) 独立抽取四个候选;第一轮按 \(g_1\) 比较两组候选,得到两个胜者;第二轮按 \(g_2\) 比较两个胜者,得到最终输出。每层使用自己的评分函数,同一词元在同一层反复出现时评分不变。(Dathathri et al. 2024)

考虑一个用于配图的例子:

词元 第一层评分 \(g_1\) 第二层评分 \(g_2\)
\(A\) 1 0
\(B\) 0 1
\(C\) 1 1

若四个候选依次为 \(A,B,C,A\),第一轮 \((A,B)\)\(A\) 胜出,\((C,A)\) 同分,假设公平随机决胜得到 \(C\)。第二轮比较 \(A,C\),依据第二层评分由 \(C\) 胜出。这里展示的是一次可能的随机决胜结果。

20.7 将评分表与比赛路径放在一起。同一个词元可以占据多个候选位置,但同层评分相同。

两层锦标赛的一次可能实现。候选为 A、B、C、A;第一轮 C 与 A 同分,这次随机选择 C;第二轮按另一评分表比较。

图20.7: 两层锦标赛的一次可能实现。候选为 A、B、C、A;第一轮 C 与 A 同分,这次随机选择 C;第二轮按另一评分表比较。

这里的候选数随层数指数增加,是机制解释的直观表达,并不意味着实际实现必须显式展开整棵大树。对于二元评分、每场两个候选的情形,可以直接更新整个概率向量。记一层开始时的分布为 \(p^{(\ell-1)}\),高分集合的概率质量为

\[ G_\ell=\sum_v p^{(\ell-1)}(v)g_\ell(v,r_t). \]

单场比赛后,高分词元\(v\) 的概率成为 \(p^{(\ell-1)}(v)(2-G_\ell)\);低分词元的概率成为 \(p^{(\ell-1)}(v)(1-G_\ell)\)。合起来为

\[\begin{equation} p^{(\ell)}(v) =p^{(\ell-1)}(v)\{1+g_\ell(v,r_t)-G_\ell\}. \tag{20.22} \end{equation}\]

可直接检查这些概率非负,且总和为 \(1+G_\ell-G_\ell=1\)。逐层应用这个更新,再从最后的概率向量抽取一次,与所述比赛树具有相同输出分布。这个闭式表达来自上述单场比赛的概率分解;它也说明为什么实际实现可以采用向量化,而不是进行海量模型调用。(Dathathri et al. 2024)

教学版单步水印嵌入

  1. 给定上下文,取得基础概率向量 \(p\)
  2. 用密钥与上下文重建各层二元评分,令 \(p^{(0)}=p\)
  3. 按式 (20.22) 逐层更新概率向量。
  4. \(p^{(m)}\) 抽取下一个词元,再推进上下文。

以上步骤对应每场两个候选、评分为二元值的基础机制。序列级实现还要处理后面讨论的重复上下文。

20.5.3 条件分布、边际分布与检测信号

讨论分布保持性质时,需要明确平均所针对的随机性。固定某一密钥评分表后,输出通常会偏向高分词元,所以条件分布可以改变。对评分随机性平均后,边际分布却可能保持不变。

设词表只有 \(A,B\),基础分布均为 \(1/2\),且 \(g(A),g(B)\) 是两个独立公平随机位。采用单层两候选比赛,有:

\(g(A)\) \(g(B)\) 给定该评分表时输出 \(A\) 的概率
0 0 \(1/2\)
0 1 \(1/4\)
1 0 \(3/4\)
1 1 \(1/2\)

例如在第三行,只要两个候选中出现 \(A\),它就胜出,因此输出 \(A\) 的概率是 \(1-(1/2)^2=3/4\)。四种评分表各以概率 \(1/4\) 出现,对它们平均,得到

\[\begin{equation} P(\text{输出 }A) =\frac14\left(\frac12+\frac14+\frac34+\frac12\right) =\frac12. \tag{20.23} \end{equation}\]

但输出词元得到1分的概率不是 \(1/2\)。四行中,这个概率依次为 \(0,3/4,3/4,1\),所以

\[\begin{equation} P\{g(\text{输出})=1\}=\frac58. \tag{20.24} \end{equation}\]

与评分独立地从基础分布抽取词元时,上式为 \(1/2\)。于是,水印没有改变评分平均后的两词边际概率,却让“输出是什么”和“秘密评分是多少”发生了相关性。检测器利用的是后者。

下面枚举双词例子中的全部评分表,不需要模拟就能复核上述两个概率。

tournament_prob <- function(p, scores) {
  out <- p
  for (ell in seq_len(ncol(scores))) {
    g <- scores[, ell]
    high_mass <- sum(out * g)
    out <- out * (1 + g - high_mass)
  }
  out
}
score_tables <- as.matrix(expand.grid(A = 0:1, B = 0:1))
p_a <- high_score <- numeric(nrow(score_tables))
for (j in seq_len(nrow(score_tables))) {
  g <- score_tables[j, ]
  marked <- tournament_prob(c(0.5, 0.5), matrix(g, ncol = 1))
  p_a[j] <- marked[1]
  high_score[j] <- sum(marked * g)
}
c(输出A的边际概率 = mean(p_a), 输出评分均值 = mean(high_score))
#> 输出A的边际概率    输出评分均值 
#>           0.500           0.625

函数的 scores 每行对应一个词元,每列对应一层;同一词元在同层只有一个评分。这里直接传入评分表以展示概率机制,真实系统还需要由密钥和上下文可复现地重建评分。

这个现象也可以从式 (20.22) 直接得到。在一层开始时将 \(p\) 视为固定,且各个 \(g(v)\) 是均值为 \(1/2\) 的公平评分,则

\[ \mathbb E_g[p'(v)] =p(v)\{1+\mathbb E g(v)-\mathbb E G\} =p(v). \]

在理想的独立层评分下,逐层使用条件期望即可推广到多层的单词元边际结论。但从单词元推广到整段文本,还需要处理上下文导致的评分复用。SynthID-Text 区分不同层次的非失真性质,并利用重复上下文掩蔽等机制处理相应问题。不能把单步平均关系升级为“固定密钥下每一步概率都不变”或“任意多段文本的联合分布都完全不变”。(Dathathri et al. 2024)

20.5.4 为什么缺少生成选择时水印更弱

前面的算例还可以推广出一个有解释力的关系。在一层、两个候选的理想模型中,给定评分表,高分候选的基础概率质量是 \(G=\sum_vp(v)g(v)\),比赛输出高分的概率是

\[ 1-(1-G)^2=2G-G^2. \]

若各个 \(g(v)\) 独立服从 \(\operatorname{Bernoulli}(1/2)\),则

\[ \mathbb E G=\frac12,\qquad \operatorname{Var}(G)=\frac14\sum_vp(v)^2. \]

所以

\[\begin{equation} \mathbb E\{g(\text{输出})\} =\frac34-\frac14\sum_vp(v)^2. \tag{20.25} \end{equation}\]

若基础分布几乎集中在唯一一个词元,\(\sum_vp(v)^2\) 接近1,平均评分便接近未嵌入机制时的 \(1/2\)。这并不奇怪:几乎没有其他候选时,采样机制很难通过选择留下信号。若基础分布在 \(K\) 个词元上均匀,平均评分为 \(3/4-1/(4K)\)

(20.25) 只描述本节规定的单层理想模型,不是完整 SynthID-Text 的通用功效公式,也不能据此假定增加层数会线性增加独立证据。它的作用是解释生成选择空间与信号强度的关系。

锦标赛机制 · 40 次独立选择

输出仍是普通词,为什么评分会偏高?

候选为八个英文词元,基础概率各为 1/8。每个位置重新产生独立二元评分,绿色表示本次评分为 1。

在这个八词模型中,每个位置独立抽样;检测器利用输出词元与评分规则之间的关联。

20.5.5 把平均评分变成一个统计检验

检测时,给定待检文本和相同的词元化规则、密钥及配置,重建各位置评分。设经既定规则保留的有效位置集合为 \(\mathcal I\),其大小为 \(n_{\mathrm{eff}}\)。一个直观统计量是

\[\begin{equation} S=\frac{1}{m n_{\mathrm{eff}}} \sum_{t\in\mathcal I}\sum_{\ell=1}^m g_\ell(V_t,r_t). \tag{20.26} \end{equation}\]

它衡量观察到的词元是否系统地偏向高分。无有效位置时不能使用这个平均值,应报告信息不足。实际工具可以使用比平均分更复杂的贝叶斯检测器,但平均评分足以展示统计问题的结构。(Google 2026)

先看一个条件非常明确的教学零假设:每个位置使用独立的新评分表,只采用一层,未加水印的输出与当前评分表独立。此时记

\[ K_n=\sum_{t=1}^n g_t(V_t), \]

\(K_n\sim\operatorname{Binomial}(n,1/2)\)。在显著性水平 \(\alpha\) 下,可选择整数 \(c_\alpha\) 使

\[ P_0(K_n\ge c_\alpha)\le\alpha, \]

并在观测计数达到阈值时拒绝零假设。对于足够大的 \(n\),还可以使用标准化统计量

\[\begin{equation} Z=\frac{K_n-n/2}{\sqrt{n/4}}, \tag{20.27} \end{equation}\]

但在低误报率或较短文本下,精确二项尾概率比机械套用正态近似更合适。

一个完全指定的理论示例。 假设每个位置的基础词表都是八词均匀分布,每步独立使用新的一层评分,位置之间相互独立。由式 (20.25),水印输出的1分概率为 \(23/32\)。在这个简化模型中,零假设与备择假设的计数分布分别是 \(\operatorname{Binomial}(n,1/2)\)\(\operatorname{Binomial}(n,23/32)\)。取目标误报水平1%,精确计算得到:

这些数值是上述二项模型的理论尾概率,不是 SynthID-Text 的真实文本测试结果。实际误报概率不必恰好等于1%,因为二项分布是离散的。

阈值与功效可以直接用 qbinom()pbinom() 计算;拒绝区域是大于等于阈值,所以尾概率从 cutoff - 1 的右侧开始。

lengths_text <- c(50, 100, 200)
cutoff <- qbinom(0.99, size = lengths_text, prob = 0.5) + 1
knitr::kable(data.frame(
  长度 = lengths_text, 阈值 = cutoff,
  误报概率 = pbinom(cutoff - 1, lengths_text, 0.5, lower.tail = FALSE),
  检出率 = pbinom(cutoff - 1, lengths_text, 23 / 32, lower.tail = FALSE)
), digits = 5, row.names = FALSE)
长度 阈值 误报概率 检出率
50 34 0.00767 0.7811
100 63 0.00602 0.9794
200 117 0.00970 1.0000

20.8 对应长度为 100 的情形。显著性水平控制零假设分布的右尾,功效则由备择分布落入同一拒绝区域的概率决定。

教学水印模型的二项计数分布:八词均匀、单层且各位置使用独立新评分。竖线右侧整数为拒绝区域,曲线连接点仅为便于辨认离散概率。

图20.8: 教学水印模型的二项计数分布:八词均匀、单层且各位置使用独立新评分。竖线右侧整数为拒绝区域,曲线连接点仅为便于辨认离散概率。

20.5.6 为什么真实检测需要校准

实际文本并不满足上面的所有独立性条件。重复的上下文可能重复调用同一评分规则;同一个词元的多层评分可能通过选取过程发生依赖;文本修改会改变之后的上下文;不同长度、不同生成配置也可能改变统计量的行为。把 \(mn_{\mathrm{eff}}\) 个评分机械地当成同样多的独立伯努利观测,可能低估不确定性。

一种直接的方法是根据预先规定的未加水印参考机制产生校准文本,运行与实际检测完全相同的评分与掩蔽程序,以统计量的零假设分布决定阈值。校准样本与用于报告检出表现的样本应分开。该阈值的意义依赖参考零假设是否适用,不能保证在任意来源文本上都维持相同误报率。

另一种说明随机化思想的方法是固定待检文本,比较真实随机密钥 \(k_0\) 与独立抽取的参考密钥 \(k_1,\ldots,k_B\)。若零假设下文本与这些密钥独立、密钥同分布,且对它们使用完全相同的评分规则,则分数具有交换性,可构造

\[\begin{equation} \widehat p= \frac{1+\sum_{b=1}^B\mathbf 1\{S(k_b)\ge S(k_0)\}}{B+1}. \tag{20.28} \end{equation}\]

(20.28) 是本章用于解释的随机化检验,不是宣称官方检测器采用这一实现。对于固定生产密钥、被反复查询或按检测结果挑选的文本,不能自动假定上述交换性成立。参考密钥数量还限制了 \(p\) 值分辨率,最小值为 \(1/(B+1)\)

水印检测的合理结论是“发现与某个水印机制一致的统计证据”。没有检出水印不等于文本由人类创作;检验的 \(p\) 值不是“文本由人工智能生成的概率”;水印阳性也不说明内容真实。大幅改写和其他编辑可能削弱信号,密钥与检测接口的使用方式也会影响可验证性。(Google 2026; Li et al. 2024)

与投机采样的衔接。 在固定密钥和上下文下,如果采样目标被替换为水印后的分布 \(\widetilde p_t\),则接受与残差修正必须围绕这个实际目标定义,不能仍然只按原分布 \(p_t\) 验证。水印与加速机制可以组合,但需要同时检查检测信号和接受率;SynthID-Text 原论文专门研究了这类组合。(Dathathri et al. 2024)

20.6 拓展:直接偏好优化

12 章讨论了二元结果的 Logistic 似然。成对偏好也能写成一个二元响应模型,并进一步形成生成模型的训练损失。

设同一问题 \(x\) 有两个回答 \(y_1,y_2\)。人们比较它们,给出更偏好的一个。与其要求标注者给每个回答一个绝对分数,不如先对这种成对选择建立概率模型。

成对回答 · 一个偏好记录

同样正确的解释,初学者可能偏好哪一种?

问题:为什么每次运行 Monte Carlo,结果会略有不同?

回答 A(本例偏好)

因为每次抽到的随机样本不同,样本平均也会波动。增加模拟次数通常能减小这种波动。

回答 B

Monte Carlo 估计量本身是随机变量;在独立同分布及有限方差条件下,其标准误按样本量平方根的倒数衰减。

本例设标注者偏好回答 A,概率在 A、B 两个回答之间归一化。

布拉德利–特里(Bradley–Terry)模型用一个奖励函数 \(r(x,y)\) 表示回答的相对吸引力:

\[\begin{equation} P(y_1\succ y_2\mid x) =\sigma\{r(x,y_1)-r(x,y_2)\}, \qquad \sigma(z)=\frac{1}{1+e^{-z}}. \tag{20.29} \end{equation}\]

这是熟悉的 Logistic 形式,但解释变量换成了两个回答的奖励差。直接偏好优化(direct preference optimization,DPO)利用奖励与模型概率之间的关系,把偏好数据直接变成模型的训练目标。(Rafailov et al. 2023)

先固定 \(x\),考虑在概率分布 \(\pi(\cdot\mid x)\) 上求解

\[\begin{equation} \max_\pi\left\{ \mathbb E_{Y\sim\pi}[r(x,Y)] -\tau D_{\mathrm{KL}}(\pi\|\pi_{\mathrm{ref}}) \right\},\qquad \tau>0. \tag{20.30} \end{equation}\]

这里用 \(\tau\) 表示 KL 惩罚系数,以免与 DDPM 的 \(\beta_t\) 混淆。\(\pi_{\mathrm{ref}}\) 是参考模型。对于有限候选集合且参考概率为正,令

\[\begin{equation} \pi^*(y\mid x) =\frac{\pi_{\mathrm{ref}}(y\mid x)e^{r(x,y)/\tau}}{Z(x)}, \quad Z(x)=\sum_y\pi_{\mathrm{ref}}(y\mid x)e^{r(x,y)/\tau}. \tag{20.31} \end{equation}\]

将式 (20.31) 代入后,式 (20.30) 的目标可以改写为

\[ \tau\log Z(x)-\tau D_{\mathrm{KL}}(\pi\|\pi^*). \]

因此,在允许的分布空间中由 \(\pi=\pi^*\) 达到最大值。反过来写奖励,得到

\[\begin{equation} r(x,y)=\tau\log\frac{\pi^*(y\mid x)}{\pi_{\mathrm{ref}}(y\mid x)} +\tau\log Z(x). \tag{20.32} \end{equation}\]

同一个问题的两个回答相减时,未知的 \(\log Z(x)\) 消失。这正是关键的计算简化。

用当前参数模型 \(\pi_\theta\) 代替上述概率参数化,并记 \(y_w\) 为偏好回答、\(y_l\) 为另一回答,定义

\[ M_\theta= \log\frac{\pi_\theta(y_w\mid x)}{\pi_{\mathrm{ref}}(y_w\mid x)} -\log\frac{\pi_\theta(y_l\mid x)}{\pi_{\mathrm{ref}}(y_l\mid x)}. \]

得到 DPO 的基本损失

\[\begin{equation} L_{\mathrm{DPO}}(\theta) =-\frac1n\sum_{i=1}^n\log\sigma(\tau M_\theta^{(i)}). \tag{20.33} \end{equation}\]

这个目标将偏好拟合转化为对数概率比上的 Logistic 型优化。完整回答的对数概率可以根据式 (20.16) 写为词元条件对数概率之和,无须显式枚举所有可能回答。消去的是奖励重参数化中关于整段回答的 \(Z(x)\),不是说语言模型内部的所有归一化运算都不再需要。(Rafailov et al. 2023)

一个两回答例子。 设参考模型对两个回答各给 \(1/2\),当前模型给偏好回答 \(3/4\)、另一回答 \(1/4\),并取 \(\tau=1\)。则 \(M_\theta=\log3\),模型给出的成对偏好概率为 \(\sigma(\log3)=3/4\),对应负对数损失约为0.288;若当前模型仍与参考模型相同,偏好概率为 \(1/2\),损失约为0.693。

dpo_loss <- function(log_ratio_w, log_ratio_l, tau = 1) {
  z <- tau * (log_ratio_w - log_ratio_l)
  # 稳定计算 log(1 + exp(-z)),避免直接指数运算上溢。
  pmax(-z, 0) + log1p(exp(-abs(z)))
}
c(参考模型 = dpo_loss(0, 0),
  调整后模型 = dpo_loss(log(0.75 / 0.5), log(0.25 / 0.5)))
#>   参考模型 调整后模型 
#>     0.6931     0.2877

实际训练中的参数空间未必包含理想最优分布,偏好数据也未必严格遵守 Bradley–Terry 假设。参数化的表达能力与偏好假设共同决定了这一训练目标的适用范围。偏好反映了比较数据中的选择倾向,也不等于事实正确性。

20.7 预测驱动的统计推断

20.7.1 从评论分类到总体比例

假设我们需要估计某类评论的正面评价比例。评论文本很容易获得,但可靠人工标注比较昂贵。一个模型可以给许多评论打标签或给出正面概率。能否直接把这些预测当成真实标注,取平均再报告一个很窄的置信区间?

问题在于,大量预测可以让“预测均值”计算得非常精确,却不能自动消除预测的系统偏差。样本量变大并不保证估计目标没有被悄悄替换。这里的目标应当是人工标注所定义的总体均值,而不只是模型预测的总体均值。

PPI 将少量真实标签与大量机器预测结合,显式估计预测误差,并据此校正推断。(Angelopoulos et al. 2023)

本节的模型不一定是生成式模型,也不一定是大语言模型。它可以是任意固定的预测器。把 PPI 放在本章末尾,是为了把视角从“如何产生输出”转回“怎样根据数据得出可解释的统计结论”。

课程评论 · 从预测回到真实标签

模型给出 72% 正面评价,就可以报告 72% 吗?

设一个独立的大样本中,模型预测的正面比例为 72%。再用少量人工标注检查它会犯什么错。

评论 模型预测 人工标签 残差

本例假设抽取的 8 条评论及其标签如下。总体比例的区间估计还需要计算标准误。

20.7.2 两份数据与目标总体

设目标参数为

\[ \mu=\mathbb E(Y). \]

我们有两份相互独立的数据:一份是 \(n\) 个带标签观测 \((X_i,Y_i)\),另一份是 \(N\) 个只有特征的观测 \(\widetilde X_j\)。前者独立同分布于总体 \(P\),后者独立同分布于同一总体的特征边际 \(P_X\)。预测器 \(f\) 已在独立数据上训练,或在本节分析中被视为与两份数据独立的固定函数。

这些抽样条件决定了校正项能否代表目标总体。若人工标注只挑选了最容易的样本,而未标注样本来自另一类人群,则两份数据上的平均预测误差可能不同,下面的简单纠偏便未必有效。若把标注样本也放入未标注样本均值中,两项不再独立,标准误必须按相应抽样设计重新计算。

此外,大量未标注样本的特征 \(\widetilde X\) 来自目标总体,而不是把模型凭空生成的任意样本视为同一总体的真实观测。预测辅助推断与“用合成数据替换真实数据”并不是同一个问题。

20.9 明确了三类数据的分工:训练预测器、估计预测均值、估计预测残差。

均值 PPI 的数据分工。预测器独立训练;未标注样本与带标签样本相互独立,并来自同一目标总体。

图20.9: 均值 PPI 的数据分工。预测器独立训练;未标注样本与带标签样本相互独立,并来自同一目标总体。

20.7.3 一条恒等式给出一个估计量

对任意可积预测器 \(f\),有

\[\begin{equation} \mathbb E(Y)=\mathbb E\{f(X)\}+\mathbb E\{Y-f(X)\}. \tag{20.34} \end{equation}\]

因此可以用两份数据分别估计右侧两项:

\[\begin{equation} \widehat\mu_{\mathrm{PPI}} =\frac1N\sum_{j=1}^N f(\widetilde X_j) +\frac1n\sum_{i=1}^n\left[Y_i-f(X_i)\right]. \tag{20.35} \end{equation}\]

(20.35) 的第一项是大样本上的预测均值,第二项是有真实标签的小样本所提供的平均残差校正。在上述独立抽样与固定预测器条件下,直接取期望就得到

\[ \mathbb E(\widehat\mu_{\mathrm{PPI}})=\mu. \]

若模型平均高估结果,残差 \(Y-f(X)\) 的平均为负,第二项把估计拉回;若模型平均低估结果,则校正项为正。由此可见,纠偏依赖的是具有代表性的真实标签,而不是要求模型本来就完全无偏。

这个均值估计与调查抽样中的差分估计、模型辅助估计以及 Monte Carlo 中控制变量式的方差缩减思想有密切关系;PPI 将这种利用预测并纠偏的原则组织为适用于多类统计目标的推断框架。(Angelopoulos et al. 2023)

20.7.4 为什么校正后可能更精确

\(R=Y-f(X)\)。由于两份样本独立,

\[\begin{equation} \operatorname{Var}(\widehat\mu_{\mathrm{PPI}}) =\frac{\operatorname{Var}\{f(X)\}}{N} +\frac{\operatorname{Var}(R)}{n}. \tag{20.36} \end{equation}\]

只用真实标签的样本均值 \(\bar Y\) 的方差为 \(\operatorname{Var}(Y)/n\)。因此,PPI 是否更精确,应比较

\[ \frac{\operatorname{Var}\{f(X)\}}{N} +\frac{\operatorname{Var}\{Y-f(X)\}}{n} \quad\text{与}\quad \frac{\operatorname{Var}(Y)}{n}. \]

\(N\) 很大,且预测器能够解释结果变量的大部分变异时,第一项较小、残差方差也较小,便可能获得明显收益。若预测器很差,或者 \(N\) 不够大,原始 PPI 的方差也可能超过只使用真实标签的方法。

这里有个重要区别:平均误差小,不等于残差方差小。一个总是预测总体均值的常数模型,即使在平均意义上完全正确,也未必有助于提高效率。相反,一个具有固定偏移但很好地解释个体差异的模型,经校正后仍可能有用。

在方差有限、两组样本规模足够大等常规条件下,可使用渐近正态区间。记两组样本中的预测值与残差的样本方差分别为 \(s_f^2,s_R^2\),则

\[\begin{equation} \widehat{\operatorname{se}}\bigl(\widehat\mu_{\mathrm{PPI}}\bigr) =\sqrt{\frac{s_f^2}{N}+\frac{s_R^2}{n}}, \tag{20.37} \end{equation}\]

相应的近似 \(1-\alpha\) 置信区间为

\[\begin{equation} \widehat\mu_{\mathrm{PPI}} \pm z_{1-\alpha/2} \sqrt{\frac{s_f^2}{N}+\frac{s_R^2}{n}}. \tag{20.38} \end{equation}\]

这是通常的渐近区间,不是对任意有限样本都精确覆盖的结论。对于特殊分布或有界结果,可以研究其他区间构造;对于总体比例,偶尔超出 \([0,1]\) 的正态近似端点也需要按明确规则处理,而不是把方差公式省略。

均值 PPI 的计算步骤

  1. 明确目标总体,固定独立训练的预测器。
  2. 在未标注样本上计算预测均值和样本方差。
  3. 在带标签样本上计算残差均值和样本方差。
  4. 按式 (20.35) 得到点估计,按式 (20.37)(20.38) 计算标准误与区间。
  5. 同时计算只使用真实标签的基准估计,比较两种方法的精度。

20.7.5 一个可以算出抽样分布的例子

为分开说明偏差与方差,考虑如下教学模型:

\[ X\sim N(0,1),\qquad Y=2+X+\eta,\qquad \eta\sim N(0,0.36), \]

其中 \(\eta\)\(X\) 独立。真实目标是 \(\mu=2\)。固定预测器为

\[ f(X)=2.3+0.9X. \]

它平均高估0.3,但对 \(X\)\(Y\) 的关系把握得相当好。因为

\[ Y-f(X)=-0.3+0.1X+\eta, \]

\[ \operatorname{Var}(Y)=1.36,\quad \operatorname{Var}\{f(X)\}=0.81,\quad \operatorname{Var}\{Y-f(X)\}=0.37. \]

\(n=200,N=5000\),三种估计量的期望与理论标准误为:

估计方法 期望 理论标准误 对目标 \(\mu=2\) 的含义
标签均值 2.0 0.08246 无偏,波动较大
预测均值 2.3 0.01273 波动小,但有偏差
PPI 2.0 0.04486 无偏,波动减小

这些数值由给定模型的理论方差计算,不来自真实业务数据。由于模型线性且全部随机变量为高斯,这三个估计量的抽样分布在本例中都是正态分布。于是可以不做仿真,直接把它们的分布画出来。

20.10 同时画出三个抽样分布。每条曲线都使用自己的理论标准误,横轴表示估计值。

三种均值估计量的解析抽样分布。真实总体均值为 2;直接预测均值集中在 2.3 附近,PPI 用真实标签校正偏差并降低标签均值的抽样波动。

图20.10: 三种均值估计量的解析抽样分布。真实总体均值为 2;直接预测均值集中在 2.3 附近,PPI 用真实标签校正偏差并降低标签均值的抽样波动。

20.7.6 R 示例:均值校正与重复抽样

下面把点估计、标准误和区间写在同一函数中。输入的两个预测向量分别对应带标签样本和独立未标注样本;标签基准与 PPI 使用相同的真实标签。

ppi_mean <- function(y, pred_labeled, pred_unlabeled, level = 0.95) {
  residual <- y - pred_labeled
  estimate <- mean(pred_unlabeled) + mean(residual)
  se <- sqrt(var(pred_unlabeled) / length(pred_unlabeled) +
               var(residual) / length(residual))
  critical <- qnorm((1 + level) / 2)
  c(estimate = estimate, se = se,
    lower = estimate - critical * se, upper = estimate + critical * se)
}
ppi_experiment <- function(n = 200, N = 5000) {
  x_labeled <- rnorm(n)
  y <- 2 + x_labeled + rnorm(n, sd = 0.6)
  x_unlabeled <- rnorm(N)
  pred_labeled <- 2.3 + 0.9 * x_labeled
  pred_unlabeled <- 2.3 + 0.9 * x_unlabeled
  ppi <- ppi_mean(y, pred_labeled, pred_unlabeled)
  estimates <- c(mean(y), mean(pred_unlabeled), ppi["estimate"])
  standard_errors <- c(sd(y) / sqrt(n), sd(pred_unlabeled) / sqrt(N), ppi["se"])
  cbind(estimate = estimates, se = standard_errors,
        covered = abs(estimates - 2) <= qnorm(0.975) * standard_errors)
}
set.seed(2104)
ppi_runs <- replicate(1000, ppi_experiment())
knitr::kable(data.frame(
  方法 = c("只用标签", "直接预测", "PPI"),
  平均偏差 = rowMeans(ppi_runs[, "estimate", ]) - 2,
  经验标准差 = apply(ppi_runs[, "estimate", ], 1, sd),
  平均标准误 = rowMeans(ppi_runs[, "se", ]),
  区间覆盖率 = rowMeans(ppi_runs[, "covered", ])
), digits = 4, row.names = FALSE)
方法 平均偏差 经验标准差 平均标准误 区间覆盖率
只用标签 -0.0029 0.0861 0.0823 0.930
直接预测 0.2997 0.0125 0.0127 0.000
PPI -0.0018 0.0468 0.0450 0.941

本次模拟中,标签均值与 PPI 的区间覆盖率分别为 0.930 和 0.941。覆盖率的模拟结果同时受到有限次重复波动与区间近似的影响。这里通过重复抽样检查区间覆盖率:每次重新产生两份数据,并重新估计标准误。若覆盖率约为 \(0.95\),1000 次重复带来的覆盖率 Monte Carlo 标准误约为 \(\sqrt{0.95\times0.05/1000}=0.0069\)。直接预测区间针对 \(E\{f(X)\}\) 构造,表中将它与真实目标 \(\mu=2\) 比较,因此可以观察到系统偏差对覆盖率的影响。

这个例子揭示了统计推断中一种特别容易被大样本掩盖的风险:错误目标可以被估计得非常精确。增加未标注数据可以减小预测均值的方差,却不会自行消除固定的0.3偏差。需要真实标签才能估计并校正这一偏差。

20.7.7 与控制变量、交叉验证及更一般推断的联系

可以进一步引入一个固定权重 \(\lambda\)

\[\begin{equation} \widehat\mu_\lambda =\lambda\frac1N\sum_{j=1}^N f(\widetilde X_j) +\frac1n\sum_{i=1}^n\left[Y_i-\lambda f(X_i)\right]. \tag{20.39} \end{equation}\]

\(\lambda=0\) 恢复真实标签均值,\(\lambda=1\) 恢复基础 PPI。对任何固定的 \(\lambda\),恒等式仍保证无偏;方差则为

\[\begin{equation} \operatorname{Var}(\widehat\mu_\lambda) =\frac{\operatorname{Var}(Y)}n +\lambda^2\operatorname{Var}\{f(X)\}\left(\frac1n+\frac1N\right) -\frac{2\lambda\operatorname{Cov}\{Y,f(X)\}}n. \tag{20.40} \end{equation}\]

若不限制 \(\lambda\) 的范围,且预测方差为正,对这个二次函数求极值可得

\[\begin{equation} \lambda^*= \frac{\operatorname{Cov}\{Y,f(X)\}} {(1+n/N)\operatorname{Var}\{f(X)\}}. \tag{20.41} \end{equation}\]

10 章的控制变量方法也利用同样的思想:利用相关的辅助信息抵消估计中的波动。实际中需要估计权重,并对其数据依赖作相应分析;不能把“每个固定权重无偏”直接变成“在同一数据上随意挑选的权重也精确无偏”。PPI++ 研究了这类效率调节及更便于计算的推断方法。(Angelopoulos, Duchi, and Zrnic 2024)

13 章关于训练与评估分离的原则在这里同样适用。若预测器使用校正标签训练,残差可能过于乐观。独立训练是本章最清楚的基本方案;交叉拟合可以在合适条件下更有效地利用数据,但要使用相应理论和方差计算,其标准误应反映所使用的数据划分和依赖结构。

对于回归系数等更一般目标,思路是将预测带来的误差校正作用于估计方程或损失梯度,而不总是简单地在最终系数上加一个平均残差。相关方法见 (Angelopoulos et al. 2023; Angelopoulos, Duchi, and Zrnic 2024)。本节选择均值,是因为一条恒等式已经足以把基本原理讲透。

20.8 方法比较与计算结果的解释

本章的四个主体案例分别对应学习分布、保持分布、检测随机信号和估计总体参数。评价结果时,要把统计目标与计算指标对应起来。

方法 统计目标 关键计算 结果如何检查
DDPM 生成分布接近数据分布 高斯加噪、噪声回归、反向更新 分布形状、矩、拟合误差与生成样本误差
投机采样 保持给定目标分布 接受判断与残差抽样 输出频率、接受率与实际耗时
文本水印 检出与秘密规则的关联 锦标赛评分与检验校准 指定零假设下的误报率和检出率
PPI 估计真实总体参数 预测均值与残差校正 偏差、标准误、区间覆盖与效率

投机采样的正确性可以通过有限概率空间中的恒等式证明;DDPM 的生成质量还依赖学习误差和反向近似。水印检验的有效性取决于零假设及评分依赖;PPI 的区间则依赖抽样设计与预测器的数据来源。这些性质分别回答不同问题,一个较高的检测分数、较小的预测损失或较快的运行时间,都需要放回对应目标解释。

低秩适配和直接偏好优化提供了两种计算组织方式:前者决定参数更新的空间,后者利用偏好数据定义训练目标。两者可以结合使用,但低秩约束带来的表达限制、偏好模型的适用性和优化误差仍需分别考察。

20.9 进一步阅读

扩散模型可从 Ho, Jain, and Abbeel (2020) 的前向过程、噪声预测目标与采样算法读起,再阅读 Nichol and Dhariwal (2021) 关于噪声日程和反向方差的讨论。Y. Song et al. (2021) 将生成过程与得分函数、随机微分方程联系起来;J. Song, Meng, and Ermon (2021) 讨论另一类采样路径。Holderrieth and Erives (2025) 的讲义可用于继续学习扩散模型和流匹配。

投机采样的分布修正与批量验证见 Leviathan, Kalman, and Matias (2023)Chen et al. (2023)。文本水印的锦标赛机制、不同层次的非失真性质与重复上下文处理见 Dathathri et al. (2024);检测理论的进一步讨论见 Li et al. (2024)SynthID 官方说明 提供实现与检测器的配套资料 (Google 2026)

低秩适配与直接偏好优化分别见 Hu et al. (2022)Rafailov et al. (2023)。PPI 的均值估计与一般参数推断见 Angelopoulos et al. (2023),效率调节见 Angelopoulos, Duchi, and Zrnic (2024)。若继续学习预测集合,可阅读 Angelopoulos and Bates (2021) 关于共形预测(conformal prediction)的介绍:它主要研究新观测的预测集合覆盖,与本章 PPI 所讨论的总体参数推断具有不同目标。

20.10 本章小结

生成、采样、检测与推断把前面章节中的统计计算方法组织成了新的应用。DDPM 利用高斯条件分布和噪声回归学习反向生成过程;投机采样用接受与残差修正保持目标分布;文本水印通过随机评分建立可检测的关联;PPI 用真实标签校正预测误差,并利用辅助预测降低抽样波动。矩阵分解、优化、条件期望和 Monte Carlo 误差分析仍然是理解这些算法的基本工具。

使用现代模型时,首先明确要计算的分布或参数,再检查训练数据、随机机制和误差来源。本章中的低维算例给出了一种具体做法:先用解析结果核对计算步骤,再通过独立验证或重复抽样检查结果的统计含义。

20.11 思考题

  1. \(X_0\sim N(0,I)\),证明前向加噪后任意 \(X_t\) 仍服从 \(N(0,I)\)。这个结论对一般数据分布是否成立?
  2. 在双峰例子中,为什么给定 \(X_t=0\) 后的条件均值为零,却不适合作为条件分布的全部描述?
  3. 推导式 (20.9),解释为什么最优噪声预测器的平方误差通常仍大于零。
  4. \(p=(0.2,0.5,0.3)\)\(q=(0.4,0.4,0.2)\),计算投机采样的接受概率、残差分布和最终输出分布。若 \(q\) 某处为零而 \(p\) 为正,会发生什么?
  5. 某个草稿模型与目标模型十分接近,但自身计算代价也很高。接受率高是否足以保证加速?请列出还需测量的量。
  6. 在双词水印例子中,固定评分表后的概率与对评分表平均后的概率有何区别?为什么后者保持不变仍可存在检测信号?
  7. 推导式 (20.25)。当基础分布集中于单一词元时,为什么水印信号消失?
  8. 如果多个文本位置使用了同一评分表,直接套用独立二项检验可能有什么问题?式 (20.28) 的随机化检验需要哪些条件?
  9. 对常数预测器 \(f(X)=c\),将其代入 PPI 均值估计式。与真实标签均值比较,它是否提供精度收益?
  10. 推导固定权重 PPI 的方差与最优权重。若在同一份标签数据上选择权重,为什么不能直接沿用固定权重下的精确无偏结论?
  11. 为什么 LoRA 的两个因子不宜同时初始化为零?若缩放系数 \(c\ne1\),相应梯度如何变化?
  12. DPO 推导中消去的归一化项依赖什么变量?为什么比较同一问题的两个回答时它会抵消?

20.12 上机实验(Lab)

每份实验报告均应保留随机种子、数据生成参数、重复次数和计算代码,并将理论结果与模拟结果分开报告。

  1. Lab 1:加噪、回归与反向生成。 使用本章的双峰分布,完成以下计算。

    1. 固定 \(a=0.1,0.3,0.8\),分别产生训练集与验证集,用样条回归预测噪声。比较样本量、样条自由度与验证误差的关系。
    2. 在同一噪声日程下,核对递推模拟与闭式模拟的单时刻均值和方差;另画几条按递推式生成的前向轨迹。
    3. 用解析预测器完成反向生成,将独立生成样本分批,报告均值、方差和正值概率的波动。
    4. 改变终点噪声程度或反向步数,说明所做改变同时影响了哪些近似。报告噪声日程与终点 \(\bar\alpha_T\),不要仅用步数解释全部差异。
  2. Lab 2:投机采样的分布核对。

    1. 固定一个五点目标分布,构造三个与它距离不同的草稿分布,至少包含一个有零概率的草稿分布。
    2. speculative_one() 重复抽样,比较经验频率与目标概率,并报告相应 Monte Carlo 标准误。
    3. 核对接受率与式 (20.20) 的关系,再实现一个拒绝后直接按目标分布重抽的错误版本,找出其输出偏差。
    4. 讨论这个低维实验能验证什么,以及评估实际加速还缺少哪些计算环节。
  3. Lab 3:水印的信号与检验。

    1. 从八词均匀分布开始,每个位置独立产生一张新评分表,再利用本章的概率更新函数完成单层抽样。
    2. 重复产生长度为 50、100、200 的序列,比较经验误报率、检出率与二项公式。
    3. 随后让基础分布逐渐集中,观察平均评分如何变化;最后复用评分表,检查独立二项校准是否仍合适。
    4. 用同一批评分表比较嵌入与未嵌入结果时,应说明两种结果之间的依赖,以及每种检验使用的独立重复单位。
  1. 拓展 Lab:预测偏差与推断效率。

    1. 保留 \(Y=2+X+\eta\),将预测器改为 \(f(X)=b+cX\),分别改变偏移 \(b\)、斜率 \(c\)、标签数 \(n\) 和未标注数 \(N\)
    2. 对每种配置重复生成数据,报告三种均值估计的偏差、经验标准差、平均标准误与区间覆盖率。
    3. 找出基础 PPI 方差高于标签均值的配置,并用理论最优固定权重作对照。
    4. 解释为什么偏移主要影响直接预测的偏差,而残差方差决定校正后的精度。

参考文献

Angelopoulos, Anastasios N., and Stephen Bates. 2021. “A Gentle Introduction to Conformal Prediction and Distribution-Free Uncertainty Quantification.” arXiv:2107.07511. https://arxiv.org/abs/2107.07511.
Angelopoulos, Anastasios N., Stephen Bates, Clara Fannjiang, Michael I. Jordan, and Tijana Zrnic. 2023. “Prediction-Powered Inference.” arXiv:2301.09633. https://arxiv.org/abs/2301.09633.
Angelopoulos, Anastasios N., John C. Duchi, and Tijana Zrnic. 2024. “PPI++: Efficient Prediction-Powered Inference.” arXiv:2311.01453. https://arxiv.org/abs/2311.01453.
Chen, Charlie, Sebastian Borgeaud, Geoffrey Irving, Jean-Baptiste Lespiau, Laurent Sifre, and John Jumper. 2023. “Accelerating Large Language Model Decoding with Speculative Sampling.” arXiv:2302.01318. https://arxiv.org/abs/2302.01318.
Dathathri, Sumanth, Abigail See, Sumedh Ghaisas, et al. 2024. “Scalable Watermarking for Identifying Large Language Model Outputs.” Nature 634: 818–23. https://doi.org/10.1038/s41586-024-08025-4.
Google. 2026. SynthID: Tools for Watermarking and Detecting LLM-Generated Text.” Responsible Generative AI Toolkit. https://ai.google.dev/responsible/docs/safeguards/synthid.
Ho, Jonathan, Ajay Jain, and Pieter Abbeel. 2020. “Denoising Diffusion Probabilistic Models.” arXiv:2006.11239. https://arxiv.org/abs/2006.11239.
Holderrieth, Peter, and Ezra Erives. 2025. “An Introduction to Flow Matching and Diffusion Models.” arXiv:2506.02070. https://arxiv.org/abs/2506.02070.
Hu, Edward J., Yelong Shen, Phillip Wallis, Zeyuan Allen-Zhu, Yuanzhi Li, Shean Wang, Lu Wang, and Weizhu Chen. 2022. “LoRA: Low-Rank Adaptation of Large Language Models.” arXiv:2106.09685. https://arxiv.org/abs/2106.09685.
Leviathan, Yaniv, Matan Kalman, and Yossi Matias. 2023. “Fast Inference from Transformers via Speculative Decoding.” In Proceedings of the 40th International Conference on Machine Learning, 202:19274–86. Proceedings of Machine Learning Research. https://proceedings.mlr.press/v202/leviathan23a.html.
Li, Xiang, Feng Ruan, Huiyuan Wang, Qi Long, and Weijie J. Su. 2024. “A Statistical Framework of Watermarks for Large Language Models: Pivot, Detection Efficiency and Optimal Rules.” arXiv:2404.01245. https://arxiv.org/abs/2404.01245.
Nichol, Alexander Quinn, and Prafulla Dhariwal. 2021. “Improved Denoising Diffusion Probabilistic Models.” In Proceedings of the 38th International Conference on Machine Learning, 139:8162–71. Proceedings of Machine Learning Research. https://proceedings.mlr.press/v139/nichol21a.html.
Rafailov, Rafael, Archit Sharma, Eric Mitchell, Stefano Ermon, Christopher D. Manning, and Chelsea Finn. 2023. “Direct Preference Optimization: Your Language Model Is Secretly a Reward Model.” arXiv:2305.18290. https://arxiv.org/abs/2305.18290.
Song, Jiaming, Chenlin Meng, and Stefano Ermon. 2021. “Denoising Diffusion Implicit Models.” arXiv:2010.02502. https://arxiv.org/abs/2010.02502.
Song, Yang, Jascha Sohl-Dickstein, Diederik P. Kingma, Abhishek Kumar, Stefano Ermon, and Ben Poole. 2021. “Score-Based Generative Modeling Through Stochastic Differential Equations.” arXiv:2011.13456. https://arxiv.org/abs/2011.13456.