它怎么知道自己错了,又该往哪儿改
这一章讲三件事: 「答得有多差」这个数具体怎么量出来; 十个参数怎么一次就全部算清各自该往哪挪; 以及一个最常被搞混的区分 —— 反向传播只负责算方向,它不是学习算法。 它在全书链条里的位置是第 7 级台 阶,也是全书理论最厚的一章。 这一章有全书唯一一条从头走到一万次更新之后的完整数值走查。 遇到的生词都在当场解释。
1. 顶层全景
第 07 章走完的地方:
输入 [0.02, 0.7] → 网络 → 输出 [0.62586, 0.59613]
期望 [0, 1 ]
↑ 差得很远
│
│ ① 量一下到底差多少 —— 用第 06 章那把平方尺子
▼
一个数:0.27741
│
│ ② 从这个数出发,倒着 往回扫一遍,
│ 算出十个参数「各自该往哪挪、挪多少」
▼
十个方向(这一步叫反向传播)
│
│ ③ 照方向各挪一小步(这一步叫梯度下降,第 06 章讲过)
▼
十个新参数 → 重新前向算一遍 → 输出离期望近了一点点
│
└───────────── 重复一万次 ─────────────┐
▼
输出 [0.00793, 0.99198],误差 0.000063612
图说:②和③是两件事,不是一件。这是本章最要紧的一个区分。
这条链就是本章的主走查,它接着上一章那组数字往下走。
一条口径先写死,免得后面混:本章一律说「更新一次 / 更新一万次」,不用「轮」这个字。 「一轮」在这本书后面另有所指(整个训练集完整过一遍),那是第 09 章的事。
2. 第一步:量出「差了多少」
现象先行
上一章那张网给了 [0.62586, 0.59613],期望是 [0, 1]。 你一眼能看出「差得很远」,但机器需要一个数。
做法:第 06 章那把尺子,直接拿来用
书用的是平方误差:每个输出神经元各算一笔,再加起来1。
o₁ 这一头: 期望 0,实际 0.62586
差 = 0 − 0.62586 = −0.62586
平方的一半 = 0.5 × 0.62586² = 0.19585
o₂ 这一头: 期望 1,实际 0.59613
差 = 1 − 0.59613 = 0.40387
平方的一半 = 0.5 × 0.40387² = 0.08156
加起来: 0.19585 + 0.08156 = 0.27741 ← 书给的数,我们算下来是 0.277404
图说:「一半」是那个方便求导的写法(第 06 章讲过,求导会掉一个 2 下来正好约掉)。
0.27741 这个数是书给的,两个分项是我们算的。
这个数不只是给人看的分数
书列了损失函数的四个作用,其中第 三个最要紧2:
| 作用 | 说明 |
|---|---|
| 衡量准确性 | 给「答得有多差」一个数 |
| 优化模型 | 有了这个数,才谈得上「让它变小」 |
| 算反向传播的信号 | 它本身就是下一步的起点 |
| 评估模型 | 比较训练集、验证集上的损失,看模型的泛化情况 |
第三条是这一章的入口:整条回传链的第一节,就是「损失对输出的斜率」。
另有一整类尺子,量的不是「差多远」
书还提了一件事:损失函数分两大流派 —— 一派量两个数隔多远(平方误差就属于这一派), 另一派量两个概率分布差多远3。
那一类里最常用的叫交叉熵,分类任务基本都用它。 但要到第 09 章那个真项目里才用得上,所以那里再讲 —— 那里会给一个具体的数:模型说「第一类的可能性是 0.7」而答案正是第一类, 它要挨多重的罚。