高斯过程:从基础到定制
立即解锁
发布时间: 2025-08-31 01:48:29 阅读量: 8 订阅数: 24 AIGC 

### 高斯过程:从基础到定制
#### 1. 一维情况拓展与练习
在一维情况中的特性同样适用于更高维度的例子。例如,在某个示例中,左图显示均值预测与训练数据相符,左边的亮块对应 (-1, 1),值为 0.5,右边的暗块对应 (1, 2),值为 -1,而在 (0, 0) 处的观测值为 0,这也是先验均值。从右图可以看出,在训练数据的三个点附近,不确定性(通过预测标准差衡量)接近零,随着远离这些数据点,标准差平滑地增加到归一化的最大不确定性 1。这表明高斯过程(GP)的优良特性,如平滑插值和不确定性量化,在高维情况下依然保留。
接下来是一个练习,使用一个现实世界的数据集来训练 GP。该数据集包含合金的信息,每个数据点代表一种由铅(Pb)、锡(Sn)、锗(Ge)和锰(Mn)按不同比例混合而成的合金。特征是前四列中各母体化合物的百分比,预测目标是最后一列的混合温度,即合金能够形成的最低温度。具体步骤如下:
1. **创建数据集**:创建包含在表 2.2 中的四维数据集。
2. **归一化**:对第五列进行归一化,通过从所有值中减去均值并将结果除以标准差。
3. **训练 GP**:将前四列作为特征,第五列作为标签,使用之前实现的 GP 模型类在这些数据上训练 GP。
4. **创建测试集**:创建一个测试数据集,其中锗和锰的百分比为零,即测试集是一个以铅和锡的百分比为轴的单位正方形网格。测试集应如下所示:
```python
tensor([[0.0000, 0.0000, 0.0000, 0.0000],
[0.0000, 0.0100, 0.0000, 0.0000],
[0.0000, 0.0200, 0.0000, 0.0000],
...,
[1.0000, 0.9800, 0.0000, 0.0000],
[1.0000, 0.9900, 0.0000, 0.0000],
[1.0000, 1.0000, 0.0000, 0.0000]])
```
5. **预测**:在测试集上预测混合温度,即计算测试集中每个点的归一化混合温度的后验均值和标准差。
6. **可视化**:将预测结果可视化,以热图的形式显示均值和标准差,具体实现可参考 CH02/02 - Exercise.ipynb。
数据集详情如下表所示:
| % of Pb | % of Sn | % of Ge | % of Mn | Mixing temp. (°F) |
| ---- | ---- | ---- | ---- | ---- |
| 0.50 | 0.50 | 0.00 | 0.00 | 192.08 |
| 0.33 | 0.33 | 0.33 | 0.00 | 258.30 |
| 0.00 | 0.50 | 0.50 | 0.00 | 187.24 |
| 0.00 | 0.33 | 0.33 | 0.33 | 188.54 |
#### 2. 高斯过程基础总结
- **多元高斯分布(MVN)**:用于建模多个随机变量的联合分布,均值向量表示变量的期望值,协方差矩阵则同时建模变量的方差和协方差。
- **贝叶斯更新**:通过应用贝叶斯定理,可以计算 MVN 的后验分布。在这个过程中,与观测变量相似的变量会被更新以反映这种相似性,总体上,相似的变量会产生相似的预测。
- **高斯过程(GP)**:是 MVN 分布向无限维度的扩展,成为函数的分布。虽然 GP 的行为与 MVN 分布相似,但即使没有任何训练数据,GP 也可以根据先验 GP 产生预测。一旦在数据集上进行训练,GP 的均值预测会平滑地插值训练数据点。使用 GP 的一个重要优势是模型能够对不确定性进行校准量化,在观测数据点附近的预测更有信心,而远离训练数据的预测则更不确定。
- **条件化**:在 MVN 分布或 GP 中进行条件化,在视觉上类似于在观测点处打一个结,这会迫使模型精确地通过观测点,并将不确定性降低到零。
- **使用 GPyTorch 实现**:可以编写一个扩展基类的模型类来实现 GP,具体需要实现两个特定方法:`__init__()` 用于声明 GP 的均值和协方差函数,`forward()` 用于为给定输入构建 MVN 分布。
#### 3. 先验在贝叶斯模型中的重要性
先验在贝叶斯模型中起着至关重要的作用。以一个有趣的场景为例,你和朋友 Bob、Alice 在嘉年华上遇到一个自称有通灵能力的人。测试方法是你和朋友各自想一个 0 到 9 之间的数字,让“通灵者”猜出。你们决定进行 100 次测试,结果“通灵者”每次都猜对了,但你们三人的反应却不同。
这是因为每个人开始时对“通灵者”的先验概率不同:
- **Bob**:他一开始就有相对较高的先验概率(1%)认为“通灵者”是真的。随着越来越多的数据支持这一信念,他的后验概率不断增加,最终完全相信“通灵者”是真的。
- **你**:作为一个怀疑论者,你的先验概率非常低(1 除以 10 的 14 次方)。尽管观测结果表明“通灵者”可能是真的,但你的后验概率增加得较慢,直到最后才达到 1%。
- **Alice**:从一开始就不相信有通灵者,她的先验概率为零。根据贝叶斯定理,后验概率与先验概率和似然项的乘积成正比,由于她的先验概率为零,无论经过多少次成功的测试,她的后验概率始终为零。
这个例子表明,我们的先验决定了学习的方式。在贝叶斯模型中,拥有良好的先验知识非常重要,特别是在数据获取成本较高的情况下。对于 GP 来说,我们可以通过选择特定的均值和协方差函数来指定先验知识,不同的选择会导致 GP 预测行为的不同。
整个更新过程可以用以下流程图表示:
```mermaid
graph TD;
A[确定先验概率] --> B[进行一次测试并观察结果];
B --> C[计算似然项];
C --> D[结合先验和似然项计算后验概率];
D --> E{是否进行下一次测试};
E -- 是 --> F[将后验概率作为新的先验概率];
F --> B;
E -- 否 --> G[结束];
```
#### 4. 将已有知识融入 GP
在很多情况下,即使我们不知道目标函数的确切形式,但我们对目标函数的某些方面是了解的。例如:
- 在超参数调优应用中,当对模型的准确性进行建模时,我们知道目标函数的范围在 0 到 1 之间。
- 在住房价格的例子中,函数值(价格)严格为正,并且随着房屋的理想属性(如居住面积)的增加而增加。而且,函数值对某些特征比其他特征更敏感,例如房屋价格随层数的增加比随居住面积的增加更快。
这些信息就是我们希望用 GP 表示的先验知识。使用 GP 的一个重要优势是我们有多种方法将先验知识融入其中,这样可以缩小 GP 代理与实际目标函数之间的差距,更有效地指导后续的优化。
#### 5. 用均值函数定义函数行为
GP 的均值函数定义了 GP 的预期行为,即我们认为函数在所有可能场景下的平均样子。这有助于我们指定与函数的一般行为和形状相关的先验知识。
为了使讨论更具体,我们使用一个包含五个数据点
0
0
复制全文
相关推荐









