前言
最近从贝叶斯网络的最初版本开始看,看到Monte Carlo Dropout (MC dropout)的时候被高斯过程扼住了喉咙,翻了一天的视频和各种帖子,大概搞懂它在做什么了,这篇文章不讨论高斯过程的整个框架,对于一些理论也不做深入解释,只介绍其在机器学习中作为高斯过程回归(或者分类)的物理含义。
从实际的拟合曲线入手
现在有一个数据集表示为
D
=
{
X
,
Y
}
D=\{X,Y\}
D={X,Y},其中
X
=
{
x
1
,
x
2
,
.
.
.
,
x
N
}
∈
R
N
×
M
X=\{x_1,x_2,...,x_N\}\in \mathbb{R}^{N\times M}
X={x1,x2,...,xN}∈RN×M每一个样本是一个
M
M
M维的向量,用
x
i
x_i
xi表示,现在想要对数据建模,我们假设:
每一个样本
x
i
x_i
xi对应的预测值
y
^
\hat y
y^是一个高斯分布,而不是一个固定的值
每个
y
^
\hat y
y^服从什么样的高斯分布呢?一般我们先假设均值为0,但是方差是多少?前面讲贝叶斯回归的时候,我们认为每个样本是独立的,因此得到的每个
y
^
\hat y
y^的分布也是相互独立的,但是高斯过程回归不认为样本之间独立(这样说不太准确),它不认为每个预测值的分布之间相互独立,而是认为它们受输入的
x
i
x_i
xi的影响:如果两个特征向量在空间上具有更大的相似性,那么它们对应的预测值也应该具有相似的分布,我们设
f
1
,
f
2
,
f
3
f_1,f_2,f_3
f1,f2,f3分别对应输入
x
1
,
x
2
,
x
3
x_1,x_2,x_3
x1,x2,x3的输出,则高斯过程可以表示为如下的形式:
[
f
1
f
2
f
3
]
∼
N
(
[
0
0
0
]
,
[
K
11
K
12
K
13
K
21
K
22
K
23
K
31
K
32
K
33
]
)
\left[\begin{array}{c} f_1 \\ f_2 \\f_3 \end{array} \right] \sim N \left( \left[ \begin{array}{c}0 \\ 0 \\0 \end{array} \right], \left[ \begin{array}{ccc}K_{11} & K_{12} &K_{13} \\K_{21} & K_{22} &K_{23} \\K_{31} & K_{32} &K_{33} \end{array} \right]\right)
⎣⎡f1f2f3⎦⎤∼N⎝⎛⎣⎡000⎦⎤,⎣⎡K11K21K31K12K22K32K13K23K33⎦⎤⎠⎞
- 这里比较容易混淆的就是:它与多元高斯分布之间是什么关系? 毕竟多元高斯也有这样的一个均值向量和协方差向量。
对于多元高斯分布来说,它的变量是一个具有不同维度的一个样本,也就是说,多元变量中的“元”更像是样本的一种特征,而自变量实际上还是单个样本而已;但是高斯过程的自变量是一个分布,换言之,是一个函数,也就是上式中的 f f f,之前有听到这样一种说法,说“泛函”是“函数的函数”,虽然有失偏颇,但用在这里便于理解高斯过程,高斯过程可以理解为分布函数的分布,即它的自变量已经不再是样本,而是一个概率密度函数为高斯分布的函数。
回到刚才,高斯过程的协方差矩阵如何定义?
既然假设不同
f
f
f之间的分布受到输入的
x
i
x_i
xi的影响,协方差矩阵的每个元素将这种影响体现了出来,矩阵中的每个
K
i
j
K_{ij}
Kij是一种样本在空间中相似性的度量,我们知道,协方差矩阵中如果两个随机变量的协方差大,说明两个变量的相关性越强,用在这里,具体一点:
K
21
K_{21}
K21的值越大,说明两个分布
f
1
f_1
f1和
f
2
f_2
f2的相关性越大,对于函数用相关性表述不太合适,直接理解为两个分布更接近吧。
协方差矩阵中的
K
i
j
K_{ij}
Kij一般通过核函数计算得到,并且矩阵一定是一个半正定矩阵,即:高斯过程的协方差矩阵是一个半正定矩阵,一个半正定矩阵也一定可以作为高斯过程的协方差矩阵。关于半正定矩阵的定义和两条定理的证明这里不是重点,不展开讲。
假设我们现在已经选好了一个核函数:
K
i
j
=
e
−
λ
∣
∣
x
i
−
x
j
∣
∣
2
K
i
j
=
0
w
h
e
n
∣
∣
x
i
−
x
j
∣
∣
2
→
∞
K
i
j
=
1
w
h
e
n
∣
∣
x
i
−
x
j
∣
∣
2
=
0
K_{ij}=e^{-\lambda ||x_i - x_j ||^2}\\ K_{ij}=0 \quad when \quad ||x_i - x_j ||^2 \rightarrow \infty \\ K_{ij}=1 \quad when \quad ||x_i - x_j ||^2=0
Kij=e−λ∣∣xi−xj∣∣2Kij=0when∣∣xi−xj∣∣2→∞Kij=1when∣∣xi−xj∣∣2=0
如何求一个新的样本点
x
∗
x^*
x∗对应的分布
f
∗
f^*
f∗?
根据之前的假设,
f
∗
f^*
f∗应该与
f
1
,
f
2
,
f
3
f_1,f_2,f_3
f1,f2,f3同属于一个高斯过程的联合正态分布,此时的均值和方差应该表示成:
[
f
⃗
f
∗
]
∼
N
(
[
0
0
0
0
]
,
[
K
11
K
12
K
13
K
1
∗
K
21
K
22
K
23
K
2
∗
K
31
K
32
K
33
K
3
∗
K
∗
1
K
∗
2
K
∗
3
K
∗
∗
]
)
\left[\begin{array}{c} \vec{f} \\f^* \end{array} \right] \sim N \left( \left[ \begin{array}{c}0 \\ 0 \\0 \\ 0 \end{array} \right], \left[ \begin{array}{cccc}K_{11} & K_{12} &K_{13} &K_{1*} \\ K_{21} & K_{22} &K_{23} &K_{2*} \\ K_{31} & K_{32} &K_{33} &K_{3*} \\ K_{*1} & K_{*2} &K_{*3} &K_{**} \end{array} \right]\right)
[ff∗]∼N⎝⎜⎜⎛⎣⎢⎢⎡0000⎦⎥⎥⎤,⎣⎢⎢⎡K11K21K31K∗1K12K22K32K∗2K13K23K33K∗3K1∗K2∗K3∗K∗∗⎦⎥⎥⎤⎠⎟⎟⎞
这个新的协方差矩阵中的每个元素都是已知的,所以此时我们知道了高斯过程的联合概率密度函数,同时
f
⃗
\vec{f}
f的概率密度函数我们也知道,相应的,我们就可以计算出
f
∗
f^*
f∗的分布了,注意,这个分布
f
(
f
∗
)
f(f^*)
f(f∗)对应的不是边缘概率密度,而是一种条件概率(后验分布),即
f
(
f
∗
∣
f
⃗
,
x
∗
)
f(f^*|\vec{f}, x^*)
f(f∗∣f,x∗)直接给出下面的结果:
f
∗
∼
N
(
μ
∗
,
σ
∗
)
w
h
e
r
e
μ
∗
=
K
∗
T
K
−
1
f
⃗
σ
∗
=
−
K
∗
T
K
−
1
K
∗
T
+
K
∗
∗
w
h
e
r
e
K
=
[
K
11
K
12
K
13
K
21
K
22
K
23
K
31
K
32
K
33
]
K
∗
=
[
K
1
∗
K
2
∗
K
3
∗
]
f^* \sim N(\mu^*, \sigma^*) \\where \quad \mu^*=K_*^TK^{-1}\vec{f} \quad \sigma^*=-K_*^TK^{-1}K_*^T+K_{**}\\ where \quad K=\left[ \begin{array}{ccc}K_{11} & K_{12} &K_{13} \\K_{21} & K_{22} &K_{23} \\K_{31} & K_{32} &K_{33} \end{array} \right] \\ K_*=\left[ \begin{array}{c}K_{1*} \\ K_{2*} \\ K_{3*} \end{array} \right]
f∗∼N(μ∗,σ∗)whereμ∗=K∗TK−1fσ∗=−K∗TK−1K∗T+K∗∗whereK=⎣⎡K11K21K31K12K22K32K13K23K33⎦⎤K∗=⎣⎡K1∗K2∗K3∗⎦⎤
数据有噪声的情况
当数据没有噪声时,我们认为它是通过
y
i
=
Z
x
i
y_i=Z_{x_i}
yi=Zxi直接变换得到的,当数据有噪声时,还需要在后面加一个高斯的噪声变量
ϵ
\epsilon
ϵ,即:
y
i
=
Z
x
i
+
ϵ
i
,
w
h
e
r
e
ϵ
∼
N
(
0
,
σ
2
)
y_i=Z_{x_i} + \epsilon_i, \quad where \quad \epsilon \sim N(0,\sigma^2)
yi=Zxi+ϵi,whereϵ∼N(0,σ2),此时联合分布为:
[
f
⃗
f
∗
]
∼
N
(
[
0
⃗
]
,
[
K
f
⃗
K
∗
K
∗
T
K
∗
∗
]
)
w
h
e
r
e
K
f
⃗
≜
K
+
σ
2
I
N
\left[\begin{array}{c} \vec{f} \\f^* \end{array} \right] \sim N \left( \left[ \begin{array}{c}\vec{0} \end{array} \right], \left[ \begin{array}{cccc}K_{\vec{f}} & K_{*} \\ K_{*}^T &K_{**} \end{array} \right]\right) \quad where \quad K_{\vec{f}} \triangleq K+\sigma^2 I_N
[ff∗]∼N([0],[KfK∗TK∗K∗∗])whereKf≜K+σ2IN
进一步计算得到
f
∗
f^*
f∗的后验分布为:
f
(
f
∗
∣
f
⃗
,
x
∗
)
∼
N
(
μ
∗
,
Z
∗
)
w
h
e
r
e
μ
∗
=
K
∗
T
K
f
⃗
−
1
f
⃗
Z
∗
=
K
∗
∗
−
K
∗
T
K
f
⃗
−
1
K
∗
f(f^*|\vec{f},x^*)\sim N(\mu^*,Z^*) \\where \quad \mu^*=K_*^TK_{\vec{f}}^{-1}\vec{f} \quad \quad Z^*=K_{**}-K_*^TK_{\vec{f}}^{-1}K_*
f(f∗∣f,x∗)∼N(μ∗,Z∗)whereμ∗=K∗TKf−1fZ∗=K∗∗−K∗TKf−1K∗
跟没有噪声的时候相比,
K
f
⃗
−
1
K_{\vec{f}}^{-1}
Kf−1比
K
−
1
K^{-1}
K−1多了一个噪声项
σ
\sigma
σ。
高斯过程回归和贝叶斯线性回归有什么关系
在上节中介绍贝叶斯线性回归的时候,我们说不同样本
x
i
x_i
xi对应的预测值
y
i
y_i
yi是条件相互独立的,但是我们再观察高斯过程的协方差矩阵,发现
f
i
f_i
fi之间并不相互独立(协方差矩阵并不是只有对角线元素有值),为什么会这样?
先来看贝叶斯回归和高斯过程回归的模型表达式:
y
i
=
w
T
x
i
+
ϵ
y
i
=
Φ
(
x
)
T
x
i
+
ϵ
y_i=w^Tx_i + \epsilon \\ y_i=\Phi(x)^Tx_i + \epsilon
yi=wTxi+ϵyi=Φ(x)Txi+ϵ
在贝叶斯推理时,我们认为
w
w
w与
x
x
x没有任何关系,所以如果将其看成一个核函数的话,得到的协方差矩阵与
x
i
x_i
xi没有关系,并且协方差矩阵实际上是我们假设的
w
w
w的先验分布中对应的方差构成的单位矩阵,也就是下面这样:
[
σ
w
0
.
.
.
0
0
σ
w
.
.
.
0
0
0
.
.
.
σ
w
]
\left[\begin{array}{cccc} \sigma_w & 0 &... &0 \\ 0 &\sigma_w &... & 0 \\ 0 & 0 &... &\sigma_w \end{array} \right]
⎣⎡σw000σw0.........00σw⎦⎤
但是高斯过程使用的核函数以样本的相似度为度量,这样一来,得到的
y
i
y_i
yi就不是条件独立的了。但是有一点需要注意:不同的
y
i
y_i
yi本身是相互独立的,由独立是推不出条件独立的。
除此之外,我们在贝叶斯估计中是需要先计算
w
w
w的后验分布的,然后再根据模型预测
y
i
y_i
yi,但是高斯过程回归已经确定了核函数,唯一需要优化的可能是核函数里面的超参,我们实际上只需要根据公式做预测就可以了。这两种方法看起来有点类似,但感觉是从两种不同的角度来思考问题:
- 贝叶斯过程回归需要求解模型的参数,也就是说,我事先不知道模型是什么,先通过已有的数据推断模型大概是什么样子,再根据得到的模型预测未知样本。也有文章说这种方式有利于不断地学习新的样本,迭代模型的参数,从而更好的拟合全部数据。
- 高斯过程回归就像是已经给了一个比较合理的模型,我们只需要对模型的一些超参作微小调整,比如调整前面核函数中的 λ \lambda λ,直接拿过来预测就可以。
两者与不确定性的关系
数据的不确定性通过噪声 σ 2 \sigma^2 σ2体现,模型的不确定性通过预测值的分布体现,即 y ∗ ∼ N ( μ ∗ , Z ∗ ) y^* \sim N(\mu^*, Z^*) y∗∼N(μ∗,Z∗),如果该分布的方差比较大,反映的模型对该数据的预测越摇摆不定。