基于哈尔滨工业大学屈桢深老师 神经网络与深度学习课堂内容整理。

5.13:《3 - BP网络》《配套材料3-1:误差反传算法》

5.15:《4 - 卷积神经网络基础》

这篇笔记的目标是:BP 解决“网络怎么学”,CNN 解决“图像特征怎么更高效地表达”。

0. BP和CNN的联系

刚开始学神经网络时,我很容易把知识点背成碎片:

  • 多层感知机能解决 XOR;

  • BP 算法靠反向传播更新权值;

  • CNN 有卷积、池化、全连接;

  • LeNet、AlexNet、VGG、ResNet 都是经典网络。

但这些点如果不连起来,复习时会有一个问题:知道名词,却说不清它们为什么按这个顺序出现。

我现在的理解是:

问题 传统做法的瓶颈 神经网络里的解决方式
XOR 这种非线性问题怎么分类? 单层线性分类器不够 加隐藏层,引入非线性
多层网络参数很多,怎么训练? 手工调权值不可行 BP 用链式法则算梯度
图像输入太大,全连接参数爆炸怎么办? 连接数过多、慢、易过拟合 CNN 用局部连接和权值共享
网络变深后不好训练怎么办? 梯度消失、退化问题

ResNet 用残差连接

1. 从XOR到BP网络

1.1 XOR问题真正卡在哪里

XOR 的输入输出很简单:

x1 x2 y
0 0 0
0 1 1
1 0 1
1 1 0

我复习时发现,XOR 最关键不是表格,而是它告诉我们:单条直线没法把两类点分开。

单层感知机本质上做的是:

y = f(w1*x1 + w2*x2 - theta)

这就是一个线性分割。线性不可分的问题,用单层感知机硬做,结构上就不够。

多层感知机的思路是:先用隐藏层构造中间特征,再由输出层组合这些特征。换句话说,隐藏层不是“多加几个节点”这么简单,而是在帮我们把原始空间重新表达。

我的记忆方式:

  • 单层感知机:只能切一刀;

  • 三层感知机:隐藏层先切出多个局部区域,输出层再组合;

  • 更多层网络:逐层组合更抽象的特征。

这也解释了课件中的两个重要结论:

  • 三层阈值节点网络在隐藏层节点足够时,可以实现任意二值逻辑函数;

  • 三层 S 型非线性节点网络在一定条件下,可以逼近连续函数。

这不是说“三层一定最好”,而是说明多层非线性网络有足够强的表达能力。

1.2 BP网络:多层前馈网络 + 梯度下降

BP 神经网络常说得很玄,但我把它拆开后其实是两件事:

  1. 网络结构:多层前馈网络,信息从输入层流向隐藏层,再到输出层;

  2. 学习算法:误差反向传播,用梯度下降更新权值和阈值。

图源:5.13 课堂《3 - BP网络》,授课讲师:哈尔滨工业大学 屈桢深。仅作课堂笔记引用。

正向传播做预测:

z[l] = W[l] a[l-1]
a[l] = f(z[l])

输出层得到预测值:

y_hat = a[L]

如果预测值和标签差距大,就定义损失。课堂材料里常用平方误差:

J = 1/2 || y - y_hat ||^2

然后问题变成:每个权重该往哪个方向调,才能让 J 变小?

BP 的答案是:

Delta w = -alpha * dJ/dw

这里 alpha 是学习率。我的理解是,BP 不是“反向传数据”,而是反向传损失对各层参数的影响程度

1.3 误差项delta:BP推导里最值得抓住的变量

BP 推导公式很多,容易越看越乱。我认为最值得抓住的是误差项 delta。

输出层误差项可以理解为:

delta[L] = f'(z[L]) * e

其中:

e = y - y_hat

隐藏层误差项来自后一层误差的加权求和:

delta[l]_i = (sum_j w[l+1]_{ji} * delta[l+1]_j) * f'(z[l]_i)

权重更新则是:

Delta w[l]_{ij} = alpha * delta[l]_i * a[l-1]_j

我复习时把这三句当成 BP 的骨架:

图源:5.13 课堂《配套材料3-1:误差反传算法》,授课讲师:哈尔滨工业大学 屈桢深。仅作课堂笔记引用。

步骤 公式直觉 含义
输出层误差 预测错多少 × 激活函数斜率 输出层先知道自己错在哪
隐藏层误差 后一层误差按连接权重分摊 隐藏层通过后一层间接背锅
权值更新 当前层误差 × 上一层输出 哪个输入激活更强,对权重影响更大

最容易混淆的是符号方向。课堂材料里写成 Delta w = alpha * delta * a,是因为 delta 的定义已经吸收了误差方向;如果从 -alpha * dJ/dw 出发,也能得到一致结果。

1.4 BP算法的完整流程

我会按下面顺序复习 BP:

  1. 初始化权重和阈值;

  2. 输入样本,做正向传播;

  3. 计算输出误差和损失;

  4. 从输出层开始计算 delta;

  5. 按层向前递推隐藏层 delta;

  6. Delta w = alpha * delta * activation 更新参数;

  7. 重复直到误差小于阈值或达到最大轮数。

BP 的优点很直接:

  • 学习过程自动化,不需要手工设计每个权重;

  • 多层非线性网络可以逼近复杂函数;

  • 对 MLP、CNN、RNN 等结构都有基础意义。

缺点也要记住:

  • 梯度下降不保证全局最优;

  • 收敛速度受学习率影响很大;

  • 网络层数、节点数、激活函数都需要设计;

  • 深层网络可能遇到梯度消失或梯度爆炸。

我的经验是:BP 不要只背“正向传播、反向传播”八个字,要能说出为什么误差可以按链式法则逐层拆回去

2. 为什么CNN适合图像

2.1 全连接网络处理图像的问题

课件里举了一个很典型的例子:如果输入是 1000 × 1000 图像,隐藏层有 1M 个节点,那么输入到隐藏层之间会有 10^12 量级的参数。

这说明全连接网络处理图像会遇到三个问题:

  • 参数太多,训练慢;

  • 数据不够时容易过拟合;

  • 图像的局部空间结构没有被充分利用。

CNN 的核心就是针对这些问题设计的:

CNN机制 解决什么问题 我的理解
局部连接 减少连接数 一个局部区域先学局部模式
权值共享 减少参数数 同一个卷积核在整张图上复用
池化/下采样 降低特征尺寸 保留主要响应,减少冗余
多层堆叠 提取层级特征 边缘 → 纹理 → 部件 → 语义

2.2 卷积、步长、填充、多通道

卷积层做的事可以写成:

z[l](x,y) = sum_u sum_v a[l-1](x+u, y+v) * w[l](u,v)
a[l](x,y) = f(z[l](x,y))

我复习时把卷积核理解为一个“局部模式探测器”。比如某个卷积核可能对竖边缘敏感,另一个可能对斜边缘敏感。它在整张图上滑动,哪里像这个模式,哪里响应就大。

几个概念要分开:

  • Padding:在边界补值,常见是补 0,用来控制输出尺寸;

  • Stride:卷积核每次移动几格,步长越大,输出越小;

  • 多通道卷积:RGB 图像有 3 个输入通道,卷积核也要覆盖所有输入通道;

  • Feature map:一个卷积核产生一个输出特征图,多个卷积核产生多个通道。

这里最容易混淆的是“卷积”和“互相关”。严格数学卷积需要把卷积核上下左右翻转;很多深度学习框架实现的是互相关,但因为卷积核本身是要学习的,是否翻转不影响模型表达能力。课件里也提醒了这一点。

2.3 池化层为什么没有可学习参数

池化层的思想是使用局部统计特征:

  • 最大池化:取窗口内最大响应;

  • 平均池化:取窗口内平均响应。

它没有像卷积核那样的可学习权重,所以反向传播时不更新参数,只负责把误差传回去。

平均池化反传时,误差平均分给窗口内位置。比如 2×2 平均池化,每个位置分到 1/4

最大池化反传时,误差只传给前向传播时取到最大值的位置,其他位置为 0。

我的理解是:

卷积层:负责学习“看什么”
池化层:负责压缩“保留什么”

2.4 CNN里的BP和普通BP有什么关系

CNN 仍然用 BP,只是参数结构变了。

图源:5.15 课堂《4 - 卷积神经网络基础》,授课讲师:哈尔滨工业大学 屈桢深。仅作课堂笔记引用。

普通全连接层里,每条边有自己的权重;CNN 里,同一个卷积核参数会在很多空间位置复用。因此卷积核的梯度要把所有位置上的贡献累加起来。

我会这样记:

  • 全连接层更新一条边;

  • 卷积层更新一个共享卷积核;

  • 池化层不更新参数,只传误差;

  • 最后全连接分类部分仍按普通 BP 更新。

所以 CNN 没有推翻 BP,而是把 BP 应用到更适合图像的参数共享结构上。

3. LeNet-5:CNN的经典起点

LeNet-5 是课堂里讲的第一个经典 CNN。它的价值不只是“老网络”,而是它已经把 CNN 的基本范式搭起来了:

Input -> Conv -> Pool -> Conv -> Pool -> FC -> FC -> Output

图源:5.15 课堂《4 - 卷积神经网络基础》,授课讲师:哈尔滨工业大学 屈桢深。仅作课堂笔记引用。

课件里强调了几个点:

  • C1 层:6 个 feature map,每个神经元做 5×5 卷积;

  • S2 层:池化层,原始论文使用平均池化;

  • C5 层:120 个神经元,和 S4 全连接式连接;

  • F6 层:84 个神经元;

  • 输出层:原始 LeNet-5 使用 RBF 单元,现代分类更常见 Softmax。

我复习 LeNet-5 时会抓住一句话:宽高逐渐下降,通道数逐渐上升,最后由全连接层完成分类。

这条规律后来在很多 CNN 中都能看到。

4. 从AlexNet、VGG到ResNet:经典网络到底在改什么

很多同学背经典网络时容易背成:

  • AlexNet 2012;

  • VGG 用 3×3;

  • ResNet 有残差。

但这样记很散。我更愿意按“它解决了什么问题”来记。

4.1 AlexNet:把CNN推向大规模视觉识别

AlexNet 的关键改进包括:

  • 使用 ReLU 替代 sigmoid/tanh,加速训练;

  • 使用 Dropout 缓解过拟合;

  • 使用数据增强,如随机裁剪、水平翻转、光照扰动;

  • 使用最大池化;

  • 网络规模比 LeNet 大很多,参数接近 6000 万。

我认为 AlexNet 的意义在于,它证明了 CNN 可以在大规模图像识别任务上取得突破,不再只是手写数字识别这类小任务。

4.2 VGG-16:用规整结构堆深度

VGG-16 的特点是结构非常规整:

  • 多次使用 3×3 小卷积核;

  • 使用 2×2 最大池化;

  • 网络更深,参数约 1.38 亿;

  • 高和宽逐步减小,通道数逐步增多。

我复习 VGG 时会记住:它让 CNN 结构变得很工程化、模块化。

用多个小卷积核叠加,可以增加非线性表达,同时保持感受野扩大。比如两个 3×3 卷积叠加,感受野接近一个 5×5 卷积,但参数更少,还多了一次激活函数。

4.3 ResNet:深层网络为什么还能训练

深层网络不是简单“层数越多越好”。当网络很深时,可能出现:

  • 梯度消失;

  • 训练误差不降反升;

  • 深层网络退化,表现不如浅层。

ResNet 的核心是残差连接:

y = F(x) + x

普通网络希望直接学习目标映射 H(x);残差网络让模块学习:

F(x) = H(x) - x

然后输出:

H(x) = F(x) + x

我的理解是:如果某些层暂时学不到有用变换,至少可以通过捷径连接接近恒等映射,训练不会因为“越深越难优化”而快速崩掉。

ResNet 不是让梯度消失问题完全不存在,而是给信息和梯度提供了更直接的通路,让极深网络更容易训练。

5. 理解与总结

这两次课其实在讲同一件事的两个层面:

主题 回答的问题 核心机制
多层感知机 非线性问题怎么表达? 隐藏层 + 激活函数
BP算法 多层参数怎么学习? 链式法则 + 梯度下降
CNN 图像特征怎么高效表达? 局部连接 + 权值共享
经典CNN 网络怎么更强更深? ReLU、Dropout、小卷积核、残差连接

一句话总结:

BP 解决“怎么学”,CNN 解决“图像里学什么结构更合适”,经典网络演进解决“怎么让模型更深、更强、更能训练”。

6. 参考与来源

课堂内容来源:

  • 5.13 神经网络与深度学习课堂:《3 - BP网络》《配套材料3-1:误差反传算法》

  • 5.15 神经网络与深度学习课堂:《4 - 卷积神经网络基础》

  • 授课讲师:哈尔滨工业大学 屈桢深

  • 课件图片说明:文中课件内容和课堂知识点均来自课程资料;如引用课件截图,仅作课堂笔记学习记录使用,版权归原作者及相关权利人所有。

拓展资料:

Logo

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

更多推荐