对高斯分布取负对数的详细推导过程如下,结合数学公式与代码验证:
1. 高斯分布概率密度函数
对于NNN维随机变量x∼N(μ,Σ)\mathbf{x} \sim \mathcal{N}(\boldsymbol{\mu}, \Sigma)x∼N(μ,Σ),其概率密度函数为:
P(x)=1(2π)N/2∣Σ∣1/2exp(−12(x−μ)TΣ−1(x−μ))P(\mathbf{x}) = \frac{1}{(2\pi)^{N/2} |\Sigma|^{1/2}} \exp\left( -\frac{1}{2} (\mathbf{x} - \boldsymbol{\mu})^T \Sigma^{-1} (\mathbf{x} - \boldsymbol{\mu}) \right)P(x)=(2π)N/2∣Σ∣1/21exp(−21(x−μ)TΣ−1(x−μ))
其中:
-μ\boldsymbol{\mu}μ是均值向量,
-Σ\SigmaΣ是协方差矩阵(正定),
-∣Σ∣|\Sigma|∣Σ∣是协方差矩阵的行列式,
-Σ−1\Sigma^{-1}Σ−1是协方差矩阵的逆。
2. 取自然对数
对P(x)P(\mathbf{x})P(x)取自然对数:
lnP(x)=ln(1(2π)N/2∣Σ∣1/2)+ln(exp(−12(x−μ)TΣ−1(x−μ)))\ln P(\mathbf{x}) = \ln \left( \frac{1}{(2\pi)^{N/2} |\Sigma|^{1/2}} \right) + \ln \left( \exp\left( -\frac{1}{2} (\mathbf{x} - \boldsymbol{\mu})^T \Sigma^{-1} (\mathbf{x} - \boldsymbol{\mu}) \right) \right)lnP(x)=ln((2π)N/2∣Σ∣1/21)+ln(exp(−21(x−μ)TΣ−1(x−μ)))
分解为两部分计算
(1)系数部分(常数项)
ln(1(2π)N/2∣Σ∣1/2)=−ln((2π)N/2∣Σ∣1/2)=−N2ln(2π)−12ln∣Σ∣\ln \left( \frac{1}{(2\pi)^{N/2} |\Sigma|^{1/2}} \right) = -\ln \left( (2\pi)^{N/2} |\Sigma|^{1/2} \right) = -\frac{N}{2} \ln(2\pi) - \frac{1}{2} \ln|\Sigma|ln((2π)N/2∣Σ∣1/21)=−ln((2π)N/2∣Σ∣1/2)=−2Nln(2π)−21ln∣Σ∣
(2)指数部分(二次型)
ln(exp(−12(x−μ)TΣ−1(x−μ)))=−12(x−μ)TΣ−1(x−μ)\ln \left( \exp\left( -\frac{1}{2} (\mathbf{x} - \boldsymbol{\mu})^T \Sigma^{-1} (\mathbf{x} - \boldsymbol{\mu}) \right) \right) = -\frac{1}{2} (\mathbf{x} - \boldsymbol{\mu})^T \Sigma^{-1} (\mathbf{x} - \boldsymbol{\mu})ln(exp(−21(x−μ)TΣ−1(x−μ)))=−21(x−μ)TΣ−1(x−μ)
合并结果
lnP(x)=−N2ln(2π)−12ln∣Σ∣−12(x−μ)TΣ−1(x−μ)\ln P(\mathbf{x}) = -\frac{N}{2} \ln(2\pi) - \frac{1}{2} \ln|\Sigma| - \frac{1}{2} (\mathbf{x} - \boldsymbol{\mu})^T \Sigma^{-1} (\mathbf{x} - \boldsymbol{\mu})lnP(x)=−2Nln(2π)−21ln∣Σ∣−21(x−μ)TΣ−1(x−μ)
3. 取负对数
对lnP(x)\ln P(\mathbf{x})lnP(x)取负号:
−lnP(x)=N2ln(2π)+12ln∣Σ∣+12(x−μ)TΣ−1(x−μ)-\ln P(\mathbf{x}) = \frac{N}{2} \ln(2\pi) + \frac{1}{2} \ln|\Sigma| + \frac{1}{2} (\mathbf{x} - \boldsymbol{\mu})^T \Sigma^{-1} (\mathbf{x} - \boldsymbol{\mu})−lnP(x)=2Nln(2π)+21ln∣Σ∣+21(x−μ)TΣ−1(x−μ)
合并常数项
注意到:
N2ln(2π)+12ln∣Σ∣=12ln((2π)N∣Σ∣)\frac{N}{2} \ln(2\pi) + \frac{1}{2} \ln|\Sigma| = \frac{1}{2} \ln \left( (2\pi)^N |\Sigma| \right)2Nln(2π)+21ln∣Σ∣=21ln((2π)N∣Σ∣)
因此最终形式为:
−lnP(x)=12ln((2π)N∣Σ∣)+12(x−μ)TΣ−1(x−μ)-\ln P(\mathbf{x}) = \frac{1}{2} \ln \left( (2\pi)^N |\Sigma| \right) + \frac{1}{2} (\mathbf{x} - \boldsymbol{\mu})^T \Sigma^{-1} (\mathbf{x} - \boldsymbol{\mu})−lnP(x)=21ln((2π)N∣Σ∣)+21(x−μ)TΣ−1(x−μ)
4. 代码验证
通过以下Python代码验证推导的正确性:
importnumpyasnp# 定义高斯分布概率密度函数defgaussian_pdf(x,mu,Sigma):N=len(mu)det_Sigma=np.linalg.det(Sigma)inv_Sigma=np.linalg.inv(Sigma)coeff=1/(np.sqrt((2*np.pi)**N*det_Sigma))exponent=-0.5*np.dot((x-mu).T,np.dot(inv_Sigma,(x-mu)))returncoeff*np.exp(exponent)# 示例参数mu=np.array([0,0])Sigma=np.array([[1,0.5],[0.5,1]])x=np.array([1,1])# 计算概率密度p_x=gaussian_pdf(x,mu,Sigma)# 计算负对数neg_log_p=-np.log(p_x)# 手动计算验证公式N=len(mu)det_Sigma=np.linalg.det(Sigma)inv_Sigma=np.linalg.inv(Sigma)quadratic=np.dot((x-mu).T,np.dot(inv_Sigma,(x-mu)))manual_neg_log=0.5*(N*np.log(2*np.pi)+np.log(det_Sigma)+quadratic)print("概率密度 P(x):",p_x)print("负对数 -ln(P(x)):",neg_log_p)print("手动计算验证结果:",manual_neg_log)输出结果:
概率密度 P(x): 0.09435389770895924 负对数 -ln(P(x)): 2.3607026968501215 手动计算验证结果: 2.3607026968501225. 关键结论
- 负对数的物理意义:负对数将概率密度转化为“能量函数”,最小化负对数等价于最大化概率密度,这是最大似然估计(MLE)的核心思想。
- 二次型的几何意义:(x−μ)TΣ−1(x−μ)(\mathbf{x} - \boldsymbol{\mu})^T \Sigma^{-1} (\mathbf{x} - \boldsymbol{\mu})(x−μ)TΣ−1(x−μ)是马哈拉诺比斯距离(Mahalanobis distance),衡量x\mathbf{x}x偏离均值的程度(考虑协方差结构)。
- 应用场景:在SLAM中,通过最小化负对数构建最小二乘问题,实现状态估计(如位姿和地图的联合优化)。
通过数学推导与代码验证,我们完整解释了高斯分布取负对数的每一步过程,并验证了公式的正确性。