跳到主要内容

让机器自己找规律

这一章讲三件事: 「机器学习」这三个字具体指哪三个动作; 那把量「答得有多差」的尺子为什么非得长成那样(书推了三版,每一版都是被上一版逼出来的); 以及 —— 第 05 章那组硬塞进去的权重,真的被学出来是什么样子。 它在全书链条里的位置是第 5 级台阶: 有了会算的单元,现在问它的那些数从哪儿来。 遇到的生词都在当场解释。

1. 顶层全景

一堆已知答案的例子:(x₁,y₁) (x₂,y₂) … (xₙ,yₙ)

│ ① 选一类候选答案 「我打算用一条直线来拟合」
▼ —— 定下了候选的范围,还没定是哪一条
一大堆候选函数

│ ② 定一把尺子 「离正确答案差多远,给我一个数」

每一条候选都有了一个分数

│ ③ 找分数最低的那一条 「蒙着眼往下坡挪,挪到不能再低」

一组具体的参数 —— 学完了

图说:书就是这么分的三步。第 ③ 步书说是「最重要也是最困难的」。
这一章第 3 节讲 ②,第 4 节讲 ③,第 6 节把这三步在一个真例子上跑一遍。

本章主走查: 直道上采到的一批路径中心点 (x, y)。 我们会在同一组点上把三版尺子各量一遍,再用「往下坡挪」走三步, 每一步都写出两个参数和分数的具体数值。 另有一处副走查在第 6 节: 把第 05 章那四个点的权重真的训出来。

2. 「机器学习」到底指哪三个动作

先看现象:它和「写程序」有什么不同

平常写程序,规则是你定的:「电压小于 10 就报警」。 机器学习是反过来的:你给一堆例子,让它自己把规则试出来。

书给的定义是:计算机通过对数据、事实或自身经验的自动分析和综合来获取知识; 基于样本数据建立数学模型,在没有特定算法的情况下做出预测或决策1

三个动作,一步都不能少

书把它拆成三步,而且每一步都给了一个精确的说法2:

干什么书的原话值得记
选模型划定一堆候选答案的范围「模型就是一组函数的集合」
判好坏定一把尺子,量「答得有多差」这把尺子叫损失函数
找最好的在候选里找那把尺子读数最小的书说这一步「最重要也是最困难的

第 ① 步最容易被误解: 「选模型」不是选一个具体的答案, 是选一整类答案。 说「我用一条直线来拟合」,就是把候选限定在了「所有直线」这个范围里; 到底是哪一条直线,要等 ② 和 ③ 走完才知道。

① 选模型:所有的直线 ② 定尺子:每条线得一个分
y = θ₀ + θ₁x 分低 = 离那些点近
θ₀ 和 θ₁ 还没定 分高 = 离得远
│ │
└──────────┬───────────────────┘

③ 找分最低的那一条:θ₀ = 0.49,θ₁ = 1.88

图说:①划范围,②定标准,③搜索。三步缺一件事都不成立。
这两个数是第 6 节走查的真实结果,不是随手写的。

一个必须提前说清的目标:不是「答对训练题」

书的定义很明确:机器学习的目标是让学到的函数**「能够很好地适用于新样本, 而非仅仅只是在训练样本上面表现良好」,这种能力叫泛化能力**3

这句话贯穿全书后面每一章。 第 03 章那个「切一份数据出来不给它看」是为了它; 第 11 章的 Dropout 是为了它;第 13 章那个「训到 400 轮反而更差」的教训, 根子也是它。

3. 给任何任务归位:两个轴

这一节是一张地图。有了它,你能给这本书后面每个任务找到位置。

轴一:按任务类型分

书列了三大常见类型,外加三种4:

类型要产出什么例子
回归一个连续的数这张图对应的转角是多少
分类一个类别这张图里有没有斑马线
聚类把没有标签的样本自己分成几堆把采到的数据自动分成几种路况
降维用少几个数表示原来很多个数——
密度估计从样本反推它们的分布——
排序学习学一个打分函数用来排序搜索结果排序

轴二:按有没有标签分

方式数据长什么样干什么
有监督学习输入和正确答案都给发现两者之间的关系,再拿去预测新数据5
无监督学习只有输入,没有答案让机器自己发现里面的模式或结构
半监督学习一部分有答案,大部分没有见下

半监督为什么成立,书给了理由,而且这个理由很漂亮: 它建立在一个基本规律上 ——「数据的分布必然不会是完全随机的」; 所以可以用少量有标签数据的局部特征,结合大量无标签数据的整体分布,找出隐藏的规律6

书还顺带说了它为什么有市场:没有标签的数据量通常远大于有标签的。

这本书两个任务各在哪一格

任务哪一格
自动巡航(吐一个 −1 到 1 的数)有监督 + 回归
目标检测(框出位置 + 说出类别)有监督 + 分类,外加定位

注意巡航那一格: 它的标签是「开出来的」(第 05 章讲过), 所以它是有监督的 —— 只是标注这件事被「开车」这个动作顺手做掉了。

4. 那把尺子:书推了三版,每一版都是被上一版逼出来的

这是本章第一个承重点,也是全书写得最漂亮的一段推理。

现象先行:两条线,哪条更好

一堆点散在纸上,你画一条直线去穿它们。换一条,再换一条。 哪条最好?凭眼睛看当然能看出个大概,但机器需要一个数。

书把目标说得很清楚:让预测值与真实值之间的差距最小; 差距越小,回归模型的效果越好7

现在的问题是:「差距」这个数怎么算?

走查准备:五个点,和一条明显很差的线

下面这五个点是我们为演示编的(书里的真实数据在一个 csv 文件里,正文没有):

(1, 2) (2, 4) (3, 6) (4, 8) (5, 10) —— 它们完美落在 y = 2x 上

现在故意画一条很差的线: y = 6 (一条水平线,压根不跟着点走)
y
10 ┤ ● ← 真实点
8 ┤ ●
6 ┼─────────────────────────────── ← 我们画的那条线 y=6
4 ┤ ●
2 ┤ ●
└──┬────┬────┬────┬────┬── x
1 2 3 4 5

图说:这条线明显很差——左边两个点在它下面,右边两个在它上面。
下面三版尺子,分别给这条线打了多少分。

第一版:直接算「预测减真实」,取平均

最直觉的做法:每个点算一下「预测值减真实值」,加起来除以点数8

点 (1,2): 6 − 2 = +4
点 (2,4): 6 − 4 = +2
点 (3,6): 6 − 6 = 0
点 (4,8): 6 − 8 = −2
点 (5,10): 6 − 10 = −4
──────────────────────────
加起来: 4 + 2 + 0 − 2 − 4 = 0
除以 5: 第一版给的分数 = 0

这条明显很差的线,拿了满分。

毛病在哪:预测值有时大于真实值、有时小于,正的和负的互相抵消了 —— 书的说法是,误差会「由于正负抵消导致累加误差变小甚至趋近于 0」9

第二版:先取绝对值,再取平均

很自然的补救:不管差多少,一律按正的算。

|+4| + |+2| + |0| + |−2| + |−4| = 12
除以 5: 第二版给的分数 = 2.4

这下不骗人了。 但书指出它有个新毛病:绝对值函数在 0 那一点没法求斜率 —— 它左边的斜率是 −1、右边是 +1,两边对不上;换句话说这个函数在 0 点不光滑10

为什么「能不能求斜率」这么要紧: 因为下一节那个「往下坡走」的办法, 全靠斜率来判断该往哪边走。 一个点上斜率说不清,那里就没法走。

|x| 的形状 x² 的形状
\ / \ /
\ / \ /
\ / \__/
\/ ↑
↑ 底部是圆的,任何一点都说得出斜率
尖的,这一点的斜率说不清

图说:第二版和第三版的差别就在这个尖上。

第三版:取平方,再取平均

把绝对值换成平方,尖角就被磨圆了。

4² + 2² + 0² + (−2)² + (−4)² = 16 + 4 + 0 + 4 + 16 = 40
除以 5: 第三版给的分数 = 8

这就是最经典的平方损失函数,又叫最小二乘法11。它同时解决了两个毛病: 正负不再抵消(平方一定非负),而且处处都能求斜率

书还有一个小细节值得说: 实际写公式时,分母上会多乘一个 2 —— 纯粹是为了后面对二次函数求导时算起来方便(求导会掉下来一个 2,正好约掉)12。 按这个写法,上面那条线的分数是 40 ÷ (2×5) = 4

这三步是「不许跳级」的正面样板: 每一版都不是凭空提出来的,而是上一版的毛病逼出来的。 记住这个推理形状 —— 第 07 章讲激活函数、第 08 章讲优化方法,用的都是同一个形状。

一句要记住的定位

损失函数是用来估量模型的预测值与真实值不一致程度的,它是一个非负的实数; 损失越小,模型越好13

而 ② 定好之后,机器学习那三步里的 ③ 就变成了一道纯粹的搜索题: 在所有候选里,找那个让损失最小的。

5. 怎么找:蒙着眼往下坡走

这是本章第二个承重点。

先看现象:为什么不能直接解出来

「找最小值」这件事,中学教过:求导,令导数等于零,解方程。 问题是:参数一多,这个方程就解不出来了 —— 第 08 章那个小网络有 10 个参数, 第 13 章那个巡航网络有几十万个。

所以要换一种办法。

做法:书的下山比方

书打了个很好的比方:你在山上想下到山底,但不知道山底在哪。 一个容易实现的办法是沿着当前位置高度下降最快的方向走; 走一段之后,原来那个方向未必还是最陡的,所以每走一段就重新选一次方向14

站在山坡上
│ ① 环顾脚下:哪个方向最陡?

朝那个方向走一小步
│ ② 到了新位置,原来的方向可能不对了

重新环顾,再走一小步


…一直到脚下已经平了(斜率接近 0)

图说:这就是「梯度下降」。它不需要知道山底在哪,只需要知道脚下哪边低。

「往哪边走」靠斜率: 书讲得很清楚,导数代表曲线在这一点的斜率。 导数为负,说明往右走损失会变小;导数为正,说明往左走才小。 所以做法是取导数的相反数,再乘一个系数,当作参数的增量15

「一小步」有多小:学习率

先认两个正式叫法: 上面一直说的「斜率」,在参数多于一个的时候,正式名字叫梯度; 而这整套「照梯度往下挪一小步、再重新看」的办法,正式名字就叫梯度下降

那个系数叫学习率(也叫步长)。书把它称为「梯度下降法中一个非常重要的超参数」—— 超参数 = 要你自己在训练之前定好、机器不会替你调的那种数(和它相对的是模型内部那些 靠训练自动调出来的参数)。学习率取值直接影响求解的速度, 取得不合适甚至根本得不到最优解16

学习率会怎样
太小每次挪一丁点,要挪非常多次才到底,慢得没法忍
合适稳稳地往下走
太大在谷底附近来回振荡,冲过去又冲回来,始终落不到最低点17
太小 合适 太大
\ \ \ ↗↘↗↘
\_ · · · · · \_ · · · \_ ↘↗↘↗
\_______ \_______ \_______
一点一点蹭 几步到底 在谷底两侧来回弹

图说:学习率不是「越小越保险」——太小的代价是永远走不到。

(「参数 / 超参数」这条区分是我们补的,书没有明说,但它是后面每一章都要用到的口径。)

一条口径:两个参数必须同步更新

书特意强调了一处:一条直线有 θ₀ 和 θ₁ 两个参数, 它们必须同步更新 —— 因为两个更新公式里都同时含着 θ₀ 和 θ₁; 如果先更新一个、再拿更新后的值去算另一个,那第二个就被污染了18

❌ 错的做法 ✅ 对的做法
θ₀ ← 用旧的 θ₀、θ₁ 算 先用旧的 θ₀、θ₁ 把两个增量都算出来
θ₁ ← 用【新的】θ₀ 算 ← 污染 再一起更新

图说:这条口径第 08 章还会再用一次——那里有十个参数,一样的规矩。

6. 主走查:同一批点,三版尺子 + 三步下坡

这是本章的落点。所有中间结果都写出来。

输入(为演示编的)

五个点:(1,2) (2,4) (3,6) (4,8) (5,10)
模型: y = θ₀ + θ₁x —— 「选模型」这一步选的就是「所有直线」
起点: θ₀ = 0,θ₁ = 0 —— 从「一条压在 x 轴上的线」开始
学习率:α = 0.1
尺子: 平方损失,分母带 2 J = (1/(2×5)) × Σ(预测 − 真实)²

↑ 这五个点、起点和学习率都是我们为演示定的,不是书里的数。

三版尺子,量同一条差线(θ₀ = 6,θ₁ = 0)

版本算出来判定
① 直接取平均0❌ 骗人 —— 这条线明明很差
② 取绝对值再平均2.4⚠️ 不骗人了,但 0 点不可导
③ 取平方再平均8(带 2 的写法是 4)✅ 又诚实又光滑,用它

三步下坡(用第三版尺子)

起点 θ₀ = 0 θ₁ = 0 损失 J = 22.0000
(这条线是 y = 0,五个点全在它上方,差得很远)

─ 第 1 步 ────────────────────────────────────────
两个方向: θ₀ 方向的斜率 = −6.0 θ₁ 方向的斜率 = −22.0
(都是负的 ⇒ 两个参数都该往大了调)
各挪 0.1 倍:θ₀ = 0 − 0.1×(−6.0) = 0.6
θ₁ = 0 − 0.1×(−22.0) = 2.2
新损失: J = 0.7600 ← 一步从 22 掉到 0.76

─ 第 2 步 ────────────────────────────────────────
两个方向: θ₀ 斜率 = +1.2 θ₁ 斜率 = +4.0
(都是正的 ⇒ 冲过头了,两个都该往回收)
各挪 0.1 倍:θ₀ = 0.6 − 0.12 = 0.4800
θ₁ = 2.2 − 0.40 = 1.8000
新损失: J = 0.0472

─ 第 3 步 ────────────────────────────────────────
两个方向: θ₀ 斜率 = −0.12 θ₁ 斜率 = −0.76
各挪 0.1 倍:θ₀ = 0.4920 θ₁ = 1.8760
新损失: J = 0.0226

最终这条线:y = 0.492 + 1.876x 真值是 y = 2x
图说:三步之内,损失从 22 掉到 0.02——差了一千倍。
两个参数从 (0, 0) 走到了 (0.49, 1.88),越来越接近 (0, 2)。
**注意第 2 步两个斜率都变成了正的:那是因为第 1 步冲过头了。**
「来回收敛」正是梯度下降的常态,不是出错。
这些数是我们按上面那五个点算出来的,可以自己核。

每一步注意那条同步更新的口径: 两个斜率都是用这一步开始时的 θ₀、θ₁ 算的, 算完之后两个参数才一起更新。

7. 副走查:第 05 章那组权重,真的学出来是什么样

第 05 章末尾欠了一句话:「那组权重是我们硬塞的,它本该是学出来的。」这一节还账。

书给的更新规则

书在第 8 章给了单层感知器的参数更新方式:训练的过程就是学习获得它的权重和偏置的过程; 如果把偏置也看成一个特殊的权重,问题就化归为学那些权重;更新时用一个学习率 η, 取值范围是 0 到 119

规则一句话:

每个权重 += 学习率 × (真实标签 − 当前输出) × 这个输入。

它为什么合理: 如果答对了,「真实 − 输出」等于 0,权重一动不动; 如果答错了,这一项非零,而且乘上输入之后,输入越大的那个权重被调得越多 —— 因为它对这次的错误负的责任最大。

走查:从 (0, 0) 起手

用第 05 章那四个点,取 η = 0.1,起点 w = (0, 0)、b = 0 (η 和起点是我们定的;四个点是书给的):

── 第 1 轮 ──────────────────────────────────────────────
(5,4) 标+1: z = 0 → 输出 +1 ✅ 对,不动
(4,5) 标+1: z = 0 → 输出 +1 ✅ 对,不动
(1,2) 标−1: z = 0 → 输出 +1 ❌ 错
更新量 = 0.1 × (−1 − 1) = −0.2
w₁ = 0 − 0.2×1 = −0.2 w₂ = 0 − 0.2×2 = −0.4 b = −0.2
(3,2) 标−1: z = −0.2×3 − 0.4×2 − 0.2 = −1.6 → 输出 −1 ✅ 对

── 第 2 轮 ──────────────────────────────────────────────
(5,4) 标+1: z = −2.8 → −1 ❌ 错 更新量 = +0.2
w = (0.8, 0.4) b = 0
(4,5) 标+1: z = 5.2 → +1 ✅ 对
(1,2) 标−1: z = 1.6 → +1 ❌ 错 w = (0.6, 0.0) b = −0.2
(3,2) 标−1: z = 1.6 → +1 ❌ 错 w = (0.0, −0.4) b = −0.4

── … 一直到第 15 轮 ─────────────────────────────────────
第 15 轮跑完,四个点一次都没错。停。

学到的结果: w = (1.0, −0.2) b = −2.8

验一遍:
(5,4) → 1.0×5 + (−0.2)×4 + (−2.8) = 5 − 0.8 − 2.8 = +1.4 → +1 ✅
(4,5) → 4 − 1.0 − 2.8 = +0.2 → +1 ✅
(1,2) → 1 − 0.4 − 2.8 = −2.2 → −1 ✅
(3,2) → 3 − 0.4 − 2.8 = −0.2 → −1 ✅

图说:没有人告诉它那条线该画在哪儿。
它只是一次次「答错就把权重往对的方向推一点」,推了六十次(15 轮 × 4 个点)之后,
线自己站到了两组点中间。
**这些中间数值是我们按书给的更新规则算出来的**——书只给了规则,没给过程。

两件事值得单独记

第一,学出来的答案和人凑的答案不一样,但都对。 第 05 章我们凑的是 w = (1, 1)、b = −6;学出来的是 w = (1.0, −0.2)、b = −2.8。 两条线画在纸上位置不同,但都把四个点分对了 —— 因为能分开它们的直线有无数条。

第二,答对了就不动。 看第 1 轮前两个点:全对,权重一个都没改。 「学习」只在犯错的时候发生。

8. 这一套在这本书里的真实用途

书没有让线性回归停在教科书例题上,它给了一个具体的活。

在智能车竞赛里,摄像头采到车道图,经过处理之后能得到若干个路径中心点; 要用这些点拟合出一条车道中心线,供车后面跟着走20

书给的数据是:一个 csv 文件,里面是在直线路段采集到的 42 个路径中心点, 每个点两个坐标21

摄像头拍到的一帧
│ 图像处理,找出车道中间那条线上的点

42 个 (x, y) 点,散落在图上
│ 用这一章那三步:选直线 → 平方损失 → 梯度下降

一条直线 y = θ₀ + θ₁x


车沿着它走

图说:42 这个数是书给的。
这就是本章那套东西在这辆车上的第一个真实工作。

书用的是一个现成的机器学习工具包来做这件事 —— 它涵盖了几乎所有主流的经典算法, 分类、回归、聚类、降维、模型选择、数据预处理各有一块22 —— 换句话说,上面那三步不用你自己实现,一句调用就完了。 换句话说,上面那三步不用你自己实现,一句调用就完了。

判断(我们的,不是书里的): 这一节暴露了这本书的一个真实取舍 —— 它讲原理时手推,做实际项目时调库。 这不是矛盾,是对的教学法: 手推一遍是为了以后调库时知道那一行到底在干什么。 如果错,会错在: 如果读者跳过手推、只记住调库,那这一章就白读了 —— 判据是:能不能在第 08 章那条更长的走查上把每一步的数算出来。

9. 作者的判断与证据

说法是哪一类
机器学习三步;「模型就是一组函数的集合」教科书式的共识框架,书没给出处。好用,当地图使
泛化能力的定义有证据: 标准定义,而且是本书后面很多做法的目标
损失函数三版演进有证据,而且是全书最好的一段推理 —— 每一步的毛病都点得很准
分母上乘 2「为了便于后续求导」有证据: 这是技术性的写法约定,不影响最优解落在哪儿
「第 ③ 步最重要也是最困难」作者的判断。 我们认为它站得住 —— 后面第 08 章有一整章在做这一步
半监督学习成立的前提是「数据的分布必然不会是完全随机的」作者给的理由,不是证明。 这是一个假设,不是定理;真实数据不满足它的时候,半监督就会失效
学习率「太小太慢、太大振荡」有证据(机制上说得通),但书没有给具体实验。 第 09 章的 lr = 0.1、第 13 章的训练曲线才是这本书真正的证据
感知器的参数更新式有证据: 书给了公式(是图片)和 η 的取值范围;中间过程是我们算的

10. 边界与局限

  • 这一章对应原书 §7.3—7.5,外加从第 8 章 8.1.2 前移过来的感知器更新规则。 原书把「感知器怎么学」放在第 8 章开头,而那里的上下文已经是多层网络了 —— 放在这里更顺,因为它正是「权重从哪儿来」这个问题的最小答案。
  • numpy、pandas、matplotlib 那一节我们整体移走了: 数组挪到第 04 章(那一章正需要给「图像是个数组」里的数组正名), 读表格挪到第 03 章,画损失曲线挪到第 09 章(那里才第一次真的要靠曲线判断该不该停)。 原书把这三个库塞在「同步更新」和「路径拟合」中间,把这一章唯一那条推理链拦腰打断了。
  • 书没有讲为什么梯度下降能找到最小值,也没有讲它什么时候找不到。 「局部最优」「鞍点」这些词要到第 08 章才第一次出现。
  • 书没有讲多元线性回归。 全章只讲一个自变量的情形。
  • 书没有讲怎么判断「该停了」。 迭代到什么时候算完,这一章一个字没提; 第 09 章会用损失曲线回答,第 13 章会给出一个反直觉的答案。
  • 那 42 个点的具体坐标在 csv 文件里,正文没有。 所以本章走查用的五个点是我们编的。

11. 可带走的

全章主走查一行写完:

五个点 (1,2)(2,4)(3,6)(4,8)(5,10) —— 拿一条明显很差的水平线 y=6 试三版尺子: 第一版给 0(正负抵消,骗人)、第二版给 2.4(不骗人但 0 点不可导)、 第三版给 8(平方,又诚实又光滑)。

然后从 θ₀=0、θ₁=0 起手、学习率 0.1,走三步:损失 22.0 → 0.76 → 0.047 → 0.023, 参数走到 θ₀=0.492、θ₁=1.876(真值是 0 和 2)。

这五个点、起点、学习率都是为演示定的;三版尺子的推理和公式是书给的。

  1. 机器学习就三个动作: 划一堆候选(选模型)、定一把尺子(损失函数)、 找尺子读数最小的那个(优化);
  2. 「模型就是一组函数的集合」 —— 选模型不是选答案,是选答案的范围;
  3. 目标不是答对训练题,是泛化 —— 在没见过的数据上还能答对;
  4. 两个轴给任务归位: 按产出分(回归 / 分类 / 聚类),按有没有标签分 (有监督 / 无监督 / 半监督);这本书的两个任务都是有监督的;
  5. 尺子的三版演进: 直接取平均会正负抵消 → 取绝对值补上了,但 0 点没法求斜率 → 取平方,两个毛病一起解决。每一版都是被上一版逼出来的;
  6. 平方损失 = 最小二乘;公式分母多乘一个 2 纯粹是为了求导时约得掉;
  7. 找最小值靠「蒙着眼下山」: 看脚下哪边最陡,朝反方向挪一小步,再重新看;
  8. 学习率是那「一小步」的大小,而且不是越小越好 —— 太小走不到,太大在谷底来回弹;
  9. 多个参数必须同步更新 —— 都用这一轮开始时的旧值算增量,算完一起改;
  10. 权重真的能被学出来: 四个点、从 (0,0) 起手、答错就往对的方向推一点, 十五轮之后那条分界线自己站到了两组点中间。答对了就不动 —— 学习只在犯错时发生。

12. 原文地图

主题原书章原文位置
机器学习的定义第7章 Python计算生态及机器学习概述text/08-ch07-7-python.txt:327(搜「自动分析和综合获取知识」)
三步:选模型 / 判好坏 / 找最好的第7章 Python计算生态及机器学习概述text/08-ch07-7-python.txt:333(搜「模型就是一组函数的集合」) · text/08-ch07-7-python.txt:337(搜「最重要也是最困难的」)
泛化能力第7章 Python计算生态及机器学习概述text/08-ch07-7-python.txt:331(搜「泛化能力」)
按任务分类:回归 / 分类 / 聚类等第7章 Python计算生态及机器学习概述text/08-ch07-7-python.txt:349(搜「确定因变量与自变量之间的相关关系」) · text/08-ch07-7-python.txt:357(搜「降维指采用某种映射方法」)
按学习方式分类;半监督的前提第7章 Python计算生态及机器学习概述text/08-ch07-7-python.txt:363(搜「已知数据集正确输出」) · text/08-ch07-7-python.txt:369(搜「数据的分布必然不会是完全随机的」)
优化目标:预测值与真实值差距最小第7章 Python计算生态及机器学习概述text/08-ch07-7-python.txt:389(搜「差距最小」)
第一版损失的毛病:正负抵消第7章 Python计算生态及机器学习概述text/08-ch07-7-python.txt:395(搜「正负抵消」)
第二版损失的毛病:绝对值在 0 点不可导第7章 Python计算生态及机器学习概述text/08-ch07-7-python.txt:397(搜「并不光滑」)
第三版:平方损失 / 最小二乘;损失函数的定位第7章 Python计算生态及机器学习概述text/08-ch07-7-python.txt:409(搜「最小二乘法」)
分母乘 2 是为了求导方便第7章 Python计算生态及机器学习概述text/08-ch07-7-python.txt:439(搜「便于后续二次函数求导」)
梯度下降的下山比方第7章 Python计算生态及机器学习概述text/08-ch07-7-python.txt:419(搜「不知道山下在哪」)
导数即斜率;取负梯度乘系数作增量第7章 Python计算生态及机器学习概述text/08-ch07-7-python.txt:421(搜「曲线某点处切线的斜率」) · text/08-ch07-7-python.txt:425(搜「对导数取负再乘以一个系数」)
学习率的定义与过大过小的后果第7章 Python计算生态及机器学习概述text/08-ch07-7-python.txt:427(搜「学习率(Learning Rate」) · text/08-ch07-7-python.txt:431(搜「反复振荡」)
两个参数必须同步更新第7章 Python计算生态及机器学习概述text/08-ch07-7-python.txt:441(搜「需要同步更新」)
智能车路径拟合:42 个中心点第7章 Python计算生态及机器学习概述text/08-ch07-7-python.txt:447(搜「42个样本」)
机器学习工具包的六大模块第7章 Python计算生态及机器学习概述text/08-ch07-7-python.txt:449(搜「涵盖了几乎所有主流的机器学习算法」)
训练 = 学权重和偏置;学习率 η ∈ (0,1)第8章 深度学习基础及车辆识别项目实践text/09-ch08.txt:37(搜「学习获得它的权重和偏置」) · text/09-ch08.txt:39(搜「取值范围为(0,1)」)
「单层感知器可以理解为线性回归模型」第8章 深度学习基础及车辆识别项目实践text/09-ch08.txt:35(搜「线性回归模型」)

Footnotes

  1. 出处:「第7章 Python计算生态及机器学习概述」第 327 段(text/08-ch07-7-python.txt:327,搜「自动分析和综合获取知识」)。原文:机器学习算法基于样本数据(训练集)建立数学模型,用于在没有特定算法的情况下进行预测或者决策。

  2. 出处:「第7章 Python计算生态及机器学习概述」第 333—337 段(text/08-ch07-7-python.txt:333,搜「模型就是一组函数的集合」;text/08-ch07-7-python.txt:337,搜「最重要也是最困难的」)。原文还说明:回归问题的损失一般采用欧式距离,分类问题一般采用交叉熵。

  3. 出处:「第7章 Python计算生态及机器学习概述」第 331 段(text/08-ch07-7-python.txt:331,搜「泛化能力」)。

  4. 出处:「第7章 Python计算生态及机器学习概述」第 349 段(text/08-ch07-7-python.txt:349,搜「确定因变量与自变量之间的相关关系」)与第 357 段(text/08-ch07-7-python.txt:357,搜「降维指采用某种映射方法」)。

  5. 出处:「第7章 Python计算生态及机器学习概述」第 363 段(text/08-ch07-7-python.txt:363,搜「已知数据集正确输出」)。原文明确把回归、分类、排序都归入有监督学习。

  6. 出处:「第7章 Python计算生态及机器学习概述」第 369 段(text/08-ch07-7-python.txt:369,搜「数据的分布必然不会是完全随机的」)。原文还说明:没有标签的数据量通常大于有标签的数据量。

  7. 出处:「第7章 Python计算生态及机器学习概述」第 389 段(text/08-ch07-7-python.txt:389,搜「差距最小」)。原文:「优化回归线的目标是通过这条回归线得到的预测值与真实值之间的差距最小。距离越小,代表回归模型的效果越好。」

  8. 出处:「第7章 Python计算生态及机器学习概述」第 393 段(text/08-ch07-7-python.txt:393,搜「直接计算预测值」)。走查里那五个点和那条 y=6 的差线都是我们为演示编的,书里的对应数据在一个 csv 文件里、正文没有。

  9. 出处:「第7章 Python计算生态及机器学习概述」第 395 段(text/08-ch07-7-python.txt:395,搜「正负抵消」)。

  10. 出处:「第7章 Python计算生态及机器学习概述」第 397 段(text/08-ch07-7-python.txt:397,搜「并不光滑」)。原文:绝对值函数在 x=0 处连续,但导数在左边为 −1、右边为 +1,二者并不相等,所以在 x=0 处不可导。

  11. 出处:「第7章 Python计算生态及机器学习概述」第 409 段(text/08-ch07-7-python.txt:409,搜「最小二乘法」)。原文还列了其他几种损失函数(对数损失、指数损失、hinge 损失),并说明「不同的损失函数有不同的优缺点」。

  12. 出处:「第7章 Python计算生态及机器学习概述」第 439 段(text/08-ch07-7-python.txt:439,搜「便于后续二次函数求导」)。

  13. 出处:「第7章 Python计算生态及机器学习概述」第 409 段(text/08-ch07-7-python.txt:409,搜「非负实值函数」)。

  14. 出处:「第7章 Python计算生态及机器学习概述」第 419 段(text/08-ch07-7-python.txt:419,搜「不知道山下在哪」)。原文还指出:最开始选定的方向并不一直是下降最快的方向,所以每行进一段距离就要重新选择。

  15. 出处:「第7章 Python计算生态及机器学习概述」第 421 段(text/08-ch07-7-python.txt:421,搜「曲线某点处切线的斜率」)与第 425 段(text/08-ch07-7-python.txt:425,搜「对导数取负再乘以一个系数」)。

  16. 出处:「第7章 Python计算生态及机器学习概述」第 427 段(text/08-ch07-7-python.txt:427,搜「学习率(Learning Rate」)。原文把它称为「梯度下降法中一个非常重要的超参数」。「参数 / 超参数」这条区分是我们补的口径,书没有明说。

  17. 出处:「第7章 Python计算生态及机器学习概述」第 431 段(text/08-ch07-7-python.txt:431,搜「反复振荡」)。

  18. 出处:「第7章 Python计算生态及机器学习概述」第 441 段(text/08-ch07-7-python.txt:441,搜「需要同步更新」)。这条口径第 8 章的反向传播走查里又强调了一次。

  19. 出处:「第8章 深度学习基础及车辆识别项目实践」第 37 段(text/09-ch08.txt:37,搜「学习获得它的权重和偏置」)与第 39 段(text/09-ch08.txt:39,搜「取值范围为(0,1)」)。更新公式本体在书里是图片,文字给出了它的作用和 η 的范围;本节走查里 η = 0.1、起点 (0,0) 是我们定的,四个点是书给的(text/09-ch08.txt:41,搜「标签为1的(5,4)」),中间每一步的数是我们按这条规则算出来的。

  20. 出处:「第7章 Python计算生态及机器学习概述」第 447 段(text/08-ch07-7-python.txt:447,搜「路径中心点」)。

  21. 出处:「第7章 Python计算生态及机器学习概述」第 447 段(text/08-ch07-7-python.txt:447,搜「42个样本」)。原文:文件里存有一组在直线路段采集到的路径点信息,共 42 个样本,每个样本包含 x、y 坐标值。

  22. 出处:「第7章 Python计算生态及机器学习概述」第 449—461 段(text/08-ch07-7-python.txt:449,搜「涵盖了几乎所有主流的机器学习算法」)。原文列出的六大模块是:分类、回归、聚类、降维、模型选择、预处理。