最近从贝叶斯网络的最初版本开始看,看到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之间的分布受到输入的 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,但是高斯过程回归已经确定了核函数,唯一需要优化的可能是核函数里面的超参,我们实际上只需要根据公式做预测就可以了。这两种方法看起来有点类似,但感觉是从两种不同的角度来思考问题:
数据的不确定性通过噪声 σ 2 \sigma^2 σ2体现,模型的不确定性通过预测值的分布体现,即 y ∗ ∼ N ( μ ∗ , Z ∗ ) y^* \sim N(\mu^*, Z^*) y∗∼N(μ∗,Z∗),如果该分布的方差比较大,反映的模型对该数据的预测越摇摆不定。