ContinuousBernoulli¶
ContinuousBernoulli 是一种定义在 [0,1] 区间上的连续型概率分布,参数 probs
描述了其概率密度函数的形状。它可以被视为连续型的伯努利分布。 出自 The continuous Bernoulli: fixing a pervasive error in variational autoencoders.
其概率密度函数(pdf)为:
其中:
\(x\) 在 [0, 1] 区间内是连续的。
\(\lambda\) 表示事件发生的概率。
\(C(\lambda)\) 表示归一化常数因子,表达式如下:
参数¶
probs (int|float|Tensor) - 即上述公式中 \(\lambda\) 参数,在 [0, 1] 内,刻画 ContinuousBernoulli 分布的 概率密度函数的形状。如果
probs
的输入数据类型是 int 或 float ,则会被转换为数据类型为 paddle 全局默认数据类型的 1-D Tensor。lims (tuple,可选) - 表示概率计算非稳定区域的区域宽度,非稳定区域的概率计算使用泰勒展开做近似。默认值为 (0.499, 0.501)。
代码示例¶
>>> import paddle
>>> from paddle.distribution import ContinuousBernoulli
>>> paddle.set_device("cpu")
>>> paddle.seed(100)
>>> rv = ContinuousBernoulli(paddle.to_tensor([0.2, 0.5]))
>>> print(rv.sample([2]))
Tensor(shape=[2, 2], dtype=float32, place=Place(cpu), stop_gradient=True,
[[0.38694882, 0.20714243],
[0.00631948, 0.51577556]])
>>> print(rv.mean)
Tensor(shape=[2], dtype=float32, place=Place(cpu), stop_gradient=True,
[0.38801414, 0.50000000])
>>> print(rv.variance)
Tensor(shape=[2], dtype=float32, place=Place(cpu), stop_gradient=True,
[0.07589778, 0.08333334])
>>> print(rv.entropy())
Tensor(shape=[2], dtype=float32, place=Place(cpu), stop_gradient=True,
[-0.07641457, 0. ])
>>> print(rv.cdf(paddle.to_tensor(0.1)))
Tensor(shape=[2], dtype=float32, place=Place(cpu), stop_gradient=True,
[0.17259926, 0.10000000])
>>> print(rv.icdf(paddle.to_tensor(0.1)))
Tensor(shape=[2], dtype=float32, place=Place(cpu), stop_gradient=True,
[0.05623737, 0.10000000])
>>> rv1 = ContinuousBernoulli(paddle.to_tensor([0.2, 0.8]))
>>> rv2 = ContinuousBernoulli(paddle.to_tensor([0.7, 0.5]))
>>> print(rv1.kl_divergence(rv2))
Tensor(shape=[2], dtype=float32, place=Place(cpu), stop_gradient=True,
[0.20103608, 0.07641447])
方法¶
log_prob(value)¶
计算 value 的对数概率。
参数
value (Tensor) - 待计算值。
返回
Tensor,value
的对数概率。数据类型与 self.probs 相同。
cdf(value)¶
计算 value
的累计分布 quantile 值。
参数
value (Tensor) - 待计算值。
返回
Tensor: value
的累积分布函数对应的 quantile 值。数据类型与 self.probs 相同。
icdf(value)¶
计算 value 的逆累计分布值。
参数
value (Tensor) - 待计算 quantile。
返回
Tensor,ContinuousBernoulli 随机变量在对应 quantile 下的值。数据类型与 self.probs 相同。
sample(shape=())¶
从 ContinuousBernoulli 分布中生成满足特定形状的样本数据。最终生成样本形状为 shape+batch_shape
。
参数
shape (Sequence[int],可选):采样次数。
返回
Tensor,样本数据。其维度为 \(\text{sample shape} + \text{batch shape}\) 。
rsample(shape=())¶
重参数化采样,生成指定维度的样本。最终生成样本形状为 shape+batch_shape
。
参数
shape (Sequence[int],可选):采样次数。
返回
Tensor:样本数据。其维度为 \(\text{sample shape} + \text{batch shape}\) 。
entropy()¶
计算 ContinuousBernoulli 分布的信息熵。
返回
连续伯努利分布的信息熵。
kl_divergence(other)¶
相对于另一个连续伯努利分布的 KL 散度,两个分布需要有相同的 \(\text{batch shape}\)。
参数
other (ContinuousBernoulli) - 输入的另一个连续伯努利分布。
返回
相对于另一个连续伯努利分布的 KL 散度。