Skip to content

导论:从手工编程到函数逼近的范式转移 ​

多层感知机(Multi-Layer Perceptron, MLP)是现代深度学习的元祖架构,也是理解所有复杂神经网络(CNN、RNN、Transformer)的最小完备性原型。它的本质并非“生物神经元”的粗糙模拟,而是一个参数化的通用函数逼近器(Universal Function Approximator)。

MLP 的核心哲学可以用一个极其简洁的数学命题概括:寻找一个函数 f,使得 f(x)≈y。在传统编程中,f 由人类工程师手写逻辑(if-else)定义;而在 MLP 中,我们放弃了手工编写规则,转而构建一个包含数百万可调参数 θ 的巨型复合函数 fθ,并通过数据驱动的方式,让优化算法自动在参数空间中搜索那组能完美映射输入 x 到输出 y 的最优参数。

这种从“显式编程”到“隐式函数拟合”的哲学飞跃,标志着人工智能从符号主义走向了连接主义。


第一部分:核心哲学 —— 作为“万能胶水”的 f(x) ​

1.1 函数逼近视角下的 MLP ​

设输入空间为 X⊆Rd0,输出空间为 Y⊆RdL。机器学习假设存在一个真实但未知的数据生成分布 P(x,y),我们的目标是找到一个可计算函数 f,使得在给定 x 时,f(x) 能最小化与真实 y 的期望误差。

MLP 将 f 参数化为 L 个简单函数的复合(Composition):

fθ(x)=fL∘fL−1∘⋯∘f1(x)

其中每一层 fl 都是一个仿射变换(矩阵乘法 + 偏置)紧跟着一个非线性激活函数。这种逐层复合的结构,使得整体函数具备了极其强大的表达灵活性。

1.2 通用逼近定理(Universal Approximation Theorem, UAT)的哲学启示 ​

Hornik 等人证明:只需一个包含有限神经元的单隐藏层,并使用满足条件(非常数、有界、连续)的非线性激活函数(如 Sigmoid 或 ReLU),MLP 就能以任意精度逼近定义在 Rn 紧致子集上的任意连续函数。

深刻理解:UAT 是 MLP 存在的数学合法性基础,它保证了 MLP 在理论上的“万能性”。但我们必须保持头脑清醒:UAT 是存在性定理,而非构造性定理。它告诉我们“存在一组参数 θ 能做到”,却未告诉我们如何通过梯度下降在有限时间内找到这组参数,也未保证所需的隐藏层宽度不会随着逼近精度的提高而呈指数级爆炸。这正是推动网络从“宽”(单层极宽)走向“深”(多层较窄)的内在驱动力——深层网络能用指数级更少的参数表达复杂的组合函数。


第二部分:矩阵层与非线性层 —— 线性变换与打破线性的“破壁机” ​

MLP 的每一层由两个按顺序执行的操作组成:仿射变换 和 逐元素非线性激活。

2.1 矩阵层(仿射变换) —— 空间的重塑与旋转 ​

对于第 l 层,输入为 a(l−1)∈Rdl−1,输出为 z(l)∈Rdl:

z(l)=W(l)a(l−1)+b(l)
  • 权重矩阵 W(l)∈Rdl×dl−1 定义了一个从 dl−1 维空间到 dl 维空间的线性映射(包含旋转、缩放和投影)。
  • 偏置向量 b(l)∈Rdl 实现了空间的平移。

几何本质:在没有非线性的情况下,无论堆叠多少层,整个网络的整体映射依然是线性的(因为 W2W1x=Weffx)。线性变换的能力极其受限——它无法解决异或(XOR)问题,也无法拟合曲线。

2.2 非线性层(激活函数) —— 打破线性链的“破壁机” ​

仿射变换之后,必须紧跟着一个逐元素(Element-wise)的非线性激活函数 σ(⋅):

a(l)=σl(z(l))

为什么必须是非线性的? 因为神经网络的整体表达能力取决于函数的复合次数。如果 σ 是线性的,那么 σ(W2σ(W1x))=W~x,即两个线性变换的复合仍是线性变换。非线性激活函数的引入,使得神经网络可以逼近任意复杂的非线性边界。

主流选择与数学特性:

  • ReLU(max(0,x)):分段线性,导数在正半轴为 1,完美解决了梯度消失问题(相对 Sigmoid),且计算成本极低。但其负半轴导数为 0,可能导致“神经元死亡”(Dying ReLU)。
  • Sigmoid / Tanh:值域平滑且有界,导数存在明显饱和区(梯度接近 0),在深层网络中极易导致梯度消失,现已多用于概率输出层(Sigmoid)或特定生成任务。

第三部分:大体训练流程 —— 前向、反向、更新的三位一体 ​

MLP 的训练是一个迭代式的最优化过程,其宏观循环可拆解为三个核心步骤。

3.1 前向传播(Forward Propagation) —— 数据流的“河床” ​

给定一个输入样本 x,信息从输入层出发,逐层向上流动:

a(0)=xz(l)=W(l)a(l−1)+b(l),a(l)=σl(z(l))for l=1,…,L

最终得到预测输出 y^=a(L)。

3.2 损失计算(Loss Calculation) —— 误差的量化 ​

定义损失函数 L 用于衡量预测 y^ 与真实标签 y 之间的差异:

  • 回归:均方误差(MSE),L=12∥y^−y∥2。
  • 分类:交叉熵(Cross-Entropy),L=−∑yilog⁡y^i。

损失函数是一个标量,它是我们唯一需要最小化的终极目标。

3.3 反向传播与参数更新 —— 误差的回溯与修正 ​

计算损失 L 关于所有权重 W(l) 和偏置 b(l) 的梯度 ∇θL,然后利用优化器(如 SGD 或 AdamW)沿负梯度方向更新参数:

θ←θ−η⋅∇θL

其中 η 是学习率。上述三步循环往复,直到损失收敛或达到最大迭代次数。


第四部分:反向传播(BP)详解 —— 链式法则的动态规划 ​

反向传播是训练过程的物理引擎。它不是一个新的学习算法,而是链式法则(Chain Rule)在深度计算图上的高效实现。其精妙之处在于,将全导数计算分解为误差信号的后向递推,避免了重复计算子表达式。

4.1 定义核心变量:误差项(Error Term) ​

为了推导的清晰,我们定义第 l 层的误差项 δ(l) 为损失函数关于该层**线性输出 z(l) **(即激活前的值)的偏导数:

δ(l)≜∂L∂z(l)∈Rdl

4.2 递推动力学:从输出层“回流”至输入层 ​

第一步:输出层的初始化(锚点) 对于输出层 L,其误差项直接由损失函数对该层输出的导数与激活函数导数的乘积给出。以 MSE 配合恒等输出激活(回归任务)为例:

δ(L)=∂L∂z(L)=(a(L)−y)⊙σL′(z(L))

(若输出层使用 Softmax + 交叉熵,则 δ(L)=a(L)−y,省略了复杂的雅可比矩阵计算,这是微分法的美妙之处。)

第二步:误差反向传播的递推公式(灵魂所在) 我们需要建立 δ(l) 与 δ(l+1) 之间的关系。利用链式法则,通过中间变量 a(l) 和 z(l+1) 传递:

δ(l)=∂L∂z(l)=∂a(l)∂z(l)⋅∂z(l+1)∂a(l)⋅∂L∂z(l+1)

代入具体表达式:

  1. ∂a(l)∂z(l)=diag(σl′(z(l)))(逐元素激活函数的导数矩阵)。
  2. ∂z(l+1)∂a(l)=(W(l+1))T(因为 z(l+1)=W(l+1)a(l)+b(l+1))。

由此得到简洁的向量化递推形式:

δ(l)=((W(l+1))Tδ(l+1))⊙σl′(z(l))

几何解释:高层的误差信号 δ(l+1) 通过权重矩阵的转置(WT)“拉回”到本层的线性空间,再经过激活函数导数的“门控”过滤(⊙σ′),形成本层的误差信号。

4.3 参数梯度的最终计算(收网时刻) ​

一旦我们递推得到了当前层 l 的误差项 δ(l),损失函数对该层参数 W(l) 和 b(l) 的梯度,可以直接用外积公式解析表达:

权重的梯度: 损失 L 对权重矩阵 W(l) 的梯度等于本层误差项与本层输入 a(l−1) 的外积:

∂L∂W(l)=δ(l)⋅(a(l−1))T∈Rdl×dl−1

偏置的梯度: 损失 L 对偏置向量 b(l) 的梯度恰好等于误差项本身(因为偏置对线性输出的导数为单位向量):

∂L∂b(l)=δ(l)∈Rdl

4.4 为什么 BP 是高效的?—— 动态规划的胜利 ​

如果我们天真地对每个参数 wij 单独求导,每次都需要重头计算整个网络的复合函数,计算量随参数量线性增长。而 BP 通过复用中间结果(即误差项 δ),将梯度计算的复杂度降为与前向传播相同的量级(O(∑dldl−1))。BP 的这种共享计算特征,使得深度网络的大规模参数训练在工程上成为可能。它本质上是一个在图结构上执行的反向模式自动微分(Reverse-mode AD)。


结语:MLP 的遗产与深层智慧 ​

理解 MLP 的哲学与数学细节,绝不仅仅是为了掌握一个过时的算法。MLP 为整个深度学习领域奠定了不可磨灭的范式基准:

  1. 函数复合是表达复杂性的唯一途径:通过重复应用“线性映射 + 非线性激活”这一原子操作,极其简单的模块可以堆叠出足以理解宇宙规律的宏大函数。
  2. 链式法则引导下的可微分计算:BP 证明了,只要能定义可微分的损失函数和可微分的层,任何复合结构都能通过统一的梯度下降机制进行优化。这一思想直接催生了现代 PyTorch/TensorFlow 的 Autograd 引擎。
  3. 深度优于广度:通用逼近定理指明了“宽”的可能性,但 BP 的梯度传播规律揭示了“深”的有效性——深层网络能够以更少的参数实现指数级的表征效率提升。

虽然后续的 CNN、RNN 和 Transformer 在结构上引入了更复杂的归纳偏置(局部连接、循环、注意力),但它们底层的数据流动机制和参数优化原理,无不源自 MLP 所定义的那条朴素公式:

θt+1=θt−η⋅∇θL(fθ(x),y)

掌握 MLP,就是掌握了深度学习世界的通用语法。