在一些(例如机器学习)库中,我们可以找到log_prob
函数。它的作用是什么?它与普通的log
有什么不同?
例如,这段代码的目的是什么:
dist = Normal(mean, std)
sample = dist.sample()
logprob = dist.log_prob(sample)
因此,为什么我们首先取一个对数,然后对结果值进行指数运算,而不是直接计算它:
prob = torch.exp(dist.log_prob(sample))
发布于 2020-08-08 03:58:38
正如您自己的答案所提到的,log_prob
返回密度或概率的对数。在这里,我将解决您问题中的其余几点:
log
有什么不同?发行版没有log
方法。如果他们这样做了,最接近的解释确实是像log_prob
这样的东西,但它不是一个非常精确的名称,因为If回避了一个问题“什么的日志”?分布具有多个数值属性(例如,其平均值、期望值等),而概率或密度只是其中之一,因此名称可能不明确。这同样不适用于Tensor.log()
方法(这可能就是您所想的),因为Tensor
本身是一个我们可以取其对数的数学量。
p
和q
的对数,则可以直接将log(p * q)
计算为log(p) + log(q)
,从而避免中间求幂。这在数值上更稳定(避免下溢),因为概率可能变得非常接近零,而它们的对数则不是。一般来说,加法也比乘法更有效,而且它的导数更简单。在https://en.wikipedia.org/wiki/Log_probability.上有一篇关于这些主题的很好的文章
发布于 2019-02-12 02:00:13
部分答案是,log_prob
返回按给定样本值计算的概率密度/质量函数的对数。
发布于 2020-11-12 10:02:45
log_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)
然后:
dist = Categorical(action_probs)
action = dist.sample()
print(dist.log_prob(action), torch.log(action_probs[action]))
返回:
张量(-1.8519)张量(-1.8519)
https://stackoverflow.com/questions/54635355
复制相似问题