MultivariateNormalDiag¶
多元高斯分布
概率密度函数(pdf)为:
\[ \begin{align}\begin{aligned}pdf(x; loc, scale) = \frac{e^{-\frac{||y||^2}{2}}}{Z}\\y = inv(scale) @ (x - loc)\\Z = (2\pi )^{0.5k} |det(scale)|\end{aligned}\end{align} \]
- 上面公式中:
-
\(inv\) 表示: 对矩阵求逆
\(@\) 表示:矩阵相乘
\(det\) 表示:求行列式的值
- 参数:
-
loc (list|numpy.ndarray|Variable) - 形状为 \([k]\) 的多元高斯分布的均值列表。数据类型为float32。
scale (list|numpy.ndarray|Variable) - 形状为 \([k, k]\) 的多元高斯分布的对角协方差矩阵,且除对角元素外,其他元素取值均为0。数据类型为float32。
代码示例:
import numpy as np
from paddle.fluid import layers
from paddle.fluid.layers import MultivariateNormalDiag
a_loc_npdata = np.array([0.3,0.5],dtype="float32")
a_loc_tensor = layers.create_tensor(dtype="float32")
layers.assign(a_loc_npdata, a_loc_tensor)
a_scale_npdata = np.array([[0.4,0],[0,0.5]],dtype="float32")
a_scale_tensor = layers.create_tensor(dtype="float32")
layers.assign(a_scale_npdata, a_scale_tensor)
b_loc_npdata = np.array([0.2,0.4],dtype="float32")
b_loc_tensor = layers.create_tensor(dtype="float32")
layers.assign(b_loc_npdata, b_loc_tensor)
b_scale_npdata = np.array([[0.3,0],[0,0.4]],dtype="float32")
b_scale_tensor = layers.create_tensor(dtype="float32")
layers.assign(b_scale_npdata, b_scale_tensor)
a = MultivariateNormalDiag(a_loc_tensor, a_scale_tensor)
b = MultivariateNormalDiag(b_loc_tensor, b_scale_tensor)
a.entropy()
# [2.033158] with shape: [1]
b.entropy()
# [1.7777451] with shaoe: [1]
a.kl_divergence(b)
# [0.06542051] with shape: [1]
- kl_divergence ( other ) ¶
计算相对于另一个多元高斯分布的KL散度
- 参数:
-
other (MultivariateNormalDiag) - 输入的另一个多元高斯分布。数据类型为float32。
返回:相对于另一个多元高斯分布的KL散度,数据类型为float32
返回类型:Variable
- entropy ( ) ¶
信息熵
返回:多元高斯分布的信息熵,数据类型为float32
返回类型:Variable