ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

D2L.ai 贝叶斯深度学习指南:3 步让模型学会说“我不确定“

D2L.ai 贝叶斯深度学习指南:3 步让模型学会说“我不确定“

D2L.ai 贝叶斯深度学习指南:3 步让模型学会说"我不确定"

【免费下载链接】d2l-enInteractive deep learning book with multi-framework code, math, and discussions. Adopted at 500 universities from 70 countries including Stanford, MIT, Harvard, and Cambridge.项目地址: https://gitcode.com/gh_mirrors/d2/d2l-en

D2L.ai 用交互式 notebook 系统讲解贝叶斯深度学习与不确定性估计:从函数空间的高斯过程先验,到可直接运行的高斯过程回归示例,帮助新手让模型量化自身预测的可靠程度。

从一颗"看起来能吃"的蘑菇说起

想象你在后院发现一颗蘑菇,训练好的分类器对你说:"有 80% 的概率它不是毒菇。"你敢吃吗?大概率不敢。问题不在于准确率高低,而在于模型只给了一个数字,却没告诉你"这个判断有多靠谱"。

图:D2L.ai 用"见手青式"毒蘑菇举例——80% 的置信度在生死问题上依然不够安全

这就是传统深度学习的通病:它习惯输出一个"最终答案",而不会主动暴露自己的犹豫。不确定性估计(uncertainty estimation,即让模型对每个预测附带一个"可靠程度"的度量)正是为此而生的。D2L.ai 在 chapter_introduction/index.md 中就以此类场景切入,说明为什么"最可能的类别"未必等于"该做的决定"。

两种不确定性:模型不懂,还是世界本来就吵?

在动手之前,先分清两种不确定性,这是理解整个贝叶斯方法的关键:

  • 认知不确定性(epistemic uncertainty,"模型因为信息不足而不知道"):数据稀疏的地方,模型应该承认自己没把握;数据越多,它会越有把握。这类不确定性是可以被数据消除的。
  • 数据不确定性(aleatoric uncertainty,"数据本身带噪声"):比如传感器精度有限,就算给你无限数据也消不掉。

D2L.ai 在 chapter_gaussian-processes/gp-inference.md 中专门强调了这一点:很多人画"误差棒"时从不说明它代表哪种不确定性——不说明来源的误差条基本没有意义。分清这两者,你才知道该去采集更多数据,还是该去升级传感器。

高斯过程:把"先验"直接画在函数上

贝叶斯深度学习(Bayesian deep learning)的核心思路是:不在"某组固定权重"上打转,而是对整个解空间做概率推理。其中高斯过程(Gaussian Process,GP,一种定义在"函数"而非"参数"上的概率分布)是最直观的工具。

传统建模是在参数空间思考:给网络一个初始权重,再想办法把权重调好。高斯过程换个视角,直接在函数空间提问:"所有可能拟合这组数据的函数里,哪些更可信?"

高斯过程定义为"一组随机变量,其中任意有限个的联合分布都是高斯分布"。若 $f(x) \sim \mathcal{GP}(m, k)$,则任意输入点上的函数值都服从一个多元高斯分布,由均值函数 $m(x)$ 与核函数 $k(x, x')$ 完全刻画。 —— 摘自 chapter_gaussian-processes/gp-priors.md

听起来抽象,其实就三步:选定一组输入点、用核函数算出它们两两之间的协方差、从这个多元高斯里采样。你会得到一簇"看起来合理的候选函数",而不是唯一一条曲线。

这里的关键部件是核函数(kernel,一个描述"两个输入点的函数值有多相关"的公式)。最常用的 RBF 核只有两个超参数:振幅 $a$ 控制函数上下摆动的幅度,长度尺度 $\ell$ 控制函数变化快慢。$\ell$ 大,曲线平缓、远处也相关;$\ell$ 小,曲线颠簸、离开数据点一点就不敢外推。D2L.ai 用一整组图演示了不同 $\ell$ 下采样函数和预测区间如何变化,见 chapter_gaussian-processes/gp-intro.md。

还有一个常被忽视的联系:把神经网络隐层宽度推向无穷,它退化成的就是一个带特定核的高斯过程。也就是说,高斯过程与深度神经网络不是竞争关系,而是同一枚硬币的两面——前者给了后者一个分析泛化行为的数学透镜。

跟着 D2L.ai 跑通高斯过程回归(3 步)

理解之后,动手成本很低。D2L.ai 的 GP 章节提供了从零实现和 GPyTorch 两条路径。

  1. 拿到仓库并启动环境:克隆后激活虚拟环境,用 notebook 打开 GP 章节。

    git clone https://gitcode.com/gh_mirrors/d2/d2l-en jupyter notebook
  2. 选核函数并检查先验:先指定 RBF 核,采样几条先验函数看一眼——它们的"脾气"(波动快慢、幅度)是否和你想建模的数据匹配。D2L.ai 特别提醒:这一步比很多人以为的更重要,先验不合理,后面的推理再精确也没用。

  3. 用边际似然学超参数,再预测:边际似然(marginal likelihood,把"拟合好坏"和"模型复杂程度"折成一个可优化目标的函数)会自动在两者之间做平衡,替掉手工调参。回归场景下后验均值和方差都有闭式解(不需要迭代"训练"),预测区间直接用"均值 ± 2 倍标准差"得到 95% 可信区间。

图:把不确定性估计带到真实任务——回归是练习高斯过程最自然的场景

图:激活 d2l 环境后运行jupyter notebook的典型输出

从零实现的完整代码只有一打行左右,GPyTorch 版本则能让你一行换掉核函数、接入神经网络组件。想深入数值优化和可扩展推断,可继续读 chapter_gaussian-processes/ 目录下的后续小节。

新手常见疑问

Q:高斯过程不是出了名的"只能处理万级以内数据"吗,现在还能用吗?A:教科书式的朴素实现确实受 $\mathcal{O}(n^3)$ 求解瓶颈限制,但 D2L.ai 在 chapter_gaussian-processes/gp-inference.md 中明确提到,近年算法进展已让 GP 扩展到百万级点,且这些数值方法本身就是深度学习通用基础。小样本、强可靠性的场景(主动学习、超参数调优、时空回归)它至今是利器。

Q:我的任务是分类,不是回归,高斯过程还能用吗?A:精确闭式推理只在高斯似然下成立,分类等场景需要近似推断(变分推断等)。D2L.ai 在 GP 章节中预留了相关主题,思路一致:仍是对函数做概率推理,只是推断手段从"精确"换成"近似"。

Q:怎么判断模型给的不确定度是不是真的靠谱?A:看两件事:可信区间是否真的按宣称的覆盖率包住真值;离开数据区域时认知不确定性是否明显变宽。gp-intro 的练习里就让你把预测范围拉到数据之外,观察 95% 可信区间的变化——这是最直接的体检方式。

写在最后

深度学习的预测值只回答了"是什么",贝叶斯方法补上了"有多可信"——在数据稀缺、代价高昂的场景,这个补充往往决定方案成败。D2L.ai 把高斯过程从定义、先验、推理到可扩展实现讲成了一条完整闭环,且每一步都有可运行代码。用git clone https://gitcode.com/gh_mirrors/d2/d2l-en拉取仓库,打开 GP 章节,你的不确定性建模之旅从今天这条曲线开始。

【免费下载链接】d2l-enInteractive deep learning book with multi-framework code, math, and discussions. Adopted at 500 universities from 70 countries including Stanford, MIT, Harvard, and Cambridge.项目地址: https://gitcode.com/gh_mirrors/d2/d2l-en

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进