随机傅里叶特征:内积算出负数,为什么仍可能是合法核近似

昨天 2阅读

希望给线性分类器加入非线性表达,又不想保存全部样本对的核矩阵时,可以先计算随机傅里叶特征。每个样本被映射到一组固定长度的显式坐标,再用坐标内积近似目标核。真正需要验收的是近似误差及映射的一致性,而不只是程序能否输出一个向量。

随机傅里叶特征:内积算出负数,为什么仍可能是合法核近似

AI生成的概念示意图:不同频率的波形汇成有限维特征;波形仅作概念表达,不对应真实训练或精确函数图。

先约定目标核和频率分布

教学目标是一维高斯核k(x,y)=exp[-(x-y)²/2]。它只依赖两点之差,因此两点一起平移时核值不变。对此核,频率ω从标准正态分布抽取,cos[ω(x-y)]的期望等于目标核值。

本文使用成对的余弦、正弦映射。抽D个频率后,把cos(ω₁x)至cos(ωᴅx),以及sin(ω₁x)至sin(ωᴅx)拼接,再整体除以√D,得到2D维的z(x)。三角恒等式保证z(x)与z(y)的内积等于D个cos[ωⱼ(x-y)]的平均值。

若改用exp[-γ(x-y)²],频率方差应为2γ。不要一边更改γ,一边沿用原频率尺度;也不要遗漏除以√D,否则内积会随频率数量整体放大。

两组频率,逐项计算一个内积

固定NumPy的PCG64随机生成器,种子为35,从标准正态分布抽两个数,得到ω₁≈-1.138178、ω₂≈0.771219。正文小数为展示用,复算程序保留完整精度。这是一次可重现的教学抽样。

此时z(0)≈(0.707107,0.707107,0,0),z(1)≈(0.296454,0.507039,-0.641962,0.492861)。两向量点积约0.568155;直接计算[cos(ω₁)+cos(ω₂)]/2也得到同样结果。

目标核k(0,1)=exp(-1/2)≈0.606531,所以本次误差约-0.038375。两条计算路径相等,说明映射实现一致;它们与目标核之间的差距则是有限抽样造成的近似误差,两者应分别检查。

负条目和半正定并不矛盾

保持频率不变,计算0与2,近似值约-0.310053,而目标核exp(-2)≈0.135335,相差约-0.445388。只有两个频率时,某一对点的误差完全可能很大,不能因为上一对比较接近,就宣布映射已经可靠。

虽然出现负相似度,由所有z(x)内积构成的矩阵仍是半正定的:对任意系数向量c,cᵀZZᵀc等于Zᵀc的长度平方,不会小于零。半正定约束的是整体二次型,并不要求每个条目都非负。本例三个点的近似矩阵特征值约为0.026662、1.310053和1.663286。

因此,把这种映射直接用于要求权重非负的归一化注意力,还需额外处理,不能只凭“它是核近似”就认为分母和权重安全。

随机只发生在建立映射时

所有样本必须共享同一组频率,包括训练、验证与后续预测。若每个样本各抽一组,内积就失去了上述共同坐标的含义。应保存频率数组及核参数;仅记一个种子,还不足以跨不同实现无条件复现。

这个成对映射的自内积恒为1;把0、1、2一起加7,任意成对内积也保持不变。本次程序同时核对了这两项。它们是结构检查,不会消除有限误差;随机相位余弦的另一种常见构造也不能原样套用全部检查。

本文D=2表示两组频率,对应四个输出坐标。对照其他实现时,应先辨认它采用成对正弦余弦还是随机相位余弦,再比较输出维数和缩放因子。参数名称相似,并不意味着同一个数字代表相同的计算量。

使用更多独立频率会降低固定点对估计的方差,但一次扩容不保证每一对误差都单调变小。可以让AI在固定验证点对上记录误差分布,再另行验证下游任务表现,避免只挑一对好看的数字。

资料核对日期:2026年10月3日。数值来自原创教学设定,已用Python复核显式特征、三角公式与矩阵特征值,未进行模型训练或生产效果测试。

参考资料

Rahimi与Recht:Random Features for Large-Scale Kernel Machines,第3节

scikit-learn:径向基函数核近似


文章版权声明:除非注明,否则均为云鹊BLOG原创文章,转载或复制请以超链接形式并注明出处。