You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Torch中从零实现多元正态分布?为何与官方输出不符?

从零实现多元正态分布与官方库输出不一致的问题排查

我尝试在PyTorch中从零实现多元正态分布(Multivariate Normal Distribution),但自己的实现输出和torch.distributions.MultivariateNormal的结果完全不匹配,需要排查问题。我参考网上的多元正态分布公式实现,但PyTorch官方文档未给出对应公式,目前输出存在异常。

我的实现代码

import torch

µ = torch.tensor([[-10.5, 2.0], [-0.5, 2.0]])
cov = torch.tensor([[12.0, 8.0], [12.0, 40.0]])
pos_def_cov = torch.matmul(cov, cov.T)
Σ = torch.linalg.cholesky(pos_def_cov)

x = torch.randn([1])
d = torch.tensor(x.shape[0])

(1 / torch.sqrt(2 * torch.pi**d) * torch.abs(Σ)) * torch.exp(-0.5 * (x - µ).T * Σ**-1 * (x - µ))

我的输出

输出矩阵右上角常为0,示例如下:

tensor([[ 0.2842,  0.0000],
        [12.4068,  8.7792]])

官方实现及输出

使用相同矩阵的官方库调用:

torch.distributions.MultivariateNormal(µ, pos_def_cov).sample()  

输出无固定0值,示例如下:

tensor([[-5.4596,  7.1297],
        [ 0.8562, -7.6340]])

怀疑方向

我认为自己正确实现了参考公式,但怀疑问题出在Cholesky分解或正定协方差矩阵的处理上。查看torch.distributions.MultivariateNormal的源码过于抽象,难以入手。

内容的提问来源于stack exchange,提问作者Ant

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 05:06:42