从交叉熵角度理解困惑度(perplexity)

从交叉熵角度理解困惑度(perplexity),第1张

从交叉熵角度理解困惑度(perplexity) 从交叉熵理解困惑度

我们通常使用困惑度(perplexity)来评价语言模型的好坏。通过理解困惑度,也可以让我们更加深入的理解交叉熵(CrossEntropy)的意义,也可以轻易量化模型的性能。

回顾交叉熵以及多分类问题的损失函数。假设现有 N N N 个数据样本,其中样本的标签为 Y i ( i = 1 , 2 , ⋯   , N ) Y_i(i=1,2,cdots,N) Yi​(i=1,2,⋯,N),而模型对样本的预测值记为 Y i ^ ( i = 1 , 2 , ⋯   , N ) widehat{Y_i}(i=1,2,cdots,N) Yi​ ​(i=1,2,⋯,N),则我们可以计算交叉熵损失:
C r o s s E n t r o p y ( Y , Y ^ ) = − ∑ i = 1 N Y i l o g ( Y ^ i ) CrossEntropy(Y,widehat{Y})=-sum_{i=1}^NY_{i}log(widehat{Y}_i) CrossEntropy(Y,Y )=−i=1∑N​Yi​log(Y i​)

这个公式并不那么直观,我们再从一个更加具体的例子来体会一下交叉熵损失的计算过程。

在多分类问题中, Y i Y_i Yi​​ 表示的是一个独热编码(0-1类别)的向量,比如对于三分类的某一个样本标签为: Y = [ 0 ( y 1 ) 0 ( y 2 ) 1 ( y 3 ) ] Y=begin{bmatrix}0 & (y_1) \ 0 & (y_2) \ 1 & (y_3) \ end{bmatrix} Y=⎣⎡​001​(y1​)(y2​)(y3​)​⎦⎤​,而预测值 Y ^ widehat{Y} Y 表示多类别预测的概率值: Y = [ y 1 ^ y 2 ^ y 3 ^ ] Y=begin{bmatrix}hat{y_1} \ hat{y_2} \ hat{y_3} \ end{bmatrix} Y=⎣⎡​y1​^​y2​^​y3​^​​⎦⎤​,无论是二分类问题,还是多分类问题,属于的那个类别是1,其余是0。所以上面的交叉熵计算式可以写成:
J ( θ ) = − ∑ i = 1 N Y i l o g ( Y ^ i ) = 1 ∗ − l o g ( y ^ c ) J(theta)=-sum_{i=1}^NY_{i}log(widehat{Y}_i)=1*-log(widehat{y}_c) J(θ)=−i=1∑N​Yi​log(Y i​)=1∗−log(y ​c​)
注意上式中,我们假设 Y Y Y 是一个独热编码(one-hot) 向量,则除了一个1以外,其他是 0 的元素会把等式后面的 l o g ( y ^ ) log(widehat{y}) log(y ​) 的归零,只剩下一个 y ^ c widehat{y}_c y ​c​( y c = 1 y_c=1 yc​=1)。例如在上面的矩阵中,只剩下 y ^ 3 hat{y}_3 y^​3​。

假如我们的模型没有学到任何东西,输入一个数据样本,模型输出的每个分类的概率是均等的,比如说一个分类器,输入一张水果的照片,要输出这张图片是苹果,还是橙子,还是梨。结果模型输出的是苹果的概率为 1 3 dfrac{1}{3} 31​,橙子的概率为 1 3 dfrac{1}{3} 31​,梨的概率也是 1 3 dfrac{1}{3} 31​,我们如果从实际经验出发,对于一个未知事物的判断,都认为每种情况的概率都是均等的,而这相当于没有做出任何判断,就像在没有先验知识的情况下,去做一道高考选择题,我们认为每个选项的概率各占 1 4 dfrac{1}{4} 41​。那么在这种情况下, y ^ c = 1 N widehat{y}_c=dfrac{1}{N} y ​c​=N1​,其中 N N N 表示类别标签数。我们再将这个导入上面的式子,就可以得到:
J ( θ ) = − l o g ( 1 N ) = − ( l o g ( 1 ) − l o g ( N ) ) = l o g ( N ) J(theta)=-log(frac{1}{N})=-(log(1)-log(N))=log(N) J(θ)=−log(N1​)=−(log(1)−log(N))=log(N)
如果某次模型训练的损失函数: J ( θ ) ≥ l o g ( N ) J(theta) ge log(N) J(θ)≥log(N),我们就可以认为是无效训练,就像你面对未知的事物做出判断时,每一种情况都是等概率的,我们认为这样的模型是没有任何意义的。

再打个比方,有人问你明天的天气是下雨还是不下雨,你给出的回答是明天有50%的概率下雨,50%的概率不下雨,这时别人认为你的意见是毫无参考价值的,因为投掷一枚硬币来做决策和你的回答好像没有什么差别。当然,比这种情况更差的就是,把选择题的选择为A、B、C、D,但是有些人还要去选E、F,这种情况就更差了,我们认为模型连正常人的思维都不具备。

再对两边同时取 e e e 为底的指数,我们就可以得到无效学习的情况下:
e J ( θ ) ≥ N e^{J(theta)} ge N eJ(θ)≥N
这个结果说明,如果模型学到了东西,那么 e J ( θ ) e^{J(theta)} eJ(θ) 的值应该小于类别数 N N N。我们将这个就称为困惑度。


从上面的讨论出发,我们给出困惑度(perplexity)的定义,即困惑度是对交叉熵损失函数做指数运算后得到的值。
J ( θ ) = − ∑ i = 1 N Y i l o g ( Y ^ i ) p e r p l e x i t y = e J ( θ ) = e − l o g ( y c ) = 1 y c J(theta)=-sum_{i=1}^NY_{i}log(widehat{Y}_i) \ perplexity=e^{J(theta)}=e^{-log(y_c)}=dfrac{1}{y_c} J(θ)=−i=1∑N​Yi​log(Y i​)perplexity=eJ(θ)=e−log(yc​)=yc​1​
困惑度就是对样本标签类别的预测概率的倒数。特别地

  1. 最佳情况下,模型总是把标签类别的概率预测为1,此时困惑度为1(最小);
  2. 最坏情况下,模型总是把标签类别的概率预测为0,此时困惑度为正无穷(最差);
  3. 基线情况下,模型总是预测所有类别的概率都相同,此时困惑度为类别个数;

显然,任何一个有效模型的困惑度必须小于类别个数。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5652082.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-16
下一篇2022-12-16

发表评论

登录后才能评论

评论列表(0条)

    保存