机器学习介绍
这一篇建立后面所有笔记要用的术语与判据:什么叫「学会了」、监督信号从哪来、哪些指标会在什么条件下骗人。
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)。 在所有可能的问题上平均而言,任何算法的期望表现都相同。模型之所以在某类任务上好,是因为它带了针对这类任务的归纳偏置 —— 卷积假设局部相关,注意力假设任意位置可交互。换了任务,这个偏置就可能变成负担。
所以「哪个模型更好」这句话缺少主语:在什么数据分布、什么指标、什么数据量下更好。脱离这三项比较模型没有意义。
相关
- 02-线性回归 —— 第一个具体算法,把「模型 / 参数 / 损失 / 训练」几个词落到实处
- 03-线性代数与 GEMM —— 特征与参数在计算机里是什么(张量的形状与代价)
- 04-概率、Softmax 与信息论 —— 输出被看成什么分布、损失函数从哪来
- 05-反向传播与梯度优化 —— 参数怎么从数据里估出来
- 17-Agentic RL —— 强化学习在 LLM 对齐上的具体形态
- 06-缩放法则 —— 数据规模与模型能力的关系
- 14-预训练:数据、稳定性与评估 —— 基准污染与评估工程
参考
- Tom M. Mitchell. Machine Learning. McGraw-Hill, 1997.
- https://doi.org/10.1147/rd.33.0210
- https://doi.org/10.1162/neco.1996.8.7.1341
- https://arxiv.org/abs/2301.05712
- https://scikit-learn.org/stable/modules/model_evaluation.html
- 本篇由库内原「机器学习介绍」重写(原稿为外部导入的概念罗列材料:无 frontmatter、
## 1.式编号、含重复案例与「一页总结 / 面试式回答模板」两节)。保留了 T/E/P、三类范式、包含关系、术语与误区这几块主题,组织方式改为判据导向,P 的指标算例、数据泄漏三类形式、模型复杂度的两条失效机制为本次补充
YJ