文章

07 单层卷积神经网络

07 单层卷积神经网络

07 单层卷积神经网络

🎯 单层卷积网络(One Layer of a Convolutional Network)

本节课讲解了卷积神经网络中单个卷积层的工作原理,包括输入输出维度推导、过滤器参数计算、激活函数应用以及标准符号体系。我们通过一个具体例子深入理解了从输入图像到输出特征图的完整前向传播过程。


✅ 一、核心概念回顾

1. 卷积层的基本作用

  • 使用一组过滤器(filters) 对输入图像进行滑动卷积操作。
  • 每个过滤器提取一种特定特征(如边缘、纹理等)。
  • 输出多个二维特征图,堆叠成三维张量作为下一层输入。

2. 基本流程

输入 → 卷积 + 偏差 → 非线性激活 → 输出激活值

即:

\[a^{[l]} = \text{ReLU}(Z^{[l]}) = \text{ReLU}(W^{[l]} * a^{[l-1]} + b^{[l]})\]

其中:

  • $a^{[l-1]}$:上一层的激活值(输入)
  • $W^{[l]}$:当前层的过滤器集合
  • $b^{[l]}$:偏差向量
  • $Z^{[l]}$:线性部分输出(未激活)
  • $a^{[l]}$:最终输出激活值

✅ 二、关键符号定义(Notation Summary)

设第 $l$ 层为卷积层,则:

符号含义
$f^{[l]}$过滤器大小(通常为 $f \times f$)
$p^{[l]}$Padding 数量(填充像素数)
$s^{[l]}$步幅(stride)
$n_c^{[l]}$第 $l$ 层输出通道数(即过滤器数量)

✅ 三、输入与输出维度分析

输入维度

假设第 $l-1$ 层的输出是上一层的激活值,其维度为:

\[n_H^{[l-1]} \times n_W^{[l-1]} \times n_c^{[l-1]}\]
  • $n_H^{[l-1]}$: 高度
  • $n_W^{[l-1]}$: 宽度
  • $n_c^{[l-1]}$: 通道数(颜色通道或特征通道)

输出维度

第 $l$ 层的输出尺寸由以下公式决定:

高度和宽度计算公式:

\[n_H^{[l]} = \left\lfloor \frac{n_H^{[l-1]} + 2p^{[l]} - f^{[l]}}{s^{[l]}} + 1 \right\rfloor\] \[n_W^{[l]} = \left\lfloor \frac{n_W^{[l-1]} + 2p^{[l]} - f^{[l]}}{s^{[l]}} + 1 \right\rfloor\]

通道数计算:

\[n_c^{[l]} = n_c^{[l]}\]

即:输出通道数 = 当前层使用的过滤器数量

🔍 注:每个过滤器产生一个独立的特征图,因此输出通道数等于过滤器总数。


✅ 四、过滤器(Filter)与参数数量

过滤器维度

对于输入为 $n_H^{[l-1]} \times n_W^{[l-1]} \times n_c^{[l-1]}$ 的数据,要实现有效卷积,过滤器必须满足:

\[f^{[l]} \times f^{[l]} \times n_c^{[l-1]}\]
  • 前两个维度表示空间大小(如 3×3)
  • 最后一个维度匹配输入通道数(如 RGB 图像为 3)

参数数量计算

每个过滤器有:

\[f^{[l]} \cdot f^{[l]} \cdot n_c^{[l-1]} + 1 \quad \text{(包含一个偏差)}\]

若共有 $n_c^{[l]}$ 个过滤器,则总参数数为:

\[\boxed{ \text{Total Parameters} = (f^{[l]})^2 \cdot n_c^{[l-1]} \cdot n_c^{[l]} + n_c^{[l]} }\]

🔍 示例:
若输入为 $6\times6\times3$,使用 $3\times3\times3$ 的过滤器,共 10 个过滤器,则:

\[\text{参数数} = (3^2) \cdot 3 \cdot 10 + 10 = 9 \cdot 3 \cdot 10 + 10 = 270 + 10 = \boxed{280}\]

重要特性:无论输入图像多大(如 1000×1000),只要过滤器不变,参数数量固定!这体现了 CNN 的参数共享优势,有助于避免过拟合。


✅ 五、Padding 类型说明

类型描述公式
valid 卷积不使用 padding,即 $p = 0$输出比输入小
same 卷积使用 padding 使输出尺寸与输入相同设置 $p = \frac{f - 1}{2}$,需 $f$ 为奇数

例如:$f=3$ 时,取 $p=1$,则:

\[n_H^{[l]} = \left\lfloor \frac{n_H^{[l-1]} + 2 \cdot 1 - 3}{1} + 1 \right\rfloor = n_H^{[l-1]}\]

✅ 六、前向传播步骤详解(以示例为例)

输入:

\[a^{[l-1]} \in \mathbb{R}^{6 \times 6 \times 3}\]

使用两个过滤器:

  • 每个过滤器大小:$3 \times 3 \times 3$
  • 分别进行卷积运算
  • 得到两个 $4 \times 4$ 的矩阵(因步幅 $s=1$, $p=0$)

计算输出高度:

\[n_H^{[l]} = \left\lfloor \frac{6 + 0 - 3}{1} + 1 \right\rfloor = 4\]

添加偏差并激活:

对每个 $4 \times 4$ 特征图:

\[Z_i = \text{conv}(a^{[l-1]}, w_i) + b_i\] \[a_i^{[l]} = \max(0, Z_i) = \text{ReLU}(Z_i)\]

最终输出:

\[a^{[l]} \in \mathbb{R}^{4 \times 4 \times 2}\]

即:两个 $4\times4$ 的特征图堆叠而成。


✅ 七、批处理中的维度扩展

在批量训练时,若有 $m$ 个样本,则:

\[A^{[l]} \in \mathbb{R}^{m \times n_H^{[l]} \times n_W^{[l]} \times n_c^{[l]}}\]
  • 第一维:batch size
  • 后三维:空间维度 + 通道

💡 在代码中,常见形状顺序为 (batch_size, height, width, channels)(batch_size, channels, height, width),取决于框架(TensorFlow vs PyTorch)。


✅ 八、权重与偏差的存储方式

权重 $W^{[l]}$

  • 是所有过滤器的集合
  • 维度为:$f^{[l]} \times f^{[l]} \times n_c^{[l-1]} \times n_c^{[l]}$
  • 表示:$n_c^{[l]}$ 个过滤器,每个大小为 $f^{[l]} \times f^{[l]} \times n_c^{[l-1]}$

偏差 $b^{[l]}$

  • 每个过滤器对应一个标量偏差
  • 维度为:$1 \times 1 \times 1 \times n_c^{[l]}$
  • 实际上是一个长度为 $n_c^{[l]}$ 的向量,用于广播加法

✅ 九、常用标记规范对比

格式顺序示例
NCHWbatch × channel × height × widthTensorFlow 默认
NHWCbatch × height × width × channelTensorFlow 默认(也可切换)
HWCNheight × width × channel × batch较少用

⚠️ 注意:不同框架可能采用不同顺序,但保持一致性即可。本课程采用 NHWC 格式。


✅ 十、总结要点(Key Takeaways)

要点内容
🧩 卷积层结构多个过滤器 → 多个特征图 → 堆叠成新维度
📐 输出尺寸$n_H^{[l]} = \left\lfloor \frac{n_H^{[l-1]} + 2p - f}{s} + 1 \right\rfloor$
🔢 参数数量$(f^2 \cdot n_c^{[l-1]} + 1) \cdot n_c^{[l]}$
🌐 参数共享仅需少量参数即可处理任意大小图像
🔁 激活函数通常使用 ReLU,提升非线性表达能力
🔄 可堆叠性多个卷积层可串联构建深度网络

✅ 十一、练习题参考答案

问题:若某层有 10 个 $3\times3\times3$ 的过滤器,输入为 $3\times3\times3$,求该层参数总数?

解答

  • 每个过滤器参数:$3 \times 3 \times 3 = 27$
  • 加上偏差:$27 + 1 = 28$
  • 总共 10 个过滤器:$28 \times 10 = \boxed{280}$

✅ 正确!


✅ 十二、拓展思考(进阶)

  1. 为什么卷积能减少参数?

    • 参数共享:同一过滤器在整张图上滑动
    • 局部连接:只关注局部区域,而非全局全连接
  2. 如何选择过滤器大小?

    • 小尺寸(如 3×3)更灵活,适合捕捉细节
    • 大尺寸(如 5×5)可覆盖更大区域,但参数更多
  3. padding 和 stride 的影响?

    • same padding:保留空间分辨率
    • valid padding:压缩空间尺寸
    • 步幅 >1:下采样,减少计算量

✅ 十三、公式汇总(KaTeX 兼容)

1
2
3
4
5
6
7
8
9
10
11
12
% 输入输出尺寸
n_H^{[l]} = \left\lfloor \frac{n_H^{[l-1]} + 2p^{[l]} - f^{[l]}}{s^{[l]}} + 1 \right\rfloor

n_W^{[l]} = \left\lfloor \frac{n_W^{[l-1]} + 2p^{[l]} - f^{[l]}}{s^{[l]}} + 1 \right\rfloor

% 参数数量
\text{Params} = (f^{[l]})^2 \cdot n_c^{[l-1]} \cdot n_c^{[l]} + n_c^{[l]}

% 前向传播
Z^{[l]} = W^{[l]} * a^{[l-1]} + b^{[l]}

a^{[l]} = \text{ReLU}(Z^{[l]})

✅ 结语

本节课你掌握了:

  • 卷积层的核心工作流程
  • 如何计算输出尺寸和参数数量
  • 理解了 padding、stride 和 filter 的作用
  • 学会了标准符号系统及其含义

这些知识是构建深度卷积神经网络的基础。下一节我们将学习如何将多个卷积层堆叠起来,形成完整的 CNN 架构。

本文由作者按照 CC BY 4.0 进行授权