在正式开始学习之前,先简单介绍一些机器学习中的基本概念和术语。

传统编程与机器学习

传统编程通常是:

人编写规则,机器根据规则和输入得到输出。

例如,我们明确告诉程序:

1
2
如果成绩 >= 60,则通过;
否则,不通过。

也就是说,规则是人提前写好的,机器只是负责执行。

而机器学习的思路则不同:

人提供数据和期望输出,算法从数据中学习规则。

例如,我们给模型很多组输入和对应答案:

1
2
输入:房屋面积、位置、楼层……
输出:房屋价格

模型并不知道房价应该如何计算,但它会尝试从这些数据中找到输入和输出之间的关系。

因此,可以粗略地说:

方式 人提供什么 机器做什么
传统编程 规则 + 输入 根据规则计算输出
机器学习 输入 + 输出 从数据中学习规则

训练得到的模型,可以理解为机器从数据中学到的规则表示。只不过这些规则不是以条条列举出来的形式存在,而是以数字参数的形式存在,例如权重、偏置等。

模型真正有价值的地方在于泛化:它不仅要记住见过的数据,还要能够对没有见过的新数据做出合理预测。

机器学习类型

机器学习通常可以分为三类:监督学习、无监督学习和强化学习。

监督学习

监督学习指的是:训练数据中既有输入,也有对应的输出。

模型要学习的是:

1
输入 -> 输出

例如:

  • 这里有 10000 张标注了“猫”或“狗”的图片,学会区分它们。
  • 这里有房屋特征和对应价格,学会预测房价。
  • 这里有邮件内容和“垃圾邮件 / 正常邮件”的标签,学会判断邮件类型。

监督学习是实践中最常见的一类机器学习方法。

无监督学习

无监督学习指的是:训练数据中只有输入,没有人工给出的标签。

模型要自己从数据中发现结构。

例如:

  • 这里有 10000 个客户的购买记录,找出自然的客户分组。
  • 这里有高维数据,将它降到二维,同时尽量保留原始结构。
  • 这里有大量文本,发现其中潜在的主题分布。

无监督学习常用于聚类、降维、数据探索和预处理。

强化学习

强化学习中,模型通常被称为智能体。智能体会在环境中采取行动,并根据结果获得奖励或惩罚。

它要学习的是:

1
在什么状态下,采取什么行动,才能获得更高的长期奖励。

例如:

  • 玩一个游戏,胜利获得奖励,失败受到惩罚。
  • 控制机械臂,成功抓起物体获得奖励,动作浪费时间则受到惩罚。
  • 在某些场景中,通过奖励信号调整模型的行为策略。

强化学习常用于游戏 AI、机器人控制,以及大语言模型对齐中的 RLHF 等场景。

超越三大类

监督学习、无监督学习和强化学习是最常见的分类方式。但在实际应用中,很多方法并不会完全属于某一类,而是会结合多种思想。

半监督学习

半监督学习使用少量标注数据和大量无标注数据。

例如,医学图像标注成本很高。我们可能只有 100 张标注好的医学图像,但有 100000 张未标注图像。这时,只使用 100 张标注图像可能不够,而完全丢弃未标注数据又很浪费。

半监督学习常见方法包括:

  • 标签传播:把相似的数据点连接起来,让已标注数据的标签传播到相似的未标注数据上。
  • 伪标签:先用少量标注数据训练模型,再让模型给未标注数据生成预测标签,然后继续训练。
  • 一致性正则化:要求模型对原始输入和轻微扰动后的输入给出相似预测。

自监督学习

自监督学习从数据本身构造训练目标,不依赖人工标注。

它的核心思想是:

不需要人工告诉模型答案,而是从数据自身生成答案。

例如:

  • 掩码语言模型:遮住句子中的一部分词,让模型预测被遮住的词。
  • 下一词预测:给定前面的词,让模型预测下一个词。
  • 对比学习:对同一张图片做两种不同增强,让模型知道它们来自同一个原始样本。

自监督学习在形式上很像监督学习,因为模型仍然在预测某个目标。但这些目标不是人工标注出来的,而是从数据中自动构造出来的。

分类与回归

分类和回归是监督学习中最常见的两类任务。

分类

分类任务的输出是离散类别。

例如:

  • 这封邮件是不是垃圾邮件?
  • 这张图片是猫、狗还是鸟?
  • 这个用户会不会流失?

回归

回归任务的输出是连续数值。

例如:

  • 这套房子的价格是多少?
  • 明天的气温是多少?
  • 某个商品下个月的销量是多少?

可以简单对比如下:

维度 分类 回归
输出 离散类别 连续数值
例子 判断邮件是否为垃圾邮件 预测房价
输出空间 {猫, 狗, 鸟} 实数
常见损失函数 交叉熵 均方误差、MAE
常见评价指标 准确率、召回率、F1 MSE、MAE、R²
目标 找到类别边界 拟合数值关系

有些问题可以用不同方式建模。

例如股票预测:

  • 预测股票明天是涨还是跌,这是分类问题。
  • 预测股票明天的具体价格,这是回归问题。

训练集、验证集与测试集

在训练模型时,我们通常会把数据划分为训练集、验证集和测试集。

划分 用途 使用时机 典型比例
训练集 让模型学习参数 训练过程中反复使用 60% - 80%
验证集 调整超参数,比较模型 每次训练后使用 10% - 20%
测试集 评估最终效果 最后只使用一次 10% - 20%

训练集

训练集用于让模型学习数据中的规律。

模型会反复查看训练集,根据预测结果和真实答案之间的差距,不断调整自己的参数。

验证集

验证集用于调试训练过程。

例如,我们可以用验证集来选择:

  • 学习率应该是多少
  • 模型层数应该是多少
  • 是否需要正则化
  • 训练多少轮比较合适

这些由人提前设定、不会被模型直接学习出来的参数,叫做超参数

测试集

测试集用于最终评估模型效果。

测试集应该尽量只在最后使用一次。如果我们反复根据测试集结果修改模型,那么测试集也会间接参与模型选择,最终评估结果就会变得不可靠。

对于数据量较小的情况,可以使用 k 折交叉验证

它会把数据分成 k 份,每次用其中 k-1 份训练,用剩下 1 份验证。重复 k 次后,再取平均结果。这样可以更充分地利用有限数据,也能得到更稳定的性能估计。

过拟合与欠拟合

机器学习的目标不是简单地在训练数据上表现好,而是在没见过的新数据上也表现好。

这就涉及两个常见问题:欠拟合和过拟合。

欠拟合

欠拟合指的是:模型太简单,无法捕捉数据中的真实规律。

例如,真实关系是一条曲线,但我们强行用一条直线去拟合它。此时模型能力不足,即使在训练集上也表现不好。

欠拟合的典型表现是:

  • 训练误差高
  • 测试误差也高

也就是说,模型连训练数据都没有学好。

过拟合

过拟合指的是:模型太复杂,不仅学习了数据中的真实规律,还记住了训练数据中的噪声。

例如,我们用一条非常弯曲的曲线穿过每一个训练点。它在训练集上表现很好,但遇到新数据时反而预测很差。

过拟合的典型表现是:

  • 训练误差低
  • 测试误差高

也就是说,模型把训练数据“背”下来了,但没有学到真正通用的规律。

良好拟合

良好拟合指的是:模型既能捕捉数据中的主要规律,又不会过度记忆训练数据中的噪声。

它的典型表现是:

  • 训练误差较低
  • 测试误差也较低
  • 训练误差和测试误差差距不大

偏差与方差

偏差

偏差来自模型本身的错误假设。

如果真实关系很复杂,但模型太简单,就会产生高偏差。

例如,真实关系是非线性的,但我们只使用线性模型:

$$ \hat{y} = wx + b $$

这时模型表达能力不足,很容易欠拟合。

高偏差通常对应欠拟合。

方差

方差表示模型对训练数据变化的敏感程度。

如果模型太复杂,它可能会对训练集中的细小波动非常敏感。换一批训练数据,模型学到的规则就会发生很大变化。

高方差通常对应过拟合。

可以简单总结如下:

模型复杂度 偏差 方差 结果
太低 欠拟合
合适 泛化较好
太高 过拟合

总误差可以粗略理解为:

$$ 总误差 = 偏差^2 + 方差 + 不可消除的噪声 $$

其中,不可消除的噪声来自数据本身。例如测量误差、随机因素、遗漏变量等。

我们无法完全消除这部分噪声,因此模型训练的目标之一,就是在偏差和方差之间找到一个合适的平衡点。

关键术语

术语 常见说法 实际含义
模型(Model) “那个 AI” 一个带有可学习参数的数学函数,用来把输入映射为输出
参数(Parameter) “模型自己学的东西” 训练过程中被算法自动调整的变量,例如权重和偏置
权重(Weight) “每个输入的重要程度” 控制某个输入特征对输出影响大小的参数
偏置(Bias) “额外的偏移量” 让模型在没有输入或输入为 0 时也能产生非零输出
训练(Training) “教 AI” 通过优化算法调整模型参数,使预测更接近真实答案
特征(Feature) “输入列” 数据中可用于预测的属性
标签(Label) “答案” 训练样本中已知的真实输出
超参数(Hyperparameter) “人手动调的设置” 训练前指定的设置,例如学习率、层数、批大小
损失函数(Loss Function) “模型有多错” 衡量预测值和真实值差距的函数
优化器(Optimizer) “怎么改参数” 根据损失调整模型参数的方法,例如梯度下降
泛化(Generalization) “新数据上也能用” 模型对训练时没见过的数据做出合理预测的能力
过拟合(Overfitting) “背下了训练集” 模型记住了训练数据中的噪声,导致新数据上表现变差
欠拟合(Underfitting) “没学明白” 模型太简单,无法捕捉数据中的真实规律
正则化(Regularization) “限制模型太复杂” 在训练中加入约束,减少过拟合
交叉验证(Cross-Validation) “换不同数据块验证” 多次划分训练集和验证集,得到更稳定的评估结果
数据漂移(Data Drift) “世界变了” 真实输入数据的分布随时间变化,导致模型性能下降