关于困惑度

前几天在写新手任务task3的时候,参考了Pytorch官方example的word language model,官方example在训练过程中计算困惑度是这样的:

1
math.exp(cur_loss)

其中,cur_loss表示交叉熵的loss,即 $-P(\hat{x})logP(x)$,$\hat{x}$表示ground truth。

然而,在查阅了困惑度相关资料后,我发现,困惑度的定义是这样的:

这是另一种形式:

可以看到,二者本质是一样的。

那么,为什么在代码中以e为底去计算困惑度,而不是2呢?

实际上,是因为在上述公式中,log是以2为底的,但在Pytorch中,log默认是以e为底的。因此在代码中,需要用e作为指数的底来还原成困惑度的原本形式:

最后这是perplexity的数学推导:
https://www.zhihu.com/question/58482430