概率向量的频谱——FFT 作为特征表示

004 用三色球实验把概率单纯形变成了 log-ratio 平面。但还有另一种视角:对概率向量本身做傅里叶变换。DC = 总概率。高频 = 非均匀度。这背后的数学不是巧合。

从三色球到 FFT

三色球分布

$$p = [0.6, 0.3, 0.1]$$

import numpy as np

p = np.array([0.6, 0.3, 0.1])
F = np.fft.fft(p)      # 概率 → 频谱
p_recovered = np.fft.ifft(F).real  # 频谱 → 概率

表1 偏斜分布 p=[0.6, 0.3, 0.1] 的 FFT:

频率分量 含义
F[0] = 1.0 DC 分量 总概率=1,守恒量
F[1] = 0.40 − 0.17j 基频 分布不均匀的证据
F[2] = 0.40 + 0.17j 倍频 F[1] 的共轭,源自概率的实值性

表2 均匀分布 p=[1/3, 1/3, 1/3] 的 FFT:

频率分量 含义
F[0] = 1.0 DC 分量 总概率=1
F[1] = 0 基频 零能量 ← 均匀分布
F[2] = 0 倍频 零能量

均匀分布的频谱只有 DC 分量——和常数信号在 DFT 中只产生 DC 是完全一致的。概率分布的非均匀度编码在非零频率分量的幅度里。

为什么 FFT 对概率有意义?

FFT 能捕捉到 “分布均匀与否”,有数学基础:

  1. DC 分量 = 总概率和

    $$F[0] = \sum p_i = 1$$

    ,天然守恒。

  2. 实值性 = 共轭对称:概率都是实数,所以

    $$F[k] = \overline{F[N-k]}$$

  3. 非零高频 = 非均匀分布:如果分布"偏斜"(某些类比其他类更可能),FFT 的高频能量不为零。

这些性质背后是概率论的特征函数理论:

$$\varphi(t) = \mathbb{E}[e^{itX}] = \sum_k p_k e^{itk}$$

当 t 取离散等间距点时,

$$\varphi(t)$$

恰是 FFT 在那些频率上的取值。FFT 就是特征函数在单位根上的采样。

类别顺序的重要性:一个限制

FFT 对概率向量施加了一个隐含假设:类别的排列有顺序(甚至是循环结构)。

对于三色球 [黑, 白, 灰],排列成 [黑, 灰, 白] 会产生不同的频谱。在离散分类任务中,类别通常没有自然顺序(不像时间序列)。这意味着:

DFT 频率的"高低频"解释依赖于类别排列的选择。它不是物理频率,而是在选定排列基底下的代数表示。

在使用 FFT/DFT 分析类别分布时,必须说明排列方式。通常采用默认的自然顺序(如词汇表索引),并接受这种解释是工具性的而非绝对物理含义。

FFT 和 Softmax:两个域的桥梁

FFT Softmax
本质 线性变换 非线性(指数+归一化)
复杂度 O(N log N) O(N)
IFFT(精确) log-ratio(到平移等价类)
离散信号 logits
复频谱 概率分布
代表 特征函数采样 玻尔兹曼分布

两者都把一个"测度"变换到另一个空间去观察。FFT 提供频率结构,softmax 提供概率结构。它们互补而不互斥。

信号与概率:一个启发式类比

信号处理里,FFT 告诉我们信号包含哪些频率成分——但不知道它们何时出现。短时傅里叶变换(STFT)为解决这个问题引入时间窗口。

NLP 里,词袋模型告诉我们哪些词常出现——但不知道它们怎么排列。Transformer 的 Self-Attention 可以类比为 STFT:每个 token 通过

$$QK^T$$

在局部窗口内选择要关注的上下文。

信号 → STFT: 窗口1→低频强 | 窗口2→高频强 | 窗口3→中频强
序列 → Attention: 位置1关注k | 位置2关注v | 位置3关注q

但必须强调:Attention 数学上不是傅里叶变换。它做的是基于相似度的加权求和,不产生正交频率基。这个类比只在"动态、局部的加权视图"这个意象上成立。

结论

观察 结论
FFT 的 DC = 总概率 概率性守恒律在频域里变成 DC
FFT 高频 = 非均匀度 分布的偏斜程度可由频谱幅度度量
均匀分布只有 DC 类似常数信号的 DFT
FFT = 特征函数的离散采样 离散特征函数即 DFT(单位根采样)

概率的 FFT 不是一个巧合,而是概率论和信号处理共享的同一个数学框架——谱分解——在两个领域里的各自浮现。


May the Code be with us.


License: GPLv3
本文《Watermelon》系列采用 GNU 通用公共许可证第三版 (GNU General Public License v3.0) 协议进行开源发布与分发。