想象你是城里第一家“无限菜单”私房菜馆的老板。普通餐厅的菜单是开张前印死的:几道凉菜、几道热汤、一份甜点,数量固定,客人再多也只是把这几道菜反复重做。这类餐厅就像传统的参数模型——结构事先定好,“容量”是预设死的。但你的菜馆不一样:手里只有一张白纸菜单。第一位客人坐下,你为他研发一道新菜;第二位客人来了,可能想尝刚才那道,也可能请你再做一道新的。客人越多,菜单上的菜就越多;每道菜的“受欢迎程度”(顾客下单次数)又会自然形成轻重之分,这就是贝叶斯非参数的思想原型:模型的复杂度不靠人事先拍板,而是跟着数据走。 本文的两大主角——狄利克雷过程和高斯过程——正是这种“无限菜单”哲学的两种实现:狄利克雷过程负责“到底该开几道菜”(聚类数量自动生长),高斯过程负责“这道菜是什么火候、波动多大”(函数形状与置信区间)。读完后你会发现,许多工程里“拍脑袋定参数”的窘境,都能用这套框架优雅化解。

岗位关联

对 AI 从业者而言,掌握贝叶斯非参数意味着不再需要预设聚类数或模型容量,还能在调参、优化与不确定性评估中获得可量化的置信度,这是从“调包侠”进阶为“建模师”的关键一跃。

目录
  1. 可视化演示
  2. 非参数由来:菜单不是印死的
  3. 狄利克雷过程:分布的分布
  4. 中国餐馆过程:聚类的自然生长
  5. 高斯过程核心:给函数一个先验
  6. 核函数机制:味道的相似度地图
  7. 工程应用:何时动用无限菜单
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

展示系统处理流水线、实时性能指标曲线及多方案对比分析,包含数据流转、吞吐延迟监控与方案评估。

本节配有交互动效(进入视口后自动加载,约 3KB)。

系统可视化 处理流程:输入→处理→模型→输出 性能监控:实时指标 P=L×T

非参数由来:菜单不是印死的

传统参数模型像一家开张前就印好菜单的餐厅:三菜一汤,明码标价。你的参数 θ 就是那几个“旋钮”——盐放多少、火候多大,全部预设好,之后只调数值、不改结构。这类模型在小数据时容易“过度发挥”(过拟合),数据多了又“施展不开”(欠拟合),本质原因是容量被参数个数锁死了。

贝叶斯非参数从另一个角度看问题:与其纠结“该选几个参数的模型”,不如给模型一张无限长的菜单,让数据来决定动用多少道菜。这里的“非参数”不是说没有参数,而是参数的数量本身成为随机变量,可以随样本量增长。

为了让这个思想落地,贝叶斯学派提供了一个干净的框架:把参数也当作随机变量,用后验分布去刻画不确定性。于是模型容量不再是工程师拍脑袋的整数,而是数据一步步“写”出来的。

回到比喻里:固定菜单的餐厅哪怕客似云来,翻来覆去也只有三道菜。贝叶斯非参数想的则是——让菜单跟着客人走,新客带来新菜,旧菜若受欢迎就保留,若无人问津自然淘汰。这就是容量自适应的直觉起点。

L(θ)=∏n=1Np(yn∣θ)\displaystyle \mathcal{L}(\theta) = \prod_{n=1}^{N} p(y_n \mid \theta)
这个公式是参数模型的“宣言”:所有数据点的概率相乘,假设它们独立同分布,且共享同一套固定维度的参数 θ。参数模型的所有局限,都藏在 θ “固定维度”这四个字里。
  1. 似然函数上场$\mathcal{L}(\theta)$ 表示在参数 θ 下观测到整批数据 $y_1, \dots, y_N$ 的可能性,它是 θ 的函数。
    L(θ)=∏n=1Np(yn∣θ)\mathcal{L}(\theta) = \prod_{n=1}^{N} p(y_n \mid \theta)
  2. 连乘符号$\prod$ 把每个样本的概率乘在一起,前提是样本之间相互独立,这是简化计算的常用假设。
    ∏n=1Np(yn∣θ)=p(y1∣θ)×p(y2∣θ)×⋯×p(yN∣θ)\prod_{n=1}^{N} p(y_n \mid \theta) = p(y_1 \mid \theta) \times p(y_2 \mid \theta) \times \cdots \times p(y_N \mid \theta)
  3. 参数向量$\theta$ 的维度在建模前就被固定,例如高斯分布里的均值和方差两个数,它决定了模型的“花样”上限。
    θ=(μ,σ2)\theta = (\mu, \sigma^2)
  4. 容量瓶颈不管数据量涨到多少,模型的表达空间仍然由 θ 的维度限制,这就是“固定菜单”的宿命。
    容量=dim⁡(θ)\text{容量} = \dim(\theta)

狄利克雷过程:分布的分布

现在你要为“无限菜单”立规矩:一份菜单可以无限长,但每道菜的“权重”(被点概率)必须满足某种先验规律。狄利克雷过程(Dirichlet Process, DP)就是“菜谱的食谱”——它自己不直接制定菜单,而是为“菜单的生成过程”指定概率规则,所以叫“分布的分布”。

狄利克雷分布是最基础的“配料规则”:给你 K 种口味,每种口味的比例服从一个 Dirichlet 分布。狄利克雷过程把这条规则推广到无限维:无论你把参数空间切成多少块,这些块上的概率分配都服从对应的狄利克雷分布。

(G(A1),G(A2),…,G(AK))∼Dir ⁣(αH(A1),αH(A2),…,αH(AK))\displaystyle (G(A_1), G(A_2), \ldots, G(A_K)) \sim \mathrm{Dir}\!\left(\alpha H(A_1), \alpha H(A_2), \ldots, \alpha H(A_K)\right)

1. 随机分布 G:$G$ 是定义在参数空间上的随机分布,每次采样都会得到一张“新菜单”。

G∼DP(α,H)G \sim \mathrm{DP}(\alpha, H)

2. 任意有限划分:把整个空间切成互不重叠的 $K$ 块 $A_1, \ldots, A_K$,比如把“口味空间”切成酸甜苦辣四格。

A1∪A2∪⋯∪AK=ΩA_1 \cup A_2 \cup \cdots \cup A_K = \Omega

3. 狄利克雷分布:$G$ 落在这些块上的概率 $(G(A_1), \ldots, G(A_K))$ 服从参数为 $\alpha H(A_k)$ 的狄利克雷分布。

Dir(αH(A1),…,αH(AK))\mathrm{Dir}(\alpha H(A_1), \ldots, \alpha H(A_K))

4. 基础分布 H:$H$ 决定“新菜”的候选口味从哪里抽;$\alpha$ 越大,$G$ 越贴近 $H$,越“规矩”。

αH(Ak) 同时是权重与"浓度"\alpha H(A_k) \text{ 同时是权重与"浓度"}

用餐馆的话说:$H$ 是你备菜的大框架(比如“川菜为主、粤菜为辅”),$\alpha$ 是你创新和守旧之间的偏好。$\alpha$ 小,厨师几乎每桌都翻新花样;$\alpha$ 大,厨师则老老实实按基本功出菜。狄利克雷过程保证了无论菜单多长,所有菜品的概率加起来永远是 1。

中国餐馆过程:聚类的自然生长

光有“分布的分布”还不够,你还需要一个能动手操作的生成故事——这就是中国餐馆过程(Chinese Restaurant Process, CRP)。假设餐馆里已有若干桌客人,每桌代表一个聚类。新进来的顾客看到人多的桌子,想凑热闹坐过去;但如果每桌都太挤,也可能干脆开一桌新席。

规则简单得惊人:新客坐到第 $i$ 桌的概率与该桌人数 $n_i$ 成正比,开新桌的概率与 $\alpha$ 成正比。这个规则让“聚类数”不再是预设参数,而是数据自然长出来的结果——坐在一起的顾客就是同一道菜的拥趸,每一桌就是狄利克雷过程混合模型中的一个分量。

回看可视化演示里那张动态图:顾客一个接一个进场,有的加入人多的桌,有的开辟新桌。你不需要告诉系统“分成几桌”,桌子数自己会长出来。这正是狄利克雷过程混合模型做聚类的核心魅力——簇数自由。而且,中国餐馆过程具有“可交换性”:顾客入座的先后顺序不影响最终分组的联合概率,这为后验推断的随机采样算法(如 Gibbs 采样)提供了理论保障。

P(新客坐第 i 桌)=niN+α,P(新客开新桌)=αN+α\displaystyle P(\text{新客坐第 } i \text{ 桌}) = \frac{n_i}{N + \alpha}, \qquad P(\text{新客开新桌}) = \frac{\alpha}{N + \alpha}
这两个公式拼起来是一套完整的“入座策略”:旧桌越热闹,越吸引新客;$\alpha$ 越大,人越愿意尝鲜开新桌。分母 $N + \alpha$ 保证所有概率加起来恰好等于 1。
  1. 当前桌况$n_i$ 是第 $i$ 桌的现有顾客数,$N$ 是全店总人数,$i$ 遍历所有已有桌子。
    N=∑iniN = \sum_{i} n_i
  2. 从众概率新客加入第 $i$ 桌的概率与该桌人数成正比,人数越多越“聚气”。
    P∝niP \propto n_i
  3. 开新桌概率分子是集中参数 $\alpha$,它像“好奇心指数”,决定顾客多大概率放弃旧桌、另起炉灶。
    P∝αP \propto \alpha
  4. 归一化验证所有旧桌概率与开新桌概率相加等于 1,因为分子总和恰好是 $N + \alpha$。
    n1+n2+⋯+nm+αN+α=N+αN+α=1\frac{n_1 + n_2 + \cdots + n_m + \alpha}{N + \alpha} = \frac{N + \alpha}{N + \alpha} = 1

高斯过程核心:给函数一个先验

狄利克雷过程管“离散的聚类”,高斯过程(Gaussian Process, GP)则管“连续的函数”。回到餐馆比喻:你已经决定开哪些菜,但还需要知道每道菜的火候曲线——温度随时间怎样变化、口感随盐量怎样起伏。高斯过程就是对“函数本身”赋予先验的优雅方式:$f(x)$ 不再是一个确定的公式,而是一个随机函数。

一个高斯过程由一个均值函数 $m(\mathbf{x})$ 和一个协方差函数(核函数)$k(\mathbf{x}, \mathbf{x}')$ 完全确定。均值函数告诉你函数的“基准走向”,协方差函数告诉你“两个点的函数值如何联动”——相邻近的点,火候往往相似。

在餐馆里,高斯过程就是老厨师的“手感分布”:没试过的新菜,他只能凭经验给出一个大致的味道区间;一旦尝过几口(观测数据),他的把握就迅速提升,置信区间收窄。这正是“小数据 + 不确定度”场景下 GP 的核心优势——它不但给出预测值,还诚实地说出“这条预测我有多确定”。

f(x)∼GP ⁣(m(x), k(x,x′))\displaystyle f(\mathbf{x}) \sim \mathcal{GP}\!\left(m(\mathbf{x}),\, k(\mathbf{x}, \mathbf{x}')\right)
类比来看:均值函数是厨师脑中的“标准火候曲线”,核函数是“同灶台感应”——两个时间点离得越近,火候误差越可能一起起伏。整体而言,高斯过程把“函数”当成一个无限维的高斯随机变量来对待。
  1. 随机函数 $f(\mathbf{x})$对任意输入 $\mathbf{x}$,$f(\mathbf{x})$ 是个随机变量;整条函数曲线是所有点上随机变量的联合分布。
    f(x)∼GP(m,k)f(\mathbf{x}) \sim \mathcal{GP}(m, k)
  2. 均值函数 $m(\mathbf{x})$描述全局趋势,相当于“标准菜谱”的基线,常取零作为先验。
    m(x)=E[f(x)]m(\mathbf{x}) = \mathbb{E}[f(\mathbf{x})]
  3. 协方差函数 $k(\mathbf{x}, \mathbf{x}')$描述任意两点函数值的相关性,核函数由此登场。
    k(x,x′)=Cov(f(x),f(x′))k(\mathbf{x}, \mathbf{x}') = \mathrm{Cov}(f(\mathbf{x}), f(\mathbf{x}'))
  4. 任意有限维投影无论取多少个输入点,它们的函数值都服从多元高斯分布——这是高斯过程的定义基石。
    f=(f(x1),…,f(xN))⊤∼N(μ,K)\mathbf{f} = (f(x_1), \ldots, f(x_N))^\top \sim \mathcal{N}(\mu, K)

核函数机制:味道的相似度地图

高斯过程的性格很大程度上由核函数决定。核函数 $k(\mathbf{x}, \mathbf{x}')$ 回答一个问题:两个输入点有多像? 在餐馆比喻里,它是“味道相似度地图”——同样是辣椒,四川二荆条和陕西线椒的“味觉距离”就很近;引入椰浆的菜和麻辣口的菜,距离就远。

最常用的核函数是 RBF(径向基核,也叫高斯核),它假设相似度随距离平滑衰减:

核函数的选择本质是把你对世界的先验知识编码进模型:如果认为函数周期变化,就选周期核;如果认为平滑连续,就选 RBF;如果数据带噪声,可在核上叠加白噪声项。工程上常通过最大化边际似然来调优超参数 $\ell$ 和 $\sigma^2$——这相当于让厨师自己反复试菜,找到最贴合真味的“手感标度”。

k(x,x′)=σ2exp⁡ ⁣(−∥x−x′∥22ℓ2)\displaystyle k(\mathbf{x}, \mathbf{x}') = \sigma^2 \exp\!\left(-\frac{\|\mathbf{x} - \mathbf{x}'\|^2}{2\ell^2}\right)
公式里的 $\ell$(长度尺度)控制“多远算近”:$\ell$ 小,函数波动剧烈,细节丰富;$\ell$ 大,函数平滑缓和,趋于整体趋势。$\sigma^2$ 控制整体输出幅度,相当于所有菜品口味重量的基准。
  1. 关键距离$\|\mathbf{x} - \mathbf{x}'\|^2$ 是两点欧氏距离的平方,距离越远相似度衰减越快。
    ∥x−x′∥2=∑d=1D(xd−xd′)2\|\mathbf{x} - \mathbf{x}'\|^2 = \sum_{d=1}^{D}(x_d - x'_d)^2
  2. 长度尺度 $\ell$分母中的 $2\ell^2$ 决定衰减速度,$\ell$ 越大曲线越平缓。
    ℓ↑⇒功能平滑缓慢\ell \uparrow \Rightarrow \text{功能平滑缓慢}
  3. 方差幅度 $\sigma^2$整体乘子控制函数值的涨落范围,越大越“重口味”。
    σ2↑⇒输出波动幅度增大\sigma^2 \uparrow \Rightarrow \text{输出波动幅度增大}
  4. 核函数即协方差$k$ 的值就是高斯过程里两点函数值的协方差,它把“相似度”翻译成数学上的相关性。
    k(x,x′)=Cov(f(x),f(x′))k(\mathbf{x}, \mathbf{x}') = \mathrm{Cov}(f(\mathbf{x}), f(\mathbf{x}'))

工程应用:何时动用无限菜单

贝叶斯非参数不是万能药,但有一种场景它格外闪耀:数据稀缺且必须报出置信度。当你的样本点只有十几个时,深度神经网络只能“乱猜”,而高斯过程回归能在小样本下给出平滑的后验均值与可信区间。同理,当聚类数不确定时,狄利克雷过程混合模型能自动决定分几群。

用餐馆的话说:小本经营的深夜食堂,菜单不需要像连锁餐厅那样备上百道菜,客人来了现做现试,靠的是“给每道菜一个置信度”的手感。GP 后验预测的核心公式是:

工程落地时还要心里有数:GP 的训练需要对 $N \times N$ 的核矩阵求逆,复杂度是 $\mathcal{O}(N^3)$,数据量超过几千时需要使用稀疏近似(如 inducing point 方法)。DPM 的 Gibbs 采样同样面临簇数随机游走的收敛问题。总之,非参数方法擅长的是“数据少、要置信、结构未知”的精细活,而不是“海量数据堆算力”的粗重活。知道什么场景用它,比学会公式本身更重要。

μ′(x∗)=m(x∗)+K∗⊤(K+σn2I)−1(y−m(X)),σ′2(x∗)=k−K∗⊤(K+σn2I)−1K∗\displaystyle \mu'(\mathbf{x}_*) = m(\mathbf{x}_*) + K_{*}^\top (K + \sigma_n^2 I)^{-1}(\mathbf{y} - m(\mathbf{X})), \qquad \sigma'^2(\mathbf{x}_*) = k_{} - K_{*}^\top (K + \sigma_n^2 I)^{-1} K_{*}
这两行公式描述了“尝过菜之后如何修正手感”:后验均值 = 先验均值 + 数据残差的加权修正;后验方差 = 先验方差 − 数据带来的不确定性削减。观测越多,修正越准,区间越窄。
  1. 先验均值修正$\mu'(\mathbf{x}_*)$ 在先验基础 $m(\mathbf{x}_*)$ 上叠加一个由训练残差 $(\mathbf{y} - m(\mathbf{X}))$ 驱动的更新项。
    μ′=m(x∗)+K∗⊤(K+σn2I)−1(y−m(X))\mu' = m(\mathbf{x}_*) + K_{*}^\top(K + \sigma_n^2 I)^{-1}(\mathbf{y} - m(\mathbf{X}))
  2. 噪声正则$(K + \sigma_n^2 I)^{-1}$ 中的 $\sigma_n^2 I$ 给对角线加噪声,防止矩阵奇异,也吸收观测误差。
    (K+σn2I)−1(K + \sigma_n^2 I)^{-1}
  3. 交叉核 $K_{*}$$K_*$ 是新点 $\mathbf{x}_*$ 与训练点的协方差向量,衡量“新客与旧客的相似度”,相似度越高,旧数据对新预测影响越大。
    K∗=[k(x∗,x1),…,k(x∗,xN)]⊤K_* = [k(\mathbf{x}_*, \mathbf{x}_1), \ldots, k(\mathbf{x}_*, \mathbf{x}_N)]^\top
  4. 方差收缩$\sigma'^2(\mathbf{x}_*)$ 等于先验方差 $k_{}$ 减去一个正项,观测让不确定度严格下降。
    σ′2=k−K∗⊤(K+σn2I)−1K∗\sigma'^2 = k_{} - K_{*}^\top(K + \sigma_n^2 I)^{-1}K_{*}

AI 应用场景

贝叶斯超参数优化(AutoML / 调参平台)

阶段:模型选择与超参数调优

解决的问题:传统网格搜索/随机搜索像“盲品菜”——每次试一道菜,完全不参考前几次的味道反馈。高斯过程优化的思路是:用 GP 作为“代理模型”拟合超参数与验证集效果的关系,每次尝试都能利用后验均值与方差选择合适的下一组超参数(采集函数例如 UCB 或 EI),大大减少调参次数。

具体案例:某推荐系统团队要调整 LightGBM 的学习率、最大深度和叶子节点数。使用 GP-BO 代理模型,仅用 30 次试验就达到了网格搜索 200 次试验的效果,并且每次试验都附带置信区间,避免在无望区域浪费算力。

客户自动分群(用户增长与精细化运营)

阶段:无监督聚类与业务洞察

解决的问题:做用户画像时最头疼的是“到底分几类客户”。传统 K-Means 需要先指定 K,选错了就反复重跑。狄利克雷过程混合模型(DPMM)自动从数据中学习聚类数,且新用户进来可以实时“入座”已有群组或开辟新群。

具体案例:某电商平台用 DPMM 对 12 万活跃用户做消费行为分群,模型自动发现 7 个显著群组(包括“高客单低频”、“低客单高频”等),为运营提供了比固定 5 类人工分群更精细的洞察。

时序异常检测与可靠性预估(运维监控)

阶段:在线推断与不确定性监控

解决的问题:监控系统报警需要区分“真异常”和“正常波动”。GP 对时序建模给出预测区间,当真实值落在 95% 置信区间之外时才判定异常,大幅降低误报;对缺失数据的小窗口,GP 也能给出带不确定性的插值。

具体案例:某云厂商用 GP 对 CPU 利用率序列建模,将误报率从阈值法的 30% 降至 8%,并在故障发生前 12 分钟捕捉到置信区间的持续收紧趋势。

Python 演示

python64 行
"""狄利克雷过程混合模型:中国餐馆过程采样演示"""import random  class ChineseRestaurantProcess:    """中国餐馆过程:顾客依次入座,倾向坐人多的旧桌或开新桌"""     def __init__(self, alpha=1.0):        self.alpha = alpha        # 集中参数:开新桌的倾向        self.tables = []          # 每桌人数        self.seats = []           # 每位顾客分配的桌号     def seat(self, n):        """安排 n 位顾客依次入座"""        if not self.seats:            self.tables.append(1)            self.seats.append(0)        for _ in range(len(self.seats), n):            total = len(self.seats)            probs = [t / (total + self.alpha) for t in self.tables]            probs.append(self.alpha / (total + self.alpha))            table = self._draw(probs)            if table < len(self.tables):                self.tables[table] += 1                self.seats.append(table)            else:                self.tables.append(1)                self.seats.append(len(self.tables) - 1)     def _draw(self, probs):        """按概率分布返回一个下标"""        r = random.random() * sum(probs)        acc = 0.0        for i, p in enumerate(probs):            acc += p            if r < acc:                return i        return len(probs) - 1     def describe(self):        return {            "顾客总数": len(self.seats),            "聚类数(桌数)": len(self.tables),            "每桌人数": self.tables,        }  def run(alpha, n):    random.seed(7)    crp = ChineseRestaurantProcess(alpha=alpha)    crp.seat(n)    summary = crp.describe()    print("alpha =", alpha, "| 顾客数 =", n)    print("桌子数:", summary["聚类数(桌数)"])    print("每桌人数:", summary["每桌人数"])    total = len(crp.seats)    p_new = alpha / (total + alpha)    print("下一位顾客开新桌概率: %.3f" % p_new)    print()  if __name__ == "__main__":    for a in [0.5, 2.0, 8.0]:        run(a, 50)
目的:实现中国餐馆过程采样,观察集中参数 α 如何影响聚类数量。运行后可以看到:α 越大,形成的“桌子”(聚类)越多,每桌人数越分散。
  1. probs = [t / (total + self.alpha) for t in self.tables]计算新客坐入每一张旧桌的概率,人数多的桌吸引力更大。
  2. probs.append(self.alpha / (total + self.alpha))把“开新桌”作为一个额外的选择追加到概率表末尾。
  3. table = self._draw(probs)按概率分布随机抽取一个目标桌号(可能是旧桌,也可能指向新桌)。
  4. if table < len(self.tables)若抽到已有桌则人数加一;否则说明抽到了“新桌”分支,创建一张新桌。
  5. random.seed(7)固定随机种子让实验结果可复现,便于对比不同 α 的聚类效果。

常见误区

误区“非参数”是不是说模型里一个参数都没有?那是不是就不用学习了?我看代码里全是一堆随机变量,感觉完全没有可训练的东西。

正解“非参数”实际含义是参数数量不受限,或者说参数空间是无限维的。以 DPMM 为例,混合分量本身有均值、方差等参数,但这些参数的数量随数据增长而增长。你可以把 θ 想象成一张无限长的菜单——菜的数量在变,但每道菜都有自己的配方和权重。没有参数的说法完全是想当然。

为何常见:“非参数”这个术语在统计学里确实反直觉(另有非参数检验等完全不同的用法),字面上极易被误解为“无参数”。

误区用狄利克雷过程混合模型做聚类,虽然我不确定 K,但总得给个大致的候选簇数吧?我看 sklearn 里 K-Means 都是要填 n_clusters 的。

正解DPMM 的核心优势恰恰是不需要指定 K。中国餐馆过程通过 $\alpha$ 控制开新桌倾向,数据自己决定最终出现多少个簇。如果你非要告诉模型一个 K,那就退化成了固定分量数的有限混合模型。当然,实际工程里为了计算方便可能会设置一个簇数上限,但那是数值近似手段,不是模型本身的约束。

为何常见:因为大多数入门者先学了 K-Means/GMM,养成了“聚类必须先给 K”的惯性思维,看到 DP 时下意识套用旧框架。

误区α 是“开新桌”的概率参数,我觉得它越大说明老板越爱凑热闹,新客户都喜欢往一桌挤,所以每个簇应该更聚合。

正解正好相反,α 越大代表新客越倾向开新桌(新簇),结果是簇数变多、每簇人数变少、簇更碎。α 小的时候顾客更爱坐旧桌,簇数少而每簇聚集度高。直观理解:$\alpha$ 是“好奇心指数”,好奇的人多了,饭馆被迫不断支新桌。

为何常见:容易把 α 直接理解成“亲密度”,忽略了它在 CRP 公式里占据的是“新桌”分子的位置。

误区GP 回归不就是把散点连成平滑曲线吗?那和多项式拟合有什么区别,甚至没有神经网络强大。

正解GP 与插值法的本质差异在于它输出后验分布——每个预测点都有一个均值和方差,方差衡量该点的可信度。这是神经网络在标准训练方式下很难自然给出的(需要额外做 MC Dropout 或 ensemble 才能近似)。在贝叶斯优化、主动学习等需要“探索不确定性”的任务中,这条置信区间就是算法的决策地图。

为何常见:如果用 sklearn 的 GaussianProcessRegressor 默认参数做简单回归,视觉上确实只看到一条拟合曲线,容易让人误以为它只是平滑插值工具。

面试题

Q1. 贝叶斯非参数模型的核心思想是什么?

单选题 · easy

  • A.参数数量固定不变,只更新数值
  • B.模型复杂度随数据量自动增长← 正确答案
  • C.完全不使用任何参数和概率
  • D.数据必须预先清洗到同样规模

答案:B。贝叶斯非参数的本质是让“参数数量”本身成为随机变量,随着观测数据增多,模型复杂度自适应增长——就像无限菜单随客人增多不断加菜。选项 A 描述的是固定参数模型,C 是字面误解,D 与模型容量无关。

Q2. 中国餐馆过程中,新顾客开一张新桌的概率是多少?

单选题 · easy

  • A.α 除以当前总人数 N 加 α← 正确答案
  • B.当前第一桌人数除以总人数
  • C.一减去当前所有旧桌概率之和
  • D.现有顾客总数除以 α 加一

答案:A。CRP 的开新桌概率是 $\alpha / (N + \alpha)$。选项 A 与此一致。B 描述的是“坐第一桌”的概率;C 说得对但太绕,且不是公式的正面表达;D 的分母写反了,没有这样的公式。

Q3. 设 G ~ DP(α, H),对任意有限划分 (A₁,…,A_K),下列哪个结论正确?

单选题 · mid

  • A.G(Aᵢ) 之和恒等于零
  • B.(G(A₁),…,G(A_K)) 服从狄利克雷分布← 正确答案
  • C.G(Aₙ) 各分量服从独立的正态分布
  • D.G(Aᵢ) 的大小完全由样本标签决定

答案:B。DP 的定义要求任意有限划分上的概率向量服从 $\mathrm{Dir}(\alpha H(A_1), \ldots, \alpha H(A_K))$,所以 B 正确。A 应为概率和为 1;C 混淆了高斯过程与 DP;D 将观测数据的角色错位,G 是分布的先验,不由样本标签决定。

Q4. 在其他条件不变时,增大集中参数 α 对狄利克雷过程混合模型的影响是?

单选题 · hard

  • A.所有簇的直径自动变大
  • B.新簇产生的倾向增强← 正确答案
  • C.每个样本固定分配到同一簇
  • D.混合分量的总数先减后增

答案:B。α 位于 CRP 开新桌公式的分子,α 增大 → 新客开新桌概率上升 → 生成更多簇。这与“好奇心指数”的直觉一致。A 由核函数或分量方差控制,与 α 无关;C 对应 α→0 的极限;D 不存在“先减后增”的单调关系。

Q5. 关于高斯过程,以下哪些说法是正确的?

多选题 · hard

  • A.适合小样本下的不确定性量化← 正确答案
  • B.需要样本量为无限大才能预测
  • C.由均值函数和协方差函数完全确定← 正确答案
  • D.无法给出预测的置信区间

答案:AC。GP 由均值函数 m(x) 和协方差函数 k(x,x') 完全定义,后验预测给出均值与方差,因此 A、C 正确。GP 恰恰擅长小样本场景,B 相反;D 是常见误解,置信区间是 GP 的核心输出之一。

Q6. 高斯过程回归的预测输出通常包含什么?

单选题 · mid

  • A.点估计均值与方差← 正确答案
  • B.聚类标签和簇中心
  • C.只有最可能的单一数值
  • D.特征重要度排序表

答案:A。GP 回归基于后验分布输出每个新点的均值 $\mu'(x_*)$ 和方差 $\sigma'^2(x_*)$,方差即不确定性区间。B 是聚类任务的产物;C 丢掉方差就丧失了 GP 的关键价值;D 是树模型等方法的输出。

Q7. RBF 核函数 k(x,x')=σ²exp(-‖x-x'‖²/2ℓ²) 中,长度尺度 ℓ 的作用是什么?

单选题 · mid

  • A.控制函数波动的快慢← 正确答案
  • B.决定训练样本的数量
  • C.设置输出类别的个数
  • D.开启训练数据增强

答案:A。ℓ 控制“多远算近”,ℓ 小则相似度随距离快速衰减,函数波动剧烈、细节丰富;ℓ 大则函数平滑。这个超参数与样本量、类别数、数据增强均无关。

Q8. 下面哪些场景适合使用贝叶斯非参数方法?

多选题 · easy

  • A.聚类数量未知的客户分群← 正确答案
  • B.需要置信区间的黑盒优化← 正确答案
  • C.未采集任何数据的冷启动推荐
  • D.固定十个类别的图像分类任务

答案:AB。DPMM 适合簇数未知的聚类(A),GP 适合需要不确定性的黑盒优化(B)。C 中“完全没有数据”无法启动任何数据驱动模型;D 的类别固定时用参数模型更直接,没有必要引入非参数复杂度。

Q9. 中国餐馆过程中的“可交换性”指的是什么?

单选题 · extreme

  • A.顾客入座的先后顺序不影响联合概率← 正确答案
  • B.任意两桌的人数必须完全相等
  • C.老板可以随意换掉任何一位客人
  • D.桌位分布完全不受参数 α 影响

答案:A。CRP 是一个可交换的随机分区:把顾客的顺序打乱后,同一分组出现的联合概率不变。这保证了 Gibbs 采样等 MCMC 方法可以逐个更新分配而无需关心序列。B 是强加的无意义约束;C 是字面歧义;D 与 α 的定义冲突。

Q10. 与固定参数模型相比,贝叶斯非参数方法最突出的工程价值是什么?

单选题 · mid

  • A.自动适配模型容量并表达不确定性← 正确答案
  • B.完全避免过拟合和欠拟合
  • C.将训练时间降为零开销
  • D.不需要任何先验分布假设

答案:A。非参数方法让模型容量随数据生长(自动适配),并天然输出置信区间(表达不确定性)。但它不能完全杜绝过拟合,训练往往更慢,也仍然需要先验设置(如 H 和 α),因此 B、C、D 均不成立。