跳到主要内容

第 09 章那条直线,一个零件;这一章把它印上一万份,摞起来。问题的全部新意在于:摞起来之后会发生什么。

前馈网络:把线性模型摞起来

1. 这一章讲什么

三件事: 一个神经元到底在算什么(答案:就两件事); 为什么层与层之间必须夹一道非线性的弯(否则摞了等于没摞); 以及这个结构的表示能力有多强、那个著名的保证又没有保证什么。

它在全书链条里的位置: 这是全书第二个大部分(基础模型——最常用的那几类网络)的第一章, 「神经网络」这三个字从这一章起真正落地。 第 04 章说的「让机器自己学表示」,从这一章开始有了具体的机器; 第 09 章的线性分类器,则变成这台机器身上的最后一个零件。

只需要第 09 章。

2. 顶层全景

一个神经元(第 09 章的老朋友):
输入 x ──▶ z = w·x + b ──▶ a = f(z) ──▶ 输出
净输入 活性值
(加权和) (过一道弯)

把它按层摞起来(前馈网络):
x = a⁽⁰⁾ ─▶ [W⁽¹⁾·+b⁽¹⁾ → f₁] ─▶ a⁽¹⁾ ─▶ [W⁽²⁾·+b⁽²⁾ → f₂] ─▶ a⁽²⁾ ─▶ ŷ
第 1 层:仿射+弯 第 2 层:仿射+弯
│ │
└────────── 整个网络 = 一个复合函数 φ(x; W, b) ───┘

信息只朝一个方向流,不回头 ── 这叫前馈

一句话链条: 每个零件做「加权和 + 一道弯」 → 层的输出是下一层的输入 → 整个网络是一个复合函数 → 最后一层接回第 09 章的 Softmax 回归 → 前面那些层,是在替它学一个新的表示。

3. 一个神经元在干什么

先看原型。 神经元的想法来自对生物神经元的粗糙模仿: 树突接收信号、积累超过阈值就兴奋、轴突把信号传给下一个神经元。 1943 年 McCulloch 和 Pitts 据此提出的 MP 神经元,和今天的神经元在结构上没多少差别, 唯一的升级是:激活函数从「0 或 1 的阶跃」换成了分段连续、几乎处处可导的函数—— 为了能上梯度下降1

一个神经元只做两步2:

第一步:净输入 z = w₁x₁ + w₂x₂ + … + w_Dx_D + b = w·x + b
── 把收到的所有输入加权求和(第 09 章的线性打分)

第二步:活性值 a = f(z)
── 把净输入送进一个非线性函数,得到输出

第二步那个非线性函数 f(·) 叫激活函数—— 第 09 章在 Logistic 回归里见过它一次(把打分挤成概率), 这一章起它成为主角之一。净输入和活性值这两个词要分开记: 一个是「弯之前」,一个是「弯之后」,第 11 章的反向传播全靠这个分界。

单个神经元就是第 09 章的 Logistic 回归,没有任何新东西。 新东西全在下一步:摞起来。

4. 摞起来:层与层之间怎么传

前馈网络的组织方式:神经元分成一层一层, 每一层只接收上一层的输出,只喂给下一层。 第 0 层叫输入层,最后一层叫输出层,中间各层叫隐藏层; 整个网络里不存在任何反馈连接,信号单向流动3—— 所以它还有一个名字:多层感知器(MLP), 尽管书里指出这个叫法并不严格(感知器用的是不连续的阈值单元(最简的开关式神经元))4

记号的规矩(全书后面都用这套)5:第 l 层有 M_l 个神经元, W⁽ˡ⁾ 是从第 l−1 层到第 l 层的权重矩阵,b⁽ˡ⁾ 是偏置。 信息传播就是两个公式交替6:

z⁽ˡ⁾ = W⁽ˡ⁾ a⁽ˡ⁻¹⁾ + b⁽ˡ⁾ 本层净输入 = 权重 × 上层的弯后值 + 偏置
a⁽ˡ⁾ = f_l(z⁽ˡ⁾) 本层活性值 = 过一道弯

注意这两个公式说的是「整层一起算」:z⁽ˡ⁾ 和 a⁽ˡ⁾ 都是向量, 一次矩阵乘法算出一整层所有神经元的净输入,激活函数再逐个分量作用上去。 这也是第 01 章练矩阵乘法的全部回报。

一层一层走到头,输出 a⁽ᴸ⁾ 就是整个网络对输入 x 的回答。 所以整个网络就是一个复合函数 φ(x; W, b), 从 x = a⁽⁰⁾ 到 a⁽ᴸ⁾ 的一长串交替7: x → z⁽¹⁾ → a⁽¹⁾ → z⁽²⁾ → ⋯ → a⁽ᴸ⁾。 这一趟从输入到输出的完整计算,行话叫前向传播—— 第 11 章要走的,是它的返程。

5. 为什么中间必须有非线性

问题: 每一层都是「矩阵乘法 + 加法」,摞一百层,表达能力是不是翻一百倍?

不是。而且答案是否定得很干脆的那种。 书里把每一层拆开看:矩阵乘法加偏置,是一个仿射变换(线性变换加平移)8。 而仿射变换的复合,仍然是一个仿射变换—— 两次矩阵相乘还是一个矩阵,两个平移相加还是一个平移。 所以如果激活函数全换成恒等映射(什么也不做), 一百层的网络和一层完全等价,整个网络退化回第 09 章的线性模型9

这就是激活函数不是可选项的原因: 网络的表示能力不只来自「层数多」,恰恰来自层与层之间夹着的那道非线性的弯9。 每一道弯,都让这一层能表示的函数形状翻出新的一类—— 第 04 章说「深度 = 非线性变换的次数」,到这一章才算真正兑现。

至于这道弯该长什么样——挤压型还是折线型,会不会把梯度掐死—— 那是第 12 章整章的内容。这一章只需要记住:弯必须有。

6. 它到底能表示多少东西

问题: 夹上弯、摞起来之后,这个结构的表示能力有上限吗?

这就是著名的通用近似定理(1989 年,Cybenko 与 Hornik 各自证明)10: 只要隐藏层神经元足够多, 一个「一个隐藏层 + 线性输出层」的两层网络, 就能以任意精度(要多准有多准)逼近任意连续函数(在实数空间的有界闭集上)11

读这条定理,要记住的是它没说的三句话12:

  1. 它只说存在这样一个网络,没说怎么找到它—— 找到那组参数,是第 11 章反向传播要解决的;
  2. 没说找到的是不是最优——同样的函数有无数组参数都能逼近;
  3. 没提需要多少个神经元——理论上可能要多到不切实际。

而且表示能力强是把双刃剑:正因为它什么都能逼近, 它也更容易把训练集整个背下来12——第 07 章的过拟合, 在这里有了结构上的根源。

所以这一章和第 11 章的分工是: 这一章证明「答案存在」,下一章回答「怎么找到」。 这一行的历史也写着同样的逻辑:八十年代就有这条定理, 真正卡住二十年的不是「能不能表示」,是「训不训得动」。

7. 网络怎么接到具体任务上

问题: 一个复合函数 φ(x),怎么变成分类器?

书里的回答分两步,都非常省13

第一步:把网络看成一个特征转换器。 第 05 章说过,好的特征能极大提高分类器性能,而特征原来是人挑的。 现在:多层前馈网络本身就是一个可学习的特征转换方法—— 它把原始输入 x 映成 φ(x),分类器在 φ(x) 上工作13。 这就是第 04 章「让机器自己学该看什么」的工程形态: 前面所有层学表示,最后一步做预测。

第二步:分类器直接焊死在最后一层。 第 09 章说过,Logistic 回归和 Softmax 回归都是「线性打分 + 一个挤压」。 所以——它们就是网络的一层: 二分类时,最后一层用一个神经元、Logistic 激活,输出直接读作 「属于正类的条件概率」;多分类时,最后一层放 C 个神经元、 Softmax 激活,输出就是各类的条件概率14

反过来说也一样成立:Logistic 回归就是一个没有隐藏层的神经网络。 第 09 章和这一章,从此是同一件事的两个端点。

8. 目标函数长什么样

问题: 参数从一个向量变成了一堆矩阵,学习准则要重写吗?

一个字都不用改。 还是第 05 章那套:交叉熵损失 + 一个正则化项15:

R(W, b) = (1/N) Σ L(yⁿ, ŷⁿ) + (λ/2)·‖W‖²_F
↑ 交叉熵,照旧 ↑ 所有权重矩阵的平方和,照旧

唯一的新细节:参数多了,惩罚项要写成对所有权重矩阵逐元素平方求和的形式, 这个写法有个名字叫 Frobenius 范数16。 书里还有一个容易漏的边注:正则化项只包含权重 W,不包含偏置 b16。 (为什么偏置不交税,书里留成了习题 4-9—— 直觉是:偏置只管平移,压它省不下多少「形状复杂度」。)

参数怎么更新,也还是梯度下降——但有一个新麻烦: 现在要对每一层的每个权重求导,逐个人工推链式法则,非常低效17。 这个麻烦的解法值一整章——第 11 章。

9. 主走查:一个 2-2-1 网络的前半程

输入: x = [1, 0]。网络结构和全部权重都是为演示写死的。 结构:2 个输入 → 2 个隐藏神经元(Logistic 激活)→ 1 个输出神经元(Logistic 激活)。 真实标签 y = 1。

权重(写死):

W₁ = [ 0.5 −0.3 ] b₁ = [ 0.1 ] W₂ = [0.7, −0.4] b₂ = 0.15
[ 0.2 0.8 ] [ −0.2 ]

第一层:算净输入,过弯。

z₁ = W₁·x + b₁ = [0.5×1 + 0.1, 0.2×1 − 0.2] = [0.6, 0.0]
a₁ = σ(z₁) = [σ(0.6), σ(0)] = [0.6457, 0.5000]

第二层:同样的两步。

z₂ = 0.7×0.6457 − 0.4×0.5 + 0.15 = 0.4020
ŷ = a₂ = σ(0.4020) = 0.5991

算损失(交叉熵,y = 1):

L = −log(ŷ) = −log(0.5991) = 0.5123

走完一遍,记住三个状态: 每层的净输入 z(弯前)、活性值 a(弯后)、最终损失。 第 11 章的返程,就是要从 0.5123 这个数出发, 一路算出「W₁ 里那个 0.5 该往哪边挪、挪多少」—— 而且每个中间量(z₁、a₁、z₂、ŷ)到时候都要再拿出来用一次。

10. 作者的判断与证据

书里给了定理的: 通用近似定理有严格表述和出处(Cybenko 1989、 Hornik 等 1989;对 ReLU 等其他激活函数的适用性也有证明)1011

书里给了明确结构判断的: 「前馈网络的表示能力不仅来自层数多, 还来自层与层之间的非线性激活函数」9——这是全章的题眼; 「Logistic 回归或 Softmax 回归也可以看作只有一层的神经网络」14—— 这把第 03 章和这一章焊在了一起。

书里坦白的: 通用近似定理「只是说明了表示能力足以近似给定的连续函数, 但并没有给出如何找到这样一个网络,以及是否是最优的」12—— 三个「没说」是书里自己点破的,不是我们挑刺。

书里提醒的: 「由于神经网络表示能力较强,也更容易在训练集上过拟合」12—— 表示能力和过拟合是同一枚硬币,书里在同一节里把两面都给了。

11. 边界与局限

前馈网络只是四种结构的第一种。 它假设输入是一个定长的向量, 信息只向前流——序列(第 15 章)、任意位置互看(第 20 章)、 关系结构(第 23 章)都装不进这个假设,各自由后面的结构补上。

通用近似定理管「存在」,不管「多大」和「怎么找」。 需要多宽、会不会过拟合、参数从哪来,它一概不答。 这一章给出的,是一个「有资格上场」的证明,不是施工图纸。

「为什么深度比宽度划算」没有展开。 定理说的是「够宽的两层就够」, 可实践中全是往深里做——书里在这章没有正面回答,只在前馈结构的语境下 给了复合函数的形式。这个问题在文献里叫「深度的有效性」,本书没有正面展开。

训练的具体困难只点了名。 非凸、梯度消失都留给了第 12 章和第 17 章。

12. 可带走的

  1. 一个神经元只做两步:加权和(净输入),过一道弯(活性值);
  2. 前馈 = 层与层之间只向前传,隐藏层就是输入输出之间的那些层;
  3. 整层一次矩阵乘法算净输入,激活函数再逐个分量作用——这是矩阵乘法的全部回报;
  4. 仿射变换的复合仍是仿射变换:没有那道弯,一百层等于一层;
  5. 表示能力来自弯,不只来自层数——深度数的就是弯的次数;
  6. 通用近似定理:够宽的两层能逼近任意连续函数;
  7. 但它只保证存在,不保证找得到、不保证最优、不说要多少个神经元;
  8. 表示能力强 ⟹ 更容易背下训练集,过拟合有结构根源;
  9. 最后一层就是 Softmax/Logistic 回归,前面所有层是在学一个新表示;
  10. 正则化只罚权重不罚偏置;参数怎么求,是下一章的事。

13. 原文地图

主题原书章原文位置
神经元与 MP 神经元第4章 前馈神经网络text/05-ch04.txt:51(搜「MP 神经元」) · text/05-ch04.txt:54(搜「几乎处处可导」)
净输入与活性值第4章 前馈神经网络text/05-ch04.txt:57(搜「净输入」) · text/05-ch04.txt:73(搜「称为激活函数」)
前馈结构与隐藏层第4章 前馈神经网络text/05-ch04.txt:98(搜「中间各层称为隐藏层」) · text/05-ch04.txt:36(搜「多层感知器」)
传播公式与复合函数第4章 前馈神经网络text/05-ch04.txt:136(搜「𝒛(𝑙) = 𝑾 (𝑙) 𝒂(𝑙−1) + 𝒃(𝑙)」) · text/05-ch04.txt:152(搜「复合函数」)
非线性为什么必需第4章 前馈神经网络text/05-ch04.txt:160(搜「仍然等价于一个仿射变换」)
通用近似定理第4章 前馈神经网络text/05-ch04.txt:168(搜「很强的函数逼近能力」) · text/05-ch04.txt:193(搜「任意的精度」)
定理没说什么第4章 前馈神经网络text/05-ch04.txt:200(搜「并没有给出如何找到」) · text/05-ch04.txt:202(搜「更容易在训练集上过拟合」)
网络作为特征转换第4章 前馈神经网络text/05-ch04.txt:218(搜「叫作特征抽取」) · text/05-ch04.txt:223(搜「其输出 𝜙(𝒙) 作为分类器的输入进行分类」)
最后一层即分类器第4章 前馈神经网络text/05-ch04.txt:232(搜「看成是网络的最后一层」)
目标函数与 Frobenius 范数第4章 前馈神经网络text/05-ch04.txt:277(搜「而不包含偏置」) · text/05-ch04.txt:278(搜「Frobenius」)
逐个求导低效第4章 前馈神经网络text/05-ch04.txt:301(搜「比较低效」)

Footnotes

  1. 出处:「第4章 前馈神经网络」第 51 段(text/05-ch04.txt:51,搜「MP 神经元」) 与第 54 段(text/05-ch04.txt:54,搜「几乎处处可导」)。 原文:「1943 年,心理学家 McCulloch 和数学家 Pitts 根据生物神经元的结构, 提出了一种非常简单的神经元模型,MP 神经元……现代神经元中的激活函数通常要求是 分段连续且几乎处处可导的函数(允许有限个不可导点,如 ReLU 在 x = 0 处), 以便利用梯度下降进行参数学习。」

  2. 出处:「第4章 前馈神经网络」第 57 段(text/05-ch04.txt:57,搜「净输入」) 与第 68 段(text/05-ch04.txt:68,搜「经过一个非线性函数后」)。 边注:净输入也叫净活性值。

  3. 出处:「第4章 前馈神经网络」第 98 段(text/05-ch04.txt:98,搜「中间各层称为隐藏层」)。 原文:「第 0 层称为输入层,最后一层称为输出层,中间各层称为隐藏层。 整个网络中不存在反馈连接,信号始终从输入层向输出层单向传播, 因此可以用一个有向无环图来表示。」

  4. 出处:「第4章 前馈神经网络」第 36 段(text/05-ch04.txt:36,搜「多层感知器」)。 原文:「前馈神经网络也经常称为多层感知器(MLP)。但『多层感知器』这一叫法 并不是十分严格,因为前馈神经网络通常由多层连续非线性变换复合而成, 而感知器本身对应的是不连续的阈值单元。」

  5. 出处:「第4章 前馈神经网络」第 116 段(text/05-ch04.txt:116,搜「表 4.1 前馈神经网络的记号」)。 边注:层数 L 一般只考虑隐藏层和输出层。

  6. 出处:「第4章 前馈神经网络」第 136 段(text/05-ch04.txt:136,搜「𝒛(𝑙) = 𝑾 (𝑙) 𝒂(𝑙−1) + 𝒃(𝑙)」)。 见公式(4.4)与(4.5)。

  7. 出处:「第4章 前馈神经网络」第 152 段(text/05-ch04.txt:152,搜「复合函数」)。 原文:「整个网络可以看作一个复合函数 φ(x; W, b)」, 完整链条见公式(4.8)。

  8. 出处:「第4章 前馈神经网络」第 141 段(text/05-ch04.txt:141,搜「仿射变换」)。 原文:「我们也可以把每个神经层看作一个仿射变换和一个非线性变换。」

  9. 出处:「第4章 前馈神经网络」第 160 段(text/05-ch04.txt:160,搜「仍然等价于一个仿射变换」)。 原文:「需要特别强调的是,前馈网络的表示能力不仅来自『层数多』, 还来自层与层之间的非线性激活函数。如果所有激活函数都是恒等映射, 那么多层仿射变换的复合仍然等价于一个仿射变换, 整个网络会退化为第3章中的线性模型。」 2 3

  10. 出处:「第4章 前馈神经网络」第 168 段(text/05-ch04.txt:168,搜「很强的函数逼近能力」)。 定理 4.1 的出处标注为 [Cybenko, 1989; Hornik et al., 1989]。 2

  11. 出处:「第4章 前馈神经网络」第 193 段(text/05-ch04.txt:193,搜「任意的精度」)。 原文:「对于具有线性输出层和至少一个使用『挤压』性质的激活函数的隐藏层组成的 前馈神经网络,只要其隐藏层神经元的数量足够,它可以以任意的精度来近似任何一个 定义在实数空间中的有界闭集上的连续函数。」 2

  12. 出处:「第4章 前馈神经网络」第 200 段(text/05-ch04.txt:200,搜「并没有给出如何找到」) 与第 202 段(text/05-ch04.txt:202,搜「更容易在训练集上过拟合」)。 原文:「通用近似定理只是说明了神经网络的表示能力足以近似给定的连续函数, 但并没有给出如何找到这样一个网络,以及是否是最优的。此外,当应用到机器学习时, 真实的映射函数并不知道,一般是通过经验风险最小化和正则化来进行参数学习。 由于神经网络表示能力较强,也更容易在训练集上过拟合。」 2 3 4

  13. 出处:「第4章 前馈神经网络」第 218 段(text/05-ch04.txt:218,搜「叫作特征抽取」) 与第 223 段(text/05-ch04.txt:223,搜「其输出 𝜙(𝒙) 作为分类器的输入进行分类」)。 原文:「多层前馈神经网络可以看作一个非线性复合函数,将输入映射到输出…… 因此,多层前馈神经网络也可以看成是一种特征转换方法。」 2

  14. 出处:「第4章 前馈神经网络」第 232 段(text/05-ch04.txt:232,搜「看成是网络的最后一层」)。 边注:「反之,Logistic 回归或 Softmax 回归也可以看作只有一层的神经网络。」 2

  15. 出处:「第4章 前馈神经网络」第 268 段(text/05-ch04.txt:268,搜「正则化经验风险函数」)。 见公式(4.15)。

  16. 出处:「第4章 前馈神经网络」第 277 段(text/05-ch04.txt:277,搜「而不包含偏置」) 与第 278 段(text/05-ch04.txt:278,搜「Frobenius」)。 边注:「注意这里的正则化项只包含权重参数 W,而不包含偏置 b。」 2

  17. 出处:「第4章 前馈神经网络」第 301 段(text/05-ch04.txt:301,搜「比较低效」)。 原文:「梯度下降法需要计算损失函数对参数的偏导数, 如果通过链式法则逐一对每个参数进行求偏导比较低效。 在神经网络的训练中经常使用反向传播算法来高效地计算梯度。」