第 6 章 · 深度前馈网络:反向传播的诞生地
把线性模型嵌套成"层"的网络,配上非线性激活与梯度下降——深度前馈网络(MLP)就是深度学习的"标准模型机"。这一章把它的每个部件说清楚:为什么非线性、激活怎么选、隐藏层多宽多深、梯度怎么算。
从线性到非线性:激活的必要性
多层线性叠加仍线性——没有非线性激活,再深也只是一层线性变换。激活函数演进史:sigmoid/tanh(饱和、梯度消失)→ ReLU($\max(0, x)$:不饱和、稀疏、便宜——深度学习复兴的隐形功臣)→ Leaky ReLU、ELU、GELU。选择的实操逻辑:默认 ReLU 系,输出层由任务定(sigmoid 二分类、softmax 多分类、线性回归)。
万能逼近与架构直觉
定理:单隐藏层足够宽的网络能逼近任意连续函数——宽是理论保险,深是效率。深度的真正优势在表示效率与组合性(层次化特征:边缘→纹理→部件→物体),实践中深度优于同等参数量的宽度。
反向传播:链式法则的动态规划
前向:逐层算 $h^{(l)} = f(W^{(l)}h^{(l-1)} + b^{(l)})$;反向:从损失出发逐层回传梯度:
计算图 + 链式法则 + 共享中间结果——代价与前向同阶。反向传播不是学习算法,只是求梯度的算法;学习发生在优化器里。
损失与输出层的配对
最大似然的输出层选择:高斯输出 + 均方、伯努利 + sigmoid + 交叉熵、类别分布 + softmax + 交叉熵——配对后损失-softmax 的梯度恰好是 $(\hat y - y)$:干净的梯度是配对的红利(均方+sigmoid 的梯度含 sigmoid 导数,会饱和卡死——这是"输出层别乱配"的原因)。
老师的提醒
- 调 MLP 的默认模板:ReLU + 小批量 SGD/Adam + 权重衰减 + 早停——先跑通基线再谈花活。
- 手推一次两层网络的反传(矩阵维度全部标注)是本章的必过考试:维度对不上 = 理解有洞。
自检
- 为什么没有非线性激活的多层网络等价于单层?
- 写出反向传播的两条核心公式。
- softmax + 交叉熵的梯度为什么恰好是预测减标签?
更深一层:万能逼近定理的"存在性 vs 可学习性"分野
万能逼近定理(单隐藏层足够宽能逼近任意连续函数)常被误读为"深度没必要"。定理只保证表达能力(存在这样的网络),不保证可学习性(SGD 找得到)。深度的真正优势是表示效率与组合性:层次化特征(边缘→纹理→部件→物体)让深度网络用指数级更少的参数表达同一函数——"宽是理论保险,深是效率"。这就是为什么 ResNet 的残差连接($h = f(x) + x$ 恒等旁路)能让深度加厚到 152 层——深度的自由来自"让梯度有直达高速"的架构设计。
激活函数的选择史也是一部"梯度病理学":sigmoid/tanh 饱和(梯度消失)、ReLU 不饱和但"死亡"(输出恒零)、Leaky ReLU/ELU/GELU 逐个修补——每个激活函数都是对前代病理的补丁。
推导细读:反向传播 = 链式法则的动态规划
反向传播的数学内容只有一条链式法则,但计算图 + 动态规划让它高效:前向时缓存每层的中间值,反向时共享——代价与前向同阶。矩阵维度的纪律是反传推导的试金石:$\frac{\partial L}{\partial W^{(l)}} = \delta^{(l)}(h^{(l-1)})^T$ 的维度必须匹配——$\delta^{(l)}$ 是 $(n_l, 1)$、$h^{(l-1)}$ 是 $(n_{l-1}, 1)$、乘积 $(n_l, n_{l-1})$ 恰是 $W^{(l)}$ 的形状。"维度对不上 = 理解有洞"——手推一次两层网络的反传是本章的必过考试。
在真实世界里:MLP 的"默认模板"
调 MLP 的工业默认模板值得做成起手式:ReLU + Adam(小批量)+ 权重衰减 + 早停 + 批归一化——先跑通基线再谈花活。训练失败的排查顺序:先看损失曲线是否下降(学习率)→ 再看过拟合(正则/数据)→ 最后换架构。99% 的"模型不行"是前两步没做对——调参的层次纪律比任何架构创新都重要。
专题深入:前馈网络与万能近似的"真相"完整版
第六章的理论骨架是万能近似定理:单隐层足够宽的网络(sigmoid/ReLU 激活)可逼近任意连续函数(紧集上一致逼近)。但它常被误读——定理不保证宽度可行(逼近平滑函数可能要指数宽)、不保证可学(SGD 找得到那个权重)、不保证泛化。深度优先于宽度的现代理由是组合性与层级复用(深度网络表达某些函数只需多项式参数、浅层需要指数——视觉特征"边缘→纹理→部件→物体"的组合结构恰好匹配深度计算图)。ReLU 的胜出史是工程选择的教科书:分段线性 ⟹ 梯度恒 1(不饱和)、稀疏激活、计算极快;缺点是"死亡 ReLU"(负区梯度为零神经元永久失活)——Leaky ReLU/GELU/Swish 的改进都在修这一点。激活函数的设计约束(非线性、近单调、有界导数或良好缩放——sigmoid 双端饱和在深网中梯度消失,因此只配当输出门控而非隐藏层主力)。
推导细读:反向传播的"链式法则 + 动态规划"完整版
反向传播的严格理解是在计算图上做链式法则的动态规划:前向存储每个节点的激活值,反向按拓扑序累积局部梯度——每个参数的梯度计算成本与前向同阶(这是"训练深层网络在经济上可行"的定理级事实)。推导要点:损失 $L$ 对第 l 层的误差信号 $\delta^{(l)} = (W^{(l+1)T}\delta^{(l+1)}) \odot \sigma'(z^{(l)})$——梯度反向流经权重转置,激活导数做"阀门"。三个工程细节决定实现质量:梯度消失/爆炸的谱解释(雅可比连乘的最大奇异值持续小于/大于 1 ⟹ 指数衰减/放大——初始化的 Xavier/He 方差设计就是让每层谱保持 ~1:He 初始化方差 $2/n_{\rm in}$ 正是为 ReLU 的"半数置零"补偿);softmax + 交叉熵的联合梯度($\partial L/\partial z = p - y$ 干净得出——独立实现两者会引入数值灾难);梯度检查与 clip(RNN 训练的梯度裁剪是爆炸的直接对策)。
工程案例细节:从 MLP 到生产系统的工程账工程版
第六章的工程出口:表格数据的 MLP 基线(结构化数据上 MLP + 特征工程仍然竞争力强——深度学习不是处处碾压,XGBoost 在千万级以下表格数据常胜 MLP 的行业共识);embedding 层的工业地位(推荐系统的用户/物品 ID embedding 是"亿级 one-hot → 低维稠密"的标准答案——embedding 本质是可学习的查表矩阵乘);混合专家与宽深模型(Google Wide & Deep、DeepFM——记忆(宽线性)+ 泛化(深 MLP)的组合设计);初始化与归一化的组合拳(He 初始化 + BatchNorm/LayerNorm 让 50 层网络成为默认可训练对象——2015 年之前 20 层就是深渊);autograd 框架的黑盒拆解(PyTorch 的动态计算图、tape-based 反传——手写一遍 min-autograd(micrograd)是理解六本章的最佳作业)。
例题
两层网络 $h = \sigma(w_1x)$、$\hat y = w_2h$($\sigma$ 为 sigmoid,$w_1 = w_2 = 1$,$x = 2$,目标 $y = 1$,平方损失 $L = \frac12(\hat y - y)^2$)。求 $\partial L/\partial w_1$。
解答
前向:$h = \sigma(2) = 0.881$,$\hat y = 0.881$,$L = \frac12(0.881-1)^2 = 0.0071$。
反向(链式法则逐层):
- 反向传播的全部内容就是这条链:误差信号回传,每过一层乘上"该层局部导数"。sigmoid 导数 $\le0.25$ 连乘导致梯度消失的原因也在其中。