基于近似生成模型的稀疏高斯过程模型构建
基于目前阅读的文章[1]的理解,这里简单介绍一下如何基于近似生成模型对高斯过程进行简化。
这里不对高斯过程进行详细的介绍,主要是介绍如何通过近似生成模型来简化高斯的运算,从而实现稀疏高斯过程的建模。
1. 动机分析
这部分主要说明一下为什么会考虑到用近似生成方法来构建高斯过程模型。
我们假设一个数据集
S
S
S有
N
N
N个样本,
S
=
{
x
n
,
y
n
}
∣
n
=
1
N
S=\left \{ x_n,y_n\right \}|_{n=1}^{N}
S={xn,yn}∣n=1N。为了描述的更有泛化性,我们认为
x
i
∈
R
a
x_i\in{\mathbb{R}^a }
xi∈Ra,
y
i
∈
R
y_i\in{\mathbb{R}}
yi∈R。首先我们直接给出高斯过程的公式描述(这里不细讲高斯过程是怎样的):
p
(
f
∣
θ
)
=
G
P
(
0
,
k
θ
)
p(f|\theta)=GP(0,k_\theta)
p(f∣θ)=GP(0,kθ)也就是
f
∼
N
(
0
,
k
θ
)
f\sim N(0,k_\theta)
f∼N(0,kθ)。其中
k
θ
k_\theta
kθ是基于某个核函数的协方差矩阵。注意,这里的
f
f
f是
f
(
x
)
f(x)
f(x)的简写,因此这个
f
f
f是一个关于
x
x
x的函数(后续会将
f
(
x
i
)
f(x_i)
f(xi)简写为
f
i
f_i
fi)。此时假设数据集中的数据都是服从这个高斯过程的(这是先验假设)。此时,
x
x
x到
y
y
y的映射关系就可以写成
p
(
y
n
∣
f
n
,
θ
)
∼
N
(
f
,
σ
y
2
)
p(y_n|f_n,\theta)\sim{N(f,\sigma_y^2)}
p(yn∣fn,θ)∼N(f,σy2)。这里的
θ
\theta
θ就是高斯分布中的均值,方差以及核函数中的超参数等一些列参数。结合这样的先验假设以及
x
x
x和
y
y
y之间的映射关系,通过贝叶斯公式我们可以得到这样一个联合分布:
p
(
f
,
y
∣
X
,
θ
)
=
p
(
f
∣
X
,
θ
)
∏
n
=
1
N
p
(
y
n
∣
f
n
,
θ
)
p(f,y|X,\theta)=p(f|X, \theta)\prod_{n=1}^{N}p(y_n|f_n,\theta)
p(f,y∣X,θ)=p(f∣X,θ)n=1∏Np(yn∣fn,θ)
通过对上述的联合分布进行边缘分布的积分操作,我们可以实现对新来的点的预测。但是,在进行预测或是分类之前需要先获得模型参数。然而在面对大量训练数据的情况下,直接对上式进行极大似然估计来获得参数值是不太现实的。主要原因是在具体运算时,由于
p
(
f
∣
X
,
θ
)
p(f|X, \theta)
p(f∣X,θ)先验的存在,这个似然函数可能是非解析的从而导致了数学分析上的困难。其次,由于在对目标函数进行求导时需要对内部核函数
k
(
X
,
X
)
k(X,X)
k(X,X)进行转至求导等矩阵计算,这就使得计算的复杂度达到了
O
(
N
3
)
O(N^3)
O(N3)的程度。这两个原因导致了在面对大量数据时我们无法直接对上式进行直接的优化分析。因此需要通过一种方法来化简这种模型,从而实现参数的求解。
2. 近似生成模型的应用
2.1. 先验拆分
这里首先解释一个稀疏高斯过程中多次出现的概念,原文中称作pseudo-points。这个词没有具体的中文翻译,因此这里我把它理解为“表征点”。表征点在这里起到的作用是降低训练的数据量,一般会有表征点的数量
M
≪
N
M\ll N
M≪N的要求。研究人员希望借助这些点来训练模型,并且模型的精度要尽可能和利用全数据集训练的模型的精度接近。
这里,我们假设表征点集为
S
u
=
{
z
m
,
u
m
}
∣
m
=
1
M
S_u = \left \{ z_m,u_m\right \}|_{m=1}^{M}
Su={zm,um}∣m=1M,并定义一个数据集
f
a
l
l
=
{
u
,
f
,
f
a
l
l
≠
u
,
f
}
f_{all}=\left \{ \mathrm {u},\mathrm {f}, f_{all\ne\mathrm {u,f}}\right \}
fall={u,f,fall=u,f},其中
f
\mathrm {f}
f 表示训练数据中的 目标值(也就是GP过程中的function values),而
f
a
l
l
≠
u
,
f
f_{all\ne\mathrm {u,f}}
fall=u,f则表示除了
u
\mathrm {u}
u和
f
\mathrm {f}
f以外的其他数据(可以理解为测试数据中的y值)。
根据第一节中的分析,我们知道整个求解参数过程中难点最多的地方在先验假设
p
(
f
∣
X
,
θ
)
p(f|X, \theta)
p(f∣X,θ)上。因此我们可以将这个先验依据概率公式的乘法定律展开成以下三个分布相乘:
p
(
f
∣
θ
)
=
p
(
u
∣
θ
)
p
(
f
∣
u
,
θ
)
p
(
f
a
l
l
≠
u
,
f
∣
u
,
f
,
θ
)
p(f|\theta)=p(\mathrm {u}|\theta)p(\mathrm {f}|\mathrm {u},\theta)p(f_{all\ne\mathrm {u,f}}|\mathrm {u},\mathrm {f},\theta)
p(f∣θ)=p(u∣θ)p(f∣u,θ)p(fall=u,f∣u,f,θ)
现在我分别解释一下上述三个分布的含义。首先,
p
(
u
∣
θ
)
p(\mathrm {u}|\theta)
p(u∣θ) 代表了表征点的分布特性,因为表征点就是从原始数据中直接选择得到的,因此分布特性不会发生变化,这一部分的含义也可以随意理解。其次,
p
(
f
∣
u
,
θ
)
p(\mathrm {f}|\mathrm {u},\theta)
p(f∣u,θ)代表了在确定表征点后,原始数据中训练数据的分布特性。这里可以理解成,利用数据
u
\mathrm {u}
u去训练高斯过程
p
p
p,然后去预测
f
\mathrm {f}
f的值。因此这一部分其实就决定了所选择的表征点能否很好的还原原始训练数据。最后,
p
(
f
a
l
l
≠
u
,
f
∣
u
,
f
,
θ
)
p(f_{all\ne\mathrm {u,f}}|\mathrm {u},\mathrm {f},\theta)
p(fall=u,f∣u,f,θ)这里和上一点的理解很像,这一点就是,当选定了训练数据,并且给定了(一般是从训练数据中选择出的)表征点之后,利用模型
p
p
p对
f
a
l
l
≠
u
,
f
f_{all\ne\mathrm {u,f}}
fall=u,f数据的值进行预测。其实这里就是利用高斯过程进行预测时所需要的做的工作了。综上,我们可以看到,这个方法其实就是将模型训练以及模型预测这两步,从先验分布中分别拆分开了。
2.2. 关系简化思想与过程
所谓关系简化,其实就是认为表征点与训练数据之间在某些时候是不相关的(严格来说,由于表征点就是从训练集中选出来的,因此这个假设是不应该存在的。但是仅从简化计算上来说,可以这么假设)。
2.2.1 训练过程的简化
基于上述假设,我们可以构造出一个分布
q
(
f
∣
θ
)
q(\mathrm {f}|\theta)
q(f∣θ),去近似并替代原始的先验分布
p
(
f
∣
θ
)
p(\mathrm {f}|\theta)
p(f∣θ)。具体就指代的是对
p
(
f
∣
θ
)
p(\mathrm {f}|\theta)
p(f∣θ)中的后两个分布公式,
p
(
f
∣
u
,
θ
)
p(\mathrm {f}|\mathrm {u},\theta)
p(f∣u,θ)和
p
(
f
a
l
l
≠
u
,
f
∣
u
,
f
,
θ
)
p(f_{all\ne\mathrm {u,f}}|\mathrm {u},\mathrm {f},\theta)
p(fall=u,f∣u,f,θ)分别进行近似。看到这里,不免产生疑问。
1.为什么我们要做这样的假设?
2.这个假设和我们要构造的分布之间有什么必然的联系么?
为了更好的说明上面这个问题,这里会举一个简单的例子。假设
N
=
4
N=4
N=4,那么我们将高斯过程具体写出来可以得到:
[
y
1
,
y
2
,
y
3
,
y
4
]
T
∼
N
(
0
,
K
44
)
[y_1,y_2,y_3,y_4]^T\sim N( 0 ,K_{44})
[y1,y2,y3,y4]T∼N(0,K44),
K
44
K_{44}
K44表示
[
k
11
k
12
k
13
k
14
k
21
k
22
k
23
k
24
k
31
k
32
k
33
k
34
k
41
k
42
k
43
k
44
]
\begin{bmatrix} k_{11} &k_{12} &k_{13} &k_{14} \\ k_{21}&k_{22} &k_{23} & k_{24}\\ k_{31}& k_{32}& k_{33}& k_{34}\\ k_{41}& k_{42}& k_{43} &k_{44} \end{bmatrix}
⎣⎢⎢⎡k11k21k31k41k12k22k32k42k13k23k33k43k14k24k34k44⎦⎥⎥⎤,其中
k
i
j
k_{ij}
kij表示
k
(
x
i
,
x
j
)
k(x_i,x_j)
k(xi,xj),
首先需要明确的是,上面这个分布并不是简单的由
p
(
y
1
∣
θ
)
×
p
(
y
2
∣
θ
)
×
p
(
y
3
∣
θ
)
×
p
(
y
4
∣
θ
)
p(y_1|\theta)\times p(y_2|\theta)\times p(y_3|\theta)\times p(y_4|\theta)
p(y1∣θ)×p(y2∣θ)×p(y3∣θ)×p(y4∣θ)得到的。这也侧面说明在最开始的算法中,如果在没有给定任何条件的情况下,每个样本点不一定是相互独立的。那么我们现在先做一个假设,假设
y
1
,
y
2
,
y
3
,
y
4
y_1,y_2,y_3,y_4
y1,y2,y3,y4是在给定了某个条件后是相互独立的,那么这样一来,上面的式子就可以写成这些变量的乘积,也就变成了下面这种形式(因为重点在于协方差的变化,因此后面就只写协方差矩阵了):
[
k
11
0
0
0
0
k
22
0
0
0
0
k
33
0
0
0
0
k
44
]
\begin{bmatrix} k_{11} &0 &0 &0 \\ 0&k_{22} &0 & 0\\ 0& 0& k_{33}& 0\\ 0& 0& 0 &k_{44} \end{bmatrix}
⎣⎢⎢⎡k110000k220000k330000k44⎦⎥⎥⎤可以看到只剩下对角矩阵了。此时,对这个矩阵无论是求导还是求积工作的运算复杂度都会降低。那么基于这个思想,如果我们构造的分布能够通过联乘来表示,那么就会使得协方差矩阵变成对角的形式。到这里,就回答了第一点,为什么要有这样的假设。
既然知道了我们希望把函数构造成什么样了,那接下来我们就可以把要构造的函数形式写下来了:
p
(
f
∣
u
,
θ
)
≈
q
(
f
∣
u
,
θ
)
=
∏
b
=
1
B
N
(
f
b
;
K
f
b
,
u
K
u
,
u
−
1
u
,
α
D
f
b
f
b
)
p(\mathrm {f}|\mathrm {u},\theta)\approx q(\mathrm {f}|\mathrm {u},\theta)=\prod_{b=1}^{B}N(f_b;K_{f_b,\mathrm {u}}K_{\mathrm {u},\mathrm {u}}^{-1}\mathrm {u},\alpha D_{f_bf_b})
p(f∣u,θ)≈q(f∣u,θ)=b=1∏BN(fb;Kfb,uKu,u−1u,αDfbfb)
那么,这个式子就代表了一个条件独立的假设。即:当给定表征点的条件下,整个过程可以看成是B个独立的分布联乘得到的。因此,上式中的B,就代表着我们愿意将整个数据视作是为多少个独立分布组成的。最简单的例子就是在上面的例子中将B设置成4。这里也就回答了这个假设和我们要构造的函数有什么联系这个问题。(需要注意,每个块都需要至少存在一个表征点,也就是说至少需要
M
≥
B
M\ge B
M≥B个表征点。因为只有这样才能保证每个块都处在给定了表征点的条件下的。)
这里有一点,其实就是这个假设只在块与块之间成立,但是每个数据块之内,各个样本之间依然存在着联系。这里就可以按照上面的那个例子理解。比如,我们将4个样本划分为2块,那么原数据的协方差矩阵可以写成如下分块矩阵:
[
K
^
22
0
0
K
22
]
\begin{bmatrix} \hat{K}_{22} &0 \\ 0&K_{22} \end{bmatrix}
[K^2200K22]
可以看到,第一块数据和第二块数据之间没有相关性(因为非对角线的协方差矩阵值为0)。如果我们将第一块数据的协方差矩阵展开,就可以得到下式:
[
k
f
f
k
f
u
1
k
u
1
f
k
u
1
u
1
]
\begin{bmatrix} k_{ff} &k_{f\mathrm {u}_1} \\ k_{\mathrm {u}_1f}&k_{\mathrm {u}_1\mathrm {u}_1} \end{bmatrix}
[kffku1fkfu1ku1u1]
可以看到,非对角线上的协方差值不为零,因此这个块内的1号样本与2号样本之间存在着相关性。
总结来说,就是这个假设不是全局成立,它只是人为的规定了在给定表征点的条件下,有多少数据(块)是允许互相独立的。当然,有的学者就考虑采用
B
=
N
B=N
B=N,这就是另一种方法了,这里不赘述。
所以,综上我们可以借助这种假设,将复杂的高斯过程先验分布拆成多个高斯的联乘。直观来看,每个高斯块内部的计算量最多也就只有“
f
f
f的样本数”
×
\times
ד
f
f
f的样本数”,并且这
f
f
f是分块后的数据量,例如,将
S
S
S平均分成了
B
B
B块,那么每块中的
f
f
f数据量就只有
N
B
\frac{N}{B}
BN这么多。因此,这样简化可以大大降低计算复杂度,从而实现一种稀疏的计算方式。
2.2.2 预测过程的简化
预测步实际上就是求解
p
(
f
a
l
l
≠
u
,
f
∣
u
,
f
,
θ
)
p(f_{all\ne\mathrm {u,f}}|\mathrm {u},\mathrm {f},\theta)
p(fall=u,f∣u,f,θ)的过程,如果这里有
f
\mathrm {f}
f的存在,那么在协方差矩阵中势必存在
f
\mathrm {f}
f的计算。因此,这里的简化,其实就是去掉“给定
f
\mathrm {f}
f”的条件。
因此,这里我们假设表征点
u
\mathrm {u}
u能够完全描述训练数据
f
\mathrm {f}
f中的信息,那么这两个条件,“给定
u
\mathrm {u}
u”和“给定
f
\mathrm {f}
f”,是等价的。因此,在这样的假设下,我们可以直接将原分布不变,将
f
\mathrm {f}
f直接从计算中去掉。即:
q
(
f
a
l
l
≠
u
,
f
∣
u
,
θ
)
≈
p
(
f
a
l
l
≠
u
,
f
∣
u
,
f
,
θ
)
q(f_{all\ne\mathrm {u,f}}|\mathrm {u},\theta)\approx p(f_{all\ne\mathrm {u,f}}|\mathrm {u},\mathrm {f},\theta)
q(fall=u,f∣u,θ)≈p(fall=u,f∣u,f,θ)
2.3. 简化结果以及求解简析
结合上述的简化过程,最终我们可以把高斯过程的先验由
p
(
f
∣
θ
)
=
p
(
u
∣
θ
)
p
(
f
∣
u
,
θ
)
p
(
f
a
l
l
≠
u
,
f
∣
u
,
f
,
θ
)
p(f|\theta)=p(\mathrm {u}|\theta)p(\mathrm {f}|\mathrm {u},\theta)p(f_{all\ne\mathrm {u,f}}|\mathrm {u},\mathrm {f},\theta)
p(f∣θ)=p(u∣θ)p(f∣u,θ)p(fall=u,f∣u,f,θ)
简化为:
q
(
f
∣
θ
)
=
p
(
u
∣
θ
)
q
(
f
∣
u
,
θ
)
q
(
f
a
l
l
≠
u
,
f
∣
u
,
θ
)
q(f|\theta)=p(\mathrm {u}|\theta)q(\mathrm {f}|\mathrm {u},\theta)q(f_{all\ne\mathrm {u,f}}|\mathrm {u},\theta)
q(f∣θ)=p(u∣θ)q(f∣u,θ)q(fall=u,f∣u,θ)
因此,主体公式
p
(
f
,
y
∣
X
,
θ
)
=
p
(
f
∣
X
,
θ
)
∏
n
=
1
N
p
(
y
n
∣
f
n
,
θ
)
p(f,y|X,\theta)=p(f|X, \theta)\prod_{n=1}^{N}p(y_n|f_n,\theta)
p(f,y∣X,θ)=p(f∣X,θ)n=1∏Np(yn∣fn,θ)
也可以简化为:
q
(
f
,
y
∣
X
,
θ
)
=
q
(
f
∣
X
,
θ
)
∏
n
=
1
N
p
(
y
n
∣
f
n
,
θ
)
q(f,y|X,\theta)=q(f|X, \theta)\prod_{n=1}^{N}p(y_n|f_n,\theta)
q(f,y∣X,θ)=q(f∣X,θ)n=1∏Np(yn∣fn,θ)
同原始模型一样,要求得参数
θ
\theta
θ的最优值,就只需要对上述化简后的公式求
f
f
f的积分然后应用极大似然估计即可。具体的结果在论文中有给出,这里不进行赘述。
3. 参考文献
[1]. Bui, Thang D (2017年01月01日). “A Unifying Framework for Gaussian Process Pseudo-Point Approximations using Power Expectation Propagation”. Journal of machine learning research (1532-4435), 18