低维信号模型——流形模型与参数模型的推导与详解
目录
1. 引言
在现代信号处理和数据分析中,我们往往面对高维度的数据或信号,如高分辨率图像、长时间语音片段、海量传感器测量等等。但很多情况下,这些数据在本质上存在低维结构,即用远少于数据表面维度的参数或自由度,就可以刻画或近似这些数据。
为理解和利用这种低维结构,人们提出了多种低维信号模型(Low-dimensional signal models)。在这些模型当中,最常见且最具代表性的有两大类:
- 流形模型(Manifold Model):依托于流形学习与微分几何,强调信号“生活”在低维流形或近似低维流形上。
- 参数模型(Parametric Model):通过若干显式的、可测量的参数来直接描述信号生成机制。
接下来,我们将详细介绍这两类模型的基本思想、形成与推导方式,并通过数学公式给出更具体的细节。
2. 低维信号模型概述
2.1 什么是低维信号模型
给定一个高维信号(或数据向量)
x
∈
R
N
,
\mathbf{x} \in \mathbb{R}^N,
x∈RN,
如果我们可以找到某种方式,用远小于
N
N
N的参数数量来描述或刻画
x
\mathbf{x}
x,那么我们就说
x
\mathbf{x}
x服从某种低维信号模型。
形式化一点:若存在
d
≪
N
d \ll N
d≪N,以及一个映射
f
:
R
d
→
R
N
,
f: \mathbb{R}^d \to \mathbb{R}^N,
f:Rd→RN,
使得对于大多数
x
\mathbf{x}
x(或者所有
x
\mathbf{x}
x)可以写作
x
≈
f
(
θ
)
,
\mathbf{x} \approx f(\boldsymbol{\theta}),
x≈f(θ),
其中
θ
∈
R
d
\boldsymbol{\theta} \in \mathbb{R}^d
θ∈Rd,那么我们就认为
x
\mathbf{x}
x遵循一个
d
d
d-维的低维信号模型。
2.2 低维信号模型的重要性
- 降维与压缩:在高维数据中发现低维结构,可将数据映射到更小的维度,实现数据压缩,或在机器学习中降低特征维数。
- 去噪与恢复:利用先验假设“信号服从某低维结构”,在存在噪声和缺失值时可通过该结构进行信号或数据的重建与去噪。
- 可解释性:低维结构往往对应可解释的物理或几何意义。例如,声音的基频和谐波构成参数模型,图像的姿态变化构成流形结构等。
3. 流形模型
3.1 流形的初步定义
在数学上,“流形(Manifold)”是一个在局部看上去“像”欧几里得空间 R d \mathbb{R}^d Rd的集合。从几何上理解,一个 d d d维流形是可以在 d d d个坐标轴上描述的小“片”的平滑拼接。例如:
- 圆周 S 1 S^1 S1是嵌在 R 2 \mathbb{R}^2 R2中的1维流形;
- 球面 S 2 S^2 S2是嵌在 R 3 \mathbb{R}^3 R3中的2维流形;
- 更一般的,嵌入在 R N \mathbb{R}^N RN中的 d d d-维流形可看作一系列光滑贴图拼接而成,它在局部与 R d \mathbb{R}^d Rd同胚。
举例:人脸图像可能有上千维(若将每个像素点作为一个维度),但如果所有人脸只因少量参数变化(如光照、姿态、表情)而改变,那么这些人脸图像在高维空间中也可能分布在一个低维流形上,且维度与这些变化参数的自由度相当。
3.2 流形模型的形成与推导
设有一个集合 X = { x 1 , x 2 , … } ⊂ R N \mathcal{X} = \{\mathbf{x}_1, \mathbf{x}_2, \ldots\}\subset \mathbb{R}^N X={x1,x2,…}⊂RN,若我们相信该集合在 R N \mathbb{R}^N RN中可被一个 d d d-维流形 M \mathcal{M} M覆盖或逼近,则我们称之为一个** d d d-维流形模型**。
数学上,经常假设
M
\mathcal{M}
M可以由一个光滑映射
f
:
Θ
⊂
R
d
⟶
M
⊂
R
N
f: \Theta \subset \mathbb{R}^d \longrightarrow \mathcal{M} \subset \mathbb{R}^N
f:Θ⊂Rd⟶M⊂RN
给出,即对于任意
θ
∈
Θ
\boldsymbol{\theta} \in \Theta
θ∈Θ,有
x
=
f
(
θ
)
\mathbf{x} = f(\boldsymbol{\theta})
x=f(θ)。这样一来,
x
\mathbf{x}
x就不再是一个随意的
N
N
N维向量,而是只由
θ
\boldsymbol{\theta}
θ(
d
d
d维的)所决定。
流形的局部线性化与维数
为了判断
M
\mathcal{M}
M确实是“
d
d
d维”的,我们需要用到微分几何中的一个关键工具——Jacobian(雅可比矩阵)。对于映射
f
(
θ
)
:
R
d
→
R
N
,
f(\boldsymbol{\theta}): \mathbb{R}^d \to \mathbb{R}^N,
f(θ):Rd→RN,
其雅可比矩阵定义为
J
f
(
θ
)
=
[
∂
f
1
∂
θ
1
⋯
∂
f
1
∂
θ
d
⋮
⋱
⋮
∂
f
N
∂
θ
1
⋯
∂
f
N
∂
θ
d
]
N
×
d
,
J_f(\boldsymbol{\theta}) = \begin{bmatrix} \frac{\partial f_1}{\partial \theta_1} & \cdots & \frac{\partial f_1}{\partial \theta_d}\\ \vdots & \ddots & \vdots \\ \frac{\partial f_N}{\partial \theta_1} & \cdots & \frac{\partial f_N}{\partial \theta_d} \end{bmatrix}_{N \times d},
Jf(θ)=
∂θ1∂f1⋮∂θ1∂fN⋯⋱⋯∂θd∂f1⋮∂θd∂fN
N×d,
只要在
θ
\boldsymbol{\theta}
θ所在的邻域内,这个矩阵的秩(rank)保持为
d
d
d,那么在
θ
\boldsymbol{\theta}
θ对应的点
x
=
f
(
θ
)
\mathbf{x} = f(\boldsymbol{\theta})
x=f(θ)局部就真的是一个
d
d
d维可微流形。这个结论来自微分几何中的常值级数定理(Constant Rank Theorem)或沉浸定理(Immersion Theorem)。
小结
- 若一个信号“活”在一个 d d d-维流形上,那么它在观测空间中的真实维数虽大( N N N维),但有效自由度是 d d d。
- 在信号处理中,我们通过流形模型来捕捉数据的非线性结构。常用的方法包括流形学习(Isomap, LLE, t-SNE等)和局部线性近似等。
3.3 信号处理中的应用实例
- 流形学习:人脸姿态的流形、手写字符的流形等,高维数据可投影到低维进行可视化与聚类。
- 非线性降维:利用流形结构进行更自然的维度约简;与传统PCA等线性方法相比更能捕捉非线性变化。
- 图像/视频表示:假设一个目标的变化(如旋转、平移、亮度变化)构成一个低维流形,可帮助进行运动估计或图像修复。
4. 参数模型
4.1 参数模型的初步定义
参数模型(Parametric Model)通常指可以用一个显式函数及其少量参数来刻画信号的生成过程。例如,语音信号在较短的帧内可被看作一个自回归模型(AR);或者音乐片段可以用若干正弦波叠加来模拟。
一般地,我们可写
x
=
g
(
α
)
+
n
,
\mathbf{x} = g(\boldsymbol{\alpha}) + \mathbf{n},
x=g(α)+n,
其中
α
\boldsymbol{\alpha}
α是维度远小于
x
\mathbf{x}
x长度的参数向量,
n
\mathbf{n}
n是误差或噪声。若
n
≈
0
\mathbf{n}\approx \mathbf{0}
n≈0,则称近似无噪模型;当
n
\mathbf{n}
n很大时,则需要更复杂的估计和鲁棒处理。
4.2 参数模型的形成与推导
- 先验/物理机制:很多自然信号可由物理或生理机制推断出对应的数学模型。比如,振动信号常可用若干正弦表示。
- 定义可观测误差:在观测信号
x
\mathbf{x}
x与模型输出
x
^
(
α
)
\hat{\mathbf{x}}(\boldsymbol{\alpha})
x^(α)之间定义一个误差准则,例如均方误差(MSE)
∥ x − x ^ ( α ) ∥ 2 , \| \mathbf{x} - \hat{\mathbf{x}}(\boldsymbol{\alpha}) \|^2, ∥x−x^(α)∥2,
或对数似然函数等。 - 通过优化或估计求解参数:最小化均方误差、最大似然、最大后验等都是常见的方法。
常见的参数模型包括:
- 线性模型: x = A α + b \mathbf{x} = \mathbf{A}\boldsymbol{\alpha} + \mathbf{b} x=Aα+b;
- 自回归模型(AR): x ( n ) = ∑ k = 1 p a k x ( n − k ) + e ( n ) x(n) = \sum_{k=1}^p a_k x(n-k) + e(n) x(n)=∑k=1pakx(n−k)+e(n);
- 正弦模型: x ( t ) = ∑ k = 1 K A k sin ( 2 π f k t + ϕ k ) x(t) = \sum_{k=1}^K A_k \sin(2\pi f_k t + \phi_k) x(t)=∑k=1KAksin(2πfkt+ϕk);
- 极点/极零点模型:在Z域或S域分析中,用极点(零点)位置来刻画系统或信号特征。
4.3 信号处理中的应用实例
- AR模型在语音分析:用线性预测编码(LPC)捕捉共振峰,进而高效编码语音。
- 正弦模型在音乐和语音合成:将音乐分解为若干正弦分量进行分析与重构。
- 雷达/声纳:目标回波可简化为带有少量参数(延迟、衰减、频率偏移等)的回波模型。
5. 流形模型与参数模型的比较
- 相同点:
- 都强调数据的有效自由度远低于其表观维度;
- 均可写为 x ≈ f ( θ ) \mathbf{x} \approx f(\boldsymbol{\theta}) x≈f(θ),其中 θ \boldsymbol{\theta} θ维数较低;
- 在信号处理上都可起到降维、去噪、解析等作用。
- 不同点:
- 明确性:参数模型通常具有明确的函数形式(例如AR, 正弦叠加),而流形模型常用几何的思路来描述,可能没有简单的闭式表达;
- 线性/非线性倾向:参数模型常见线性形式,也有非线性形式;流形模型多强调非线性几何结构;
- 适用场景:参数模型常用于物理机制或先验假设明确的场景;流形模型常用于复杂多样、缺乏显式模型或显著非线性的场景(如图像、视频、自然数据)。
6. 补充的数学细节
在这一节,我们对上文所提到的一些数学概念和推导过程做一些更具体的展开与补充。
6.1 线性子空间与维度
6.1.1 基本概念
给定一个向量空间 V ⊆ R N V\subseteq \mathbb{R}^N V⊆RN,它的维度定义为其中最大线性无关向量组的个数。直观而言,一个 d d d维子空间需要 d d d个“方向”就能生成空间内的所有向量。
6.1.2 线性模型的通用形式
若我们假设
x
\mathbf{x}
x只在一个
d
d
d-维线性子空间里,则可写作
x
=
M
β
+
b
,
\mathbf{x} = \mathbf{M}\boldsymbol{\beta} + \mathbf{b},
x=Mβ+b,
其中
M
\mathbf{M}
M是
N
×
d
N\times d
N×d矩阵,
β
∈
R
d
\boldsymbol{\beta}\in \mathbb{R}^d
β∈Rd是坐标系的坐标,
b
\mathbf{b}
b是一个偏置向量。这个模型非常常见,比如PCA就是寻找这样一个最佳
M
\mathbf{M}
M,使得投影误差最小。
6.2 微分几何中的概念
6.2.1 映射与流形
- 嵌入(Embedding):若 f f f是一个一对一且沉浸(即Jacobian秩为满秩)的光滑映射,我们就说 Θ \Theta Θ被“嵌入”到 R N \mathbb{R}^N RN中,此时 f ( Θ ) f(\Theta) f(Θ)是一个 d d d-维流形。
- 浸入(Immersion)与子浸入(Submersion):如果Jacobain保持满秩则称 f f f是浸入。对信号处理而言,满秩保证了局部“保持维数”。
6.2.2 线性近似与雅可比矩阵
在
θ
0
\boldsymbol{\theta}_0
θ0附近,用泰勒展开可以写
x
≈
f
(
θ
0
)
+
J
f
(
θ
0
)
(
θ
−
θ
0
)
.
\mathbf{x} \approx f(\boldsymbol{\theta}_0) + J_f(\boldsymbol{\theta}_0) \big(\boldsymbol{\theta} - \boldsymbol{\theta}_0\big).
x≈f(θ0)+Jf(θ0)(θ−θ0).
如果
r
a
n
k
(
J
f
(
θ
0
)
)
=
d
\mathrm{rank}(J_f(\boldsymbol{\theta}_0)) = d
rank(Jf(θ0))=d,那么变化
θ
\boldsymbol{\theta}
θ的
d
d
d个分量就能在
x
\mathbf{x}
x空间中产生“独立”变化,从而流形的维度为
d
d
d。
6.3 AR(自回归)模型中的线性代数
6.3.1 AR模型定义
设
x
(
n
)
x(n)
x(n)表示离散时间信号(如语音),一个
p
p
p阶AR模型为
x
(
n
)
=
a
1
x
(
n
−
1
)
+
⋯
+
a
p
x
(
n
−
p
)
+
e
(
n
)
,
x(n) = a_1 x(n-1) + \dots + a_p x(n-p) + e(n),
x(n)=a1x(n−1)+⋯+apx(n−p)+e(n),
其中
{
a
k
}
\{a_k\}
{ak}是AR系数,
e
(
n
)
e(n)
e(n)是白噪声或建模误差。
6.3.2 矩阵形式
若我们观测到
N
N
N个样本
x
(
1
)
,
x
(
2
)
,
…
,
x
(
N
)
x(1), x(2), \ldots, x(N)
x(1),x(2),…,x(N),可以写作
[
x
(
p
+
1
)
x
(
p
+
2
)
⋮
x
(
N
)
]
=
[
x
(
p
)
x
(
p
−
1
)
⋯
x
(
1
)
x
(
p
+
1
)
x
(
p
)
⋯
x
(
2
)
⋮
⋮
⋱
⋮
x
(
N
−
1
)
x
(
N
−
2
)
⋯
x
(
N
−
p
)
]
[
a
1
a
2
⋮
a
p
]
+
[
e
(
p
+
1
)
e
(
p
+
2
)
⋮
e
(
N
)
]
.
\begin{bmatrix} x(p+1) \\ x(p+2) \\ \vdots \\ x(N)\end{bmatrix} =\begin{bmatrix} x(p) & x(p-1) & \cdots & x(1) \\ x(p+1) & x(p) & \cdots & x(2) \\ \vdots & \vdots & \ddots & \vdots \\ x(N-1) & x(N-2) & \cdots & x(N-p) \end{bmatrix} \begin{bmatrix} a_1 \\ a_2 \\ \vdots \\ a_p \end{bmatrix} + \begin{bmatrix} e(p+1) \\ e(p+2) \\ \vdots \\ e(N) \end{bmatrix}.
x(p+1)x(p+2)⋮x(N)
=
x(p)x(p+1)⋮x(N−1)x(p−1)x(p)⋮x(N−2)⋯⋯⋱⋯x(1)x(2)⋮x(N−p)
a1a2⋮ap
+
e(p+1)e(p+2)⋮e(N)
.
记
x
=
[
x
(
p
+
1
)
x
(
p
+
2
)
⋮
x
(
N
)
]
,
X
=
[
x
(
p
)
x
(
p
−
1
)
⋯
x
(
1
)
⋮
⋮
⋱
⋮
x
(
N
−
1
)
x
(
N
−
2
)
⋯
x
(
N
−
p
)
]
,
a
=
[
a
1
⋮
a
p
]
,
e
=
[
e
(
p
+
1
)
⋮
e
(
N
)
]
.
\mathbf{x} = \begin{bmatrix} x(p+1) \\ x(p+2) \\ \vdots \\ x(N) \end{bmatrix}, \quad \mathbf{X} = \begin{bmatrix} x(p) & x(p-1) & \cdots & x(1) \\ \vdots & \vdots & \ddots & \vdots \\ x(N-1) & x(N-2) & \cdots & x(N-p) \end{bmatrix}, \quad \mathbf{a} = \begin{bmatrix} a_1 \\ \vdots \\ a_p \end{bmatrix}, \quad \mathbf{e} = \begin{bmatrix} e(p+1) \\ \vdots \\ e(N) \end{bmatrix}.
x=
x(p+1)x(p+2)⋮x(N)
,X=
x(p)⋮x(N−1)x(p−1)⋮x(N−2)⋯⋱⋯x(1)⋮x(N−p)
,a=
a1⋮ap
,e=
e(p+1)⋮e(N)
.
则整体模型化为
x
=
X
a
+
e
.
\mathbf{x} = \mathbf{X}\mathbf{a} + \mathbf{e}.
x=Xa+e.
如果
p
p
p相对于
N
N
N较小,那么
a
\mathbf{a}
a就是一个低维向量。通过最小化
∥
x
−
X
a
∥
2
\|\mathbf{x} - \mathbf{X}\mathbf{a}\|^2
∥x−Xa∥2等方法可求得
a
\mathbf{a}
a的估计值。
6.4 正弦模型和参数估计
6.4.1 基本形式
对一个连续时间信号
x
(
t
)
=
∑
k
=
1
K
A
k
sin
(
2
π
f
k
t
+
ϕ
k
)
,
x(t) = \sum_{k=1}^{K} A_k \sin(2\pi f_k t + \phi_k),
x(t)=k=1∑KAksin(2πfkt+ϕk),
可离散采样得到
x
∈
R
N
\mathbf{x} \in \mathbb{R}^N
x∈RN,其中
x
(
n
)
=
∑
k
=
1
K
A
k
sin
(
2
π
f
k
n
F
s
+
ϕ
k
)
,
n
=
0
,
…
,
N
−
1
,
x(n) = \sum_{k=1}^{K} A_k \sin\Bigl(2\pi f_k \frac{n}{F_s} + \phi_k\Bigr), \quad n=0,\dots, N-1,
x(n)=k=1∑KAksin(2πfkFsn+ϕk),n=0,…,N−1,
F
s
F_s
Fs为采样频率。此时,模型的参数向量
α
\boldsymbol{\alpha}
α可以是
{
(
A
k
,
f
k
,
ϕ
k
)
}
k
=
1
K
\{(A_k, f_k, \phi_k)\}_{k=1}^K
{(Ak,fk,ϕk)}k=1K,共
3
K
3K
3K个参数。若
3
K
≪
N
3K \ll N
3K≪N,则这是一个低维参数模型。
6.4.2 频域估计
在离散频域(例如FFT)中,我们可观察到峰值位置来估计
f
k
f_k
fk和
A
k
A_k
Ak,如
X
^
(
ω
)
=
∑
n
=
0
N
−
1
x
(
n
)
e
−
j
ω
n
.
\hat{X}(\omega) = \sum_{n=0}^{N-1} x(n) e^{-j \omega n}.
X^(ω)=n=0∑N−1x(n)e−jωn.
如果峰值位于
ω
=
2
π
f
k
/
F
s
\omega = 2\pi f_k/F_s
ω=2πfk/Fs附近,就可找出
f
^
k
\hat{f}_k
f^k。进而由幅度谱可得
A
^
k
\hat{A}_k
A^k,由相位谱可得
ϕ
^
k
\hat{\phi}_k
ϕ^k。这些属于最常用的参数估计思路。
7. 总结
- 流形模型:利用微分几何与流形学习来刻画高维信号的非线性、低维本质。适合复杂数据(如图像、视频)在高维空间展现的连贯变化。
- 参数模型:根据先验或物理机制给出显式函数形式,用少量参数直接描述信号生成过程。常用于有明确假设(如谐波、线性预测、极点等)的场景。
- 两者联系:本质上都是用 d d d-维“自由度”去表达 N N N-维的数据。区别在于流形模型更强调几何结构与局部线性化,参数模型更强调显式函数与物理机理。
- 应用:在降维、信号重构、数据可视化、模型估计等多方面大显身手。
9. 示例代码
下面给出一个简单的Python示例,用于演示“正弦参数模型”的构造与最小二乘(或FFT)方式的估计,以及使用PCA对多条信号进行降维可视化(以体现其低维特征)。虽然该例子简单,但能说明参数模型和降维思路的基本要点。
import numpy as np
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA
# 1. 生成参数模型信号 (简单正弦叠加)
def generate_sin_signal(N, K):
"""
N: 信号长度
K: 正弦分量个数
返回:
- x: 合成的长度为N的信号
- params: K个正弦分量的参数 (A, f, phi)
"""
t = np.linspace(0, 1, N, endpoint=False)
x = np.zeros(N)
params = []
for _ in range(K):
A = np.random.uniform(0.5, 1.5) # 幅度
f = np.random.uniform(2, 10) # 频率(单位Hz假设, 仅示例)
phi = np.random.uniform(0, 2*np.pi) # 相位
x += A * np.sin(2 * np.pi * f * t + phi)
params.append((A, f, phi))
# 加一点噪声
noise = 0.2 * np.random.randn(N)
x += noise
return x, params
N = 200 # 信号长度
K = 2 # 正弦分量个数
x, true_params = generate_sin_signal(N, K)
# 2. 通过FFT简单估计其中一个最显著的分量频率和幅度
freqs = np.fft.fftfreq(N, d=1.0/N) # 频率刻度
X_fft = np.fft.fft(x) # FFT
mag = np.abs(X_fft) # 幅度谱
# 只考虑正频率部分
est_f_index = np.argmax(mag[:N//2])
est_f = freqs[est_f_index]
# 幅度估计:此处简易做法,真正幅度需要更多处理
est_A = mag[est_f_index] / (N/2)
print("实际的部分参数(随机)为:", true_params)
print("估计频率: ", est_f)
print("估计幅度: ", est_A)
# 3. 多次生成信号, 并用PCA降维以展示“低维结构”
M = 100 # 生成M条不同随机参数的信号
data = []
for _ in range(M):
sig, _ = generate_sin_signal(N, K)
data.append(sig)
data = np.array(data) # shape=(M, N)
# 用PCA将N维投影到2维做可视化
pca = PCA(n_components=2)
data_2d = pca.fit_transform(data) # shape=(M, 2)
# 作图
plt.figure(figsize=(10,5))
plt.subplot(1,2,1)
plt.title("Example Signal")
plt.plot(x, label="Example of Sin Signal")
plt.xlabel("Sample index")
plt.ylabel("Amplitude")
plt.legend()
plt.subplot(1,2,2)
plt.title("PCA Projection of Multiple Signals")
plt.scatter(data_2d[:,0], data_2d[:,1], c='r', alpha=0.7)
plt.xlabel("PC1")
plt.ylabel("PC2")
plt.tight_layout()
plt.show()