Chapter 7 神经网络
一、从生物神经元到数学模型
疾旋鼬观察到:人脑由约 860 亿个神经元组成,每个神经元接收来自其他神经元的信号,当信号总和超过某个阈值时,就会"激活"并向下游发送信号。
1943 年,McCulloch 和 Pitts 提出了 M-P 神经元模型:
其中 \(x_1, \ldots, x_d\) 是输入信号,\(w_1, \ldots, w_d\) 是连接权重,\(\theta\) 是阈值,\(f\) 是激活函数。
神经网络学得的知识蕴含在连接权与阈值中。
激活函数
要求:连续并可导(允许少数点不可导)的非线性函数;导函数值域在合适区间内;单调递增。
激活函数为模型引入非线性,大大增强了模型的表达能力 (Expressivity)。没有激活函数,多层网络等价于单层线性变换。
| 激活函数 | 公式 | 导数 | 特点 |
|---|---|---|---|
| Sigmoid | \(\sigma(z) = \frac{1}{1+e^{-z}}\) | \(\sigma(z)(1-\sigma(z))\) | 输出 \((0,1)\),可能梯度消失 |
| Tanh | \(\tanh(z)\) | \(1 - \tanh^2(z)\) | 输出 \((-1,1)\),关于原点对称 |
| ReLU | \(\max(0, z)\) | \(\mathbb{I}(z > 0)\) | 缓解梯度消失,深度学习首选 |
Sigmoid 导数推导:
ReLU 的优势: - 计算简单,求导容易 - 正区间梯度恒为 1,缓解梯度消失 - 产生稀疏激活(部分神经元输出为 0)
二、多层前馈网络 (MLP)
结构
- 输入层:\(x \in \mathbb{R}^d\)
- 隐层:\(q\) 个神经元,\(h = f(W_1 x + b_1)\)
- 输出层:\(l\) 个神经元,\(\hat{y} = f(W_2 h + b_2)\)
前馈网络:各神经元属于不同层,层内无连接,相邻层全部两两连接,信号从输入层向输出层单向传播。
FNN 是非线性函数的复合函数:
其中 \(a^{(\ell)}\) 是第 \(\ell\) 层的输出(激活值)。
万有逼近定理
定理 [Hornik et al., 1989]:仅需一个包含足够多神经元的隐层,多层前馈网络就能以任意精度逼近任意复杂度的连续函数。
这意味着神经网络有强大的表示能力。但"如何设置隐层神经元数"仍是未决问题,实践中常用试错法。
XOR 问题
单层感知机无法解决 XOR(异或)问题 [Minsky & Papert, 1969]。但加入一个隐层即可:
激活函数用 ReLU。第一层将数据从原始空间映射到新特征空间,在新空间中线性可分。
三、BP 算法完整推导
网络设定
- 输入:\(d\) 维特征向量
- 隐层:\(q\) 个神经元
- 输出:\(l\) 个神经元
- 激活函数:Sigmoid
- 隐层→输出层权重:\(w_{hj}\)(\(h=1,\ldots,q\),\(j=1,\ldots,l\))
- 输入→隐层权重:\(v_{ih}\)(\(i=1,\ldots,d\),\(h=1,\ldots,q\))
- 隐层阈值:\(\gamma_h\),输出层阈值:\(\theta_j\)
需学习参数总数:\((d+1) \times q + (q+1) \times l\)。
前向传播
对训练例 \((x^{(k)}, y^{(k)})\):
隐层: \(\(\alpha_h = \sum_{i=1}^d v_{ih} x_i^{(k)}, \quad b_h = f(\alpha_h - \gamma_h)\)\)
输出层: \(\(\beta_j = \sum_{h=1}^q w_{hj} b_h, \quad \hat{y}_j^{(k)} = f(\beta_j - \theta_j)\)\)
均方误差:
反向传播(链式法则详细推导)
BP 基于梯度下降:\(\Delta w = -\eta \frac{\partial E_k}{\partial w}\)。
更新 \(w_{hj}\)
\(w_{hj}\) 先影响 \(\beta_j\),再影响 \(\hat{y}_j^{(k)}\),最后影响 \(E_k\)。由链式法则:
逐项计算:
第一项:\(\frac{\partial E_k}{\partial \hat{y}_j^{(k)}} = \hat{y}_j^{(k)} - y_j^{(k)}\)
第二项:\(\frac{\partial \hat{y}_j^{(k)}}{\partial \beta_j} = f'(\beta_j - \theta_j) = \hat{y}_j^{(k)}(1 - \hat{y}_j^{(k)})\)(Sigmoid 导数)
第三项:\(\frac{\partial \beta_j}{\partial w_{hj}} = b_h\)(因为 \(\beta_j = \sum_h w_{hj} b_h\))
令 \(g_j = -\frac{\partial E_k}{\partial \hat{y}_j^{(k)}} \cdot \frac{\partial \hat{y}_j^{(k)}}{\partial \beta_j} = \hat{y}_j^{(k)}(1 - \hat{y}_j^{(k)})(y_j^{(k)} - \hat{y}_j^{(k)})\)
则:\(\(\boxed{\Delta w_{hj} = \eta \cdot g_j \cdot b_h}\)\)
更新 \(\theta_j\)
更新 \(v_{ih}\)(误差从输出层"逆传播"回隐层)
这是 BP 的核心——误差通过权重从输出层传回隐层。
逐项: - \(\frac{\partial E_k}{\partial \beta_j} = -g_j\) - \(\frac{\partial \beta_j}{\partial b_h} = w_{hj}\)(因为 \(\beta_j = \sum_h w_{hj} b_h\)) - \(\frac{\partial b_h}{\partial \alpha_h} = f'(\alpha_h - \gamma_h) = b_h(1 - b_h)\) - \(\frac{\partial \alpha_h}{\partial v_{ih}} = x_i^{(k)}\)(因为 \(\alpha_h = \sum_i v_{ih} x_i\))
综合得:
令 \(e_h = b_h(1 - b_h) \sum_{j=1}^l w_{hj} g_j\),则:
\(e_h\) 的物理意义:输出层的误差 \(g_j\) 通过权重 \(w_{hj}\) "逆传播"到隐层,再乘以隐层的局部梯度 \(b_h(1-b_h)\)。这就是"误差逆传播"名称的由来。
BP 的数值例子
考虑一个简单网络:\(f(x, y, z) = (x + y) \cdot z\),令 \(x = -2, y = 5, z = -4\)。
前向传播: - \(q = x + y = 3\) - \(f = q \cdot z = -12\)
反向传播: - \(\frac{\partial f}{\partial f} = 1\) - \(\frac{\partial f}{\partial z} = q = 3\) - \(\frac{\partial f}{\partial q} = z = -4\) - \(\frac{\partial f}{\partial y} = \frac{\partial f}{\partial q} \cdot \frac{\partial q}{\partial y} = -4 \cdot 1 = -4\) - \(\frac{\partial f}{\partial x} = \frac{\partial f}{\partial q} \cdot \frac{\partial q}{\partial x} = -4 \cdot 1 = -4\)
标准 BP vs. 累积 BP
- 标准 BP:每读一个样本就更新一次参数。更新频繁,不同样例的梯度可能相互抵消,需多次迭代
- 累积 BP:最小化整个训练集的累积误差,读完一遍(一个 epoch)才更新。更新频率低
在很多任务中,累积误差下降到一定程度后,进一步下降非常缓慢。这时标准 BP 往往获得更好的解,尤其当训练集非常大时。
四、缓解过拟合
早停 (Early Stopping)
- 若训练误差连续 \(a\) 轮变化小于 \(b\),停止训练
- 使用验证集:训练误差降低但验证误差升高时,停止
正则化
在误差目标函数中增加描述网络复杂度的项:
偏好较小的连接权和阈值,使网络输出更"光滑"。
五、全局最小 vs. 局部极小
神经网络的训练可看作参数空间中的寻优过程。损失函数通常有多个局部极小,只有一个全局最小。
跳出局部极小的常见策略: - 不同的随机初始化 - 模拟退火 - 随机扰动 - 动量法(Heavy-Ball、Nesterov) - 演化算法
六、其他常见神经网络
| 网络类型 | 特点 |
|---|---|
| RBF | 径向基函数网络,\(\varphi(x) = \sum_{i=1}^q w_i e^{-\beta_i\|x - c_i\|^2}\) |
| SOM | 自组织特征映射,无监督竞争学习,"胜者通吃" |
| Elman 网络 | 递归神经网络,隐层输出反馈回输入 |
| 级联相关网络 | 构造性网络,隐层神经元在训练中逐步加入 |
神经网络发展简史
| 时期 | 事件 |
|---|---|
| 1943 | M-P 模型 |
| 1945 | Hebb 学习规则 |
| 1958 | 感知机 (Perceptron, Rosenblatt) |
| 1960 | Adaline (Widrow) |
| 1969 | Minsky & Papert《Perceptrons》→ 冰河期 |
| 1983 | Hopfield 网络 |
| 1986 | BP 算法复兴 (Rumelhart, Hinton, Williams) |
| 1997 | SVM 兴起,神经网络再次沉寂 |
| 2006 | Hinton: 深度学习 (Science) |
| 2012 | AlexNet 赢得 ImageNet → 深度学习热潮 |
| 2019 | 图灵奖授予 Hinton, LeCun, Bengio |
"科学的发展总是'螺旋式上升'。三十年河东,三十年河西。坚持才能有结果。"
2026.06