1. 为什么需要小波:从傅里叶的局限开始
令 。傅里叶变换(在 意义下)把信号表示为全局正弦基的叠加:
它非常适合回答“有哪些频率成分”,但它天然是全局积分:
- 如果 在某个时刻出现瞬态/突变(非平稳), 仍是全局混合的;
- “频率在哪里发生”这个问题,傅里叶域本身不回答。
短时傅里叶(STFT)通过窗函数 提供局部化:
但 STFT 的窗宽是固定的:同一把尺子同时量低频与高频,总会不合适。
小波的核心动机是:让“窗”随频率缩放。高频用短窗(好定位),低频用长窗(好分辨)。这正是多分辨率(multi-resolution)的来源。
2. 连续小波变换(CWT):严格的数学定义
2.1 母小波、伸缩与平移
选取一个母小波(mother wavelet)。对尺度 和位置 ,定义一族函数:
其中 保证 (能量归一)。
2.2 CWT 的定义(内积/相关)
连续小波变换定义为
可以把 理解为:
- 在位置 附近,信号与“尺度为 的模板” 的相似度;
- 相似度越大,说明在该位置确实存在该尺度的结构。
2.3 可容许性(admissibility)与可逆性
要让 CWT 可逆,需要母小波满足可容许性条件:
一个常见的充要特征是 零均值(zero mean):
零均值意味着小波是“带通/高通”的:它对常数(直流分量)不响应。
在合适的函数空间假设下,有反演公式(给出思想即可):
2.4 能量与内积的观点
CWT 是在一族缩放平移的函数上做“投影系数”。当“在小波域做损失/相似度”时,本质上就是在另一个坐标系统里度量能量与相关。
3. 小波的原理:尺度对应频率,多分辨率来自缩放
尺度 与频率大致呈反比。直觉上:
- 越大, 越“宽”,更像低频模板;
- 越小, 越“窄”,更像高频模板。
因此 CWT 系数 是一种“时-尺度(time-scale)”表示,也常被视为时频联合表示。
这也是小波常被用于非平稳信号:突变/边缘在小尺度(高频)会产生显著响应,同时其发生位置 也被保留下来。
4. 小波的关键性质(选小波时真正关心的东西)
不同小波家族(Haar、Daubechies、Symlets、Coiflets、双正交 CDF 等)差异主要体现在以下性质上。
4.1 零均值与带通特性
零均值 使得小波更像“差分/导数”算子:对缓慢变化的趋势不敏感,但对变化(边缘、纹理、瞬态)敏感。
4.2 消失矩(vanishing moments):为何小波适合稀疏表示
若 满足
则称它有 阶消失矩。含义是:
- 小波对低阶多项式趋势“正交”,因此对平滑区域响应很弱;
- 对分段光滑信号/自然图像,小波系数往往高度稀疏(大多接近 0,少数显著系数集中在边缘/纹理处)。
这就是压缩(JPEG2000)与去噪(阈值化)的数学原因之一。
4.3 正交 / 双正交:能量是否保留、重构是否稳定
- 正交小波:变换可看作正交矩阵(在离散有限维情形),保内积与范数;
- 双正交小波:分析与合成使用不同基(更灵活,比如线性相位),但不再严格保内积。
4.4 紧支撑、正则性与边界效应
- 紧支撑决定局部性与计算量;
- **正则性(光滑性)**影响频谱泄漏与重构质量;
- 实际实现必须处理边界延拓(periodic / symmetric / zero-pad),这会影响是否严格正交。
5. 离散小波变换(DWT):多分辨率分析(MRA)与滤波器组
深度学习里常用的是 DWT / FWT(fast wavelet transform),它来自 MRA。
5.1 多分辨率分析的结构
MRA 给出一串嵌套子空间:
并且存在细节空间 使得
直觉上: 表示“分辨率为 的近似”, 表示“从更粗到更细需要补的细节”。
5.2 尺度函数与两尺度方程
用尺度函数(scaling function) 生成 ,它满足两尺度关系
小波函数满足
这里 是低通滤波器, 是高通滤波器。
5.3 Mallat 算法:分析/合成滤波器组
对离散信号 ,一级分解通常写成
也就是:低通/高通卷积后再下采样()。多层分解对 继续重复。
如果使用正交小波并选取匹配的合成滤波器,则可实现完美重构(perfect reconstruction)。
5.4 2D 图像:四个子带的意义
对二维图像做可分离 DWT,一层得到四个子带:
- LL:低频近似(整体结构/光照/大形状)
- LH:水平细节(对“水平边缘/竖向变化”敏感,取决于具体的约定)
- HL:垂直细节
- HH:对角细节(高频纹理)
更重要的理解是:它们对应不同方向的带通滤波响应。
6. 小波的物理意义:局部带通滤波 + 局部差分
从信号处理角度,小波系数就是:
- 在某一尺度上,用一个“带通滤波器”去扫过信号;
- 系数的大小表示该位置是否存在该尺度的振荡/边缘/纹理。
零均值 + 消失矩让它类似“局部差分/局部导数”。因此在图像里:
- 边缘位置会在高频子带产生大系数;
- 平滑区域系数接近 0。
这也是为什么小波看起来很像“多尺度的边缘检测器”。
7. 小波在特征提取中的作用
把“系数 = 局部尺度-方向响应”这句话吃透,就能理解它在特征提取中的价值。
7.1 稀疏化与去噪:把“结构”从“噪声”里分离
对分段光滑信号,噪声往往在高频子带里均匀铺开,而真实结构对应少量大系数。典型做法是对子带做软阈值:
这是一种很直接的“特征提纯”。
7.2 多尺度边缘与纹理:比单尺度算子更稳定
Sobel/Laplacian 是单尺度;小波给出一组尺度。很多视觉结构(文字笔画、纹理颗粒、轮廓)本质是多尺度的,小波系数把它们自然地分开。
7.3 可解释的频带解耦:低频=内容,高频=细节
在生成/压缩/蒸馏里经常使用“低频对齐语义,高频对齐纹理”的说法。这里“低频/高频”不是口号,而是通过 LL vs (LH,HL,HH) 子带有了明确操作对象。
7.4 小波散射(Wavelet Scattering):把小波当作固定的特征提取前端
如果希望在理论上更“稳”,散射网络用固定小波滤波器组 + 非线性 + 平均池化构造对平移/形变稳定的表征。它强调的是:
- 用小波获得多尺度局部响应;
- 用非线性把能量折叠到可用特征上;
- 用平均聚合得到稳定性。
(这部分可以作为“把小波引入深度学习”最干净的数学入口。)
8. 小波与深度学习:在网络里到底扮演什么角色
这里不把小波当“频域花活”,而是明确它提供的能力。
8.1 作为结构化下采样(替代 pooling/stride)
用 DWT 替代 stride/pooling 的关键收益:
- 不是简单丢弃信息,而是把信息分流到不同子带;
- 网络可以选择保留/强调某些频带。
8.2 作为归纳偏置:让网络天然具备多尺度与方向选择性
卷积当然也能学到类似滤波器,但小波提供了一个“开局就合理”的基底:
- 低层特征更容易对齐到边缘/纹理;
- 对小数据或强噪声场景更稳。
8.3 作为可解释的对齐/蒸馏/损失空间
可以在每个子带上分别设计损失:
- 对 LL 强约束(结构/语义);
- 对 HH/LH/HL 软约束(纹理/边缘),或者反过来强调细节。
这比“在傅里叶幅度谱上做全局约束”更容易保持空间局部性。
9. 小波域 vs 空域:余弦相似度何时相等?
余弦相似度定义为
如果离散小波变换可以表示为一个正交矩阵 (这需要:正交小波 + 全系数拼接 + 合适的边界条件,使其整体是正交变换),则
从而 。
实践中常见导致“不相等”的原因:
- 使用双正交小波(整体不再正交);
- 只取部分子带(例如只拿 LL),这是投影/降维,不可能保内积;
- 边界延拓导致严格正交性被破坏;
- 分子带分别算相似度再加权求和:那已经是另一个度量。
10. 在 PyTorch 里怎么把 DWT 用起来
默认输入是图像特征图 。
10.1 一层 2D DWT 的张量形状
最常见实现会输出四个子带,每个子带空间尺寸减半:
有两种常见组织方式:
返回四个张量(更清晰):
return ll, lh, hl, hh在通道维拼接(更方便接卷积):
对应的逆变换(iDWT)把这些子带重构回 。
10.2 一个可跑的实现思路:分离滤波 + stride=2
工程上可以把 2D DWT 看成“对行/列分别做 1D 分解”。对于 Haar 小波:
- 低通
- 高通
一次 2D 分解等价于:先在宽度方向做低/高通并下采样,再在高度方向再做一次。
import torch
import torch.nn.functional as F
def dwt2_haar(x: torch.Tensor):
# x: [B, C, H, W], H/W 必须是偶数(或者自己做 padding)
B, C, H, W = x.shape
assert H % 2 == 0 and W % 2 == 0
# 先按宽度做 1D Haar
x0 = x[..., 0::2] # [B,C,H,W/2]
x1 = x[..., 1::2] # [B,C,H,W/2]
lo = (x0 + x1) / (2 ** 0.5)
hi = (x0 - x1) / (2 ** 0.5)
# 再按高度做 1D Haar
lo0 = lo[:, :, 0::2, :]
lo1 = lo[:, :, 1::2, :]
hi0 = hi[:, :, 0::2, :]
hi1 = hi[:, :, 1::2, :]
ll = (lo0 + lo1) / (2 ** 0.5)
lh = (lo0 - lo1) / (2 ** 0.5)
hl = (hi0 + hi1) / (2 ** 0.5)
hh = (hi0 - hi1) / (2 ** 0.5)
return ll, lh, hl, hh
def pack_subbands(ll, lh, hl, hh):
# -> [B, 4C, H/2, W/2]
return torch.cat([ll, lh, hl, hh], dim=1)这段 Haar 的实现优点是:不用显式卷积核,速度快、形状直观;缺点是:只覆盖 Haar,小波家族换了就要改。
10.3 边界处理(padding)是“工程坑点”
理论里我们常假设无限长信号或周期延拓;工程里必须选一种边界方案:
periodic:适合周期信号,但图像边缘可能引入接缝;symmetric/reflect:视觉任务里更常见;zero-pad:简单但会引入边缘伪影。
注意:边界处理会影响“整体是否正交”,进而影响在第 9 节讨论的“相似度是否严格不变”。
10.4 DWT 替代下采样时,后续网络怎么接
常见两种接法:
保留所有子带:把
[B,4C,H/2,W/2]送入后续卷积,让网络自己学会用哪些频带。只保留 LL:等价于一种“更结构化的低通下采样”,但明确丢掉了高频细节(更像传统金字塔)。
经验上:如果是做分割/超分/生成,保留高频子带更有意义;如果做分类且数据噪声大,先只用 LL 有时更稳。
10.5 小波域损失/蒸馏:怎么写得可控
假设对教师/学生特征分别做 DWT 得到子带 ,一个可控的对齐损失是
工程上建议:
- 从 大、 小开始(先对齐结构,再对齐纹理);
- 或者按任务反过来(例如去噪/细节增强)。
10.6 常见检查清单
- 形状:
H,W是否为偶数;多层 DWT 时是否一直满足。 - 归一化:不同实现对滤波器系数/能量归一可能不同,导致系数幅值尺度变化。
- 子带约定:
LH/HL的方向含义在不同库/实现里可能互换,做可视化检查最靠谱。 - 反传:若把 DWT 当网络层,确保实现是可微的(上面的 Haar 版本天然可微)。
11. 小结:一句话抓住小波的价值
小波不是“另一个频域”,而是一种可局部化、可多尺度、可方向分解的表示方式:
- 数学上:它通过缩放/平移的一族函数对信号做内积投影;
- 原理上:尺度随频率自适应,天然适配非平稳结构;
- 性质上:零均值与消失矩带来稀疏性与“像导数一样”的敏感性;
- 在特征提取中:它把“结构(低频)/细节(高频)/方向(子带)/尺度(层级)”变成可操作的分量。

