多维高斯分布

这篇博客通过一个二维高斯分布的例子,详细介绍了从一维高斯分布到高维高斯分布的推导过程。内容包括高维高斯分布的公式来源、二维情况下的协方差矩阵计算、函数图像的对比以及参数估计方法。通过实例展示了如何从二维高斯分布的公式推导出多维高斯分布,强调了在多维情况下,高维公式如何退化为一维公式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

我们常见的一维高斯分布公式为: 

 

                                                          $$ \mathit{N(x\vert \mu, \sigma^2)} = \frac{1}{\sqrt{2\pi\sigma^2}}exp[-\frac{1}{2\sigma^2}(x-\mu)^2] $$

 

拓展到高维就变成:

 

                                                   $$ \mathit{N(\overline{x}\vert \overline{\mu}, \Sigma)} = \frac{1}{(2\pi)^{\frac{D}{2}}}\frac{1}{|\Sigma|^{\frac{1}{2}}}exp[-\frac{1}{2}(\overline{x}-\overline{\mu})^{\mathit{T}}\Sigma^{-1}(\overline{x}-\overline{\mu})] $$

 

其中,$ \overline{x} $ 表示维度为 $ \mathit{D} $ 的向量, $ \overline{\mu} $ 则是这些向量的平均值, $ \Sigma $ 表示所有向量 $ \overline{x} $ 的协方差矩阵。 

本文简单探讨一下,上面这个 高维的公式是怎么来的。 

二维的情况

为了简单起见, 本文假设所有变量都是相互独立的。即对于概率分布函数 f(x_0,\dots, x_n) 而言, 有 f(x_0, x_1, \dots, x_n) = f(x_0)f(x_1)f(x_n) 成立。 

现在,我们用一个二维的例子推出上面的公式。

假设有很多变量 $ \overline{x} = \begin{bmatrix} x_1\\x_2 \end{bmatrix}\quad $, 他们的均值为 $ \overline{\mu} = \begin{bmatrix} \mu_1\\\mu_2 \end{bmatrix}\quad $, 方差为 $ \overline{\sigma} = \begin{bmatrix} \sigma_1\\\sigma_2 \end{bmatrix}\quad $

由于x_1 , x_2 是相互独立的, 所以, \overline{x} 的高斯分布函数可以表示为: 

 

### PyTorch实现多维高斯分布 在机器学习领域,尤其是涉及概率模型的任务中,多维(多元)高斯分布在理论和实践中都占据着重要地位。对于多维情况下的高斯分布,在PyTorch中有多种方法来进行表示与操作。 #### 使用`torch.distributions.MultivariateNormal` 最直接的方式是利用内置模块 `torch.distributions.MultivariateNormal` 来创建一个多维正态随机变量对象。这允许指定均值向量以及协方差矩阵作为输入参数[^1]。 ```python import torch from torch.distributions import MultivariateNormal # 定义均值向量 (mean vector) 和 协方差矩阵 (covariance matrix) mu = torch.tensor([0., 1.]) Sigma = torch.tensor([[1., 0.5], [0.5, 2.]]) # 创建Multivariate Normal distribution实例 mvn = MultivariateNormal(loc=mu, covariance_matrix=Sigma) # 抽样得到样本点 sample = mvn.sample() print(f'Sampled value from MVN: {sample}') ``` 上述代码展示了如何基于给定的均值向量μ=[0,1]^T 及其对应的协方差Σ=[[1,.5],[.5,2]]构建一个二维的多变元高斯分布,并从中抽取了一个样本点。 #### 自定义Log Probability Function 除了使用预设好的类之外,有时也需要自定义计算log probability function 或者 likelihood ratio等更复杂的统计度量。这时可以根据具体的数学表达式手动编写相应的函数: \[ \ln p(x|\mu,\Sigma)= -\frac{D}{2}\ln(2\pi)-\frac{1}{2}(\det (\Sigma))-\frac{1}{2}(x-\mu)^{\mathrm{T}}\Sigma^{-1}(x-\mu)\] 其中\( D \)代表维度数;而其他符号含义同前文一致。 ```python def log_prob_mvnormal(x, mu, Sigma): """ 计算多维高斯分布的概率密度函数的自然对数值 参数: x : 输入张量形状为(batch_size, dim) mu : 均值向量 形状为(dim,) Sigma : 方差-协方差矩阵 形状为(dim,dim) 返回: 对应于每条记录的对数似然值组成的张量 """ batch_dim = x.size()[0] dims = float(mu.size()[0]) sign, log_det_sigma = torch.slogdet(Sigma) inv_Sigma = torch.inverse(Sigma) diff = x-mu.unsqueeze_(dim=0).expand_as(x) quad_form = torch.bmm(diff.view(-1,1,dims), torch.matmul(inv_Sigma.expand(batch_dim,-1,-1), diff.view(-1,dims,1))) return (-dims/2)*torch.log(torch.tensor(2*torch.pi))-(1./2)*(sign*log_det_sigma)+(-1./2)*quad_form.squeeze() ``` 此部分实现了针对一批次观测数据 \(X\) 的多维高斯分布的负对数似然估计器(log-probability),可用于后续优化算法中的损失函数构建。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Baobin Zhang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值