概述

卷积神经网络(CNN)的设计并非纯粹的经验技巧,而是建立在严格的数学原理之上。本文档从算子理论、群作用和信号处理三个角度系统阐述CNN的数学基础,涵盖:

  1. 离散卷积算子的严格定义:从一维卷积到多通道卷积的完整数学形式
  2. 平移等变性的形式化证明:群作用与等变算子的抽象框架
  3. 感受野算术与有效感受野(ERF):理论与实践的连接
  4. 群等变CNN(Cohen-Welling G-CNNs):超越平移等变性
  5. PDE-CNNs:从演化方程视角理解CNN
  6. 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):

这一表示揭示了:

  1. 卷积是线性变换
  2. 共享权重的本质(一个卷积核生成同一Toeplitz结构的多行)
  3. 可使用通用矩阵乘法(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 群作用的定义

是一个群, 是一个集合。群 上的(左)作用是一个映射:

满足两个公理:

  1. 单位元:
  2. 结合律:

平移群 上的作用为:

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视角带来三个优势:

  1. 数值稳定性:可以使用隐式方法(如Crank-Nicolson)提高稳定性
  2. 物理一致性:约束保持能量守恒等物理性质
  3. 可解释性:网络对应物理过程的演化

六、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 output

6.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时遵循以下原则可以最大化利用等变性:

  1. 数据增强:随机旋转/平移增强可以弥补CNN等变性的不足
  2. 架构选择:对旋转不变任务使用G-CNN,对平移任务使用标准CNN
  3. 池化策略:全局平均池化保持平移不变性;最大值池化保留最显著特征
  4. 填充策略: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

  1. Cohen, T. & Welling, M. (2016). Group Equivariant Convolutional Networks. ICML 2016. https://proceedings.mlr.press/v48/cohenc16.html

  2. 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

  3. Cohen, T. & Welling, M. (2016). Group Equivariant Convolutional Networks. ICML 2016.

  4. 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

  5. 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

  6. 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

  7. 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

  8. 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

  9. 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