从零单排PRML 第6章 Kernel Methods
作者: Houye
单位: 北京邮电大学博士生
知乎主页: https://www.zhihu.com/people/Jhy1993
公众号 图与推荐

PRML一般指代Pattern Recognition and Machine Learning(模式识别与机器学习)一书。该书出版于2006年,是贝叶斯机器学习领域的经典之作。
更重要的是,算法工程面试的真题很多都来自这本书. 作者在面试阿里巴巴研究型实习生的时候就被问到了这本书的很多知识.
马春鹏同学的中译版本给了我们很好的参考,但是其并没有对PRMl的内容进行解读.
从零单排PRML系列旨在用浅显易懂的白话对机器学习相关知识进行梳理(个人理解,可能有不精确的地方,欢迎批评指教).
同时,作者对一些公式和模型罗列了一些简单的Python代码示例以促进理解.代码示例主要来自https://github.com/ctgk/PRML
引言
机器学习里面对待训练数据有2种,抛弃或者保留
- 有的是训练完得到参数后就可以抛弃了,比如神经网络;
- 有的是还需要原来的训练数据比如KNN,SVM也需要保留一部分数据–支持向量。
许多线性参数模型可以转化为对偶形式,转化后依然是线性模型.
只是线性组合的对象变成了一组非线性基函数.
这里的非线性基函数就是在基于各个数据点计算的核函数.
对偶表示
最小均方误差形式
J(w)=21n=1∑N{wTϕ(xn)−tn}2+2λwTw
对偶形式:核函数形式
J(a)=21aTKKa−aTKt+21tTt+2λaTKa
这里K是著名的Gram矩阵K=ΦΦT.上式中的$\boldsymbol { a } $又有闭式解
a=(K+λIN)−1t
这样,问题的解$\boldsymbol { a } 就只与核函数\boldsymbol { K } $有关了.
最小均方转为核函数的组合k(x,x′)后,我们就只关心$x , x ^ { \prime } 基于核函数的结果,对偶表示可以避免了显式的使用特征向量\phi(x).这样做不关心中间过程\boldsymbol { \phi} ( x ) ^ { \mathrm { T } } \boldsymbol { \phi } \left( x ^ { \prime } \right) $ ,只关心结果k(x,x′).
核函数形式$k \left( x , x ^ { \prime } \right) =\boldsymbol { \phi} ( x ) ^ { \mathrm { T } } \boldsymbol { \phi } \left( x ^ { \prime } \right) $ ,也就是映射后高维特征空间的内积可以通过原来低维的特征得到, 这样做的好处是可以使用隐式的高维特征,所以kernel method得到了广泛应用. 以SVM为例,低维不可分的数据,经过kernel将特征映射到高维后,就可以分开了.
以下式为例, 这里 $k ( \boldsymbol { x } , \boldsymbol { z } ) $ 的形式很简洁,但是如果想找到ϕ(x)是比较难的.这里的ϕ(x)只是中间需求,最终我们需要只是$k ( \boldsymbol { x } , \boldsymbol { z } ) $.
k(x,z)=(xTz)2,形式简洁,好算ϕ(x)=(x12,2x1x2,x22)T,很难找到,计算量大
构建kernel的方法
特征映射法
选择一个特征映射函数$\boldsymbol { \phi} ( x ) $ ,并通过这个映射来寻找kernel.
k(x,x′)=ϕ(x)Tϕ(x′)=i=1∑Mϕi(x)ϕi(x′)
直接构造
直接写出kernel的形式,
k(x,z)=(xTz)2
这里kernel的形式是写出来了,但是这个形式合法吗?
合法性检验有2个方法:
-
找到对应的特征映射函数
-
Gram矩阵在所有可能的{xn}的选择下都是半正定的.
下面是通过方法1来对kernel进行合法性检查.上式可以认为是二维输入x=(x1,x2), 经过特征映射法的结果,原因是可以将上式展开了为2个经过特征映射后的$\boldsymbol { \phi} ( x ) $的内积.
k(x,z)=(xTz)2=(x1z1+x2z2)2=x12z12+2x1z1x2z2+x22z22=(x12,2x1x2,x22)(z12,2z1z2,z22)T=ϕ(x)Tϕ(z)
这里的特征映射函数形式为ϕ(x)=(x12,2x1x2,x22)T ,可以验证k(x,z)=(xTz)2 是一个合法的kernel.
基于现有的合法kernel进行构建
假设 $k _ { 1 } \left( \mathbf { x } , \mathbf { x } ^ { \prime } \right) 和 k _ { 2 } \left( \mathbf { x } , \mathbf { x } ^ { \prime } \right)$都是合法kernel,那么通过以下形式组合构建的新的kernel也是合法的.
k(x,x′)=ck1(x,x′),c>0k(x,x′)=k1(x,x′)+k2(x,x′)k(x,x′)=exp(k1(x,x′))k(x,x′)=f(x)k1(x,x′)f(x′),f is any function...
这里以经典的 高斯核 为例, 通过其构造过程来验证其合法性.
首先高斯核函数是一种径向基核
k(x,x′)=exp(−∥x−x′∥2/2σ2)
把exp中的平方项展开得到
∥x−x′∥2=xTx+(x′)Tx′−2xTx′k(x,x′)=exp(−xTx/2σ2)exp(xTx′/σ2)exp(−(x′)Tx′/2σ2)
这里线性kernel k(x,x′)=xTx′ 是合法的,然后基于上述的构造性质,可以看出高斯核是合法的.同时,由于exp的泰勒展开有无穷多项,所以高斯核将特征向量映射到无穷多维.
通过概率生成模型来构建
给定一个生成模型p(x) , 我们可以定义kernel
k(x,x′)=p(x)p(x′)
这里的p(x)可以认为是ϕ(x).
高斯过程
什么是高斯过程?
首先高斯分布定义为函数y(x)上的一个高斯分布,并且这个函数在一系列点 x1,…,xN 的响应值 y(x1),…,y(xN) 联合概率分布也是高斯的.
高斯过程=高斯+过程
-
高斯: 对于y(x),为什么它是高斯的呢?我们令
y(x)=wTϕ(x)p(w)=N(w∣0,α−1I)
这里的y是一些w的混合,而w 我们给了一个高斯分布的先验.然后利用性质:高斯分布的线性组合依然是高斯分布.所以y(x)也是高斯分布. 这里我们只要确定y(x)的均值和方差就可以确定这个高斯分布.
-
过程:时间或者空间上一系列点x1,…,xN 的响应值y(x1),…,y(xN) .
考虑一系列的点,我们可以得到
y=ΦW
下面就是这个多维高斯分布的均值和协方差.
E[y]cov[y]=ΦE[w]=0=E[yyT]=ΦE[wwT]ΦT=α1ΦΦT=K
这里我们进一步做了简化,将y(x)的均值设为0,那么一个高斯过程就仅仅受协方差矩阵的控制.更重要的是,这个协方差矩阵我们用一个kernel来确定,kernel形式为特征映射法的形式. 这也是为什么高斯过程放在kernel method这一章! 综上,我们得到确定一个高斯过程的步骤:
- 确定核函数的形式
- 求解核形式的协方差矩阵
- 确定高斯过程
有了前几章的基础,书中这里举了2个核函数例子(高斯核,指数核).给定了$\mathbf { y } 的分布,我们可以进行采样,得到不同的\mathbf { y } .下图就是基于不同的核采样得到的\mathbf { y } $.
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eoEuGGeW-1580383052689)(https://ws2.sinaimg.cn/large/006tNbRwly1fy38weej2tj30nt0813zk.jpg)]
到这里什么是高斯过程及其如何确定一个高斯过程就清楚了.接下来是一些高斯过程应用(回归,分类).
基于高斯过程的回归
考虑观测值yn上的一个高斯噪声ϵn,
tn=yn+ϵnyn=y(xn)
这样t可以认为是从以y为均值的高斯分布中采样得到.似然函数如下
p(t∣y)=N(t∣y,β−1IN)
基于高斯过程的定义, 下式为高斯过程先验
p(y)=N(y∣0,K)
可以看出:核函数K控制先验.
为了得到t的分布,我们需要对其联合概率分布求积分,即边缘化
p(t)=∫p(t∣y)p(y)dy=N(t∣0,C)
这里的$p ( \mathbf { t } | \mathbf { y } ) 和 p ( \mathbf { y } ) $都是高斯分布,其中
C(xn,xm)=k(xn,xm)+β−1δnmδnm=1,if m=n
这里意思是只有协方差矩阵的对角线叠加了噪声.这是因为每次的噪声都是相互独立,所以非对角线的位置相关性都为0.这里对核函数K 的唯一限制就是协方差矩阵是正定的.假设λi 是核函数K 的特征值,那么协方差矩阵C的特征值就是λi+β−1.核函数需要满足半正定,即λi≥0,加上一个正数β就可以λi+β−1>0, 所以C是正定.
回归问题可以认为是基于之前的输入x1,…,xN和输出tN=(t1,…,tN)T ,对新的输入xN+1 进行预测(求tN+1).写成条件概率的形式就是
p(tN+1∣tN,x1,…,xN,xN+1),(省略输入)=p(tN+1∣tN)
前面已经得到了p(t)=N(t∣0,C) (高斯分布),那么
p(tN+1)=N(tN+1∣0,CN+1)
这里的$\mathbf { C } _ { N + 1 } 和前面的\mathbf { C }_N$ 的关系为,为什么要写成这种形式呢?
CN+1=(CNkTkc)
写成上述形式,可以利用公式
μa∣bΣa∣b=μa+ΣabΣbb−1(xb−μb)=Σaa−ΣabΣbb−1Σba
这里的p(xa∣xb)=p(tN+1∣tN) , b对应数据tN=(t1,…,tN)T , a对应tN+1.代入得到
p(tN+1∣t)=N(tN+1∣m(xN+1),σ2(xN+1))m(xN+1)σ2(xN+1)=kTCN−1t=c−kTCN−1k
这里有了均值和方差就定了:具有任意核函数k(xn,xm) 的高斯过程回归的预测分布.
这里高斯过程回归的预测是一堆基函数的表示,也就是在函数空间
对应之前的线性回归的预测是一堆参数的表示,也就是在参数空间
学习超参数
第一次听到GP是用于神经网络超参数的搜索,这里终于看到了真身.
GP依赖于协方差函数的选择 ,而实际中用一组带有参数的函数来代替协方差函数,这组函数可以描述协方差矩阵的参数.举例如下:
k(xn,xm)=θ0exp{−2θ1∥xn−xm∥2}+θ2+θ3xnTxm
这里的参数θ0,θ1...控制了协方差矩阵.不同参数的效果如下
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NFwk75Pa-1580383052689)(https://ws3.sinaimg.cn/large/006tNbRwly1fy8nz32snmj30ny0hr40v.jpg)]
这里利用最大似然来估计参数.
lnp(t∣θ)=−21ln∣CN∣−21tTCN−1t−2Nln(2π)
求导,并利用矩阵求导公式
∂x∂(A−1)∂x∂ln∣A∣=−A−1∂x∂AA−1=Tr(A−1∂x∂A)
可以得到
∂θi∂lnp(t∣θ)=−21Tr(CN−1∂θi∂CN)+21tTCN−1∂θi∂CNCN−1t
自动相关性确定
⾼斯过程中的⾃动相关性确定: 通过最⼤似然⽅法进⾏的参数最优化,能 够将不同输⼊的相对重要性从数据中推断出来。
假定一个二维高斯过程x=(x1,x2),其核函数如下
k(x,x′)=θ0exp{−21i=1∑2ηi(xi−xi′)2}
不同的参数ηi的影响如下: 当ηi变小的时候,核函数变的对相应的输入xi 不敏感了.
我们首先看看,根据参数ηi来输入xi的影响.下右图: 参数η2变小了,那么在其相应的输入x2下,输出变得较为稳定了.直观理解就是上式中$\eta _ { i } \left( x _ { i } - x _ { i } ^ { \prime } \right) ^ { 2 } $变小了,影响自然也下降.
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vtvhbWwB-1580383052690)(https://ws4.sinaimg.cn/large/006tNbRwly1fy8ohlkmgpj31010d1gnq.jpg)]
另一个角度,根据输入xi来看看参数ηi.
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RExVYdfr-1580383052690)(https://ws3.sinaimg.cn/large/006tNbRwly1fy8ovn5sunj30ss0g4ju7.jpg)]
高斯过程分类
GP分类的预测在整个实数轴上,如果分类需要进行放缩(sigmoid来放缩).
这里通过σ函数将高斯过程a(x) 变成了非高斯的随机过程y.
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UvTPYdFo-1580383052690)(https://ws2.sinaimg.cn/large/006tNbRwly1fy8p1so66rj311d0emq4n.jpg)]
与前面的回归类似,分类问题可以认为是基于之前的输入x1,…,xN和输出tN=(t1,…,tN)T ,对新的输入xN+1 进行预测(求tN+1).写成条件概率的形式就是
p(tN+1∣tN)
只不过这里的高斯过程换成了a,而预测的tN+1 是非高斯过程.
p(aN+1)=N(aN+1∣0,CN+1)
同时,在分类时,我们假定所有label都是正确的,所以协方差矩阵没有像分类一样叠加了一个噪声项β−1δnm. 这里的ν看起来像噪声,实际是为了保证协方差正定引入的.
对于2分类,将tN+1预测为1的概率
p(tN+1=1∣tN)p(tN+1=1∣aN+1)=∫p(tN+1=1∣aN+1)p(aN+1∣tN)daN+1=σ(aN+1)
那么问题来了:上面这个积分怎么解决? 目前有3种方法:
- variational inference
- expectation propagation
- Laplace approximation (下一节重点)
拉普拉斯近似
关于拉普拉斯近似的详细介绍见 PRML 4.4 . 简而言之,laplace approximation就是使用Gaussian去近似一个连续变量的概率密度函数,这个Gaussian是以后验分布的概率的众数为中心的。
注: 本节的aN就是前面的 tN.
上节说到, p(tN+1=1∣tN) 不好求解.
p(aN+1∣tN)=∫p(aN+1,aN∣tN)daN=p(tN)1∫p(aN+1,aN)p(tN∣aN+1,aN)daN=p(tN)1∫p(aN+1∣aN)p(aN)p(tN∣aN)daN=∫p(aN+1∣aN)p(aN∣tN)daN
其中p(tN∣aN+1,aN)=p(tN∣aN) .上述积分中
- 第一项是高斯过程,p(aN+1∣aN)=N(aN+1∣kTCN−1aN,c−kTCN−1k)
- 第二项是后验分布,如果我们能通过拉普拉斯近似找到一个高斯分布
那么,p(tN+1=1∣tN)就变成对2个高斯分布的积分,可以求解.
现在核心问题变成了第二项:后验怎么求?
后验=先验*似然(省略归一化)
lnp(t∣θ)=−21ln∣CN∣−21tTCN−1t−2Nln(2π)
把上式中的t换成a ,就得到 p(aN)
-
似然: 由现有的数据及其预测得到,
p(tN∣aN)=n=1∏Nσ(an)tn(1−σ(an))1−tn=n=1∏Neantnσ(−an)σ(an)tn(1−σ(an))1−tn=(1+eanean)tn(ean+11)1−tn=eantn1+ean1
-
结合先验和似然,得到后验的表达形式
Ψ(aN)==lnp(aN)+lnp(tN∣aN)−21aNTCN−1aN−2Nln(2π)−21ln∣CN∣+tNTaN−n=1∑Nln(1+ean)
目前我们已经有了后验的表达形式,如何来拉普拉斯近似来解呢?
-
找到后验分布的众数
后验求导,并代入
[ln(1+ex)]′=1+exex=1+e−x1=σ(x)
得到
∇Ψ(aN)=tN−σN−CN−1aN
其中,σN是元素为σ(an)的向量. 这里由于σN和aN的非线性关系, 所以令一阶导为零没有闭式解.利用二阶导和IRLS算法我们可以找到众数 aN⋆.
- 计算以众数 aN⋆为中心的高斯分布$q \left( \mathbf { a } _ { N } \right) $ .
q(aN)=N(aN∣aN⋆,H−1)
到这里, p(aN+1∣tN)已经可以解了,分别将2个高斯分布代入得到,最终p(aN+1∣tN) 是一个高斯分布,均值方差如下
E[aN+1∣tN]var[aN+1∣tN]=kT(tN−σN)=c−kT(WN−1+CN)−1k
接下来,我们需要确定 协方差函数的参数θ. 最大似然即可
参考
- https://www.zhihu.com/question/46631426
- PRML
- http://blog.videolectures.net/100-most-popular-machine-learning-talks-at-videolectures-net/
- MLAPP
- http://www.52nlp.cn/prml读书会第六章-kernel-methods