CS229: 5

核方法, Kernel

核(Kernel)

有时候,直接得到的自变量xx用线性的方法直接预测不太好,比如y=x2y=x^2,要提取出一些别的特征,我们还是希望使用线性的方法,可以把xx映射到ϕ(x)\phi(x),在ϕ(x)\phi(x)上用前面的线性的方法。ϕ(x)\phi(x)称为特征。

但是注意,乱加特征很容易过拟合。

线性回归,就相应改成了

hθ=θTϕ(x)θ:=θ+α(y(i)θTϕ(x(i)))ϕ(x(i))h_{\theta}=\theta^T\phi(x)\\ \theta:= \theta+\alpha(y^{(i)}-\theta^T\phi(x^{(i)}))\phi(x^{(i)})

但是如果特征太多,进行梯度下降就很慢了。

核技巧

用来加速梯度下降。

先证明θ\theta可以被ϕ(x(i))\phi(x^{(i)})线性表示。

考虑归纳,设一开始θ=0=i=1n0ϕ(x(i))\theta=0=\sum_{i=1}^n0\phi(x^{(i)}),成立。

若迭代kk次成立,设

θ=i=1nβiϕ(x(i))\theta=\sum_{i=1}^{n}\beta_i\phi(x^{(i)})

进行第k+1k+1次迭代时

θ=θ+αi=1n(y(i)θTϕ(x(i)))ϕ(x(i))=i=1n(βi+αy(i)αθTϕ(x(i)))ϕ(x(i))βi=βi+α(y(i)θTϕ(x(i)))=βi+α(y(i)j=1nβjϕ(x(j))ϕ(x(i))T)=βi+α(y(i)j=1nβj<ϕ(x(j)),ϕ(x(i))>)\theta'=\theta+\alpha \sum_{i=1}^{n}(y^{(i)}-\theta^T\phi(x^{(i)}))\phi(x^{(i)})\\ =\sum_{i=1}^{n}(\beta_i+\alpha y^{(i)}-\alpha\theta^T\phi(x^{(i)}))\phi(x^{(i)})\\ \beta_i'=\beta_i+\alpha(y^{(i)}-\theta^T\phi(x^{(i)}))\\ =\beta_i+\alpha (y^{(i)}-\sum_{j=1}^{n}\beta_j\phi(x^{(j)})\phi(x^{(i)})^T)\\ =\beta_i+\alpha (y^{(i)}-\sum_{j=1}^{n}\beta_j \left< \phi(x^{(j)}), \phi(x^{(i)})\right>)

如果能预处理出来全部ϕ(x(i))\phi(x^{(i)})的内积,也就是一个gram矩阵,对整个训练集梯度下降一次是O(n2)O(n^2)dd是特征的维数。

但是朴素做法一次复杂度是O(nd)O(nd),如果涉及到很高维的特征就会变快。还有一个用核技巧的重要原因是朴素做法不能处理映射到无穷维的情况。

我们称这个内积的函数为核函数

K(x,y)=<ϕ(x),ϕ(y)>Ki,j=<ϕ(x(i)),ϕ(x(j))>K(x,y)=\left< \phi(x), \phi(y) \right>\\ K_{i,j}=\left< \phi(x^{(i)}), \phi(x^{(j)}) \right>

核函数的性质

  • 核函数的矩阵实对称
  • 核函数的矩阵是半正定的

vTKv=i=1nj=1nvivj<ϕ(x(i)),ϕ(x(j))>=i=1nj=1n<viϕ(x(i)),vjϕ(x(j))>v^TKv=\sum_{i=1}^{n}\sum_{j=1}^{n}v_iv_j \left< \phi(x^{(i)}), \phi(x^{(j)})\right>\\ =\sum_{i=1}^{n}\sum_{j=1}^{n} \left< v_i\phi(x^{(i)}), v_j\phi(x^{(j)})\right>\\

考虑到内积的运算是双线性的(这里都是实数),有

=<i=1nviϕ(x(i)),i=1nviϕ(x(i))>0=\left< \sum_{i=1}^{n} v_i\phi(x^{(i)}), \sum_{i=1}^{n} v_i\phi(x^{(i)})\right>\geq 0

  • Mercer Theroem: 一个矩阵能充当核函数矩阵的充要条件是半正定

    不会证,好像要泛函分析

K(x,z)=K1(x,z)+K2(x,z)K(x,z)=K_1(x,z)+K_2(x,z)

考虑vTKv=vT(K1+K2)v=vTK1v+vTK2v0v^TKv=v^T(K_1+K_2)v=v^TK_1v+v^TK_2v\geq 0即可。

值得注意的是,相减不一定能得到核函数(内积要求范数非负)

K(x,z)=K1(x,z)K2(x,z)K(x,z)=K_1(x,z)K_2(x,z)

首先要拓展一下之前讨论半正定的数域

vTKv0,vRnv^TKv\geq 0,v\in \R ^n

则希望证明

vHKv0,vCnv^HKv \geq 0,v \in C^n

v=x+iy,x,yRnv=x+iy,x,y\in R^n

直接代入得

vHKv=(xTiyT)K(x+iy)=xTKx+ixTKyiyTKx+yTKy=xTKx+yTKy0v^HKv=(x^T-iy^T)K(x+iy)=x^TKx+ix^TKy-iy^TKx+y^TKy=x^TKx+y^TKy\geq 0

还是从矩阵的视角来看核函数

Ki,j=[K1]i,j[K2]i,jK_{i,j}=[K_1]_{i,j}[K_2]_{i,j}

知道K1K_1实对称,一定可以正交相似对角化

K1=CTDCK_1=C^TDC

DD是特征值组成的对角矩阵。

在复数域中对对角阵DD开方,得

K1=UHUK_1=U^HU

直接考虑半正定的定义式

vTKv=vHKv=i=1nj=1nvivj[K1]i,j[K2]i,j=i=1nj=1nvivj[K2]i,jk=1nuk,iuk,j=k=1ni=1nj=1n[K2]i,juk,iviuk,jvj=k=1ni=1nj=1n[K2]i,jwi(k)wj(k)=k=1n(w(k))TK2w(k)0v^TKv=v^HKv=\sum_{i=1}^{n}\sum_{j=1}^{n}\overline{v_i}v_j[K_1]_{i,j}[K_2]_{i,j}\\ =\sum_{i=1}^{n}\sum_{j=1}^{n}\overline{v_i}v_j[K_2]_{i,j}\sum_{k=1}^{n}\overline{u_{k,i}}u_{k,j}\\ =\sum_{k=1}^{n}\sum_{i=1}^{n}\sum_{j=1}^{n}[K_2]_{i,j}\overline{u_{k,i}v_i}u_{k,j}v_j\\ =\sum_{k=1}^{n}\sum_{i=1}^{n}\sum_{j=1}^{n}[K_2]_{i,j}w^{(k)}_iw^{(k)}_j\\ =\sum_{k=1}^{n}(w^{(k)})^TK_2w^{(k)}\\ \geq 0

在数学上这种对矩阵的操作被称为哈达玛积,记为

K=K1K2K=K_1 \odot K_2

  • 正定核

    K(x,z)=exp(xz22τ2)K(x,z)=\exp(-\frac{||x-z||^2}{2\tau^2})

    实际上将向量映射到了无穷维,而维数越高越利于用超平面分类(线性可分),这在后面的SVM中得到了广泛应用。

CS229: 5
http://llz3724.github.io/2025/04/22/2025-04-22-cs229_5/
作者
llz3724
发布于
2025年4月22日
许可协议