本章是整个课程的"预告片"。我们会快速浏览机器学习的三大流派——监督学习、无监督学习、强化学习。别担心如果有些概念现在还模糊,后续章节会逐一深入每个领域。

现在,让我们从一个根本性的问题开始:什么是"学习"?


范式的转变

在数据学习出现之前,我们面对计算机时的思维模式是“指令式”的。也就是说,作为程序员的你必须非常聪明。你需要亲自总结出规律,写下具体的指令(Rules),然后把数据(Data)喂给计算机,计算机会严格执行你的指令吐出答案。这就像你教一个只会死记硬背的学生:“如果A发生,你就做B”。

但是,Arthur Samuel (1959) 提出了一个革命性的想法:如果我们不显式地编写规则,而是赋予计算机从数据中学习的能力呢?这就是 Machine Learning, 机器学习。

在这里。流程是你把“数据”和“预期的答案”同时喂给计算机,计算机会自己去“猜”中间的逻辑,最终生成一套规则,这样一套规则即是模型。这就像你教一个有悟性的学生,你只给他看 100 道题和答案,让他自己去琢磨解题方法。

为了更严谨地定义这种“悟性”,Tom Mitchell 提出了一个经典的数学化定义,包含三个要素:T, P, E:

  • Task (T): 任务。比如“区分垃圾邮件”。
  • Experience (E): 经验。即历史数据,比如“以前收到的 1000 封邮件及其标签”。
  • Performance (P): 性能指标。比如“分类的准确率”。

如果一个程序在任务T上的性能P,随着经验E的增加而提高,那么我们就说这个程序正在“学习”。

数据表示

既然汲取需要通过“经验”来学习,我们如何将现实世界中的经验喂给计算机?比如我们需要喂给计算机一首歌,计算机来通过你的口味为你推荐你喜欢的歌曲。计算机当然听不懂旋律,但是我们可以将这首歌翻译成数学语言。例如节拍和响度。

想象一下如果我们将节拍速度画在X轴,响度画在Y轴,那么这么一首歌就变成了平面坐标系上的一个点。在这个坐标系中,相似的歌曲汇聚在一起。那么这样你就拥有了一个表示批量数据的方法。例如你想要寻找快节奏,高响度的歌,你就可以去右上角寻找相应的点。

在这样的概念下:

Input Data ($x$) 是我们用来描述事物的特征向量。我们写作$x \in \mathbb{R}^d$。这里的$d$代指特征维度 (Feature Dimension)

在上面歌曲的例子中,由于我们的特征只有两层,因此$d = 2$。而在其他应用场景中,$d$的值可能会非常大,例如图像识别。

Label ($y$) 是我们希望机器会预测的标准答案,在这里就代指你的用户是否喜欢这首歌。

通过这种方式,原本抽象的“学习喜好”变成了一个几何问题:在坐标系中画一个圈(或一条线),把代表“喜欢”的点和代表“不喜欢”的点分开。当有新的数据点进来时,看它落在圈内还是圈外,就能预测结果了。


监督学习

监督学习的分类

在**监督学习 (Supervised Learning)**中,根据我们要预测的 Label ($y$) 的性质不同,算法被严格分为两大类。理解它们的区别至关重要。

分类问题 (Classification)

分类问题顾名思义,我们的目的是将数据划分到预定义好的类别中

分类问题的一大特征是,你的标签$y$应是离散的 (Discrete)

如果目标是二选一,例如是否是垃圾邮件,喜欢还是不喜欢,则$y \in {0, 1}$。
如果目标是多选一,例如图片是哈基米还是大狗叫还是叮咚鸡,则$y \in {1, 2, ..., K}$,。

分类任务在散点图中看起来就像是寻找一个合适的边界线。机器要做的就是通过这条边界线,将不同颜色(特征)的点尽可能精准分离出来。

回归问题 (Regression)

回归问题要做的更像是预测。机器要做的是根据问题,输出一个具体的数值。

回归问题的数学特征是,标签$y$应当是连续的 (Continous),并且$y \in \mathbb{R}$,属于实数集。

回归问题的经典案例就是大伙喜闻乐见的房价预测。你向机器输入一个值$x$,代表房子的面积,则机器会根据模型来输出一个$y$,也就是房子的价格。

回归问题在散点图中做的不是画分界线了,而是要试图画一条拟合线 (Fitting Line)。这条拟合线要做的是尽可能穿过或者靠近所有的数据点。因此,一旦这条线通过训练过程确定下来后,用户输入$x$之后,就可以通过这条线的解析式找到对应的$y$来作为预测值。


如何定义“错误”?

由于我们知道监督学习的目标是找一个函数$f: X \rightarrow Y$,但在坐标轴里随便画一条线也是一个函数。$f(x)$到底要满足什么条件才算好?

首先我们要介绍一个概念叫做泛化 (Generalization)。一个泛化能力优秀的模型应当能够在训练数据的基础上,对未来数据同样拥有不错的表现。我们的目标不是让模型在训练数据 (Training Data)上通过死记硬背表现完美,而是要求模型能够根据这些模型合理预测未来数据。

为了让计算机能够通过数学来进行"自我反省",我们需要定义什么是错误。这就是损失函数 (Loss Function),记作$\ell$。

机器学习算法在做的事情就是去寻找能够让总损失值最小化的那个函数$f$。

记住这个核心循环:定义损失 → 最小化损失 → 得到模型。这个套路会贯穿整门课程。

分类问题损失函数

对于分类问题,我们使用0-1 loss。这是一个简单粗暴的损失函数:如果我们的预测正确,则损失为0,反之则为1。公式算出来的值说白了就是错误率:

$$\ell = \frac{1}{n} \sum_{i=1}^{n} (f(x_1) \neq y_i)$$

回归问题损失函数

而对于回归问题,我们需要更合理的损失函数。
假如我们预测的房价是100万,而实际上是102万,这样的一次预测算错吗?当然算。预测是200万呢?算,而且错的更离谱了。

所以相比分类问题,我们更需要的是衡量模型的输出到底有多错这里我们使用平方损失函数 (Squared Loss Function)

$$\ell = \frac{1}{n} \sum_{i=1}^{n} (f(x_i) - y_i)^2$$

我们之所以要将偏移值算平方有些许原因:
首先我们需要消除正负号的影响,因为预测高了或者低了都算错;
其次我们还需要对更离谱的预测错误施加更狠的惩罚。偏离10的误差平方后为100,而偏离2的误差平方后为4。这意味着模型会去极力避免那些极其离谱的预测。


无监督学习

当然你不可能将所有的数据全部带上人工标注的标签。这怎么说也不现实。这就是所谓无监督学习 (Unsupervised Learning)。提供给你的数据只有$x_1, x_2, ..., x_n$,没有标签告诉你什么是对的,什么是错的。

这时候算法的目标发生了重要转变。与其说是预测数据,我们要做的是发现数据其中蕴含的规律,和隐藏的结构。也就是Pattern and Structures。

无监督学习最典型的任务是聚类任务 (Clustering)。给你一堆杂乱的照片,但是没有文件名,让你整理,你会怎么做?

你大概率会找到两张照片发现:

哦,这两张全是海边的图片,所以放在一起;这几张都是爬山的,所以放在另一堆...

这就是聚类的核心。我们必须要求**簇内相似 (Intra-cluster similarity)要高,并且簇间差异 (Inter-cluster dissimilarity)**要大。也就是说:同一个圈子里的要像,不同圈子里的要不像。

K-means算法

K-means是最经典的聚类算法,目标是将数据分成$K$个蔟。

整个算法的核心在于循环执行两个步骤,直到达成收敛。

  1. 初始化 (Initialization)

    在这一步,机器会随手在数据空间里扔下$K$个点,作为初始的中心,也就是Cluster centers。这些点可以是真实存在的数据点,也可以是任意位置。

  2. 选边 (Assignment)

    在这一步算法会遍历每一个数据点$x$,并通过该点距离这$K$个中心的欧几里得距离来判断哪一个距离最近。离得谁最近,那么这个点就归谁的蔟。

  3. 重新计算中心 (Re-center)

    经过上一步现在每一个蔟都应该拥有一些成员了,而这时候一开始选择的那个中心可能离其他数据点太偏了,没什么代表性了。于是每个团簇开始重新计算自己所有成员的平均位置,并将这个平均位置设置成这个蔟的新的中心。

    这时我们的中心点就移动了。

接下来重复上述过程。因为中心点移动了,所以可能在某个蔟边缘的数据点发现它离隔壁团簇的新中心更近了。于是对于这些点来说,重新执行选边。

周而复始,直到中心点不在移动,或者没有任何数据点重新选边,我们结束K-means流程。这就叫收敛 (Convergence)

K-means最大的弱点之一来源于初始化。不同的选点带来的结果通常是不一样的。K-means只能找到局部最优解,而不是全局最优解。
就好比你在山上,你的目标是下到最低的山谷。K-means 就像是蒙着眼睛往下走。如果你开始站在南坡,你会滑进南边的山谷;如果你站在北坡,你会滑进北边的山谷。初始点选得不同,最后停下的位置(收敛点)往往也不同。


强化学习 (Reinforcement Learning)

之前的模块中我们了解了监督和无监督学习,而它们可以看作是两种极端的学习方式。监督学习有老师(标签)手把手教你,而无监督学习啥也没有靠自己悟。

**强化学习 (Reinforcement Learning)**处于中间地带。没有老师告诉你每一步该怎么做,但是当你昨晚一系列动作后,你所在的环境会给你奖励或者惩罚。

比如你想教一只小狗坐下,但是bro不是生物学家同时你的狗也不是人,因此不能直接告诉它要弯曲后腿肌腱。你只能对它发出指令,当它偶然做出坐下的动作时,奖励他,反之就惩罚。有点像巴普洛夫实验。

在数学上,我们叫:

  • 智能体(Agent)是那条狗。
  • 动作(Action)是这条狗做出的动作,例如坐下或者啃你
  • 奖励函数(Reward Function)是一个定义什么动作是好的,什么动作是不好的的规则

在强化学习中你的目标是最大化未来的总奖励值。注意是长期的值,而不是眼前的值。

强化学习比其他方法更难,主要问题源于:

  1. 信用分配问题 (Credit Assignment) 与延迟奖励

    想象你在下围棋。你走的第一部棋可能极其高明,但是直到100步才赢得比赛,你得到了+1的奖励。问题随之而来,到底是哪一步棋对你的胜算影响更大?是最后一步的绝杀,还是第一步的开局?

    机器需要学会将最终的胜利分配功劳给前面一系列复杂的动作。如果分配错了, 例如分配给了某步昏招,那你模型就玩大了

  2. 探索与利用的权衡 (Exploration-Exploitation Trade-off)

    这不只是是一个机器学习问题,更像是一个人生哲学问题。假设你面前有10台老虎机,你试了第一台,赢了五块钱。那么你接下来是:

    • 利用 (Exploitation):继续玩第一台,因为你知道它100%能稳赚不赔。但是你有可能错过了旁边一台能直接赢100块的老虎机。

    • 探索 (Exploration): 放弃第一台,去试第二台。这样你可能会赚,也可能会赔。

    强化学习算法必须要在这两者之间找到平衡。一味的选择利用会像K-means那样陷入局部最优,而一味探索则导致效率低下且风险巨大。


本章小结

在这一章,我们建立了机器学习的宏观图景:

  • 监督学习:有老师(标签)手把手教,目标是学会预测。分为分类(离散标签)和回归(连续标签)。
  • 无监督学习:没有标签,目标是发现数据中隐藏的结构(如聚类)。
  • 强化学习:通过与环境交互获得奖励/惩罚,目标是最大化长期收益。

我们还引入了损失函数这个核心概念——它是机器"自我反省"的工具,也是我们优化的目标。

但你可能已经发现一个问题:现实世界充满噪音和不确定性。如果数据本身就是模糊的,我们怎么"精确"地学习?

下一章,我们将引入概率论——这是机器学习的数学语言,让我们能够优雅地处理不确定性。