我把BP反传和CNN基础串起来了:从XOR到LeNet、AlexNet、ResNet ——神经网络与深度学习第2周课堂笔记
基于哈尔滨工业大学屈桢深老师 神经网络与深度学习课堂内容整理。
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 神经网络常说得很玄,但我把它拆开后其实是两件事:
-
网络结构:多层前馈网络,信息从输入层流向隐藏层,再到输出层;
-
学习算法:误差反向传播,用梯度下降更新权值和阈值。

图源: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:
-
初始化权重和阈值;
-
输入样本,做正向传播;
-
计算输出误差和损失;
-
从输出层开始计算 delta;
-
按层向前递推隐藏层 delta;
-
用
Delta w = alpha * delta * activation更新参数; -
重复直到误差小于阈值或达到最大轮数。
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 - 卷积神经网络基础》
-
授课讲师:哈尔滨工业大学 屈桢深
-
课件图片说明:文中课件内容和课堂知识点均来自课程资料;如引用课件截图,仅作课堂笔记学习记录使用,版权归原作者及相关权利人所有。
拓展资料:
-
LeCun, Y., Bottou, L., Bengio, Y., Haffner, P. Gradient-Based Learning Applied to Document Recognition, 1998. https://bottou.org/papers/lecun-98h
-
Krizhevsky, A., Sutskever, I., Hinton, G. ImageNet Classification with Deep Convolutional Neural Networks, 2012. https://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks.pdf
-
Simonyan, K., Zisserman, A. Very Deep Convolutional Networks for Large-Scale Image Recognition, 2014. https://arxiv.org/abs/1409.1556
-
He, K., Zhang, X., Ren, S., Sun, J. Deep Residual Learning for Image Recognition, 2015. https://arxiv.org/abs/1512.03385
-
PyTorch Autograd Tutorial. https://docs.pytorch.org/tutorials/beginner/basics/autogradqs_tutorial.html
-
Fashion-MNIST. https://github.com/zalandoresearch/fashion-mnist
-
Nobel Prize 1981, Hubel and Wiesel. https://www.nobelprize.org/prizes/medicine/1981/summary/
更多推荐




所有评论(0)