Skip to content

机器学习介绍 ​

标签
AI/ml/概念
字数
4571 字
阅读时间
18 分钟

这一篇建立后面所有笔记要用的术语与判据:什么叫「学会了」、监督信号从哪来、哪些指标会在什么条件下骗人。

02 是第一个能把每步都算清的算法,03–05 是它依赖的数学基础。

T、E、P:把「学习」定义清楚 ​

Mitchell 在 1997 年给出的形式化定义是这一行的通用口径:

如果一个计算机程序在任务 T 上,基于经验 E 学习后,在性能度量 P 上有所提升,那么就说该程序从经验 E 中学习了。

它把「学习」从一个形容词变成了三个可填的槽。 没填清这三个槽就说「模型学会了」,等于没说 —— 因为 P 没提升就不算学会。

Mitchell 的定义把「学习」从一个形容词变成了三个可填的槽。

   ┌──────────────────────────────────────────────────────────┐
   │ T  任务 Task                                              │
   │   要解决什么 —— 输出落在哪个取值空间                        │
   │   分类(离散标签)/ 回归(连续数值)/ 排序(有序序列)/       │
   │   决策与控制(动作序列)                                    │
   └──────────────────────────────────────────────────────────┘
   ┌──────────────────────────────────────────────────────────┐
   │ E  经验 Experience                                        │
   │   监督信号从哪来 —— 人工标注 / 用户行为日志 /               │
   │   从数据自身构造 / 环境给的延迟奖励                          │
   └──────────────────────────────────────────────────────────┘
   ┌──────────────────────────────────────────────────────────┐
   │ P  性能度量 Performance                                   │
   │   怎么算「变好了」—— 必须与「误判的两种代价」对齐            │
   └──────────────────────────────────────────────────────────┘

   三个槽没填清就说「模型学会了」,等于没说 ——
   因为 P 没提升就不算学会。

   P 选错的代价可以算:正例 1%、负例 99% 的二分类任务里,
   一个永远输出「负例」的模型
     准确率  99%     ← 在这个 P 上表现极好
     召回率   0%     ← 一个正例都抓不到
   └─ 所以 P 必须与代价对齐:垃圾邮件过滤宁可误杀、
      癌症筛查宁可误报 —— 两种任务的 P 完全不同,
      虽然形式上都是二分类。

T:要解决什么 ​

任务形态输出是什么例子
分类离散标签邮件是否垃圾邮件
回归连续数值房价预测(02-线性回归)
排序一个有序序列搜索结果排序
决策 / 控制一个动作序列下棋、路径规划

判据是输出的取值空间,不是任务名字听起来像什么。「预测用户会不会点击」是分类,「预测点击率」是回归 —— 同一件事因为输出口径不同而分属不同任务。

E:监督信号从哪来 ​

四种来源,对应后面列出的四类范式:

来源成本
人工标注最贵,且速度受标注人力限制
用户行为日志便宜,但只覆盖被系统曝光的分布
从数据自身构造几乎免费 —— 现代大规模预训练走的就是这条
环境给的延迟奖励无需标注,但信用分配困难(哪个动作导致了这个奖励)

P:选错 P 就是优化目标错 ​

这一条最容易被当成形式主义,但它是工程事故的常见来源:模型会忠实优化你给的 P,而不是你真正想要的东西。

一个可算的例子:某二分类任务正例占 1%、负例占 99%。一个永远输出「负例」的模型准确率是 99% —— 它在准确率这个 P 上表现极好,但召回率是 0,一个正例都抓不到。

指标恒输出负例时的值
准确率(Accuracy)99%
精确率(Precision)未定义(没有正例预测)
召回率(Recall)0%

所以 P 必须与「误判的两种代价」对齐。 垃圾邮件过滤宁可误杀(把正常邮件扔进垃圾箱),癌症筛查宁可误报(把健康人叫回来复查)—— 两种任务的 P 完全不同,虽然形式上都是二分类。指标口径的完整推导见 04-概率、Softmax 与信息论。

规则从哪来:与传统编程的分界 ​

输入过程输出
传统编程数据 + 人写的规则按规则执行结果
机器学习数据 + 正确结果或反馈从数据中估出规则模型

分界只有一条:规则的来源。 传统编程里规则是代码;机器学习里规则是参数,从数据里估出来的。

这是 Samuel 1959 年的西洋棋程序第一次展示的事情:程序与自己对弈、从胜负结果里调整局面评估函数,行为在没有人改代码的情况下变好了。它给出的启发在于「规则可以不手写」,而不在「机器会下棋」。

这条分界也划出了机器学习的失效边界:规则是从数据里估的,所以数据的分布决定了模型的能力上限。训练数据里没出现过的情况,模型没有依据可估 —— 这不是模型不够大能解决的问题(06-缩放法则 里那条数据墙讲的是同一件事的另一面)。

规则从哪来,是机器学习与传统编程的唯一分界。

             输入                      过程                输出
   传统编程  数据 + 人写的规则           按规则执行           结果
   机器学习  数据 + 正确结果或反馈        从数据中估出规则      模型

   分界只有一条:规则的来源。
   传统编程里规则是代码;机器学习里规则是参数,从数据里估出来的。

   这条分界也划出了机器学习的失效边界
     规则是从数据里估的 ⟹ 数据的分布决定了模型的能力上限
     └─ 训练数据里没出现过的情况,模型没有依据可估 ——
        这不是模型不够大能解决的问题

   历史注脚:Samuel 1959 年的西洋棋程序第一次展示了这件事 ——
   程序与自己对弈、从胜负结果里调整局面评估函数,
   行为在没有人改代码的情况下变好了。
   └─ 它给出的启发在「规则可以不手写」,不在「机器会下棋」。

四类范式:判据是监督信号从哪来 ​

按「监督信号从哪来」分类,比按「有没有标签」分类更清楚,因为它把自监督放到了它该在的位置:

范式监督信号学什么典型任务
监督学习人工标注的标签输入 → 输出的映射分类、回归
无监督学习没有数据内部结构聚类、降维、异常检测
自监督学习从数据自身构造通用的表示掩码语言建模、next token prediction
强化学习环境给的延迟奖励策略(状态 → 动作)游戏 AI、机器人控制、对齐训练(17-Agentic RL)

自监督的关键在于监督信号不需要人:把一句话的后半截遮住让模型猜、用前文预测下一个 token,标签是从数据本身切出来的。这让训练语料可以扩到万亿 token 量级 —— 也就是大语言模型成立的前提。

无监督与自监督的区别常被混淆:无监督没有明确的目标(只要求发现结构),自监督有一个与监督学习同样明确的目标函数(预测被遮住的部分),只是标签不用人来标。

半监督是监督与自监督之间的过渡形态:少量标注数据 + 大量无标注数据,用后者扩展前者的覆盖。

四类范式按「监督信号从哪来」排列。

   ┌──────────────────────────────────────────────────────────┐
   │ 监督学习      人工标注的标签                               │
   │   学:输入 → 输出的映射       典型任务:分类、回归           │
   └──────────────────────────────────────────────────────────┘
   ┌──────────────────────────────────────────────────────────┐
   │ 无监督学习    没有监督信号                                 │
   │   学:数据内部结构            典型任务:聚类、降维、异常检测  │
   └──────────────────────────────────────────────────────────┘
   ┌──────────────────────────────────────────────────────────┐
   │ 自监督学习    从数据自身构造                                │
   │   学:通用的表示              典型任务:掩码语言建模、        │
   │                               next token prediction        │
   └──────────────────────────────────────────────────────────┘
   ┌──────────────────────────────────────────────────────────┐
   │ 强化学习      环境给的延迟奖励                              │
   │   学:策略(状态 → 动作)      典型任务:游戏 AI、机器人控制、 │
   │                               对齐训练                     │
   └──────────────────────────────────────────────────────────┘

   自监督的关键:标签是「从数据本身切出来的」
     把一句话的后半截遮住让模型猜、用前文预测下一个 token ——
     监督信号不需要人。
     └─ 这让训练语料可以扩到万亿 token 量级,
        也就是大语言模型成立的前提

   无监督与自监督的区别常被混淆
     无监督:没有明确目标(只要求发现结构)
     自监督:有一个与监督学习同样明确的目标函数(预测被遮住的部分),
             只是标签不用人来标

   半监督是两者之间的过渡:少量标注 + 大量无标注,用后者扩展前者的覆盖。

AI / ML / DL 的包含关系 ​

两个包含号都是真包含,反例记住了就不会混

   ┌───────────────────────────────────────────────────────────┐
   │ 人工智能   让机器表现出「智能」的整个研究领域                 │
   │   ┌───────────────────────────────────────────────────┐   │
   │   │ 机器学习   其中「从数据中估规则」的那一支              │   │
   │   │   ┌───────────────────────────────────────────┐   │   │
   │   │   │ 深度学习   机器学习里用多层神经网络的那一支 │   │   │
   │   │   └───────────────────────────────────────────┘   │   │
   │   └───────────────────────────────────────────────────┘   │
   └───────────────────────────────────────────────────────────┘

   是 AI 但不是 ML    专家系统(规则由人写死)、符号推理、搜索算法
   是 ML 但不是 DL    决策树、支持向量机、线性回归、聚类

   深度学习换的是「表示学习的方式」
     特征不再由人设计,改由多层网络自己学出来。
     它不是「更高级的机器学习」的升级版。
     └─ 这一条把「特征工程」从核心工作变成了网络结构设计,
        也解释了为什么 DL 在图像、语音、文本这些
        「人自己说不清特征是什么」的任务上领先最多。
层定义
人工智能让机器表现出「智能」的整个研究领域
机器学习其中从数据中估规则的那一支
深度学习机器学习里用多层神经网络的那一支

两个包含号都是真包含,反例记住了就不会混:

  • 是 AI 但不是 ML:专家系统(规则由人写死)、符号推理、搜索算法
  • 是 ML 但不是 DL:决策树、支持向量机、线性回归、聚类

深度学习换的是表示学习的方式 —— 特征不再由人设计,改由多层网络自己学出来。它不是「更高级的机器学习」的升级版。这一条把「特征工程」从核心工作变成了网络结构设计,也解释了为什么 DL 在图像、语音、文本这些人自己说不清特征是什么的任务上领先最多。

术语:一张表 ​

术语定义
样本(Sample)一条数据,如一封邮件、一张图
特征(Feature)描述样本的属性,模型的输入维度
标签(Label)监督学习中样本的正确答案
参数(Parameter)训练过程中被更新的量 —— 权重与偏置
超参数(Hyperparameter)训练前定好、训练中不更新的量 —— 学习率、层数、正则系数
模型(Model)参数与结构的整体,即估出来的规则的载体
训练(Training)用数据调整参数的过程
推理(Inference)用训练好的模型对新输入做预测
泛化(Generalization)在没见过的数据上的表现

参数与超参数的分界线只有一条:谁在训练中被更新。 学习率是超参数,原因在于它不参与梯度更新 —— 而不是因为它以某种方式被「设置」出来 —— 这个区分决定了调参时哪些能动、哪些必须重训(05-反向传播与梯度优化)。

泛化的定义里「没见过」是关键词。 在训练数据上表现好只说明拟合了,不说明泛化 —— 这是下一节的全部内容。

评估:训练效果好为什么 ≠ 真实效果好 ​

数据先分三份 ​

集合用途关键约束
训练集更新参数——
验证集选超参数、早停不能用来更新参数
测试集最终一次性评估只能看一次

用测试集反复调参,测试集就退化成了验证集,报出来的分数不再代表泛化能力。这是最常见的一种自我欺骗,而且在数字上完全看不出来。

过拟合的判据是两个误差的差 ​

过拟合的定义是训练误差与验证误差之间的差距,与「准确率很高」或「训练得太久」都不等价:

状态训练误差验证误差差距
欠拟合高高小
合适低低小
过拟合很低高大

只看训练误差无法区分后两行 —— 这正是「训练效果好就代表真实效果好」这一说法错在哪。

过拟合的判据是两个误差的差,与「准确率很高」或「训练得太久」都不等价。

   状态        训练误差    验证误差    差距
   ──────────────────────────────────────────
   欠拟合      高          高          小
   合适        低          低          小
   过拟合      很低        高          大   ← 判据在这一行

   └─ 只看训练误差无法区分「合适」与「过拟合」——
      这正是「训练效果好就代表真实效果好」这一说法错在哪

   配套的三份数据
     训练集   更新参数
     验证集   选超参数、早停     ← 不能用来更新参数
     测试集   最终一次性评估     ← 只能看一次
     └─ 用测试集反复调参,测试集就退化成了验证集,
        报出来的分数不再代表泛化能力 ——
        这是最常见的一种自我欺骗,而且在数字上完全看不出来

数据泄漏:比过拟合更隐蔽 ​

三类常见泄漏,共同点是信息从测试集流回了训练过程:

形式例子
预处理用了全量数据先用所有样本的均值方差做标准化,再切分训练/测试
时间序列被打乱用未来的数据预测过去
重复样本跨集同一条数据(或近重复)同时出现在训练集和测试集

第三类在语料来自爬取的场景里尤其常见,对应到预训练就是基准污染(14-预训练:数据、稳定性与评估)。

模型复杂度和「一定更强」 ​

「模型越复杂越好」在两个地方失效:

一是方差与偏差的取舍。 复杂度上来,拟合能力变强(偏差降),但对训练集噪声的敏感度也上来(方差升)。验证误差是一条 U 形曲线,最优点在中间,不在最复杂的一端。

二是没有免费午餐(No Free Lunch)。 在所有可能的问题上平均而言,任何算法的期望表现都相同。模型之所以在某类任务上好,是因为它带了针对这类任务的归纳偏置 —— 卷积假设局部相关,注意力假设任意位置可交互。换了任务,这个偏置就可能变成负担。

所以「哪个模型更好」这句话缺少主语:在什么数据分布、什么指标、什么数据量下更好。脱离这三项比较模型没有意义。

相关 ​

参考 ​

贡献者 ​

文件历史 ​