深度学习中的概率论与数理统计
以前学概率论和数理统计的时候一直似懂非懂的,所以我决定重新开一个笔记,把这两个概念从最底层的原理开始讲起,重新审视什么是概率和统计。这个笔记主要记录那些和深度学习有关的内容,无关的内容就不做记录了。更具体的概率论和统计学的内容可以参见数学笔记。
概率工具
什么是概率?概率是我们想象出来的一种工具,用来掩盖我们全知全能的缺失。概率是理论的,是上帝视角的。
概率论包括概率和频率两个部分,概率负责定义规则(随机变量、期望、分布),频率负责建立规则与现实的联系(大数定律、中心极限定理)。
对无知的建模
所有的一切都必须从无知讲起。很显然,如果我们能了解一切状态,在经典力学框架下,或者说我们对世界的朴素认知下,抛硬币这件事本身是一件确定性事件。
然而,任何人抛出一个硬币,其他人都无法猜中。这本质上是因为我们无法对整个抛硬币过程中全部的变量和影响因素进行观测导致的。我们缺乏对这件事的认知,所以我们说抛硬币是一个混沌系统,我们的认识是不完全的。
很显然,我们面临诸多问题:
- 我们无法测量风力、重力、角度、阻力等诸多事物
- 对任何一个事物,我们无法精确测量
- 我们也无法写出一个能解析如此复杂的系统的方程式
但是我们还是想知道抛硬币的结果。于是我们开始尝试对这个混沌系统进行建模。在历史发展中,人们最终发现“随机性”和“概率”最能解决这个问题,其最为直观,简单到小学生都能运用。换句话说,概率是我们处理复杂到无法计算的确定性时最省力、最有效的工具。
截至目前为止,经历了数百年对概率和随机性的研究,如今基本沉淀下来了两个主流的学派:
- 频率学派:认为概率是大量重复试验中发生的频率的极限。即便单次是确定的,宏观统计仍然呈现出1/2。
- 贝叶斯学派:认为概率是信息缺失下的信心程度;换句话说,概率不是硬币的属性,而是我们对硬币状态了解的程度。
随机变量
随机变量(Random Variable)是概率的载体,可以把现实事件变成数字。又或者说,概率是一种用来连接现实世界与数学计算的容器。
比如说,“正面朝上”是一个物理现象,数学没法直接计算“正面 + 正面”。所以我们需要一个“函数”把现实映射成数字。
我们定义一个变量 \(X\):
- 如果是正面,记为 \(1\)。
- 如果是反面,记为 \(0\)。
此时,这个 \(X\) 就是 随机变量 。它和普通代数变量(如 \(x=5\))不同,\(x=5\) 是确定的,而 \(X\) 是一个未知的盒子 ,你没打开之前,不知道它是 0 还是 1,但你知道它取 1 的概率是 50%。
期望
期望值 (Expectation / Expected Value, \(E[X]\) 或 \(\mu\))是根据概率算出来的理论平均值。期望是关于概率的。
比方说,假设你玩一个掷骰子游戏:
- 掷出 1-5 点:你输 1 元。
- 掷出 6 点:你赢 5 元。
这就构成了一个随机变量 \(X\):
期望是一个定值。
分布
期望值说明了一个值:理论平均值。那么对于所有的结果,根据概率能得出他们的一个分布情况吗?
分布(Distribution)就是概率的完整清单,其展示了所有可能结果的可能性长什么样子。换句话说,我们根据概率来画图,画结果,画出来的就是分布。所以分布也是一个理想概念,是一个上帝概念。
模型参数
上帝在造分布的时候,不是随便画的,而是通过调节几个关键旋钮来决定的。这些旋钮就是参数。
比如说对于抛硬币,上帝旋钮叫做P,也就是正面朝上的概率。如果把P拧到0.5,硬币就是均匀的;如果把P拧到0.8,硬币就是作弊的。这个P就是模型参数。
又比如,对于身高的分布,上帝有两个旋钮:均值和方差。均值决定波峰在哪里,比如平均身高是170cm;方差决定波峰有多胖,即大家身高是都差不多,还是参差不齐。
模型参数是决定世界随机规律的核心设定值。
常见的分布包括:
- 伯努利分布,也就是扔硬币的分布,只有一个参数P(正面概率)
- 泊松分布,等公交,只有一个参数λ(平均等待时间)
- 指数分布,针对寿命,只有一个参数λ(衰减率)
频率与极限理论
如果说概率是剧本,那么频率就是演出。概率是确定的,频率是不确定的。概率是上帝的,频率是凡人的。
很显然,我们去研究频率=1的情况如抛一次硬币是无异议的。我们想要弄清楚规律,于是我们在频率角度上主要研究当频率趋向于无穷大的时候,随机现象呈现出的定性规律。
独立同分布样本
独立同分布样本 (I.I.D. Samples)。
你真正开始玩这个游戏了:
- 第一次,你掷出 3,输了 1 元 (\(x_1 = -1\))。
- 第二次,你掷出 6,赢了 5 元 (\(x_2 = 5\))。
- 第三次,你掷出 2,输了 1 元 (\(x_3 = -1\))。
这些具体的数字 \(-1, 5, -1\) 就是 样本 。
频率
频率 (Frequency)就是在你的实验中,某个结果出现的次数占总次数的比例。
比方说,我们开始扔硬币了。你扔了10次,8次朝上(正面),正面朝上的频率就是0.8;你扔了100次,60次朝上(正面),朝上的频率就是0.6。
频率是我们做实验记录下来的值。
经验分布
一般我们提到分布的时候,说的都是概率分布,而不是频率分布。为了防止混淆,在实践中,我更推荐使用经验分布(Empirical Distribution)来称呼频率分布。
经验分布就是把所有实验结果画出来,一般用直方图(Histogram)来画。
样本均值
样本均值 (Sample Mean, \(\bar{X}\))就是把手里的实验结果加起来,然后除以次数。
我们一定要记住:样本均值是一个随机变量。期望值不变,样本均值会变。你玩了几把游戏,得到了一个样本均值,然后再玩几把,可能这个样本均值就变了。换句话说,样本均值总是会随着运气的变化而跳动。
大数定律
大数定律 (Law of Large Numbers, LLN)是频率的归宿,说明只要次数够多,运气就会变成必然。
大数定律非常震撼:
只要你实验的次数 (\(n\)) 足够多,样本均值 (\(\bar{X}\)) 就一定会无限接近上帝视角的期望值(\(\mu\))。
分布?
微小的随机因素?
中心极限定理
中心极限定理的英文是Central Limit Theorem, 简称CLT。在这里Central的意思是“最重要的”、“最核心的”,意思是说这个定理是这个学科中最核心的、最重要的东西。Limit是极限,意思是当样本数量趋向于无穷大的时候,样本均值的分布极限就是正态分布。
一句话总结字面意思就是说:
概率论中最核心的理论,就是当样本数量趋近于无穷大的时候,分布趋向于正态。
换句话说,如果说概率是上帝的剧本,那么CLT就告诉我们:剧本里的误差也是有规律的。后面学习的似然就是我们猜剧本的工具。
中心极限定理 (Central Limit Theorem, CLT)是大数定律的进阶版。大数定律告诉我们,投硬币无数次后,正面朝上的次数的平均值会无限接近于50%,然而所有的硬币朝向分布是什么样的呢?
中心极限定理的神奇之处在于: 不管你原本的随机变量是什么分布 (哪怕是古怪的锯齿形、只有 0 和 1 的硬币、或者是骰子),只要你把很多个独立的随机变量 加起来(或取平均) ,这些总和的分布,最终都会变成一个 正态分布(钟形曲线) 。它解释了为什么正态分布在自然界中如此常见(身高、误差、噪音),因为它们都是无数微小随机因素叠加的结果。只要量够大,误差分布就是正态的。
在现实世界中,数据总是有误差的。我们把误差叫做Noise。这些误差的来源多种多样,我们没办法搞清楚。但是我们可以合理假设:这些导致了结果产生误差的原因是由无数多个微小的、相互独立的因素导致的。
既然误差是由无数个微小因素叠加导致的,那么根据中心极限定理,这个总误差的分布,一定是一个正态分布!也正因此,我们在设计损失函数的时候,才可以大胆的假设:预测值和真实值的误差是服从正态分布的。
如果不信CLT,我们就不能用MSE了。为什么呢?因为:
- 我们的数据中本身就带有误差,这些误差是由无数个微小的因素叠加而成的
- 既然误差是由无数个独立的微小的因素叠加而成的,那么总误差的分布,就一定是一个正态分布(中心极限定理)
- 既然误差服从正态分布,那么我们就能写出概率密度公式,其PDF为:\(P(\epsilon) = \frac{1}{\sqrt{2\pi}\sigma} e^{-\frac{\epsilon^2}{2\sigma^2}}\)。
- 我们知道误差=真实值-预测值。换句话说,\(\epsilon = y - \hat{y}\)。我们把这个式子带入到上面的概率密度公式中,写出误差的概率密度公式为:\(P(y | \hat{y}) = \frac{1}{\sqrt{2\pi}\sigma} e^{-\frac{(y - \hat{y})^2}{2\sigma^2}}\)。这个式子就是在算:鉴于预测值是\(\hat{y}\),真实值y出现的似然度是多少。
- 现在我们知道了一个房价预测的概率,那么我们就可以得到N个房价预测的似然。似然度=所有样本概率的乘积,假设我们要预测N个房价,那么:\(L = \prod_{i=1}^N P(y_i | \hat{y}_i) = \prod_{i=1}^N \left( \frac{1}{\sqrt{2\pi}\sigma} e^{-\frac{(y_i - \hat{y}_i)^2}{2\sigma^2}} \right)\)
- 我们要找到似然函数中的最大值,但是概率连乘太难算了,所以我们全都取对数,把运算变成对数的加法,即取对数似然;转变为对数格式后,我们把常数项扔掉,因为常数不影响最大值的位置。于是,我们就变成了求对数似然的加法的最大值:\(\sum_{i=1}^N -\frac{(y_i - \hat{y}_i)^2}{2\sigma^2}\)
- 数学变换为负对数似然,就变成了找到最小值。我们把上面分母中的常数项也去掉,也不影响极值位置:\(\text{Minimize } \sum_{i=1}^N (y_i - \hat{y}_i)^2\),这就是SSE(Sum of Squared Errors),如果除以样本数N,就是MSE(Mean Squared Error)。
统计学
概率论是正向的,我们在知道参数的情况下,以上帝的视角来推导结果数据。而统计则是逆向的。
比方说,如果我们捡到了一枚硬币,我们不知道它是不是均匀的,于是我们就来做一组实验,扔上10次硬币,来反推硬币是否均匀。
如果说概率和参数是上帝设置的,那么统计就是通过凡人手中的数据,来破解上帝设置的参数。
统计推断与参数估计
统计推断是统计学中的一个非常大的领域,整体来说就是用样本数据来推测总体特征。统计推断包括参数估计、假设检验、预测等。在深度学习中,我们用的最多的就是参数估计。
参数估计是统计推断里的一类具体任务,他的目标很明确:算出模型里那个未知的数字(参数)是多少。他不关心这个数字对不对(假设检验关心对不对),只关心数是多少。
似然
似然(Likelihood)是在数据已经发生的情况下,参数是某个值的‘可能性’。
比方说,我们设定扔硬币正面朝上的概率是0.5,然后我们扔了一次硬币,发现是正面。好了,这是一个铁一般的事实,不能改了。
现在,我们有两个嫌疑硬币可供选择:
- P=0.1的硬币,也就是只有10%的概率出正面,我们称为硬币1
- P=0.9的硬币,也就是有90%的概率出正面,我们成为硬币2
好了,硬币1出正面的概率才0.1,结果就被我们碰到了,这看起来简直是奇迹。那么既然是奇迹,我们就认为硬币1是真凶的可能性就很低。我们把这种概念成为硬币1的似然度很低。
同理,硬币2本身就有90%的概率出正面,那么我们手中的这枚硬币是硬币2的可能性显然是更高的。于是我们说硬币2的似然度很高。
换句话说,当一个事情已经发生的时候,谁更有可能让这个事实发生,谁的似然度就更高。
我们在这里说的似然度(Likelihood Value)指的就是似然的具体数字。对于硬币1,当P=0.1的时候,似然度=0.1;对于硬币2,P=0.9,似然度就是0.9。
换句话说,单个样本的似然度,就是单个样本在理想概率下的概率值。
参数负责构建理想的概率分布曲线,样本数据是真实世界的落点,而似然度就是这个现实落点在理想世界中对应的高度。
似然函数
似然函数(Likelihood Function)是一个公式或者说一条曲线,它包含了所有可能的P值(从0到1)以及他们对应的可能性。
我们来看扔硬币的例子。
假设我们扔了10次硬币,其中7次头朝上,那么你想问:Is this coin fair?
从概率的角度来看,如果我们假设硬币是均匀的,那么概率就是0.5,我们记\(\theta = 0.5\)。
我们可以继续算出来10次硬币结果的似然值,其值就是拿每个硬币的概率连乘。比如说,扔了10次,7次正面,3次反面,根据假设的概率0.5,我们就能算出似然值为:
这里要注意,上面这个似然值是对一个情况(也就是正正正正正正正反反反)的情况,实际上我们还要考虑不同的组合:
因此最终的7正3反的似然值=0.00097*120=0.117。
同理也能算出来\(\theta\)为0.7的似然值,可以算出来是0.2668。
我们把所有\(\theta\)的似然值都找出来,那必然是一条曲线。我们把这条曲线画出来,也就是把抛硬币的似然函数画出来,可以得到下图:

其中X轴就是我们要猜的参数P,如果参数P=0.5,那么硬币就是均匀的。
Y轴是似然度,蓝线是似然函数。我们可以看到,假设硬币是均匀的,那么似然度就很低;假设硬币不均匀,似然度就很高。
在这个情况下,绿点\(\theta = 0.7\)就是极大似然估计。换句话说,我们抛了10次硬币,其中7次正面朝上,那么我们如果根据最大似然去估计,去猜测,这个硬币的上帝参数最有可能就是P=0.7。
假设你收集了一堆数据 \(x_1, x_2, ..., x_n\)(比如全班同学的身高)。
正态分布的公式(概率密度 PDF)长这样:
似然函数 \(L(\mu, \sigma)\)* 就是把每一个数据的概率 *乘起来 :
这个公式展开后很长,但你只需要知道它的输入和 输出 :
- 输入 :是两个变量 \(\mu\)(均值)和 \(\sigma\)(标准差)。
- 输出 :是一个数值 \(L\)(似然度,即“这组参数解释当前数据的能力”)。
因为有两个输入变量(\(\mu\) 和 \(\sigma\)),似然函数不再是一条平面上的曲线,而是一个 三维空间里的曲面 。
- X轴 :代表 \(\mu\)(猜测的均值,比如 160, 170, 180...)
- Y轴 :代表 \(\sigma\)(猜测的波动,比如 5, 10, 20...)
- Z轴(高度) :代表 似然度 (Likelihood) 。
它的形状就像一座山(或者一个小土包)。
- 山脚 :代表那些很离谱的参数组合(比如猜全班平均身高 100cm,波动 0.1cm),似然度接近 0。
- 山坡 :代表参数开始靠谱了,似然度上升。
- 山顶(峰值) :代表那组最完美的参数组合。
最大似然估计
最大似然估计是完成参数估计任务的一种手段。它的逻辑是:“找出一个参数,让如果你用这个参数生成数据,出现当前观测数据的概率最大。”
当我们对世界一无所知的时候,我们只看到了结果,承认那个让该结果最可能发生的参数是真理,是理性的最佳选择。
举个侦探例子: 你走进房间,发现地上有一滩水(数据)。 现在有两个嫌疑解释(参数):
- 解释 A :刚才有人拿水杯泼了一杯水(泼水导致地湿的概率 = 99%)。
- 解释 B :刚才屋顶漏雨了,但今天是个大晴天(晴天漏雨导致地湿的概率 = 0.001%)。
作为侦探(统计学家),你会选哪个?你会选 A 。为什么?因为解释 A 让“地上有水”这个事实显得 最合理 。
这就是 MLE 的意义:在抛硬币中,\(\theta=0.7\) 让“10次出7次正面”这件事发生的概率最大。如果你硬要说 \(\theta=0.1\)(只有 10% 概率出正面),那你就是在强行解释小概率奇迹,这不科学。
换句话说,最大似然估计就是想说:统计结果就代表了最可能的参数。他的潜台词是:数据是不会骗人的。既然数据长这样,那一背后的参数大概率就是长那样。
虽然这听起来像是废话,但是在数学和实践中,这就是最优化的过程。
这里要注意一个陷阱:我们必须结合大数定律来使用最大似然估计。比如说,你扔了一次硬币,那么按照MLE来估计参数P就是1,也就是硬币必然正面,这显然不合理。因此我们必须增加样本量,让样本量足够大,从而使用大数定律说:该样本量下平均样本均值无限接近于期望值,MLE估计出来的参数也无限接近于真理。
我们以上面似然函数章节的例子来说明:
- 我们观察到了 数据 (频率)。
- 我们假设这些数据服从某种 分布 (比如硬币分布)。
- 但我们不知道这个分布的 参数 (\(P\) 是多少)。
- 于是我们写出一个似然函数。
- 我们要找到一个 \(P\),让这个似然函数的值 极大 (最大)。
- 这就是统计推断。
翻译成人话:
“既然事情已经发生了(数据),那我就认为上帝设定的那个 参数 ,一定是让这件事发生概率最大的那个值。”
我们以上面似然函数正态分布的例子来看最大似然估计MLE。在硬币的例子里,我们是在 曲线上找最高点 。在正态分布的例子里,我们是在 这座山上找最高峰(山顶) 。
当你站在山顶时,你脚下的坐标 \((\mu, \sigma)\),就是我们要找的答案:
- 这就是最符合当前数据的均值。
- 这就是最符合当前数据的方差。
我们来看一下AI训练中为什么涉及MLE的概念。我们知道深度神经网络训练的本质就是找到真实的参数,那么这里就可以说,训练AI的本质就是让AI猜出正确的答案。
现在的AI模型有数千亿个参数,它的似然函数是一个数千亿维度的超级复杂山脉。训练AI就是要找到最高的山头。
假设神经网络的参数是W,让似然最大:
这里的P是神经网络算出来的,比如softmax输出;这个P是由W决定的。
这里要注意,在 AI 训练中,我们确实是在做极大似然估计(MLE),想要找到一组参数让数据出现的概率最大。但是,直接算“似然函数”有两个巨大的麻烦:
- 数字下溢。似然是把很多概率乘起来,所以样本量越大,这个数值就越接近0,计算机会直接按0记录。
- 乘法不好求导。
所以在实际操作中,我们做两个操作:
- 取对数。对数函数可以让乘法变成加法,这样连乘就变成连加了。而且对数是单调递增的,原函数的最高点,取对数后依然是最高点。此时,我们叫他Log-Likelihood(对数似然),依然是找最高点。
- 加负号。在优化算法中,我们习惯将目标想象成误差或损失,因此我们希望误差越小越好,所以我们要加一个负号,即负对数似然(Negative Log-Likelihood, NLL)。
在上述操作后,最大似然就变成了最小化负对数似然。似然函数的最高峰,也就变成了负对数似然函数的最低谷。这是统计学视角下寻找最大化似然(爬山)和工程视角下寻找最小化损失(下山)的区别。
在常用的AI损失函数中,交叉熵损失就是负对数似然。
好,那我们回到神经网络来。我们用一个CNN识别图片是猫还是狗为例,来说明一下这个事情:
- 输入 (\(x\)) :图片。
- 参数 (\(W\)) :CNN 里的几亿个权重(一开始是随机生成的乱数)。
- 输出 (\(P\)) :Softmax 层输出的概率。
在第一轮训练中,我们的结果如下:
- 图 1 (真猫) :CNN 瞎猜,输出 \(P(\text{猫}) = 0.1\)。
- 图 2 (真狗) :CNN 瞎猜,输出 \(P(\text{狗}) = 0.2\)。
- 图 3 (真猫) :CNN 瞎猜,输出 \(P(\text{猫}) = 0.3\)。
此时的似然度就是在当前这组参数W的情况下,刚好猜中这三张图真实标签的概率。
这里要注意,我们在计算似然度的时候,只计算真实身份的概率。比如说,图1的CNN输出中,一定还有其他概率结果,因为softmax压出来的结果总和必然是1。但是对于三张图,我们只考虑三张图在真相上的概率值。
那么很显然,此时:
这个 \(0.006\) 非常低!在理想的情况下,假设三张图片都能准确讲出来,其似然度应当是:
但现在的似然值是0.006,显然远低于理想值。这说明当前的参数 \(W\)极其不靠谱 。虽然此时我们不知道似然函数的最大值是多少,也不知道是不是真的能达到L=1.0的理想情况,但是我们知道现在的L和理想的L差距很大,所以我们就要训练它。
我们想象我们有对参数W的似然函数,我们的目的就是找到那个最高点。现在显然不是最高点。为了让似然L最大化,我们用上面提到过得数学技巧,将似然值求最大转换为求最小的负对数似然,并使用反向传播和优化技巧来修改参数,逐步训练得到最大似然的结果。
信息论
最大熵
这是一种在信息不足时选择概率模型的 准则 。
核心思想:在满足已知约束条件(如均值必须等于某个值)的所有可能的概率分布中,我们应该选择最‘不确定’(熵最大)的那一个。
在很多情况下(特别是对于 指数族分布 ,如高斯分布、泊松分布等), 最大熵原理和最大似然估计是等价的 。