卷积神经网络 - 进一步理解反向传播

发布于:2025-03-22 ⋅ 阅读:(19) ⋅ 点赞:(0)

上一博文,我们学习了卷积神经网络的梯度和反向传播算法,本文我们来通过详细的推导和示例,结合卷积神经网络中卷积层与池化层(汇聚层)的反向传播过程,进一步加深对卷积神经网络的反向传播的理解。

建议大家对比前一博文来理解和学习,两种不同的表现形式,但是思路是相同的。

一. 损失函数关于卷积层权重 W 和偏置 b 的偏导数推导

假设第 l 层卷积层接收来自上一层的输出 A^(l−1)(尺寸为 Hin×Win×Cin),使用 F 个卷积核,每个卷积核尺寸为 k×k×Cin,偏置为 (b_f)^l(f=1,…,F),则该层的前向传播公式为:

定义该层的局部误差(或称误差项)为

所以,通常由上层传回的梯度乘以激活函数的导数,即

(1)关于权重 的偏导数

利用链式法则,损失 L 对于卷积核中某一权重的偏导数为

因此,我们就可以从前向传播的公式直接得出这一关系。简言之,因为前向传播中的运算是线性的,权重 W 与输入 a^{(l-1)} 的乘积使得对 W 求导时,输入值就直接作为乘数出现。

注意到,由前向传播公式可知,

因此,

(2)关于偏置 的偏导数

这两个公式就是卷积层参数 W 和 b 的梯度推导公式。

二. 汇聚层和卷积层误差项的推导过程

2.1 卷积层误差项的推导

在卷积层中,我们已经定义了误差项:

这一步通常由后续层传回的梯度开始(例如输出层计算得出),再乘上当前层激活函数的导数,得到每个位置、每个通道的 δ值。这些 将在反向传播过程中用于计算当前层参数的梯度,同时也会通过卷积核反向传播到上一层。

2.2 汇聚层(池化层)误差项的推导

池化层(或称汇聚层)没有可学习参数,其反向传播的目的是将输出梯度重新分配给输入。

(1)Max Pooling

假设对某个 2×2 区域,

前向最大池化得到输出 p=max⁡{a1,a2,a3,a4}。设该输出位置接收到的梯度为
反向传播时,只将 δ_p 传递给在 A 中取到最大值的那个位置,其余位置梯度为 0。即:

(2)Average Pooling

对于相同区域的平均池化,

反向传播时,梯度 δ_p 被均分到区域内每个输入:

三. 具体的反向传播例子

我们构造一个简化的例子,展示一个只有单个卷积层的 CNN 模型,假设激活函数为线性函数(即 f(z)=z,所以 f′(z)=1),损失函数为均方误差(MSE)。

3.1 问题设置

  • 输入图像:一个 3×3 灰度图像
  • 卷积核:使用一个 2×2 卷积核 W 和偏置 b:
  • 前向传播:采用 valid 卷积,输出尺寸为 2×2。

计算每个输出位置:

  • 输出 (1,1): z11=0.1⋅1+0.2⋅2+0.3⋅4+0.4⋅5+0.5=0.1+0.4+1.2+2.0+0.5=4.2.
  • 输出 (1,2): z12=0.1⋅2+0.2⋅3+0.3⋅5+0.4⋅6+0.5=0.2+0.6+1.5+2.4+0.5=5.2.
  • 输出 (2,1): z21=0.1⋅4+0.2⋅5+0.3⋅7+0.4⋅8+0.5=0.4+1.0+2.1+3.2+0.5=7.2.
  • 输出 (2,2): z22=0.1⋅5+0.2⋅6+0.3⋅8+0.4⋅9+0.5=0.5+1.2+2.4+3.6+0.5=8.2.

由于激活函数为线性,所以 a=z。

假设目标输出(标签)为 y,且损失函数为

为了简单起见,假设 y 对应每个输出位置的目标值分别为:

3.2 反向传播计算

(1)计算局部误差项 δ_{ij}

由于激活函数线性,f′(z)=1,因此

具体计算:

  • δ11=4.2−5.0=−0.8
  • δ12=5.2−6.0=−0.8
  • δ21=7.2−7.0=0.2
  • δ22=8.2−8.0=0.2

故误差矩阵为:

(2)推导卷积核 W 的梯度

根据公式:

(这里只考虑单通道,故省略通道索引)

  • 对 w1(对应核左上角,u=1,v=1):
    出现在所有输出位置对应的输入元素为:

    • 输出 (1,1):对应 X1,1=1
    • 输出 (1,2):对应 X1,2=2
    • 输出 (2,1):对应 X2,1=4
    • 输出 (2,2):对应 X2,2=5
      故:
  • 对 w2(核右上角,u=1,v=2):
    对应输入:

    • 输出 (1,1):对应 X1,2=2
    • 输出 (1,2):对应 X1,3=3
    • 输出 (2,1):对应 X2,2=5
    • 输出 (2,2):对应 X2,3=6
      故:
  • 对 w3(核左下角,u=2,v=1):
    对应输入:

    • 输出 (1,1):对应 X2,1=4
    • 输出 (1,2):对应 X2,2=5
    • 输出 (2,1):对应 X3,1=7
    • 输出 (2,2):对应 X3,2=8
      故:
  • 对 w4(核右下角,u=2,v=2):
    对应输入:

    • 输出 (1,1):对应 X2,2=5
    • 输出 (1,2):对应 X2,3=6
    • 输出 (2,1):对应 X3,2=8
    • 输出 (2,2):对应 X3,3=9
      故:

(3)推导偏置 b 的梯度

(4)参数更新(若采用梯度下降)

设学习率 η(例如 0.01),更新公式为:

假如初始 W 和 b 如前所述,上述计算得到梯度后就可以更新参数。

四. 汇聚层(池化层)的误差项推导

如前所述,池化层没有可学习参数,但需要将输出梯度“反传”到输入。以 2×2 最大池化为例:

前向传播
假设输入区域:

输出 p=max⁡{a1,a2,a3,a4}。

反向传播
若该输出处接收到梯度 δ_p,则:

  • 找到使 p 最大的那个元素。例如,若 a4 是最大值,则

对于平均池化,若

则反向传播时梯度均分:

五. 综合反向传播例子总结

在上面的例子中,我们展示了一个简单卷积层的前向传播、损失计算和反向传播推导:

  • 前向传播:根据输入 X、卷积核 W 和偏置 b 计算出预激活输出 z;
  • 损失函数:使用均方误差
  • 误差项
  • 梯度推导:利用链式法则,将每个输出位置的误差与相应输入“切片”相乘,累加后得出卷积核参数和偏置的梯度;
  • 池化层:示例中描述了最大池化和平均池化的反向传播梯度分配策略。

这种详细的推导展示了卷积神经网络中如何通过局部计算、参数共享和反向传播机制,逐层计算梯度并更新参数,使模型能够自动学习到图像的有用特征,从而完成分类、检测或其它视觉任务。

希望这个详细推导过程能帮助你深入理解卷积层和汇聚层(池化层)中误差项以及参数梯度的求导原理。

对于学习卷积神经网络的初学者,建议大家逐步深入:

  • 初期重点掌握 CNN 的基本构成(卷积层、池化层、全连接层)及反向传播机制。
  • 随着熟悉程度提升,再深入理解参数共享、局部不变性、上采样和下采样等高级概念,并尝试实现更复杂的模型(例如 U-Net、ResNet 等)。

通过理论学习与大量实践相结合,逐步理解 CNN 的工作原理和设计思想,你将能更自信地应用这些技术解决实际问题。