主题
第 4 章 前馈神经网络
第二部分 · 基础模型课件 47 页讲义约 30 分钟Feedforward Neural Networks
学习目标
- 理解人工神经元的计算方式,掌握 Logistic、Tanh、ReLU 及其变体、Swish、GELU 等激活函数的形式、导数与优缺点;
- 能写出前馈神经网络逐层的前向计算公式,理解“神经网络 = 复合函数”;
- 理解通用近似定理的含义与局限;
- 能够独立推导反向传播算法,理解误差项
的递推关系; - 理解计算图与自动微分(前向模式 / 反向模式),区分静态图与动态图;
- 了解神经网络优化的主要困难:非凸优化与梯度消失。
课件幻灯片

1 / 47
提示:点击幻灯片左右两侧或使用 ← → 键翻页,手机上左右滑动;按 F 全屏。
讲义
4.1 从生物神经元到人工神经元
20 世纪 80 年代后期流行的连接主义模型——并行分布式处理(PDP)网络有三个特点:信息表示是分布式的;知识存储在单元之间的连接上;通过逐渐改变连接强度来学习新知识。现代神经网络继承了这些思想,并借助误差反向传播获得了强大的学习能力。幻灯片 4
生物神经元通过树突接收信号、在细胞体中整合,并在兴奋时通过轴突向其他神经元发放信号。人工神经元(简称神经元)是对它的极简抽象:接收输入
再经过一个非线性函数
4.2 激活函数
激活函数决定了网络的表达能力与可训练性。一个好的激活函数应当:幻灯片 8
- 连续且(几乎处处)可导,这样才能用基于梯度的方法学习参数;
- 函数及其导数尽可能简单,以提高计算效率;
- 导数的值域处在合适的区间,太大或太小都会影响训练的稳定性和效率。
Sigmoid 型函数。Logistic 函数和 Tanh 函数都是两端饱和的 S 型曲线:幻灯片 9
它们的导数分别为
ReLU 及其变体。修正线性单元(Rectified Linear Unit)是目前最常用的激活函数:幻灯片 10
它的优点是:只需比较与赋值,计算高效;具有生物学上的单侧抑制、宽兴奋边界特性;在
- 带泄露的 ReLU(Leaky ReLU):
, 为很小的常数(如 0.01);若 作为可学习参数,则称为 PReLU; - ELU:
时为 , 时为 ,近似零中心化; - Softplus:
,可视为 ReLU 的平滑版本,其导数恰为 Logistic 函数。
Swish 函数是一种自门控(self-gated)激活函数:幻灯片 11
GELU(高斯误差线性单元)与 Swish 类似,用高斯分布的累积分布函数作为门控:幻灯片 12
实际中常用近似
下面的交互图可以直观比较这些函数和它们的导数(勾选“显示导数”):
4.3 网络结构
单个神经元能力有限,神经网络由大量神经元按一定的拓扑结构连接而成。设计一个神经网络需要考虑三方面:神经元的激活规则、网络的拓扑结构、学习算法。幻灯片 14 常见的拓扑有三类:幻灯片 15
- 前馈网络:各神经元按层排列,信息单向传播,可以用有向无环图表示,如全连接前馈网络、卷积网络;
- 记忆网络(反馈网络):神经元可以接收自己的历史信息,具有记忆能力,如循环神经网络、Hopfield 网络;
- 图网络:定义在图结构数据上,每个节点由一个或一组神经元构成,是前两者的推广。
4.4 前馈神经网络
前馈神经网络(Feedforward Neural Network, FNN),也常被称为多层感知器(MLP),其中:各神经元分属不同的层,层内无连接;相邻两层的神经元两两全连接;整个网络无反馈。幻灯片 17
记号约定:
令
于是整个网络可以写成一个复合函数
flowchart LR
X["输入 x = a⁽⁰⁾"] --> Z1["z⁽¹⁾ = W⁽¹⁾a⁽⁰⁾ + b⁽¹⁾"] --> A1["a⁽¹⁾ = f₁(z⁽¹⁾)"] --> D["⋯"] --> ZL["z⁽ᴸ⁾"] --> AL["ŷ = a⁽ᴸ⁾"] --> Loss["损失 𝓛(y, ŷ)"]
通用近似定理。设
满足
也就是说,只要隐藏层神经元足够多,一个带“挤压”型激活函数的两层网络就能以任意精度逼近有界闭集上的连续函数;该结论对 ReLU 等激活函数同样成立。但定理只保证“存在”,并没有告诉我们需要多少神经元、能否通过学习找到这组参数,以及能否泛化——这正是后续章节要解决的问题。
作为分类器。把神经网络看作特征变换
下面的“训练场”在浏览器里实时训练一个前馈神经网络。增删隐藏层、改变激活函数,观察网络能拟合的分类边界:
在单独页面中打开:前馈网络训练场
4.5 参数学习
给定训练集
其中
问题归结为:如何高效地计算损失对每一层参数的梯度? 神经网络是一个复杂的复合函数,逐个参数用链式法则求导会有大量重复计算。两种高效方案是专为前馈网络设计的反向传播算法,以及更通用的自动微分。幻灯片 27
4.6 反向传播算法
矩阵微积分。本书采用分母布局:标量
以单个样本的损失
第一个因子很好算:
误差项反映了第
这就是误差的反向传播:第
对于 Softmax 输出 + 交叉熵损失,最后一层的误差项有非常简洁的形式
算法 4.1 使用反向传播的随机梯度下降
输入:训练集
- 随机初始化
; - 重复:对训练集随机排序;对每个样本
:- 前向计算每一层的净输入
和激活值 ,直到最后一层; - 反向传播计算每一层的误差项
(从 到 ); - 计算梯度
、 ; - 更新参数
, ;
- 前向计算每一层的净输入
- 直到模型在验证集上的错误率不再下降。
逐步执行一个 2-2-1 网络的前向传播与反向传播,所有数值都是实时计算的,可以和上面的公式一一对照:
在单独页面中打开:反向传播逐步演示
4.7 计算图与自动微分
自动微分(Automatic Differentiation, AD)把复合函数分解为一系列基本运算(加、乘、指数、对数等),构成计算图,再沿图应用链式法则自动求梯度。幻灯片 34 以
| 中间变量 | 函数 | 局部导数 |
|---|---|---|
| 乘法 | ||
| 加法 | ||
| 取负 | ||
| 指数 | ||
| 加法 | ||
| 倒数 |
当
若函数与参数之间有多条路径,把各条路径上的导数相加即可。幻灯片 36 按计算导数的顺序,自动微分分为两种模式:
- 前向模式:沿计算图从输入到输出,计算每个中间变量对某个输入的导数;对
,需要 遍前向计算; - 反向模式:沿计算图从输出到输入,计算输出对每个中间变量的导数;需要
遍反向计算。
神经网络的损失是标量(
静态图与动态图。静态计算图(Theano、早期 TensorFlow)在编译时构建,运行时不能改变,便于优化和并行,但灵活性差;动态计算图(PyTorch、Chainer、DyNet)在程序运行时动态构建,便于调试和处理可变结构的输入,但优化难度较大。幻灯片 38 现代框架(如 PyTorch 2.x 的 torch.compile、JAX 的 jit)则试图兼顾两者。
有了自动微分,“深度学习三步走”变得非常简单:定义网络 → 定义损失 → 选择优化器并训练。幻灯片 41
4.8 优化问题
神经网络的参数学习比线性模型困难得多:幻灯片 43
- 非凸优化:即使是一个只有一个隐藏层的简单网络,损失函数关于参数也是非凸的,存在大量局部极值点和鞍点;幻灯片 44
- 梯度消失:误差项反向传播时每经过一层都要乘以
。Sigmoid 型函数的导数 、 ,在饱和区更是接近 0,误差经过多层传递后会不断衰减,底层参数几乎得不到更新,这就是梯度消失问题。幻灯片 45 缓解方法包括使用 ReLU 等导数较大的激活函数、更好的参数初始化、归一化与残差连接(见第 5、7 章)。
此外还有参数多、需要大量数据和计算资源、可解释性差等问题。第 7 章将系统介绍网络优化与正则化的方法。
本章小结
- 人工神经元 = 线性加权求和 + 非线性激活;激活函数需可导、简单、导数范围合适。ReLU 是默认选择,Transformer 中常用 GELU / Swish。
- 前馈网络逐层计算
, ,整体是一个复合函数。 - 通用近似定理说明了网络的表达能力,但不保证可学习与可泛化。
- 反向传播的核心是误差项递推
,梯度为 。 - 自动微分在计算图上自动求导,反向模式适合“参数多、输出为标量”的神经网络训练。
- 主要优化困难:非凸、梯度消失。
思考题与习题
- (推导) 证明
、 ,以及 。 - (概念) 如果把一个前馈网络所有隐藏层的激活函数都换成恒等函数
,网络的表达能力会发生什么变化?为什么? - (推导) 设输出层
,损失 ( 为 one-hot 向量),证明 。 - (计算) 一个 784–256–128–10 的全连接网络(含偏置)共有多少个参数?若输入改为 3×224×224 的彩色图像,第一层参数量会变成多少?这说明了全连接网络的什么问题?
- (计算图) 对 4.7 节的函数
,取 ,用反向模式分别计算 与 ,并用数值差分验证。 - (分析) 解释为什么 ReLU 能缓解梯度消失,什么情况下会出现“死亡 ReLU”?列举两种缓解办法。
- (编程) 只用 NumPy 实现一个两层前馈网络(含前向、反向传播与 SGD),在 XOR 数据或
的拟合任务上训练,并用自动微分框架(如 PyTorch)的梯度对照检查你的实现。
部分提示
- 第 2 题:多个线性变换的复合仍是线性变换,整个网络退化为线性模型。
- 第 3 题:先求
,再利用 。 - 第 4 题:
;第一层若输入 维,仅第一层就约有 个参数。 - 第 5 题:
,代入得 。
延伸阅读
- 教材:邱锡鹏《神经网络与深度学习》第 4 章「前馈神经网络」及附录 B「数学基础」中的矩阵微积分。
- 实践:nndl-practice 第 4 章(前馈神经网络,PyTorch 实现)。
- 交互:激活函数可视化;前馈网络训练场;反向传播逐步演示;TensorFlow Playground(playground.tensorflow.org)可直观观察隐藏层与激活函数的作用。
- 第二版对应章节:第 4 章「前馈神经网络」。