第十部分 · 把它们拼成学习器
第一台学习机器:线性回归与逻辑回归
前面三个部分,我们一件件打磨工具:把数据放进空间、把学习变成优化、和不确定性讲道理。零件已经齐了。现在第一次把它们拧成一台真正能跑的机器——它能预测房价,也能判断邮件是不是垃圾。让人惊讶的是:所谓"第一台学习机器",不过是前面那些工具在同一道题上的合体。
留下的问题:工具是一件件单独学的——内积、梯度、MLE、交叉熵……它们各自漂亮,但一台真正的学习器到底长什么样?这些零件怎么咬合成一个整体?
本课新增:两台最小的、却完整的学习机器。线性回归预测连续值,逻辑回归做二分类。我们会看到:线性回归的最小二乘正是高斯噪声假设下的最大似然;逻辑回归则把 sigmoid、交叉熵、梯度下降三件工具焊在一起。监督学习的 "Hello World",就是前面所有课的总装车间。
监督学习:把"从例子里学"写成一道数学题
回到第 19 课的设定。我们手里有一堆带标签的样本:每个样本是一对 (x, y),x 是输入(一套特征,写成向量),y 是我们想预测的答案(标签)。比如预测房价:x = (面积, 卧室数, 楼层…),y = 成交价。任务是从这些例子里学出一个函数 f,使得对没见过的新 x,f(x) 也能给出靠谱的 y。
"靠谱"必须可量化,否则机器无从优化。于是我们沿用第 19 课的三件套:一个模型(函数 f 的形状,里面有可调的参数)、一个损失(量 f(x) 离真 y 有多远)、一个优化(调参数把损失压到最小)。换句话说——
最简单的 f 长什么样?让它是线性的——这就回到了第 11、20 课。两类任务由此分叉:y 是连续数(房价)就是回归,y 是类别(是/否)就是分类。先看回归。
线性回归:一条直线,与它的最小二乘损失
线性回归赌一件事:y 大致是各特征的加权和。模型写成
怎么衡量这条直线(高维里是个超平面)拟合得好不好?最自然的想法:把每个样本的误差 yᵢ − ŷᵢ 平方后加起来。平方有两个好处——负误差不会和正误差互相抵消,而且对大偏差惩罚更重。这就是最小二乘损失(均方误差):
训练就是 argmin(w,b) L。这是个开口向上的碗(关于 w, b 是凸的——第 28 课),所以有唯一的全局最低点。它甚至有闭式解(令梯度为零,第 25 课),即所谓"正规方程"。但更要紧的是它的几何意思:第 20 课已经讲透——最小二乘就是把标签向量 y 正交投影到特征张成的子空间上,残差垂直于那个子空间。回归不是新东西,是投影。
揭开面纱:最小二乘其实是 MLE
这里是本课第一个"合体时刻"。我们凭直觉选了"平方误差",但凭什么是平方,不是绝对值、不是四次方?答案藏在第 31 课的最大似然里。
假设真实世界是这样的:y 确实由直线生成,只是被一团高斯噪声(第 29、30 课)扰动了——
那么在给定直线参数时,观测到某个 yᵢ 的概率密度,正比于 exp(−(yᵢ − ŷᵢ)² / (2σ²))(高斯钟形的指数里就藏着平方误差)。把全体样本的密度相乘得到似然,再取对数(第 31 课的老办法——对数把连乘变连加,且不改最大值位置):
看清楚了吗?让对数似然最大,就等于让 ∑(yᵢ − ŷᵢ)² 最小。 最大似然估计和最小二乘给出完全相同的答案。我们以为在"凭手感选损失",其实是在"假设噪声是高斯的、然后做 MLE"。第 20 课的几何投影、第 31 课的概率推断,在这里指向同一条直线——这正是合体。
分类为什么不能直接套回归
现在换任务:判断邮件是不是垃圾、肿瘤是良性还是恶性。标签 y 只取 0 或 1。能不能偷懒,直接拿线性回归去拟合这些 0/1?不行,而且坏得很具体:
- 直线 w·x+b 的输出可以是 −3、可以是 7.8,但"是垃圾邮件的概率"必须落在 [0, 1] 里。直线根本不肯待在这个区间。
- 平方误差对分类是错的度量:一个本该判 1、模型已经非常确信输出 0.99 的样本,再"逼近 1"几乎没有意义;而一个把 0 类样本判成 0.99 的自信的错误,应该被狠狠惩罚——平方误差做不到这种"对错误的自信加倍开罚"。
我们需要两样新东西:一个把任意实数压进 (0,1) 的函数(好当概率读),和一个专为概率设计的损失。两样都是现成的。
逻辑回归:sigmoid 把分数压成概率
先解决"压进 (0,1)"。还是先算一个线性分数 z = w·x + b(同样是内积),再让它过一道sigmoid 函数:
它的图像是一条优雅的 S 曲线:z → −∞ 时 σ → 0,z → +∞ 时 σ → 1,z = 0 处恰好是 0.5。于是 ŷ = σ(w·x + b) 就能干净地读作"预测为正类的概率"。分界线(决策边界)正是 w·x + b = 0 那个超平面:一边概率 > 0.5 判正,一边 < 0.5 判负。模型仍是线性的(边界是直的),只是把线性分数翻译成了概率。
用交叉熵 + 梯度下降把它训练出来
有了概率输出,第二步:选损失。这正是第 33 课交叉熵登场的地方。把真标签 y∈{0,1} 看成"真分布",把模型输出 ŷ 看成"预测分布",两个分布的交叉熵(在二分类下)是
这个损失正好满足上一节的要求:当模型自信地犯错(真值 1 却预测 ŷ→0),−log ŷ → +∞,惩罚趋于无穷大。而且它绝非凭空捏造——和线性回归一样,它就是伯努利噪声下的最大似然(第 31 课):让交叉熵最小 = 让"模型生成这批标签"的似然最大。第 33 课早就剧透过:交叉熵损失是 MLE 自然冒出来的分类损失。
最后一步:怎么求 argmin?逻辑回归没有线性回归那样的闭式解,但它的损失对 w, b 仍是凸的(第 28 课),所以梯度下降(第 25、27 课)必能滑到全局最优。更妙的是,sigmoid + 交叉熵的组合让梯度异常简洁:
"预测减真值"——误差越大,这一步迈得越大;误差为零,就不动了。和线性回归的梯度长得一模一样(只是 ŷ 多过了一道 sigmoid)。一套梯度下降的循环,两台机器通用。下面的小实验让你亲手转动这两台机器。
常见误解
- "逻辑回归是回归算法。" 名字骗人。它输出概率、做的是分类。叫"回归"是因为历史上它先对 log-odds(对数几率 log(p/(1−p)))做线性回归——本质仍是"线性分数 → sigmoid → 概率"。
- "最小二乘只是个方便的选择。" 不是随手选的。它精确等价于"假设噪声是高斯的、然后做最大似然"。你一选平方误差,就已经悄悄做了一个关于噪声的概率假设(第 31 课)。
- "分类也该用均方误差。" 技术上能算,但错。均方误差配 sigmoid 会让损失变非凸、梯度在错得离谱时反而趋近 0(学不动)。交叉熵才让损失重新变凸、并对"自信的错误"开出无穷大罚单。
- "线性回归只能拟合直线,太弱了。" "线性"指的是对参数 w 线性。把特征换成 x, x², x³…(基函数)后,同一台线性回归就能拟合曲线——它远比名字听上去灵活。