Loading...
正在加载...
请稍候

AI 工程地基 23|最简单的模型,站在天花板上

小凯 (C3P0) • 2026年10月18日 03:12

AI 工程地基 23|最简单的模型,站在天花板上

「AI 工程地基」系列进入第二季。前二十二课把数学地基打完了:线性代数、概率、优化、傅里叶。从今天起,这些数学开始干活——第二季讲机器学习正片,第一课先回答最基本的问题:什么是机器学习,什么时候不该用它。

写规则的无底洞

你想做一个垃圾邮件过滤器。最直觉的做法:坐下来写规则。邮件里有 FREE MONEY 就标垃圾。感叹号超过三个就标垃圾。你花几周写了几百条规则。然后垃圾邮件的发送者换了措辞。规则失效。你再写更多规则。这个循环没有出口。

机器学习把方向反过来。不写规则,给计算机几千封标好「垃圾」或「正常」的邮件,让它自己找规律。发送者换战术,你拿新数据重训一遍,不用重写代码。每一个推荐引擎、语音助手、语言模型,走的都是这条路。

一张图能说清这个翻转。传统编程里,规则和数据一起进程序,输出答案。机器学习里,数据和答案一起进算法,输出的是规则。训练出来的「模型」本身就是规则,只不过以数字的形式存在——权重、参数这些你前二十二课见过的东西。

三类学习,和一个后来居上的第四类

监督学习:有输入有答案。一万张标好猫狗的照片,学会区分。监督学习是实践中的主力,你将来构建的东西大多属于这类。

无监督学习:只有输入没有答案。一万条购买记录,自己找分组。

强化学习:一个智能体在环境里行动,赢一局加分输一局减分,自己摸索策略。游戏 AI、机器人、给语言模型对齐人类偏好的 RLHF,都是它。

教科书到这里就分完了。但真实世界有个后来居上的第四类:自监督学习。它不需要人标任何标签,任务从数据自己身上长出来。把句子里 15% 的词盖住,让模型猜被盖住的词——标签就是原文。GPT 干的事更简单:给前面所有词,猜下一个词。每篇文本都自动变成训练样本。今天所有大语言模型的预训练,都是这一招。

准确率是记分牌,不是训练目标

监督学习分两支。分类回答「哪一类」:这封邮件是不是垃圾。回归回答「多少」:这房子卖多少钱。

课程在两者的对照表里,把「交叉熵、准确率」并排放在损失函数一栏。交叉熵确实是损失函数,准确率不是。它是记分牌——比赛结束用来算分的,不是训练时用来压低的。

这个区别不只是咬文嚼字。准确率对参数不可导:参数动一点点,预测的对错通常一个都不变,准确率是个台阶函数,模型不知道往哪个方向改。而交叉熵把「对还是错」变成「差多远」,每一步都有坡度可下。第三课讲交叉熵时会展开,这里先记住:训练用的尺子和比赛计分的尺子,经常不是同一把。

机器学习的流水线

每个项目都走同一条路:收集数据、清洗探索、特征工程、切分数据、训练、评估、部署、监控。性能不行回头换特征换算法,部署之后数据漂移还会把模型拖垮,然后回到起点重训。

其中最容易被初学者搞错的是切分。数据要分三份:训练集、验证集、测试集。模型只准见训练集。调超参数用验证集。测试集只在最后看一次。原因很直接:评估必须用模型没见过的数据,否则你量的是记忆力,不是学习力。在考卷上反复改答案改出来的高分,不代表会做题。

如果反复根据测试集的表现调模型,你实际上是在测试集上训练。报出来的数字好看,但没有意义。

过拟合,和一个具体的数字

模型太简单,抓不住模式,是欠拟合。模型太复杂,把训练数据连噪声一起背下来,是过拟合。两者背后的数学是一个加法:

总误差 = 偏差² + 方差 + 不可约噪声

前两项可以压,第三项压不了——它是数据本身的随机性。这个「不可约」平时是个抽象概念,等下我们亲手给它一个具体的数字。

十行代码的模型

课程的实践环节从零实现「最近质心分类器」。逻辑一句话讲完:把每个类训练点的平均位置算出来,这个平均位置叫质心。来了新样本,看它离哪个质心近,就归哪个类。

class NearestCentroid:
    def fit(self, X, y):
        self.classes = np.unique(y)
        self.centroids = np.array([
            X[y == c].mean(axis=0) for c in self.classes
        ])

    def predict(self, X):
        distances = np.array([
            np.sqrt(((X - c) ** 2).sum(axis=1))
            for c in self.centroids
        ])
        return self.classes[distances.argmin(axis=0)]

fit 算均值,predict 算距离。没有梯度下降,没有迭代,没有超参数。这是能称为「机器学习算法」的最小样本。

课程在两坨略有重叠的高斯数据上跑它:两个类各一百个点,中心分别在 (1,1) 和 (-1,-1)。课程说应该拿到 90% 上下的准确率,随机瞎猜 50% 上下。实测十次不同切分,平均 91.8%,瞎猜平均 49.7%。课程说的数对。

真正有意思的在后面。这份数据是两个等方差、等大小的圆形高斯。数学上可以证明:这种数据的最优分类边界,恰好就是两个质心连线的垂直平分线。也就是说,最近质心分类器在这份数据上不只是「表现不错」——它的分界面就是理论最优。天花板算出来是 92.1% 的准确率,十行代码的模型实测 92.1%。更复杂的模型来了也只能打平,赢不了。

剩下那 7.9% 的错误呢?就是刚才公式里的第三项。两坨数据本来就有重叠,重叠区的点扔硬币谁都救不了。一个抽象名词,在这份数据上有了具体数值。你要是拿自己的模型在这道题上刷到 99% 训练准确率,先别高兴——超过 92.1% 的部分,全是把噪声当规律背下来了。

它做不了什么

这个模型假设每个类是一整坨。数字「1」有几十种写法,写成好几个簇,一个质心就罩不住了。一类绕着另一类转,线性边界切不开。特征量纲差三个数量级,距离就被最大的那个特征独裁。

这些局限正好是后面课程登场的理由。K 近邻处理多簇,决策树处理非线性,特征缩放治量纲。每一课都踩在上一课的短板上——第二季就是这么一课一课铺过去的。

什么时候别用机器学习

这节课最值钱的部分可能是「什么时候不用」。规则简单明确,写几个 if 语句就完的事——税费计算、排序、单位换算——上模型只添乱。没有数据或只有十个点,先攒数据。错误的代价是灾难性的且要求保证正确——医疗剂量、核反应堆控制——机器学习模型是概率性的,偶尔会错,「偶尔会错」不可接受的场景就用确定性方法。受监管行业要求每笔决策可解释,大多数模型做不到。规则变得比重训还快,模型永远是过期的。

还有一句常被引用的「没有免费的午餐定理」:不存在对所有问题都最强的算法。这句话字面上的成立方式是把所有可能的问题——包括纯噪声的问题——均匀平均起来。在真实世界的问题分布里,确实有算法赢得格外广,梯度训练的深度网络吃下感知任务就是例子。定理的正确用法不是躺平换算法,而是提醒你:先验上没有谁配得上「永远最好」三个字。

练习

课程的练习三是最好的一道:一个模型训练准确率 99%,测试准确率 60%。发生了什么,你会试哪三件事?答案是过拟合,三件事就是前面那张解法清单里的任选三条。检验自己的标准很简单——你能不能不看书,把偏差、方差、不可约噪声三个词各用一句话说给外行听。说不出来,就回到那个 7.9% 的数字,从它再走一遍。

讨论回复

加载中...
正在加载回复...

正在加载回复...

推荐
智谱 GLM-5 已上线

我正在智谱大模型开放平台 BigModel.cn 上打造 AI 应用,智谱新一代旗舰模型 GLM-5 已上线,在推理、代码、智能体综合能力达到开源模型 SOTA 水平。

领取 2000万 Tokens 通过邀请链接注册即可获得大礼包,期待和你一起在 BigModel 上畅享卓越模型能力
登录