all_lessons/数学的逻辑/35第 36 课 / 共 44 课

第十部分 · 把它们拼成学习器

第一台学习机器:线性回归与逻辑回归

前面三个部分,我们一件件打磨工具:把数据放进空间、把学习变成优化、和不确定性讲道理。零件已经齐了。现在第一次把它们拧成一台真正能跑的机器——它能预测房价,也能判断邮件是不是垃圾。让人惊讶的是:所谓"第一台学习机器",不过是前面那些工具在同一道题上的合体

线性回顾
上一课:我们学了采样与蒙特卡洛——当期望、积分写不出解析式时,就用随机撒点去逼近它(回扣第 08 课的积分、第 10 课的大数定律)。到这里,第七到第九部分的全部工具都备齐了。
留下的问题:工具是一件件单独学的——内积、梯度、MLE、交叉熵……它们各自漂亮,但一台真正的学习器到底长什么样?这些零件怎么咬合成一个整体?
本课新增:两台最小的、却完整的学习机器。线性回归预测连续值,逻辑回归做二分类。我们会看到:线性回归的最小二乘正是高斯噪声假设下的最大似然;逻辑回归则把 sigmoid、交叉熵、梯度下降三件工具焊在一起。监督学习的 "Hello World",就是前面所有课的总装车间。
本课路线
(1) 什么是监督学习:从带标签的 (x, y) 里学一个 f;(2) 线性回归:ŷ = w·x + b 与最小二乘损失;(3) 揭面纱——最小二乘 = 高斯噪声下的 MLE(合体第 20、31 课);(4) 分类为什么不能直接套回归;(5) 逻辑回归:sigmoid 把分数压成概率;(6) 交叉熵损失 + 梯度下降把它训练出来(合体第 25、27、33 课);(7) 一句话看穿:两台机器是同一套零件的两种装法。

监督学习:把"从例子里学"写成一道数学题

回到第 19 课的设定。我们手里有一堆带标签的样本:每个样本是一对 (x, y)x 是输入(一套特征,写成向量),y 是我们想预测的答案(标签)。比如预测房价:x = (面积, 卧室数, 楼层…),y = 成交价。任务是从这些例子里学出一个函数 f,使得对没见过的新 xf(x) 也能给出靠谱的 y

"靠谱"必须可量化,否则机器无从优化。于是我们沿用第 19 课的三件套:一个模型(函数 f 的形状,里面有可调的参数)、一个损失(量 f(x) 离真 y 有多远)、一个优化(调参数把损失压到最小)。换句话说——

学习 = argmin(参数) 损失(参数; 数据)
读作"让总损失最小的那组参数,就是学到的模型"。argmin 读作"使……取最小值的自变量"。这正是第八部分"学习就是优化"的核心句。

最简单的 f 长什么样?让它是线性的——这就回到了第 11、20 课。两类任务由此分叉:y 是连续数(房价)就是回归y 是类别(是/否)就是分类。先看回归。

线性回归:一条直线,与它的最小二乘损失

线性回归赌一件事:y 大致是各特征的加权和。模型写成

ŷ = w·x + b = w₁x₁ + w₂x₂ + … + wₙxₙ + b
读作"预测值 ŷ(y 戴帽,表示估计)等于权重向量 w 与特征向量 x 的内积,再加偏置 b"。· 是第 20 课的点积,wᵢ 是第 i 个特征的权重,b 是整体平移。

怎么衡量这条直线(高维里是个超平面)拟合得好不好?最自然的想法:把每个样本的误差 yᵢ − ŷᵢ 平方后加起来。平方有两个好处——负误差不会和正误差互相抵消,而且对大偏差惩罚更重。这就是最小二乘损失(均方误差):

L(w, b) = (1/N) ∑ (yᵢ − (w·xᵢ + b))²
读作"损失 L 等于:对全部 N 个样本,把'真值 yᵢ 减去预测 w·xᵢ+b'平方,再求平均"。 读作"求和"。

训练就是 argmin(w,b) L。这是个开口向上的碗(关于 w, b的——第 28 课),所以有唯一的全局最低点。它甚至有闭式解(令梯度为零,第 25 课),即所谓"正规方程"。但更要紧的是它的几何意思:第 20 课已经讲透——最小二乘就是把标签向量 y 正交投影到特征张成的子空间上,残差垂直于那个子空间。回归不是新东西,是投影。

揭开面纱:最小二乘其实是 MLE

这里是本课第一个"合体时刻"。我们凭直觉选了"平方误差",但凭什么是平方,不是绝对值、不是四次方?答案藏在第 31 课的最大似然里。

假设真实世界是这样的:y 确实由直线生成,只是被一团高斯噪声(第 29、30 课)扰动了——

y = w·x + b + ε,   ε ~ N(0, σ²)
读作"y 等于直线值加上噪声 ε,而 ε 服从均值 0、方差 σ² 的正态分布"。~ 读作"服从",N 是高斯(正态)分布。

那么在给定直线参数时,观测到某个 yᵢ 的概率密度,正比于 exp(−(yᵢ − ŷᵢ)² / (2σ²))(高斯钟形的指数里就藏着平方误差)。把全体样本的密度相乘得到似然,再取对数(第 31 课的老办法——对数把连乘变连加,且不改最大值位置):

log L(w,b) = 常数 − (1/(2σ²)) ∑ (yᵢ − ŷᵢ)²
读作"对数似然等于一个常数,减去(与平方误差成正比的项)"。

看清楚了吗?让对数似然最大,就等于让 ∑(yᵢ − ŷᵢ)² 最小。 最大似然估计和最小二乘给出完全相同的答案。我们以为在"凭手感选损失",其实是在"假设噪声是高斯的、然后做 MLE"。第 20 课的几何投影、第 31 课的概率推断,在这里指向同一条直线——这正是合体。

合体清单 · 线性回归
模型 ŷ=w·x+b = 内积(第 20 课);损失 = 平方误差 = 高斯噪声下的最大似然(第 29–31 课);几何 = 正交投影到特征子空间(第 20、21 课);求解 = 凸优化的唯一最低点(第 25、28 课)。一台机器,四门课。

分类为什么不能直接套回归

现在换任务:判断邮件是不是垃圾、肿瘤是良性还是恶性。标签 y 只取 0 或 1。能不能偷懒,直接拿线性回归去拟合这些 0/1?不行,而且坏得很具体:

我们需要两样新东西:一个把任意实数压进 (0,1) 的函数(好当概率读),和一个专为概率设计的损失。两样都是现成的。

逻辑回归:sigmoid 把分数压成概率

先解决"压进 (0,1)"。还是先算一个线性分数 z = w·x + b(同样是内积),再让它过一道sigmoid 函数

σ(z) = 1 / (1 + e⁻ᶻ)
读作"sigmoid 在 z 处的值,等于 1 除以(1 加上 e 的负 z 次方)"。σ 读作"西格玛",e 是自然常数 ≈ 2.718。

它的图像是一条优雅的 S 曲线:z → −∞σ → 0z → +∞σ → 1z = 0 处恰好是 0.5。于是 ŷ = σ(w·x + b) 就能干净地读作"预测为正类的概率"。分界线(决策边界)正是 w·x + b = 0 那个超平面:一边概率 > 0.5 判正,一边 < 0.5 判负。模型仍是线性的(边界是直的),只是把线性分数翻译成了概率

用交叉熵 + 梯度下降把它训练出来

有了概率输出,第二步:选损失。这正是第 33 课交叉熵登场的地方。把真标签 y∈{0,1} 看成"真分布",把模型输出 ŷ 看成"预测分布",两个分布的交叉熵(在二分类下)是

L = −(1/N) ∑ [ yᵢ·log ŷᵢ + (1−yᵢ)·log(1−ŷᵢ) ]
读作"损失等于:对每个样本,若真值是 1 就罚 −log ŷ,若真值是 0 就罚 −log(1−ŷ),再取平均"。log 读作"对数"。

这个损失正好满足上一节的要求:当模型自信地犯错(真值 1 却预测 ŷ→0),−log ŷ → +∞,惩罚趋于无穷大。而且它绝非凭空捏造——和线性回归一样,它就是伯努利噪声下的最大似然(第 31 课):让交叉熵最小 = 让"模型生成这批标签"的似然最大。第 33 课早就剧透过:交叉熵损失是 MLE 自然冒出来的分类损失。

最后一步:怎么求 argmin?逻辑回归没有线性回归那样的闭式解,但它的损失对 w, b 仍是凸的(第 28 课),所以梯度下降(第 25、27 课)必能滑到全局最优。更妙的是,sigmoid + 交叉熵的组合让梯度异常简洁:

∂L/∂w = (1/N) ∑ (ŷᵢ − yᵢ)·xᵢ
读作"损失对权重 w 的梯度,等于每个样本的'预测减真值'乘上它的特征,再平均"。 读作"偏导"。

"预测减真值"——误差越大,这一步迈得越大;误差为零,就不动了。和线性回归的梯度长得一模一样(只是 ŷ 多过了一道 sigmoid)。一套梯度下降的循环,两台机器通用。下面的小实验让你亲手转动这两台机器。

两台机器,一套零件:拖动数据,看损失被压到最低
切换"回归 / 分类"两种任务。回归模式:散点上实时拟合最小二乘直线,看斜率 w、截距 b 与均方误差。分类模式:两类点 + sigmoid 决策边界,看交叉熵损失。拖动滑块手调 w、b,或点"自动训练"用梯度下降把损失降到底——观察它就是在做 argmin。
权重 w
0.60
偏置 b
0.00
均方误差(最小二乘)

常见误解

一句话带走
第一台学习机器没有任何新魔法:线性回归 = 内积(第 19)+ 高斯噪声下的最大似然(第 30)= 平方误差,几何上就是把 y 投影到特征空间;逻辑回归 = 同一个内积 + sigmoid + 交叉熵(第 32)+ 梯度下降(第 24、26)。同一套零件,换种装法,就分别成了预测器和分类器。所谓"学习",始终是同一句话——argmin 一个被概率挑出来的损失。
下一步
可这两台机器都吃带标签的数据——每个 x 都得配一个我们事先知道的 y。但现实里绝大多数数据没有标签:一堆顾客、一堆图片、一堆基因,没人告诉你"答案"是什么。没有 y,损失里那个 yᵢ−ŷᵢ 写都写不出来——机器还怎么学?答案是:让数据自己说出它的结构。这要把第 23 课的 PCA、第 30 课的多元高斯、第 31 课的 MLE 再拧到一起。→ 第 36 课《没有标签也能学:PCA 与高斯混合》。