一、感知机回顾与多层网络的动机
1.1 感知机的局限
感知机(Perceptron),它是一个神经元的学习算法。但 Minsky 的一篇文章证明:单个感知机无法解决非线性问题(如 XOR 问题)。
关键:要理解历史上那些人每一步是怎么想的,为什么这样设计——而不是简单地把算法讲清楚。
1.2 向多层发展的两个关键问题
要解决非线性问题,需要向多层网络发展。但这带来两个问题:
-
阶跃函数不可微:单感知机使用阶跃函数(step function)作为激活函数,它不可导。当网络向多层发展后,如果最后一层的非线性映射不可导,整个网络的优化将无法进行。
-
需要可微的替代函数:需要找一个与阶跃函数形态相似但处处可微的函数。历史上就有了 Sigmoid 函数: \(\sigma(z) = \frac{1}{1 + e^{-z}}\)
预告:Sigmoid 为什么会出现、它是怎么推出来的,课程后面会详细讲解。
二、线性模型回顾
先回顾线性模型,目的是让理解神经网络与线性模型的本质区别。
2.1 线性模型的定义
线性模型(Linear Model):对于输入向量 $\mathbf{x}$(黑体表示列向量),通过学习权重 $\mathbf{w}$ 和偏置 $w_0$,构造线性组合:
\[f(\mathbf{x}, \mathbf{w}) = w_0 + w_1 x_1 + w_2 x_2 + \cdots + w_D x_D\]2.2 基函数变换
原始特征 $\mathbf{x}$ 通过一组基函数(basis functions)$\phi_j(\mathbf{x})$ 变换到新的特征空间:
\[f(\mathbf{x}, \mathbf{w}) = \sum_{j=0}^{M-1} w_j \phi_j(\mathbf{x})\]关键:低维空间中线性不可分的数据,映射到高维空间后可能变得线性可分——这是基函数变换的核心动机。
2.3 最小二乘优化
目标:找到权重 $\mathbf{w}$,使得模型预测值与真实观测值 $\mathbf{t}$ 之间的误差最小。
损失函数(Sum of Squared Errors):
\[E(\mathbf{w}) = \frac{1}{2} \sum_{i=1}^{N} \left( f(\mathbf{x}_i, \mathbf{w}) - t_i \right)^2\]加上 $\frac{1}{2}$ 是为了求导后消去平方产生的系数 2。
2.4 解析解
对 $\mathbf{w}$ 求梯度并置零:
\[\nabla E(\mathbf{w}) = 0\]得到闭式解(解析解):
\[\mathbf{w} = (\boldsymbol{\Phi}^T \boldsymbol{\Phi})^{-1} \boldsymbol{\Phi}^T \mathbf{t}\]其中 $\boldsymbol{\Phi}$ 是设计矩阵(Design Matrix),其元素为 $\Phi_{ij} = \phi_j(\mathbf{x}_i)$。
说明:这个解存在的条件是 $\boldsymbol{\Phi}^T \boldsymbol{\Phi}$ 可逆。但实际中几乎一定不可逆——当数据集很大时,无法保证特征线性无关。可用伪逆(pseudo-inverse)处理,通过特征分解后将特征值取倒数得到。
2.5 线性模型的几何意义
线性模型本质上是在做投影:
- 参数 $\mathbf{w}$ 张成一个子空间
- 模型预测值 $\hat{\mathbf{t}}$ 是目标 $\mathbf{t}$ 在该子空间上的正交投影
- 优化目标是最小化 $\mathbf{t}$ 到投影点 $\hat{\mathbf{t}}$ 的距离(所有样本的平方和)
总结:线性模型就是干一件事——把目标投影到参数空间张成的子空间上,优化的是投影距离的平方和。
三、多层感知机(MLP)
3.1 网络结构
多层感知机(Multi-Layer Perceptron, MLP):输入层 → 隐层 → 输出层,层间全连接(fully connected)。
结构表示(两层网络,即一层隐层 + 一层输出层):
\(\mathbf{h} = \sigma(\mathbf{W}_1 \mathbf{x} + \mathbf{b}_1)\) \(\mathbf{y} = \sigma(\mathbf{W}_2 \mathbf{h} + \mathbf{b}_2)\)
整个网络是一个复合函数。
3.2 术语:”多层感知机”的误用
这个概念有两个”误用”:
- 不仅层数增加,每层的神经元数量也增加了
- 感知机使用阶跃函数,而 MLP 使用 Sigmoid 或 Tanh 等可微函数
3.3 深度与宽度
| 概念 | 定义 |
|---|---|
| 宽度 (Width) | 每层神经元的数量 |
| 深度 (Depth) | 带参数的可学习变换的层数 |
说明:输入层没有可学习参数,不计数。图中看起来是三层的网络(输入-隐层-输出),实际上只有两层带参数。
3.4 MLP 的命名差异
不同文献习惯不同:有些称为”三层网络”(含输入层),有些称为”两层网络”(只计带参层)。通常更倾向于后者(只计带参层)。
四、为什么神经网络没有解析解
4.1 复合函数求导的困境
对于 MLP,损失函数对参数的导数是高度非线性方程组。以对 $\mathbf{W}_1$ 求导为例,通过链式法则展开后是一个极其复杂的表达式,无法求得闭式解。
Sigmoid 函数的导数性质: \(\sigma'(z) = \sigma(z)(1 - \sigma(z))\)
4.2 参数空间的对称性
关键洞察:如果交换隐层中任意两个神经元的输入权重、偏置和输出权重,整个网络的输出完全不变。
- 如果隐层有 $M$ 个神经元,则有 $M!$ 种排列产生完全相同的网络功能
- 这意味着参数空间中存在 $M!$ 个等价解(都是局部极小值)
4.3 对称性导致非凸
核心论证:参数对称性 → 多个等价的局部极小值 → 两个等价解的线性组合产生的新参数,其中被交换的两个神经元会变得”一样”(输入输出权重都取平均),导致建模能力下降 → 新参数在损失函数上表现更差 → 这说明凸性不成立(凸函数要求两个点连线上所有点的函数值都 ≤ 端点函数值的线性插值)。
因此神经网络的优化目标函数是非凸的。
4.4 方法论的退路:数值迭代
解析解无望 → 采用数值迭代方法(梯度下降):
\[\theta^{(t+1)} = \theta^{(t)} - \eta \cdot \Delta\theta^{(t)}\]其中 $\eta$ 为学习率,$\Delta\theta$ 为移动方向。
五、凸优化的理论基础
凸优化的三个层次如下:
5.1 层次一:凸函数 → 局部最小 = 全局最小
凸函数定义:对任意参数 $\theta_1, \theta_2$ 和 $\lambda \in [0,1]$:
\[E(\lambda\theta_1 + (1-\lambda)\theta_2) \leq \lambda E(\theta_1) + (1-\lambda)E(\theta_2)\]即两点连线在函数图像上方。
反证法可证明:如果是凸函数,局部最小值一定是全局最小值。
5.2 层次二:神经网络是非凸的
已由参数对称性论证(见第四节)。
5.3 层次三:非凸也不意味着局部最小值有好有坏
即使是非凸函数,理论上所有局部最小值仍可能取相同值(都等于全局最小值)。但在神经网络中,这也不成立。
通过构造法可以说明:可以构造出两个海塞矩阵都正定、梯度都为零的点,但它们的损失值不同——神经网络中确实存在”好”和”坏”的局部最小值。
六、神经元饱和与梯度消失
6.1 Sigmoid 的压缩效应
Sigmoid 将任意输入压缩到 $(0, 1)$ 区间,故又称压缩函数(squashing function)。Tanh 则压缩到 $(-1, 1)$。
实践经验:中间层更倾向使用 Tanh(输出有正有负,多样性更强),最后一层或门控机制中更倾向使用 Sigmoid。
6.2 神经元失活
| 当输入值落在 Sigmoid 的饱和区(如 $ | z | > 3.7$),输出趋近于 0 或 1,梯度趋近于 0。 |
- 如果权重配置使得所有样本输入某神经元时都落在饱和区,该神经元就失活(dead neuron)
- 梯度为 0,海塞矩阵半正定 → 构成局部最小值
- 但由于神经元失活,这往往是一个较差的局部最小值
总结:非线性的存在 → 神经元可能饱和 → 产生不同的局部最小值 → 有些好有些差。这就是为什么同样的网络结构,不同初始化会导致不同训练效果。
七、数字识别实验
7.1 任务设置
七段数码管数字识别:
- 输入:7 个像素(0 = 灭,1 = 亮)
- 输出:10 个类别(0-9),使用 独热编码(One-Hot Encoding)
- 隐层:18 个神经元
7.2 训练观察
- 损失函数持续下降
- 不同初始值会导致不同的训练结果(有时好有时坏)
- 网络展现出泛化能力:能识别训练中未见过的模式(如缺笔画的数字)
7.3 核心启示
思考题:三层神经网络与广义线性模型(线性组合 + 非线性输出)的核心差别在哪里?为什么神经网络不能像线性模型那样求解析解?
神经网络的特点:每个输入信号对输出”投票”,网络从原始信号中逐层累积特征,最终映射到对应输出神经元。