KL散度的概念来源于信息熵,有关信息熵的概念和相关资料在这里进行解释和说明。
在NLP的优化中,因为语言模型的损失函数基础,是一个由分布构成的方程(Softmax),所以在相关的论文中,可能会遇到使用KL散度对损失函数进行优化的情况,我们经常看到的KL散度形式如下:
这个方程是什么意思呢,下面我们开始介绍KL散度,即相对熵。
交叉熵
很多文章先介绍相对熵,再介绍交叉熵, 我看了许多资料没有确定它们起源,在这里我仅表达自己的理解。
交叉熵可以理解为:存在真实分布P(x),和任意非真实分布Q(x),使用分布Q表征分布P的平均编码长度叫做交叉熵。
在信息熵中,我们可以使用bit对信息进行编码,1个bit代表了一次抛硬币的信息量,即两个等概率事件构成的平均分布:
我们可以把对分布P(coin)的信息熵分解为:
同样的,对真实分布P,信息熵为:
其中,h(i)代表了事件的信息量,H(P)为随机分布P的信息熵,即为真实分布P所需的平均编码长度。
而如果我们用Q来表示真实分布P的平均编码长度,则只改变了每个事件的信息量,并不改变每个事件的发生概率,所以我们使用h(i in Q)来代替h(i in P),则:
这就是交叉熵方程,关于交叉熵方程在机器学习中Loss函数的应用,我们可以把非真实分布Q理解为模型预测出的结果分布,那么交叉熵衡量了用预测分布表示真实分布所需的平均编码长度。注意到,当Q分布无限接近于P分布时,交叉熵方程取得最小值。这一结论可以通过Gibbs不等式证明,会在下文介绍。
额外解释一下平均编码长度,在通信过程中,信息得表达是离散的,我们只能用最小单位bit,即0或1表达事件。这也是我们为什么取log为2的原因(并不是因为想用掷硬币来表示所有事件),如果我们想用bit来表示掷硬币,那需要1个bit的信息传输,每次传0或者1,对方就能知道掷硬币的结果;同理,如果我们想传输一个更复杂的事件,我们通过信息熵的公式,也可以推算出传递这个事件分布所需要的最小bit数,所以通常我们对信息熵向上取整。(*信息编码又是一个题外话,大家可以自行查阅:霍夫曼编码,香农编码等等)
至此,我们理解了交叉熵:使用非真实分布Q表示真实分布P所需的平均编码长度。
相对熵
有了交叉熵的基础,相对熵就很好理解了。我们知道当Q越接近P的时候,交叉熵越紧接P的信息熵,但这样好像有点麻烦,我们不如直接定义一下信息熵到交叉熵的距离,即相对熵。
这个解释下,相对熵的公式为;
由信息熵与交叉熵的公式,我们可以得到:
这就是相对熵,即KL散度的公式。
由于前面说到,交叉熵一定比信息熵大,所以KL散度恒大于0。由Gibbs inequality可证。
吉布斯不等式:
对任意 ,存在:
KL散度的性质
- 当P与Q相同时,KL散度为0
- KL散度有不对称性,即
(所以只能做为度量用)
- KL散度恒非负
即交叉熵衡量了真实分布与非真实分布之间的距离(但不是距离,因为非对称性),所以我们在机器学习中可以使用交叉熵作为loss,也可以尝试使用KL散度即散度拓展作为loss(有paper在研究)。
到此KL散度的介绍结束,有关更多的延申,可以查找资料:
Jensen不等式;
JS散度:对KL散度非对称性的修补;
散度:KL散度为
散度的一种情况,在一些研究中,也有学者对使用
散度作为loss方程进行研究;