我们首先来回顾kernel函数的定义:一个函数K(x,y)为kernel函数当且仅当对∀g,∫K(x,y)g(x)g(y)dxdy≥0成立。另外,根据Mercer's theorem,存在一个映射Φ使K(x,y)=⟨Φ(x),Φ(y)⟩,并且对任意有限的点,kernel矩阵是半正定的。
一、核函数的封闭性
Hadamard product:
A∘B=[a11b11a12b12⋯a1nb1n⋮am1bm1am2bm2⋯amnbmn] Kronecked product:
A⊗B=[a11Ba12B⋯a1nB⋮am1Bam2B⋯amnB]
若K1(x,y),K2(x,y)为kernel函数,则以下式子仍为kernel函数。
- K1(x,y)+K2(x,y)
- aK1(x,y),(a>0)
- K1(x,y)K2(x,y)
- f(x)f(y)∀f
- x′Ay,for positive semidefinite A
- f(x)K1(x,y)f(y),∀f
- q(K1(x,y)), 其中q是非负系数的多项式
- exp{K1(x,y)}
二、例子
令K(x,y)=(\langle x,y\rangle+C)^d=\sum_{s=0}^d\binom{d}{s}C^s\langle x,y\rangle^{d-s},(C\geq 0)
这个函数可以看成单项为\langle x,y\rangle^{d-s}的一个多项式,系数为\binom{d}{s}C^s,所以它是个核函数。当C=0时,(\langle x,y\rangle)^r=(x_1y_1+x_2y_2+\cdots+x_my_m)^r。
可以把上式看成一个单项为x_1^{i_1}y_1^{i_1}x_2^{i_2}y_2^{i_2}\cdots x_m^{i_m}y_m^{i_m}所组成的多项式,其中i_1+i_2+\cdots+i_m=r,i_1,i_2,\cdots,i_m\geq 0。
令\Phi(x)\triangleq\left[\begin{array}&\vdots\\x_1^{i_1}x_2^{i_2}\cdots x_m^{i_m}\\\vdots\end{array}\right],则(\langle x,y\rangle)^r=\langle\Phi(x),\Phi(y)\rangle=K(x,y),可以证明上式的映射\Phi(x)为\binom{M+r-1}{r}维。
证明:(重复排列的证明)
命题等价于从1,2,\cdots,m中选出r个数的重复排列。设选出的数为a_1,a_2,\cdots,a_r,其中令a_1\leq a_2\leq\cdots\leq a_r。命题等价于求满足上述不等式a_1,a_2,\cdots,a_r的组合个数。构造b_1=a_1,b_2=a_2+1,\cdots,b_i=a_i+(i-1),\cdots,b_r=a_r+(r-1),其中b_1<b_2<\cdots<b_r且b_i与a_i对应,所以命题又等价于求b_i的组合数,而b_i取值于1\sim (n+m-1),故b_i的组合数为\binom{n+m-1}{m}。
从上述可以看出映射后的空间维数是非常大的,而引入核函数使我们只需要利用核函数进行计算,从而可以省去中间的映射过程。
高斯核函数:K(x,y)=exp\{-\frac{1}{2}\|x-y\|^2\},as the pointwise limit of polynomials。高斯核函数对应的映射为无限维。
Pointwise convergence:假定\{f_n\}是一个有相同定义域和上域的函数序列,\{f_n\}逐点收敛于f,记\lim_{n\to\infty}f_n=f,当且仅当\lim_{n\to\infty}f_n(x)=f(x)对\forall x属于定义域都成立。
三、不同核函数所对应的映射
对于每一个核函数K_i,必定对应着至少一个映射\Phi_i。假设K_1(x,y),K_2(x,y)对应的映射为\Phi_1,\Phi_2,则:
- K(x,y)=K_1(x,y)+K_2(x,y)对应的映射为\Phi(x)=(\Phi_1(x),\Phi_2(x))^\prime。
- K(x,y)=aK_1(x,y),a>0对应的映射为\Phi(x)=\sqrt{a}\Phi_1(x)。
- K(x,y)=K_1(x,y)K_2(x,y)对应的映射为\Phi(x)_{ij}=\Phi_1(x)_i\Phi_2(x)_j,即\Phi(x)=\left[\begin{array}&\Phi_1(x)_1\Phi_2(x)_1\\\vdots\\\Phi_1(x)_1\Phi_2(x)_n\\\vdots\\\Phi_1(x)_n\Phi_2(x)_1\\\vdots\\\Phi_1(x)_n\Phi_2(x)_n\end{array}\right]。
- K(x,y)=f(x)f(y),\forall f对应的映射的\Phi(x)=f(x)。
- K(x,y)=x^\prime\mathbf{A}y,其中\mathbf{A}为半正定,对应的映射为\Phi(x)=\mathbf{L}^\prime x,其中\mathbf{A}=\mathbf{L}\mathbf{L}^\prime(Cholesky分解)
四、在映射后的空间中操作
1)\|\Phi(x)\|=\sqrt{\langle\Phi(x),\Phi(x)\rangle}=\sqrt{K(x,x)}。
2) 单位化:\tilde{\Phi}(x)=\frac{\Phi(x)}{\|\Phi(x)\|}
\tilde{K}(x,y)=\langle \tilde{\Phi}(x),\tilde{\Phi}(y)\rangle=\frac{\langle \Phi(x),\Phi(y)\rangle}{\|\Phi(x)\|\|\Phi(y)\|}=\frac{K(x,y)}{\sqrt{k(x,x)K(y,y)}},为正则化的kernel(Normalized kernel)。
3)线性组合的范数
\begin{align*}\|\sum_{i}\alpha_i\Phi(x_i)\|^2&=\langle \sum_i\alpha_i\Phi(x_i),\sum_j\alpha_j\Phi(x_j)\rangle\\&=\sum_{i,j}\alpha_i\alpha_j\langle\Phi(x_i),\Phi(x_j)\rangle\\&=\sum_{i,j}\alpha_i\alpha_jK(x_i,x_j)\\&=\alpha^\prime K\alpha\end{align*}
五、最后
关于kernel的内容有非常多的东西,这里我只是简单的介绍(其实我对kernel也就懂这么点皮毛)。有兴趣的可以看看这本专门介绍kernel的书籍<Kernel Methods for Pattern Analysis>,还有论文<An Introduction to Kernel-Based Learning Algorithms>。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】凌霞软件回馈社区,携手博客园推出1Panel与Halo联合会员
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何统计不同电话号码的个数?—位图法
· C#高性能开发之类型系统:从 C# 7.0 到 C# 14 的类型系统演进全景
· 从零实现富文本编辑器#3-基于Delta的线性数据结构模型
· 记一次 .NET某旅行社酒店管理系统 卡死分析
· 长文讲解 MCP 和案例实战
· C#高性能开发之类型系统:从 C# 7.0 到 C# 14 的类型系统演进全景
· 管理100个小程序-很难吗
· 基于Blazor实现的运输信息管理系统
· 如何统计不同电话号码的个数?—位图法
· 微信支付功能的设计实现与关键实践(UniApp+Java)全代码