一、感知机回顾与多层网络的动机
1.1 感知机的局限
感知机(Perceptron)是单个神经元的学习算法。但 Minsky 的一篇文章证明:单个感知机无法解决非线性问题(如 XOR 问题)。
理解历史上每一步的设计动机——为什么这样设计——比简单地记住算法本身更重要。
1.2 向多层发展的两个关键问题
要解决非线性问题,需要向多层网络发展。但这带来两个问题:
-
阶跃函数不可微:单感知机使用阶跃函数(step function)作为激活函数,它不可导。当网络向多层发展后,如果最后一层的非线性映射不可导,整个网络的优化将无法进行。
-
需要可微的替代函数:需要找一个与阶跃函数形态相似但处处可微的函数。历史上就有了 Sigmoid 函数: \(\sigma(z) = \frac{1}{1 + e^{-z}}\)
Sigmoid 的出现并非偶然——它可以从广义线性模型和指数族分布的角度严格推导出来。
二、线性模型回顾——理解神经网络本质的参照系
回顾线性模型的目的,是在对比中看清神经网络与线性模型的本质区别。
2.1 机器学习的通用框架
任何机器学习模型都基于数据集 $\{(\mathbf{x}_i, t_i)\}_{i=1}^N$,其中 $\mathbf{x}_i$ 为输入(黑体小写表示列向量),$t_i$ 为观测目标。核心目标是找到映射 $f: \mathbf{x} \mapsto t$。
2.2 线性模型的定义
线性模型(Linear Model)构造输入特征的加权和:
\[f(\mathbf{x}, \mathbf{w}) = w_0 + w_1 x_1 + w_2 x_2 + \cdots + w_D x_D\]其中 $w_0$ 为偏置项(bias),可将其吸收进向量形式。
2.3 基函数变换
原始特征 $\mathbf{x}$ 通过一组基函数(basis functions)$\phi_j(\mathbf{x})$ 变换到新的特征空间:
\[f(\mathbf{x}, \mathbf{w}) = \sum_{j=0}^{M-1} w_j \phi_j(\mathbf{x})\]低维空间中线性不可分的数据,映射到高维空间后可能变得线性可分——这是基函数变换的核心动机。本质上是在做特征工程:丰富原有特征,帮助模型更好地完成映射。
关键约束:在传统线性模型中,基函数 $\phi_j$ 是事先选定、固定不变的。只能调权重 $\mathbf{w}$,不能调基函数本身。这一点对于后续理解神经网络的本质区别至关重要。
2.4 最小二乘优化
损失函数(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.5 解析解
对 $\mathbf{w}$ 求梯度并置零:
\[\nabla E(\mathbf{w}) = 0\]定义设计矩阵(Design Matrix)$\boldsymbol{\Phi}$,其元素为 $\Phi_{ij} = \phi_j(\mathbf{x}_i)$。得到闭式解:
\[\mathbf{w} = (\boldsymbol{\Phi}^\top \boldsymbol{\Phi})^{-1} \boldsymbol{\Phi}^\top \mathbf{t}\]这个解存在的条件是 $\boldsymbol{\Phi}^\top \boldsymbol{\Phi}$ 可逆。但实际中几乎一定不可逆——当数据集很大时,无法保证特征行向量线性无关。可用伪逆(Pseudo-Inverse)方法处理:对 $\boldsymbol{\Phi}^\top \boldsymbol{\Phi}$ 做特征分解,将中间对角矩阵中的特征值取倒数即得伪逆。
由于平方误差函数没有上界(权重越大误差可以无限大),因此梯度置零得到的极值一定是极小值而非极大值。
2.6 线性模型的几何意义:正交投影
将最优 $\mathbf{w}$ 代入模型,预测值 $\hat{\mathbf{t}}$ 可表达为:
\[\hat{\mathbf{t}} = \boldsymbol{\Phi} (\boldsymbol{\Phi}^\top \boldsymbol{\Phi})^{-1} \boldsymbol{\Phi}^\top \mathbf{t}\]中间那个矩阵乘积 $\boldsymbol{\Phi} (\boldsymbol{\Phi}^\top \boldsymbol{\Phi})^{-1} \boldsymbol{\Phi}^\top$ 恰好是一个投影矩阵。
线性模型本质上在做一件事——参数 $\mathbf{w}$ 张成一个子空间,模型预测值 $\hat{\mathbf{t}}$ 是目标 $\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 | 带可学习参数的变换层数 |
输入层没有可学习参数,因此不计数。图中看起来是三层的网络(输入-隐层-输出),实际上只有两层带参数(隐层+输出层)。
四、为什么神经网络没有解析解
4.1 复合函数求导的困境
对于 MLP,参数 $\boldsymbol{\theta} = \{\mathbf{W}_1, \mathbf{b}_1, \mathbf{W}_2, \mathbf{b}_2\}$。Sigmoid 的导数有一个简洁性质:
\[\sigma'(z) = \sigma(z)(1 - \sigma(z))\]由外向内逐层求导,结果是一个高度嵌套的表达式,包含多个 $\sigma(\cdot)(1 - \sigma(\cdot))$ 因子的乘积。
由于多层网络的引入和非线性激活函数的存在,目标函数对参数的导数是一个高度非线性的方程组。对 $\mathbf{W}_1$ 求导得到一个方程,对 $\mathbf{W}_2$ 求导得到另一个方程——联立起来,以目前的数学手段没有解析解。
4.2 参数空间的对称性
关键发现:如果交换隐层中任意两个神经元的所有输入权重、偏置和输出权重,整个网络的输出完全不变。
设隐层有 $M$ 个神经元,将神经元 $i$ 和 $j$ 的所有连接权重对调,网络函数 $f(\mathbf{x})$ 的输出值对任意输入 $\mathbf{x}$ 保持不变。
这意味着:
- 参数空间中存在 $M!$ 个不同的参数配置,产生完全相同的网络功能
- 这些 $M!$ 个配置都是等价解——如果一个是局部极小值,则所有 $M!$ 个都是
- 解析解通常期望有唯一解或少量解,但这里天然就有 $M!$ 个——解析求解的希望彻底破灭
参数空间对称性是神经网络优化中最根本的困难之一。
五、凸优化的理论基础——三个层次
5.1 层次一:凸函数 → 局部最小 = 全局最小
凸函数定义:对任意参数 $\boldsymbol{\theta}_1, \boldsymbol{\theta}_2$ 和 $\lambda \in [0,1]$:
\[E(\lambda\boldsymbol{\theta}_1 + (1-\lambda)\boldsymbol{\theta}_2) \leq \lambda E(\boldsymbol{\theta}_1) + (1-\lambda)E(\boldsymbol{\theta}_2)\]即两点连线上的函数值 ≤ 端点函数值的线性插值。
证明(反证法):假设存在一个局部极小值 $\boldsymbol{\theta}^*$ 不是全局极小值,则存在另一个 $\boldsymbol{\theta}^\dagger$ 满足 $E(\boldsymbol{\theta}^\dagger) < E(\boldsymbol{\theta}^*)$。取 $\boldsymbol{\theta}^\lambda = \lambda \boldsymbol{\theta}^\dagger + (1-\lambda) \boldsymbol{\theta}^*$。由凸性:
\[E(\boldsymbol{\theta}^\lambda) \leq \lambda E(\boldsymbol{\theta}^\dagger) + (1-\lambda) E(\boldsymbol{\theta}^*) < E(\boldsymbol{\theta}^*)\]当 $\lambda \to 0$ 时,$\boldsymbol{\theta}^\lambda$ 可以无限接近 $\boldsymbol{\theta}^*$,但其函数值严格小于 $E(\boldsymbol{\theta}^*)$——这与 $\boldsymbol{\theta}^*$ 是局部极小值矛盾。$\blacksquare$
如果优化目标是凸函数,找到局部最小值就等于找到了全局最小值。
5.2 层次二:神经网络是非凸的
从参数对称性出发。设有两个通过交换神经元得到的等价配置 $\boldsymbol{\theta}_1$ 和 $\boldsymbol{\theta}_2$,两者都是等价的局部极小值。对两者取平均 $\boldsymbol{\theta}_{\text{avg}} = \frac{\boldsymbol{\theta}_1 + \boldsymbol{\theta}_2}{2}$。
以隐层有两个神经元为例:$\boldsymbol{\theta}_1$ 中第一个神经元的入边权重为 $\{2, 3\}$、出边权重为 $\{4, 6\}$;$\boldsymbol{\theta}_2$ 中交换后变为 $\{3, 2\}$ 和 $\{6, 4\}$。取平均得 $\{2.5, 2.5\}$ 和 $\{5, 5\}$——两个神经元变得完全一样。此时网络的建模能力下降(两个神经元冗余),Loss 值升高。
这直接违反了凸性条件:凸函数要求任意两点连线上的函数值 ≤ 端点函数值的线性插值,但这里取平均后的 Loss 反而更高。
因此:由于网络权重空间的对称性,神经网络的优化目标一定是非凸的。这不是偶然,是结构性原因。
5.3 层次三:神经网络中局部最小值确实有好有坏
理论上,即使函数非凸,仍有可能所有局部极小值取相同的函数值。但在神经网络中,这也不成立。
可以构造出两个梯度为零、海塞矩阵都半正定的点(都是局部极小值),但它们的损失值不同:
- 正常训练的配置 → 较好的局部极小值
- 某个神经元对所有样本都落在 Sigmoid 饱和区 → 该神经元”失活” → 一个较差的局部极小值
这就是为什么不同的初始化会导致不同的训练效果。
5.4 非凸的实际后果:海塞矩阵为何不实用
一般优化方法(如牛顿法)用到了二阶信息(海塞矩阵)。但在神经网络中:
- 即使算出来也没用:海塞矩阵正定只能证明是局部极小值,不保证是全局最优——而非凸意味着局部极小和全局最优之间没有必然联系
- 根本算不动:现代大模型参数量达千亿级别(100B+),海塞矩阵的大小是参数量的平方($O(N^2)$),存储和求逆都完全不可行
传统优化问题参数少,牛顿法利用二阶泰勒展开可以更快收敛。但神经网络参数太多、目标函数非凸——二阶信息既”算不动”也”算出来没用”。所以神经网络优化只用一阶梯度信息(梯度下降及其变体),靠随机性和大量迭代来探索参数空间。
这也是为什么 SGD、Adam 等一阶优化器在深度学习中占据绝对主导地位。
六、梯度下降与学习率
6.1 从解析解到数值迭代
既然解析解无望,只能采用数值迭代方法:
\[\boldsymbol{\theta}^{(t+1)} = \boldsymbol{\theta}^{(t)} - \eta \cdot \nabla E(\boldsymbol{\theta}^{(t)})\]其中 $\eta$ 为学习率(learning rate),控制每一步移动的步长。
6.2 学习率的选择
- 太小:收敛慢,训练时间长
- 太大:到了底部附近会”冲过头”,在最小值周围振荡甚至发散
实践中通常使用 learning rate schedule——训练初期用较大学习率快速下降,接近收敛时逐渐减小学习率以精细调优。
6.3 学习率预热(Warmup)
现代深度学习实践中,学习率 schedule 通常是先小 → 中大 → 再小的三阶段曲线:
整个神经网络在训练初期,所有参数都需要互相协调。如果某一层步子迈得太大,其他层还没来得及调整,整个训练就不稳定。所以一开始学习率要小一点,让大家互相适应;等协调好了,中间可以放大步子;最后接近收敛时再慢慢减小。
这就是 learning rate warmup 的直觉——防止训练初期因参数更新不协调而导致的不稳定。
6.4 损失景观的几何直觉
如果是线性模型,Loss 函数就像一只非常平滑的碗——处处光洁,梯度下降沿着碗壁一路滑到底。但在神经网络中,每引入一层非线性激活函数,就像在这张平滑的白纸上揉出一个褶皱。层数越多,褶皱越多——整个误差曲面变得非常崎岖(highly non-smooth / rugged),到处是局部极小值和鞍点。
这解释了为什么深度网络的优化比浅层网络和线性模型困难得多。
七、神经元饱和与梯度消失
7.1 Sigmoid 的压缩效应
Sigmoid 将任意实数输入压缩到 $(0, 1)$ 区间,故又称压缩函数(squashing function)。Tanh 则压缩到 $(-1, 1)$,均值为零,在某些场景下更受欢迎。
实践经验:中间层更倾向使用 Tanh(输出有正有负,多样性更强),最后一层或门控机制中更倾向使用 Sigmoid。
7.2 神经元失活(Dead Neuron)
Sigmoid 的导数为 $\sigma'(z) = \sigma(z)(1 - \sigma(z))$。当 $\|z\|$ 较大时(如 $\|z\| > 3.7$):
- $\sigma(z) \approx 0$ 或 $\sigma(z) \approx 1$
- $\sigma'(z) \approx 0$(两端都趋近于 0)
如果权重配置使得某神经元对所有训练样本的输入都落在饱和区,该神经元的梯度恒为零 → 参数不再更新 → 该神经元失活(dead neuron)。此时梯度为零、海塞矩阵半正定 → 构成局部最小值,但由于神经元失活导致建模能力下降,这往往是一个较差的局部最小值。
非线性的存在 → 神经元可能饱和 → 产生不同质量的局部最小值。这就是为什么同样的网络结构,不同随机初始化会导致不同的训练效果。
八、数字识别实验
8.1 任务设置
七段数码管数字识别(经典的小规模实验):
- 输入:7 个像素(每一位 0 = 灭,1 = 亮)
- 输出:10 个类别(数字 0-9),使用独热编码(One-Hot Encoding)
- 隐层:18 个神经元
- 网络结构:7 → 18 → 10
8.2 训练观察
- 损失函数持续下降,网络能够学习
- 不同初始值导致不同训练结果:有时收敛到较好的解,有时收敛到较差的解(验证了前面的理论分析)
- 网络展现出泛化能力:能正确识别训练中未见过的模式(如缺笔画的数字)——说明网络不是简单记忆,而是学到了数字的底层结构
8.3 核心启示
三层神经网络与广义线性模型(线性组合 + 非线性输出映射)的核心差别在哪里?为什么神经网络不能像线性模型那样求解析解?
关键差别:线性模型的基函数是固定的,只优化最后一层权重;而神经网络的隐层也在学习特征表示——网络从原始信号中逐层提取越来越抽象的特征,中间层的表示本身也是被优化的对象。这让模型表达能力大幅提升,但也使优化变成了非凸问题。