参考马春鹏 《模式识别与机器学习》翻译
之前的线性参数模型是,从训练数据得到参数w,然后训练数据就不需要了。然而另一类方法是在训练之后训练数据依然需要,比如KNN。通常这种⽅法需要⼀个度量,来定义输⼊空间任意两个向量之间的相似度。这种⽅法训练快,预测慢。
核方法的核心思想是希望找到一个映射函数,能够将低维线性不可分的数据点映射到高维空间,并且在希望在高维空间中这些数据是线性可分的。核函数由下⾯的关系给出。⽤特征空间的内积的⽅式表⽰核的概念使得我们能够对许多著名的算法进⾏有趣的扩展。
k ( x , x ′ ) = ϕ ( x ) T ϕ ( x ′ ) k \left( \boldsymbol { x } , \boldsymbol { x } ^ { \prime } \right) = \boldsymbol { \phi } ( \boldsymbol { x } ) ^ { T } \boldsymbol { \phi } \left( \boldsymbol { x } ^ { \prime } \right) k(x,x′)=ϕ(x)Tϕ(x′)
我们考虑⼀个线性模型
J ( w ) = 1 2 ∑ n = 1 N { w T ϕ ( x n ) − t n } 2 + λ 2 w T w J ( \boldsymbol { w } ) = \frac { 1 } { 2 } \sum _ { n = 1 } ^ { N } \left\{ \boldsymbol { w } ^ { T } \boldsymbol { \phi } \left( \boldsymbol { x } _ { n } \right) - t _ { n } \right\} ^ { 2 } + \frac { \lambda } { 2 } \boldsymbol { w } ^ { T } \boldsymbol { w } J(w)=21n=1∑N{wTϕ(xn)−tn}2+2λwTw
如果我们令J(w)关于w的梯度等于零,么我们看到w的解是向量φ(xn)的线性组合的形式
w = − 1 λ ∑ n = 1 N { w T ϕ ( x n ) − t n } ϕ ( x n ) = ∑ n = 1 N a n ϕ ( x n ) = Φ T a \boldsymbol { w } = - \frac { 1 } { \lambda } \sum _ { n = 1 } ^ { N } \left\{ \boldsymbol { w } ^ { T } \boldsymbol { \phi } \left( \boldsymbol { x } _ { n } \right) - t _ { n } \right\} \boldsymbol { \phi } \left( \boldsymbol { x } _ { n } \right) = \sum _ { n = 1 } ^ { N } a _ { n } \boldsymbol { \phi } \left( \boldsymbol { x } _ { n } \right) = \boldsymbol { \Phi } ^ { T } \boldsymbol { a } w=−λ1n=1∑N{wTϕ(xn)−tn}ϕ(xn)=n=1∑Nanϕ(xn)=ΦTa
a n = − 1 λ { w T ϕ ( x n ) − t n } a _ { n } = - \frac { 1 } { \lambda } \left\{ \boldsymbol { w } ^ { T } \boldsymbol { \phi } \left( \boldsymbol { x } _ { n } \right) - t _ { n } \right\} an=−λ1{wTϕ(xn)−tn}
如果我们将w = ΦT a代⼊J(w),那么可以得到
J ( a ) = 1 2 a T Φ Φ T Φ Φ T a − a T Φ Φ T t + 1 2 t T t + λ 2 a T Φ Φ T a J ( \boldsymbol { a } ) = \frac { 1 } { 2 } \boldsymbol { a } ^ { T } \boldsymbol { \Phi } \boldsymbol { \Phi } ^ { T } \boldsymbol { \Phi } \boldsymbol { \Phi } ^ { T } \boldsymbol { a } - \boldsymbol { a } ^ { T } \boldsymbol { \Phi } \boldsymbol { \Phi } ^ { T } \mathbf { t } + \frac { 1 } { 2 } \mathbf { t } ^ { T } \mathbf { t } + \frac { \lambda } { 2 } \boldsymbol { a } ^ { T } \boldsymbol { \Phi } \mathbf { \Phi } ^ { T } \boldsymbol { a } J(a)=21aTΦΦTΦΦTa−aTΦΦTt+21tTt+2λaTΦΦTa
其中i = (t1, . . . , tN)T 。我们现在定义Gram矩阵 K = Φ Φ T K = ΦΦ^T K=ΦΦT ,它是⼀个N × N的对称矩阵
K n m = ϕ ( x n ) T ϕ ( x m ) = k ( x n , x m ) K _ { n m } = \boldsymbol { \phi } \left( \boldsymbol { x } _ { n } \right) ^ { T } \boldsymbol { \phi } \left( \boldsymbol { x } _ { m } \right) = k \left( \boldsymbol { x } _ { n } , \boldsymbol { x } _ { m } \right) Knm=ϕ(xn)Tϕ(xm)=k(xn,xm)
使⽤Gram矩阵,平⽅和误差函数可以写成
J ( a ) = 1 2 a T K K a − a T K t + 1 2 t T t + λ 2 a T K a J ( \boldsymbol { a } ) = \frac { 1 } { 2 } \boldsymbol { a } ^ { T } \boldsymbol { K } \boldsymbol { K } \boldsymbol { a } - \boldsymbol { a } ^ { T } \boldsymbol { K } \mathbf { t } + \frac { 1 } { 2 } \mathbf { t } ^ { T } \mathbf { t } + \frac { \lambda } { 2 } \boldsymbol { a } ^ { T } \boldsymbol { K } \boldsymbol { a } J(a)=21aTKKa−aTKt+21tTt+2λaTKa
a = ( K + λ I N ) − 1 t \boldsymbol { a } = \left( \boldsymbol { K } + \lambda \boldsymbol { I } _ { N } \right) ^ { - 1 } \mathbf { t } a=(K+λIN)−1t
如果我们将这个代⼊线性回归模型中,对于新的输⼊x,我们得到了下⾯预测
y ( x ) = w T ϕ ( x ) = a T Φ ϕ ( x ) = k ( x ) T ( K + λ I N ) − 1 t y ( \boldsymbol { x } ) = \boldsymbol { w } ^ { T } \boldsymbol { \phi } ( \boldsymbol { x } ) = \boldsymbol { a } ^ { T } \boldsymbol { \Phi } \boldsymbol { \phi } ( \boldsymbol { x } ) = \boldsymbol { k } ( \boldsymbol { x } ) ^ { T } \left( \boldsymbol { K } + \lambda \boldsymbol { I } _ { N } \right) ^ { - 1 } \mathbf { t } y(x)=wTϕ(x)=aTΦϕ(x)=k(x)T(K+λIN)−1t
其中我们定义了向量k(x),它的元素为kn(x) = k(xn, x)。因此我们看到对偶公式使得最⼩平⽅
问题的解完全通过核函数k(x, x′)表⽰。这被称为对偶公式
对偶公式的优点是,它可以完全通过核函数k(x, x′)来表⽰。于是,我们可以直接针对核函数进⾏计算,避免了显式地引⼊特征向量φ(x),这使得我们可以隐式地使⽤⾼维特征空间,甚⾄⽆限维特征空间。
⼀种⽅法是选择⼀个特征空间映射φ(x),然后使⽤这个映射寻找对应的核,如图6.1所⽰。这⾥,⼀维空间的核函数被定义为
k ( x , x ′ ) = ϕ ( x ) T ϕ ( x ′ ) = ∑ i = 1 M ϕ i ( x ) ϕ i ( x ′ ) k \left( x , x ^ { \prime } \right) = \phi ( x ) ^ { T } \phi \left( x ^ { \prime } \right) = \sum _ { i = 1 } ^ { M } \phi _ { i } ( x ) \phi _ { i } \left( x ^ { \prime } \right) k(x,x′)=ϕ(x)Tϕ(x′)=i=1∑Mϕi(x)ϕi(x′)
另⼀种⽅法是直接构造核函数。在这种情况下,我们必须确保我们核函数是合法的,即它对应于某个(可能是⽆穷维)特征空间的标量积。考虑下⾯的核函数
k ( x , z ) = ( x T z ) 2 k ( \boldsymbol { x } , \boldsymbol { z } ) = \left( \boldsymbol { x } ^ { T } \boldsymbol { z } \right) ^ { 2 } k(x,z)=(xTz)2
如果我们取⼆维输⼊空间x = (x1, x2)的特殊情况,那么我们可以展开这⼀项,于是得到对应的
⾮线性特征映射,
k ( x , z ) = ( x T z ) 2 = ( x 1 z 1 + x 2 z 2 ) 2 = x 1 2 z 1 2 + 2 x 1 z 1 x 2 z 2 + x 2 2 z 2 2 = ( x 1 2 , 2 x 1 x 2 , x 2 2 ) ( z 1 2 , 2 z 1 z 2 , z 2 2 ) T = ϕ ( x ) T ϕ ( z ) \begin{aligned} k ( \boldsymbol { x } , \boldsymbol { z } ) & = \left( \boldsymbol { x } ^ { T } \boldsymbol { z } \right) ^ { 2 } = \left( x _ { 1 } z _ { 1 } + x _ { 2 } z _ { 2 } \right) ^ { 2 } \\ & = x _ { 1 } ^ { 2 } z _ { 1 } ^ { 2 } + 2 x _ { 1 } z _ { 1 } x _ { 2 } z _ { 2 } + x _ { 2 } ^ { 2 } z _ { 2 } ^ { 2 } \\ & = \left( x _ { 1 } ^ { 2 } , \sqrt { 2 } x _ { 1 } x _ { 2 } , x _ { 2 } ^ { 2 } \right) \left( z _ { 1 } ^ { 2 } , \sqrt { 2 } z _ { 1 } z _ { 2 } , z _ { 2 } ^ { 2 } \right) ^ { T } \\ & = \boldsymbol { \phi } ( \boldsymbol { x } ) ^ { T } \boldsymbol { \phi } ( \boldsymbol { z } ) \end{aligned} k(x,z)=(xTz)2=(x1z1+x2z2)2=x12z12+2x1z1x2z2+x22z22=(x12,2x1x2,x22)(z12,2z1z2,z22)T=ϕ(x)Tϕ(z)
特征映射为
ϕ ( x ) = ( x 1 2 , 2 x 1 x 2 , x 2 2 ) T \boldsymbol { \phi } ( \boldsymbol { x } ) = \left( x _ { 1 } ^ { 2 } , \sqrt { 2 } x _ { 1 } x _ { 2 } , x _ { 2 } ^ { 2 } \right) ^ { T } ϕ(x)=(x12,2x1x2,x22)T
更⼀般地,我们需要找到⼀种更简单的⽅法检验⼀个函数是否是⼀个合法的核函数,⽽不需要显⽰地构造函数φ(x)。
核函数k(x, x′)是⼀个合法的核函数的充分必要条件是Gram矩阵(元素由k(xn, xm)给出)在所有的集合{xn}的选择下都是半正定的(Shawe-Taylorand Cristianini, 2004)。注意,⼀个半正定的矩阵与元素全部⾮负的矩阵不同。
构造新的核函数的⼀个强⼤的⽅法是使⽤简单的核函数作为基本的模块来构造。给定合法的核k1(x, x′)和k2(x, x′),下⾯的新核也是合法的
k ( x , x ′ ) = c k 1 ( x , x ′ ) k ( x , x ′ ) = f ( x ) k 1 ( x , x ′ ) f ( x ′ ) k ( x , x ′ ) = q ( k 1 ( x , x ′ ) ) k ( x , x ′ ) = exp ( k 1 ( x , x ′ ) ) e t c \begin{array} { c } { k \left( \boldsymbol { x } , \boldsymbol { x } ^ { \prime } \right) = c k _ { 1 } \left( \boldsymbol { x } , \boldsymbol { x } ^ { \prime } \right) } \\ { k \left( \boldsymbol { x } , \boldsymbol { x } ^ { \prime } \right) = f ( \boldsymbol { x } ) k _ { 1 } \left( \boldsymbol { x } , \boldsymbol { x } ^ { \prime } \right) f \left( \boldsymbol { x } ^ { \prime } \right) } \\ { k \left( \boldsymbol { x } , \boldsymbol { x } ^ { \prime } \right) = q \left( k _ { 1 } \left( \boldsymbol { x } , \boldsymbol { x } ^ { \prime } \right) \right) } \\ { k \left( \boldsymbol { x } , \boldsymbol { x } ^ { \prime } \right) = \exp \left( k _ { 1 } \left( \boldsymbol { x } , \boldsymbol { x } ^ { \prime } \right) \right) } \end{array} \\etc k(x,x′)=ck1(x,x′)k(x,x′)=f(x)k1(x,x′)f(x′)k(x,x′)=q(k1(x,x′))k(x,x′)=exp(k1(x,x′))etc
构造核的另⼀个强⼤的⽅法是从⼀个概率⽣成式模型开始构造(Haussler, 1999)这使得我们可以在⼀个判别式的框架中使⽤⽣成式模型。⽣成式模型可以⾃然地处理缺失数据,并且在隐马尔科夫模型的情况下,可以处理长度变化的序列。相反,判别式模型在判别式的任务中通常会⽐⽣成式模型的表现更好。⼀种将⼆者结合的⽅法是使⽤⼀个⽣成式模型定义⼀个核,然后在判别式⽅法中使⽤这个核。
给定⼀个⽣成式模型p(x),我们可以定义⼀个核,很明显,这是⼀个合法的核,因为我们可以把它看成由映射p(x)定义的⼀维特征空间中的⼀个内积。
k ( x , x ′ ) = p ( x ) p ( x ′ ) k \left( \boldsymbol { x } , \boldsymbol { x } ^ { \prime } \right) = p ( \boldsymbol { x } ) p \left( \boldsymbol { x } ^ { \prime } \right) k(x,x′)=p(x)p(x′)
在第3章,我们讨论了基于固定基函数的线性组合的回归模型,但是我们没有详细讨论可以
取哪种形式的基函数。⼀种⼴泛使⽤的基函数是径向基函数(radial basis functions)。径向基函数中,每⼀个基函数只依赖于样本和中⼼µj之间的径向距离(通常是欧⼏⾥得距离),
即φj(x) = h(∥x − µj∥)。
径 向基 函 数 被 ⽤来 进 ⾏ 精 确的 函 数 内插 (Powell, 1987)。给定⼀组输⼊向量{x1, . . . , xN}以及对应的⽬标值{t1, . . . , tN},⽬标是找到⼀个光滑的函数f(x),它能够精确地拟合每个⽬标值,即对于n = 1, . . . , N,都有f(xn) = tn。可以这样做:将f(x)表⽰为径向基函数的线性组合,每个径向基函数都以数据点为中⼼,即
f ( x ) = ∑ n = 1 N w n h ( ∥ x − x n ∥ ) f ( \boldsymbol { x } ) = \sum _ { n = 1 } ^ { N } w _ { n } h \left( \left\| \boldsymbol { x } - \boldsymbol { x } _ { n } \right\| \right) f(x)=n=1∑Nwnh(∥x−xn∥)
由于每⼀个数据点都关联了⼀个基函数,因此当对于新的数据点进⾏预测时,对应的模型
的计算开销会⾮常⼤。因此,⼀些新的模型被提出来(Broomhead and Lowe, 1988; Moody andDarken, 1989; Poggio and Girosi, 1990),这些模型仍然对径向基函数进⾏展开,但是基函数的数量M要⼩于数据点的数量N。通常,基函数的数量,以及它们的中⼼µi,都只是基于输⼊数据{xn}⾃⾝来确定。然后基函数被固定下来,系数{wi}由最⼩平⽅⽅法通过解线性⽅程的⽅式确定。
选择基函数中⼼的⼀种最简单的⽅法是使⽤数据点的⼀个随机选择的⼦集。⼀个更加系统化
的⽅法被称为正交最⼩平⽅(Chen et al., 1991)。这是⼀个顺序选择的过程,在每⼀个步骤
中,被选择作为基函数的下⼀个数据点对应于能够最⼤程度减⼩平⽅和误差的数据点。
我们可以从核密度估计开始,以⼀个不同的⾓度研究核回归模型(3.61)。假设我们有⼀个
训练集{xn, tn},我们使⽤Parzen密度估计来对联合分布p(x, t)进⾏建模,即
p ( x , t ) = 1 N ∑ n = 1 N f ( x − x n , t − t n ) p ( \boldsymbol { x } , t ) = \frac { 1 } { N } \sum _ { n = 1 } ^ { N } f \left( \boldsymbol { x } - \boldsymbol { x } _ { n } , t - t _ { n } \right) p(x,t)=N1n=1∑Nf(x−xn,t−tn)
其中f(x, t)是分量密度函数,每个数据点都有⼀个以数据点为中⼼的这种分量。我们现在要找
y(x)的表达式,对应于以输⼊变量为条件的⽬标变量的条件均值
y ( x ) = E [ t ∣ x ] = ∫ − ∞ ∞ t p ( t ∣ x ) d t = ∫ t p ( x , t ) d t ∫ p ( x , t ) d t = ∑ n ∫ t f ( x − x n , t − t n ) d t ∑ m ∫ f ( x − x m , t − t m ) d t \begin{aligned} y ( \boldsymbol { x } ) & = \mathbb { E } [ t | \boldsymbol { x } ] = \int _ { - \infty } ^ { \infty } t p ( t | \boldsymbol { x } ) \mathrm { d } t \\ & = \frac { \int t p ( \boldsymbol { x } , t ) \mathrm { d } t } { \int p ( \boldsymbol { x } , t ) \mathrm { d } t } \\ & = \frac { \sum _ { n } \int t f \left( \boldsymbol { x } - \boldsymbol { x } _ { n } , t - t _ { n } \right) \mathrm { d } t } { \sum _ { m } \int f \left( \boldsymbol { x } - \boldsymbol { x } _ { m } , t - t _ { m } \right) \mathrm { d } t } \end{aligned} y(x)=E[t∣x]=∫−∞∞tp(t∣x)dt=∫p(x,t)dt∫tp(x,t)dt=∑m∫f(x−xm,t−tm)dt∑n∫tf(x−xn,t−tn)dt
假设分量的密度函数的均值为零
∫ − ∞ ∞ f ( x , t ) t d t = 0 \int _ { - \infty } ^ { \infty } f ( \boldsymbol { x } , t ) t \mathrm { d } t = 0 ∫−∞∞f(x,t)tdt=0
y ( x ) = ∑ n g ( x − x n ) t n ∑ m g ( x − x m ) = ∑ n k ( x , x n ) t n \begin{aligned} y ( \boldsymbol { x } ) & = \frac { \sum _ { n } g \left( \boldsymbol { x } - \boldsymbol { x } _ { n } \right) t _ { n } } { \sum _ { m } g \left( \boldsymbol { x } - \boldsymbol { x } _ { m } \right) } \\ & = \sum _ { n } k \left( \boldsymbol { x } , \boldsymbol { x } _ { n } \right) t _ { n } \end{aligned} y(x)=∑mg(x−xm)∑ng(x−xn)tn=n∑k(x,xn)tn
g ( x ) = ∫ − ∞ ∞ f ( x , t ) d t g ( \boldsymbol { x } ) = \int _ { - \infty } ^ { \infty } f ( \boldsymbol { x } , t ) \mathrm { d } t g(x)=∫−∞∞f(x,t)dt
在⾼斯过程的观点中,我们抛弃参数模型,直接定义函数上的先验概率分布。乍⼀看来,在
函数组成的不可数的⽆穷空间中对概率分布进⾏计算似乎很困难。但是,正如我们将看到的那
样,对于⼀个有限的训练数据集,我们只需要考虑训练数据集和测试数据集的输⼊xn处的函数
值即可,因此在实际应⽤中我们可以在有限的空间中进⾏计算。
考虑⼀个模型M,它被定义为由向量φ(x)的元素给出的M个固定基函数的线性组合
y ( x ) = w T ϕ ( x ) y ( \boldsymbol { x } ) = \boldsymbol { w } ^ { T } \boldsymbol { \phi } ( \boldsymbol { x } ) y(x)=wTϕ(x)
考虑w上的⼀个先验概率分布
p ( w ) = N ( w ∣ 0 , α − 1 I ) p ( \boldsymbol { w } ) = \mathcal { N } ( \boldsymbol { w } | \mathbf { 0 } , \alpha ^ { - 1 } \boldsymbol { I } ) p(w)=N(w∣0,α−1I)
定义的w上的概率分布就产⽣了⼀个函数y(x)上的⼀个概率分布。我们希望计算这个函数在某个具体的x处的函数值,例如在训练数据点x1, . . . , xN处的函数值。于是我们感兴趣的是函数值y(x1), . . . , y(xN)的概率分布。函数值的集合记作向量y
y = Φ w \mathbf { y } = \mathbf { \Phi } \boldsymbol { w } y=Φw
其中Φ是设计矩阵,元素为 Φ n k = ϕ k ( x n ) \Phi _ { n k } = \phi _ { k } \left( \boldsymbol { x } _ { n } \right) Φnk=ϕk(xn)我们注意到v是由w的元素给出的服从⾼斯分布的变量的线性组合,因此它本⾝是服从⾼斯分布。我们只需要找到它的均值和⽅差。
E [ y ] = Φ E [ w ] = 0 cov [ y ] = E [ y y T ] = Φ E [ w w T ] Φ T = 1 α Φ Φ T = K \begin{array} { c } { \mathbb { E } [ \mathbf { y } ] = \mathbf { \Phi } \mathbb { E } [ \boldsymbol { w } ] = \mathbf { 0 } } \\ { \operatorname { cov } [ \mathbf { y } ] = \mathbb { E } \left[ \mathbf { y } \mathbf { y } ^ { T } \right] = \mathbf { \Phi } \mathbb { E } \left[ \boldsymbol { w } \boldsymbol { w } ^ { T } \right] \boldsymbol { \Phi } ^ { T } = \frac { 1 } { \alpha } \boldsymbol { \Phi } \mathbf { \Phi } ^ { T } = \boldsymbol { K } } \end{array} E[y]=ΦE[w]=0cov[y]=E[yyT]=ΦE[wwT]ΦT=α1ΦΦT=K
K是Gram矩阵,元素为
K n m = k ( x n , x m ) = 1 α ϕ ( x n ) T ϕ ( x m ) K _ { n m } = k \left( \boldsymbol { x } _ { n } , \boldsymbol { x } _ { m } \right) = \frac { 1 } { \alpha } \boldsymbol { \phi } \left( \boldsymbol { x } _ { n } \right) ^ { T } \boldsymbol { \phi } \left( \boldsymbol { x } _ { m } \right) Knm=k(xn,xm)=α1ϕ(xn)Tϕ(xm)