一:导论
1:在之前我们介绍的线性参数回归和分类模型或者是神经网络模型中,我们利用训练集(training set)给出参数w⃗ 的点推测或者是后验分布,当我们做预测时,训练集将不再被使用到,我们纯粹是基于参数w⃗ 的点推测或后验分布来做出预测的。同时还有另外一类技术,训练集不仅被用来训练模型参数,同时当我们对新的输入矢量x⃗ 做预测时,训练集也会被使用到,例如使用kernel function的Gaussian process。
2:如果模型是基于fixed nonlinear feature space mapping ϕ⃗ (x⃗ ),则kernel function k(x⃗ ,x⃗ ′)=ϕ⃗ (x⃗ )Tϕ⃗ (x⃗ ),k(x⃗ ,x⃗ ′)=x⃗ Tx⃗ ′称为linear kernel。注意kernel function是特征向量的内积,kernel trick或者是kernel substitution恰好是利用了这一性质。同时我们也注意到kernel function 是一个对称函数k(x⃗ ,x⃗ ′)=k(x⃗ ′,x⃗ )。有着各种各样形式的内核函数,比如stationary kernel k(x⃗ ,x⃗ ′)=k(x⃗ −x⃗ ′),又比如homogeneour kernel 或者是radial basis functions k(x⃗ ,x⃗ ′)=k(||x⃗ −x⃗ ′||)。
3:正如上面提到的,kernel trick或者是kernel substitution利用了内核函数是特征矢量的内积这一性质。kernel trick其基本思路是如果一个算法中的输入矢量x⃗ 仅仅是以标量积的形式存在,则我们可以用其它的kernel function去替换这一标量积(scalar product)。
二:Constructing Kernels
1:valid kernel的评判标准:内核函数能否可以写成特征矢量标量积的形式{ϕ⃗ (x⃗ )Tϕ⃗ (x⃗ )};或者是判断Gram矩阵K{Knm=k(x⃗ n,x⃗ m)}对于所有可能的矢量x⃗ n是否是正半定矩阵。
2:构造kernel function的三种方法:
(1):选择一个feature space mapping ϕ⃗ (x⃗ ),然后令k(x⃗ ,x⃗ ′)=ϕ⃗ (x⃗ )Tϕ⃗ (x⃗ );
(2):直接构造一个kernel function,比如k(x⃗ ,z⃗ )=(x⃗ Tz⃗ )2,但必须要确保该kernel function是一个有效内核;
(3):以简单内核为基础,通过下列技术来构造新的内核:假设我们有两个有效内核,k1(x⃗ ,x⃗ ′),k2(x⃗ ,x⃗ ′),则
k(x⃗ ,x⃗ ′)=ck1(x⃗ ,x⃗ ′)c为大于0的常数k(x⃗ ,x⃗ ′)=f(x⃗ )k1(x⃗ ,x⃗ ′)f(x⃗ ′)f()为任意函数k(x⃗ ,x⃗ ′)=q(k1(x⃗ ,x⃗ ′))q()多项式,其coefficient为非负值k(x⃗ ,x⃗ ′)=exp(k1(x⃗ ,x⃗ ′))k(x⃗ ,x⃗ ′)=k1(x⃗ ,x⃗ ′)+k2(x⃗ ,x⃗ ′)k(x⃗ ,x⃗ ′)=k1(x⃗ ,x⃗ ′)k2(x⃗ ,x⃗ ′)k(x⃗ ,x⃗ ′)=k3(ϕ⃗ (x⃗ ),ϕ⃗ (x⃗ ′))ϕ⃗ (x⃗ )为把x⃗ 映射到RM的函数,k3()为在RM空间中的有效kernelk(x⃗ ,x⃗ ′)=x⃗ TAx⃗ ′A是对称正半定矩阵k(x⃗ ,x⃗ ′)=ka(x⃗ a,x⃗ ′a)+kb(x⃗ b,x⃗ ′b)x⃗ =(x⃗ a,x⃗ b),ka和kb是有效kernelk(x⃗ ,x⃗ ′)=ka(x⃗ a,x⃗ ′a)kb(x⃗ b,x⃗ ′b)
我们希望构造出来的kernel
k(x⃗ ,x⃗ ′)对称并且是正半定,同时它应该表达着
x⃗ ,x⃗ ′的相似性,当然这相似性要视具体的应用而定。
3:经常会用到的一些kernel function:
1):k(x⃗ ,x⃗ ′)=(x⃗ Tx⃗ ′+c)M;
2):Gaussian kernel: k(x⃗ ,x⃗ ′)=exp(−||x⃗ −x⃗ ′||2/(2σ2))
因为||x⃗ −x⃗ ′||2=x⃗ Tx⃗ +(x⃗ ′)Tx⃗ ′−2x⃗ Tx⃗ ′,则如果我们运用kernel substitution技术,用非线性kernel k(x⃗ ,x⃗ ′)替换x⃗ Tx⃗ ′,则我们可以获得一个新的kernel k(x⃗ ,x⃗ ′)=exp{−12σ2(k(x⃗ ,x⃗ )+k(x⃗ ′,x⃗ ′)−2k(x⃗ ,x⃗ ′))}
3):利用generative model p(x⃗ )来定义kernel
方法1:我们可以构造简单kernel k(x⃗ ,x⃗ ′)=p(x⃗ ,x⃗ ′),这个kernel表示如果一对x⃗ ,x⃗ ′对应着较高的概率,则它们是相似的。我们能够在此比较简单kernel的基础上扩展一个新的内核k(x⃗ ,x⃗ ′)=∑ip(x⃗ |i)p(x⃗ ′|i)p(i),其中p(i)为正的权重因子,如果采取无限和的极限,则k(x⃗ ,x⃗ ′)=∫p(x⃗ |z⃗ )p(x⃗ ′|z⃗ )p(z⃗ )dz⃗ ,其中z⃗ 称为latent variable。
方法二:我们可以利用gengerative model p(x⃗ )构造Fisher kernel。假设我们有一个parametric generative model p(x⃗ |θ⃗ ),则k(x⃗ ,x⃗ ′)=g⃗ (θ⃗ ,x⃗ )TF−1g⃗ (θ⃗ ,x⃗ ),其中g⃗ (θ⃗ ,x⃗ )=▽θ⃗ lnp(x⃗ |θ⃗ ),F为Fisher information matrix,表达式为Ex⃗ [g⃗ (θ⃗ ,x⃗ )g⃗ (θ⃗ ,x⃗ )T]=∫g⃗ (θ⃗ ,x⃗ )g⃗ (θ⃗ ,x⃗ )Tp(x⃗ |θ⃗ )dx⃗
但是通常Fisher information matrix是不可解的,因此我们可以采取样品平均近似,表达式为F≈1N∑Nn=1g⃗ (θ⃗ ,x⃗ n)g⃗ (θ⃗ ,x⃗ n)T;或者我们可以略去Fisher information matrix,获得Fisher kernel k(x⃗ ,x⃗ ′)=g⃗ (θ⃗ ,x⃗ )Tg⃗ (θ⃗ ,x⃗ )
4):k(x⃗ ,x⃗ ′)=tanh(ax⃗ Tx⃗ ′+b),虽然它的Gram matrix不是正半定的,但是此kernel经常被使用。
三:Gaussian Processes
1:求解回归或者是分类问题的两种思路:
第一种思路:basis function Model:我们令p(t|x⃗ ,w⃗ )=N(t|y(x⃗ ,w⃗ ),β−1)=N(t|w⃗ Tϕ⃗ (x⃗ ),β−1)或者是p(Ck|x⃗ ,w⃗ )=σ(a)=σ(w⃗ Tϕ⃗ (x⃗ )),通过训练集(training set)训练模型,我们给出w⃗ 的后验分布,然后再给出预测分布;
第二种思路:Gaussian Processes:我们不定义basis function,我们直接给函数y(x⃗ )或者是a(x⃗ )定义一个概率分布,使得一些列数据点x⃗ 1,...,x⃗ N对应的y(x⃗ )或者是a(x⃗ )值的联合分布p(y(x⃗ 1),...,p(x⃗ N))或者是p(a(x⃗ 1),...,a(x⃗ N))为高斯分布,其均值为0,方差为Gram矩阵K(Knm=k(x⃗ n,x⃗ m)),k(x⃗ n,x⃗ m)为kernel function,所以在Gaussian Processes这一方法中,合适的kernel function的选取显得尤为重要。
2:Gaussian processes for regression:
1):Calculating the prediction distribution:
假设p(tn|yn)=N(tn|yn,β−1),β为超参数并且表示的是具有高斯分布噪音的precision,因为每个观察数据点的噪音是相互独立的,则p(t⃗ |y⃗ )=N(t⃗ |y⃗ ,β−1IN),其中t⃗ =(t1,...,tN)T,y⃗ =(y1,...,yN),IN为N∗N的单位矩阵。从Gaussian processes的定义我们知道p(y⃗ )=N(y⃗ |0,K),决定Gram矩阵K的kernel function应该要表达这样一条性质:对于相似点的x⃗ n和x⃗ m,它们对应的值yn和ym应该要比非相似点对更加强烈的关联,当然相似的定义视具体实际情况而定。
则边际分布:
p(t⃗ )=∫p(t⃗ |y⃗ )p(y⃗ )dy⃗ =N(t⃗ |0,C)C(x⃗ n,x⃗ m)=k(x⃗ n,x⃗ m)+β−1δnm
对于regression问题,一个广泛使用的kernel function是
k(x⃗ n,x⃗ m)=θ0exp{−θ12||x⃗ n−x⃗ m||2}+θ2+θ3x⃗ Tnx⃗ m。
我们最终想要得到的预测分布:
p(tN+1|x⃗ N+1,t⃗ N)=N(tN+1|m(x⃗ N+1),σ2(x⃗ N+1))m(x⃗ N+1)=k⃗ TC−1Nt⃗ σ2(x⃗ N+1)=c−k⃗ TC−1Nk⃗
k⃗ 由一些列元素
k(x⃗ n,x⃗ N+1)组成,并且
m(x⃗ N+1)可以表达成∑Nn=1ank(x⃗ n,x⃗ N+1),在这里
an是
C−1Nt⃗ 的第n个元素。
Gaussian processes的计算包括了计算一个N*N矩阵的逆,所需的时间为O(N3),以及矢量与矩阵的相乘,所需时间为O(N2);而在basis function的模型中,所需的时间分别为O(M3)和O(M2),一般来说训练集中数据点的个数要多于basis function的个数,使用Gaussian processes求解效率更低一点,但是Gaussian processes的一个优点是 we can consider kernel function that only can be expressed in terms of an infinite number of basis functions。
2):Learning the hyperparameters:
正如我们上面看到的,Gaussian processes的预测分布部分地依赖于kernel function的选择,我们一般会选择带有参数的kernel function,然后从训练集中推出这些参数的值或者是后验分布,我们称这些参数为hyperparameters,推断出参数相关信息有极大似然法和贝叶斯方法这两种方法:
极大似然法:我们用基于梯度的最优化算法,比如conjugate gradients最大化似然函数p(t⃗ |θ⃗ )的对数,其中θ代表着Gaussian processes的hyperparameters,其中:
lnp(t⃗ |θ⃗ )=−12ln|CN|−12t⃗ TC−1Nt⃗ −N2ln(2π)∂lnp(t⃗ |θ⃗ )∂θi=−12Tr(C−1N∂CN∂θi)+12t⃗ TC−1N∂CN∂θiC−1Nt⃗
但必须要说的是
lnp(t⃗ |θ⃗ )一般来说是nonconvex函数,因此它可能有着多个最大值;
贝叶斯方法:我们能够定义一个关于θ的先验分布,然后用基于梯度的算法最大化其后验分布的log,获得一组θ⃗ MAP;在全贝叶斯处理中,我们需要对θ⃗ 进行边际化处理,但这一般没有解析解,因此我们需要做近似处理。
3):Automatic relevance determination(ARD):
我们之前给出的kernel function为
k(x⃗ n,x⃗ m)=θ0exp{−θ12||x⃗ n−x⃗ m||2}+θ2+θ3x⃗ Tnx⃗ m
在这里参数
θ1对应着所有的输入变量;
现在运用ARD方法,我们能够对每个输入变量分别定义一个参数,则上述的kernel function显示如下:
k(x⃗ n,x⃗ m)=θ0exp{−12∑i=1Dηi(xni−xmi)2}+θ2+θ3∑i=1Dxnixmi
此方法的好处是the optimization of these parameters by maximum likelihood allows the relative importance of different inputs to be inferred from the data。
3:Gaussian processes for classification
1):Calculating the predictive distribution:
在之前的分类问题中,我们使用公式p(t=1|x⃗ )=σ(a),当我们用Gaussian processes处理分类问题时,我们能够对a(x⃗ )使用Gaussian processes,然后使用logistic sigmoid把a(x⃗ )转变成y{σ(a)},这样我们就获得了一个关于函数y(x⃗ )的non-Gaussian stochastic process。对于两类问题,我们知道p(t|a)=σ(a)t(1−σ(a))1−t。
假设我们有一个训练集,其输入为x⃗ 1,...,x⃗ N,对应的目标变量t⃗ N=(t1,...,tN)T,并且我们也有一个test point x⃗ N+1,对应的目标值为tN+1。由于我们对a(x⃗ )定义了一个gaussian processes,因此p(a⃗ N+1)=N(a⃗ N+1|0,CN+1),其中C(x⃗ n,x⃗ m)=k(x⃗ n,x⃗ m)+υδnm,υ的值会预先确定好,在这里要说的是这里的kernel function由一组参数θ控制。
预测分布为p(tN+1=1|t⃗ N)=∫p(tN+1=1|aN+1)p(aN+1|t⃗ N)daN+1,这个没有解析解,因此我们可以对p(aN+1|t⃗ N)采取拉普拉斯近似,近似的结果为p(aN+1|t⃗ N)=N(aN+1|E[aN+1|t⃗ N],var[aN+1|t⃗ N]),这样我们能够使用结果(4.153)计算预测分布p(tN+1=1|t⃗ N)。拉普拉斯近似的具体计算过程见课本。
2):Learning the hyperparameters:
正如我们上面说的,kernel function是由一组参数控制的,因此我们能够通过最大化似然函数p(t⃗ N|θ⃗ )来获得参数值,p(t⃗ N|θ⃗ )=∫p(t⃗ N|a⃗ N)p(a⃗ N|θ⃗ )da⃗ N