高斯过程回归----MC dropout前导篇

前言

最近从贝叶斯网络的最初版本开始看,看到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) f1f2f3N000,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λxixj2Kij=0whenxixj2Kij=1whenxixj2=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) [f f]N0000,K11K21K31K1K12K22K32K2K13K23K33K3K1K2K3K
这个新的协方差矩阵中的每个元素都是已知的,所以此时我们知道了高斯过程的联合概率密度函数,同时 f ⃗ \vec{f} f 的概率密度函数我们也知道,相应的,我们就可以计算出 f ∗ f^* f的分布了,注意,这个分布 f ( f ∗ ) f(f^*) f(f)对应的不是边缘概率密度,而是一种条件概率(后验分布),即 f ( f ∗ ∣ f ⃗ , x ∗ ) f(f^*|\vec{f}, x^*) f(ff ,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] fN(μ,σ)whereμ=KTK1f σ=KTK1KT+KwhereK=K11K21K31K12K22K32K13K23K33K=K1K2K3

数据有噪声的情况

当数据没有噪声时,我们认为它是通过 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 [f f]N([0 ],[Kf KTKK])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(ff ,x)N(μ,Z)whereμ=KTKf 1f Z=KKTKf 1K
跟没有噪声的时候相比, K f ⃗ − 1 K_{\vec{f}}^{-1} Kf 1 K − 1 K^{-1} K1多了一个噪声项 σ \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,但是高斯过程回归已经确定了核函数,唯一需要优化的可能是核函数里面的超参,我们实际上只需要根据公式做预测就可以了。这两种方法看起来有点类似,但感觉是从两种不同的角度来思考问题:

  1. 贝叶斯过程回归需要求解模型的参数,也就是说,我事先不知道模型是什么,先通过已有的数据推断模型大概是什么样子,再根据得到的模型预测未知样本。也有文章说这种方式有利于不断地学习新的样本,迭代模型的参数,从而更好的拟合全部数据。
  2. 高斯过程回归就像是已经给了一个比较合理的模型,我们只需要对模型的一些超参作微小调整,比如调整前面核函数中的 λ \lambda λ,直接拿过来预测就可以。

两者与不确定性的关系

数据的不确定性通过噪声 σ 2 \sigma^2 σ2体现,模型的不确定性通过预测值的分布体现,即 y ∗ ∼ N ( μ ∗ , Z ∗ ) y^* \sim N(\mu^*, Z^*) yN(μ,Z),如果该分布的方差比较大,反映的模型对该数据的预测越摇摆不定。

你可能感兴趣的:(回归,机器学习,概率论)