图谱连接

草稿

RBF 核

把距离转成局部相似度,让近点比远点重要得多。

concept intermediate machine-learningkernelssimilarity

引子问题:局部近邻应该更重要

想象我们要预测一套新房子的价格走势,而且所有特征都已经归一化到可比较的尺度。这里先只用两个特征讲故事:归一化面积和归一化社区质量。

新房源是 A=(1,1)。一个近的历史样本是 B=(2,1)。一个远的历史样本是 E=(4,4)。如果任务需要局部预测,B 应该比 E 更影响 A,因为 B 在特征空间里离 A 更近。

远处同方向房源会误导点积当面积和社区特征已经归一化后,局部预测应该优先使用近邻房源 B,而不是远处房源 E。
近:距离平方 = 1远:距离平方 = 18A (1, 1)B (2, 1)E (4, 4)归一化面积特征归一化社区特征

距离有意义,是因为两个坐标轴已经缩放到可比较的归一化单位。

从 A 出发:点积奖励 E,但 RBF 奖励局部近邻 B
配对点积距离平方RBF,gamma = 0.5
A -> B310.607
A -> E8180.000123

朴素想法:继续使用点积

核函数(kernel function)常常像是在走“内积捷径”,所以第一反应可能是继续用点积 xTzx^Tz

但这不适合这个局部邻域问题。从 A=(1,1) 出发,点积给 A -> B 的分数是 3,却给 A -> E 的分数是 8。远处同方向的房源赢了,因为点积会奖励幅度和相对于原点的方向对齐。它问的不是:“哪套房子离 A 更近?”

从 A 出发的配对点积 xTzx^Tz距离平方 xz2\lVert x-z\rVert^2γ=0.5\gamma=0.5 时的 RBF
A -> B310.607
A -> E8180.000123

这张表把问题暴露出来:点积把远点排得更高,而距离告诉我们局部样本其实近得多。

核心发明:指数距离衰减

最小的修补办法,是不再比较“从原点看方向是否一致”,而是比较平方欧几里得距离。距离为 0 应该表示最大相似度。距离越大,相似度应该平滑地衰减到接近 0

RBF 核(radial basis function kernel)正是这样做的:先算距离平方,乘上负的衰减率,再经过指数衰减。

指数衰减把距离变成局部性当 gamma = 0.5 时,距离平方越大,RBF 分数越接近 0。
||x - z||^2 = 01

指数 -0

||x - z||^2 = 10.607

指数 -0.500

||x - z||^2 = 50.082

指数 -2.500

||x - z||^2 = 100.007

指数 -5

||x - z||^2 = 180.000123

指数 -9

gamma = 0.5 的衰减条
距离平方RBF 值
01
10.607
50.082
100.007
180.000123

形式化定义

K(x,z)=exp(γxz2)K(x,z)=\exp(-\gamma \lVert x-z\rVert^2)

这里 xxzz 是两个输入向量。xz2\lVert x-z\rVert^2 是它们的平方欧几里得距离。参数 γ\gamma 是正的衰减率。函数 exp\exp 会把指数 0 映射到 1;负指数会得到 01 之间的值。

对于 γ>0\gamma>0 和有限实数输入,RBF 的取值在 (0,1](0,1]。自匹配的距离是 0,所以 K(x,x)=exp(0)=1K(x,x)=\exp(0)=1。任何非零距离都会产生负指数,因此结果小于 1,但仍然为正。

常见的带宽写法是 γ=1/(2σ2)\gamma = 1 / (2\sigma^2)。更大的 γ\gamma 表示更小的有效邻域。更大的 σ\sigma 会让 γ\gamma 变小,所以邻域变宽。

相似度随距离衰减RBF 让近点高度相似,让远点几乎不相关。
从锚点 A 出发的RBF 核
点积距离平方K(A, z)
A201
B310.607
C150.082
D-2100.007

交互比较

现在在同一组共享点上比较 RBF、线性核、多项式核和 Sigmoid 核。先换锚点,再只调整 RBF 的 gamma 选择器。非 RBF 核保持固定参数,这样带宽影响不会和别的参数混在一起。

核相似度实验台

exp(-gamma ||x - z||^2), gamma = 0.500: 把距离近转成相似度高;远点会衰减到接近 0。

把每个点都和选中的锚点比较。注意每种核函数对“接近”的理解不同。

A -> A1

相似度; 点积 2, 距离平方 0

A -> B0.607

相似度; 点积 3, 距离平方 1

A -> C0.082

相似度; 点积 1, 距离平方 5

A -> D0.007

相似度; 点积 -2, 距离平方 10

从锚点 A 出发,RBF 的模式是:

GammaA -> B,距离平方 1A -> C,距离平方 5A -> D,距离平方 10
0.10.9050.6070.368
0.50.6070.0820.007
1.00.3680.0070.000045

增大 gamma 不会移动这些点。它只会让相同距离下的相似度衰减得更快。

实现草图

输入 xz 必须是等长的数值向量。令 d 表示这个共同的特征数。一个直接的 TypeScript 实现是:

function rbfKernel(x: number[], z: number[], gamma: number) {
  if (x.length !== z.length) {
    throw new Error("RBF kernel expects equal-length vectors.");
  }

  const d = x.length;
  let squaredDistance = 0;

  for (let i = 0; i < d; i += 1) {
    squaredDistance += (x[i] - z[i]) ** 2;
  }

  return Math.exp(-gamma * squaredDistance);
}

对于 A=(1,1)B=(2,1),计算过程小到可以手算:

特征下标来自 A 的 x_i来自 B 的 z_i(x_i-z_i)^2运行和
01211
11101

所以 AB2=1\lVert A-B\rVert^2=1。当 γ=0.5\gamma=0.5 时,K(A,B)=exp(0.5)0.607K(A,B)=\exp(-0.5)\approx0.607

行为、不变量和复杂度

关键不变量是局部性:当 gamma 为正时,平方距离变大不会让 RBF 相似度变大。

情况会发生什么为什么重要
自匹配K(x,x)=1K(x,x)=1一个点和自己最相似。
近点数值接近 1局部样本保留影响力。
远点数值衰减到接近 0远处样本几乎不相关。
Gamma 等于 0每一对都映射到 1这不是局部的:距离不再起作用。
Gamma 小于 0更远的点可能超过 1这不是本节点讨论的 RBF 设置。
小的正 gamma同样距离衰减更慢邻域更宽。
大的正 gamma同样距离衰减更快邻域更小。

如果每个向量有 d 个数值特征,一次 RBF 计算需要 O(d)O(d):循环只读每个坐标一次。把一个查询点和 n 个存储点逐个比较,需要 O(nd)O(nd)

常见混淆

误解修正
“RBF 是角度相似度。”RBF 是局部距离相似度。同方向还不够。
“更大的 gamma 总是更好。”更大的 gamma 可能让邻域过小,过度局部化。
“更小的 gamma 总是更平滑、更安全。”更小的 gamma 可能让太多点看起来都差不多。
“带宽 sigma 和 gamma 同方向变化。”γ=1/(2σ2)\gamma = 1 / (2\sigma^2) 下,更大的 γ\gamma 表示更小的 σ\sigma 和更小的邻域。
“特征缩放可有可无。”一个大尺度特征会主导距离平方。先归一化或缩放有意义的特征。
“现在必须理解无限维特征映射证明。”RBF 可以这样描述,但本节点只需要距离衰减行为。

图谱连接与练习

RBF 位于一般 核函数 之后,因为它是一种具名核函数。它和 线性核 形成对比:线性相似度奖励相对于原点的方向对齐,而 RBF 奖励局部接近。它也和 多项式核 形成对比:多项式核加入有限次数的交互,而 RBF 表现得像更丰富的局部邻域规则。下一个相邻的具名核是 Sigmoid 核,它又回到压缩后的点积,而且有效性条件更微妙。

核函数学习路径特征映射引出核函数;不同核函数选择不同的相似度含义。
特征映射

基础思想

核函数

基础思想

线性核

具体选择

多项式核

具体选择

RBF 核

具体选择

Sigmoid 核

具体选择

预测题:

  1. 从锚点 A 出发,除了 A 自己之外,共享点中谁的 RBF 分数最高?
  2. gamma0.1 增大到 1.0 时,A -> C 会发生什么?
  3. 为什么点积会把 E=(4,4) 排在 B=(2,1) 前面,即使 B 才是局部近邻?

图谱连接 : RBF 核