献给所有文科生的转码指南:把别人的一年,压缩进你的 40 分钟。
为文科生定制的转码教学,通过重构统计学逻辑讲解线性回归等核心概念,降低技术入门门槛。
UP主: 何思远方Siyuan · 时长: 41:14 · 🔗 B站原视频
标签: 转码 · 统计学 · 数据科学 · 线性回归 · 编程入门
重新认识统计学:从底层串起知识网络
你可能会经常听到一种说法:学好了统计学能让一个人变得更智慧。不少同学也学过统计学,但是我考考大家,现在现场能默写出贝叶斯公式的同学,可以在弹幕里面投票。大家学了统计学,连最基础的概念都记不住,更别提在生活工作中受益于它了。一堆这么弯弯绕绕的数学符号和概念,怎么能帮我变得更智慧呢?
这不怪大家学习不努力,而是因为大部分课本里讲解统计学的方式是错误的。从描述统计到推断统计是一团散沙,而课本在非常有助于一个人理解知识的、该交付的推导细节上却是大量省略。你需要从底层串起统计学的知识,连成知识网络,才能够融会贯通。
接下来我会向你展示融入生活中思考的统计学。我们将会从线性回归聊起,将统计学与数据科学的常用概念串成网络,并且弥补课本上缺失的细节。希望这个视频能够帮助外行增长认知,帮入门者找到门路,帮精进者更上一层楼,帮助所有学习者省时间。但这并不是泛泛而谈,你会理解背后的所有数学原理,我会展示正确的教学顺序对于学习效率的提升有多大。不要一提数学就害怕,你有高中数学水平就足以听懂全部了。接下来我们一起见证。
线性回归热身:用数学模型预测房价
为了带大家领略统计学中的生活智慧,我们先从一个最简单的回归问题开始,带大家热热身,补充一下基础知识。
在经典的房价预测中,线性回归回答的问题是:我的房子有125平米,那么你觉得它值多少钱?所以我们用房子的面积,也就是X来预测房价Y,表示为下面的形式:Y = WX + B。也就是我们认为房价等于W倍的面积X再加上一个数字B。在统计学文献中,有时候会表示成这种形式,别怕,本质上和上面这个WX+B是一样的,就是 $\beta_0 + \beta_1 X$,这个其实就是B和W。
为了回答这个问题,我们需要一个数据集去让我们的模型来学习房子面积和房价之间的关系。比如屏幕右边的这个数据集,给出了很多对面积和房价的对应关系。这房子2万多一平的均价,真不便宜。我们把它绘制到坐标系中,就得到了这样一个散点图。然后我们要做的事情是什么呢?找到一条线去把X和Y之间的关系正确地表示出来。这个就是线性回归要做的基本的事情。
这里要提一嘴,在真实的房价预测问题中,我们所面对的X往往不只是面积一个,而是多个。就比如这样:$W_1X_1 + W_2X_2 + B$。这个模型其实包含了房子的两个特征了,不仅是 $X_1$ 的面积,还有 $X_2$ 是房间数量。这就是多变量线性回归。所以你经常所看到的可能是这样一个公式,加粗的小写W指的是一个向量,指 $W_1$ 和 $W_2$。加粗的小写X也是同理,就是 $X_1$ 和 $X_2$。它只是把两个写成一块了,就变成了一个加粗的X。或者这种带箭头的形式,它也代表的是向量,和加粗的意思都是一样的。
不要害怕多变量线性回归,一句话讲清:就是用多个X来预测Y,而且允许每一个X的系数不一样。我举个例子,假设我们拟合了一个模型,其中 $W_1 = 1.5$,意味着 $X_1$ 增长一个单位,代表Y平均增长了1.5个单位;然后 $X_2$ 增长一个单位,Y平均增加40个单位,因为 $W_2$ 是40。所以给定一套房子的面积和房间数量,比如97平米、两个房间,我们就可以通过简单的加法和乘法线性组合,来输出这套房子可能的房价。你会发现这个模型的预测值稍微加一下、乘一下算出来是230.5,真实值是230,很接近,说明这可能是个不错的模型。对于多维线性回归,你理解到这个程度就已经完全可以了。
几何意义上呢,相比起我们之前用W和B拟合那一条线给这个数据集,这次不一样,我们其实是多了一个维度了,从一条线变成了一个平面。所以我们是用 $W_1$ 和 $W_2$ 来确定了一个平面来拟合这个数据集。$X_1 = 97$ 和 $X_2 = 2$ 确定了这个平面上的一个点,这个点的高度也就是它对应的Y,也就是房价的预测值了。感兴趣的小伙伴,这个图是用Python的Plotly库画出来的,源代码会免费给出,大家也可以下载下来自己玩。
刚才就算你听得有点不懂也不用慌,无论我们是拟合一条线、一个平面还是更高维的,它都建立在一维的基础上,无非是多加了几个特征而已。所以接下来你完全可以把高维的这套东西抛到脑后,我们这里就用简单的一个X和一个Y来把一维线性回归理解清楚,这就够了。
均方误差(MSE)与损失函数:衡量拟合好坏的标准
现在我们遇到了这个问题:我们怎么得到这条最佳拟合线的呢?我们怎么确定它最好地表示出了X和Y的关系呢?
我们知道这条线 Y = WX + B 就是由W和B这两个参数值来确定的。那么怎么我们能够知道W和B这两个值呢?我们现在其实需要的是一个测量这条线到底拟合得好不好的方法。为此我们可以使用均方误差(Mean Squared Error,MSE)。这应该是大家高中就接触过的概念。
在线性回归中,我们通常会需要先拟合一条线进数据集,然后计算数据集上的每一个数据点到这条线的纵坐标的差值,然后把这些差值的平方和加起来求个均值,这就是MSE了。我们用这个像横着的M的符号表示求和,所以MSE也可以写成公式的形式。
MSE的特点是,对于拟合特别不好的那些数据点加大惩罚,因为是二次方嘛。所以如果你数据点中增加了这样一个离群点,在拟合线的下面很远,那么这个点与你线的距离不是很远吗?平方之后呢,这个距离就会特别大,会显著增加你这条线的均方误差MSE。表现在优化上,就是它会把你的线拽到下面去,你的线需要往下低一点,才能找到一个更好的位置来平衡这个离群点带来的信息和其他数据点带来的信息之间的关系。
而如果这条线拟合得很不好,我们可以想象MSE这个误差会很大,因为这两头的线距离数据点太远了。你的线需要调整斜率,也就是调整W。那这样也不行,你没发现系统性的偏差吗?你的线的B是肯定不对的,你需要把线整个往上挪一点。所以W和B不仅决定了这条直线的斜率和位置,还决定了MSE误差的大小。
为了更直观地看到这件事,我们能不能把MSE写成一个关于W和B的函数呢?也就是说让W和B来决定这个均方误差。这个显然是可以的,而且不难,不用害怕,只用把 Y = WX + B 的这个Y代入MSE公式即可写开。它就是预测值(也就是这个Y上面有个尖儿)和实际值的Y它们俩差值,然后平方再求平均数。均方误差越小,就说明这条线拟合得越好。
在机器学习中,均方误差命名为 J(W,B),它叫做损失函数(Loss Function),也叫代价函数(Cost Function)。你看到这个新函数不用害怕,它只是名字变了,以及前面的 \frac{1}{M} 变成了 \frac{1}{2M},除了个2,剩下的都没有变化,它就是MSE,它就是均方误差。
我们用Python把损失函数 J(W,B) 画出来,就会发现它大概长这样,它像一个碗。很显然,这个函数只有一个最小值,也就是这个碗底。为了最小化误差从而获得这个最佳的拟合线,我们其实就需要找到的是W等于几、B等于几的时候,这个总误差 J(W,B) 取到最小值,也就是到这个碗底。
梯度下降算法:AI模型寻找最优解的绝妙机制
对于学过高中数学的同学,怎么找一个函数的最小值呢?没错,求导令导数为零。经典统计学做的事情就是直接对损失函数关于W求导,然后关于B求导。这个反着的6啊,叫做偏导数,它其实就是求导符号。用纯代数运算,稍微化简一下,你就会获得最佳的W和B的表达式。这个时候只要把数据的X和Y每个数据点代入一下,就可以直接得到这条最佳回归线的斜率和截距了。只要自己手动算一下就可以。
但是问题来了,很多X和Y是非线性关系。在这些情况下,损失函数关于参数W和B的导数,在数学上是无解的(解析不可解)。我们根本没法从数学上算出来最小值在哪,也就没有办法得出那样的公式让我们代入数据点求出来。
机器学习对此给出了一个绝妙的解决方式:与其一步到位,不如我们一小步一小步逐渐下降到这个最小值。这样我们不需要直接知道误差最小值的那个点具体在哪,而是我们只需要在每一次迈一小步的时候,知道它在我们的每个方向,这样我们就每一步都走得更靠近这个最小值,最后就下降到了最小值。这个就叫梯度下降算法。当今最著名的AI模型,比如ChatGPT、DeepSeek,这些都是用梯度下降算法来训练的。
这种想法如何实现呢?我举个最简单的例子方便你理解。我们先把参数B扔掉,假设曲线就是这个 J(W)。这样少了一个维度,损失函数画出来就不是那个三维的碗了,而是一个二维的抛物线,它就是一个关于W的二次函数了。我们需要找到一个W值,让总误差 J(W) 最小。
现在的W是这个值,距离最优点还有一点距离。我们要做的就是一小步一小步下降,逐步更新W值。每一次更新W的值,都是旧的W值减去一个值得到一个新值。这个在数学上很容易理解,我们希望新值总比旧值更接近曲线最小值,所以我们减掉的这个值的正负(也就是方向)是必须要正确的。
怎么做到这一点呢?大家注意到这是关键点了,这就是这个算法的天才之处。我们要给 J(W) 关于W求导。导数的定义是原函数在这一点的切线斜率。所以如果我们每一次更新的时候,让新的W等于旧的W减导数,那么导数的正负会告诉你正确的下一步的方向。
比如说谷底在你左边的时候,导数(切线斜率)是正的,所以旧的W减导数会让你W变小,你的下一步就会往左边走,方向正确了。相反,如果导数为负,就代表谷底在你右边,那么你下一步就会往右边走。导数决定了下山每一步的方向,这就是我们的梯度更新机制了。
一开始斜率很大,曲线很陡,所以你下山就走得很快。越接近最小值、越接近谷底,切线越平,斜率越小,你就走得越慢。等这个斜率基本为零了,那就说明我们下降到了山谷,也就是最小值点。这时候算法就成功找到了最佳点。我们就这样更新W的值直到收敛,也就是W等于最佳值。这个时候其实MSE误差也是最小值了,我们就成功优化好了W这个参数。
在实践中为了保险,避免因为步子太大导致震荡,我们会给它乘上另一个参数叫 $\alpha$,也就是学习率,把每一步的长短稍微缩放一下。$\alpha$ 是一个很小的值,通常是0.01,所以它能有效地避免你步子迈太大跨过去了。
加上B也一样,我们同时更新W和B,这个就是更形象的在三维空间里面找它的山谷了。我们在一个三维空间里找最小值,通过求一次偏导更新一下W和B的值,然后再求一次导数再更新一下W和B的值。最终我们在损失函数谷底的W和B值,就是使这条回归线误差最小的W和B。我们的模型学到了 Y = WX + B 这条线的最佳位置。
这个就是梯度下降算法。这是一种极度有用的算法,里面蕴藏着我们学习任何东西的智慧。如果你想理解任何AI模型、机器学习模型,你都必须理解这个算法。
对梯度下降算法的探索,进一步催生了AI领域里的很多经典研究。比如研究人员发现步子不能太大,因为这可能会导致你根本没法到达你想要的地方,迈过去了不稳定;步子小一些总会到达的,无非是慢一点,收敛速度会很慢。这些问题催生了一个东西叫Adam优化算法,这个算法用动量来加速学习、减少震荡,用自适应学习率来逃离鞍点(也就是虚假的最小值点)。这些东西你听不懂没关系,因为这不是今天的主要矛盾。
给大家复习一下:首先我们发现直线的最优拟合问题,等价于最小化总体误差。所以我们给高中就学过的那个均方误差除以2,得到了损失函数。然后在损失函数上进行梯度下降,也就是关于W和B不断求导,一直下降到它的最低点,就得到误差最小的时候的W和B的值。这两个值就决定了这条唯一的直线,也就是最优拟合。这个就是线性回归模型的机器学习解法。
最大似然估计(MLE):均方误差背后的统计学源头
现在让我们再深入一层。我们高中的时候统计学就学过这种均方误差的求法了,叫最小二乘法。那时候都是实用主义,直接记住公式解题就可以了。但是我们却没有问过一句:为什么要用MSE呢?这个计算方法是怎么来的?
如果要回答这个问题,我们必须要追寻统计学更根本的源头。其实,均方误差只是最大似然估计法的一个特例。如果你想要更好地理解当今人工智能运作的机制,包括机器学习这些东西,那你就一定要把统计学理解得更深一些,不能停止在MSE和线性回归,而是要去理解MLE。
MLE就是最大似然估计(Maximum Likelihood Estimation)。不用畏惧这个新的名词,最大似然估计它就是一种从数据中挖掘模型的办法。说人话,就是一种给已经发生的事情找原因的方法。
比如你在办公室门口的地上看到很多水渍,最有可能发生了什么?我给你几个选项,很明显,下雨最符合对吧?用统计学的语言来说,就是它的似然(Likelihood)是最大的。我们在生活中其实无时无刻不在做这种思维过程:我们观察到了一些事件,然后我们自然地推断这些事件背后的原因,然后做出更准确的决策。
同样地,在线性回归中,我们的目标其实是要找到数据生成机制(Data Generating Process, DGP)。比如我们看到了一堆数据点,我们希望通过找到最可能生成这些数据点的数学表达式来认识它们背后的规律。其实也就是给数据找解释。
比如大家看这三条线,哪条线更有可能是生成了这些点的DGP呢?很显然是第二条。原因其实是因为它的似然是更大的。那么我们怎么从数据中找到这条最佳的拟合线呢?换句话来说就是,线是如何生成这些点的?
在线性回归中,这个生成机制就是正态分布。正态分布是任何学过统计学的同学应该都会学的。正态分布中,我们知道数据点是更可能出现在概率密度更高的那个中心区域的。比如人们的身高,大部分都在均值附近的一个区间里面,1米5以下的和1米9以上的都是少数。
而在线性回归中,我们需要把正态分布竖过来看。我们现在明白两件事:第一,正态分布更有可能生成靠近钟形曲线中心的这些点;第二,一条线本质上就是很多个点。所以听好了,如果我们把线上的每个绿点视为正态分布的均值,那么它更有可能生成它附近高密度区间里的点。所有的绿点会连成一条线,所以说我们的最佳拟合线,最可能出现在数据密度更高的中心区域。
明明就是一个回归问题,我们算就完了吧,为什么要扯上正态分布这种东西呢?因为它会带来一个数学上的神奇效果。接下来我会证明,MSE和MLE是完全等价的。别怕,你能看懂。
首先,每个数据点的纵坐标都距离回归线有一小段距离,这个距离用虚线来表示,我们称为D(Distance)。一共六个点,所以我们把所有的D平方求和,然后再除以6,我们就得到了均方误差。
现在我们用最大似然估计的视角来看待优化这个直线位置的过程,也就是用直线来生成这六个点。根据正态分布的概率密度函数,我们给定一条直线,它附近的每一个点出现的概率就是这个公式。如果你还没有学会正态分布没关系,总之 $\pi$ 就是圆周率,e是一个2.7几的数,它们俩都是正数。所以我们能看出来,D越小,那么这个概率P它就越大。距离越小,它被生成的概率就越大。很符合我们刚才的直觉,每个点离直线越近,被生成的概率就越大。
我们把每个点各自出现的概率相乘,计算出的就是所有这些点同时被直线生成的概率。这个就是似然的定义。所以在这六个点的案例中,我们所谓的最大化似然,其实就是最大化这六个点被生成概率的乘积。
常数不重要,前面的部分是可以扔掉的。我们现在要最大化的就变成了带有e的这一部分,干净多了。它等价于稍微整理一下的式子。而最大化它,等于最小化它去掉前面的负号。我们现在可以把e去掉了,因为e并不影响结果的单调性。
我们现在再看一看MSE的公式,对照着看。等等,你发现了什么?我们明明是从最大似然估计出发的,我们现在怎么在做的事情变成了优化MSE均方误差了?也就是说两件事是等价的。基于正态分布假设的最大似然估计,算到最后,它就等价于均方误差。
偏差与方差的权衡:为什么完美的拟合往往是错的?
模型是一种对于世界的反应方式。MSE误差反映的就是你如何学习现有数据,从而做出对于世界的最佳反应的过程。这是一种聪明,但这绝非智慧。因为在使用均方误差或者去用最大似然估计中,有一件潜在的危险,它会让一切我们刚才看到的这些价值荡然无存。
我们还是回到办公室有水渍的案例。原本我们选的最有可能的原因是外面下雨。现在我们新增一个原因:有几个人在办公室打了场水仗。请大家注意,这个原因导致办公室里出现很多水的概率,其实比下雨导致办公室里出现很多水的概率是更大的。因为通常下雨天办公楼门口会有吸水垫,鞋底的水就被清理得差不多了。也就是说,打水仗的似然更大。
所以最大似然估计方法会选择这个原因,因为它的似然更大。但如果你就这么相信这件事了,那以后任何时候你见到办公室有水,你都用“几个人打了场水仗”来解释,显然是不合适的。因为办公室里打水仗本身出现的概率很低。
这个问题对应的线性模型中会是怎样的呢?我们之前见过最好的模型是第二条线。那我们现在把第三个模型换成这样:曲线弯弯绕绕的,但成功拟合到了所有的数据点。这时候它的均方误差低到了极致,它的误差等于零。也就是说用最大似然估计法来看,这个是最好的模型。
但是各位你想想看,这个模型能用吗?它是出了什么问题呢?它过度地拟合了训练它的数据集。带来的结果就是,虽然它用一个复杂结构完美解释了它见过的每个数据点,但是你给它一个没见过的数据(比如房间大小205平米),它太不稳定了,完全不能准确预测这个房价。预测错了,还不如一条简单的直线来得有效。
它为了完美拟合当前的数据集不惜代价,就像当年的托勒密为了建立地心说的理论不惜代价一样。这些模型都没有正确抓住现实的本质,因而它过于复杂。牛顿说,大自然喜欢简洁。因此,单独使用MLE最大似然估计的方法还不够有智慧。
这个就是我们在寻找智慧路上遇到的最大的问题,也就是统计学里的经典问题:Bias and Variance Trade-off(偏差与方差的权衡)。这个问题的思考让我受益良多。
想象一下,我们现在面对这样一组数据点,要找出它们背后的规律。我们有两种极端的选择: 选择一:用一条直线来拟合,用最简单的模型。优点是简单易懂,不受任何个别点的影响。但是缺点是太简单了,没有办法捕捉数据中的复杂性。这个就是高偏差(High Bias)的情况。 选择二:用一条完美经过每个点的复杂曲线去拟合。它的优点是表现是完美的,但它的缺点就是对于新数据可能预测很差。这个就是高方差(High Variance)的情况,它过拟合了。
最好的模型既不过度简单,也不过度复杂。在生活中也是一样,如果我们试图去抓住所有机会,我们就会被短期的偶然事件、被他人的评价牵着走,就像一个高方差的模型,永远在调整,永远不稳定。但是如果我们只坚持一种刻板的模式,不吸收任何新的信息,我们其实就变成了一个高偏差的模型,无法捕捉真实的复杂性,难以适应现实。
正则化技术:让模型学会“大道至简”的智慧
聊到这儿,你会发现最大似然估计的问题它很蠢。你塞给它一个模型,它不管三七二十一,就尽可能地把这个模型贴近数据。所以如果它拿到的模型太简单或者太复杂了,它就表现很差。纯粹的最大似然估计做不到选择模型。
既然如此,数学里面有没有更智慧的方法呢?有的。机器学习有一个经典策略,是先做所有的事情,然后让模型自动地筛选出最重要的几项,把多余的项的系数压缩到很小甚至是零(其实就是把这些项扔掉),最后你就得到了一个刚刚好的模型。我们用正则化技术来做到这一点。
又来新名词了,别被吓到。其实正则化很简单。我们拿到模型的所有系数,从 $W_1$ 到 $W_4$,然后给它们平方再求和。这个就是所谓的正则化项。然后我们给原本的损失函数 J(W,B) 加上这个项。
你可能还不明白眼前的式子代表着什么。我们的损失函数开始具备了权衡的智慧:前面这一半是经典的均方误差模型,越贴近数据,这项就越小;而后面这一半是正则化项,模型越简单,这一项就越小。两项同时达成最小,你整体的损失才是最小的。
而你刚才也见到了,模型越简单,就越难以贴近数据的复杂模式。所以这两项牵制着彼此,不可能同时达成各自的最小值。那么怎么让这个相互牵制的力量刚刚好达到最佳的平衡呢?我们引入一个超参数 $\lambda$ 来控制这个正则化力度的大小。
$\lambda$ 越大,后面这一项就越重要,我们就越倾向于选择一个更简单的、或者更固执的模型。反过来 $\lambda$ 越小,我们的模型就会越复杂,对数据就越敏感。这就是完整的正则化损失函数。
那么这个正则化到底好在哪呢?我们现在重新尝试挑选模型看一下。如果不加入正则化,我们会错误地选择最下面那个过拟合的模型,因为它的均方误差是最小的。但是一旦加入正则化,我们发现,即使最下面的模型能更好地拟合所有数据点,但是因为它的模型太复杂了,系数太多了,导致后面的正则化项变得很大,所以它整体的损失变大了。当然最上面这个模型太简单了也不行,虽然正则化项会很小,但是前面的均方误差又太大,导致整体的损失还是比较大。
所以现在我们发现,给损失函数加了正则化项之后,我们又能按照最小化损失函数的原理,正确挑选出那个刚刚好的模型。
总结一下:模型越复杂,对数据越敏感,就会导致你看似误差很小,但实际上数据已经过拟合了。而正则化项是通过惩罚模型的复杂性,减少了你过多的对当前数据的依赖,让你的模型在偏差和方差之间找到平衡,也就是既不过度简单,也不过度复杂。
如果你在理解一个东西的时候想得太复杂,那么它也许是错的。有一个心理学的研究叫“Less is more”,发表在顶刊上。它发现人类在做决策的时候,通过有选择地关注更少的数据,反而能够达到更好的效果。放在我们今天的话题里,就是我们希望背后那个模型是简单而且有效的,毕竟大自然喜欢简洁。
苏东坡在常州临终前,对维林长老等亲友留下的遗言只有四个字,叫做“着力即差”。正则化技术就是在告诉我们的模型“着力即差”。它实际上是通过降低模型对于数据表层波动的敏感性,使模型有机会捕捉到数据分布的底层规律,从而能够在没见过的数据上也能表现良好。
贝叶斯定理:先验知识如何决定我们的决策
正则化的思想远不止于此,它背后蕴含的哲学可以指导我们的人生决策。正则化背后的统计学基础正是贝叶斯定理。
贝叶斯定理的核心其实在于将先验知识整合进模型中。这个公式告诉我们,每次见到新数据之后,我们会对世界产生的新的理解(也就是后验概率),它取决于两个关键因素:第一个是我们本来就有的信念,也就是所谓的先验;另一个是对于新数据的解释,也就是我们一直提及的最大似然估计。
如果我们抛弃掉不影响模型选择的常数项(也就是分母),那么贝叶斯公式的结果它是正比于似然和先验这两个东西的乘积的。也就是说,我们根据新的数据,用最大似然估计来更新我们的先验,我们就得到了对世界新的认识,也就是后验。贝叶斯公式描述的就是这样一个认识更新的过程。
为了理解贝叶斯公式以及它是怎么应用到正则化中的,我们需要先理解先验知识是什么。我们可以通过股市中的例子来理解。在股市中,普通股民一看到一条上扬的K线图,可能会在微信群、新闻媒体上看很多信息和其他人的评论,甚至可能求助于占卜玄学,于是做出判断此时应该大批买入。而专业的交易者,他不会被K线的表象所迷惑,他们可能会去观察企业的财报、宏观经济数据、政策,根据自己的知识框架独立得出判断。比如K线的短期上扬只是经济周期中的小波动,他们看到了长期的衰退,于是加速退场。
这两批人有什么不同呢?普通股民相信的是直觉和媒体报道,有经验的投资者相信的是经济数据和专业知识。他们的先验知识不同。先验知识决定了我们就能够捕捉什么样的信息。
为了更具体地解释先验知识如何影响决策,我们回到先前的案例:你在办公室门口看到很多水渍,发生了什么?根据贝叶斯定理,我们知道一件事发生的后验概率等于似然乘以先验。也就是每个选项导致事件发生的概率,乘以这个选项本身发生的概率。
我们先比较似然。天气晴朗、刮风似乎都不太可能导致地上有水渍,所以它们的似然很小。相比起来下雨更有可能导致地上的水渍,所以它似然大一点。而办公室打水仗这件事如果发生了,几乎百分百导致地上都是水,所以它的似然是最大的。
但是当我们看先验的时候,办公室打水仗的先验概率是非常非常小的,因为这件事本身出现的概率极其的小,365天有一次就不错了。而对比起来天气晴朗、刮风、下雨都在生活中经常出现,所以这些选项本身发生的概率都比较大,也就是先验都比较大。
最终我们把最大似然估计的概率和先验概率乘起来,我们发现只有下雨导致水渍的后验概率是最大的,所以我们选择下雨。这就是一次典型的贝叶斯决策过程。
这个计算过程在我们大脑中是自动进行的。比如只看到下雨和办公室打水仗这两个选项,虽然它们都能解释现象,但我们觉得下雨导致水渍的现象会更自然,所以我们更倾向于选择它。同样地,在这三个模型的选择中,之所以我们不选择最复杂的模型,是因为虽然这个模型的似然很大,但它的先验概率不够大,它太复杂了,这么复杂的模型不可能出现。
这就是为什么我们的大脑被称为贝叶斯大脑,它能够结合之前的经验和新的数据做出明智决策。贝叶斯定理这么简洁,但成功描述出了人类决策的过程,所以它成为了人类的外置大脑。工业领域的智能决策系统和AI大语言模型,都以它为核心。
贝叶斯与正则化的同构:不过度拟合你的人生
我们现在再回到我们的线性模型中。有同学刚才可能有一个疑惑:贝叶斯定理为什么能跟正则化扯上关系?
我们知道贝叶斯的后验等于似然乘以先验。似然怎么算呢?就是我们刚才讲的最大似然估计。而先验就是模型本身出现的概率。比如我们的模型是 $Y = W_1X + W_2X^2 + B$,那么先验就是 $W_1$ 和 $W_2$ 这两个主要系数同时出现的概率。我们把似然和先验乘起来,就得到了后验概率的整体估计。
我们现在要最大化这个整体概率。常数项不重要,划掉。为了方便计算,我们给它取一个log做一下对数变换,不改变单调性,乘法就变成了加法。我们把负号去掉,目标就变成了最小化这个式子。
请你停下来观察一下,这个式子的形式有没有一点熟悉呢?没错,它就是你刚才见过的加入正则化的均方误差。我们从贝叶斯定理一步一步走,结果推出了正则化。我们发现贝叶斯公式和正则化技术在数学上是同构的。
再补充一点点正则化技术的数学细节。目前你看到的所有系数平方求和的这个正则化惩罚项,学名叫做L2正则化。这是你的先验分布是正态分布的效果,它会温和地压缩每一项的系数,在不抛弃任何一项的情况下,帮助你挑选出更重要的项。
但是如果你的先验是一个拉普拉斯分布,那么经过同样的计算过程,你其实得到的是对于线性回归的L1正则化。它的唯一区别就是它后面不再是W平方,而是直接给W本身求和了。它会帮助模型彻底扔掉一些不重要的项,也就是把一些项的系数压缩为零,从而简化模型。
你会发现你的先验不一样,遇到相同的数据会做出不同的选择。比如成长经历不同的学生,在相同的大学、相同的专业里的行为不一样,之后的人生道路也不一样。这个就是先验知识的重要性。
我们的人生就如同这无数特征、无数维度的数据,我们要选择哪些项更重要,以及如何平衡它们。比如我们可能会花时间去抓住时代的风口,它会带来很多机会,但同样它可能会让你变得很空虚;你可能会花时间用来构建自己的个人生活,它会让你幸福,但是有人会觉得这样很懦弱;有的人会把很多时间花在朋友和社交上,它会带来很多幸福,但一个人回到家里面的时候也会感觉到空虚;很多人也会把更多的时间花在专业精进上,它会让你变得很强大,但也有可能让你变得很单调。
我们需要把时间分配到不同的事情上,给不同的事情不同的系数,这个W不能太大,也不能太小。所以我本科的问题是过拟合了人生。我本科的时候看到任何新数据我都去努力拟合它,看到任何机会都去抓。我觉得自己能做太多事了,又觉得自媒体能做,又觉得能做教育创业,又觉得学习要做到最顶尖,又觉得要做科研、要健身,而且要求每一件事情都要做到最佳。
这样的结果就是经常我会被自己的生活压垮,而且容易被别人的三两句话勾走,把大量时间投入到一个可能不重要的事情上去。这就导致了一个高方差(High Variance)的模型:什么领域都有,但什么都不精专,我的经验没有足够的穿透力去泛化到我未来的生活中。
贝叶斯定理给了我重要的启示:现代社会对于年轻人而言是过于繁杂了,如果你想要真正有效地去拟合这个世界,你需要大幅简化生活模式,你只保留真正长久对你有益的事情。如果回溯我个人的历史,我会发现我自己曾经在意的很多事情,比如高考时候的一次模考结果、大学时候的一次演讲失利、工作中的领导批评,在现在看来只是噪音。
你真正想要的是什么?有没有方法能够惩罚你对不重要事物的敏感性?这个就是贝叶斯思维教给我们的一点人生智慧。同样地,在数据科学的实践中,你会发现一个更简单的模型通常也比包含了所有变量的模型表现要更好,因为它不受噪音影响。
我想起黑塞的《悉达多》里的一句话:“大多数人仿佛一片落叶在空中翻滚飘摇,最终踉跄着归于尘土;有的人极少数如同天际之星,沿着固定的轨迹运行,没有风能动摇他,他心中自有律法和轨道。”
坦然接受不可避免的误差(Irreducible Error)
说到这里产生一种无力感,那就是人生是有标准答案的,我们要去寻找自己的标准答案。可是人生可以最优化吗?
刚才我们为了讲述方便,省略了每一个模型中都隐含着的一项叫 Epsilon($\epsilon$),它被称为误差项或随机扰动项。如果我们拿到数据集什么都不拟合,那么 $Y = \epsilon$,到处都是误差。如果我们只拟合一条平行于X轴的线,那么模型就变成了 $Y = \beta_0 + \epsilon$,误差依然很大。进一步我们允许捕捉Y和X的关系,我们就得到了 $Y = \beta_0 + \beta_1X + \epsilon$,这条线既有截距也有斜率,误差就减小了很多。但是还不够,于是我们引入X的二次项,此时我们其实已经得到了解释这个数据的最佳模型了。
但即使如此,误差 $\epsilon$ 依然存在。所以 $\epsilon$ 的名字叫做 Irreducible Error(不可避免的误差)。你无论拟合得再好,也总有一部分数据点是你无法解释的,$\epsilon$ 永远存在。为什么?因为数据生成机制的随机性。
线性回归的本质是为了找到一条线,最大化它生成所有数据点的概率,而不是让这条线真的穿过每一个点。就像人生的幸福从来不依靠把每件事做到100分,而在于明白,任何的失败和成功都不足以定义你的样子。
误差永远存在。如果你太在意这些 Irreducible Error,那么你就会把随机噪声当成自己的错误,从而过度反思,变得很拧巴、很痛苦。在商业中,这种误判会导致大量经济损失。比如我见过不少产品团队的领导,非常在意那些少数重要用户不付款的原因,认为是产品推广策略出了问题,非要员工搞清楚这部分用户的行为路径,花费大量的时间和人力成本去纠偏。其实这个才是很多产品推广失败的原因。这就是不尊重统计学规律,错误使用了数据科学。
所以我要批判这样一种流行的说法:“失败了要从自己身上找原因,而你成功了要归功于外界运气,这样你才能戒骄戒躁,持续进步。”我的想法正好相反。我希望大家在遇到 Irreducible Error 的时候,失败的时候相信是运气不好,而在成功的时候,相信是自己的内在实力和世界发生了共鸣。不要委屈自己,在错误里面过度反思。一位年轻人要复制成功,而不是避免失败。没有任何一片枯黄的落叶,值得你为它忽略整片森林的葱郁美好。
同样地,“得之我幸,失之我命”这种说法也是错的。统计学告诉我们,这句话要反过来:“得之我命,失之我幸”。我们的生命正如同这条曲线,在万事万物之间穿行。祝愿你平衡好偏差和方差,坦然接受不可避免的误差,在人生给你的数据集里玩得开心。
知识之间有神圣的先后顺序,而我要做的就是将它还原出来。我必须得说,只是最基础最简单的线性回归,其中也有太多的知识和道理可以发掘了。为了让大家都能跟上,其实删除了大量的技术细节,但是仍然达到了现在的内容量。
感谢你能看到这里。你看你已经了解了视频开头出现的这些概念,以及它们是如何联系到一起的。接下来你还可以再进一步探索:比如通过 Irreducible Error,你就可以了解置信区间、标准误这些经典统计推断的概念;继续探索模型架构,你就能了解广义线性模型、逻辑回归、决策树、随机森林;探索梯度下降算法,你就会了解凸优化理论,从而理解深度神经网络等模型是如何训练的;继续探索数据特征的维度,你就会了解因果推断;去探索正则化的 $\lambda$ 这些超参数,你可能会理解机器学习和交叉验证等训练策略。
以上这些都体现在数据科学的深度上。而至于它的广度,数据科学已经成为了诸多行业和学科的核心增长引擎了,比如在人工智能、数字化医学、生物信息、社会科学、新材料,甚至在企业的数字化转型中。根据牛津大学2024年的最新研究,具备数据能力能够让你的薪资增长20%到40%。无论在哪个行业,薪资还会随着你的技能包的扩充而翻倍增长。
统计学和编程能力是支撑这一切的基础中的基础。关于统计学,仔细学完这期视频,你对统计学的理解就已经超过99%的行外人了。有了你在视频里学到的基本框架,后续你的探索会高效不少,你会发现具体知识的补全反而是更简单的部分。关于编程,写代码是你把今天学到的这些所有模型真正变成现实的唯一方法。你需要在真实数据集上跑模型,解决真实的问题,才能在这个过程中精进手艺,免于纸上谈兵。
最后,我希望我达成了开头给大家的这四个承诺,希望能够让各个层次的学习者都有所受益。