为什么机器学习说的是「概率」这门语言
在「向量」那篇里,你学会了把数据想成空间中的箭头,干净又精确。可真实的数据从来没这么清爽。同一只猫的两张照片不一样;同一份问卷问两次答案也不同;传感器会抖动。概率正是为此而生的数学分支:一种在你无法确定时仍能审慎推理的方法,并用一个介于 0 和 1 之间的数说出你到底有多不确定。
这就是为什么几乎整个机器学习,在底层都是概率性的。一个分类器不会断言「这是猫」。它给出的更接近「85% 是猫,12% 是狗,3% 是别的」。垃圾邮件过滤器在权衡证据。语言模型靠从一串可能性中采样来挑下一个词。模型始终是在不确定之下下它最好的赌注——而概率就是那本让这些赌注保持诚实的账本。
随机变量:给不确定性贴上数字
[[random-variable|随机变量]]不过是一个其取值事先并不固定的量,因为它来自某个不确定的过程。掷一次骰子:结果 X 就是一个随机变量,可以是 1 到 6 中的某个数。量一下明天的气温:那也是个随机变量。「变量」这个词有点误导——它并不自己变;它取的是底层那点运气递给它的值,而我们要研究的是这些取值的*规律*。
随机变量分两种口味。离散型取的是一个个分开的、可数的值——骰子(1–6)、今天收到的邮件数、模型在三个类别里挑了哪一个。连续型则可以取某个范围内的任意值——身高、气温、神经网络里的某个权重。这个区分很要紧,因为它改变了我们描述其行为的方式,这正引出下一个想法:分布。
这里和这条学习阶梯的其余部分接上了头:每一个模型输入,最好都被想成是来自某个随机过程的一次抽样,而每一个模型输出同样是个随机变量。当你听到说某个数据集是「从一个分布中抽出来的」,意思就是每一行都是现实世界不停掷的那枚极其复杂的骰子掷出的一次结果。
分布:「可能性」的形状
[[probability-distribution|概率分布]]是一个随机变量的完整配方:它告诉你,对每一个可能的取值,有多少概率落在那儿。对一枚公平的骰子,分布是平的——每一面分到 1/6。对一枚作弊的骰子,它可能把概率堆到 6 上。唯一铁打的规则是:所有概率必须恰好加起来等于 1,因为*总有某件事*会发生。
对连续变量,我们画的不是一根根柱子,而是一条光滑的曲线,这里直觉需要一处温和的纠正:曲线的*高度并不是概率*。概率藏在两点之间曲线下方的面积里。所以对连续变量来说,取到任何单一精确值(身高恰好是 170.000…… 厘米)的概率实际上是零——我们只能问区间,比如「在 165 到 175 之间」。整条曲线下方的总面积,依旧是 1。
高斯分布:大自然最爱的那口钟
有一种分布出现得太频繁,频繁到为自己挣得了一个专名:[[normal-distribution|正态分布]],也叫高斯分布或钟形曲线。它就是你到处见过的那个对称小山包——身高、测量误差、考试分数。大多数取值挤在中央的峰附近,然后向两侧平滑而对称地变稀。两个数字就把它完全说清了:峰在哪儿,以及这口钟有多宽。
为什么它无处不在?一个叫中心极限定理的深刻结论说:当许多微小、互相独立的随机效应叠加起来时,它们的总和会趋向一个高斯分布——几乎不管每个小效应原本长什么样。人的身高是许多基因和许多顿饭加在一起的结果;测量噪声是许多细小抖动的累加。这种「许多小东西之和」的模式太常见了,于是钟形曲线就成了天然的默认选项——这也正是为什么那么多机器学习方法都悄悄*假定*它们的噪声是高斯的。
期望与方差:概括一团云的两个数字
一整个分布带在身上太沉了,于是我们把它熬成两个概括数字。[[expectation-and-variance|期望]](也叫均值或期望值)是长程的平均:如果你把这个随机过程跑上亿次再取平均,最终会落定的那个值。它是把每一种结果按其发生的可能性加权所得——对一枚公平的骰子,就是 (1+2+3+4+5+6)/6 = 3.5。
第二个数是方差:各种结果通常离那个平均值游荡出多远。方差小,意味着结果紧紧偎在均值附近(可预测);方差大,意味着它们把自己甩得到处都是(动荡不定)。由于方差是用「距离的平方」搭起来的,单位很别扭,我们通常对它开平方,得到标准差——它和数据处在同一种单位里,也更容易在脑中描画。两个分布可以拥有完全相同的均值,感觉却天差地别:一个是窄窄的尖峰,另一个是平摊一片。
这两个概念在机器学习里是承重墙。模型的期望误差,正是训练所要最小化的目标。著名的偏差—方差权衡——模型过拟合或欠拟合的根由——名字就直接取自方差。而你以后会遇到的随机梯度下降之所以行得通,恰恰是因为:用一小批随机样本估出的斜率,哪怕任何单独一批都带着噪声,它依然有着*正确的期望*。
从分布到学习:似然与信念的更新
现在是回报时刻。假设你手上有些数据,怀疑它们来自一个高斯分布,却不知道它的均值和方差。[[maximum-likelihood-estimation|最大似然估计]]把问题反了过来:在你能画出的所有钟形曲线里,哪一条能让你*实际看到的*这批数据显得*最有可能*?你挑的,是让你的数据最不令人意外的那个分布。这一个想法——选出最能解释你所观测之物的参数——正是一大批模型训练背后的引擎。
# pick the parameters that make the observed data most likely best = argmax over theta of P(data | theta) # Bayes' rule: turn it around to update a belief P(theta | data) = P(data | theta) * P(theta) / P(data) # posterior ~ likelihood * prior
还有第二种、互补的视角。[[bayes-theorem|贝叶斯定理]]是一条在新证据到来时*更新*信念的规则:从一个先验出发(你之前所相信的),按新数据与之吻合的程度去加权,最后得到一个后验(你修正后的信念)。垃圾邮件过滤器做的正是这件事——它先从「垃圾邮件有多常见」起步,再随着读到你邮件里的词,把这个估计往上或往下推一推。它是「以恰到好处的幅度改变想法」的数学。
你现在还不必背下这些公式——那是更靠后几关的活儿。眼下要紧的是这套世界观:数据是从分布中抽样而来,模型是对这些分布的猜测,而学习意味着调整这个猜测,让已观测到的数据变得尽可能不令人意外。把这一句话带在身上往前走,机器学习那颗概率的心脏就会一直讲得通。