KL散度的计算及其相关问题题

KL散度的计算及其相关问题题

关键词 K L KL KL散度计算, s o f t m a x softmax softmax,可不可以用 s i g m o i d sigmoid sigmoid K L KL KL散度为负数

KL散度的计算

KL散度可以用来衡量两个概率分布之间的相似性,两个概率分布越相近,KL散度越小。计算公式如下:

D K L ( P ∣ ∣ Q ) = ∑ i = 1 N [ p ( x i ) l o g p ( x i ) − p ( x i ) l o g q ( x i ) ] D_{KL}(P||Q)=∑_{i=1}^N[p(x_i)logp(x_i)−p(x_i)logq(x_i)] DKL(P∣∣Q)=i=1N[p(xi)logp(xi)p(xi)logq(xi)]

P P P为真实事件的概率分布, Q Q Q为预测分布。例如现在真实分布为 [ 0.1 , 0.9 ] [0.1,0.9] [0.1,0.9],预测分布为 [ 0.2 , 0.8 ] [0.2,0.8] [0.2,0.8],则 k l kl kl散度为:

k l = ( 0.1 ∗ l o g 0.1 − 0.1 ∗ l o g 0.2 ) + ( 0.9 ∗ l o g 0.9 − 0.9 ∗ l o g 0.8 ) kl=(0.1*log0.1-0.1*log0.2)+(0.9*log0.9-0.9*log0.8) kl=(0.1log0.10.1log0.2)+(0.9log0.90.9log0.8)

KL散度相关问题
分布有0值怎么办

在实际的预测当中是很有可能遇到预测为0值得,一旦遇到0,由于计算当中有 l o g log log K L KL KL就会不可计算,在pytorch中表现为Nan值。为了防止这种事情发生,我们可以给预测值加上一个很小的数,比如 1 e − 10 1e^{-10} 1e10

pytorch为什么要softmax,而且要进行log运算

​ 比如在三分类问题中,模型最后的输出为三个值,分别对应三个分类, s o f t m a x softmax softmax就是为了保证这三个值和为1,如果不等于1,算出来的 K L KL KL值就有可能为负数。

​ 至于为什么要用 l o g log log运算,我也不清楚,就当是pytorch的规定。

能不能用sigmoid

​ 可以用,会多一些步骤

​ 在二分类任务中,最后输出的可能是一个值,经过 s i g m o i d sigmoid sigmoid后变成一个概率,这个概率就代表了一个分类,直接用1减去预测的概率就是另一个分类的概率,这个时候如果计算 K L KL KL很容易出现负值,例如真实分布 [ 0.2 ] [0.2] [0.2],预测分布 [ 0.5 ] [0.5] [0.5],则 K L = 0.2 l o g 0.2 − 0.2 l o g 0.5 = − 0.183 KL=0.2log0.2-0.2log0.5=-0.183 KL=0.2log0.20.2log0.5=0.183,为负数。

​ 因为这个时候知识计算一个类别的 K L KL KL散度,另一个类别没有计算,为了避免为负值的情况,我们可以将真实分布和预测分布手动都扩展一个维度,真实分布为 [ 0.2 , 0.8 ] [0.2,0.8] [0.20.8],预测分布为 [ 0.5 , 0.5 ] [0.5,0.5] [0.50.5],这样就不会出现负数了。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值