Pytorch log_prob做什么?

Pytorch log_prob做什么?,pytorch,probability-distribution,Pytorch,Probability Distribution,在一些(例如机器学习)库中,我们可以找到log\u prob函数。它的作用是什么?它与普通的log有何不同 例如,此代码的目的是什么: dist = Normal(mean, std) sample = dist.sample() logprob = dist.log_prob(sample) 接下来,我们为什么要先获取一个日志,然后对结果值求幂,而不是直接计算它: prob = torch.exp(dist.log_prob(sample)) 部分答案是,log\u prob返回给定样本值

在一些(例如机器学习)库中,我们可以找到
log\u prob
函数。它的作用是什么?它与普通的
log
有何不同

例如,此代码的目的是什么:

dist = Normal(mean, std)
sample = dist.sample()
logprob = dist.log_prob(sample)
接下来,我们为什么要先获取一个日志,然后对结果值求幂,而不是直接计算它:

prob = torch.exp(dist.log_prob(sample))

部分答案是,
log\u prob
返回给定样本值下评估的概率密度/质量函数的对数。

正如您自己的答案所述,
log\u prob
返回密度或概率的对数。在这里,我将谈谈你问题中的其余几点:

  • 这与
    log
    有何不同?发行版没有方法
    log
    。如果他们这样做了,最接近的解释可能确实是类似于
    log_prob
    的东西,但这不是一个非常精确的名称,因为If回避了“记录什么”的问题?一个分布有多个数值属性(例如其平均值、期望值等),而概率或密度只是其中之一,因此名称可能不明确
这一点不适用于
Tensor.log()
方法(这可能是您的想法),因为
Tensor
本身就是一个数学量,我们可以使用log

  • 为什么以后只取概率的对数来求幂呢?以后可能不需要对其求幂。例如,如果您有概率的日志
    p
    q
    ,那么您可以直接将
    log(p*q)
    计算为
    log(p)+log(q)
    ,避免中间求幂。这在数值上更稳定(避免下溢),因为概率可能会变得非常接近零,而它们的日志则不会。一般来说,加法也比乘法更有效,其导数更简单。网站上有一篇关于这些主题的好文章

log\u prob
记录(某些动作)的概率。例如:

action_logits = torch.rand(5)
action_probs = F.softmax(action_logits, dim=-1)
action_probs
返回:

张量([0.1457,0.2831,0.1569,0.2221,0.1922])

然后:

返回:


张量(-1.8519)张量(-1.8519)

你找到答案了吗?我希望有一种直接的方法来计算torch中的PDF。这很接近,但很烦人,你必须尝试一下。
dist = Categorical(action_probs)
action = dist.sample()
print(dist.log_prob(action), torch.log(action_probs[action]))