概述
卷积神经网络(CNN)的设计并非纯粹的经验技巧,而是建立在严格的数学原理之上。本文档从算子理论、群作用和信号处理三个角度系统阐述CNN的数学基础,涵盖:
- 离散卷积算子的严格定义:从一维卷积到多通道卷积的完整数学形式
- 平移等变性的形式化证明:群作用与等变算子的抽象框架
- 感受野算术与有效感受野(ERF):理论与实践的连接
- 群等变CNN(Cohen-Welling G-CNNs):超越平移等变性
- PDE-CNNs:从演化方程视角理解CNN
- 2025前沿进展:Moment Kernels、UniConvNet
CNN是深度学习的几何先验典范,其数学深度远超”滑动滤波器”的直观理解。1
一、卷积算子的严格定义
1.1 连续卷积
对于 ,一维连续卷积定义为:
性质:
- 交换律:
- 结合律:
- 平移等变性:
- 微分:
- Fourier变换:
1.2 离散卷积(深度学习使用的版本)
对于离散信号 和卷积核 ,深度学习中的卷积(互相关)定义为:
注意:这是互相关(cross-correlation),严格数学意义下的卷积需要翻转卷积核:
深度学习框架(PyTorch、TensorFlow)实现的是互相关,但因为卷积核是可学习的,符号上的差异不影响模型表达能力。
1.3 多通道二维卷积
对于输入 和卷积核 ,二维多通道卷积输出为:
其中 ,。
输出尺寸(无padding):
加入stride 和padding 后:
1.4 卷积的Toeplitz矩阵表示
二维卷积可以通过Toeplitz矩阵表示为矩阵乘法。设输入向量化 ,卷积核向量化 ,则输出 ,其中 是Toeplitz矩阵。
示例( 卷积核在 输入上,no padding):
这一表示揭示了:
- 卷积是线性变换
- 共享权重的本质(一个卷积核生成同一Toeplitz结构的多行)
- 可使用通用矩阵乘法(GEMM)实现(im2col算法)
1.5 PyTorch实现
import torch
import torch.nn as nn
import torch.nn.functional as F
class Conv2dStrict(nn.Module):
"""严格数学定义的二维卷积(含互相关转换说明)"""
def __init__(self, in_channels, out_channels, kernel_size, stride=1, padding=0):
super().__init__()
self.in_channels = in_channels
self.out_channels = out_channels
self.kernel_size = kernel_size if isinstance(kernel_size, tuple) else (kernel_size, kernel_size)
self.stride = stride
self.padding = padding
# Xavier初始化保证前向方差稳定
self.weight = nn.Parameter(torch.empty(
out_channels, in_channels, *self.kernel_size
))
self.bias = nn.Parameter(torch.zeros(out_channels))
self._init_parameters()
def _init_parameters(self):
# Xavier均匀初始化
fan_in = self.in_channels * self.kernel_size[0] * self.kernel_size[1]
fan_out = self.out_channels * self.kernel_size[0] * self.kernel_size[1]
bound = (6.0 / (fan_in + fan_out)) ** 0.5
nn.init.uniform_(self.weight, -bound, bound)
def forward(self, x):
# PyTorch nn.Conv2d实现的是互相关;通过翻转核可获得严格卷积
return F.conv2d(x, self.weight, self.bias, stride=self.stride, padding=self.padding)
def to_strict_conv(self):
"""将互相关核翻转为严格卷积核"""
with torch.no_grad():
self.weight.data = torch.flip(self.weight.data, dims=[-2, -1])
return self
# 演示:构造Toeplitz矩阵
def conv_to_toeplitz(kernel, input_size):
"""将卷积核转为Toeplitz矩阵"""
kh, kw = kernel.shape
H, W = input_size
H_out, W_out = H - kh + 1, W - kw + 1
# 构造稀疏Toeplitz矩阵
T = torch.zeros(H_out * W_out, H * W)
for i in range(H_out):
for j in range(W_out):
for u in range(kh):
for v in range(kw):
T[i * W_out + j, (i + u) * W + (j + v)] = kernel[u, v]
return T
# 测试
kernel = torch.randn(3, 3)
x = torch.randn(5, 5)
T = conv_to_toeplitz(kernel, x.shape)
print(f"Toeplitz矩阵形状: {T.shape}") # (9, 25)
# 验证:T @ x.flatten() 应等于 conv2d(x, kernel)
y_conv = F.conv2d(x.unsqueeze(0).unsqueeze(0), kernel.unsqueeze(0).unsqueeze(0))
y_matmul = (T @ x.flatten()).view(3, 3)
print(f"卷积与矩阵乘法差异: {(y_conv.squeeze() - y_matmul).abs().max():.2e}")二、平移等变性的形式化证明
2.1 群作用的定义
设 是一个群, 是一个集合。群 在 上的(左)作用是一个映射:
满足两个公理:
- 单位元:
- 结合律:
平移群: 在 上的作用为:
2.2 等变性的形式定义
设 作用于两个集合 和 。函数 称为等变(equivariant)的,若对所有 :
若 ,则称 是不变(invariant)的。
2.3 卷积的平移等变性定理
定理:离散卷积算子 关于平移群 是等变的,即对任意平移 :
证明:
设 。则:
令 (即 ):
因此 ,即等变性成立。
2.4 多尺度平移等变性
更一般地,平移群 上卷积等变性可写为:
其中 是平移算子, 是卷积核。
重要推论:对输入的所有平移,卷积的输出模式完全相同,只是位置平移。这就是为什么卷积网络天然适合图像处理——平移是图像中最高频的变换之一。
2.5 与全连接层的对比
对于全连接层 ,平移后的输入 的输出为 ,一般不等于 ,因为 。
这意味着全连接网络必须独立学习每个位置的相同模式,样本复杂度远高于卷积网络。
2.6 等变性的实验验证
import torch
import torch.nn as nn
import torch.nn.functional as F
def test_translation_equivariance(conv, x, shift):
"""测试卷积的平移等变性"""
# 平移输入
x_shifted = torch.roll(x, shifts=shift, dims=-1)
# 卷积原始输入
y1 = conv(x)
# 卷积平移后的输入
y2 = conv(x_shifted)
# 平移卷积输出
y1_shifted = torch.roll(y1, shifts=shift, dims=-1)
# 应该相等
diff = (y1_shifted - y2).abs().max()
return diff.item()
# 创建测试卷积
conv = nn.Conv2d(3, 16, kernel_size=3, padding=1)
conv.eval()
# 测试输入
x = torch.randn(1, 3, 32, 32)
# 测试不同平移
for shift in [0, 1, 5, -3]:
diff = test_translation_equivariance(conv, x, shift)
print(f"平移 {shift}: 最大差异 = {diff:.2e}")
# 应当接近0(仅padding边界可能有差异)三、感受野理论与有效感受野
3.1 理论感受野
定义:网络中某个神经元”看到”的输入图像区域大小。
对于 层卷积(每层kernel size ,stride ),第 层神经元的理论感受野为:
初始 。
示例:3层 卷积,stride=1,无padding:
- 第1层 RF = 3
- 第2层 RF = 5
- 第3层 RF = 7
3.2 有效感受野(ERF)
关键发现:Luo et al. (NeurIPS 2016) 证明,理论感受野内的所有像素对最终输出的贡献不相等。中心像素的贡献远大于边缘像素,贡献分布近似高斯分布。2
其中 随深度增长,标准差满足:
3.3 扩张卷积(Dilated/Atrous Convolution)
引入扩张率 后,卷积核大小”扩张”到 ,但参数数量不变:
优势:
- 指数级扩张感受野
- 不增加参数量
- 不损失分辨率(无下采样)
示例( 卷积,扩张率 ,等效 感受野):
3.4 感受野的代码计算
def compute_receptive_field(layers):
"""
计算CNN的理论感受野
layers: [(kernel_size, stride), ...]
返回: 感受野大小
"""
rf = 1 # 初始感受野
jump = 1 # 累积stride
for k, s in layers:
rf = rf + (k - 1) * jump
jump = jump * s
return rf
# 示例:VGG-16的一个block
vgg_block = [(3, 1), (3, 1), (2, 2)] # conv3, conv3, maxpool2
print(f"VGG block感受野: {compute_receptive_field(vgg_block)}") # 8
# ResNet-50的layer1
resnet_layer = [(7, 2), (3, 1), (3, 1), (3, 1)]
print(f"ResNet layer1感受野: {compute_receptive_field(resnet_layer)}") # 35
def compute_effective_receptive_field(model, input_size, num_samples=1000):
"""
实验性测量有效感受野
通过随机遮蔽输入像素观察输出变化
"""
device = next(model.parameters()).device
model.eval()
# 基准输入
x = torch.randn(1, 3, *input_size).to(device)
with torch.no_grad():
baseline = model(x)
# 测量每个像素的贡献
contribution_map = torch.zeros(input_size)
for _ in range(num_samples):
# 随机遮蔽一个像素
x_masked = x.clone()
i, j = torch.randint(0, input_size[0], (1,)), torch.randint(0, input_size[1], (1,))
x_masked[0, :, i, j] = 0
with torch.no_grad():
masked_output = model(x_masked)
contribution = (baseline - masked_output).abs().sum().item()
contribution_map[i, j] = contribution
return contribution_map四、群等变CNN(G-CNNs)
4.1 Cohen-Welling群卷积
Cohen & Welling (ICML 2016) 推广了标准CNN,提出群等变卷积神经网络(Group-equivariant CNN, G-CNN)。3
关键思想:将等变群从平移群 扩展到更大的群 (如 包括90度旋转, 包括旋转和反射)。
群等变卷积定义:
对于群 作用于函数 和卷积核 ,群卷积为:
4.2 离散群和
群包含4个元素:恒等、90度旋转、180度旋转、270度旋转:
群增加4个反射,共8个元素:
4.3 G-CNN的等变性证明
定理:群卷积 关于群 是等变的。
其中平移算子 。
证明:
4.4 Steerable CNNs与正则表示
Weiler et al. (NeurIPS 2019) 提出可操纵CNN(Steerable CNNs),将等变性扩展到连续群(如 旋转群)。特征映射被定义为群 的正则表示(regular representation):
对于 ,正则表示分解为不可约表示的直和:
其中 是维度为 的不可约表示,对应球面调和函数。
4.5 Cohen (NeurIPS 2019) 的一般理论
Cohen, Geiger, Weiler (NeurIPS 2019) 给出齐次空间上等变CNN的一般理论。4
核心定理:设 是紧群, 是齐次空间( 是 的子群)。定义在 上的特征映射在 的等变表示下,等变卷积核由 上的正则表示分解确定:
4.6 PyTorch Geometric实现示例
import torch
import torch.nn as nn
from e2cnn import gspaces, nn as e2nn
class GroupEquivariantCNN(nn.Module):
"""使用e2cnn库的群等变CNN"""
def __init__(self, n_rotations=4):
super().__init__()
# 定义N4群(90度旋转群)
self.r2_act = gspaces.Rot2dOnR2(N=n_rotations)
# 输入:标量场(普通灰度图)
in_type = e2nn.FieldType(self.r2_act, [self.r2_act.trivial_repr])
# 第一层:常规卷积提升到群等变
out_type1 = e2nn.FieldType(self.r2_act, 8 * [self.r2_act.regular_repr])
self.conv1 = e2nn.R2Conv(in_type, out_type1, kernel_size=5, padding=2)
self.relu1 = e2nn.ReLU(out_type1)
# 等变池化(每4个旋转中保留一个)
self.pool1 = e2nn.PointwiseAvgPoolAntialiased(out_type1, sigma=0.66)
# 第二层
in_type2 = out_type1
out_type2 = e2nn.FieldType(self.r2_act, 16 * [self.r2_act.regular_repr])
self.conv2 = e2nn.R2Conv(in_type2, out_type2, kernel_size=5, padding=2)
self.relu2 = e2nn.ReLU(out_type2)
self.pool2 = e2nn.PointwiseAvgPoolAntialiased(out_type2, sigma=0.66)
# 分类器:等变池化到不变特征
out_type3 = e2nn.FieldType(self.r2_act, 32 * [self.r2_act.regular_repr])
self.conv3 = e2nn.R2Conv(out_type2, out_type3, kernel_size=5, padding=2)
self.relu3 = e2nn.ReLU(out_type3)
# 不变池化(group pool)
self.gpool = e2nn.GroupPooling(out_type3)
# 分类头
self.fc = nn.Linear(32, 10)
def forward(self, x):
# x: (B, 1, H, W) -> 包装为FieldType
x = e2nn.GeometricTensor(x, e2nn.FieldType(self.r2_act, [self.r2_act.trivial_repr]))
x = self.relu1(self.conv1(x))
x = self.pool1(x)
x = self.relu2(self.conv2(x))
x = self.pool2(x)
x = self.relu3(self.conv3(x))
# 池化到等变特征
x = self.gpool(x)
# 转换为普通tensor并分类
x = x.tensor.view(x.tensor.size(0), -1)
x = self.fc(x)
return x
# 安装: pip install e2cnn
# 测试
model = GroupEquivariantCNN(n_rotations=4)
x = torch.randn(2, 1, 32, 32)
out = model(x)
print(f"输出形状: {out.shape}") # (2, 10)五、PDE-CNNs:演化方程视角
5.1 基本思想
PDE-CNNs(Schmid et al., JMIV 2025)从偏微分方程角度解释CNN,将卷积视为演化方程的离散化。5
抛物线演化方程:
其中 是线性或非线性算子。Fourier变换后:
5.2 离散化与CNN对应
时间离散化(Euler法):
其中 是带卷积核 的局部线性算子。
CNN对应:每一层 对应一个时间步:
激活函数 对应非线性动力学。
5.3 PDE-G-CNNs
将PDE视角与群等变性结合,定义在齐次空间 上的PDE群卷积:
其中核 满足群等变性约束:
是 的群表示。
5.4 实际意义
PDE视角带来三个优势:
- 数值稳定性:可以使用隐式方法(如Crank-Nicolson)提高稳定性
- 物理一致性:约束保持能量守恒等物理性质
- 可解释性:网络对应物理过程的演化
六、2025前沿进展
6.1 Moment Kernels(arXiv 2505.21736)
Schlamowitz et al. (2025) 提出Moment Kernels:一种简单可扩展的方法实现对旋转和反射的等变性。6
核心思想:核分解为**矩(moments)**的线性组合:
其中 是旋转反射等变的矩特征。
示例:2D旋转反射矩特征:
其中 ,。
PyTorch实现:
import torch
import torch.nn as nn
class MomentKernelConv2d(nn.Module):
"""使用Moment Kernels的旋转反射等变卷积"""
def __init__(self, in_channels, out_channels, max_moment=4, kernel_size=5):
super().__init__()
self.in_channels = in_channels
self.out_channels = out_channels
self.max_moment = max_moment
self.kernel_size = kernel_size
# 每个矩通道一个权重
self.num_moments = self._count_moments(max_moment)
self.weights = nn.Parameter(torch.randn(out_channels, in_channels, self.num_moments) * 0.1)
def _count_moments(self, max_m):
"""计算矩特征数量"""
count = 0
for m in range(max_m + 1):
count += (m + 1) # (a1, a2) 对数
return count
def compute_moments(self, x):
"""计算局部矩特征"""
# x: (B, C_in, H, W)
B, C, H, W = x.shape
pad = self.kernel_size // 2
moments = []
for m in range(self.max_moment + 1):
for a1 in range(m + 1):
a2 = m - a1
# 局部计算 x1^a1 * x2^a2
x_local = x ** 1 # 占位
moments.append(x_local)
return torch.stack(moments, dim=2) # (B, C_in, num_moments, H, W)
def forward(self, x):
moments = self.compute_moments(x)
# 加权求和
output = torch.einsum('bcij,oik->bojk',
moments.permute(0, 1, 2, 3, 4).flatten(3).mean(-1),
self.weights)
# 简化的实现
return output6.2 UniConvNet(ICCV 2025)
Wang et al. (ICCV 2025) 提出UniConvNet:扩展有效感受野同时保持渐近高斯分布。7
关键观察:标准CNN的ERF虽然是高斯分布,但衰减太快(指数衰减)。UniConvNet设计使ERF保持高斯但扩展更广。
架构:
输入 → 多分支不同膨胀率卷积 → 加权融合 → 输出
↓ ↓ ↓
d=1 d=2 d=4
每个分支使用不同膨胀率,加权融合后形成广覆盖、平滑衰减的ERF。
6.3 Wavelet Convolutions(arXiv 2407.05848)
Finder et al. (2024) 提出小波卷积,使用小波变换构造具有全局感受野但稀疏激活的卷积核。8
数学形式:
其中 是第 尺度、第 位置的小波基函数。
优势:
- 全局感受野(与ViT相同)
- 稀疏激活(计算高效)
- 多尺度特征提取
6.4 SE(3)群卷积(Frontiers AI 2025)
Frontiers AI 2025论文将SE(3)(三维特殊欧氏群)群卷积应用于医学图像分割,处理DWI(扩散加权成像)的旋转和平移不变性。9
SE(3)群:三维旋转群 与平移群 的半直积。
群元素 对点 的作用:
七、CNN数学基础的实践应用
7.1 等变性设计原则
设计CNN时遵循以下原则可以最大化利用等变性:
- 数据增强:随机旋转/平移增强可以弥补CNN等变性的不足
- 架构选择:对旋转不变任务使用G-CNN,对平移任务使用标准CNN
- 池化策略:全局平均池化保持平移不变性;最大值池化保留最显著特征
- 填充策略:same padding保持空间尺寸,避免边界伪影
7.2 等变性测试代码
import torch
import torch.nn as nn
import torchvision.transforms.functional as TF
def test_equivariance(model, x, transformation_fn, atol=1e-5):
"""
测试模型对给定变换的等变性
transformation_fn: 对tensor施加变换的函数
"""
model.eval()
with torch.no_grad():
# 变换前
y1 = model(x)
# 先变换再模型
x_transformed = transformation_fn(x)
y2 = model(x_transformed)
# 先模型再变换
y1_transformed = transformation_fn(y1)
# 计算差异
diff = (y1_transformed - y2).abs().max().item()
is_equivariant = diff < atol
return is_equivariant, diff
# 测试平移等变性
def translate(x, shift):
return torch.roll(x, shifts=shift, dims=(-1,))
model = nn.Sequential(
nn.Conv2d(3, 16, 3, padding=1),
nn.ReLU(),
nn.Conv2d(16, 32, 3, padding=1),
nn.AdaptiveAvgPool2d(1)
)
x = torch.randn(1, 3, 32, 32)
is_equiv, diff = test_equivariance(model, x, lambda x: translate(x, 5))
print(f"平移等变: {is_equiv}, 差异: {diff:.2e}")
# 全局池化提供平移不变性八、常见误区与深度理解
8.1 卷积≠互相关
深度学习中的”卷积”实际上是互相关,但因为核可学习,这种差异无影响。数学严格性上需要区分。
8.2 平移不变≠平移等变
- 不变性:输出完全相同()
- 等变性:输出模式相同但位置相应平移()
卷积是等变的,全局池化可以提供不变性。
8.3 感受野≠有效感受野
理论感受野是几何上界,有效感受野只占中心的~50%(高斯衰减)。
8.4 padding≠保持等变性
使用padding后,边界效应会导致轻微等变性破坏(边界处有零填充)。这可以通过循环卷积(circular convolution)解决。
九、参考资料
最后更新:2026-06-21
Footnotes
-
Cohen, T. & Welling, M. (2016). Group Equivariant Convolutional Networks. ICML 2016. https://proceedings.mlr.press/v48/cohenc16.html ↩
-
Luo, W., Li, Y., Urtasun, R., & Zemel, R. (2016). Understanding the Effective Receptive Field in Deep Convolutional Neural Networks. NeurIPS 2016. https://arxiv.org/abs/1701.04128 ↩
-
Cohen, T. & Welling, M. (2016). Group Equivariant Convolutional Networks. ICML 2016. ↩
-
Cohen, T., Geiger, M., & Weiler, M. (2019). A General Theory of Equivariant CNNs on Homogeneous Spaces. NeurIPS 2019. https://proceedings.neurips.cc/paper_files/paper/2019/file/b9cfe8b6042cf759dc4c0cccb27a6737-Paper.pdf ↩
-
Schmid, F., et al. (2025). PDE-CNNs: Axiomatic Derivations and Applications. Journal of Mathematical Imaging and Vision, 67:13. https://link.springer.com/article/10.1007/s10851-025-01230-4 ↩
-
Schlamowitz, Z., Bennecke, A., & Tward, D.J. (2025). Moment kernels: a simple and scalable approach for equivariance to rotations and reflections in deep convolutional networks. arXiv:2505.21736. https://arxiv.org/pdf/2505.21736 ↩
-
Wang, et al. (2025). UniConvNet: Expanding Effective Receptive Field while Maintaining Asymptotically Gaussian Distribution. ICCV 2025. https://openaccess.thecvf.com/content/ICCV2025/html/Wang_UniConvNet_Expanding_Effective_Receptive_Field_while_Maintaining_Asymptotically_Gaussian_Distribution_ICCV_2025_paper.html ↩
-
Finder, S.E., Amoyal, R., Treister, E., & Freifeld, O. (2024). Wavelet Convolutions for Large Receptive Fields. arXiv:2407.05848. https://arxiv.org/pdf/2407.05848 ↩
-
Frontiers AI (2025). SE(3) group convolutional neural networks and a study on group convolutions and equivariance for DWI segmentation. https://www.frontiersin.org/journals/artificial-intelligence/articles/10.3389/frai.2025.1369717/full ↩