第三章:BP网络

一、 引入:从线性不可分到多层感知机

1. XOR问题与线性不可分

早期的单层感知机无法解决 异或(XOR)问题,即当输入为 (0,0)\rightarrow 0, (1,0)\rightarrow 1, (0,1)\rightarrow 1, (1,1)\rightarrow 0 时,无法在二维空间中找到一条直线将两类样本完美分开。这被称为线性不可分问题(由 Minsky 于 1969 年提出)。

2. 解决方案:多层感知机(MLP)

为了解决线性不可分问题,在输入层和输出层之间引入了一层或多层隐含层(Hidden Layer),构成了多层前馈神经网络。

  • 几何直观: 隐层节点可以看作是对特征空间的非线性变换,三层感知器可以识别任意凸多边形或无界的凸区域。

  • 两大核心定理:

    1. 二值逻辑定理: 若隐层节点可任意设置,三层阈值节点网络可实现任意二值逻辑函数。

    2. 万能逼近定理(Universal Approximation Theorem): 若隐层节点可任意设置,使用三层 S 型(Sigmoid)非线性特性的网络,可以一致逼近紧集上的连续函数。

二、 BP神经网络的核心思想

BP(Backpropagation,误差反向传播)算法是一种有导师学习(Supervised Learning)算法,本质是梯度下降法(Gradient Descent)在多层前馈网络中的应用。

BP算法的运行包含两个主要阶段:

  1. 正向传播(Forward Propagation): 输入信号从输入层经过隐层,逐层计算并传向输出层。如果输出层得到了期望的输出,则学习结束;否则,计算误差并进入反向传播阶段。

  2. 反向传播(Backward Propagation): 将网络输出与真实标签之间的误差,按原连接通路反向计算,利用梯度下降法逐层调整各层节点的权值和阈值,使总体误差最小化。

三、 BP算法的数学推导详解

假设网络共有 $L$ 层(输入层为第 0 层,输出层为第 $L$ 层)。以使用 Sigmoid 激活函数 $a^{[l]} = \sigma(z^{[l]})$ 为例。

1. 目标函数(损失函数)

对于输入样本 $(x^{(i)}, y^{(i)})$,网络训练的目标是使均方误差最小化:

$J(w) = \frac{1}{2} \sum_i (y_i - a_i)^2 = \frac{1}{2} \sum_i e_i^2$

其中,$e_i = y_i - a_i$为第 $i$ 个输出节点的误差。权值更新的规则为:$\Delta w = -\alpha \frac{\partial J}{\partial w}$ ($\alpha$ 为学习率)。

2. 输出层权值调整(误差反传)

根据链式求导法则,输出层权值$w_{ij}^{[2]}$ 的梯度为:

$\frac{\partial J}{\partial w_{ij}^{[2]}} = \frac{\partial J}{\partial e_i} \cdot \frac{\partial e_i}{\partial a_i} \cdot \frac{\partial a_i}{\partial z_i} \cdot \frac{\partial z_i}{\partial w_{ij}^{[2]}}$

结合 Sigmoid 函数的导数性质 $\sigma'(z) = a(1-a)$,计算可得:

$\frac{\partial J}{\partial w_{ij}^{[2]}} = -e_i \cdot a_i(1-a_i) \cdot a_j^{[1]}$

定义输出层的局部梯度(误差项)为 $\delta_i^{[2]} = a_i(1-a_i)e_i$,则输出层的权值更新公式为:

$\Delta w_{ij}^{[2]} = \alpha \cdot \delta_i^{[2]} \cdot a_j^{[1]}$

3. 隐含层权值调整

隐含层的误差无法直接计算,需要通过输出层的误差反向传递得到:

$\frac{\partial J}{\partial w_{ij}^{[1]}} = \left[ \sum_{k} \frac{\partial J}{\partial e_k} \frac{\partial e_k}{\partial y_k} \frac{\partial y_k}{\partial a_i^{[1]}} \right] \frac{\partial a_i^{[1]}}{\partial w_{ij}^{[1]}}$

定义隐含层的局部梯度为 $\delta_i^{[1]}$

$\delta_i^{[1]} = \left[ \sum_{j=1}^{m} w_{ji}^{[2]} \delta_j^{[2]} \right] a_i^{[1]}(1-a_i^{[1]})$

隐含层的权值更新公式为:

$\Delta w_{ij}^{[1]} = \alpha \cdot \delta_i^{[1]} \cdot x_j$

4. 算法流程总结
  1. 初始化: 赋予各层权值 $w$ 较小的非零随机值。

  2. 前向传播: 计算各层线性输出 $z$ 和激活输出 $a$

  3. 计算误差项 $\delta$

    • 若是输出层:$\delta_i^{[L]} = a_i(1-a_i)e_i$

    • 若是隐含层:$\delta_l^{[l]} = \left[ \sum w_{jl}^{[l+1]} \delta_j^{[l+1]} \right] a_l^{[l]}(1-a_l^{[l]})$

  4. 更新权值: $\Delta w_{ij}^{[l]} = \alpha \cdot \delta_i^{[l]} \cdot a_j^{[l-1]}$

  5. 不断迭代,直到误差 $J$ 小于预设阈值。

四、 算法评述(优缺点分析)

优点:

  1. 学习完全自主: 能够通过数据驱动自动提取特征并调整参数。

  2. 强大的表达能力: 理论上可以逼近任意的非线性连续函数。

缺点与挑战:

  1. 非全局收敛: 目标函数通常是非凸的,容易陷入局部极小值(Local Minima)。

  2. 收敛速度慢: 尤其是在网络较深或平坦区域,梯度消失会导致训练缓慢。

  3. 超参数选择困难: 学习率 $\alpha$ 过大导致震荡,过小导致收敛极慢。

  4. 网络结构设计依赖经验: 隐藏层的层数、每层节点数的选择缺乏严格的理论指导,通常需要“试错”。

五、 实践应用:多分类与 Fashion-MNIST

在课程的实践环节,我们引入了 Fashion-MNIST 数据集。这是一个包含 10 个类别(如 T恤、裤子、运动鞋等)、共 7 万张 $28 \times 28$ 灰度图像的数据集。 相比于简单的手写数字 MNIST 数据集,Fashion-MNIST 具有更高的复杂度,非常适合用来验证我们搭建的多层感知机及反向传播算法的分类性能和泛化能力。

第四章:卷积神经网络基础

一、 为什么要进行“深度学习”与卷积操作

1. 全连接网络面临的困境

在处理图像等高维数据时,传统全连接神经网络存在致命缺陷:

  • 参数量爆炸(难算、难收敛): 以一张 $1000 \times 1000$ 的图像为例,若隐含层有 1M 个节点,则仅输入到隐含层之间的连接权值就高达 $1 \times 10^{12}$ 数量级。

  • 容易过拟合: 权值过多会导致模型死记硬背训练数据,泛化能力差。

  • 忽略了空间局部性: 图像像素之间存在强烈的局部相关性,全连接将其展平处理,破坏了这种空间结构。

2. 解决方案:局部连接与特征提取

受神经生理学(Hubel 和 Wiesel 关于动物视觉感知的研究)启发,人类视觉是分层、局部提取特征的。

  • 局部连接网络: 每一个节点只与上一层中少数的相邻神经元连接(即卷积感受野),大幅减少参数。

  • 信息分层处理: 底层提取边缘、角点等基础特征,高层基于底层特征组合出更高级的语义特征。

二、 卷积神经网络(CNN)基本概念

卷积神经网络是解决图像任务(如分类、目标检测、语义分割等)的核心架构。其主要由卷积层(Convolution)池化层(Pooling / Subsampling)交替构成,最后连接全连接层。

1. 卷积操作(Convolution)

卷积层是 CNN 的核心提取器,通过滑动窗口(卷积核/滤波器)与图像进行局部加权求和。

  • 填充(Padding): 在矩阵边界填充值(通常为0),以控制输出特征图的大小,防止边缘信息丢失。

  • 步长(Stride): 卷积核每次滑动的像素距离。步长越大,输出特征图的尺寸越小。

  • 多通道卷积: 对于多通道输入(如 RGB 三通道),卷积核也会有对应的深度(如 $3 \times 3 \times 3$)。各个通道卷积求和后,再加上偏置(Bias),得到单通道输出。如果有 $K$ 个不同的卷积核,则输出 $K$ 个通道(Feature Maps)。

2. 池化操作(Pooling)

池化层用于降采样,其思想是提取局部统计特征。

  • 作用: 减少特征维度,降低计算量,同时赋予网络一定程度的平移不变性。

  • 常见方式: 平均池化(Average Pooling,如LeNet所用)和最大池化(Max Pooling,现代网络常用)。

3. CNN 的误差反向传播(BP)简介

CNN 的 BP 算法需要考虑特殊的网络结构:

  • 池化层反传: 平均池化会将误差均摊给前一层的感受野;最大池化则将误差直接传递给前一层局部区域中最大值所在的位置。

  • 卷积层反传: 误差传递需要将后一层的误差矩阵与旋转 180 度的卷积核进行互相关计算(即离散卷积)。

三、 经典网络剖析:LeNet-5

LeNet-5 由 Yann LeCun 等人于 1998 年提出,是卷积神经网络的开山之作,最初被成功应用于支票手写数字(OCR)的识别。

1. LeNet-5 网络结构解析

网络整体呈现出 “卷积 $\rightarrow$ 池化 $\rightarrow$ 卷积 $\rightarrow$ 池化 $\rightarrow$ 全连接 $\rightarrow$ 全连接 $\rightarrow$ 输出” 的架构,总参数量约 6 万。

  • INPUT(输入层): $32 \times 32$ 大小的单通道图像。

  • C1(卷积层): 6 个 $5 \times 5$ 的卷积核(无填充,步长为1),输出 6 个 $28 \times 28$ 的特征图。

    • 连接数示例: 每个神经元有 $5 \times 5 + 1 = 26$ 个参数。总连接数为 $(5 \times 5 + 1) \times 6 \times (28 \times 28) = 122,304$

  • S2(下采样层/池化层): $2 \times 2$ 平均池化,步长为 2。输出 6 个 $14 \times 14$ 的特征图。

  • C3(卷积层): 16 个 $5 \times 5$ 卷积核,输出 16 个 $10 \times 10$ 特征图(部分连接以打破对称性)。

  • S4(下采样层): $2 \times 2$ 平均池化,输出 16 个 $5 \times 5$ 的特征图。

  • C5(卷积层/全连接层): 120 个 $5 \times 5$ 卷积核。因为输入刚好是 $5 \times 5$,所以实际上演变成了全连接,输出 120 维向量。

  • F6(全连接层): 84 个神经元。

  • OUTPUT(输出层): 10 个欧式径向基函数(RBF)单元,代表 0-9 十个数字类别。

2. LeNet-5 的时代特征与普遍规律
  • 历史特征:

    • 卷积时不进行填充(No Padding),导致特征图逐层缩小。

    • 池化层选用平均池化(Average Pooling)而非最大池化。

    • 激活函数选用 Sigmoid 或 Tanh,而非现代网络标配的 ReLU。

  • 普遍规律(一直沿用至今):

    • 随着网络深度的增加,特征图的空间尺寸(宽、高)不断衰减

    • 随着网络深度的增加,特征图的通道数(Channels/Feature Maps)不断增加,以提取更丰富的深层语义信息。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐