ContinuousBernoulli

class paddle.distribution. ContinuousBernoulli ( probs, lims=(0.499, 0.501) ) [源代码]

ContinuousBernoulli 是一种定义在 [0,1] 区间上的连续型概率分布,参数 probs 描述了其概率密度函数的形状。它可以被视为连续型的伯努利分布。 出自 The continuous Bernoulli: fixing a pervasive error in variational autoencoders.

其概率密度函数(pdf)为:

p(x;λ)=C(λ)λx(1λ)1x

其中:

  • x 在 [0, 1] 区间内是连续的。

  • λ 表示事件发生的概率。

  • C(λ) 表示归一化常数因子,表达式如下:

C(λ)={2 if λ=122tanh1(12λ)12λ otherwise

参数

  • probs (int|float|Tensor) - 即上述公式中 λ 参数,在 [0, 1] 内,刻画 ContinuousBernoulli 分布的 概率密度函数的形状。如果 probs 的输入数据类型是 intfloat ,则会被转换为数据类型为 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])

属性

mean

ContinuousBernoulli 分布的均值

返回

Tensor,均值

variance

ContinuousBernoulli 分布的方差

返回

Tensor,方差

方法

prob(value)

计算 value 的概率。

参数

  • value (Tensor) - 待计算值。

返回

Tensor,value 的概率。数据类型与 self.probs 相同。

log_prob(value)

计算 value 的对数概率。

参数

  • value (Tensor) - 待计算值。

返回

Tensor,value 的对数概率。数据类型与 self.probs 相同。

cdf(value)

计算 value 的累计分布 quantile 值。

P(Xt;λ)=F(t;λ)={t if λ=12λt(1λ)1t+λ12λ1 otherwise

参数

  • value (Tensor) - 待计算值。

返回

Tensor: value 的累积分布函数对应的 quantile 值。数据类型与 self.probs 相同。

icdf(value)

计算 value 的逆累计分布值。

F1(x;λ)={x if λ=12log(1+(2λ11λ)x)log(λ1λ) otherwise

参数

  • value (Tensor) - 待计算 quantile。

返回

Tensor,ContinuousBernoulli 随机变量在对应 quantile 下的值。数据类型与 self.probs 相同。

sample(shape=[])

从 ContinuousBernoulli 分布中生成满足特定形状的样本数据。最终生成样本形状为 shape+batch_shape

参数

  • shape (Sequence[int],可选):采样次数。

返回

Tensor,样本数据。其维度为 sample shape+batch shape

rsample(shape=[])

重参数化采样,生成指定维度的样本。最终生成样本形状为 shape+batch_shape

参数

  • shape (Sequence[int],可选):采样次数。

返回

Tensor:样本数据。其维度为 sample shape+batch shape

entropy()

计算 ContinuousBernoulli 分布的信息熵。

H(X)=logC+[log(1λ)logλ]E(X)log(1λ)

返回

连续伯努利分布的信息熵。

kl_divergence(other)

相对于另一个连续伯努利分布的 KL 散度,两个分布需要有相同的 batch shape

KL_divergence(λ1,λ2)=H{logC2+[logλ2log(1λ2)]E1(X)+log(1λ2)}

参数

  • other (ContinuousBernoulli) - 输入的另一个连续伯努利分布。

返回

相对于另一个连续伯努利分布的 KL 散度。