草稿
核函数
像已经把输入映射进特征空间一样比较两个输入,而且通常不需要显式构造那个空间。
concept intermediate machine-learningkernelssimilarity
Hook problem:先映射可能很贵
特征映射说的是:“先改写每个输入,再比较改写后的向量。”这很清楚,但当新向量非常大时会很浪费。
**核函数(kernel function)**直接询问这个比较结果。
phi(A) * phi(B)
K(A, B) = (A * B)^2
当 phi 很大甚至无限维时,这条捷径很有用。
First naive idea:显式构造所有特征
直接路线是:
- 计算
phi(x); - 计算
phi(z); - 对它们做内积。
小的二次映射这样做没问题。但当特征空间有成千上万、上百万,甚至无限多个坐标时,这条路会变得很痛苦。
Core invention:用捷径完成比较
核函数的形式是:
输入 x 和 z 留在原空间里。函数返回它们经过特征映射 phi 后本应得到的内积。
Interactive similarity lab
核相似度实验台
exp(-gamma ||x - z||^2), gamma = 0.500: 把距离近转成相似度高;远点会衰减到接近 0。
把每个点都和选中的锚点比较。注意每种核函数对“接近”的理解不同。
相似度; 点积 2, 距离平方 0
相似度; 点积 3, 距离平方 1
相似度; 点积 1, 距离平方 5
相似度; 点积 -2, 距离平方 10
静态无 JS 兜底:
| 点 | 点积 | 距离平方 | K(A, z) |
|---|---|---|---|
| A | 2 | 0 | 1 |
| B | 3 | 1 | 0.607 |
| C | 1 | 5 | 0.082 |
| D | -2 | 10 | 0.007 |
Valid-kernel boundary
不是任意相似度分数都能作为核方法里的有效核。有效核必须表现得像某个特征空间里的内积,也就是对任意有限样本,它的 Gram 矩阵应当是正半定的。
在这个节点里先记住实用规则:常见核函数有已知的几何含义和适用条件。证明细节留给后续节点。
Implementation sketch
function rbfKernel(x: Point, z: Point, gamma: number) {
const squaredDistance = (x.a - z.a) ** 2 + (x.b - z.b) ** 2;
return Math.exp(-gamma * squaredDistance);
}
Common confusions
- 核函数是关于两个输入的函数,不是新的坐标向量。
- 核值是某种选定几何下的相似度,不是万能语义相似度。
- 有些核函数有参数;参数改变,几何也会改变。
基础思想
基础思想
具体选择
具体选择
具体选择
具体选择
Exercises
K(x,z)返回什么?- 为什么我们可能不想显式构造
phi(x)? - 为什么 Sigmoid 核要比 RBF 核更谨慎地使用?
图谱连接 : 核函数