返回目录
公开知识笔记 · 不进入目录

傅里叶特征映射

公开知识笔记

傅里叶特征映射

一句话说人话:把每个基因表达值 x 通过 sin 和 cos 映射成一个二维向量 [cos(απx), sin(απx)],把「数值的大小」变成「波形上的位置」,从而构造出一个对微小变化特别敏感的「高频通道」——给模型装一个「对比度增强」滤镜,让它看清边界。


一、为什么需要它:先回顾痛点

在 低通滤波与高频信号 里我们说过:GCN 是低通滤波,天生把「剧烈跳变」磨平。而组织边界(空间域的边界)恰恰是基因表达剧烈跳变的地方。所以 GCN 看不清边界。

那怎么办?一个直接的想法是:既然 GCN 自己看不见高频,那就把数据「加工」一下,让高频信息变得显眼,再喂给它。

傅里叶特征映射干的就是这件事——它不动模型,动数据:把原始表达值做一次变换,让「边界处的剧烈变化」被放大、被凸显。

二、它做了什么:把「数值」绕到「圆」上

公式看起来唬人,其实就一步:

每个表达值 x → [cos(απx), sin(απx)]

也就是:把 x 这个「数」,变成坐标平面上的一个点,这个点落在单位圆上,角度由 απx 决定。α 是一个可调的超参数(论文里叫 αfourier),控制「敏感度」。

生活类比 1——钟表指针:

时间是「数值」,你把它映射到表盘上,就变成了「指针的 cos/sin 位置」。12:00 和 12:01 这两个时间,数值上只差 1 分钟,但映射到表盘后,指针的角度能被你一眼区分。

生活类比 2——对比度增强滤镜:

一张照片的灰度值都挤在很窄的范围里,边缘的明暗差看不出来。你拉一下「对比度」滑杆,暗的更暗、亮的更亮,原本模糊的轮廓线立刻清晰了。傅里叶映射就是给「基因表达值」拉对比度。

生活类比 3——把直尺绕成弹簧:

一条直线上两个点离得很近(数值差不多),你很难分辨。但把这条直线绕成螺旋弹簧,两个原本挨着的点,在弹簧上对应的角度可能被拉开很大,一下就能分开了。

三、为什么「绕圆」能增强边界信号

关键在「距离」上。两个表达值 x1 和 x2,映射之后它们之间的距离(平方)是:

∥F(x1) − F(x2)∥² = 2·sin²(απ(x1−x2)/2)

当 x1 和 x2 很接近时,这个式子近似等于 απ·|x1 − x2|。

这意味着:原本很小的差异,被放大了 απ 倍。 而且 cos/sin 是周期振荡的函数,相当于给数据叠加了「高频波动」,天然携带高频信息。

于是,边界两侧「只差一点点」的表达值,经过映射后差距被拉开,模型(后面的线性层、GCN 层)就能「看得见」这个边界了。

四、这篇论文里它扮演什么角色

在 FPS-MGCN 里,傅里叶映射是核心创新,具体这样落地:

  • 输入表达矩阵 X(N 个 spot × M 个基因),每个值 xij 都做映射,得到:
    • Xfourier = [cos(απX), sin(απX)],维度从 N×M 变成 N×2M(每个基因变成 cos、sin 两个通道)。
  • 这个 Xfourier 被交给一个专门的 Fourier-GCN 分支,在空间图上传播,学习「边界信号在空间上如何组织」。

反常识:

在傅里叶特征映射中,torch.cat([cos, sin]) 是拼接编码的标准步骤。之所以直接分块拼贴而非按频率交错排列,是因为深度学习的一个基本规律:特征的语义关联由可学习参数自动建立,而不依赖数据的物理排布。

无论后续接什么网络层,运算本质都是参数化的全局聚合。网络不需要 cos⁡​ 和 sin⁡​ 相邻才能识别它们的配对关系,这种关系会在训练中由梯度下降自动捕获。因此,分块排列只是顺应批量计算的自然输出格式、省去内存重排开销,而语义完整性完全由模型自身的表达能力保证。

一句话:论文专门给傅里叶特征开了一条独立通道,和原始表达、空间、特征等通道并行(见 多视图学习与多视图聚类),最后用注意力融合。

五、为什么论文需要它

这是整篇论文的「招牌动作」:

  1. 它直接对症下药——GCN 低通看不见高频边界,傅里叶映射显式构造高频通道,把边界信息「递到眼前」。
  2. 它代价极低——就一个公式、一个超参数 α,却能显著提升边界敏感度。
  3. 它通用——「把数值映射到 sin/cos 上增强突变敏感度」这一招,可以平移到任何需要刻画边界/突变的图模型里(思路借鉴自 NeRF 的 positional encoding)。

论文原文说得最清楚:

"we introduce a Fourier sine–cosine feature mapping that explicitly constructs high-frequency feature channels to enhance sensitivity to high-frequency spatial gradients such as tissue boundaries."


数学表达详解:从公式到直觉

这一部分把傅里叶特征映射涉及的三个核心公式拆开讲清楚,适合零基础理解。

1. 核心映射:x→[cos⁡(απx), sin⁡(απx)]x \to [\cos(\alpha\pi x),\ \sin(\alpha\pi x)]

它在做什么? 把一个普通的实数 xx(比如某个基因在某个 spot 的表达值)变成二维平面上的一个点。这个点落在单位圆上,角度由 απx\alpha\pi x 决定。

  • α\alpha 是一个可调超参数,控制“放大倍数”
  • α\alpha 越大,xx 的微小变化引起的角度变化越大,映射后的点“转得越快”

直觉类比: 把一条直线绕成弹簧。直线上两个挨得很近的点,绕成弹簧后在圆周上对应的角度可能被拉开很远。

2. 距离公式:映射后两个点离多远?

对于两个表达值 x1x_1 和 x2x_2,把它们分别映射:

F(x1)=[cos⁡(απx1), sin⁡(απx1)]F(x_1) = [\cos(\alpha\pi x_1),\ \sin(\alpha\pi x_1)] F(x2)=[cos⁡(απx2), sin⁡(απx2)]F(x_2) = [\cos(\alpha\pi x_2),\ \sin(\alpha\pi x_2)]

我们想知道这两个映射点在平面上的欧氏距离平方 ∥F(x1)−F(x2)∥2\|F(x_1)-F(x_2)\|^2。

推导过程:

距离平方等于横坐标差的平方加纵坐标差的平方:

[cos⁡(απx1)−cos⁡(απx2)]2+[sin⁡(απx1)−sin⁡(απx2)]2[\cos(\alpha\pi x_1)-\cos(\alpha\pi x_2)]^2 + [\sin(\alpha\pi x_1)-\sin(\alpha\pi x_2)]^2

利用和差化积公式:

  • cos⁡A−cos⁡B=−2sin⁡(A+B2)sin⁡(A−B2)\cos A - \cos B = -2\sin(\frac{A+B}{2})\sin(\frac{A-B}{2})
  • sin⁡A−sin⁡B=2cos⁡(A+B2)sin⁡(A−B2)\sin A - \sin B = 2\cos(\frac{A+B}{2})\sin(\frac{A-B}{2})

代入 A=απx1A = \alpha\pi x_1,B=απx2B = \alpha\pi x_2,再经过 sin⁡2θ+cos⁡2θ=1\sin^2\theta + \cos^2\theta = 1 化简,得到:

∥F(x1)−F(x2)∥2=4sin⁡2(απ(x1−x2)2)\|F(x_1)-F(x_2)\|^2 = 4\sin^2\left(\frac{\alpha\pi(x_1-x_2)}{2}\right)

注意: 原文笔记里写的是 2sin⁡2(⋯ )2\sin^2(\cdots),这里根据推导应为 4sin⁡2(⋯ )4\sin^2(\cdots),可能是笔误(也可能源文献的映射前有归一化因子)。关键结构不变:距离只和差值 x1−x2x_1-x_2 以及 α\alpha 有关。

为什么这个式子能“放大差异”?

当 x1x_1 和 x2x_2 很接近时,sin⁡θ≈θ\sin\theta \approx \theta,所以:

∥F(x1)−F(x2)∥2≈4(απ(x1−x2)2)2=(απ)2(x1−x2)2\|F(x_1)-F(x_2)\|^2 \approx 4\left(\frac{\alpha\pi(x_1-x_2)}{2}\right)^2 = (\alpha\pi)^2 (x_1-x_2)^2

也就是说,映射后的距离约等于原始差值乘以 απ\alpha\pi。只要把 α\alpha 设得够大,原本微小的表达差异就会被放大许多倍,边界两侧的 “一点点不同” 就变得肉眼可见了。

3. 批量操作:Xfourier=[cos⁡(απX), sin⁡(απX)]X_{\text{fourier}} = [\cos(\alpha\pi X),\ \sin(\alpha\pi X)]

这是对整个表达矩阵 XX(NN 个 spot × MM 个基因)做映射。

  • 对矩阵中每一个元素 xx 分别计算 cos⁡(απx)\cos(\alpha\pi x),得到一个同样大小的矩阵
  • 再计算 sin⁡(απx)\sin(\alpha\pi x),得到另一个同样大小的矩阵
  • 把这两个矩阵左右拼接,结果维度变成 N×2MN \times 2M

维度变化: N×M→N×2MN \times M \to N \times 2M

每个基因原本只有一个数值,映射后变成一对值 [cos⁡(απx),sin⁡(απx)][\cos(\alpha\pi x), \sin(\alpha\pi x)],相当于一个基因变成了两个通道。这就是“给每个基因增加一个高频通道”的含义。

生活类比: 普通照片只有灰度值一个通道,傅里叶映射相当于给每个像素额外增加了一个“相位通道”,让位置信息更丰富。


小结

  • 公式一:数值 → 圆上的点,是映射本身
  • 公式二:映射后距离 ≈ (απ)2(\alpha\pi)^2 倍原始差值,是放大原理
  • 公式三:对整个矩阵批量映射并拼接,是实际代码实现

这三步合起来,就是“给 GCN 装上高频放大镜”的数学基础。

后续联动

概念 关系
低通滤波与高频信号 傅里叶映射要解决的就是「GCN 低通、看不清高频边界」的问题
图卷积网络GCN 映射后的特征交给 Fourier-GCN 分支在空间图上传播
空间转录组与空间域 最终目的是把空间域的边界划得更准
多视图学习与多视图聚类 傅里叶视图是多视图中的一路,与其他视图注意力融合