高中的时候我们便学过一维正态(高斯)分布的公式:
N(x|u,σ2)=1√2πσ2exp[−12σ2(x−u)2]
拓展到高维时,就变成:
N(¯¯¯x|¯¯¯u,Σ)=1(2π)D/21|Σ|1/2exp[−12(¯¯¯x−¯¯¯u)TΣ−1(¯¯¯x−¯¯¯u)]
其中,¯¯¯x 表示维度为 D 的向量,¯¯¯u 则是这些向量的平均值,Σ 表示所有向量 ¯¯¯x 的协方差矩阵。
本文只是想简单探讨一下,上面这个高维的公式是怎么来的。
二维的情况
为了简单起见,本文假设所有变量都是相互独立的。即对于概率分布函数 f(x0,x1,…,xn) 而言,有 f(x0,x1,…,xn)=f(x0)f(x1)f(xn) 成立。
现在,我们用一个二维的例子推出上面的公式。
假设有很多变量 ¯¯¯x=[x1x2],它们的均值为 ¯¯¯u=[u1u2],方差为 ¯¯¯σ=[σ1σ2]。
由于 x1,x2 是相互独立的,所以,¯¯¯x 的高斯分布函数可以表示为:
f(¯¯¯x)=f(x1,x2)=f(x1)f(x2)=1√2πσ21exp(−12(x1−u1σ1)2)×1√2πσ22exp(−12(x2−u2σ2)2)=1(2π)2/2(σ21σ22)1/2exp(−12[(x1−u1σ1)2+(x2−u2σ2)2])(1)(2)(3)(4)
接下来,为了推出文章开篇的高维公式,我们要想办法得到协方差矩阵 Σ。
对于二维的向量 ¯¯¯x 而言,其协方差矩阵为:
Σ=[σ11σ12σ12σ22]=[σ21σ12σ21σ22](5)(6)
(不熟悉协方差矩阵的请查找其他资料或翻看我之前的文章)
由于 x1,x2 是相互独立的,所以 σ12=σ21=0。这样,Σ 退化成 [σ2100σ22]。
则 Σ 的行列式 |Σ|=σ21σ22,代入公式 (4) 就可以得到:
f(¯¯¯x)=1(2π)2/2|Σ|1/2exp(−12[(x1−u1σ1)2+(x2−u2σ2)2])
这样一来,我们已经推出了公式的左半部分,下面,开始处理右面的 exp 函数。
原始的高维高斯函数的 exp 函数为:exp[−12(¯¯¯x−¯¯¯u)TΣ−1(¯¯¯x−¯¯¯u)],根据前面算出来的 Σ,我们可以求出它的逆:Σ−1=1σ21σ22[σ2200σ21]。
接下来根据这个二维的例子,将原始的 exp() 展开:
exp[−12(¯¯¯x−¯¯¯u)TΣ−1(¯¯¯x−¯¯¯u)]=exp[−12[x1−u1 x2−u2]1σ21σ22[σ2200σ21][x1−u1x2−u2]]=exp[−12[x1−u1 x2−u2]1σ21σ22[σ22(x1−u1)σ21(x2−u2)]]=exp[−12σ21σ22[σ22(x1−u1)2+σ21(x2−u2)2]]=exp[−12[(x1−u1)2σ21+(x2−u2)2σ22]](7)(8)(9)(10)
展开到最后,发现推出了公式 (4)。说明原公式 N(¯¯¯x|¯¯¯u,Σ)=1(2π)D/21|Σ|1/2exp[−12(¯¯¯x−¯¯¯u)TΣ−1(¯¯¯x−¯¯¯u)] 是成立的。你也可以将上面展开的过程逆着推回去,一样可以从例子中的公式 (4) 推出多维高斯公式。
函数图像
知道多维的公式后,下面再简单比较一下一维和二维的图像区别。

上图展示的是 4 个一维高斯函数的图像。高斯函数是一个对称的山峰状,山峰的中心是均值 u,山峰的「胖瘦」由标准差 σ 决定,如果 σ 越大,证明数据分布越广,那么山峰越「矮胖」,反之,则数据分布比较集中,因此很大比例的数据集中在均值附近,山峰越「瘦高」。在偏离均值 u 三个 σ 的范围外,数据出现的概率几乎接近 0,因此这一部分的函数图像几乎与 x 轴重合。
下面看二维的例子:

有了一维图像的例子,二维图像就可以类比出来了。如果说,一维只是山峰的一个横截面,那么二维则是一个完整的有立体感的山峰。山峰的「中心」和「胖瘦」和一维的情况是一致的,而且,对于偏离中心较远的位置,数据出现的概率几乎为 0,因此,函数图像在这些地方就逐渐退化成「平原」了。
参数估计
另外,如果给定了很多数据点,并且知道它们服从某个高斯分布,我们要如何求出高斯分布的参数(μ 和 Σ)呢?
当然,估计模型参数的方法有很多,最常用的就是极大似然估计。
简单起见,拿一维的高斯模型举例。假设我们有很多数据点:(x1,x2,x3,…,xm),它们的均值是~u。一维高斯函数是:p(x|μ,σ2)=1√2πσexp(−(x−μ)22σ2)
首先,我们先写出似然函数:
f(x1,x2,…,xm)=m∏i=11√2πσexp(−(xi−~μ)22σ2)=(2πσ2)−m2exp(−∑ni=1(xi−~μ)22σ2)(11)(12)
然后取对数:
lnf(x1,x2,…,xm)=−m2ln(2πσ2)−12σ2n∑i=1(xi−~μ)2
求出导数,令导数为 0 得到似然方程:
∂lnf∂¯¯¯μ=1σ2n∑i=1(xi−~μ)=0
∂lnf∂σ=−mσ+1σ3n∑i=1(xi−~μ)=0
我们可以求出:μ=1m∑mi=1(xi−~μ),σ=√1m∑mi=1(xi−~μ)2,可以看到,这其实就是高斯函数中平均值和标准差的定义。
对于高维的情况,平均值和协方差矩阵也可以用类似的方法计算出来。
总结
本文只是从一个简单的二维例子出发,来说明多维高斯公式的来源。在 PRML 的书中,推导的过程更加全面,也复杂了许多,想深入学习多维高斯模型的还是参考教材为准。
重新对比一维和多维的公式:
N(x|u,σ2)=1√2πσ2exp[−12σ2(x−u)2]
N(¯¯¯x|¯¯¯u,Σ)=1(2π)D/21|Σ|1/2exp[−12(¯¯¯x−¯¯¯u)TΣ−1(¯¯¯x−¯¯¯u)]
其实二者是等价的。一维中,我们针对的是一个数,多维时,则是针对一个个向量求分布。如果向量退化成一维,则多维公式中的 D=1,Σ=σ2,Σ−1=1σ2,这时多维公式就退化成一维的公式。所以,在多维的公式中,我们可以把 Σ 当作是样本向量的标准差。
参考
欢迎关注我的公众号「AI小男孩」,立志用大白话讲懂AI
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· spring官宣接入deepseek,真的太香了~