卷积神经网络 (CNN) 深度理解笔记

一、概述

卷积神经网络(Convolutional Neural Networks, CNN)是一种专门处理具有网格结构数据(如图像)的深度学习模型。其核心思想是利用局部连接(Local Connectivity)权重共享(Weight Sharing),极大地减少了全连接网络中的参数量。

CNN 可以被理解为一个特征提取器与分类器的组合:通过多层卷积算子学习输入信号 的层级空间特征(从边缘到形状,再到物体部分),最终映射到任务目标空间。

与 MLP 的关键区别

维度MLP(全连接)CNN(卷积)
连接方式所有神经元相互连接局部空间连接
权重结构稠密矩阵稀疏的循环卷积
参数数量
特性无空间先验平移等变性

二、卷积算子与特征提取

一、卷积层的正向传播

1. 张量维度定义

给定输入张量 和卷积核

  • :输入通道数(Channel),例如 RGB 图像
  • :输入特征图的高和宽
  • :卷积核的 spatial 尺寸(通常

输出特征图 ,其中 是输出通道数(即卷积核的个数)。

2. 卷积运算的数学定义

输出特征图的一个像素点 的计算公式为:

其中:

  • :输出通道索引(对应第 个卷积核)
  • :输入通道索引
  • :第 个卷积核在第 个通道上的 位置权重
  • :第 个卷积核的偏置

直观理解:每个输出通道 是由 个输入通道与对应的 个卷积核子模块分别卷积后求和得到的。这 个卷积核子模块组成一个完整的 的 3D 卷积核。

3. 多卷积核与多通道的关系

如果有 个卷积核,则输出有 个通道:

记忆点:卷积层的参数量 (偏置)

4. 输出维度计算(几何约束)

假设输入尺寸为 ,卷积核大小为 ,填充(Padding)为 ,步长(Stride)为 ,则输出尺寸 满足:

特例速记

  • Valid 卷积(无Padding,):
  • Same 卷积(输出等于输入):当 时,
  • Max Pooling):

5. 参数共享的数学意义

在全连接层中,若输入输出均为 维,权重矩阵维度为 。而在卷积层中,由于同一个卷积核在整个输入上滑动,参数量仅取决于卷积核的大小 ,这在数学上等效于循环矩阵(Circulant Matrix)的稀疏化约束,使得模型具有平移不变性(Translation Invariance)

平移不变性的直观理解:无论一只猫出现在图像的左上角还是右下角,同一个卷积核都能检测到”猫”的特征,因为卷积核在整张图上共享权重。


二、数学推导 - 卷积层的反向传播

为了让模型学习到最优特征,我们需要通过损失函数 对卷积核参数 求导。这是理解 CNN 学习逻辑的核心。

1. 已知量与目标

假设当前层的输出为 ,下一层传回的梯度(误差项)为 。我们需要求:

  • 对权重 的梯度:用于更新参数。

  • 对输入 的梯度:用于继续向上传递误差。

2. 权重梯度的推导

逐元素推导(适合理解原理):

根据链式法则,损失函数对卷积核中某个位置 的导数为:

由前向传播公式可知 ,带入得:

用卷积表达:这个求和恰好是输入 与误差 的互相关运算:

其中 表示互相关(Cross-Correlation)。

结论:权重的梯度等价于输入特征 与输出梯度 的互相关

3. 误差项(对输入 )的传递

为了将误差传给前一层,需计算

经过索引转换,可以证明:

其中 表示将卷积核旋转 180 度。这意味着反向传播本质上也是一个卷积过程

4. Im2Col 矩阵化实现(工程视角)

在 GPU 上高效实现卷积反向传播,需要将卷积转化为矩阵乘法(Im2Col 方法):

  1. 将输入张量展开为矩阵

    • 将每个滑动窗口( 区域)展平为一行
    • 输入 被展开为矩阵
  2. 将卷积核展开为矩阵

    • 每个卷积核的 参数展平为一行
  3. 前向传播

  4. 反向传播

    • 权重梯度:
    • 输入梯度:,然后恢复为 的形状

物理意义:Im2Col 将局部运算转化为全局矩阵运算,从而可以充分利用 GPU 的矩阵乘法加速单元。


三、下采样(Pooling)与感受野

1. 池化层(Pooling)

池化层通过非线性映射(Max 或 Average)实现空间维度的压缩。

  • Max Pooling:

  • 作用: 增加特征对微小形变的鲁棒性,减少计算量,并强制模型学习更全局的抽象特征。

2. 感受野(Receptive Field, RF)

感受野决定了输出特征图中一个点能“看到”输入图像多大的区域。

对于第 层,其感受野 的递推公式为:

其中 为当前层核大小, 为前几层的步长。

直观理解: 随着层数加深,感受野呈线性/指数级扩大,使得网络能从局部的像素点逐步演化为对整个物体的理解。


四、训练链路全流程详析

在训练模式下,CNN 遵循“前向传播 (FP) 计算损失 反向传播 (BP) 参数更新”的闭环过程。

1. 前向传播链路(Forward Pass)

数据在网络中的流动可以抽象为算子的顺序嵌套:

  1. 输入层 (Input):原始图像数据 进入网络。

  2. 卷积运算 ()

    • 利用卷积核对输入进行局部加权求和。

    • 作用:提取空间局部特征(如纹理、颜色梯度)。

  3. 激活层 ()

    • 通常使用 ReLU,将卷积后的线性结果进行非线性映射。

    • 数学性质。它解决了梯度消失问题并带来了神经网络的稀疏性。

  4. 池化层 (Pooling)

    • 执行下采样(如 Max Pooling),在保留核心特征的同时减小特征图尺寸。
  5. 全连接层 (FC Layer)

    • 将最后一层卷积得到的特征图“压平”(Flatten)为一维向量。

    • 通过矩阵乘法 将高维特征映射到类别分数空间。

  6. 输出与 Loss 计算

    • 经过 Softmax 函数将分数转化为概率分布

    • 使用 交叉熵损失 (Cross-Entropy Loss) 计算预测值与真实标签 的距离:


2. 反向传播链路(Backward Pass)

训练的核心是利用链式法则计算损失函数 对每一层参数的梯度。

A. 误差项的传递(从后往前)

首先计算输出层的梯度

  • FC 层梯度:标准的矩阵转置相乘,将误差分配给每个神经元。

  • 池化层反传

    • Max Pooling:误差只传递回前向传播时贡献最大值(Max)的那个位置,其余位置梯度为 0(这被称为“梯度掩码”)。

    • Average Pooling:误差平均分配回该池化窗口内的所有像素。

B. 卷积层权重梯度计算

这是更新卷积核的关键步骤。如第二部分所述,第 层权重的梯度满足:

这意味着:卷积核的更新方向,取决于上一层的激活值与当前层误差项的相关性。

backpropagation in convolutional neural network,AI 生成

C. 梯度传播至前一层

为了让更浅的层得到更新,误差项必须穿过当前的卷积核:

其中 是 Hadamard 积(逐元素相乘), 是激活函数的导数。


3. 参数更新(Optimizer)

在得到梯度 后,使用优化算法(如 SGD, Adam)对权重进行修正:

其中 是学习率。

训练链路总结:

  • 前向:通过卷积核的平移提取局部特征,通过池化进行特征聚合,最终实现降维分类。

  • 后向:误差项通过卷积核的翻转卷积逆向回传,权重通过误差与激发的互相关实现自我进化。


三、总结

CNN 的强大在于其精心设计的归纳偏置(Inductive Bias):

  1. 局部性: 认为相关信息存在于相邻像素间。

  2. 平移等变性: 无论特征出现在图像何处,相同的卷积核都能捕捉到它。

  3. 层次化: 通过堆叠卷积层,将复杂的非线性特征分解为简单的空间变换,这与人类视觉皮层(V1 到 V4 区域)的处理逻辑高度相似。